Когда мы слышим термин «операционная система», первое, что приходит нам в голову, это то, с чем мы имеем дело практически ежедневно — Windows, Linux, Ubuntu, Android. В основном мы связываем операционные системы с персональными компьютерами, но большинство цифровых электронных устройств также работает под управлением какой-то операционной системы. В мире уже насчитывается немало операционных систем, разработанных для микроконтроллеров, и они нам знакомы под названием Операционные Системы Реального Времени (ОСРВ, Real Time Operating System, RTOS). Словосочетание «реального времени» означает, что отклик ОСРВ должен быть быстрым на сколько это возможно или необходимо для данной задачи. У микроконтроллеров не так много памяти для хранения кода, поэтому ОСРВ содержат в себе только самые важные и нужные для работы элементы и функции. Они обеспечивают небольшие системы минимальным числом необходимых потоков, планированием и мониторингом нескольких задач.
Обычно ОСРВ является сегментом или частью всей программы, которая определяет приоритеты задач, обрабатывает сообщения задач и координирует действие всех этих задач. ОСРВ это сложное понятие, и разберем его на примере автомата состояния. Ниже приведен код автомата состояния:
while(1)
switch(state)
{ case 1: //Код задачи 1;
state= 2;
case 2: //Код задачи 2;
state= 3;
case 3: //Код задачи 3;
state= 4;
case 4: //Код задачи 4;
state=1;
}
В этом коде организуется определенная последовательность выполнения задач. В дальнейшем такой код может быть изменен и стать более комплексным. Программист может модифицировать его и помещать новые выражения для осуществления выбора (типа if, if-else, switch-case) с целью переключения между задачами.
ОСРВ обрабатывает выполняемые задачи и процедуры. Ее ядро выделяет ресурсы процессора конкретной задаче на определенное время. Она также проверяет приоритет задачи, упорядочивает сообщения задач и организует планирование.
Базовыми функциональными компонентами ОСРВ являются:
- планировщик задач
- службы ОСРВ
- механизмы синхронизации и обмена сообщений
Планировщик
Задача может иметь три состояния:
- готова к работе: состояние, когда задача имеет все ресурсы для того, чтобы быть в работе, но не находится в рабочем состоянии (состоянии выполнения)
- в работе: задача выполняется в данный момент времени
- блокирована: когда задача не имеет достаточно ресурсов для работы, она переходит в состояние блокировки
Для планирования задач применяются три подхода:
- Кооперативное планирование: задача перестанет быть активной, когда полностью завершится ее выполнение
- Циклическое планирование round-robin: каждой задаче присваивается фиксированный временной интервал, при этом задача должна завершить свое выполнение до окончания этого времени. В противном случае задача может «потерять» свой поток, и полученные при ее работе данные могут быть нарушены
- Проприетарное планирование: здесь временной промежуток зависит от приоритета. Обычно используются 256 уровней приоритета, и каждой задаче приписывается свой уровень. Некоторые системы могут иметь большее количество уровней приоритета.
Ядро отвечает за:
- создание задач
- удаление задач
- изменение приоритетов задач
- изменение состояний задач
Службы ОСРВ
Сердцем любой операционной системы является ядро. Задачи освобождены от мониторинга аппаратных средств, потому что целью ядра как раз и является управление и распределение ресурсов. Поскольку конкретные задачи не могут обрабатываться процессором все время, ядро должно предоставлять дополнительные службы, к которым относятся:
- обработчики прерываний
- службы синхронизации
- службы управления устройствами
- службы управления памятью
- службы ввода/вывода
Механизм обмена сообщениями
Механизм обмена сообщениями предоставляет средство связи с другими системами и между задачами. Механизм передачи сообщений включает в себя:
- семафоры
- флаги событий
- почтовые ящики
- каналы
- очереди сообщений
Семафоры используются для синхронизации доступа к общим ресурсам, таким как общие области данных. Флаги событий применяются для синхронизации взаимодействия между задачами. Почтовые ящики, каналы и очереди сообщений используются для отправки сообщений между задачами.
Перевод © digitrode.ru