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

D.4 Политики очереди вызова

Этот пункт описывает механизм, позволяющий пользователю выбрать политику очереди вызова. Он также определяет две такие политики. Другие политики определяются реализацией.

Синтаксис

Форма псевдодирективы Queuing_Policy выглядит следующим образом:
pragma Queuing_Policy(policy_идентификатор);

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

policy_идентификатор должен быть либо FIFO_Queuing, либо Priority_Queuing, либо определенным реализацией идентификатором.

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

Псевдодиректива Queuing_Policy является псевдодирективой конфигурации.

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

Политика очереди вызова управляет порядком, в котором задачи помещаются в очередь для обслуживания вызова, и порядком, в котором рассматриваются различные очереди вызовов для обслуживания. Политика очереди задается псевдодирективой Queuing_Policy.
Определены две политики очереди: FIFO_Queuing и Priority_Queuing. Если ни одна псевдодиректива Queuing_Policy не применяется к каким-либо модулям программы, составляющим раздел, то политикой очереди для этого раздела является FIFO_Queuing. Правила для этой политики указаны в 9.5.3 и 9.7.1.
Политика Priority_Queuing определяется следующим образом:
  • Вызовы ввода-вывода (включая член семейства ввода-вывода) помещаются в очередь в порядке, соответствующем приоритетам вызовов. Приоритет вызова ввода-вывода инициализируется активным приоритетом вызывающей задачи в момент выполнения вызова, но может измениться позже. В пределах одного приоритета порядок соответствует времени вызова (или повторного помещения в очередь, или установки приоритета) (то есть, FIFO-порядку).
  • После первоначального помещения в очередь изменения активного приоритета задачи не влияют на приоритет вызова, если не меняется базовый приоритет задачи, пока задача заблокирована на вызове ввода-вывода.
  • При изменении базового приоритета задачи (см. D.5), если задача заблокирована на вызове ввода-вывода и вызов находится в очереди, приоритет вызова обновляется до нового активного приоритета вызывающей задачи. Это приводит к удалению вызова из очереди и его повторному вставлению в очередь с новым активным приоритетом.
  • Когда более чем одно условие для барьера_ввода защищенного объекта становится True, и более чем одна из соответствующих очередей непуста, выбирается вызов с наивысшим приоритетом. Если несколько таких вызовов имеют одинаковый приоритет, выбирается вызов, помещенный в очередь для ввода-вывода, декларация которого первой в текстовом порядке указана в определении_защищенного. Для членов одного и того же семейства ввода-вывода выбирается член с меньшим индексом семейства.
  • Если время истечения двух или более открытых альтернатив_задержки совпадает, и никакие другие альтернатив_принятия не открыты, то выполняется последовательность_операторов альтернатив_задержки, которая первой указана в текстовом порядке в селективном_принятии.
  • Когда несколько альтернатив селективного_принятия открыты и содержат вызовы в очереди, выбирается альтернатива, чья очередь содержит вызов с наивысшим приоритетом в голове. Если две или более открытых альтернатив имеют вызовы с равным приоритетом в очереди, то выбирается вызов для ввода-вывода в альтернативе_принятия, которая первой указана в текстовом порядке в селективном_принятии.

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

Реализации могут определять другие политики очереди, но не обязаны поддерживать более одной политики очереди на раздел.
Реализации могут отложить переупорядочение очередей ввода-вывода после изменения базового приоритета задачи, заблокированной на вызове ввода-вывода, если переупорядочение очереди не является практичным в данный момент.

Рекомендации для реализации

Реализация должна использовать имена, оканчивающиеся на «_Queuing», для реализаций определенных пользователем политик очереди.


Spec-Zone.ru

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