Spec-Zone.ru › Ada 95
Справочник по Ada 95

D.2.2 Стандартная политика диспетчеризации задач

Синтаксис

Форма pragma Task_Dispatching_Policy выглядит следующим образом:
pragma Task_Dispatching_Policy(policy_identifier );

Правила легальности

policy_identifier должен быть либо FIFO_Within_Priorities, либо определённым реализацией идентификатором.

Правила после компиляции

Предикат Task_Dispatching_Policy является конфигурационным.
Если для раздела задана политика FIFO_Within_Priorities, то для раздела также должна быть задана политика Ceiling_Locking (см. D.3).

Динамическая семантика

Политика диспетчеризации задач определяет детали диспетчеризации задач, которые не охвачены базовой моделью диспетчеризации задач. Эти правила регулируют, когда задачи добавляются в очереди готовности и удаляются из них, и добавляется ли задача в начало или конец очереди для её активного приоритета. Политика диспетчеризации задач задаётся конфигурационным предикатом Task_Dispatching_Policy. Если такой предикат не встречается ни в одном из блоков программы, составляющих раздел, то политика диспетчеризации задач для этого раздела не определена.
Язык определяет только одну политику диспетчеризации задач, FIFO_Within_Priorities; когда эта политика активна, изменения в очередях готовности происходят только следующим образом:
  • Когда заблокированная задача становится готовой, она добавляется в конец очереди готовности для её активного приоритета.
  • Когда изменяется активный приоритет готовой задачи, которая не выполняется, или вступает в силу установка её базового приоритета, задача удаляется из очереди готовности для её старого активного приоритета и добавляется в конец очереди готовности для её нового активного приоритета, за исключением случаев, когда активный приоритет понижается из-за потери унаследованного приоритета, в этом случае задача добавляется в начало очереди готовности для её нового активного приоритета.
  • Когда вступает в силу установка базового приоритета выполняющейся задачи, задача добавляется в конец очереди готовности для её активного приоритета.
  • Когда задача выполняет delay_statement, который не приводит к блокированию, она добавляется в конец очереди готовности для её активного приоритета.
Каждый из указанных выше событий является точкой диспетчеризации задач (см. D.2.1).
Кроме того, когда задача прерывается, она добавляется в начало очереди готовности для её активного приоритета.

Требования к документации

Инверсия приоритетов — это время, в течение которого задача остаётся в начале очереди готовности с наивысшим приоритетом, в то время как процессор выполняет задачу с более низким приоритетом. Реализация должна документировать:
  • Максимальную инверсию приоритетов, которую может испытать пользовательская задача из-за деятельности реализации (от имени задач с более низким приоритетом), и
  • может ли выполнение задачи быть прервано обработкой реализацией истечения сроков ожидания задач с более низким приоритетом, и если да, то на какой период.

Разрешения для реализации

Реализации разрешается определять другие политики диспетчеризации задач, но не обязательно поддерживать более одной такой политики на раздел.
В целях оптимизации реализация может изменить точки, в которых происходит диспетчеризация задач, в определенном реализацией способе. Однако delay_statement всегда соответствует по крайней мере одной точке диспетчеризации задач.
ПРИМЕЧАНИЯ
13 Если активный приоритет выполняющейся задачи понижается из-за потери унаследованного приоритета (как это происходит при завершении защищённой операции), и есть готовая задача с тем же активным приоритетом, которая не выполняется, выполняющаяся задача продолжает выполняться (при условии, что нет задачи с более высоким приоритетом).
14 Установка базового приоритета задачи в результате вызова Set_Priority не всегда вступает в силу немедленно при вызове Set_Priority. Эффект установки базового приоритета задачи откладывается, пока соответствующая задача выполняет защищённое действие.
15 Установка базового приоритета готовой задачи приводит к перемещению задачи в конец очереди для её активного приоритета, независимо от того, фактически ли изменяется активный приоритет задачи.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API