Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_6_GPSS World_2014.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
188 Кб
Скачать
☆

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

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

TERMINATE [A]

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

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

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

При моделировании системы иногда необходимо промоделировать обработку конкретного числа заявок, например 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, т. е. счётчик обнуляется, и процесс моделирования останавливается. Таким образом, в этой модели гарантируется завершение прогона в определённый момент модельного времени, а точное количество транзактов, прошедших через модель, непредсказуемо.

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

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

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

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

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

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

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

Второй и четвёртый шаги реализуются блоками 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 и упорядочиваются согласно приоритетам и времени прихода. Первый из этого списка занимает устройство.