Изменения маршрутов движения транзактов

Основными операторами группы являются: 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: