GENERATE 480 ;фиктивный блок времени

TERMINATE 1

START 1

Транзакты, рождённые в первом GENERATE, просто уничтожаются. А единственный транзакт, рождённый во второмGENERATE, заходя в блок TERMINATE, уменьшает значение счётчика завершений на 1, а он был равен 1, т. е. счётчик обнуляется, и процесс моделирования останавливается. Таким образом, в этой модели гарантируется завершение прогона в определённый момент модельного времени, а точное количество транзактов, прошедших через модель, непредсказуемо.

Моделирование работы одноканальных устройств

Устройства используются при моделировании систем для имитации работы оборудования единичной ёмкости, например, процессор, канал передачи данных, человек, компьютер. Устройство в любой момент времени может обрабатывать только одно сообщение (транзакт). Одноканальные устройства заранее не описываются.

Для использования одноканального устройства транзакту необходимо выполнить следующие шаги:

· ждать очереди, если необходимо;

· когда подходит очередь, занять устройство;

· пропустить время, необходимое на обслуживание;

· когда обслуживание закончится, освободить устройство.

Второй и четвёртый шаги реализуются блоками SEIZE и RELEASE.

БлокSEIZE(занять устройство)имеет следующий формат:

SEIZE A

Аргумент А задаёт номер или имя занимаемого устройства.

Свободный блок SEIZE позволяет вошедшему в него сообщению занять указанное устройство. Блок SEIZE задерживает сообщение, если устройство занято или находится в состоянии недоступности. Сообщение, занявшее уст­ройство, затем пытается перейти к следующему по номеру блоку. Уст­ройство остаётся занятым до тех пор, пока занимающее его сообщение не войдёт в соответствующий блок RELEASE. Прежде чем освободить устройство, сообщение может пройти через неограниченное число блоков.

БлокRELEASE(освободить устройство)имеет следующий формат:

RELEASE A

Освободить устройство может лишь тот транзакт, который его занимает, иначе возникает сообщение об ошибке.

Транзакты обслуживаются устройствами в течение некоторого промежутка времени. Для моделирования такого обслуживания, т. е. для задержки транзактов на определённый отрезок модельного времени служит блокADVANCE (задержать), имеющий следующий формат:

ADVANCE A,B

Операнды A и B имеют тот же смысл, что и в соответствующих полях блока GENERATE. Операнд А обязателен. Любой транзакт входит в блок ADVANCE беспрепятственно.

Пример.

GENERATE 5,2

SEIZE 1

ADVANCE 4,2

RELEASE 1

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

Моделирование очередей

В GPSS объекты типа "очередь" вводятся для сбора статисти­ческих данных. Необходимо понимать, что блоки очереди не влияют на реальное образование очередей транзактов (очереди образуются перед входами в устройства сами по себе), блоки являются регистраторами статистики. Статистика об очередях собирается в моменты входа транзакта в блок QUEUE(вход в очередь) или в блок DEPART (выход из очереди). Формат записи блока QUEUE:

QUEUE A,[B]

Операнд А задаёт номер или имя очереди. Может быть именем, положительным целым числом, СЧА. Поле Вопределяет число единиц, на которое увеличивается те­кущая длина очереди. Если поле В пусто, то по умолчанию прибавляется единица.

Когда транзакт входит в блок QUEUE, то ищется очередь с име­нем, определённым операндом А. Если необходимо, очередь создаётся. Значение текущей длины очереди хранится в СЧА Q$имя. Поскольку очередь обычно используется для измерения времени ожидания, за блоком QUEUE обычно следует такой блок, как SEIZE, который может задержать сообщение. Одно и то же сообщение может одновременно увеличить длину нескольких очередей, т. е. сообщение может войти в несколько блоков QUEUE перед тем, как войти в соответствующие блоки DEPART.

Блок DEPARTимеет следующий формат:

DEPART A,[B]

Блок DEPART служит для уменьшения счётчика длины очереди. В поле В задаётся число единиц, на которое уменьшается длина очереди. Это число не должно превышать текущую длину очереди, иначе возникает ошибка «длина очереди отрицательна». Если поле В пусто, длина очереди по умолчанию уменьшается на единицу.

Пример.Посетители приходят в кассу кинотеатра через 20 ± 10 сек, знакомятся с обстановкой 15 ± 15 сек и занимают очередь. Каждый посетитель приобретает билет у кассира в течении 20 ± 5 сек. Построить модель в течении 8 часов.

Запишем модель на языке GPSS.

SIMULATE ;управляющий блок на выполнение программы

GENERATE 20,10 ;приход посетителей

ADVANCE 15,15 ;знакомство с обстановкой

QUEUE 1 ;очередь к кассиру

SEIZE KASSA ;занять кассира

DEPART 1 ;освободить очередь

ADVANCE 20,5 ; покупка билета

RELEASE KASSA ;освободить кассира

TERMINATE ;уход из кассы

GENERATE 2880 ;таймер времени

TERMINATE 1

START 1

При наборе блоков удобно пользоваться окном Insert GPSS blocks (вставить блок), которое вызывается в меню Edit/Insert GPSS blocks.Выбрав в нём нужный блок, заполняем последовательно поля ввода для каждого операнда. Здесь удобно вводить метки и комментарии.

Моделирование многоканальных устройств (МКУ)

Многоканальное устройство (памяти) – особый объект языка для имитации разного рода накопителей, конвейеров, в которых одновременно могут находиться несколько транзактов. В отличие от одноканального устройства, для указания ёмкости (количества каналов) используется оператор описания памяти STORAGE. Как любой оператор описания он помещается между блоками SIMULATE и GENERATE. Формат оператора:

Имя STORAGE А

Сначала определяется имя МКУ, А – ёмкость МКУ (количество каналов).

Блок ENTER(занять МКУ) позволяет вошедшему транзакту использовать много­канальное устройство. Транзакт может быть задержан на входе в блок, если многоканальное устройство заполнено, или имеющейся ёмкос­ти недостаточно, или устройство в данный момент недоступно. Формат записи:

ENTER A,[B]

Операнд А указывается номер или имя МКУ, определённое блоком STORAGE. В необязательном поле В содержится число занимаемых каналов. Если поле В пусто, то по умолчанию занимается од­ин канал. Одно и то же сообщение может входить в неограниченное число многоканальных устройств, а впоследствии освобождать их (или часть из них).

Блок LEAVE(покинуть устройство) имеет формат:

LEAVE A,[B]

Блок LEAVE освобождает определённое число единиц многоканаль­ного устройства, указанных в поле В. Если это поле пусто, по умолчанию предполагается равным 1. Число осво­бождаемых единиц не должно превышать текущее содержимое многоканального устройства. Транзакт не обязан освобождать столько же единиц каналов, сколько занимал. Поле А блока LEAVE определяет номер или имя многоканального ус­тройства.

Пример.Машины подъезжают на СТО с интервалом 4±2 мин и обслуживаются у одного из 3-х свободных мастеров в течении 60±4 – 5 мин , затем покидают станцию. Можно промоделировать следующим образом.

SIMULATE

CTO STORAGE 3

GENERATE 4,2

ENTER CTO

ADVANCE 60,45

LEAVE CTO

TERMINATE