Руководство по Ada 2012
D.2.3 Преемственное планирование задач
В этом подпункте определена политика преемственного планирования задач.
Статическая семантика
Политика policy_идентификатор FIFO_Within_Priorities является политикой планирования задач.
Динамическая семантика
При использовании FIFO_Within_Priorities изменения в очередях готовности происходят только следующим образом:
- Когда заблокированная задача становится готовой, она добавляется в конец очереди готовности для ее активного приоритета.
- Когда активный приоритет готовой задачи, которая не выполняется, меняется, или вступает в силу установка ее базового приоритета, задача удаляется из очереди готовности для ее старого активного приоритета и добавляется в конец очереди готовности для ее нового активного приоритета, за исключением случаев, когда активный приоритет понижается из-за потери унаследованного приоритета, в этом случае задача добавляется в начало очереди готовности для ее нового активного приоритета.
- Когда вступает в силу установка базового приоритета выполняющейся задачи, задача добавляется в конец очереди готовности для ее активного приоритета.
- Когда задача выполняет заявление_ожидания, которое не приводит к блокированию, она добавляется в конец очереди готовности для ее активного приоритета.
Каждый из указанных выше событий является точкой планирования задач (см. D.2.1).
Точка планирования задач возникает для текущей выполняющейся задачи процессора всякий раз, когда существует непустая очередь готовности для этого процессора с более высоким приоритетом, чем приоритет выполняющейся задачи. Текущая выполняющаяся задача считается прерванной и добавляется в начало очереди готовности для ее активного приоритета.
Требования к реализации
Реализация должна допускать для одного раздела как задание политики планирования задач как FIFO_Within_Priorities, так и задание политики блокировки (см. D.3) как Ceiling_Locking.
Требования к документации
Инверсия приоритета — это время, в течение которого задача остается в начале очереди готовности с наивысшим приоритетом, пока процессор выполняет задачу с более низким приоритетом. Реализация должна задокументировать:
- Максимальную инверсию приоритета, которую пользовательская задача может испытать из-за активности реализации (от имени задач с более низким приоритетом), и
- может ли выполнение задачи быть прервано обработкой истечения сроков ожидания для задач с более низким приоритетом реализацией, и если да, то на какое время.
ПРИМЕЧАНИЯ
14 Если активный приоритет выполняющейся задачи понижается из-за потери унаследованного приоритета (как это происходит при завершении защищенной операции) и существует готовая задача с тем же активным приоритетом, которая не выполняется, выполняющаяся задача продолжает выполняться (при условии, что нет задачи с более высоким приоритетом).
15 Установка базового приоритета готовой задачи приводит к перемещению задачи в конец очереди для ее активного приоритета, независимо от того, действительно ли меняется активный приоритет задачи.