Главная  Радио и связь 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [ 29 ] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104


- - ОБСЛУЖИВАЮЩИЙ МОДУЛЬ С ФИКСИРОВАННЫМИ ПРИОРИТЕТАМИ type LEVEL = (HIGH, MEDIUM, LOW); task SERVER is

entry REQUEST (LEVEL!; end SERVER;

task body SERVERis begin loop select

accept REQUEST (HIGH) do ... end;

when REQUEST (HIGH)COUNT=0=> accept REQUEST (MEDIUM) do ... end;

when REQUEST (HIGH)COUNT=0 and REQUEST (MEDIUM)COUNT=0=> accept REQUEST (LOW) do ... end;

end select; end loop; end SERVER;

Рис. 3.19. Задача приоритетного обслуживания (по Вегнеру).

приоритет. Этот рисунок иллюстрирует систему обозначений на структурной схеме для случая комбинированного использования фиксированного порядка и выборочного обслуживания запросов. Эти обозначения не были введены раньше по той простой причине, что для них не существует прямого аналога в языке Ада; данный механизм взаимодействий реализуется программно, как показано на рисунке. Обслуживающая задача всегда готова принять вызов входа с наивысшим приоритетом. Что же касается входов с более низким приоритетом, то они бывают открыты только в том случае, когда ни одна задача не стоит в очереди на входе, имеющем более высокий приоритет. Если очереди нет ни на одном из входов, то любой вызов входа принимается независимо от уровня его приоритета. Таким образом, задачи, которые обращаются-к низкоприоритетным входам, испытывают более длительные задержки по перегрузке.

Описанный принцип предполагает, что вызывающие задачи не осуществляют временных вызовов. В противном случае по-



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

При использовании средств языка Ада на практике неиз-бел<на одна мелкая неприятность: если в момент, когда все входы открыты, поступит «одновременно» несколько вызовов, то механизм отбора случайным образом воспримет только один из них. Последствия такого аномального поведения будут почти незаметны, если временное «окно», в котором возможно одновременное обращение нескольких задач, невелико. Однако в любом случае вне рамок установленной дисциплины обслуживания окажется всего один вызов, после чего защитные блокировки (предохранители) сработают правильно. Более приоритетный вызов в одном случае может попасть в это «окно» и не быть принят, а в другом случае - поступить несколько позже и л<дать окончания обслуживания вызова с меньшим приоритетом. Разница между этими двумя случаями пренебре-л<нмо мала.

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

3.3.5. Структуры двусторонних и многосторонних взаимодействий

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

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

Многие механизмы, состоящие из нескольких рандеву и (или) нескольких задач, можно свести к двусторонним взаимодействиям между парами задач. Как будет видно из дальнейшего, для различных целей требуются разные варианты та- . кого упрощения, однако некоторые из них молшо сразу же отбросить как неприемлемые, поскольку они могут приводить к тупиковым ситуациям (рис. 3.20). Тупиковая ситуация может возникнуть из-за наличия прямого (рис. 3.20, а) или косвенного (рис. 3.20, б) цикла на структурном графе. Но это событие может произойти и в том случае, когда на структурном графе нет явных циклов: например, вследствие неправильной защиты



{а) Непосредственный цикл на структурном гр

Обозначения: ожидание приема -.ик- ожидание вызова .-выполнение оператора приема или вызова

Прием

Прием

Пример для случая (aj


{б) Непрямой цикл на структурном графе.



прием

Прием ь I )\

Прием с / 1,

Пример для случая («)


Пример для случая (в).

(в) Скрытый цикл.

Рис, 3,20, Тупиковые ситуации при выполнении рандеву.

(г) Временные диаграммы, иллюстрирующие возможные варианты тупиковых ситуаций.

ОДНОГО из ВХОДОВ возможен цикл взаимного ожидания (рис, 3.20, в). Временные диаграммы, показывающие, как в каждом из этих случаев возникает тупиковая ситуация, приведены на рис. 3.20, г.

На рис. 3.21 показано несколько вариантов организации беступиковых двусторонних взаимодействий. Из этого рисунка видно, что непосредственные циклы на структурном графе безопасны, если все операторы приема и вызова в каждой из задач упорядочены (рис. 3.21, а). При этом одна из задач должна первой осуществлять вызов, а вторая - прием; таким образом, операторы вызова и приема в каждой из задач будут че-



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [ 29 ] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104


0.0061