"Занятие свободных приборов. Блоки SЕIZЕ (ЗАНЯТЬ) и RELEASE (ОСВОБОДИТЬ)"
Предположим, что мы хотим использовать прибор. При этом мы должны выполнить следующие шаги:
- Ожидаем своей очереди, если это необходимо. Естественно, что ожидание требует некоторого интервала времени.
- Когда подходит наша очередь, занимаем прибор. Событие "занятие прибора" происходит в некоторой точке времени.
- Прибор остается в состоянии занятости, пока не закончится обслуживание. Для обслуживания требуется также некоторый интервал времени.
- Когда обслуживание заканчивается, мы освобождаем прибор. Событие "освобождение прибора" также происходит в некоторой точке времени.
Подобная последовательность шагов выполняется и при моделировании использования прибора в GPSS. Реализация шагов 2 и 4 в GPSS будет рассмотрена нами сейчас; реализация шага 3 и возможности сбора статистики при выполнении шага 1 будут рассмотрены в следующих параграфах.
В GPSS элементами, которые требуют обслуживания, являются транзакты. Мы знаем, что для транзактов характерно перемещение по модели блок за блоком. Предположим, что в какой-то момент активности транзакт занимает прибор. Для этого транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор. Блок должен обладать следующими свойствами:
- Если прибор уже используют, транзакт не может войти в блок, т. е. ему не разрешается занять прибор в данный момент времени, и он должен ждать в очереди. Такой запрет на вход в блок приводит к тому, что транзакт на время исключается из рассмотрения.
- Eсли прибор не используют, транзакт может войти в блок. Вход транзакта в блок вызывает выполнение подпрограммы обработки этого блока. Результатом выполнения подпрограммы является изменение статуса прибора из "незанято" в "занято".
Блок, который обладает этими свойствами, является блоком SEIZE (ЗАНЯТЬ). Этот блок вместе с операндом А показан на рис. 5.1.
Рис. 5.1.
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) занимаемого прибора | Ошибка |
Вход транзакта в блок SEIZЕ моделирует занятие прибора, вход того же транзакта в другой блок моделирует освобождение прибора.
Назначением этого другого блока является изменение состояния ранее занятого прибора с "занято" в "незанято". Этим блоком является блок RELЕАSЕ (ОСВОБОДИТЬ), который с операндом А показан на рис. 5.2.
Рис. 5.2.
Операнд | Значение | Значение или результат по умолчанию |
А | Имя (символическое или числовое) освобождаемого прибора | Ошибка |