Введение в RTOS и встраиваемые системы
Системы реального времени
Система реального времени - ограниченная по времени система, имеющая чётко определенные, фиксированные временные ограничения. Обработка должна быть выполнена в течение определенного времени, иначе система выйдет из строя. Такие системы являются либо событийно-ориентированными (event-driven), либо с разделением времени (time-sharing). Первые переключают задачи на основе их приоритетов (это также называется вытесняющим планированием), вторые же переключают задачи на основе тактовых прерываний (clock interrupts). Большинство RTOS используют алгоритм вытесняющего планирования (preemptive scheduling).
Если система реального времени не отвечает на запрос пользователя в течение ожидаемого времени, это несоответствие может привести к опасным последствиям.
Примером системы реального времени является оборудование, используемое в медицинских целях, например, система доставки лекарств. В этом случае система должна постоянно отслеживать свое состояние и реагировать на него в течение определенного времени, чтобы предотвратить любые негативные последствия для пациента.
В подобных системах операционная система должна определять приоритеты возникающих задач и предоставлять доступ к определенным компонентам программного управления для управления аппаратным обеспечением. Системы реального времени имеют ограниченный объем памяти, поскольку они малы и должны быть очень экономичными. Поэтому операционные системы, созданные для таких приложений, обычно имеют только функции, необходимые для конкретного типа оборудования, на которое они ориентированы, а также очень маленький объем памяти.
Операционные системы реального времени
Операционная система реального времени (RTOS) - это операционная система (ОС), предназначенная для обслуживания приложений, которые обрабатывают данные в реальном времени, то есть по мере их поступления, обычно без задержек. Требования к времени обработки (включая любые задержки ОС) измеряются десятыми долями секунд или еще более короткими промежутками времени.
Ключевой характеристикой RTOS является постоянство количества времени, которое требуется для принятия и завершения задачи приложения. Изменчивость времени завершения задачи (также известная как джиттер) в RTOS детерминирована.
Система жёсткого реального времени имеет меньший джиттер (jitter), чем система мягкого реального времени. Если в "мягкой" RTOS задержка ответа допустима, то в "жёсткой" - нет. RTOS, которая обычно или в целом может уложиться в срок, является мягкой RTOS, но если она может уложиться в срок детерминированно, то это жёсткая RTOS. Основной целью проектирования RTOS является не высокая пропускная способность, а скорее гарантированная задержка той или иной категории производительности. Другими словами, ожидается, что RTOS будут иметь минимальную задержку прерывания и минимальную задержку переключения потоков; RTOS ценится больше за то, насколько быстро или предсказуемо она может реагировать, чем за объем работы, который она может выполнить за определенный период времени.
RTOS включает в себя усовершенствованный алгоритм планирования задач в системе. Гибкость планировщика позволяет более широко организовать работу компьютерной системы с различными приоритетами приложений в системе, но ОС реального времени чаще всего предназначена для определенного набора приложений.
Наиболее распространенными конструкциями RTOS являются:
- Управляемые событиями (event-driven).
Задачи переключаются только тогда, когда требуется обслуживание события с более высоким приоритетом; этот тип алгоритма переключения называется вытесняющим или приоритетным планированием.
- С разделением времени (time-sharing).
Задачи переключаются как по регулярному тактовому прерыванию, так и по событиям; примером алгоритма переключения с разделением времени является round-robin.
Проекты с разделением времени переключают задачи чаще, чем это строго необходимо, но обеспечивают более плавную многозадачность, создавая иллюзию, что процесс или задача используется машиной единолично.
В RTOS задача может находиться в одном из трех различных состояний.
- Выполняется (running, выполняется на процессоре).
- Готова (ready, готовность к выполнению).
- Заблокирована (blocked, ожидание события, например, ввода/вывода).
Для задач могут быть определены и другие состояния, но три вышеперечисленных являются стандартными и обычно достаточными для большинства RTOS.
Существуют также различные типы задач, которые могут быть определены и использованы:
-
Периодические задачи.
Это задачи, которые необходимо выполнять через регулярные промежутки времени. Как только такая задача завершена, она возвращается в состояние "заблокирована" до следующего временного интервала, в который её необходимо выполнить.
-
Непериодические задачи.
Это задачи, выполняемые по мере необходимости, например, обслуживание прерываний. После завершения задачи такого типа она возвращается в состояние "заблокирована", пока другое событие не вызовет эту задачу.
-
Непрерывные задачи.
Это задачи, которые выполняются безостановочно. Обычно это задачи с очень низким приоритетом, которые позволяют выполнять другие задачи.
В планировщике RTOS могут использоваться различные алгоритмы планирования. Ниже перечислены некоторые из наиболее часто используемых алгоритмов:
- кооперативное планирование;
- вытесняющее планирование;
- планирование с монотонной скоростью (rate monotonic);
- round-robin;
- вытесняющее планирование с фиксированным приоритетом (fixed-priority preemptive scheduling);
- по ближайшему сроку завершения (earlier deadline first);
- статическое планирование (static time).
Взаимодействие между задачами и совместное использование ресурсов
Распределение ресурсов и межзадачное взаимодействие поддерживаются в RTOS с помощью одной или нескольких из следующих техник:
- временная маскировка или отключение прерываний;
- мьютексы;
- очереди;
- семафоры.
Эти техники будут описаны в последующих лекциях данного курса.
Распределение памяти
Распределение памяти имеет решающее значение в RTOS, поскольку утечка памяти может привести к резкому снижению производительности, что неприемлемо для системы реального времени. Распределение памяти может быть динамическим или статическим.
Динамическое распределение памяти должно хорошо обрабатываться RTOS, чтобы избежать неправильного использования ресурсов памяти. Преимуществом динамического распределения, однако, является большая гибкость для разработчика приложений. Поскольку ОС управляет распределением памяти, она может выделять и освобождать память по мере необходимости и использования.
Статическое распределение памяти, с другой стороны, дает разработчику приложения больше контроля над распределением и деаллокацией памяти в системе.
Доступные решения RTOS
В прошлом RTOS создавались производителями специально под требования их аппаратных средств. Поскольку большинство аппаратных средств было адаптировано к пользовательским приложениям, разработчики этих аппаратных средств отличали свои устройства от устройств конкурентов, предоставляя высококачественные программные интерфейсы и высокопроизводительное ПО. В результате RTOS играла решающую роль в отличии одного продукта от другого.
Поскольку RTOS была одним из основных отличий между продуктами, предлагаемыми различными компаниями, исторически это было программное обеспечение с закрытым исходным кодом, которое поставлялось по цене лицензии.
Однако в последнее время аппаратное обеспечение стало более распространенным, и теперь разница между продуктами в основном заключается в пользовательском прикладном программном обеспечении, которое разрабатывает каждая компания-производитель.
По этой причине в настоящее время существуют различные RTOS с открытым исходным кодом, которые разработчики могут использовать со своим оборудованием для создания систем реального времени.
Примеры RTOS с закрытым и открытым исходным кодом перечислены ниже (расположены в алфавитном порядке, а не в порядке предпочтения):
- Deos (DDC-I)
- embOS (SEGGER)
- FreeRTOS (Amazon)
- Integrity (Green Hills Software)
- Keil RTX (ARM)
- LynxOS (Lynx Software Technologies)
- MQX (Philips NXP / Freescale)
- Nucleus (Mentor Graphics)
- Neutrino (BlackBerry)
- PikeOS (Sysgo)
- SafeRTOS (Wittenstein)
- ThreadX (Microsoft Express Logic)
- µC/OS (Micrium)
- VxWorks (Wind River)
- Zephyr (Linux Foundation)
Мы изучим FreeRTOS и то, как её можно перенести на процессор RISC-V позже в этом курсе.
Контрольные вопросы
- Что такое встраиваемые системы?
- Какие аппаратные компоненты обычно входят в состав встраиваемой системы?
- Какие программные компоненты обычно входят в состав встраиваемой системы
- Какую роль печатная плата и программное обеспечение драйвера играют в поддержке аппаратного обеспечения?
- Чем отличаются системы реального времени от систем общего назначения?
- Каковы требования к операционным системам реального времени?
- Что в системах реального времени ценится больше: объём работы, выполняемый в единицу времени, или скорость/предсказуемость отклика?
- Какие виды алгоритмов планирования задач чаще всего используются в операционных системах реального времени?
- Какие примеры операционных систем реального времени с открытым и закрытым исходным кодом можно привести?