Cтраница 2
Заметим, что семантика рандеву языка Ада предполагает, что вызывающая задача должна быть блокирована до завершения рандеву. Следовательно, реализация вызова задачи с помощью последовательности команд SEND и RECEIVE с блокировкой соответствует этому условию. [16]
Контрольные запросы только проверяют состояние ресурса, при этом формируется сообщение вызывающей задаче об этом состоянии -; контрольные запросы могут быть только на использование ресурса. [17]
Оставшаяся часть, следующая за оператором accept и выполняющаяся параллельно с вызывающей задачей после завершения процесса рандеву. [18]
Задача является активной, если она является вызываемой по отношению к некоторой вызывающей задаче. Это значит, что поля Б, В, Г ее Блока управления равны нулю, а в поле Е указан номер вызывающей задачи. Поле Ж будет заполнено в том случае, если эту задачу ожидают какие-либо другие задачи. [19]
Очистка цепочки связей заключается в том, что очищается поле Е вызываемой задачи и поле В вызывающей задачи. [20]
Перед тем как вызывается задача, должны быть доступны требующиеся ей входные данные, часто передаваемые вызывающей задачей. [21]
Если поле Е вызываемой задачи равно нулю, то устанавливается обычная цепочка: номер вызываемой задачи размещается в поле В вызывающей задачи, а номер вызывающей задачи размещается в поле Е вызываемой задачи. Увеличивается Счетчик активизированных системных задач. [22]
Если поле Е вызываемой задачи равно нулю, то устанавливается обычная цепочка: номер вызываемой задачи размещается в поле В вызывающей задачи, а номер вызывающей задачи размещается в поле Е вызываемой задачи. Увеличивается Счетчик активизированных системных задач. [23]
Если активизированную задачу вызовет какая-либо задача, она является по отношению к ней занятой. Вызывающая задача становится ожидающей. [24]
Вызывающая задача будет помечена как ожидающая до тех пор, пока не появится нужное число областей для вызываемых транзитов. Максимальное значение СВО равно числу областей перекрытий. [25]
Для обращения к такой программе в любой другой момент нужно активизировать соответствующую ей задачу. Вызывающей задачей может стать фиктивная. [26]
Если все области перекрытия заняты, проверяется, откуда пришел вызов. Если вызывающая задача не фиктивная, в поле Б Блока управления ее задачей записывается условие ожидания незагруженного транзита и его номер. Увеличивается Счетчик ожидающих программ, управление передается Диспетчеру задач. [27]
Грамотное применение в альтернативе accept части рандеву и ( необязательной) части продолжения позволяет программисту минимизировать время блокировки задачи во время рандеву. Вспомним, что вызывающая задача блокируется в процессе рандеву только на время выполнения части рандеву обслуживающей задачей. По окончании рандеву вызывающая задача и обслуживающая задача продолжают выполняться параллельно. Минимизация времени выполнения оператора accept имеет аналогию с аппаратной частью, когда при использовании протокола запрос-подтверждение для блочно-ориентированного обмена между асинхронно работающими машинами выдается раннее подтверждение. [28]
Вызывающая задача не знает, состоится ли рандеву вследствие безусловного оператора accept или оператора accept внутри оператора select. Следовательно, действие вызывающей задачи в любом случае одно и то же, оно рассмотрено в разд. [29]
Если запрос пришел из проблемной задачи, проверяется, открыт ли файл и той ли задаче он принадлежит. Для этого сравниваются номер вызывающей задачи и номер из байта 20 ТИУ. [30]