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

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