- •Лекции по gpss
- •Блоки и транзакты
- •Транзакт входит в блок, функцией которого является удаление транзакта из модели.
- •Транзакт входит в блок, функцией которого является задержка транзакта на некоторое определенное в модели время.
- •Удаление транзактов из модели и завершение моделирования
- •Занятие и освобождение одноканального устройства
- •Когда транзакт поступает в устройство, он должен обслуживаться там некоторое время.
- •Сбор статистики
- •Управление продолжительностью моделирования
- •Логика работы интерпретатора
- •1. Он находится в каком-либо конкретном блоке.
- •2. Он находится (отмечен) в одном или нескольких цепях (списках) gpss.
- •1) Единица модельного времени определяется разработчиком модели, который задает все временные интервалы в одних и тех же, выбранных им, единицах;
- •Занятие и освобождение многоканального устройства (памяти)
- •Абсолютное и относительное время. Команды clear и reset
- •0 Относительное
- •Изменение значений параметров транзактов
- •Числовые и символьные имена. Команда equ
- •Блоки, изменяющие маршруты транзактов
- •Блок transfer
- •Блок test
- •Блок gate
- •Блок loop
- •Команды table и qtable. Таблицы. Блок tabulate
- •Сохраняемые величины и матрицы сохраняемых величин
- •Initial Xj, значение
- •Initial mXj( a,b), значение
- •Арифметические переменные. Команды variable (fvariable)
- •Генераторы случайных чисел
- •1. Разыгрывается случайное число, равномерно распределенное в диапазоне 0;1;
- •2. Полученное число преобразуется в эквивалентное ему значение, но уже принадлежащее интересующей нас выборке.
- •Функции gpssw. Команда function
- •Модель смо
- •Блоки для работы со списками пользователя
- •Моделирование сетей массового обслуживания
- •1,2 Узел – 1 канал,3 узел – 2 канала
- •1,2 Устройства – одноканальные, 3-4 канала
- •Моделирование захвата прибора
- •Логические переключатели
- •Булевские переменные. Команда bvariable
- •Обработка транзактов, принадлежащих одному ансамблю
Моделирование сетей массового обслуживания
Модель разомкнутой СеМО (без косвенной адресации)
1,2 Узел – 1 канал,3 узел – 2 канала
node3 storage 2
rtime table mp$rtime,50000,20000,15
generate (exponential(14,0,10000))
mark rtime
met1 queue node1
seize node1
depart node1
advance (exponential(16,0,5000))
release node1
transfer 0.1,,met2
transfer 0.6,,out
queue node3
enter node3
depart node3
advance (exponential(17,0,6000))
leave node3
transfer ,met1
met2 queue node2
seize node2
depart node2
advance (exponential(18,0,6000))
release node2
transfer ,met1
out tabulate rtime
terminate 1
start 1000
Модель СеМО ЗАМКНУТОЙ (без косвенной адресации)
1,2 Устройства – одноканальные, 3-4 канала
Пример на стр.21 нашего пособия для ФПК №2
node3 storage 4
ctime table mp$ctime,50000,50000,15
generate ,,,4
mark ctime
met3 queue node3
enter node3
depart node3
advance (exponential(1,0,120000))
leave node3
tabulate ctime
mark ctime
test le tc$ctime,1000,out
met1 queue node1
seize node1
depart node1
advance (exponential(17,0,450))
release node1
transfer 0.08,,met3
queue node2
seize node2
depart node2
advance (exponential(18,0,750))
release node2
transfer ,met1
out terminate 1
start 1
Модель СеМО разомкнутой с косвенной адресацией
stor1 equ 1
stor2 equ 2
stor3 equ 3
node1 equ 1
node2 equ 2
node3 equ 3
tarr equ 10000
*
stor1 storage 1
stor2 storage 1
stor3 storage 2
*
tserv function p$node,l3
1,5000/2,6000/3,5000
node1 function rn1,d3
0.1,2/0.4,3/1,0
node2 function rn1,d1
1,1
node3 function rn1,d1
1,1
*
rtime table mp$rtime,20000,10000,11
*
generate (Exponential(1,0,tarr))
assign node,1
mark rtime
met1 queue p$node
enter p$node
depart p$node
advance fn$tserv,exponential(1,0,1))
leave p$node
assign node,fn*node
test e p$node,0,met1
tabulate rtime
terminate 1
Модель СеМО замкнутой с косвенной адресацией
stor1 equ 1
stor2 equ 2
stor3 equ 3
node1 equ 1
node2 equ 2
node3 equ 3
stor1 storage 1
stor2 storage 1
stor3 storage 4
tserv function p$node,l3
1,450/2,750/3,120000
node1 function RN1,d2
.92,2/1,3
node2 function RN1,d1
1,1
node3 function RN1,d1
1,1
ctime table mp$ctime,20000,20000,12
generate ,,,4
assign node,3
mark ctime
met1 queue p$node
enter p$node
depart p$node
advance fn$tserv,(Exponential(1,0,1))
leave p$node
assign node,fn*node
test e p$node,3,met1
tabulate ctime
mark ctime
test e tc$ctime,1000,met1
terminate 1
start 1
Моделирование захвата прибора
Ранее были рассмотрены средства GPSS World для моделирования дисциплин с относительным приоритетом. При этом если прибор занят, а на его вход поступает транзакт с более высоким приоритетом, чем у обслуживаемого транзакта, обслуживание продолжается. Вновь поступивший транзакт ставится в очередь последним в своем приоритетном классе.
Для моделирования дисциплины с абсолютным приоритетом, когда поступление заявки, имеющей более высокий приоритет, приводит к прерыванию обслуживания низкоприоритетной заявки и захвату прибора высокоприоритетной заявкой, в GPSS World имеются специальные блоки.
Для моделирования захвата (прерывания) одноканального устройства вместо блоков SEIZE и RELEASE используются соответственно блоки PREEMPT (захватить) и RETURN (вернуть). Блок PREEMPT имеет следующий формат:
PREEMPT A,[B],[C],[D],[E]
В поле A указывается имя или номер устройства, подлежащего захвату. В поле B кодируется условие захвата. Если это поле пусто (режим прерывания), то захват возникает, если обслуживаемый транзакт сам не является захватчиком. Потенциальный захватчик – активный транзакт – не допускается в блок PREEMPT, если прибором уже обслуживается транзакт-захватчик. Это значит, что в данном режиме в каждый момент времени на одном приборе может быть прервано обслуживание только одного транзакта.
Если же в поле B записан операнд PR (приоритетный режим), то захват возникает, если приоритет транзакта-захватчика выше, чем приоритет обслуживаемого транзакта. При этом обслуживаемый транзакт может быть как обычным транзактом, так и транзактом, осуществившем захват прибора ранее. Таким образом, в приоритетном режиме прибор может быть захвачен любым числом транзактов.
Прерванные транзакты помещаются в цепь (список) прерываний, связанную с данным прибором, при этом располагаются они там в порядке “первым пришел – последним уходит”. Активный же транзакт занимает прибор.
Поля C, D и E определяют поведение транзактов, обслуживание которых было прервано. Поле C указывает имя блока, в который будет направлен прерванный транзакт. В поле D может быть указан номер или имя параметра прерванного транзакта, в который записывается время, оставшееся этому транзакту до завершения обслуживания на устройстве. При отсутствии операнда в поле E прерванный транзакт сохраняет право на автоматическое восстановление на устройстве по окончании захвата. Если же в поле E указан операнд RE, то транзакт теряет такое право.
Транзакт, захвативший прибор, освобождает его при входе в блок RETURN. Попытка какого-то другого транзакта освободить прибор воспринимается интерпретатором как ошибка.
Блок RETURN имеет единственный операнд A, содержащий имя или номер устройства, подлежащего освобождению от захвата.
Блоки PREEMPT и RETURN могут быть использованы для моделирования СМО с абсолютными приоритетами. В простейших случаях, при одном уровне захвата, в блоке PREEMPT используется единственный операнд A. При этом, прерванный транзакт переводится GPSSW из списка будущих событий в так называемый список прерываний устройства, а по окончании захвата устройства возвращается в список будущих событий с предварительно вычисленным временем занятия устройства для продолжения обслуживания.
Рассмотрим примеры использования блока PREEMPT:
PREEMPT Line1
(транзакт, вошедший в этот блок, приобретает право на использование прибора Line1, если прибор не захвачен ранее другим транзактом).
PREEMPT Line1, PR, Line2
(транзакт может войти в блок и захватить прибор Line1, если он уже не занят транзактом с равным или большим приоритетом; прерванный транзакт, оставаясь в цепи прерываний и претендуя на обслуживание прибором, может продолжить движение в модели).
Пример прерывания в приоритетном режиме (Боев, стр. 116):
GENERATE 5,,,3 ; генерируется только 3 транзакта
PRIORITY XN1
PREEMPT Rem1, PR
ADVANCE 11
RETURN Rem1
TEST E PR, 1, Met2
Met1 TERMINATE 1
Met2 TEST E PR, 2, Met4
Met3 TERMINATE 1
Met4 TERMINATE 1
В данном примере блок PREEMPT работает в приоритетном режиме, а операнд С не используется, т. е прерванный транзакт к другому блоку не направляется. Поэтому он после прерывания с автоматически сохраненным временем до конца обслуживания (дообслуживание) автоматически возвращается в список задержки, связанный с одноканальным устройством Rem1.
В модели генерируется только три транзакта, они дообслуживаются в порядке приоритета: сначала дообслуживается второй транзакт, а затем третий.
