Логика работы моделирующей системы обеспечивается списками. Списки представляют собой структуры данных, в которых размещается полная информация о транзактах.
Список будущих событий (FEC) содержит транзакты, которые смогут начать движение в модели в будущие моменты времени. Это те транзакты, для которых моменты начала движения определены в блоках GENERATE и ADVANCE.
В список текущих событий (CEC) входят транзакты, которые должны перемещаться в модели в текущий момент модельного времени. Если при этом транзакт входит в блок ADVANCE с ненулевым временем задержки, то он перемещается в список будущих событий.
В список прерываний помещаются транзакты, обслуживание которых прервано блоком PREEMPT. После снятия прерывания в блоке RETURN транзакты вновь возвращаются в список будущих событий. На рис. 1 представлена структура элемента списка GPSS.
Номер транзакта
Приоритет
Время помещения в список
Группа
Номер текущего блока
Номер следующего блока
XN
PRI
BDT
ASSEM
CURRENT
NEXT
Рис 1. Структура списка GPSS
В список синхронизации помещаются транзакты, ожидающие объединения с другими транзактами в блоках GATHER и ASSEMBLE или находящиеся в блоках MATCH. После выполнения условий синхронизации транзакты возвращаются в список текущих событий.
Кроме рассмотренных списков, обработка которых происходит без участия программиста, в GPSS существуют списки пользователя, управление которыми осуществляется с помощью блоков LINK и UNLINK. Списки пользователя имеют СЧА, к которым можно обращаться внутри модели:
· CHj - текущее число транзактов в списке j;
· CAj - среднее число транзактов в списке j;
· CMj - максимальное число транзактов в списке j;
· CCj - общее число входов транзактов в список j;
· CTj - среднее время пребывания транзакта в списке j.
Процедура просмотра списка текущих событий:
Процесс движения транзактов в модели сопровождается просмотром содержимого списков, внесением в них изменений, а также перемещением транзактов из одного списка в другой.
Транзакты, находящиеся в списке текущих событий, расположены в порядке убывания приоритетов. Когда транзакт вводится в список текущих событий, он становится последним среди транзактов, имеющих тот же приоритет. Процедура просмотра списка текущих событий выполняет три основные действия:
1. Коррекция таймера. При этом момент времени устанавливается равным наименьшему времени выхода из блока для транзактов, находящихся в списке будущих событий. Все транзакты, имеющие такое время выхода, переводятся из списка будущих событий в список текущих событий;
2. Последовательный просмотр списка текущих событий к его концу с целью определения возможностей движения их в модели;
3. Попытка продвижения транзакта в последующие блоки. Если транзакт может войти в следующий блок, выполняется программа, соответствующая данному блоку. Если дальнейшее движение транзакта невозможно в силу тех или иных условий, процедура переходит к обработке следующего транзакта. Так до тех пор, пока дальнейшее продвижение любого транзакта станет невозможным. Тогда осуществляется коррекция таймера, и процедура повторяется сначала.
Устройства моделируют объекты, в которых может происходить обработка. Как правило, она связана с затратами времени. Каждое устройство в любой момент времени может быть занято лишь одним транзактом. Существует аналогия между устройствами GPSS и каналами систем массового обслуживания. В GPSS имеется возможность моделировать прерывания устройств. Существуют средства логической проверки состояния устройств. Каждое из действий с устройством отображается в модели определенным блоком.
Захват и освобождение устройства моделируются соответственно блоками SEIZE и RELEASE. Для проверки состояния устройств используют GATE. Прерывание моделирует блок PREEMPT, снятие прерывания - блок RETURN.
С устройствами связаны следующие СЧА:
· Fj - состояние устройства с номером j: 0 - если устройство свободно, и 1 - если устройство занято;
· FRj - коэффициент использования устройства j;
· FCj - число входов в устройство j;
· FTj - среднее время использования устройства j одним транзактом.
Устройства имеют также стандартные логические атрибуты (СЛА), каждый из которых может принимать одно из двух значений: "ИСТИНА" или "ЛОЖЬ".
· U - занято;
· NU - свободно;
· I - прервано;
· NI - не прервано.
Проверка состояния устройства осуществляется блоком GATE, который в зависимости от значения проверяемого СЛА может пропускать или задерживать транзакты, либо изменять траекторию их движения.
В результате моделирования о каждом устройстве выводится следующая информация:
· FACILITY – Имя или номер устройства.
· ENTRIES – Количество транзактов, вошедших в устройство за все время моделирования, или после выполнения оператора RESET либо CLEAR.
· UTIL – Коэффициент использования устройства: отношение времени использования устройства к общему времени моделирования, или к периоду измерения.
· AVE. TIME – Среднее время использования отдельными транзактами в течение периода измерения.
· AVAIL – Состояние устройства в момент завершения моделирования. Если устройство занято, значение параметра равно 0, если свободно 1.
· OWNER – Номер транзакта, который занимал устройство в момент завершения обслуживания. Если устройство в этот момент было свободно, значение параметра устанавливается равным 0.
· PEND – Количество транзактов, обслуживание которых было прервано другими, прошедшими через блок PREEMPT. Указанные транзакты ожидают завершения обслуживания «более срочных».
· INTER – Количество транзактов, прервавших обслуживание в данном устройстве. Количество транзактов в цепи прерываний.
· RETRY – Количество транзактов, ожидающих изменения специальных условий, зависящих от состояния данного устройства.
· DELAY – Общее число транзактов, каждый из которых должен войти в устройство. Транзакты, ожидающие освобождения устройства, включая те, которые должны занять его, используя прерывание.