Материал: 2443

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

46

самый низкий приоритет – нулевой. Если поле E пусто, то генерируемые транзакты имеют нулевой приоритет.

Операнд F задаёт число параметров транзакта, поумолчанию12. Нужно помнить, что смысл единицы времени (секунда, минута, час, день) закладывает разработчик (нигде не прописывая), поэтому нужно все операнды привести к единой единице измерения времени.

Примеры.

1)GENERATE 5;определяет время поступления транзактов ровно через 5 ед. времени;

2)GENERATE ,,,10;в момент времени 0 родится одновременно 10 транзактов;

3)GENERATE 2,,10,,1 ;первый родится в 10, затем в 12, 14 и т . д. с

приоритетом 1.

3.3.2. Уничтожение транзактов

Блок уничтожения транзактов (завершения) имеет формат:

TERMINATE [A]

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

Начальное значение счётчика завершений устанавливается управляющим оператором START А (начать), предназначенным для запуска прогона модели. Операнд A этого оператора содержит начальное значение счётчика завершений. Прогон модели заканчивается, когда содержимое счётчика завершений обращается в 0. Таким образом, в модели должен быть хотя бы один блок TERMINATE с непустым A, иначе процесс моделирования никогда не завершится.

Участок блок-схемы модели, связанный с парой блоков GENERATE-ТERMINATE, называется сегментом. Простые модели могут состоять из одного сегмента, в сложных моделях может быть несколько сегментов.

47

При моделировании системы иногда необходимо промоделировать обработку конкретного числа заявок, например 100 заявок. Соответствующий сегмент будет выглядеть так:

GENERATE 5,2,,100

………………………………

TERMINATE 1

START 100

Начальное значение счётчика завершений равно 100. Каждый транзакт, проходящий через блок TERMINATE, вычитает из счётчика единицу, и таким образом моделирование завершится, когда сотый по счёту транзакт войдёт в блок TERMINATE. При этом точное значение таймера в момент завершения прогона непредсказуемо. Следовательно, в приведённом примере продолжительность прогона устанавливается не по модельному времени, а по количеству транзактов, прошедших через модель.

Но чаще возникает необходимость провести процесс моделирования в течение конкретного времени, например, одного 8-часового рабочего дня. Если единица модельного времени минута, то необходимо, чтобы в момент 480 моделирование прекратилось. Для этого включаем сегмент – фиктивный блок времени:

GENERATE 5,2

………………………

TERMINATE

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

TERMINATE 1 START 1

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

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

Устройства используются при моделировании систем для имитации работы оборудования единичной ёмкости, например,

48

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

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

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

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

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

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

RELEASE.

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

SEIZE A

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

неограниченное число блоков.

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

RELEASE A

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

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

ADVANCE A,B

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

Пример.

49

GENERATE 5,2

SEIZE 1

ADVANCE 4,2

RELEASE 1

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

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

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

QUEUE A,[B]

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

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

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

DEPART A,[B]

Блок DEPART служит для уменьшения счётчика длины очереди. В поле В задаётся число единиц, на которое

50

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

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

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

SIMULATE

 

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

GENERATE 20,10

;приход посетителей

ADVANCE

15,15

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

QUEUE 1

 

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

SEIZE KASSA

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

DEPART 1

20,5

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

ADVANCE

; покупка билета

RELEASE

KASSA

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

TERMINATE

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

GENERATE 2880

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

TERMINATE 1

 

START 1

 

 

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

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

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

Источник: https://studfile.net/preview/16408500/