Б1. Основные операторы описания
Б. Операторы описания
Операторы описания переменных, амперпеременных, функций и задание макросов описаны в 5.3.2 и приведены в общем списке П.3. Следуя принятой логике, вначале кратко рассмотрим основные операторы описания, имеющиеся и в других версиях.
Оператор присвоения EQU назначает символу, записанному в поле метки, числовое значение и имеет формат:
< символ EQU А, В [,С] ... >
А - числовая константа , В, [С ]-символы типа объектов ( см. табл. 5.4). Например - PHONE EQU 3,F.
Оператор INITIAL используется для задания начальных значений блокам SAVEVALUE, MATRIX SAVEVALUE и логическим ключам. Формат: < INITIAL A, B[/A, B]…>
А- инициализируемый объект X, M, L, В – устанавливаемое значение, например, INITIAL XH$SAM, 25/ XB3,1.5 -установить ячейке SAM формата полуслово значение 25, а ячейке 3 форматом байт значение 1.5.
Памяти описывают оборудование, обслуживающее одновременно несколько заявок, т.е. многоканальные СМО. Для задания объема памяти используется оператор описания STORAGE, имеющий два варианта записи.
Вариант 1.
< STORAGE A >
Здесь n — номер (имя) памяти; А — объем памяти.
Примеры:
1 STORAGE 100 память 1 объема 100 ед.
РАМ STORAGE 10 память объема 10 ед.
Вариант 2 используется для одновременного описания нескольких памятей, например:
STORAGE S5-S10, 90 памяти 5-10 объемом по 90 ед.
STORAGE S$SKLD1, 10/S$SKLD2, 20
Последний оператор описывает две памяти с символическими именами SKLD1 (10 ЕД.) и SKLD2 (20 ЕД.).
Операторы описания обычно помещаются в начале программы перед первым оператором GENERATE.
Изменение состояния памяти в ИМ осуществляется с помощью операторов ENTER и LEAVE занятия и освобождения памяти (поле операндов для них идентично):
< ENTER A, B >
< LEAVE A, B >
А — номер (имя) памяти;
В — число единиц памяти, занимаемых (освобождаемых) транзактом при входе в блоки (по умолчанию - 1).
При использовании данных операторов следует помнить, что если в памяти нет достаточного количества свободных единиц, то транзакт не может войти в блок и задерживается до освобождения достаточного числа единиц памяти. Не обязательно освобождается такое же число единиц памяти, какое было занято. Память может освобождаться и транзактом, ее ранее не занимавшим (в отличие от устройств). Однако в сумме число освобождаемых единиц не должно превосходить число занимаемых транзактами единиц памяти.
Пример.
CORE STORAGE 40 описание памяти объемом в 40 единиц
ENTER CORЕ,2 занятие двух единиц памяти
PREEMPT CPU прерывание процесса
ADVANCE 10 процесс записи данных
RETURN CPU конец прерывания
LEAVE CORE, 2 освобождение памяти
Ряд числовых атрибутов, характеризующих функционирование моделируемой системы, а также отдельных ее элементов, можно интерпретировать как показатели эффективности КЦФ. Вычисление КЦФ является важной составной частью имитационных экспериментов. В GPSS/H имеются удобные средства для сбора необходимой статистики. Некоторые виды статистики накапливаются программой автоматически. Другие виды статистических данных могут быть получены с помощью статистических блоков.
Для сбора и обработки статистики по очередям используются блоки QUEUE, DEPART. Блок QUEUE может быть установлен в любом месте модели, в котором предполагается возникновение очереди. Соответствующий оператор имеет вид:
< QUEUE А,В>
где А — номер (имя) очереди, в которую заносится транзакт при невозможности войти в следующий за блоком QUEUE блок; В — число занимаемых транзактом мест в очереди.
Блок DEPART производит обратное действие: освобождает требуемое число мест в очереди при вхождении в него транзакта. Оператор блока:
< DEPART А, В >
А, В — определяются аналогично блоку QUEUE, с той лишь разницей, что в В указывается число освобождаемых мест в очереди. Статистическая информация об очередях собирается автоматически и выводится в стандартном виде.
Средства GPSS/H позволяют получать эмпирические таблицы абсолютных и относительных частот попадания исследуемой случайной характеристики в заданные интервалы значений, которые могут использоваться для анализа распределений вероятностей данной характеристики. Карта описания таблицы имеет вид:
<n TABLE A, B, C, D >
где n — номер (имя) таблицы; А — табулируемый СЧА (аргумент таблицы); В — верхняя граница первого интервала; С — ширина интервала; D — число интервалов. Желательно так подбирать ширину и количество интервалов, чтобы в полученные интервалы попадало 100% значений аргумента таблицы. Помимо таблицы частот одновременно вычисляются оценки среднего и стандартного отклонения аргумента таблицы. Карты описания таблиц помещаются в начале программы. Занесение информации в таблицу происходит в момент вхождения транзакта в блок TABULATE:
здесь А — номер (имя) таблицы;
В — число добавляемых в соответствующий интервал единиц (по умолчанию — 1).
Примеры:
а) 1 TABLE VI,-100,10,100
б) CORE TABLE S$CORE,0,50,10
а) таблица 1 предназначена для получения частот значений (частотного распределения) переменной VI; таблица содержит 100 интервалов длиной 10 единиц каждый и два крайних интервала (-, -100) и (900, +).
б) таблица CORE предназначена для получения частотного распределения текущего содержимого памяти CORE; таблица содержит 10 интервалов по 50 единиц каждый, а также интервалы (-, 0), (500, +).
Соответствующие операторы занесения в таблицы могут иметь вид:
а) TABULATE 1 добавляется 1
б) TABULATE CORE, 2 добавляется 2
Для табулирования распределения времени пребывания транзактов в очереди можно обойтись без оператора TABULATE, его функции будут выполняться оператором DEPART, если таблица будет описана с помощью карты QTABLE. В отличие от карты TABLE поле А карты QTABLE содержит номер (имя) наблюдаемой очереди.
Пример.
QTIME QTABLE TIME,0,20,75 описание таблицы
QUEUE TIME занятие очереди транзактом
DEPART TIME освобождение очереди транзактом
При входе транзакта в блок DEPART время пребывания в очереди автоматически заносится в таблицу QTIME.