
- •Глава 6. Симула - универсальный процессо-ориентированный язык моделирования
- •Классы и объекты
- •Декларации класса
- •Подклассы
- •Объекты. Создание и средства доступа к атрибутам объекта
- •2.3. Средства доступа е атрибутам объектов
- •Квазипараллельное выполнение
- •Оператор detach (открепить)
- •Оператор resume (возобновить)
- •Выход через «end» объекта
- •Операторы перехода
- •Обработка упорядоченных множеств
- •Планирование процессов. Системный класс simulation
- •Статистические аспекты языка симула
- •Общая структура программы моделирования
- •Программное моделирование работы карьера
- •Описание классов
- •Текст программы
- •Ввод-вывод в симула
- •Понятие текста
- •Text array таблица [1:n];
- •Создание текстовых объектов
- •Процедуры работы с частью текста
- •Процедуры обработки текстов
- •Взаимное преобразование текстовых и арифметических значений
- •Сравнение текстов
- •Организация ввода – вывода
- •Процедуры ввода
- •Процедуры вывода
- •Контрольные вопросы и задания Литература
Планирование процессов. Системный класс simulation
В основе средств моделирования лежат понятия системного времени и процесса. Под системным временем понимается арифметическая величина, которая в ходе работы модели отображает течение времени в моделируемой системе. Процессом называется объект, работа которого привязана к системному времени. Время работы объекта будем называть активной фазой процесса, исполнение активной фазы процесса принято называть событием. События отображают изменение состояния моделируемой системы, каждому событию при работе модели соответствует определенный момент системного времени, причем в ходе события системное время остается постоянным. Это означает, что изменение состояния модели происходит мгновенно с точки зрения системного времени.
Понятия системного времени и процесса определены в специальном классе - классе SIMULATION.
В классе SIMULATION описаны классы EVENT и PROCESS, являющиеся подклассами класса LINK. Класс SIMULATION является подклассом класса SIMSET, в классе SIMULATION описаны также процедуры, которые позволяют описывать действия над объектами.
В имитационной модели, написанной на языке СИМУЛА-67 с использованием средств класса SIMULATION, объекты моделируемых систем представляются процессами, а работа отдельных процессов и их взаимодействие отражают функционирование системы.
В модели параллельно (с точки зрения системного времени) исполняются несколько цепочек событий, каждая из которых соответствует работе отдельного процесса. В декларациях
классов, задающих параметры и правила действий процессов, разработчик модели должен описать их функционирование с точки зрения отдельного описываемого процесса. Разработчику достаточно описать чередование событий отдельно для каждого класса процессов, а правильное следование во времени событий, принадлежащих различным цепочкам (синхронизацию процессов), автоматически обеспечивает система моделирования, определенная в классе SIMULATION.
В ходе работы модели процессы могут находиться в следующих четырех состояниях: активном, приостановленном, пассивном и завершенном.
Активным в каждый момент времени является только один процесс. Этот процесс в данный момент непосредственно исполняют операторы, описывающие его правила действий. По окончании текущего события активный процесс может перейти в любое из перечисленных состояний.
Для приостановленных процессов запланировано событие и оно будет исполнено (т.е. приостановленный процесс станет активным), если во время предыдущих событий его никто явно не отменит или моделирование не будет прекращено.
Для пассивных процессов событий не запланировано, однако локальное управление пассивного процесса указывает на один из операторов его правил действий и на него можно запланировать активную фазу, которая начнется с исполнения этого оператора. Пассивный процесс может быть переведен в активное или приостановленное состояние. Непосредственно после генерации процесс находится в пассивном состоянии, и его локальное управление указывает на первый исполняемый оператор правил действий.
Процесс попадает в завершенное состояние при выходе управления через завершающий символ 'END' его декларации класса или в результате исполнения оператора перехода к нелокальной метке.
Атрибутами класса SIMULATION являются процедуры PASSIVATE, CANCEL, WAIT, HOLD, которые позволяют переводить процесс из одного состояния в другое. Для планирования новых событий в классе SIMULATION предусмотрены специальные операторы -'ACTIVATE' и 'REACTIVATE'.
Значение текущего системного времени можно получить, обратившись к процедуре-функции TIME, процедура CURRENT выдает в качестве значения ссылки на текущий процесс.
Рассмотрим специальные процедуры и операторы класса SIMULATION.
Для планирования новых событий используются операторы 'ACTIVATE' и 'REACTIVATE'. Для того чтобы запланировать событие, необходимо задать момент системного времени, в который оно должно произойти, и процесс, для которого планируется данное событие.
Синтаксис данных операторов имеет вид:
[<пусто>]
[ 'ACTIVATE'] [ [ 'AT' T ] [ 'PRIOR'] ]
X [ [ 'DELAY' T] ]
[ 'REACTIVATE' ] [ 'AFTER' Y ]
[ 'BEFORE' Y ]
Где Х - объектное выражение, обозначающее процесс, для которого планируется событие;
Т - арифметическое выражение, значение которого трактуется в случае 'AT' T как абсолютное системное время, а в случае 'DELAY' T - как время задержки планируемого события относительно текущего момента системного времени;
Y -объектное выражение, обозначающее активный или приостановленный процесс.
Оператор 'AKTIVATE' выполняет планирование события только для пассивных процессов, а оператор 'REACTIVATE' выполняет планирование и для процессов, находящихся в активном или приостановленном состоянии.
Оператор вида 'ACTIVATE' X 'AT' T активизирует процесс в системное время, равное Т.
Если указано планирование с приоритетом 'PRIOR', то событие будет исполнено перед другими событиями, ранее запланированными на данный момент системного времени. При планировании без приоритета одновременные события исполняются в порядке, в котором они планировались.
При планировании событий можно задать не системное время, а событие через которое ли после которого необходимо запланировать событие. В обоих случаях время события Х полагается равным времени события для процесса Х. Если процесс Y не является активным или приостановленным процессом, то никаких действий оператор не производит, если необходимо сразу запустить процесс, то нужно выполнить оператор
‘ACTIVATE’ X ‘AT’ TIME ‘PRIOR’,
где Х – активный процесс
или оператор
‘REACTIVE’ X ‘BEFORE’ CURRENT,
где Х – любой процесс, кроме завершенного.
Для того чтобы задержать исполнение некоторого процесса на некоторый интервал системного времени, используется оператор HOLD(T), где Т – некоторое арифметическое выражение. При этом текущая активная фаза данного процесса заканчивается, а его локальное управление останавливается перед оператором, следующим за HOLD.
Оператор HOLD(T) эквивалентен оператору
‘REACTIVE’ CURRENT ‘DELAY’ T.
В процессе работы имитационных моделей часто бывает необходимо отметить некоторое из ранее запланированных событий, если в ходе моделирования сложились условия, делающие невозможным их осуществление в намеченный момент системного времени.
Для отмены запланированных активных фаз процессов предусмотрен оператор CANCEL(X), где X – процесс, чья активная фаза должна быть отменена, т.е. процесс Х становится пассивным.
Для перевода текущего процесса в пассивное состояние используется оператор PASSIVATE, который переводит текущий активный процесс в пассивное состояние и его локальное управление устанавливается на следующий оператор.
Если перед тем, как остановить работу некоторого процесса, его необходимо поставить в очередь, то надо выполнить оператор WAIT (S), где S обозначает очередь, в результате текущий процесс встанет в очередь S и перейдет в пассивное состояние.