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