Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дал У.И.Симула 67.doc
Скачиваний:
8
Добавлен:
01.03.2025
Размер:
216.58 Кб
Скачать

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) всей модели, т. е. экземпляр блока с префиксом SIMULA­TION, так реагировала на управляющие процедуры, указан­ные в разд. 14.2.4, как если бы она сама была процессом. Это достигается тем, что процесс класса MAIN PROGRAM всегда является компонентой квазипараллельной системы. Указан­ный процесс будет представлять главную программу по от­ношению к управляющим процедурам. Каждый раз, когда он начинает работать, УП (а также ВУ) немедленно войдет в главную программу в результате действия оператора detach (см. разд. 9.2.1). Процедура current будет ссылаться на этот процесс каждый раз, когда главная программа будет активна.

Моделирование начинается в результате порождения объ-

P

екта MAIN

ROGRAM и планирования активной фазы для

него в системное время, равное нулю. Затем УП переходит к первому заданному пользователем оператору блока с пре­фиксом SIMULATION.