
- •6.1.2.2. Присваивание ссылок на объект
- •7. Дистанционное обращение
- •7.1. Дистанционные идентификаторы
- •7.2. Присоединения
- •9.2. Квазипараллельное исполнение
- •Integer procedure pos;
- •Inspect sysout do inspect sys in do
- •11.4.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.3.2. Семантика
- •14.2.4. Управляющие процедуры
14.2.3.2. Семантика
.. Применение оператора активации допустимо только по отношению к объектам подкласса класса SIMULATION, или внутри блока с префиксом, префиксальная часть которого является таким объектом.
Действие оператора активации определяется как обращение к управляющей процедуре ACTIVATE, локализованной в классе SIMULATION.
procedure ACTIVATE (REAC, X/CODE,T, Y,PRIOR); value CODE; ref (process) X9Y; Boolean REAC,PRIOR; text CODE; real T\
Список фактических параметров определяется видом оператора активации в соответствии с ниже следующими правилами: -
Фактический параметр, соответствующий параметру REAC, есть true, если активатор есть reactivate, в противном случае — false.
Фактическим параметром, соответствующим параметру X, является объектное выражение, которым заканчивается активация.
Фактическим параметром, соответствующим параметру 7, является арифметическое выражение, которым заканчивается простое указание времени, е,сли указание имеется; в противном случае фактический параметр равен нулю.
Фактический параметр, соответствующий параметру PRIOR, есть true, если указание времени заканчивается символом prior; в противном случае — false.
Фактическим параметром, соответствующим параметру Г, является объектное выражение, которым заканчивается планирование, если такое объектное выражение имеется; в противном случае фактическим параметром является попе.
Фактический параметр, соответствующий "параметру CODE, определяется видом конструкции планирование:
*
(конструкция планирование) ■ (фактический параметр)
(пусто) 1 'direct'
at (арифметическое выражение) 'at*
delay (арифметическое выражение) 'delay' ■ " ,
before (объектное выражение) 'before'
after (объектное выражение) 'after'
14.2.4. Управляющие процедуры
«... 14.2.4.2. Семантика ;
Управляющие процедуры служат для организации квазипараллельной работы процессов в модели. Следует избегать явного употребления основных средств управления (detach, resume) внутри процессов.
Оператор hold (Г), где Т имеет неотрицательное веще ственное значение, заканчивает активную фазу текущего процесса и планирует его следующую активную фазу на си стемное время time + Т. Таким образом, этот оператор пред ставляет неактивный период длительности Г. В течение неак тивного периода ЛУ остается внутри оператора hold. Процесс, становится приостановленным. .
Оператор passivate заканчивает'активную фазу текущего процесса и удаляет текущее уведомление из УС. Процесс становится пассивным. Его следующая активная фаза должна быть запланирована вне этого процесса. Таким образо,м, оператор представляет неактивный период неопределенной длительнрсти. ЛУ этого процесса остается внутри оператора passivate.
Процедура wait включает текущий процесс в некоторый указанный набор, а затем вызывает процедуру passivate.
Оператор cancel (X), где X есть ссылка на некоторый процесс, удаляет соответствующее уведомление из УС, если оно там присутствует. Если процесс в данный момент активен или приостановлен, то он становится пассивным. В противном случае оператор никаких действий не производит. Оператор cancel (current) эквивалентен оператору passivate.
Процедура -ACTIVATE представляет оператор активации, как описано в разд. 14.2.3. Опишем действие этой процедуры в терминах соответствующего оператора активации. Назначение оператора активации состоит в том, чтобы запланировать активную фазу некоторого процесса.
Пусть X является значением объектного выражения в ак- .„тивации. Если активатором является activate, оператор ни каких действий не производит (за исключением вычисления входящих в него выражений), если*только X не является пас сивным процессом. Если активатором является reactivate, а X приостановлен или активен, то соответствующее уведом-. ление исключается из УС (после предшествующей операции., планирования) и текущая активная фаза заканчивается. В оральном эти два случая (activate и reactivate) не разли чаются, .. ^ ■ - - . . ' ■ ■ "'"■■'..
Планирование состоит в порождении уведомления для .процесса X и включении его1 в управляющий список. Тип пла-' нирования определяется конструкцией планирование, *:>; -
Пустое планирование означает «непосредственную» активацию, при ^которой активная фаза процесса X начинается немедленно. Уведомление вставляется ■ в УС на первое место, перед уведомлением, ссылающимся на активный процесс, и процесс X становится активным. Системное время не меняется. Процесс, бывший активным, становится приостановленным.
Указание времени служит для указания времени планируемого события. Конструкция delay Г, где Т — арифметическое выражение, эквивалентна конструкции at time + Т. Новое уведомление вставляется' в управляющий список на место, определяемое указанным планируемым временем. При отсутствии символа prior в указании времени уведомление вставляется непосредственно вслед за последним уведомлением с непревосходящими значениями EVTIME. Если же в указании времени имеется символ prior, то уведомление вставляется непосредственно перед первым уведомлением е неменьшим значением EVTIME.
. Пусть Y есть ссылка на активный или приостановленный процесс. Тогда, если планирование имеет вид before F, новое уведомление вставляется непосредственно перед уведомлением для процесса У, а если планирование имеет вид after У, то непосредственно вслед за уведомлением для процесса Y. Порожденное уведомление получает то же системное время, что и У. Если У не является активным или приостановленным-процессом, то никакой активной фазы запланировано не будет.
■
I " %
Пример: Операторы
activate X; activate X before current;
activate,X delay 0 prior ; activate X at time prior;
эквивалентны. Все они вызывают непосредственную активацию. Оператор
_ * reactivate current delay T
ч
эквивалентен оператору hold (Г). .
14.2.5. Главная программа
г *
14.2.5.2. Семантика
Желательно, чтобы главная программа (main program) всей модели, т. е. экземпляр блока с префиксом SIMULATION, так реагировала на управляющие процедуры, указанные в разд. 14.2.4, как если бы она сама была процессом. Это достигается тем, что процесс класса MAIN PROGRAM всегда является компонентой квазипараллельной системы. Указанный процесс будет представлять главную программу по отношению к управляющим процедурам. Каждый раз, когда он начинает работать, УП (а также ВУ) немедленно войдет в главную программу в результате действия оператора detach (см. разд. 9.2.1). Процедура current будет ссылаться на этот процесс каждый раз, когда главная программа будет активна.
Моделирование начинается в результате порождения объ-
P
екта
MAIN
него в системное время, равное нулю. Затем УП переходит к первому заданному пользователем оператору блока с префиксом SIMULATION.