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

D.2.4 Непрерывная диспетчеризация задач

Этот подпункт определяет политику диспетчеризации задач без прерывания.

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

Политика policy_идентификатор Non_Preemptive_FIFO_Within_Priorities является политикой диспетчеризации задач.
Существует следующий пакет библиотеки, определенный языком:
package Ada.Dispatching.Non_Preemptive
with Preelaborate, Nonblocking, Global => in out synchronized is
procedure Yield_To_Higher;
procedure Yield_To_Same_Or_Higher renames Yield;
end Ada.Dispatching.Non_Preemptive;
Вызов Yield_To_Higher является точкой диспетчеризации задач для данной политики. Если задача в начале очереди задач с наивысшим приоритетом имеет более высокий активный приоритет, чем вызывающая задача, то вызывающая задача прерывается.

Правила правомерности

Non_Preemptive_FIFO_Within_Priorities не должен быть указан в качестве policy_идентификатора для pragma Priority_Specific_Dispatching (см. D.2.2).

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

Когда в действии Non_Preemptive_FIFO_Within_Priorities, изменения в очередях задач происходят только следующим образом:
  • Когда заблокированная задача становится готовой, она добавляется в конец очереди задач для ее активного приоритета.
  • Когда изменяется активный приоритет готовой задачи, которая не выполняется, или вступает в силу установка ее базового приоритета, задача удаляется из очереди задач для ее старого активного приоритета и добавляется в конец очереди задач для ее нового активного приоритета.
  • Когда вступает в силу установка базового приоритета выполняющейся задачи, задача добавляется в конец очереди задач для ее активного приоритета.
  • Когда задача выполняет заявление_ожидания, которое не приводит к блокированию, она добавляется в конец очереди задач для ее активного приоритета.
Для этой политики блокирование или завершение задачи, заявление_ожидания, вызов Yield_To_Higher и вызов Yield_To_Same_Or_Higher или Yield являются единственными точками диспетчеризации задач (см. D.2.1).

Требования к реализации

Реализация должна позволять, для одного раздела, задать политику диспетчеризации задач как Non_Preemptive_FIFO_Within_Priorities, а также политику блокировки (см. D.3) как Ceiling_Locking.

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

Поскольку реализации разрешается округлять все приоритеты потолка в поддиапазоне System.Priority до System.Priority'Last (см. D.3), реализация может позволить задаче раздела, использующей политику Non_Premptive_FIFO_Within_Priorities, выполняться в защищенном объекте без повышения ее активного приоритета, при условии, что связанный защищенный блок не содержит подпрограмм с аспектами Interrupt_Handler или Attach_Handler, указанными, а также блок не имеет аспекта Interrupt_Priority. При политике блокировки (см. D.3) Ceiling_Locking, реализация, использующая это разрешение, должна гарантировать, что вызов Yield_to_Higher, который происходит внутри защищенного действия, использует приоритет потолка защищенного объекта (а не активный приоритет задачи) при определении того, прерывать задачу или нет.


Spec-Zone.ru

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