Srv_09_15_01_Приоритетное_управление.pptx
- Количество слайдов: 14
Планирование задач Пример Пропуск deadline Задача A t da I Задача B t db Deadline не нарушен Задача A t da II Задача B t db Выполнимость набора задач ( «шедулируемость» ) Управление – процедура, определяющая порядок активизации задач Приоритетное управление – механизмом управления являются приоритеты 9. Приоритетное управление 2015 v. 01 1
Статическое назначение приоритетов, правило Rate Monotonic (RM) Пусть имеется n независимых периодических задач реального времени; pi - период i-й задачи, Сi – время выполнения в наихудшем случае; у каждой из задач значение deadline совпадает с периодом активизации pi RM – правило: приоритеты задач назначаются (off-line) «обратно пропорционально» их pi C 1 Задача 1 t C 2 Высший приоритет p 1 Задача 2 t Cn p 2 Задача n t Низший приоритет pn 9. Приоритетное управление 2015 v. 01 2
Тест Rate Monotonic Набор из n периодических задач будет выполнимым (schedulable), если приоритеты назначены в соответствии с RM правилом и выполняется условие (1973 год, Liu): I=n R= S 1/n Сi / pi <= n * (2 - 1) (*) I=1 • Зависимость (*) представляет нижнюю границу значения R • В случае, когда частоты активизации задач находятся в гармонической зависимости, R <= 1 (Гармоническая зависимость – частота активизации любой задачи приложения кратна частоте каждой задачи с меньшей частотой; например - 1 Hz, 5 Hz, 10 Hz, 20 Hz) • В большинстве практических случаев R < 0. 88 9. Приоритетное управление 2015 v. 01 3
Тест Rate Monotonic 1/n n * (2 - 1) 0. 69 n 9. Приоритетное управление 2015 v. 01 4
Динамическое назначение приоритетов Earliest Deadline First (EDF) Задача A t da Задача B t db EDF – значения приоритетов назначаются задачам «обратно пропорционально» длительности временных интервалов до наступления deadline (da < db PA выше PB ) I=n EDF scheduling test: S С /p <1 i i I=1 pi - период i-й задачи, Сi – время выполнения в наихудшем случае 9. Приоритетное управление 2015 v. 01 5
Least Laxity First (LLF) LLF – (laxity – (td - tr) - «расхлябанность» ) наивысший приоритет присваивается задаче с наименьшим laxity t tr td d LLF scheduling test – аналогичен EDF Признак laxity<0 - может быть использован для раннего обнаружения нарушения deadline (можно «бросить» исключение) 9. Приоритетное управление 2015 v. 01 6
QNX - назначение приоритетов typedef struct { int flags; size_t stacksize; void *stackaddr; void (*exitfunc)(void *status); int policy; struct sched_param; unsigned guardsize; } pthread_attr_t struct sched_param { int 32_t sched_priority; int 32_t sched_curpriority; union {. . . }__ss_un; } // Задаем приоритет 14 для нитки с исполняемой функцией // test_thread struct sched_param; param. sched_priority = 14; // (см. проект // priority_0) pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setschedparam(&attr, ¶m); pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); pthread_create(NULL, &attr, &test_thread, NULL); 9. Приоритетное управление 2015 v. 01 7
Инверсия приоритетов Задача 1 (P 1 = а) t Задача 2 (P 2 = b выше a) t Задача 3 (P 3 = c выше b) t td Задача работает с использованием ресурса Задача запрашивает (освобождает) ресурс, вызов P-операции (V- операции) Задача работает не используя ресурс Высокоприоритетная Задача 3 удерживается низкоприоритетной Задачей 2 в течение временного интервала td , значение которого трудно просчитать заранее 9. Приоритетное управление 2015 v. 01 8
Протокол граничных приоритетов (Priority Ceiling) Ресурс (Рr = c) Р 1 = с Р 1 = a Задача 1 (Р 1 = а) t Задача 2 (Р 2 = b>a) t Задача 3 (Р 3 = c>b) t • С Ресурсом связывается понятие приоритета; • В процессе проектирования приложения Ресурсу «присваивается» приоритет той использующей его задачи, который является наивысшим; • При запросе Задачей Ресурса ей присваивается приоритет этого Ресурса 9. Приоритетное управление 2015 v. 01 9
Протокол наследования приоритетов P 1 = с P 1 = a Задача 1 (Р 1 = а) t Задача 2 (P 2 = b > a) t Задача 3 (P 3 = c > b) t Приоритет Задачи 1, удерживающей ресурс, поднимается до значения приоритета Задачи 3 в момент, когда Задача 3 выставляет требование на этот ресурс 9. Приоритетное управление 2015 v. 01 10
Мьютекс Class Семафор { Очередь: Указатель. На. Список. Дескрипторов Нач. Значение: 0. . N; (*) Тек. Значение: 0. . N; (*) P(); V(); } (*) Для двоичного семафора - 0. . 1 class mutex { Очередь: Указатель. На. Список. Дескрипторов boolean: занят; Задача: владелец; lock(); unlock(); //неделимые операции! } 9. Приоритетное управление 2015 v. 01 11
Инициализация и захват TCB-владелец Создать_mutex(mutex S): 1. S = new mutex(); 2. S. Очередь = Создать. Очередь(); 3. S. Владелец = nill; 4. S. Состояние = свободен; ППриоритет ТПриоритет lock(): TCB- Тек. Проц 1. Запретить_Прерывания; 2. if(Состояние==занят) then 2. 1. Владелец. ТПриоритет = Тек. Проц. Приоритет; 2. 2. ждать(Состояние==свободен); 3. Владелец = Тек. Проц; 4. Состояние = занят; 5. Разрешить_Прерывания; действие 2. 1. – приоритет Тек. Проц будет выше приоритета Владелец; иначе Тек. Проц не мог бы вытеснить владельца и вызвать loc() 9. Приоритетное управление 2015 v. 01 12
Освобождение unlock(); 1. Запретить_Прерывания; 2. if(Владелец==Тек. Проц) then 2. 1. R = Взять_Из_Очереди(Очередь); 2. 2. Поставить_В_Очередь(R, Очердь. Готовых) 2. 3. Состояние = свободен; else Исключение; // Еще одна особенность 3. Владелец. ТПриоритет = Владелец. Приоритет; 4. Владелец = nill; 5. Разрешить_Прерывания(); 9. Приоритетное управление 2015 v. 01 13
Мьютекс QNX struct pthread_mutex_attr_t { int protocol; int prioceiling; unsigned owner; . . . } pthread_mutex_init(…) Pthread_mutex_lock(…) Pthread_mutex_unlock(…) pthread_mutexattr_setprotocol(. . , int protocol) protocol - PTHREAD_PRIO_INHERIT, PTHREAD_PRIO_PROTECT int pthread_mutexattr_getprotocol(…) pthread_mutexattr_setprioceiling(. . , int prioceiling) int pthread_mutexattr_getprioceiling(. . , int prioceiling) рrioceiling – приоритет, присваиваемый потоку, захватившему мьютекс (см. слайд 7, struct sched_param) 9. Приоритетное управление 2015 v. 01 14


