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