Встроенные Системы Часть 9. ОС Реального Времени Кафедра Информатики, мат-мех СПбГУ Copyright © 2004 Victor Vengerov
Какие Бывают RTOS RTEMS ( VxWorks ( eCos ( Расширения реального времени для Linux, Windows NT «Самодельные» (proprietary) Другие коммерческие ОСРВ ( )
RTEMS Real-Time Executive for Missile Systems Military Systems Multiprocessor Systems Открытые исходные тексты Лицензия – похожа на GPL (RTEMS-приложения не попадают под действие) Нет лицензионных отчислений Хорошо переносима Богатый набор функциональных возможностей Зрелая, хорошо спроектированная система
Концепции RTEMS Объекты Определено несколько классов объектов (задачи, семафоры, …). Объекты имеют идентификатор. Объекты могут быть именованы. Объекты могут располагаться на разных узлах (процессорах). Определен набор операций над объектами.
Концепции RTEMS Менеджеры
Концепции RTEMS Интерфейсы RTEMS содержит внутреннее суперядро (score), не видимое для пользователя. На основе суперядра реализованы различные интерфейсы программирования: RTEMS API (основано на RTEID) POSIX API ITRON API
Задачи RTEMS Задача – нить исполнения кода, которая может претендовать на системные ресурсы. Задача представлена объектом Состояния задачи: Исполняемая Готовая к исполнению Блокированная Незапущенная Несуществующая (удаленная)
Изменения Состояний Задач
Приоритет Задачи Приоритет задачи – число Готовая задача с наибольшим приоритетом получает управление. Процессор разделяется между готовыми задачами с равным приоритетом. Приоритет можно изменять динамически.
Режимы и Атрибуты Задачи Режимы задачи: Преемственность (preemption) Разделение времени (timeslicing) Обработка асинхронных сигналов Уровень прерываний Атрибуты задачи Работа с плавающей точкой Нужно ли сохранять контекст FPU? Локальная или Глобальная Виден ли объект на других узлах многопроцессорной системы?
Менеджер Задач Создание Задачи Получение ID по имени Запуск и перезапуск задачи Приостановка и возобновление ВременнАя задержка Изменение приоритета задачи Изменение режима задачи Работа с «блокнотом» задачи Переменные задачи Удаление задачи
Таймер Объект «Таймер» позволяет спланировать выполнение действий в некоторый момент в будущем. С таймером связана процедура, которая будет вызвана в указанный момент времени. Процедура вызывается в контексте прерывания или специальной задачи Timer Server (в зависимости от типа таймера).
Менеджер Таймера Создание таймера Получение ID по имени Запуск интервального таймера Запуск будильника Отмена таймера Перезапуск таймера Запуск задачи обслуживания таймеров Удаление таймера
Семафор Объект, позволяющий синхронизировать исполнение задач и обеспечивающий защиту от одновременного доступа. С семафором связана целая переменная- счетчик. Бинарный семафор – счетчик принимает значения 0 и 1. При ожидании семафора может быть установлен таймаут.
Инверсия Приоритетов Низкоприоритетная задача захватила ресурс Высокоприоритетная задача ожидает освобождения этого ресурса Задача со средним приоритетом вытеснила низкоприоритетную задачу
Инверсия Приоритетов - Решения Наследование приоритета: Приоритет владеющей ресурсом задачи поднимается до уровня самой высокоприоритетной задачи, ожидающей этот ресурс. Подъем приоритета Приоритет получившей ресурс задачи поднимается до уровня, установленного при создании семафора.
Атрибуты Семафоров RTEMS_FIFO (default)/ RTEMS_PRIORITY RTEMS_BINARY_SEMAPHORE/ RTEMS_COUNTING_SEMAPHORE/ RTEMS_SIMPLE_BINARY_SEMAPHORE RTEMS_NO_INHERIT_PRIORITY (default)/ RTEMS_INHERIT_PRIORITY RTEMS_PRIORITY_CEILING/ RTEMS_NO_PRIORITY_CEILING default) RTEMS_LOCAL (default)/RT EMS_GLOBAL
Менеджер Семафоров Создание семафора Получение ID семафора по имени Захват семафора Освобождение семафора Удаление семафора
Очередь Сообщений Сообщение – буфер переменной длины, используемый для обмена информацией между задачами. Очередь сообщений – объект, к которому обращаются задачи для посылки и получения сообщений. Несколько сообщений могут находиться в очереди. Несколько задач могут ожидать сообщений из очереди. Ожидающие задачи могут активироваться в порядке их поступления или в соответствии с их приоритетом.
Менеджер Сообщений Создать очередь сообщений Получить ID очереди по имени Получить сообщение из очереди можно указать таймаут Поставить сообщение в очередь Поставить срочное сообщение в начало очереди Послать сообщение всем ожидающим задачам Узнать количество ожидающих сообщений Сбросить все сообщения из очереди
События События – простейший механизм синхронизации (не объект!) События направляются задачам Задачи могут ожидать наступления одного или всех событий из указанного множества События независимы и не несут данных События не сериализуются При ожидании наступления событий может быть указан таймаут
Менеджер Событий Послать множество событий задаче Ожидать условия поступления событий Наступление одного или всех событий из множества Сбрасывать или нет события? Таймаут
Раздел Памяти (Partition) Раздел памяти – объект, с которым связан непрерывный участок памяти, разделенный на буферы фиксированного размера. Раздел обеспечивает выделение и освобождение буферов. Раздел организован как список свободных буферов. Выделение и освобождение буфера – простая операция с предсказуемым временем.
Менеджер Разделов Создать раздел Получение ID раздела по имени Выделить буфер Неблокируемая операция Вернуть буфер Удалить раздел
Регион Объект «Регион» позволяет динамически распределять память сегментами переменного размера из непрерывного участка («куча»). Адрес сегмента выравнивается на заданный размер страницы. Задачи могут ожидать появления свободного пространства (по очереди или по приоритетам). Может быть указан таймаут.
Менеджер Регионов Создать регион Получить ID региона по имени Удалить регион Добавить участок памяти в регион Выделить сегмент из региона Вернуть сегмент в регион Получить размер сегмента
Менеджер Прерываний Установить процедуру обработки прерывания (и узнать адрес текущего обработчика) Разрешить прерывания Запретить прерывания Мгновенное разрешение прерываний Определить текущий контекст (задача или обработчик прерываний)
Ограничения на Обработчик Прерываний Обработчик прерываний не должен вызывать директивы, которые могут привести к блокировке можно Послать сообщение Послать событие Освободить семафор Приостановить/возобновить задачу Нельзя Захватить семафор Ожидать события
Расширения Пользователя Объект, позволяющий связать обработчики со следующими событиями: Создание задачи Запуск задачи Перезапуск задачи Удаление задачи Переключение между задачами Начало выполнения задачи Окончание выполнения тела задачи Фатальная ошибка
Периодические Задачи Периодическая задача – задача, которая должна выполняться через заданный интервал – период. Объект rate monotonic period позволяет возобновлять выполнение задачи строго через указанный период, вне зависимости от времени работы задачи.
Менеджер Периодических Задач Создать период Получить идентификатор периода по имени Отменить период Завершить текущий период и начать следующий Получить состояние периода (сколько времени осталось до окончания и т.д.) Удалить период
Другие Менеджеры Менеджер Инициализации Менеджер Часов Менеджер Сигналов Менеджер Двухпортовой Памяти Менеджер Ввода/Вывода Менеджер Фатальных Ошибок Менеджер Мультипроцессорных Систем