Главная страница

Лабораторная работа 6. Приоритет, прерывания, сохраняемые величины, проверка числовых выражений, таблицы. Лабораторная работа 6. 15. Изменение приоритета транзактов. Блок priority


Скачать 231 Kb.
Название15. Изменение приоритета транзактов. Блок priority
АнкорЛабораторная работа 6. Приоритет, прерывания, сохраняемые величины, проверка числовых выражений, таблицы
Дата31.01.2022
Размер231 Kb.
Формат файлаdoc
Имя файлаЛабораторная работа 6.doc
ТипЛабораторная работа
#347857

Лабораторная работа 6.


Приоритет, прерывания, сохраняемые величины, проверка числовых выражений, таблицы

15. Изменение приоритета транзактов. Блок PRIORITY


Блок PRIORITY (НАЗНАЧИТЬ ПРИОРИТЕТ) присваивает или изменяет приоритет транзакта, если он был задан блоком GENERATE (по умолчанию приоритет транзакта равен нулю). Его формат:

PRIORITY A[,B]

Таблица 35


Операнд

Значение

Результатпоумолча­нию

А

Новое значение приоритета (целое число, СЧА, CЧA*CЧA)

Ошибка

В

Этот операнд определяет режим BUFFER (подробнее о нем см. доку­ментацию [ ])




Новое значение приоритета может быть меньше, больше или равно текущему значению приоритета транзакта. Приоритет влияет на порядок выбора транзакта для обслуживания устройствами и на порядок просмотра транзактов в списке текущих событий [7].

Стандартный числовой атрибут этого блока – PR. Поскольку уровень приоритета транзакта может изменяться от 0 до 127, то PR будет выдавать значение в диапазоне 0-127.
Пример 36

PRIORITY 100

Вошедшему в этот блок транзакту присваивается приоритет 100.



Задержка в блоке ADVANCE зависит от приоритета транзакта. Гранзакт c наиболее низким приоритетом ( 1 ) задерживается на 4 еди­ницы модельного времени, транзакт c наиболее высоким приорите­том (3) задерживается на 10 единиц модельного времени.

16. Организация обслуживания c прерыванием. Блоки PRE­EMPT и RETURN


Во многих случаях возникает необходимость организации об­служивания в устройстве c прерываниями (например, при выполне­нии некоторой операции на станке произошла его поломка). Такую ситуацию можно смоделировать, считая, что отказ оборудования представляет собой транзакт, приоритет которого выше, чем у транзакта, обрабатываемого станком. В этом случае более приоритетный транзакт должен прервать обслуживание менее приоритетного транзакта, т.е. выгрузить его из устройства. Отсюда понятен дословный перевод c английского слова preemptвыгрузить, но c точки зрения работы одноканальной CMO принято использовать термин ЗАХВАТИТЬ устройство [10]. Для организации обслуживания в уст­ройстве c прерываниями используют пару блоков PREEMPT (ЗАХВАТИТЬ) – RETURN (ВЕРНУТЬ) так же, как для обычного устройства без прерываний использовались блоки SEIZERELEASE.

Блок PREEMPT имеет следующий формат:

PREEMPT A,[B],[C],[D],[E]

Таблица 36


Операнд

Значение

Результатпо умолчанию

А

Имя устройства (числовое или сим­вольное)

Ошибка

В

Возможность захвата по приоритету

Режим прерыва­ния

С

Имя блока (числовое или символьное), в который переходит прерванный транзакт

См. объяснение ниже

D

Номер параметра (числовое или сим­вольное имя) у прерванного транзакта

См. объяснение ниже

Е

Возможность снятия с обслуживания

См. объяснение ниже


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

Операнд А определяет номер или имя устройства, на котором генерируется прерывание. Операнд может быть именем, положитель­ным целым, СЧА или CЧA*CЧA.

Операнд В задает приоритетный режим (если B=PR) или режим прерывания (если этот операнд опущен). При работе в приоритетном режиме транзакт, уже занимающий устройство или генерирующий на нем прерывание, может быть прерван только транзактом, приоритет которого выше приоритета данного транзакта. Прерванные транзакты претендуют на дополнительное использование устройства, когда пре­рвавший их транзакт войдет в соответствующий блок RETURN. Прерванные транзакты помещаются в список задержки в порядке приоритета.

Операнд C задает номер или имя блока, в который в этот же мо­мент времени должен попытаться войти прерванный транзакт. Пре­рванный транзакт теряет управление устройством, но претендует на право его использования, если только не задан аргумент операнда Е. В приоритетном режиме работы желательно задавать операнд C, если прерывающий транзакт имеет более высокий приоритет, чем преры­ваемый. Операнд может быть именем, положительным целым, СЧА или CЧA*CЧA.

Операнд D задает номер параметра, связанного c прерванным транзактом. Если прерываемый транзакт в момент прерывания на­правляется в список будущих событий (см. параграф 22), тогда остаток времени записывается в заданный параметр. Если такой пара­метр не существует, то он создается. В приоритетном режиме работы операнд D задают только в том случае, если прерывающий транзакт имеет более высокий приоритет, чем прерываемый транзакт. Операнд может быть именем, положительным целым, СЧА или CЧA*CЧA.

Операнд Е задает либо не задает режим удаления (RE). B режи­ме удаления RE прерванный транзакт более не претендует на исполь­зование устройства и пытается войти в блок, заданный операндом C (если в операнде Е стоит RE, то должен быть определен и опе­ранд C). В приоритетном режиме работы режим RE используется только в том случае, если приоритет прерывающего транзакта больше приоритета прерываемого транзакта. При использовании RE прерванный транзакт не должен входить в блоки RELEASE или RETURN, связанные устройством, в котором обслуживался прерван­ный транзакт. Если режим RE не задан (операнд E опущен), то прерванный транзакт по возвращении в список текущих событий будет вновь пытаться занять устройство.

Прерываемый транзакт может находиться в списке будущих со­бытий. Если надо сделать это, то используют операнд D.

Прерванный транзакт борется за устройство, даже если он пере­мещен операндом C (если RE не используется в операнде E). Если прерванный транзакт все еще борется за устройство, то попытка транзакта войти в блок TERMINATE приводит к ошибке. Такой транзакт перед входом в блок TERMINATE должен войти в блоки RELEASE или RETURN

Транзакт может быть прерван на любом количестве устройств.

Устройство может быть захвачено любое количество раз, но не два раза подряд одним транзактом.

Транзакт не может войти в блок, если в приоритетном режиме устройство уже захвачено транзактом c приоритетом равным или большим, чем приоритет активного транзакта. Активный транзакт помещается в соответствии c приоритетом в список задержки устрой­ства.

Транзакт не может войти в блок, если устройство находится в недоступном состоянии. Такие транзакты помещаются в список задержки устройства в соответствии c приоритетом, А внутри приорите­та – по правилу FIFO.

Стандартные числовые атрибуты, связанные c описываемым блоком, те же, что и в табл. 26, c добавлением СЧА FIj – флаг пре­рывания устройства (1, если устройство находится в состоянии прерывания, 0 – в противном случае).

Следует обратить внимание, что при задании операндов D и (или) E, операнд C также должен быть задан.

Если приоритетный режим не задан (нет PR в операнде В), то операнды C, D и (или) E игнорируются. Однако возможен вариант, когда для прерванного транзакта выбирается альтернативный выход, причем приоритет транзакта не учитывается. Этот случай возникает тогда, когда задан операнд C (а иногда и операнды D и (или) E), но в операнде В не задан приоритетный режим. Такое использование опе­рандов приводит к тому, что занимающий устройство транзакт пре­рывается и направляется по альтернативному пути. В данном случае многоуровневые прерывания не происходят.

Пары блоков SEIZERELEASE и PREEMPTRETURN могут использовать одни и те же имена занимае­мых устройств. В зависимости от логики работы модели пользователь должен сам определить, в каком случае разре­шать прерывания, А в каком – нет.

Блок RETURN является парным к блоку PREEMPT, также как блок RELEASE к блоку SEIZE, и предназначен для освобождения ранее захваченного устройства. Он имеет следующий формат:

RETURN А

Таблица 37


Опе­ранд

Значение

Результатпо

умолчанию

А

Имя устройства (числовое или символьное)

Ошибка


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

Операнд А может быть именем, положительным целым, СЧА или CЧA*CЧA.

17. Сохраняемые величины


В GPSS пользователю предоставляется возможность определить «свои» глобальные переменные, начальные значения которых могут быть заданы перед моделированием и к которым можно обратиться из любого места модели в любой момент времени. Эти переменные называют сохраняемыми величинами (ячейками). Совокупность ло­гически связанных между собой ячеек образует матрицу (аналог массива).

В отличие от параметров транзакта, приоритета и отметки вре­мени, которые теряются в момент выхода транзакта из модели, ячей­ки доступны на протяжении всего процесса моделирования. Значения сохраняемых величин не подсчитываются интерпретатором автома­тически (как СЧА устройств, очередей, МКУ и т.п.), А задаются и из­меняются программистом.

Сохраняемые величины могут принимать положительные и от­рицательные значения. Стандартный числовой атрибут Xj (Х$<имя ячейки>) дает значение соответствующей сохраняемой ве­личины. Например, X2 – значение ячейки 2; X$DAY значение ячейки DAY.

C матрицами связан стандартный числовой атрибут MXj(m, n) – значение, записанное в строке т и в столбце nматрицы j или МХ$<имя матрицы> (m,n), если матрица имеет символьное имя.

СЧА сохраняемой величины может быть использован для кос­венного задания данных, А также как аргумент функций и таблиц.

Перед использованием матрица определяется оператором опи­сания MATRIX. Начальные значения ячеек и матриц можно задать c помощью оператора описания INITIAL.

1. Допускается косвенная адресация ячеек, матриц, А также их строк и столбцов. Например: X*P2 – значение ячейки c номером, который сохраняется в параметре 2; MX*P5(5,2) – элемент (5,2) матрицы, номер которой записан в параметре 5; MX3(P4,X2) – значение, записанное в строке P4 и в столбце X2 мат­рицы 3.

2. Недопустимой является запись такого вида: MXl(MX2(l,2),MX3(3,4)), поскольку нельзя задавать номера строк и столбцов матрицы c помощью СЧА матриц.
Оператор INITIAL (ИНИЦИАЛИЗИРОВАТЬ). Если в про­цессе моделирования происходит обращение к сохраняемой величи­не, которая не была задана, то интерпретатор выдает ошибку в процессе выполнения программы. Поэтому перед началом моделирова­ния все сохраняемые величины должны быть инициализированы c помощью оператора INITIAL.

Формат оператора представлен в таблице.
Ta6лицa 39


Поле

Информациявполе

Метка

Не используется

Операция

INITIAL

Операнд А

Имя сохраняемой вели­чины

Операнд В

Начальное значение


Пример 38

INITIAL X$TIMER,1000000

Ячейке TIMER присваивается начальное значение 1000000;

INITIAL X3,2S

Ячейке c номером 3 присваивается начальное значение 25.

INITIAL MX8(2,4),-53

Величина – 53 записывается в строку 2, столбец 4 матрицы 8.

INITIAL MX$COST(l,3),22

Величина 22 записывается в строку 1, столбец 3 матрицы COST.
Блок SAVEVALUE (СОХРАНИТЬ ВЕЛИЧИНУ). Значение сохраняемой величины изменяется при входе транзакта в блок, SAVEVALUE (СОХРАНИТЬ ВЕЛИЧИНУ).

Его формат:

SAVEVALUE A[+,-],B

Таблица 40


Операнд

Значение

Результатпоумолча­нию

А

Номер или символьное имя сохраняемой величины

Ошибка

В

Величина, используемая для модификации (число или СЧА)

Ошибка


Подобно блоку ASSIGN блок SAVEVALUE может быть ис­пользован как в режиме замещения величины, так и в режиме увели­чения или уменьшения. В режиме увеличения предыдущее значение сохраняемой величины увеличивается на значение, заданное операн­дом В, А в режиме уменьшения – уменьшается на это значение. Ре­жимы увеличения и уменьшения определяются введением соответственно знака «плюс» или «минус» перед запятой, разделяющей опе­ранды А и В.
Пример 39

SAVEVALUE P5,VSALPHA

При входе транзакта в блок SAVEVALUE прежде всего вычис­ляется величина переменной ALPHA. Полученный результат при­сваивается сохраняемой величине, номер которой записан в параметpe P5.

SAVEVALUE 5+,X2

При входе транзакта в блок величина X5 увеличивается на зна­чение величины X2.

SAVEVALUE PROFIT-,FN$COSTS

При входе транзакта в блок величина X$PROFIT уменьшается на значение функции FN$COSTS.
Оператор описания матрицы MATRIX. Каждая матрица должна быть объявлена до ее использования, т.е. должна иметь опе­ратор описания. Формат оператора представлен в таблице.

Таблица 41


Поле

Информациявполе

Метка

Имя матрицы

Операция

MATRIX

Операнд А

Не используется (оставлен для совместимости с более старыми версиями GPSS)

Операнд В

Число строк матрицы (целое положительное)

Операнд С

Число столбцов матрицы (целое положительное)


Матрица в GPSS/PC может содержать не более чем 8191 эле­мент. Она может быть переопределена или инициализирована по­вторно другим оператором MATRIX c тем же именем. Переопреде­ление, при котором размер матрицы изменяется, повлечет за собой выделение памяти под новую матрицу. Выделенная до этого опера­тивная память остается занятой.
Блок MSAVEVALUE. Блок MSAVEVALUE используется для записи значений в матрицы, А также для увеличения или уменьшения значений элементов матриц. Его формат:

MSAVEVALUE A[+,-|3,C,D

Таблица 42


Операнд

Значение

Результатпоумолча­нию

А

Имя матрицы

Ошибка

В

Номер строки матрицы

Ошибка

С

Номер столбца матрицы

Ошибка

D

Величина, используемая для модификации

Ошибка


Операнды А, В и C могут быть именем, положительным целым, СЧА или CЧA*CЧA. Операнд D может быть именем, СЧА или : CЧA*CЧA.

Подобно блокам ASSIGN и SAVEVALUE этот блок может быть использован как в режиме замещения величины, так и в режиме увеличения или уменьшения.

Когда транзакт входит в блок MSAVEVALUE, то анализируется операнд А и ищется матрица c указанным именем. Если матрица ненайдена, то возникает ошибка. Соответствующий элемент матрицы определяется содержимым операндов В и C. Если такого элемента не существует, то также возникает ошибка.

18. Проверка числовых выражений. Блок TEST


Сравнение СЧА может быть выполнено c помощью блока TEST (ПРОВЕРИТЬ)

Его формат:

TEST Х A,B|,C|

Таблица 43


Операнд

Значение

Результатпоумолча­нию

А

СЧА

Ошибка

В

СЧА

Ошибка

С

Имя блока, в который переходит транзакт при условии, что ответ на вопрос, подразумеваемый оператором отношения, отрицатель­ный

При отсутствии опе­ранда С проверку вы­полняют в режиме отказа

X

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






Значениеоператора отношений:

Вопросоператора отношения:



G

А больше В?



GE

А больше или равно В?



Е

А равно В?



NE

А не равно В?



LE

А меньше или равно В?



L

А меньше В?


Операнды А и В – имена СЧА, которые сравниваются. Вспомогательный оператор Х указывает способ сравнения этих двух СЧА дpyг c другом.
Пример 40

Режим отказа

TEST LE Ql,Q2

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

Пример 41

Режим условного перехода

TEST LE Ql,Q2,ZHVS

Проверяющий транзакт перейдет в следующий по порядку блок, если содержимое первой очереди меньше или равно содержи­мому второй очереди. Если это условие не выполняется, транзакт перейдет в блок c меткой ZHVS.

Пример 42

TEST L KSSCANNER,XSMAX_lJTIL,LLL

SEIZE SCANNER

LLL QL'EL'E QSCANNER2

Если устройство SCANNER имеет коэффициент загрузки меньше, чем значение сохраняемой величины MAX_UTIL, то транзакт идет на обслуживание этим устройством, в противном случае –переходит к блоку c меткой LLL.
Пример 43

Пусть в точке модели DISPATCHER необходимо удалить те транзакты, которые находились в модели больше, чем 100 ед. мо­дельного времени. Для этого в модели можно использовать такие блоки:




19. Определение и использование таблиц


Для накопления выборочных значений случайных величин и статистической обработки этих выборок используются GPSS-таблицы. Графическим аналогом GPSS-таблицы является гистограм­ма выборочных значений случайной величины, которую можно про­смотреть в окне таблицы. Прежде чем использовать таблицу, ее нуж­но определить, А потом задать собираемые выборочные значения.
Оператор TABLE (ТАБЛИЦА). В модели может быть не­сколько таблиц. Каждую таблицу нужно сначала определить и только потом использовать в модели. Для определения таблицы необходимо указать:

1) имя таблицы (числовое или символьное);

2) имя случайной переменной, значение которой будет табули­роваться;

3) число, являющееся первым граничным значением. (Значения выборки, меньшие или равные этому числу, попадают в самый левый (нижний) интервал (частотный класс) таблицы);

4) ширину интервала, общую для всех интервалов таблицы за исключением левого (нижнего) и правого (верхнего);

5) общее число интервалов таблицы, включая нижний и верхний. Формат оператора представлен в таблице.
Таблица 44


Поле

Информация поля

Метка

Имя таблицы

Операция

TABLE

Операнд А

СЧА, значение которого учитывается в таб­лице

Операнд В

Первое граничное значение (целое число)

Операнд С

Ширина всех промежуточных интервалов (целое положительное число)

Операнд D

Общее число интервалов таблицы, включая левый и правый (целое положительное число)


На рис. 11 показана ось действительных значений и ее разде­ление на ряд интервалов таблицы.

Рис. 11
Для сбора статистических данных об очередях используется оператор QTABLE. Его формат совпадает c форматом оператора TABLE, за исключением того, что операнд А задает имя очереди.
Блок TABULATE (ТАБУЛИРОВАТЬ). Выборочные значения попадают в таблицу в моменты вхождения транзактов в блок TABU­LATE. Его формат:

TABULATE A

Таблица 45


Операнд

Значение

Результат поумолчанию

А

Имя (символьное или числовое) таблицы, в которой табулируется соответствующий СЧА

Ошибка


Операнд А задает имя таблицы, в которую попадают выбороч­ные значения. Одну таблицу можно использовать в нескольких блоках TABULATE модели. Отметим, что СЧА, по которому собирается статистика, в блоке TABULATE не указывается, так как он уже записан в операторе TABLE.

Если в модели используется блок TABLE или QTABLE, в файле стандартной статистики информация будет представлена в таком виде:

Для получения этих данных была определена GPSS-таблица MVP, в которой фиксировалось время нахождения транзакта в модели:

MVP TABLK Mi,100,100,20
Стандартные числовые атрибуты таблицы:

TB<номep таблицы>, ТВ$<имя таблицы> вычисленное среднее значение соответствующего СЧА;

TC<номep таблицы>, ТС$<имя таблицы> общее число вхо­дов в таблицу:

TD<номep таблицы>, ТО$<имя таблицы> вычисленное средне-квадратическое отклонение соответствующего СЧА.
Пример 44


В таблице TIMSERV будет табулироваться частотное распределение случайной величины – времени пребывания транзакта между блоками MARK и TABULATE. B табл. 46 приведены интервалы регистрации времени пребывания между блоками MARK и TABULATE.
Таблица 46


Левый (нижний) интервал

Первый интервал

-∞, < 10

Промежуточные интервалы

Второй интервал

≥10, <15



Третий интервал

≥15, <20



Четвертый интервал

≥20, <25



Пятый интервал

≥20, < 30

Правый (верхний) интервал

Шестой интервал

≥30, + ∞


Для того, чтобы данные, собираемые в таблицу, не попадали в один-два интервала, рекомендуется:

1) сначала сделать пробный прогон; по пробному прогону определить диапазон значений, в которых может колебаться анализируемая случайная величина (в GPSS/PC пе­рейти к окну таблиц c помощью клавиш [ALT+T]);

3) c учетом полученного диапазона скорректировать значения операндов В, C и D соответствующей таблицы.
Пример 45

В таблице SYSTIME собирается время пребывания транзакта в модели, которое предположительно принимает значения в интервале [100,2000].



При входе транзакта в блок SAVEVALUE среднее значение СЧА (времени пребывания), соответствующего таблице SYSTIME заносится в сохраняемую величину c именем STD.

Задание

  1. Из трех пунктов А, В и С в систему поступают заявки с приоритетами соответственно 1, 2 и 3. Все три потока заявок являются пуассоновскими со средним временем 60 с. Эти заявки поступают на устройство USTROYSTVO. После обслуживания этим устройством приоритеты всех заявок уравниваются и приобретают значение 5. Приведите программу, которая моделирует эту ситуацию.

  2. Присвойте начальное значение 500 сохраняемой величине PROFIT.

  3. Присвойте начальное значение 10 сохраняемой величине с номером 5.

  4. Присвойте значение функции TIMER сохраняемой величине с номером 8.

  5. Уменьшите значение сохраняемой величины COST на величину параметра MONEY.

  6. Увеличьте значение сохраняемой величины 2 на максимальное значение длины очереди QPRIBOR.

  7. В отделе универсама есть две кассы. Покупатели становятся в очередь в ту кассу, у которой меньше очередь. Напишите программу для этой ситуации.

  8. Первые четыре часа работы парикмахерской клиенты обслуживаются одним мастером, следующие четыре – другим. Напишите программу для этой ситуации.

  9. В ресторан каждые 10±5 с. заходят клиенты. Заказы принимают шесть кассиров. Время выполнения заказов – 120±40 с. Соберите статическую информацию о длине очереди. Постройте гистограмму.

  10. В одноканальную СМО поступает пуассоновский поток заявок с интенсивностью 2 мин-1. Время обслуживания одной заявки - 25±4 с. Соберите статистическую информацию о времени пребывания заявок в системе.

  11. В двухканальную СМО поступает пуассоновский поток заявок с интенсивностью 3 мин-1. Время обслуживания одной заявки - 28±6 с. Соберите статистическую информацию о времени пребывания заявок в очереди.

  12. В сети СМО действуют три МКУ. Транзакт входит в то МКУ, номер которого помещен в параметре 2. Напишите соответствующую программу.


написать администратору сайта