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

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), если задача заблокирована на вызове входа, и вызов находится в очереди, приоритет вызова обновляется до нового активного приоритета вызывающей задачи. Это приводит к удалению вызова из очереди и его последующему повторному добавлению в очередь с новым активным приоритетом.
  • Когда несколько условий барьера_входа защищённого объекта становятся истинными, и более чем одна из соответствующих очередей не пуста, выбирается вызов с наивысшим приоритетом. Если несколько таких вызовов имеют одинаковый приоритет, выбирается вызов, находящийся в очереди к входу, декларация которого первой идёт в текстовом порядке в определении_защищенного_объекта. Для членов одного семейства входов выбирается член с меньшим индексом семейства.
  • Если время истечения для двух или более открытых альтернативы_задержки одинаковое и больше нет открытых альтернативы_приёма, то выполняется последовательность_команд альтернативы_задержки, которая первая встречается в текстовом порядке в альтернативный_приём.
  • Когда несколько альтернатив альтернативного_приёма открыты и имеют вызовы в очереди, выбирается альтернатива, чья очередь имеет вызов с наивысшим приоритетом в голове. Если две или более открытых альтернатив имеют вызовы в очереди с одинаковым приоритетом, выбирается вызов входа в альтернативе_приёма, которая первой встречается в текстовом порядке в альтернативный_приём.

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

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

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

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


Spec-Zone.ru

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