Справочник Ada 2012
Директивы диспетчеризации задач D.2.2
Этот подпункт позволяет определить одну политику диспетчеризации задач для всех приоритетов или разбить диапазон приоритетов на поддиапазоны, которым назначаются отдельные политики диспетчеризации.
Синтаксис
Форма директивы pragma Task_Dispatching_Policy следующая:
pragma Task_Dispatching_Policy(policy_идентификатор);
Форма директивы pragma 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_выражение.
Статическая семантика
Директива Pragma Task_Dispatching_Policy задаёт единственную политику диспетчеризации задач.
Директива Pragma 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 были удалены.