160
режим перехода
GATE 34,ALTR
(т. е. если устройство 34 прервано, то перейти к ALTR).
Блок TEST. Блок TEST описывает условие, которое проверяет при входе в него транзакта и определяет направление дальнейшего движения транзакта в зависимости от этого условия, которое записывается в виде алгебраического соотношения двух аргументов. При выполнении соотношения транзакт пропускается в следующий за блоком TEST блок. В случае невыполнения соотношения транзакт направляется в блок, метка которого указана в поле С. Если поле С пусто, то транзакт блокируется блоком до выполнения соотношения.
Проверяемое соотношение записывается в поле операций сразу за блоком TEST. При этом можно использовать следующие мнемонические обозначения операций сравнения: L — «меньше чем»; LE — «меньше или равно»; E — «равно»; NE — «не равно»; G — «больше чем»; GE — «больше или равно».
Соотношение рассматривается между первым и вторым аргументами, записываемыми в полях А и В соответственно. Аргументы должны принадлежать к стандартным числовым атрибутам.
Если поле С не пусто, то транзакт всегда может войти в блок TEST и в зависимости от соотношения аргументов будет передан либо в следующий блок, либо в блок, указанный в поле С. Если поле С пусто, то транзакт при невыполнении условия не сможет войти в блок TEST и симулятор в каждый момент времени будет проверять, не изменилось ли блокирующее условие. Такой режим является нежелательным вследствие больших затрат машинного времени на многократные проверки блокирующего условия. Например:
TEST L |
S1,K10. |
TEST NE |
PF1,PF2 |
TEST GE |
Q2,FN1,CEN |
Блок TRANSFER. Этот блок обычно используется для того, чтобы передать входящие в него транзакты в блоки, не следующие по номеру за ним. Передача может быть выполнена логически, статистически, условно и безус-
161
ловно. Вид передачи определяется мнемоническим обозначением, указанным в поле А блока TRANSFER. При безусловной передаче указывается один следующий блок (путь), а при условной передаче — два или больше путей. Выбор того или иного пути определяется режимом работы блока TRANSFER. Поле В определяет первый (или единственный) из следующих блоков. Если следующий блок поля В описан на следующей карте входной колоды, то поле В может быть оставлено пустым. Когда симулятор ПМДС встречает карту — описание блока TRANSFER с пустым полем В, то он записывает в поле В этой карты номер следующего блока.
Поле С определяет следующий блок и интерпретируется в соответствии с режимом работы блока TRANSFER. Существуют различные режимы работы блока TRENSFER.
Если поле А блока TRANSFER пусто, то все транзакты, поступающие на этот блок, будут передаваться в блок, номер которого указан в поле В. Например:
TRANSFER ,NEXT
TRANSFER 415
Если в поле А блока TRANSFER стоит ВОТН, то каждый транзакт, поступающий на этот блок, проверяет два пути. Сначала проверяется блок, указанный в поле В, и если транзакт не может войти в этот блок, он пытается войти в блок, указанный в поле С. Если транзакт не может войти и в этот блок, он задерживается в блоке TRANSFER и повторяет опрос блоков, указанных в полях В и С, при каждом изменении текущего времени в модели, пока не находит выхода. Этот режим выбора существенно увеличивает время работы, так как если оба выхода заблокированы, опрос их состояния производится очень часто. Например:
|
TRANSFER |
BOTH,,SAM |
|
SEIZE |
52 |
SAM |
SEIZE |
84 |
(транзакт блока TRANSFER пытается войти в блок SEIZE; если соответствующее устройство занято, то он направляется в блок SAM; если транзакт не может войти в блок SAM, то он остается в данном блоке TRANSFER
162
и повторяет описанные выше операции при каждом изменении текущего времени).
Если в поле A стоит ALL, то транзакты, входящие в блок, могут опрашивать много путей (блоков). Поле B определяет первый выбираемый блок, поле C — последний. Поле D определяет индексную константу i. Эта константа дает пользователю возможность опрашивать определенные блоки, находящиеся между теми, которые заданы в полях В и С. Транзакт, вошедший в блок TRANSFER, далее пытается выйти через блок, указанный в поле В. Если блок, указанный в поле В, занят, то транзакт пытается войти в блоки с номерами Y+i, Y+2i,..., Z, где Y— номер блока, указанного в поле В, Z — номер блока, указанного в поле С. При этом Z = Y + Мi, где М — некоторое целое положительное число. Если транзакт не может войти ни в один из этих блоков, он остается в блоке TRANSFER и при изменении текущего времени повторяет все описанные выше операции. Если задан режим ALL, пользователь должен проследить за тем, чтобы номера просматриваемых блоков совпадали с номерами, присваиваемыми блокам симулятором GPSS. Например:
|
TRANSFER |
ALL,FIRST,LAST,3 |
FIRST |
SEIZE |
1 |
|
ASSIGN |
12,K1,,PB |
|
TRANFER |
,LAST +2 |
|
SEIZE |
2 |
|
ASSIGN |
12,K2,,PB |
|
TRANCFER |
,LAST +2 |
LAST |
SEIZE |
3 |
(транзакт пытается войти в блок FIRST; если он получает отказ, что определяется типом блока FIRST, то транзакт пытается войти в блок FIRST + 3; если и в этом блоке будет отказ, то транзакт пытается войти в блок FIRST + 6 (LAST); если транзакт не смог войти ни в один из трех блоков, он остается в блоке TRANSFER и программа (система) переходит к обработке другого транзакта). При каждой попытке продвинуть транзакты, находящиеся в блок TRANSFER, все проверки, перечисленные выше, производятся сначала, как и в режиме ВОТН, поэтому время счета также может значительно возрасти.
Если в поле А стоит SIM, то выбирается один из двух возможных путей. Каждый входящий в блок транзакт содержит информацию для принятия
163
решения. В каждом транзакте есть индикатор SIM, установленный в 0 или 1. Если значение индикатора SIM равно 1, то транзакт будет послан в блок, указанный в поле С, а индикатор SIM будет установлен в 0. Если индикатор SIM равен 0, то транзакт может направляться по выбранному для него пути. Если транзакт получает отказ при попытке войти в какой-либо блок, этот индикатор устанавливается в 1, фиксируя тот факт, что некоторое условие не выполняется. Если одновременно должны удовлетворяться несколько условий, каждый из них может быть проверен, и если все они удовлетворяются, то индикатор SIM транзакта остается равным 0. Если не выполняется хотя бы одно из условий, индикатор SIM устанавливается в 1. В таких случаях блок, заданный в поле С, указывает блок, в котором проверялось первое условие, и транзакт выполняет проверку условий, пока все они не будут удовлетворяться одновременно. Блок ADVANCE также устанавливает индикатор SIM в 0. Проверка состояний связана с блоками, которые могут задерживать транзакты. Для проверки условий используется блок GATE, описанный ранее.
Существует режим проверки одновременного выполнения нескольких условий. В приведенном ниже примере транзакты не могут перейти к блоку SEIZE, если устройства 1, 2 и 15 не будут одновременно свободны. При входе транзактов в блок TRANSFER проверяется значение индикатор SIM этого транзакта. Если транзакт был задержан в каком-либо из блоков GATE, его индикатор установлен в 1. Когда индикатор проверяется в блоке TRANSFER, оказывается, что транзакт был задержан, и он отсылается к тому блоку, где производилась первая проверка (CPU), и вся последовательность проверок повторяется. При проверке (т. е. при прохождении блока TRANSFER) с индикатором SIM, индикатор всегда сбрасывается в 0, поэтому если транзакт повторяет последовательность проверок в тот же момент времени, т. е. без задержки, то после второй попытки он пройдет, так как индикатор 51М устанавливается в 0 при первой попытке. Например:
GATE NU |
1 |
GATE NU |
2 |
GATE NU |
1,5 |
TRANSFER |
SIM,CRU |
SEIZE |
1,5 |
Рассмотрим статистический режим выбора. Если в поле А блока TRANSFER записана десятичная дробь, то производится случайный выбор
164
между блоками, описанными в поле В и в поле С. Вероятность выбора блока С задается дробью. Например:
TRANSFER: 370,ТНIS,ТНАТ
(т. е. режим выбора задан числом 370, при этом 37% всех транзактов, поступивших на блок NRANSFER, будет передаваться на блок поля С, а 63%
—на блок поля В).
Для каждого отдельного транзакта, естественно, выбирается только один из двух путей. Выбор производится для каждого Транзакта только один раз, в момент входа в блок TRANSFER. Кроме этого, пользователю предоставлены еще четыре режима выбора: PICK, SBR, FN и Р. Однако начинающему пользователю их лучше не употреблять.
7.9.Блоки для сбора статистики
Встатистической категории GPSS используется два типа объектов: очереди и таблицы. Очереди вводятся в моделирующую программу для регистрации статистической информации о процессе ожидания. Постановка транзакта в очередь производится блоком QUEUE, а удаление транзакта из очереди — блоком DEPART. Таблицы, вводятся в моделирующую программу для сбора статистических данных. Ввод производится с помощью карты TABLE, а регистрация статистических данных в таблице — при входе транзакта в блок TADULATE.
Блок QUEUE. Этот блок аналогичен блоку ENTER и извещает симулятор GPSS о том, что в данной точке блок-диаграммы нужно собирать статистику об очереди. Номер очереди, в которую пользователь хочет занести транзакт, задается в поле А блока QUEUE. При записи нового - транзакта в очередь определяется длина интервала времени, в течение которого длина очереди оставалась неизменной. При входе транзакта в блок QUEUE текущая длина очереди увеличивается на число единиц, указанное в поле В, после чего симулятор сравнивает новую длину очереди с максимальной, достигнутой до сих пор. Если новое значение больше максимального, то старое максимальное значение очереди заменяется на новое. Кроме того, счетчик общего числа единиц, прошедших через очередь, увеличивается на то же число еди-