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