docs / Metodichka_GPSS
.pdfОперанд В - задает число приборов, которое должно быть занято (или освобождено). Этот операнд редко используется и его значение по умолчанию равно 1.
В общем случае использование блоков ENTER и LEAVE аналогично использованию блоков QUEUE и DEPART.
3.2.2. Определение емкости многоканальных устройств
Оператор STORAGE
Емкость многоканальных устройств определяется с помощью оператора STORAGE. У этого оператора может быть имя (символическое или числовое). Операнд А задает емкость многоканального устройства. При определении емкости нескольких многоканальных устройств используют запись "S$имя, с", где "имя" является символическим или числовым именем многоканального устройства, емкость которого определяется, а с - его емкость. При использовании числового имени знак доллара не ставится. Символ "/" (разделить) используется для разделения подряд записанных основных единиц.
4. ОСНОВНЫЕ БЛОКИ ЯЗЫКА GPSS
Все блоки записываются с первой позиции строки, сначала идет имя блока, а затем, через запятую, параметры. В записи параметров не должно быть пробелов. Если какой-то параметр в блоке отсутствует (задается по умолчанию), то соответствующая ему запятая остается (если это не последний параметр). Если в первой позиции строки стоит символ *, то эта строка с комментарием.
1. GENERATE A,B,C,D,E,F
Создает транзакты через определенные интервалы времени. A - средний интервал времени между появлениями транзактов.
B - 1) если число, то это половина поля, в котором равномерно распределено значение интервала между появлениями транзактов
[A-B, A+B];
- 2) если функция, то для определения интервала значение A умножается на значение функции.
C - момент времени появления первого транзакта.
D- предельное количество транзактов.
E- величина приоритета транзакта.
F- число параметров у транзакта и их тип (PB-байтовый целый, PHполусловный целый, PF-полнословный целый, PL-с плавающей запятой).
13
2. TERMINATE A
Уничтожает транзакты из модели и уменьшает значение счетчика завершения на A единиц. Работа модели завершится, если счетчик завершения станет меньше или равен нулю. Если параметр A отсутствует, то блок просто уничтожает транзакты.
Примеры использования блока GENERATE:
1)GENERATE 5,3 - блок генерирует транзакты через 5±3 единицы системного времени, т.е. интервалом прибытия является случайное число со средним значением, равным 5, и полем допуска, равным 6.
2)GENERATE 10 - генерируется поступление транзактов в систему через каждые 10 единиц системного времени.
3)GENERATE 3,3,10,5 - моментом прихода первого транзакта является значение 10. После этого интервалы времени прибытия находят из
равномерного распределения 3±3. Однако только первые пять транзактов должны войти в модель через этот блок.
4) GENERATE 5, , , , ,2h - транзакты, имеющие два полусловных целых параметра, поступают в систему каждые 5 единиц системного времени.
3. SEIZE A
Если прибор с именем A свободен, то транзакт занимает его (переводит в состояние "занято"), если нет, то ставится в очередь к нему. Именем прибора может быть числовой номер или последовательность от 3 до
5символов.
4.RELEASE A
Транзакт освобождает прибор с именем A, т.е. переводит его в состояние "свободно".
5. ADVANCE A,B
Задерживает обработку транзакта данным процессом и планирует время начала следующего этапа обработки.
A- среднее время задержки.
B- имеет тот же смысл, что и для GENERATE.
Пример 1
Рассмотрим систему, состоящую из кассы и очереди к ней. Клиент обслуживается в кассе за время (3±1) мин. Очередь пополняется за счет вновь прибывших через (5±4) мин. Программа будет выглядеть следующим образом:
SIMULATE
GENERATE 5,4 - моделирование прихода клиентов в систему через
(5±4) мин;
14
SEIZE KAS - если прибор с именем KAS находится в состоянии "свободно", то транзакт занимает его (клиент обслуживается в кассе); в противном случае встает в очередь;
ADVANCE 3,1 - клиент обслуживается в кассе (3±1) мин;
RELEASE KAS - обслуживание клиента в кассе закончено (транзакт освобождает прибор KAS, переводя его в состояние "свободно";
TERMINATE 1 - клиент покидает систему (транзакт уничтожается и счетчик завершения уменьшается на 1).
START 100 END
В данной программе, кроме описанных выше, использовались еще 3
блока:
SIMULATE, START и END.
Карта SIMULATE всегда ставится в начале программы. Если она отсутствует, то моделирование производиться не будет.
Карта START имеет следующий формат: START A,B,C,D
A - начальное значение счетчика числа завершений.
B - признак подавления печати. Если задан параметр NP, то стандартная печать в конце моделирования производиться не будет.
C - число завершений, через которые будет выдаваться промежуточная печать.
D - признак печати цепей. Печать цепей производится, если на месте D стоит 1.
Карта END должна быть последней картой программы.
6. QUEUE A
Собирает статистику о входе транзакта в очередь с именем A.
7. DEPART A
Собирает статистику о выходе транзакта из очереди с именем A.
Пример 2
Если в задаче из предыдущего примера необходима информация об очереди, то программу нужно дополнить.
SIMULATE
GENERATE 5,4
QUEUE OН
SEIZE KAS
DEPART OН
ADVANCE 3,1
15
RELEASE KAS
TERMINATE 1
START 100
END
В данном примере группа операторов QUEUE-DEPART позволяет дать имя очереди к прибору и собирает статистику об этой очереди.
8. ENTER A,B
Если в многоканальном устройстве с именем A имеются свободные каналы, то транзакт занимает B каналов (по умолчанию 1). Если свободных каналов нет, то транзакт становится в очередь и его обработка процессом приостанавливается до освобождения каналов.
9. LEAVE A,B
Транзакт освобождает B каналов в многоканальном устройстве A. Прежде чем использовать многоканальное устройство, его нужно
описать картой STORAGE.
A STORAGE B
Здесь A - имя многоканального устройства, B - максимальная емкость.
Пример 3
Пусть заявки поступают на обработку с ограниченным числом мест в очереди, равным 3. Если очередь заполнена, то заявки покидают систему.
SIMULATE
LIM STORAGE 3
GENERATE 5,4
ENTER LIM
SEIZE PRB
LEAVE LIM
ADVANCE 3,2
RELEASE PRB
TERMINATE 1
START 100
END
Пример 4
Рассмотрим работу ЗУ емкостью 256К. В ЗУ с интервалом 3±2 с загружаются файлы, занимающие 4К памяти. Через 10±3 с становятся ненужными и освобождают память.
SIMULATE
16
MEM STORAGE 256
GENERATE 3,2
ENTER MEM, 4
ADVANCE 10,3
LEAVE MEM, 4
TERMINATE 1
START 250
END
10. ASSIGN A,B,C
Присваивает (если A+ - увеличивает, A- - уменьшает) параметру транзакта (номер которого указан в A) значение параметра B. C - тип параметра транзакта.
Параметр транзакта - это величина, соответствующая атрибуту элемента модели. У каждого транзакта свои параметры. Ссылка на параметр транзакта, который обрабатывается блоком, выполняется в виде группового имени P, за которым следует последовательный номер параметра и его тип. Например, P3H – третий полусловный параметр обрабатываемого транзакта.
Примеры использования блока ASSIGN:
ASSIGN 3,2,PH - третьему полусловному параметру присвоить 2. ASSIGN 1-,1,PB - значение первого байтового параметра уменьшить на
единицу.
11. SAVEVALUE A,B,C
Присваивает (если A+ - увеличивает, A- - уменьшает) сохраняемой величине, указанной в параметре A (только номер или имя без X), значение параметра B.
C - тип сохраняемой величины.
Ссылка на сохраняемую величину выполняется в виде группового имени X, за которым следует либо номер сохраняемой величины, либо после символа $ - символьное имя этой величины, например X$DASP.
Для задания начальных значений сохраняемым переменным используется карта INITIAL.
INITIAL A1,B1/ ... /AN,BN
Ai - имя сохраняемой величины, Bi - ее начальное значение.
Если сохраняемая величина не описана в карте INITIAL, то по умолчанию ее значение равняется 0.
Примеры использования оператора SAVEVALUE:
SAVEVALUE SI,12,PF - присвоить переменной с именем SI полнословного целого типа значение 12.
SAVEVALUE 12,-3,PB - присвоить переменной байтового типа с номером 12 значение -3.
17
SAVEVALUE A+,1,PB - увеличить значение A на единицу.
12. TEST X A,B,C
Проверяет отношение X (L(<), LE(<или=), E(=), NE(<>), GE(>или=), G(>)) между значениями параметров A и B. Если оно выполняется, то транзакт обрабатывается следующим блоком, если нет, то блоком, метка которого указана в блоке C.
Примеры:
TEST NE 12,X$TAST,TST - управление передается блоку с меткой TST, если переменная TAST равна 12.
TEST LE P1H,P2H,GO - если второй параметр транзакта больше первого, то управление передается по метке GO.
Другой формой оператора TEST является оператор IF. IF X,A
Осуществляет переход на метку A, если логическое условие X истинно.
Примеры использования оператора IF вместо TEST: IF X$TAST=12,TST
IF P1H>P2H,GO
Пример 5
Пусть в данном примере транзакты соответствуют грузовым автомобилям. Грузоподъемность каждого автомобиля будет содержаться в параметре транзакта. Существует 2 вида грузовиков - грузоподъемностью в 5 и 10 т. Они перевозят грузы на некоторый объект. Пусть в данный момент разгружаться может только один автомобиль. Поэтому на разгрузку образуется очередь, которая будет иметь имя Q. Сам объект назовем OBJ. Масса груза, уже перевезенная на объект, будет храниться в ячейке MAS.
SIMULATE
INITIAL MAS,100 - пусть на объект уже перевезено 100 т груза ;1-й сегмент программы ; описывает поток автомобилей грузоподъемностью 5 т
GENERATE 15,5, , , ,1B - автомобили подъезжают к объекту через 15+-5 мин
ASSIGN 1,5,PB QUEUE Q SEIZE OBJ DEPART Q
ADVANCE 5,1 - задержка на разгрузку
18
SAVEVALUE MAS+,P1H,XH - увеличение значения массы груза на объекте
RELEASE OBJ TERMINATE
; 2-й сегмент программы ;описывает поток автомобилей грузоподъемностью 10 т GENERATE 25,10, , , ,1B
ASSIGN 1,10,PB QUEUE Q SEIZE OBJ DEPART Q ADVANCE 10,2
SAVEVALUE MAS+, ,P1H,XH RELEASE OBJ
TERMINATE 1 START 250 END
13. TRANSFER A
Осуществляется безусловный переход на метку A. Другая форма: GOTO A
14. PREEMPT A,B,C,D,E
Транзакт занимает прибор с именем A, т.е. если другой транзакт обслуживается в нем, то его обслуживание прерывается и он передается на обработку блоку, указанному в C, причем в его параметре с номером D записывается время, оставшееся до конца обслуживания. Если B=PR, то обслуживание этого транзакта также может быть прервано транзактом с более высоким приоритетом. Если B опущено, то обслуживание этого транзакта прервать нельзя. Если E=RE, то прерванный транзакт теряет право на автоматическое восстановление в приборе.
15. RETURN A
Транзакт, захвативший прибор с именем A, освобождает его.
В GPSS можно обращаться к функциям, которые описываются с помощью карты FUNCTION. Существует 2 вида функций: дискретные (тип D) и непрерывные (тип C). Описание функций осуществляется следующим образом:
A FUNCTION B,CN x1,y1/x2,y2/.../xN,yN,
где A - имя функции, B - аргумент функции, C - тип функции (C или D), N - количество точек описания функции.
19
Обращение к функциям осуществляется с помощью группового имени F, за которым после символа $ следует имя функции.
Пример использования функции: FFF FUNCTION X$AS,D5 0,1/.2,2/.5,3/.8,4/1.2,5
Здесь FFF - имя функции, X$AS - аргумент,
D5 означает, что функция дискретная и она описывается пятью точками, значения функции записываются без пробелов.
Если AS=0.8, то значение функции равно 4 (F$FFF = 4).
ВGPSS имеется восемь подпрограмм, которые вычисляют случайные числа, равномерно распределенные в интервале [0, 1]. Обращение к этим функциям выполняется с помощью группового RN, после которого следует номер генератора (от 1 до 8).
Все генераторы совершенно одинаковы.
Вязыке GPSS используются стандартные числовые атрибуты, которые являются переменными модели, описывающими блоки, приборы, многоканальные устройства и очереди, значения которых вычисляет интерпретатор, а разработчик в описании модели их только использует. Каждый стандартный числовой атрибут имеет групповое имя, которое при использовании дополняется номером, или после символа $ именем этого элемента модели, к которому он относится. Например, стандартный числовой атрибут Q1 содержит число транзактов в очереди с номером 1, R$MEM показывает остающуюся свободную емкость многоканального устройства MEM. Список групповых имен основных стандартных числовых атрибутов представлен в табл.2.
Таблица 2
Объект |
Группо- |
Название |
|
вое имя |
|
1 |
2 |
3 |
Блоки |
N |
Счетчик входов |
|
W |
Счетчик текущего содержимого |
Приборы |
F |
Состояние прибора (1 – занят, 0 – свободен) |
|
FC |
Счетчик числа занятий |
|
FR |
Коэффициент использования |
|
FT |
Среднее время задержки на одно занятие |
Многока- |
R |
Остающаяся свободной емкость |
нальные |
S |
Текущее содержимое |
устройства |
SA |
Среднее содержимое |
|
SC |
Счетчик числа входов |
|
SR |
Коэффициент использования |
|
|
20 |
|
|
Окончание табл.2 |
1 |
2 |
3 |
|
SM |
Максимальное содержимое |
|
ST |
Среднее время задержки на единицу |
Очереди |
Q |
Текущее содержимое |
|
QA |
Среднее содержимое |
|
QC |
Счетчик числа входов |
|
QM |
Максимальное содержимое |
|
QT |
Среднее время прерывания (на основе QC) |
|
QX |
Среднее время пребывания (на основе QZ) |
|
QZ |
Счетчик числа нулевых входов |
Время |
C1 |
Значение системного времени |
Пример 6
Пусть процессор Пр контролирует процесс в каком-либо объекте по двум независимым друг от друга параметрам (рис. 4).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пр |
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Д1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
БУ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
АУ |
|
|
|
|
|
|
Объект |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Д2 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.4. Управление объекта процессором
Значения параметров от датчиков Д1 и Д2 поступают на анализирующее устройство (АУ), которое сравнивает эти значения с оптимальными для данной системы и передает результаты сравнения в блок управления (БУ). БУ формирует сигналы, под воздействием которых происходит управление системой. АУ является быстродействующим прибором, поэтому время задержки в нём можно принять равным нулю. Первый параметр анализируется каждые 2 с. Его нормальное значение составляет 20 единиц. В случае, если значение этого параметра отклоняется от нормального, БУ формирует сигналы увеличить (или уменьшить - в зависимости от ситуации) значение первого параметра. Значения второго параметра анализируются каждые 10 с, нормальное значение для этого параметра 40 единиц. Ситуация, когда значение второго параметра выйдет за
21
пределы [30, 60] единиц, считается экстремальной и обрабатываются в первую очередь. Значение первого параметра хранит переменная с номером 1, значение второго - с номером 2. Случайные значения первого моделируется с помощью функции CHANG, второго - с помощью функции
DIFF.
SIMULATE
INITIAL 1,20/2,40 - установка нормальных значений параметров
CHANG FUNCTION RN2,D10 0,0/.1,0/.2,1/.3,1/.4,2/.5,3/.6,4/.7,5/.8,8/1,8
DIFF FUNCTION RN3,D5
.1,2/.2,3/.3,5/.6,8/1,2
GENERATE 2, , , , ,1B - опрос значений первого параметра через 2 с
IF RN1>0.5,TWO - значение параметра с равной
вероятностью может изменяться в ту или иную сторону, по метке TWO обрабатывается ситуация, когда значение параметра уменьшается
SAVEVALUE 1+,FN$CHANG,XB GOTO DDD1
TWO SAVEVALUE 1-,FN$CHANG,XB
DDD1 ASSIGN 1,X1B,PB - параметр транзакта несет
информацию о значении первого параметра
QUEUE PROC
SEIZE PROC - сообщение начинает обрабатываться процессором
DEPART PROC
ADVANCE 5,2
IF P1B=20,DDD2 - если значение параметра нормальное, то никаких действий не нужно
IF P1B>20,BBB1
SAVEVALUE 1+,2,XB - увеличиваем значение параметра, если оно было ниже нормального
GOTO DDD2
BBB1 SAVEVALUE 1-,2,XB DDD1 RELEASE PROC
TERMINATE
GENERATE 10, , , , ,1B - опрос значений 2-го параметра через 10 с
IF RN1>0.5,TWO2 SAVEVALUE 2+,FN$DIFF GOTO DDD3
22