Справочник по Ada 2005
D.2.2 Прагмы диспетчеризации задач
Этот пункт позволяет определить единую политику диспетчеризации задач для всех приоритетов или разделить диапазон приоритетов на поддиапазоны, которым назначаются отдельные политики диспетчеризации.
Синтаксис
Форма прагмы Task_Dispatching_Policy следующая:
pragma Task_Dispatching_Policy(policy_идентификатор);
Форма прагмы Priority_Specific_Dispatching следующая:
pragma Priority_Specific_Dispatching (
policy_идентификатор, first_priority_выражение, last_priority_выражение);
policy_идентификатор, first_priority_выражение, last_priority_выражение);
Правила разрешения имен
Правила допустимости
policy_идентификатор, используемый в прагме Task_Dispatching_Policy, должен быть именем политики диспетчеризации задач.
policy_идентификатор, используемый в прагме Priority_Specific_Dispatching, должен быть именем политики диспетчеризации задач.
И first_priority_выражение, и last_priority_выражение должны быть статическими выражениями в диапазоне System.Any_Priority; last_priority_выражение должно иметь значение, большее или равное значению first_priority_выражения.
Статическая семантика
Прагма Task_Dispatching_Policy задает единственную политику диспетчеризации задач.
Прагма Priority_Specific_Dispatching задаёт политику диспетчеризации задач для указанного диапазона приоритетов. Задачи с базовыми приоритетами в указанном диапазоне приоритетов в прагме Priority_Specific_Dispatching определяют свои активные приоритеты в соответствии с заданной политикой диспетчеризации. Задачи с активными приоритетами в диапазоне приоритетов, указанном в прагме Priority_Specific_Dispatching, диспетчеризуются в соответствии с заданной политикой диспетчеризации.
Если раздел содержит одну или несколько прагм Priority_Specific_Dispatching, то политикой диспетчеризации для приоритетов, не охваченных прагмами Priority_Specific_Dispatching, является FIFO_Within_Priorities.
Правила после компиляции
Прагма Task_Dispatching_Policy — прагма конфигурации. Прагма Priority_Specific_Dispatching — прагма конфигурации.
Диапазоны приоритетов, указанные в более чем одной прагме Priority_Specific_Dispatching в одном разделе, не должны перекрываться.
Если раздел содержит одну или несколько прагм Priority_Specific_Dispatching, он не должен содержать прагму Task_Dispatching_Policy.
Этот абзац был удален.
Динамическая семантика
Политика диспетчеризации задач определяет детали диспетчеризации задач, не охваченные основной моделью диспетчеризации задач. Эти правила управляют тем, когда задачи вставляются в очереди готовности и удаляются из них. Единая политика диспетчеризации задач задаётся прагмой Task_Dispatching_Policy. Прагма Priority_Specific_Dispatching назначает различные политики диспетчеризации поддиапазонам System.Any_Priority.
Если ни одна из прагм не применяется ни к одному из программных модулей, составляющих раздел, политика диспетчеризации задач для этого раздела не определена.
Если раздел содержит одну или несколько прагм Priority_Specific_Dispatching, для текущей выполняемой задачи процессора происходит точка диспетчеризации задач всякий раз, когда в очереди готовности для этого процессора есть задачи с более высоким приоритетом, чем приоритет выполняемой задачи.
Задача, у которой изменён базовый приоритет, может перейти от одной политики диспетчеризации к другой. Она немедленно подчиняется новой политике диспетчеризации.
Абзацы с 7 по 13 были перемещены в D.2.3.
Требования к реализации
Реализация должна позволять для одного раздела указать политику блокировки (см. D.3) как Ceiling_Locking, а также указать одну или несколько прагм Priority_Specific_Dispatching.
Требования к документации
Абзацы с 14 по 16 были перемещены в D.2.3.
Разрешения для реализации
Реализации разрешается определять другие политики диспетчеризации задач, но они не должны поддерживать более одной политики диспетчеризации задач на раздел.
Реализация не обязана поддерживать прагму Priority_Specific_Dispatching, если её поддержка в целевой среде невозможна.
ПРИМЕЧАНИЯ
Абзацы с 19 по 21 были удалены.