Лекция 5 - Лаборатория Вычислительных Комплексов

Download Report

Transcript Лекция 5 - Лаборатория Вычислительных Комплексов

ВСТРОЕННЫЕ ИНФОРМАЦИОННОУПРАВЛЯЮЩИЕ СИСТЕМЫ РЕАЛЬНОГО
ВРЕМЕНИ
Лекция 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 <mqueue.h>
mq_open() // имя очереди const char*
mq_close()
mq_send() // длина сообщения, приоритет
mq_receive()
– В зависимости от параметров очереди – либо
ожидание на пустой очереди, либо ошибка
• mq_notify() // установить сигнал при записи
в пустую очередь
Семафоры
•
•
•
•
sem_open(), sem_close()
sem_post()
sem_wait(), sem_trywait()
Очередь к семафору – по приоритетам
потоков
Мьютексы
•
•
•
•
•
•
#include <pthread.h>
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 <time.h>
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 – требуется патч к ядру;
• Требуется переработка драйверов для
режима РВ
Литература
• И.Б. Бурдонов, А.С. Косачев, В.Н. Пономаренко.
Операционные системы реального времени // М.:
Институт системного программирования РАН, 2006. –
49 с.
• Bill O. Gallmeister. POSIX. 4: Programming for the Real
World. O’Reily – 1995.
• К.Е. Климентьев. Операционные системы реального
времени. Обзорный курс лекций для студентов
заочной формы обучения по специальности 230102
(Самарский государственный аэрокосмический
университет)
http://www.ssau.ru/files/resources/sotrudniki/rts2008.pdf
• C.L. Liu, J.W. Layland. Scheduling algorithms for
multiprogramming in a hard real-time environment