Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UP_s_num_1.doc
Скачиваний:
41
Добавлен:
20.12.2018
Размер:
3 Мб
Скачать
☆

4.3.4. Операторы блоков

Профессиональная версия GPSS / Н насчитывает более 60 операторов блоков. Чтобы уяснить отличие от предыдущих версий все блоки можно условно разделить на три группы:

1. блоки, одинаковые для всех версий, которые в свою очередь делятся на обязательные для любой модели и поэтому широко распространённые и блоки для специфических моделей и поэтому употребляемые реже.

2. блоки, дублирующие некоторые новые и ряд старых операторов управления и описания и отличающиеся от них тем, что они вводятся непосредственно в ядро программы. Это сделано для удобства написания и эксплуатации модели. В настоящее время известно 12 таких блоков-дублеров:

BCALL, BCLEAR, BCLOSE, BFILEDEF, BGETLIST, BGETSTRING, BLET, BPUTPIC, BPUTSTRING, BRESET, BRMULT, BSTORAGE

3. Блоки, описывающие новые действия, возникшие после появления в языке дебаггера, например ATNWITE, позволяющий транзактам ожидать следующей интерактивной сессии.

Естественно, что в пособии описать их все невозможно, поэтому в тексте главы и в приложениях будут рассмотрены только наиболее распространённые операторы, которые будут использованы студентами при проведении лабораторных работ и в процессе курсового проектирования.

Прежде чем дать описание некоторым основным операторам блоков дадим несколько разъяснений.

- Код блока может быть сокращен до четырех символов, но для лучшей читаемости модели этого делать не рекомендуется. Кроме того, все блоки- дублеры не допускают сокращений

- Вспомогательный код может быть записан сразу за кодом блока или отделяться пробелами. При использовании вспомогательного кода сокращение кодов блока не допускается.

  • Квадратные скобки используются для необязательных элементов.

  • Формат записи операторов включен в < >.

- Если операнд кодируется числом, то оно должно содержать только целую часть, за исключением тех случаев, где предусмотрено использование плавающей точки. Рассматриваемая версия предусматривает возможность представления времени транзакта числом с плавающей точкой, в то время как предыдущие версии работали только с целочисленными дискретами.

- Блокам надо стремиться присваивать символические имена, а не номера.

  • Первым блоком в ядре программы всегда является GENERATE

Создание, задержка и уничтожение транзактов.

К данной группе относятся операторы GENERATE, ADVANCE и TERMINATE. Оператор GENERATE служит для создания (генерации) транзактов в ИМ с заданными законами распределения интервалов поступления и имеет вид:

< GENERATE A,B,C,D,E,F,G,H,I>

Операнды А, В, ..., I указывают следующие характеристики входного потока (если какие-либо операнды отсутствуют, то им по умолчанию присваиваются стандартные значения):

А — среднее время поступления транзактов (по умолчанию — 0) или встроенная функция;

В— модификатор среднего времени (0);

С — время задержки первого транзакта (0);

D — количество создаваемых блоком транзактов (∞);

Е — приоритет транзактов (0);

F ...,I— количество и формат параметров транзактов

Если в поле F записан "0", то у транзактов нет параметров.

Примеры:

а) GENERATE, 10,2,1000,,4

б) GENERATE, 100,FN$ЕХРОN,,100,,5РВ

а) время поступления транзактов распределено равномерно на интервале [8, 12] (или 10 ± 2); первый транзакт будет создан в момент времени, равный 1000 единиц; всем транзактам присваивается приоритет 4;

б) время поступления транзактов распределено экспоненциально со средним значением 100; генерируется только 100 транзактов с нулевым приоритетом; каждый транзакт имеет по 5 параметров форматом "байт".

Для задержки транзактов на заданное время используется оператор ADVANCE

< ADVANCE A,B >

Операнды А и В аналогичны соответствующим операндам в операторе GENERATE.

Примеры:

ADVANCE 100,FN$ЕХРON

ADVANCE 10,2

Оператор TERMINATE уничтожает транзакты (удаляет из ИМ) и имеет вид:

< TERMINATE A >

Операнд A (по умолчанию — 0) принимает значения от 1 до бесконечности и указывает число, на которое уменьшается содержимое счетчика числа завершений, значение которого задается в управляющей карте START в поле операндов А (см. далее).

Примеры:

а) TERMINATE - ноль по умолчании

б) TERMINATE 2

а) транзакт уничтожается, счетчик числа завершений не изменяется;

б) в отличие от а) счетчик числа завершений уменьшается на 2.

Примечание:

В модели может быть любое число блоков GENERATE, которые могут последовательно представлять разные виды транзактов.

Число TERMINATE также не ограничено, но только один из них имеет значащее значение операнда А.

Примечание: Следует отметить, что операторы GENERATE и TERMINATE относятся к числу особых. GENERATE допускает только выход из него, попытка войти в оператор приводит к машинной ошибке. TERMINATE наоборот допускает только вход!

Для прекращения испытаний во многих моделях может быть использован отдельный сегмент ядра модели, называемый таймер, состоящий, как правило, из двух операторов.

Пример таймера:

GENERATE A, где А – время проведения испытаний.

TERMINATE A, где А - число уничтожаемых транзактов. Для таймера оно обычно равно 1.

Значение операнд А в операторе управления START при этом также равно 1.

Изменение значений параметров и приоритета транзактов.

При создании транзактов в блоке GENERATE, как отмечалось выше, может быть задано количество и формат параметров, а также приоритет транзактов. В момент выхода транзактов из данного блока все их параметры имеют нулевые значения. В дальнейшем при продвижении транзактов по ИМ их параметры и приоритет могут изменяться с помощью операторов ASSIGN и PRIORIRY .

Блок ASSIGN является основным средством для задания значений параметров транзактов:

< ASSIGN A, B, C, D >

А - номер изменяемого параметра с указанием режима изменения: накопление (+), вычитание ( -), замещение (отсутствуют какие-либо символы);

В - целое число, изменяющее (в соответствии с заданным режимом) значение параметра;

С - номер функции-модификатора значения, указанного в поле В (если поле С не задано, модификация не производится);

D- формат изменяемого параметра: PF, РН, РВ, PL (по умолчанию - РН).

Если параметр, записанный в поле А, является параметром с "плавающей точкой" (типа PL), то в поле В можно записывать и целые, и дробные значения.

Примеры:

а) ASSIGN 3+,5„РВ

б) ASSIGN 3-,5,, РВ

в) ASSIGN 1- 7,3

г) ASSIGN 4,2,1, PF

д) ASSIGN 5,2.5,,PL

a) -б) - изменение значения на 5 единиц параметра 3 форматом "байт" в режиме накопления и вычитания соответственно;

в) - задание значений 3 параметрам 1-7 форматом полуслово ;

г) - использование функции-модификатора FN1;

д) - задание дробного значения параметру форматом "плавающая точка"

Для изменения приоритета транзакта используется оператор

< PRIORITY A>

Здесь А - значение присваемого транзакту приоритета (от 0 до 127 включительно).

Пример.

PRIORITY 3 - присвоить транзакту приоритет 3

Описание и использование устройств, памятей и ключей

Рассмотрим следующие операторы, служащие для описания и использования: устройств — SEIZE, RELEASE, PREEMPT, RETURN; памятей — ENTER, LEAVE; логических ключей — LOGIC.

Объект GPSS/H типа "устройство" является аналогом канала обслуживания в СМО. Занятие канала (устройства) заявкой на обслуживание (транзактом) осуществляется с помощью оператора SEIZE, освобождение по окончании обслуживания — с помощью оператора RELEASE:

SEIZE A

RELEASE A

где А — номер (имя) занимаемого (освобождаемого) транзактом устройства. Устройство занимается и освобождается в момент входа транзакта в соответствующий блок. Освобождение устройства осуществляется только тем транзактом, который данное устройство занимало. Транзакты, заставшие устройство занятым, ждут его освобождения и обслуживаются в порядке поступления (если имеют одинаковый приоритет).

Пример.

SEIZE ACPU занятие устройства

ADVANCE 5,2 задержка от 3 до 7 единиц времени

RELEASE ACPU освобождение устройства

Блок PREEMPT приостанавливает обслуживание транзакта, ранее занявшего устройство, и дает возможность захватить устройство прерывающему транзакту. Блок описывается оператором:

< PREEMPT A.B.C.D.E >

Здесь А — номер (имя) устройства, работа которого прерывается входящим в блок транзактом;

В — режим прерывания (PR — прерывание по приоритету);

С — адрес для прерванного транзакта (может отсутствовать);

D — параметр прерванного транзакта, в который заносится остаток времени обслуживания;

Е — если в поле Е стоит "RE", то транзакт, обслуживание которого было прервано, не претендует на повторный захват данного устройства для обслуживания.

Прерванный транзакт (если отсутствует адрес в поле С) ожидает окончания прерывания устройства и возвращения в устройство для обслуживания. Если таковых транзактов несколько, то они возвращаются в устройство в порядке прерываний (либо приоритетов).

Транзакт, вошедший в блок RETURN, снимает прерывание на устройстве, вызванное вхождением данного транзакта в блок PREEMPT:

< RETURN A >

Здесь А — номер (имя) устройства. Заметим, что блоки PREEMPT и RETURN часто применяются, например, для модели­рования циклического обращения к памяти ЭВМ при вводе-выводе.

Блок LOGIC используется для изменения состояния логиче­ских ключей, имеет расширенное поле операции за счет дополнительного символа, указывающего тип изменения: "S" — уста­новка ключа, "R" — сброс ключа, "I" — инвертирование ключа (замена состояния на противоположное).

Пример.

LOGIC S LOG4 установить ключ LOG 4

LOGIC R SWCH сбросить ключ swch

LOGIC I KL1 инвертировать ключ KL1

Состояния ключей могут быть запрошены в любом месте модели, например, с помощью оператора GATE.

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

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

< TRANSFER A, 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.

  1. 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]