Основными операторами группы являются: GATE, TRANSFER, TEST, LOOP. Транзакты, входящие в соответствующие блоки, далее продвигаются не к следующему блоку, а к блокам, адрес которых определяется, либо указывается в операторах. Операторы GATE и TEST имеют расширенное поле операции.
Блок GATE разрешает движение транзактам (в основном либо альтернативном направлениях) при определенном состоянии оборудования: устройств, памятей, ключей. Для описания состояний используются мнемонические обозначения логических указателей, приведенные в табл. П.6.
Существуют 2 режима работы блока GATE: режим отказа (условного входа) и режим перехода (безусловного входа). Оператор, описывающий блок GATE, имеет вид:
< GATE XXX А, В >
Здесь XXX — мнемоническое обозначение из таблицы П.6
А — номер устройства, памяти, ключа;
В — в режиме перехода — альтернативный адрес.
При работе и режиме отказа блок GATE блокирует (не пропускает) транзакт, если соответствующий объект не находится в требуемом состоянии. В подобной ситуации в режиме перехода транзакт направляется по альтернативному адресу.
Пример.
GATE SF 16 транзакт блокируется до заполнения памяти 16
GATE LS 1 транзакт блокируется до установки ключа 1
GATE FNU 7 транзакт блокируется пока устройство 7 занято
GATE FNI 21.ALTR если устройство 21 прервано, перейти к ALTR
Оператор TRANSFER имеет вид:
< TRANSFERA, B, C >
Существуют 4 следующие основные формы оператора.
1. Безусловный переход:
< TRANSFER, B >
здесь В — имя (адрес) блока, к которому направляется транзакт (операнд А отсутствует).
2. Условный переход с одним альтернативным адресом (режим "BOTH"):
< TRANSFER BOTH, B, C >
гдеBOTH — тип режима;
В — имя (адрес) блока, к которому направляется транзакт
(основной адрес);
С — альтернативный адрес (при невозможности войти в блок с адресом В).
3. Условный переход с многими альтернативами (режим "ALL"):
<TRANSFER ALL, B, C, D >
где ALL — тип режима;
В — первый адрес;
С — последний адрес;
D — константа М, используемая для вычисления возможных адресов движения транзактов: адрес в поле В, затем — В+М, В+2М,..., адрес в поле С.
4. Статистический переход (переход с заданной вероятностью):
<TRANSFER А, В, С >
здесь А — вероятность перехода транзакта по адресу С;
В — альтернативный адрес.
В GPSS/H удобно использовать так называемую относительную адресацию, т.е. обращение к какому-либо блоку, не имеющему метки, осуществляется с помощью его относительного адреса. Для примера рассмотрим три варианта записи блока безусловного перехода.
Примеры.
1. TRANSFER,CPU2
TRANSFER,*+3
TRANSFER,CPU1+2
Первый оператор (прямая адресация) направляет транзакт к блоку с именем CPU2. Два остальных оператора — примеры относительной адресации. Второй оператор посылает транзакт к третьему по счету блоку после рассматриваемого блока. Блок, к которому направляется транзакт последним оператором, является вторым по счету от блока CPU1.
2. a) TRANSFER BOTH, KASS1, KASS2
б) TRANSFER BOTH,,TWO
В случае а) транзакт первоначально направляется к блоку с отметкой KASS1. При невозможности войти в этот блок транзакт направляется к блоку с меткой KASS2. В случае б) транзакт делает попытку войти в следующий блок, если ему это не удается, он направляется к блоку с именем TWO.
3. TRANSFER ALL, FIRST, LAST, 3
FIRST GATE LS AAA
ADVANCE 5
TRANSFER,LAST+2
GATE LR BBB
ADVANCE 2
TRANSFER,LAST+2
LAST GATE LS CCC
ADVANCE 3,1
Транзакт последовательно пытается войти в следующие блоки: FIRST, FIRST+3, FIRST+6 (LAST).
Упражнение. Проанализировать работу участка программы, приведенного в примере 3. Следует обдуманно использовать оператор TRANSFER, поскольку в случае, когда транзакт не может продвинуться ни по одному из адресов, моделирующая программа направляет транзакты по каждому из адресов при каждом изменении модельного времени, что может привести к большим затратам времени моделирования.
4. TRANSFER.370, THIS, THAT
С вероятностью 0,37 транзакт перейдет к блоку ТНАТ (37% транзактов), а с вероятностью 0,63 - к блоку ТНIS (63% транзактов).
Оператор ТЕSТ определяет направление движения транзакта в зависимости от выполнения условия, заданного алгебраическим соотношением. Оператор имеет расширенное поле операции, включающее общепринятые обозначения логических операций: L, LE, E, NE, G, GE.
< TEST XX A, B, C >
здесь XX - знак логической операции (L, LE, E, NE, G, GE.);
А и В - сравниваемые СЧА;
С - альтернативный адрес.
Если соотношение в операторе ТЕSТ выполняется, то транзакт переходит к следующему блоку, в противном случае возможны два варианта: операнд С опущен - транзакт задерживается в блоке ТЕSТ до выполнения условия; операнд С задан - транзакт направляется по адресу С (первый вариант менее предпочтительный, так как может приводить к большим затратам машинного времени, требуемого на проверку блокирующего условия).
Пример.
а) ТESТ LE Q1, 10
б) ТЕST NE S1, PF2
в) TEST GE PF1,PF2, CPU
Действие операторов:
а) транзакт задерживается, если длина очереди 1 больше 10;
б) транзакт задерживается, если текущее содержимое памяти 1 равно значению 2-го параметра транзакта форматом "слово";
в) транзакт переходит к следующему блоку, если PF1 PF2, либо, в противном случае, направляется к блоку СPU.
Оператор LOOP служит для организации циклов в ИМ:
< LOOP A, B>
А - номер параметра транзакта, используемого в качестве счетчика цикла с указанием формата: "слово" (РF), "полуслово" (РН), "байт" (РВ). В - имя блока, являющегося начальным в повторяющейся группе блоков.
При каждом вхождении транзакта в блок LOOP значение счетчика уменьшается на 1. Если оно становится равным нулю, транзакт переходит к следующему блоку. Допускается изменение внутри цикла параметра-счетчика.
Пример.
ASSIGN 5,4,, PH
WAIT ADVANCE 15,3
LOOP PH5, WAIT
Для транзакта, вошедшего в блок ASSIGN, значение 5-го параметра форматом "полуслово" положено равным 4, внутри цикла этот параметр не меняется, следовательно, этот транзакт еще 3 раза возвратится к началу цикла — блоку WAIT.
Создание копий транзактов и синхронизация их движения.
Часто возникают задачи моделирования параллельно протекаемых процессов, синхронизируемых в определенные моменты времени.
Примером может служить производственный процесс, целью которого является изготовление изделия, состоящего из нескольких деталей. Прежде чем поступить к месту сборки изделия, детали проходят обработку в соответствии с технологическими маршрутами. Каждая деталь движется по своему маршруту независимо от других, но процесс сборки может начаться, когда все комплектующие поступят на место сборки (т.е. будет осуществлена синхронизация движения деталей).
Для моделирования таких ситуаций в GPSS/H используются семейства транзактов — множества транзактов, являющихся копиями одного и того же исходного транзакта либо его копий. Транзакты, принадлежащие одному семейству, могут быть синхронизированы. Для создания копий, идентичных исходному транзакту, используется оператор SPLIT, упрощенная форма которого имеет вид:
< SPLIT A, B >
здесь А — количество создаваемых копий;
В — адрес, по которому направляются копии.
Исходный транзакт поступает к следующему за блоком SPLIT блоку.
Для объединения определенного числа транзактов одного
семейства используется оператор:
< ASSEMBLE A >
где А — число п объединяемых транзактов.
Первый из транзактов, принадлежащих некоторому семейству, вошедший в блок ASSEMBLE, задерживается до прихода в блок п - 1 транзакта из данного семейства. После чего первый транзакт переходит к следующему блоку, а оставшиеся п - 1 транзактов уничтожаются.
В одном блоке ASSEMBLE могут накапливаться транзакты из разных семейств. Транзакты одного семейства могут накапливаться одновременно в различных блоках ASSEMBLE.
Для синхронизации движения двух транзактов из одного семейства используются два сопряженных блока MATCH, например:
ААА MATCH BBB
ВВВ MATCH ААА
В рассматриваемом примере транзакт, вошедший в блок с меткой ААА, будет ожидать в этом блоке прихода члена того же семейства в блок с меткой ВВВ.
Упражнение.
Проанализировать программу, моделирующую процесс изготовления изделия из двух деталей. Детали поступают с интервалом (300 ± 50) единиц времени. Обработкой деталей занимаются двое рабочих (один рабочий обрабатывает одну деталь). Процесс обработки каждой из деталей включает по две операции. Для первой детали время выполнения операций равно (70 ± 20), (20 ± 10), для второй — (60 ± 30), (30 ± 20). После выполнения первой операции рабочие производят сверку, время выполнения которой пренебрежительно мало (полагается равным нулю). По окончании обработки деталей третий рабочий производит сборку готового изделия из двух деталей со временем (50 ± 20).
* поступление деталей на обработку
GENERATE 300, 50
SPLIT l, MANB
* обработка первым рабочим первой детали
MANA SEIZE 1
ADVANCE 70, 20 операция 1
МЕТ1 MATCH MET2 сверка
ADVANCE 20,10 операция 2
RELEASE 1
TRANSFER,MANG
* обработка вторым рабочим второй детали
MANB SEIZE 2
ADVANCE 60, 30 операция 1
МЕТ2 MATCH MЕT1 cвepкa
ADVANCE 30, 20 операция 2
RELEASE 2
* сборка изделия третьим рабочим
MANC ASSEMBLE 2
SEIZE 3
ADVANCE 50, 20 сборка
RELEASE 3
* выход готового изделия
TERMINATE