Параметры транзактов. Косвенная адресация. Списки. Язык GPSS. .

advertisement
Язык GPSS.
Параметры транзактов.
Косвенная адресация. Списки. .
Лектор:
доцент каф. АОИ
Салмина Нина
Юрьевна
Параметры (атрибуты)
транзактов
Параметры (атрибуты) – «личные» характеристики
транзактов
СЧА транзакта:
PR – приоритет транзакта
P – значение атрибута транзакта
Р<номер атрибута>
P$<имя атрибута>
М1 – время нахождения транзакта в
системе с момента «рождения»
Изменение атрибутов транзакта
ASSIGN A[±],B
А – имя/номер атрибута
В – присваиваемое значение (константа, СЧА)
А,В – атрибуту с именем А присвоить значение В
А+,В – в атрибут с именем А добавить значение В
А-,В – из атрибута с именем А вычесть значение В
(начальное значение атрибута считается равным 0)
Примеры:
В атрибут с номером 3 добавить значение 2
ASSIGN 3+,2
Записать в атрибут ZARPL зарплату за 5 дней (500 руб/день)
ASSIGN ZARPL,(500#5)
Примеры использования атрибутов
Задержать транзакт на время, определенное его
атрибутом 2
ADVANCE P2
Если значение атрибута QWE меньше 23, то
перейти к блоку MET1, иначе – продолжать
движение
TEST ?? P$QWE,23,MET1
Примеры использования атрибутов
Задержать транзакт на время, определенное его
атрибутом 2
ADVANCE P2
Если значение атрибута QWE меньше 23, то
перейти к блоку MET1, иначе – продолжать
движение
TEST GE P$QWE,23,MET1
Разница между ячейками и
атрибутами
povt queue 1
...
povt queue 1
...
met savevalue 1+,1
test GE x1,10,povt
prod …
met assign 1+,1
test GE p1,10,povt
prod …
Когда ЛЮБЫЕ транзакты
пройдут 10 раз через блок
met, остальные ВСЕГДА
будут сразу проходить к
блоку prod
КАЖДЫЙ транзакт пройдет
10 раз через блок met,
прежде чем направится к
блоку prod
Косвенная адресация
СЧА*<номер/имя атрибута>
Номер/имя СЧА содержится в указанном
атрибуте транзакта
Примеры:
Seize FN*1
Transfer ,FN*2
Пример 1 (постановка задачи)
В поликлиннику больные приходят в среднем каждые 3 минуты.
Примерно 20% больных направляются к лору;
25% - к окулисту;
55% - к терапевту (3 врача).
Время обслуживания больных составляет (в среднем):
у лора – 12 минут
у окулиста – 12 минут
у терапевта – 15 минут
(все временные характеристики подчиняются экспоненциальному
закону)
Определить для каждого врача:
1) Общее время нахождения всех больных в очереди;
2) Общее время занятости врача.
Промоделировать в течение 8 часов.
Пример 1 (модель)
lor storage 1
okul storage 1
ter storage 3
fn_num function rn1,d3
.2,1/.45,2/1,3
fn_str function p1,d3
1,lor/2,okul/3,ter
var_t variable (st*2#sc*2)
fn_obsl function p1,d3
1,12/2,12/3,15
generate 480
terminate 1
start 1
Таймер
; 1 лор
; 1 окулист
; 3 терапевта
; функция определяет, к кому из врачей идем:
; 1 – к лору, 2 – к окулисту, 3 – к терапевту
; в зависимости от номера в 1-м атрибуте Тр
; определяем имя устройства/памяти
; используем косвенную адресацию для
;подсчета времени занятости врачей
; в зависимости от номера в 1-м атрибуте Тр
; определяем время его обслуживания
Пример 1 (модель)
lor storage 1
okul storage 1
ter storage 3
fn_num function rn1,d3
.2,1/.45,2/1,3
fn_str function p1,d3
1,lor/2,okul/3,ter
var_t variable (st*2#sc*2)
fn_obsl function p1,d3
1,12/2,12/3,15
generate 480
terminate 1
start 1
Таймер
generate (exponential(1,0,3))
;определяем, к кому пришел больной
assign 1,fn$fn_num
;записываем имя врача во 2-й атрибут
assign 2,fn$fn_str
queue p1
enter p2
depart p1
;добавляем время простоя больного в
;ячейку 1(лор)/ 2(окулист)/ 3(терапевт)
savevalue p1+,m1
advance (exponential(1,0,fn$fn_obsl))
leave p2
;время занятости врачей в ячейках 4,5 и 6
savevalue (p1+3),v$var_t
terminate
Пример 1 (отчет)
Ожидание в очередях
лора
SAVEVALUE
1
2
3
4
5
6
RETRY
0
0
0
0
0
0
VALUE
248.820
950.408
1548.139
259.231
359.995
1276.251
Ожидание в очередях
окулиста
Ожидание в очередях
терапевта
Время работы лора
Время работы окулиста
Время работы
терапевта
Логические переключатели
«включен» – «выключен»
(по умолчанию)
LOGIC O A
A – имя/номер логического переключателя
О:
R – выключить
S – включить
I – инвертировать
СЧА логических переключателей
LS$<имя логического переключателя> :
=1 – логический переключатель «включен»
=0 – логический переключатель «выключен»
Для блока GATE поле О:
LR – выключен
LS – включен
Расширение примера 1
Время работы поликлиники:
8.00 – 12.00
обед: 12.00 – 13.00 (никто не приходит)
13.00 – 17.00
За 15 минут до конца рабочего дня – не занимать
очередь
Вопрос: все ли успеют обслужиться?
Пример 1 (модель)
generate 240,,,1
;наступление обеда
Logic S obed
Savevalue prihod,60 ;(не приходят)
Advance 60
;окончание обеда
Logic R obed
Таймер
Savevalue prihod,3
Advance 225
;не занимать очередь за 15 мин
Logic S day_end
Advance 15
;все ли обслужились?
Savevalue 10,(N$met1-N$met2)
terminate 1
start 1
;время прихода больных
initial x$prihod,3
generate (exponential(1,0,x$prihod))
gate lr day_end
gate lr obed
Met1 assign 1,fn$fn_num
assign 2,fn$fn_str
queue p1
enter p2
depart p1
savevalue p1+,m1
advance (exponential(1,0,fn$fn_obsl))
leave p2
savevalue (p1+3),v$var_t
Met2 terminate
Организация циклов
LOOP A,B
А – имя/номер параметра транзакта, который
выполняет функцию счетчика циклов
В – имя блока
Каждое прохождение блока транзактом –
уменьшение значения А на единицу
Пока значение А>0 – переход по метке В
иначе – продолжаем движение дальше
Пример использования цикла
Необходимо, чтобы через блок ADVANCE
все транзакты проходили по 10 раз.
Моделируем:
ASSIGN 1,10
POVT ADVANCE 34,12
LOOP 1,POVT
Списки





списки текущих событий: содержат транзакты, у которых
время очередной передвижки в программе модели меньше
системного времени; активные транзакты находятся в
состоянии задержки, например, по причине занятости
устройства;
списки будущих событий: содержат транзакты, у которых
время очередной передвижки больше системного времени
(например, все транзакты в блоках ADVANCE);
списки прерываний: содержат транзакты, обслуживание
которых на определенных устройствах было прервано
другими транзактами;
списки синхронизируемых и задержанных транзактов;
списки пользователя.
Включение транзакта в список
LINC A,B
A – номер/имя списка
В – дисциплина постановки в список:
•
•
•
•
FIFO (первым пришел, первым вышел) – в конец списка;
LIFO (последним пришел, первым вышел) – в начало списка;
СЧА – транзакт помещается в список в соответствии с
вычисленным значением (за транзактом, у которого
соответствующее значение больше). Например, транзакты
могут быть упорядочены в соответствии со значениями их
параметров.
PR – транзакты упорядочиваются по приоритетам.
Транзакт, попадая в блок LINK, временно исключается из
процесса (становится пассивным).
Извлечение транзакта из списка
UNLINC A,B,C
A – номер/имя списка, из которого извлекается
транзакт.
В – имя блока, к которому направляется
извлеченный транзакт.
С – количество транзактов, извлекаемых из списка
(по умолчанию – все).
Основной транзакт, вызвавший извлечение,
продолжает свое движение по программе.
СЧА списков
CA$< имя списка > – среднее число транзактов в
CC$< имя списка > –
CH$< имя списка > –
CM$< имя списка > –
CT$< имя списка > –
списке;
общее число транзактов,
прошедших через список;
текущее число транзактов в
списке;
максимальное число
транзактов в списке;
среднее время, проведенное
транзактом в списке.
Пример организации обычной
очереди через списки
GENERATE 5,2
QUEUE OCH
GATE NU USTR,WAIT
PROD SEIZE USTR
DEPART OCH
ADVANCE 4,2.5
LEAVE USTR
UNLINK LINE,PROD,1
TERMINATE
WAIT LINK LINE,FIFO
Если устройство занято,
заносим в список и временно
исключаем из процесса
Пример организации обычной
очереди через списки
GENERATE 5,2
QUEUE OCH
GATE NU USTR,WAIT
PROD SEIZE USTR
DEPART OCH
ADVANCE 4,2.5
LEAVE USTR
UNLINK LINE,PROD,1
TERMINATE
WAIT LINK LINE,FIFO
При освобождении
устройства очередной
транзакт из списка
занимает устройство
Если устройство занято,
заносим в список и временно
исключаем из процесса
Пример 2 (постановка задачи)
Поступают задания на выполнение работ в среднем каждые 20 минут
(экспоненциальный закон распределения).
Каждое задание содержит от 1 до 5 этапов (с равной вероятностью)
Среднее время выполнения каждого этапа от 3 до 7 минут (равномерный
закон распределения)
В первую очередь выполняются те задания, которые требуют меньше
времени на выполнение.
10% работ требуют повторного выполнения (время дополнительной
работы составляет 20% от первоначального)
Общее время моделирования – 10 часов
Определить: сколько времени не хватило на выполнение
работ, которые скопились в очереди?
Пример 2 (модель)
;функции для определения
;времени выполнения задания
Kol_steps function rn1,D5
0.2,1/.4,2/.6,3/.8,4/1,5
Times function rn1,c2
0,3/1,7
;таймер
GENERATE 600
UNLINK 77,NEXT2
ADVANCE 0.1
TERMINATE 1
;подсчет времени и количества
NEXT2 SAVEVALUE SUM_TIME+,P1
SAVEVALUE KOL+,1
TERMINATE
START 1
;приход покупателей
GENERATE (exponential(1,0,20))
;Р1 – время на выполнение задания
ASSIGN 3,FN$KOL_STEPS
NEXT ASSIGN 1+,FN$TIMES
LOOP 3,NEXT
;Р2 – порядок постановки в очередь
POVT ASSIGN 2,(40-P1)
GATE NU RABOTN,WAIT
BEG SEIZE RABOTN
ADVANCE P1
RELEASE RABOTN
UNLINK 77,BEG,1
TRANSFER .9,,ENDING
ASSIGN 1,(.2#P1)
TRANSFER ,POVT
ENDING TERMINATE
WAIT LINK 77,P2
Пример 2
(результаты моделирования)
SAVEVALUE
SUM_TIME
KOL
RETRY
0
0
VALUE
19.416
1.000
Download