Операционные системы реального времени для начинающих

  • Tutorial
Привет, Хабр!
Сегодня я расскажу о такой интересной штуке как операционная система реального времени(ОСРВ). Не уверен, что это будет интересно для бывалых программистов, но, думаю, новичкам понравится.

Что такое ОСРВ?


Если мы посмотрим в Википедию, то увидим аж 4 определения.
Если же говорить вкратце — то ОСРВ — это операционная система, реагирующая на внешние события в определенный промежуток времени. Отсюда мы и можем понять основное предназначение ОСРВ — приборы, в которых необходима быстрая реакция на события (однако ни в коем случае не путайте работу ОСРВ с прерываниями).

Зачем она нам нужна?


На то есть довольно много причин.
Во-первых ОСРВ поддерживает многозадачность, приоритеты процессов семафоры и многое другое.
Во-вторых она очень легкая и почти не требует ресурсов.
В-третьих все вышесказанное мы можем получить практически на любом железе (например, FreeRTOS запускается даже на 8-битных AtMega).
Ну и в-четвертых: просто поиграться и получить удовольствие.

Обзор 3 известных ОСРВ.


Внимание: дальше идет мое личное мнение.

FreeRTOS

Одна из самых популярных ОСРВ на сегодняшний день. Портирована на огромное количество железа. Оффициальный сайт.

Плюсы

1) Бесплатная
2) Портирована на большое количество железа
3) Мощный функционал
4) Есть различные библиотеки: графика, интернет и другое.
5) Хорошая документация.
Минусы

1)Довольно-таки сложный процесс портирования на новое железо.

Вывод: Это действительно профессиональная ОСРВ с хорошей документацией. Будет хороша для новичка, если на его железо уже есть порт.

KeilRTX

До последнего времени эта ОСРВ была коммерческой, но недавно стала открытой. Работает только на архитектуре arm. Оффициальный сайт.

Плюсы

1)Бесплатная
2)Легко портируется на новое железо( в пределах архитектуры arm).
3) Есть различные библиотеки: графика, интернет и другое.

Минусы

1)Работать на в Keil с ней практически нереально
2) Немного урезанный функционал
3) Поддерживается только arm.
4)(на личном опыте) Проигрывает многим ОСРВ по скорости.
Вывод: идеально подойдет для новичка и мелких проектов.

uc/os

Мощная коммерческая ОСРВ. Сайт.

Плюсы

1) Огромное количество функций и библиотек.
2) Поддерживает много железа
Минусы

1)Коммерческая.
2) Сложна в использовании.

Вывод: назвать ее ОСРВ для новичка можно с большой натяжкой.

Другие интересные ОСРВ


RTLinux ОСРВ на основе обычного Линукса.
QNX ОСРВ на основе Unix.

Особенности разработки с использованием ОСРВ


Ну во-первых надо понять следующее: ОСРВ- это не Windows. Его нельзя установить. Эта система просто компилируется с Вашей программой.
При написании программ с ОСРВ не используются функции в обычном их понимании. Вместо функций используются процессы( или таски).Отличие в том что процессы, в отличии от функций, являются бесконечными циклами и никогда не заканчиваются(если только кто-то или он сам его не убъет — то есть выгрузит из памяти).
Если включено несколько процессов, то ОСРВ переключает их, выдавая машинное время и ресурсы по очереди. Вот тут то и возникает понятия приоритета процесса- если двум процессам единовременно нужно машинное время, то ОСРВ даст его тому, у кого приоритет больше.
В ОСРВ есть специальные функции задержки- чтобы время зря не пропадало на время задержки одного процесса выполняется второй.
Теперь поговорим о такой вещи как семафор- эта такая штука, которая управляет доступом процесса к ресурсам приложения. Для каждого ресурса есть маркер — когда процессу нужен ресурс — он его забирает и пользуется данным ресурсом. Если маркера нет, то процессу придется ждать, пока его вернут. Приведу пример: разные процессы отправляют информацию по одному UART. Если бы не было семафора, то они бы отправляли байты по очереди и получилась бы неразбериха. А так первый процесс взял маркер на UART отправил сообщение и отдал второму( и так — до бесконечности).

Дополнительные библиотеки ОСРВ.


Часто ОСРВ предлагают различные библиотеки для работы, например, с графикой, интернетом и т.д. Они действительно удобны и не стоит брезгать их использовать. Однако, помните, что без ОСРВ, для которой они написаны, они работать не будут.
Вот примеры:
Для RTX графика интернет Файловая система

Во второй( и, наверное, последней ) части мы поговорим о мьютексах, буферах сообщений и попрактикуемся в их использовании.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 14

    +21
    К сожалению, ни о чём. Постов про FreeRTOS на хабре предостаточно.

    RTOS не обязательно компилируется вместе с исполнимым проектом: часть RTOS могут динамически загружать программы.

    QNX — это не UNIX и никогда им не была, если не ошибаюсь. Она стала POSIX-совместимой в 4 версии. Потом были улучшения совместимости с Linux и FreeBSD, которые произошли в QNX Neutrino.

    Бывает мягкое и жесткое RT. Современные mainstream OS в той или иной степени являются системами с мягким realtime (например, воспроизведение звука, декодирование видео или изохронная передача данных являются задачами мягкого реального времени).

    Дальше разбирать лень.
      +5
      Статья вызывает ощущение, что такие явления как планировщик, приоритет процессов, семафоры, применяются только в ОСРВ. Если поменять «ОСРВ» на «Многозадачные ОС общего назначения», то в разделе про особенности появится не так уж много неточностей. Так является ли все это особенностями ОСРВ?

      Взять даже слова о функциях. Если верить статье, вместо них используются процессы. И дальше идет описание процессов, самых обычных, всем известных. Но если это действительно процесс в привычном понимании, то о каких функциях шла речь? И отличается ли этот процесс чем-то от процесса в ОС общего назначения?

      И да, не стоило разбивать статью на части.
        +1
        [оффтоп]Оформление заголовков[/оффтоп]
        Вообще не упоминули главного в операционных системах реального времени, как и в любых программах реального времени — функции в них выполняются за промежуток времени, который меньше, чем поступление новых данных. Если же она не успела, то тут два варианта — либо обработать эти данные, но пропустить следующие (или сложить в буфер, но тогда появится задержка), либо оборвать текущую операцию и обрабатывать новые данные.
        Ну и «реагирующая на внешние события» — не совсем так. Как правило, в таких системах, как вы верно заметили, крутится вечный цикл, который и снимает показания датчиков. Внешних событий особо таки нет, разве что как раз прерывания (по таймеру, в основном).

        Мне вот, к слову, стало интересно, как он может реагировать на внешние события в момент их поступления не по прерываниям?
          +2
          Вообще не упоминули главного в операционных системах реального времени, как и в любых программах реального времени — функции в них выполняются за промежуток времени, который меньше, чем поступление новых данных.
          Это не свойство ОСРВ. Первичное свойство RTOS — предсказуемое время реакции на событие. Допустим, при ниспадающем фронте на ноге необходимо выполнить какое-либо действие гарантированно за время не более, чем 10ms (если говорить про жесткий realtime, в мягком — желательно выполнить не более чем). А успели или нет обработать данные — вопрос вторичный. Например, может быть пропуск цикла из-за того, что выполнялась более приоритетная задача.

          Как правило, в таких системах, как вы верно заметили, крутится вечный цикл, который и снимает показания датчиков. Внешних событий особо таки нет, разве что как раз прерывания (по таймеру, в основном).
          В части систем контроллер спит большую часть времени (для снижения энергопотребления), пробуждаясь по внешнему событию: обработка происходит по прерыванию. Кроме того, прерывания часто позволяют реализовать приоритеты обработки.

          В части процессоров, например, АЦП может запускаться таймером без участия ядра и вызывать прерывание по готовности результата (чтобы не заниматься busy-wait'ом).

          Системный таймер при использовании ОС с вытеснением потоков (preemptive) есть всегда, чтобы передавать управление ядру и, соответственно, планировщику. Та же FreeRTOS может использовать кооперативную модель, тогда таймер (как и планировщик =)) не нужен.
          0
          Первичное свойство RTOS — предсказуемое время реакции на событие

          На мой взгляд — это одно и то же. Зная время реакции мы можем подобрать квантование данных по времени таким образом, чтобы наша функция укладывалась в эти промежутки (и, соответственно, зная, с какой частотой нам нужно обрабатывать данные, мы можем подобрать процессор и алгоритм, чтобы он успевал их обрабатывать). Нельзя назвать программу программой реального масштаба времени, если она обрабатывает данные минуту, а они поступают каждую секунду, даже если нам точно известно время реакции на событие.

          P.S. Промахнулся. Это ответ к habrahabr.ru/post/208780/#comment_7190210
            0
            Хотя, каюсь, немного не так понял вопрос. Действительно — уложиться в отведенный промежуток времени задача программы (функции), а не ОС. Задача ОС — дать предсказуемое время выполнения этой функции. Что-то с утра еще не проснулся.
              0
              Да, ради этого иногда используются naked функции, считают за сколько тактов процессор передаст управления обработчику прерывания.

              Например, в ARM Cortex-M вход и выход в/из обработчика прерываний — максимум 12 циклов (при отсутствии задержек выборки инструкции), если сработало несколько — переключение между обработчиками — не более 6 циклов. За это время ядро успевает: сохранить состояние регистров на стэк, выполнить выборку, дешифровку и поставить на исполнение первую инструкцию обработчика.
            +6
            QNX — не на основе UNIX. Она POSIX-совместима, но именно к UNIX не имеет никакого отношения.

            Забыли Kolibri)) А где VxWorks???? QNX и VxWorks — это основные флагманы ОСРВ.
            WindowsCE еще… да и много других…
              +1
              Если это вводные слова к циклу — то ничего, более-менее. Если это первая из двух, где в таком же объеме и формате нам расскажут про мьютексы, да еще и практика будет… Тогда, извините, но это ни о чем. Это констатация факта о существовании ОСРВ.

              Авансом поставил плюсик, надеясь на лучшее. Хотелось бы в частности почитать, в каких случаях какую ОСРВ предпочесть, и зачем она таки нужна, особенно если можно обойтись без многозадачности. А то из поста следует, что поддержка многозадачности — единственная причина. Ибо «Во-вторых она очень легкая и почти не требует ресурсов» — а без нее вообще не надо на нее ресурсов, и «почти» — это сколько в граммах? «В-третьих все вышесказанное мы можем получить практически на любом железе» — и что? Если можно — не значит нужно. «В-четвертых: просто поиграться» — мне бы поработать, и я задумался было — а оно мне надо? А то до сих пор обходился, а вдруг с ОСРВ реально лучше будет? Ответа не получил.
                +1
                Ну и в рамках коммунистической программы ликвидации безграмотности: сайт оФициальный. Простите, что не в личку
                  0
                  GNU/Linux тоже можно использовать как ОСРВ, но это отдельная тема
                    0
                    С мягким RT? Если с жестким и это не RTLinux — расскажите подробнее.
                      0
                      Имел ввиду с мягким RT.
                      C жестким RT нашел еще один проект Advanced Real-Time Linux (ART-Linux).
                      Не являюсь специалистом по ОС и тем более по ОСРВ, поэтому подробнее не будет.
                      Сам желаю увидеть статью о RTLinux на хабре.
                    +2
                    >1)Довольно-таки сложный процесс портирования на новое железо.

                    Хотел бы я тогда посмотреть на легкий процесс. У FreeRTOS, по-моему, самый простой процесс портирования, который только возможен — у нее вообще отсутствует HAL для периферии, есть только абстракция на таймер, собственно, это и есть единственная ее часть, которую нужно портировать.

                    Only users with full accounts can post comments. Log in, please.