Создание приложений на базе RISC-V и FreeRTOS

Введение в RTOS и встраиваемые системы

Разбить на страницы
Показывать лекцию целиком

Эту лекцию мы начнем с объяснения того, что такое система. Мы рассмотрим, как классифицируются системы и как они развивались на протяжении многих лет автоматизации. Затем обсудим, как электроника стала их частью и, как следствие, возникновение встраиваемых систем. После чего мы представим компоненты встраиваемой системы и объясним, как каждый из них вносит свой вклад в систему. Далее будут обсуждены типичные уровни встраиваемого программного обеспечения (ПО). В завершение лекции мы рассмотрим, что такое операционная система реального времени (RTOS) и как она может быть полезна в системе.

К концу этой лекции вы будете способны:

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

    Что такое система?

    Система - это набор компонентов, собранных вместе для выполнения последовательности простых или сложных операций. Несколько систем могут также работать вместе, создавая более сложные системы.

    За последние сто лет в ходе промышленного и технологического прогресса были разработаны различные типы систем. В целом их можно разделить на пять категорий.

  • Чисто механические (например, двигатель внутреннего сгорания).
  • Механические и электрические (например, традиционное заводское оборудование).
  • Механические, электрические и электронные (например, программируемые логические контроллеры, они же ПЛК).
  • Электромеханические с точным управлением (например, числовое программное управление, оно же ЧПУ).
  • Электромеханические и сетевые (например, автоматизированные заводы).
  • Встраиваемые системы (ВС) по праву должны называться встраиваемыми электронными системами, поскольку они в основном построены из электронных компонентов и используются для управления механическими или электромеханическими системами. Встраиваемые электронные системы чаще называют "встраиваемыми системами". В зависимости от сферы применения их можно разделить на следующие категории:

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

  • Системы управления без обратной связи.

    Это системы, которые не учитывают вывод системы при определении последующих её операций. Такие системы обычно являются ручными или полуавтоматическими, где требуется определенное взаимодействие человека с системой.

  • Системы управления с обратной связью.

    Система способна получать обратную связь с выводом и компенсировать любые ошибки, обнаруженные в выводе. Эти типы систем обычно являются автоматическими и требуют очень мало или вообще не требуют вмешательства человека в течение своего рабочего цикла.

  • Ниже приведены некоторые примеры из множества областей, где широко используются встраиваемые системы:

  • промышленность;
  • медицина;
  • автомобильная промышленность;
  • оборона.
  • Изучение встраиваемых систем

    Электронная встраиваемая система - это комбинация аппаратных и программных компонентов. Как упоминалось выше, эти системы стали называть просто встраиваемыми, отказавшись от части названия "электронная". Удаление части названия произошло от общего понимания того, что встраиваемые системы содержат значительное количество электроники. Во встраиваемых системах аппаратное и программное обеспечение работают вместе для реализации требуемой функциональности системы. В зависимости от вида применения количество аппаратного и программного обеспечения в системе может варьироваться.

    Аппаратные компоненты

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

  • Печатная плата (printed circuit board, PCB).

    Печатная плата - это плата, которая удерживает электронные компоненты системы вместе; она также отвечает за обеспечение функциональности, такой как связь между электронными компонентами, механическая стабильность оборудования, стабильность сигнала и целостность сигнала.

  • Электронные компоненты, установленные на печатной плате.

    Эти компоненты реализуют требуемую функциональность системы. Они работают согласованно для достижения требуемого потока управления и других функций системы.

  • Система отображения.

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

  • Устройства ввода.

    Устройства ввода, доступные во встраиваемых системах, обычно представляют собой небольшие клавиатуры или сенсорные экраны, которые позволяют пользователю подавать сигналы системе для получения ответа и управления поведением системы.

  • Центральный контроллер.

    В дополнение к вышеперечисленным компонентам встраиваемые системы содержат центральный контроллер (микроконтроллер или микропроцессор), который функционирует как "мозг" системы и отвечает за её общее управление, реагирование на возникающие ошибки и настройку реакции системы в соответствии с пользовательскими настройками и пользовательским вводом.

  • Программные компоненты

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

  • Программное обеспечение драйвера (или пакеты поддержки платы, BSP (board support packages)). Это самый нижний уровень программного компонента встраиваемой системы, который напрямую взаимодействует с аппаратным компонентом. Этот тип программного обеспечения также называют низкоуровневым драйвером, поскольку он отвечает за управление аппаратным обеспечением. Он взаимодействует с аппаратурой на уровне регистров и обычно написан на языке программирования C или на языке ассемблера. Как правило, эта часть программного компонента предоставляется производителем контроллера и никогда не изменяется.
  • Промежуточное ПО. Программное обеспечение промежуточного уровня отвечает за взаимодействие между драйвером и более высоким прикладным уровнем программного компонента. Уровень промежуточного ПО является более абстрактным, чем уровень драйвера, и поэтому предоставляет пользователю больше контроля над поведением системы. Одним из ключевых компонентов промежуточного ПО является операционная система. Операционная система является своего рода "мозгом" программного компонента и отвечает за управление поведением системы в различных условиях эксплуатации. Она дает указания другим программным компонентам относительно того, какой компонент когда и как должен работать. В этом курсе мы рассмотрим, как ведет себя операционная система и как она управляет различными программными и аппаратными компонентами системы.
  • Прикладное ПО. Прикладное программное обеспечение?-?это верхний уровень программного компонента, непосредственно взаимодействующий с пользователем. Этот тип программного обеспечения создан для удобства пользователя и призван обеспечить большую гибкость и практичность для пользователя. Этот уровень также взаимодействует с промежуточным программным обеспечением.
  • Типы операционных систем

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

    Основываясь на требованиях пользователя к выполнению задач, системы можно разделить на системы реального времени (real-time operating system) и общего назначения (non-real-time operating system).

    Системы общего назначения

    Системы, которые не обязаны отвечать на запрос пользователя в течение установленного времени, классифицируются как системы общего назначения.

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

    Для таких систем достаточно операционной системы из семейств Windows или Linux. Кроме того, эти операционные системы требуют значительного объема памяти, который обычно недоступен для встраиваемых систем.

    Системы реального времени

    Система реального времени - ограниченная по времени система, имеющая чётко определенные, фиксированные временные ограничения. Обработка должна быть выполнена в течение определенного времени, иначе система выйдет из строя. Такие системы являются либо событийно-ориентированными (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 позже в этом курсе.

    Контрольные вопросы

  • Что такое встраиваемые системы?
  • Какие аппаратные компоненты обычно входят в состав встраиваемой системы?
  • Какие программные компоненты обычно входят в состав встраиваемой системы
  • Какую роль печатная плата и программное обеспечение драйвера играют в поддержке аппаратного обеспечения?
  • Чем отличаются системы реального времени от систем общего назначения?
  • Каковы требования к операционным системам реального времени?
  • Что в системах реального времени ценится больше: объём работы, выполняемый в единицу времени, или скорость/предсказуемость отклика?
  • Какие виды алгоритмов планирования задач чаще всего используются в операционных системах реального времени?
  • Какие примеры операционных систем реального времени с открытым и закрытым исходным кодом можно привести?
  • Страницы:

    Эту лекцию мы начнем с объяснения того, что такое система. Мы рассмотрим, как классифицируются системы и как они развивались на протяжении многих лет автоматизации. Затем обсудим, как электроника стала их частью и, как следствие, возникновение встраиваемых систем. После чего мы представим компоненты встраиваемой системы и объясним, как каждый из них вносит свой вклад в систему. Далее будут обсуждены типичные уровни встраиваемого программного обеспечения (ПО). В завершение лекции мы рассмотрим, что такое операционная система реального времени (RTOS) и как она может быть полезна в системе.

    К концу этой лекции вы будете способны:

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

    Что такое система?

    Система - это набор компонентов, собранных вместе для выполнения последовательности простых или сложных операций. Несколько систем могут также работать вместе, создавая более сложные системы.

    За последние сто лет в ходе промышленного и технологического прогресса были разработаны различные типы систем. В целом их можно разделить на пять категорий.

  • Чисто механические (например, двигатель внутреннего сгорания).
  • Механические и электрические (например, традиционное заводское оборудование).
  • Механические, электрические и электронные (например, программируемые логические контроллеры, они же ПЛК).
  • Электромеханические с точным управлением (например, числовое программное управление, оно же ЧПУ).
  • Электромеханические и сетевые (например, автоматизированные заводы).
  • Встраиваемые системы (ВС) по праву должны называться встраиваемыми электронными системами, поскольку они в основном построены из электронных компонентов и используются для управления механическими или электромеханическими системами. Встраиваемые электронные системы чаще называют "встраиваемыми системами". В зависимости от сферы применения их можно разделить на следующие категории:

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

  • Системы управления без обратной связи.

    Это системы, которые не учитывают вывод системы при определении последующих её операций. Такие системы обычно являются ручными или полуавтоматическими, где требуется определенное взаимодействие человека с системой.

  • Системы управления с обратной связью.

    Система способна получать обратную связь с выводом и компенсировать любые ошибки, обнаруженные в выводе. Эти типы систем обычно являются автоматическими и требуют очень мало или вообще не требуют вмешательства человека в течение своего рабочего цикла.

  • Ниже приведены некоторые примеры из множества областей, где широко используются встраиваемые системы:

  • промышленность;
  • медицина;
  • автомобильная промышленность;
  • оборона.
  • Изучение встраиваемых систем

    Электронная встраиваемая система - это комбинация аппаратных и программных компонентов. Как упоминалось выше, эти системы стали называть просто встраиваемыми, отказавшись от части названия "электронная". Удаление части названия произошло от общего понимания того, что встраиваемые системы содержат значительное количество электроники. Во встраиваемых системах аппаратное и программное обеспечение работают вместе для реализации требуемой функциональности системы. В зависимости от вида применения количество аппаратного и программного обеспечения в системе может варьироваться.

    Аппаратные компоненты

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

  • Печатная плата (printed circuit board, PCB).

    Печатная плата - это плата, которая удерживает электронные компоненты системы вместе; она также отвечает за обеспечение функциональности, такой как связь между электронными компонентами, механическая стабильность оборудования, стабильность сигнала и целостность сигнала.

  • Электронные компоненты, установленные на печатной плате.

    Эти компоненты реализуют требуемую функциональность системы. Они работают согласованно для достижения требуемого потока управления и других функций системы.

  • Система отображения.

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

  • Устройства ввода.

    Устройства ввода, доступные во встраиваемых системах, обычно представляют собой небольшие клавиатуры или сенсорные экраны, которые позволяют пользователю подавать сигналы системе для получения ответа и управления поведением системы.

  • Центральный контроллер.

    В дополнение к вышеперечисленным компонентам встраиваемые системы содержат центральный контроллер (микроконтроллер или микропроцессор), который функционирует как "мозг" системы и отвечает за её общее управление, реагирование на возникающие ошибки и настройку реакции системы в соответствии с пользовательскими настройками и пользовательским вводом.

  • Программные компоненты

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

  • Программное обеспечение драйвера (или пакеты поддержки платы, BSP (board support packages)). Это самый нижний уровень программного компонента встраиваемой системы, который напрямую взаимодействует с аппаратным компонентом. Этот тип программного обеспечения также называют низкоуровневым драйвером, поскольку он отвечает за управление аппаратным обеспечением. Он взаимодействует с аппаратурой на уровне регистров и обычно написан на языке программирования C или на языке ассемблера. Как правило, эта часть программного компонента предоставляется производителем контроллера и никогда не изменяется.
  • Промежуточное ПО. Программное обеспечение промежуточного уровня отвечает за взаимодействие между драйвером и более высоким прикладным уровнем программного компонента. Уровень промежуточного ПО является более абстрактным, чем уровень драйвера, и поэтому предоставляет пользователю больше контроля над поведением системы. Одним из ключевых компонентов промежуточного ПО является операционная система. Операционная система является своего рода "мозгом" программного компонента и отвечает за управление поведением системы в различных условиях эксплуатации. Она дает указания другим программным компонентам относительно того, какой компонент когда и как должен работать. В этом курсе мы рассмотрим, как ведет себя операционная система и как она управляет различными программными и аппаратными компонентами системы.
  • Прикладное ПО. Прикладное программное обеспечение?-?это верхний уровень программного компонента, непосредственно взаимодействующий с пользователем. Этот тип программного обеспечения создан для удобства пользователя и призван обеспечить большую гибкость и практичность для пользователя. Этот уровень также взаимодействует с промежуточным программным обеспечением.
  • Типы операционных систем

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

    Основываясь на требованиях пользователя к выполнению задач, системы можно разделить на системы реального времени (real-time operating system) и общего назначения (non-real-time operating system).

    Системы общего назначения

    Системы, которые не обязаны отвечать на запрос пользователя в течение установленного времени, классифицируются как системы общего назначения.

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

    Для таких систем достаточно операционной системы из семейств Windows или Linux. Кроме того, эти операционные системы требуют значительного объема памяти, который обычно недоступен для встраиваемых систем.

    Системы реального времени

    Система реального времени - ограниченная по времени система, имеющая чётко определенные, фиксированные временные ограничения. Обработка должна быть выполнена в течение определенного времени, иначе система выйдет из строя. Такие системы являются либо событийно-ориентированными (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 позже в этом курсе.

    Контрольные вопросы

  • Что такое встраиваемые системы?
  • Какие аппаратные компоненты обычно входят в состав встраиваемой системы?
  • Какие программные компоненты обычно входят в состав встраиваемой системы
  • Какую роль печатная плата и программное обеспечение драйвера играют в поддержке аппаратного обеспечения?
  • Чем отличаются системы реального времени от систем общего назначения?
  • Каковы требования к операционным системам реального времени?
  • Что в системах реального времени ценится больше: объём работы, выполняемый в единицу времени, или скорость/предсказуемость отклика?
  • Какие виды алгоритмов планирования задач чаще всего используются в операционных системах реального времени?
  • Какие примеры операционных систем реального времени с открытым и закрытым исходным кодом можно привести?
  • Вернуться к учебному плану