ВСТРОЕННЫЕ ИНФОРМАЦИОННО- УПРАВЛЯЮЩИЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ Лекция 5 Операционные системы реального времени Кафедра АСВК, Лаборатория Вычислительных Комплексов
Содержание лекции Требования к ОС РВ Понятие процесса и потока (thread) Планирование процессов с приоритетами Надстройка над планировщиком. Rate Monotonic Analysis. Earliest Deadline First Взаимодействие процессов в ОС РВ Служба времени ОС РВ Примеры ОС РВ
Основные требования к ОС РВ Предсказуемость реакции и многозадачность Наличие механизма приоритетов и вытеснения (preemption) Предсказуемые механизмы синхронизации и взаимодействия Предсказуемые задержки Малые задержки
Основные виды задержек Переключение контекста процесса (потока) Время реакции на прерывание Время выполнения системного вызова Потоки (threads) вместо процессов – как можно меньший контекст «микроядро» - выделение служб ОС из ядра и оформление как задач
Управление потоками pthread_create() –Функция-тело потока –Параметры планирования Дисциплина планирования приоритет Признак наследования от родителя –Стек, куча, … pthread_exit()
Приоритетное планирование Диапазон значений приоритетов (256 для ОС- 2000) Для каждого приоритета – своя очередь Управление получает поток в голове очереди с наивысшим приоритетом Появился готовый поток с большим приоритетом => вытеснение SCHED_RR => перепланир по истечении кванта sched_yield()
Планирование Rate Monotonic Дано: –Набор задач T1,T2, …,Tn –Период Pi, i=1..n –Директивный срок Di –Время выполнения Ci Требуется: –Проверить возможность планирования –Назначить приоритеты потокам
Условия выполнимости планирования пусть Di = Pi Ui = Ci/Pi; U =sum(Ui) - загруженность Необходимое условие U 1 Достаточное условие U n(2^(1/n) - 1) Приоритеты растут с уменьшением периода
Планирование EDF Меньший текущий директивный срок => больший приоритет Необходимое и достаточное условие Ui = Ci/Pi; U =sum(Ui); U < 1
Взаимодействие: очереди сообщений #include mq_open() // имя очереди const char* mq_close() mq_send() // длина сообщения, приоритет mq_receive() –В зависимости от параметров очереди – либо ожидание на пустой очереди, либо ошибка mq_notify() // установить сигнал при записи в пустую очередь
Семафоры sem_open(), sem_close() sem_post() sem_wait(), sem_trywait() Очередь к семафору – по приоритетам потоков
Мьютексы #include pthread_mutex_init() pthread_mutex_lock() pthread_mutex_trylock() pthread_mutex_unlock() Освободить mutex может только захвативший его поток (в отличие от двоичного семафора)
Условные переменные (conditional variables) Один бит информации (например, о состоянии разделяемых данных), связанный с mutexом pthread_mutex_lock(); pthread_cond_wait() – если условие ложно, то встать в очередь и освободить mutex (атомарно); pthread_cond_timedwait() pthread_cond_signal() – сообщить первому в очереди; pthread_cond_broadcast() – сообщить всем; При выходе из очереди выполняется захват mutex
Пример использования условных переменных ( © …) pthread_mutex_lock(&mut); …// Делаем что-то с общими данными, но не освобождаем mut while(!predicate()) // Пока условие которого ожидаем не достигнуто pthread_cond_wait(&cond,&mut); …// Делаем что-то с общими данными pthread_mutex_unlock(&mut);
Сигналы реального времени Диапазон: SIGRTMIN..SIGRTMAX Посылка pthread_kill(), Установка реакции (обработчик, маскируемые сигналы) sigaction() Обработчик сигнала void handler( int signo );
Представление времени #include struct timespec { time_t tv_sec; int tv_usec; // нано }; clock_settime() clock_gettime() clock_getres() struct tm {} time() sleep() Разрешение часов: Багет – 4 мкс x86 – rdtsc – время в тактах процессора
Таймеры timer_create() привязка к часам, задание сигнала timer_settime() время первого срабатывания –От момента запуска –По значению часов интервал срабатывания
Примеры ОС РВ ОС2000 (НИИСИ РАН) vxWorks (WindRiver Software) QNX (QNX Software) RTEMS (open-source) LynxOS Расширение Windows NT И т.д.
Linux для ВС РВ RTLinux RTAI - потоки РВ – в режиме ядра; RTAI – требуется патч к ядру; Требуется переработка драйверов для режима РВ
Литература И.Б. Бурдонов, А.С. Косачев, В.Н. Пономаренко. Операционные системы реального времени // М.: Институт системного программирования РАН, – 49 с. Bill O. Gallmeister. POSIX. 4: Programming for the Real World. OReily – К.Е. Климентьев. Операционные системы реального времени. Обзорный курс лекций для студентов заочной формы обучения по специальности (Самарский государственный аэрокосмический университет) pdf C.L. Liu, J.W. Layland. Scheduling algorithms for multiprogramming in a hard real-time environment