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

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

При создании транзактов в блоке 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.


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



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