В данной главе рассматриваются общие принципы управления моделированием в GPSS. Разные трансляторы поразному могут реализовывать эти принципы.
В системе GPSS интерпретатор (программа управления моделированием (ПУМ)) поддерживает сложные структуры организации списков (рис. 4.14). С целью уменьшения затрат компьютерного времени на просмотр списков система GPSS ведет два основных списка событий. Первым является список текущих событий (СТС), куда входят все события, запланированные на текущий момент модельного времени независимо от того, условные они или безусловные. Программа управления моделированием просматривает в первую очередь этот список и пытается переместить по модели те транзакть. для которых выполнены условия. Если в этом списке таких транзак тов нет, то ПУМ обращается к другому списку - списку будущих событий (СБС). Она переносит все события, которые запланированы на ближайший момент модельного времени, из этого списка в СТС; повторяет его просмотр. Такой перенос осуществляется также в сл> чае совпадения текущего времени моделирования со временем перве го события в списке будущих событий.
В СТС транзакты размещены в порядке уменьшения приоритет; (то есть транзакты с более высоким приоритетом размещены ближе.с началу списка). Транзакты с одинаковыми приоритетами размещают ся в соответствии с последовательностью поступления в список. Кг ждый транзакт в СТС может находиться или в активном состояния (то есть просматриваться ПУМ в данный момент модельного времени), или в состоянии задержки.
В начальный момент (при выполнении оператора управление START, который начинает фазу интерпретации GPSS-модели) ПУМ обращается ко всем блокам GENERATE модели. Каждый из этих блоков планирует момент появления транзактов и заносит их в СБС после чего ПУМ обращается к СТС. Так как в этом списке пока что отсутствуют транзакты, то ПУМ просматривает СБС и выбирает из него все транзакты, запланированные на ближайший момент времени и переносит их в СТС, после чего пытается продвинуть первый транзакт этого списка по блокам модели. Если перемещение транзакта было задержано по какой-либо причине, не связанной с блоком ADVANCE, то он остается в СТС и ПУМ пробует перемещать такой транзакт из этого списка далее по блокам. Если транзакт вошел в блок ADVANCE, то планируется его выход из этого блока и транзакт переносится в СБС.
Списки текущих и будущих событий можно увидеть на экране дисплея, если выдать команду EVENTS для GPSS/PC или в окне списков для GPSS World.
В организации эффективной процедуры просмотра важен порядок просмотра транзактов, движение которых заблокировано (например, ввиду занятости некоторого ресурса). Простейшим решением является пересмотр всех заблокированных транзактов для каждого нового значения модельного времени и выбор тех, для которых сняты условия блокировок. Если моделируемая система перегружена, то этот способ с точки зрения затрат компьютерного времени невыгоден, так как каждый транзакт пересматривается многократно до того, как выйдет из состояния блокирования.
Если причина перевода транзактов в состояние блокирования - состояние определенного ресурса системы в данный момент времени, то намного более эффективным является способ обработки, по которому заблокированные по этой причине транзакты вообще не пересматриваются до тех пор, пока не изменится состояние соответствующего ресурса. Такой способ может быть реализован, например, регистрацией для каждой единицы ресурса транзактов, движение которых заблокировано ввиду состояния именно этого ресурса в данный момент времени. В момент, когда изменяется состояние этого ресурса, необходимо сразу же просмотреть транзакты, которые этого ожидают, и продолжить их обработку.
Если транзакты находятся в активном состоянии, то процедура просмотра пытается переместить их к следующим блокам. Если перемещение транзакта блокируется каким-нибудь ресурсом ввиду его занятости, то вхождение в следующий блок невозможно и транзакт переводится в состояние задержки. Такие транзакты не просматриваются и размещаются в соответствующем списке задержки.
Если при обслуживании текущего активного транзакта произошло изменение состояния ресурса, пересмотр начинается сначала, и опять обслуживаются все транзакты из СТС, которые находятся в активном состоянии. Если изменение списков ресурсов не произошло, ПУМ опять обращается к СТС и проверяет, не остались ли в нем транзакты, которые необходимо обработать.
Список блокировок — это список транзактов, которые ожидают изменения состояния ресурса. Существует шесть видов таких списков, связанных с устройствами; семь видов, связанных с МКУ, и два вида, связанных с логическими ключами. С устройствами используются списки для занятых и незанятых, доступных и недоступных устройств и устройств, работающих без прерываний и с прерываниями. С МКУ используются списки для заполненного, незаполненного, пустого, непустого, доступного, недоступного МКУ и транзактов, которые могут войти в МКУ. С логическими ключами связаны списки для включенных и выключенных ключей.
Кроме двух основных списков СТС и СБС существует список прерываний (СПР), содержащий прерванные во время обслуживания транзакты, а также транзакты, вызвавшие прерывание. Список прерываний используется для организации обслуживания одноканальных устройств по абсолютным приоритетам. Это дает возможность организовать приоритетные дисциплины обслуживания транзактов в устройствах.
Список синхронизации (СС) содержит транзакты, которые на данный момент времени сравниваются. Этот список работает с транзактами, полученными с помощью блока SPLIT, который создает транзакты-копии, принадлежащие одному семейству или ансамблю. Синхронизацию движения транзактов одного семейства выполняют следующие блоки: MATCH (синхронизирует движение транзактов с другим блоком), ASSEMBLE (собирает все транзакты-копии и выдает один начальный транзакт), GATHER (собирает заданное количество транзактов и задерживает копии до тех пор, пока не соберется необходимое количество копий транзактов). Блок SPLIT можно использовать многократно.
Остановленные процессы находятся в СБС, СС и списках блокировок.
Список пользователя (СП) содержит транзакты, выведенные пользователем из СТС с помощью блока LINK и помещенные в СП как временно неактивные (переведенные пользователем в пассивное состояние). При работе ПУМ они ей недоступны до тех пор, пока не будут возвращены пользователем в СТС с помощью блока UNLINK.

Моделирование заканчивается тогда, когда счетчик завершения, инициализированный оператором управления START, будет сброшен в ноль или когда в СТС и СБС не будет ни одного транзакта.






