Студентам > Курсовые > Моделирование систем и сетей связи на GPSS
Моделирование систем и сетей связи на GPSSСтраница: 9/12
ной в списке текущих событий.
Списки пользователя представляют собой некоторые
буферы, куда
могут временно помещаться транзакты, выведенные из
списка текущих
событий. В отличие от списков текущих и будущих событий
транзакты
вводятся в списки пользователя и выводятся из них не
автоматически,
а в соответствии с логикой модели с помощью специальных
блоков.
Для ввода транзактов в список пользователя служит
блок LINK
(ввести в список), который может быть использован в
двух режимах:
условном и безусловном. Ограничимся рассмотрением лишь
безусловного
режима, в котором блок LINK имеет следующий формат:
1имя 0 LINK A,B
В поле A задается имя или номер списка пользователя,
в который
безусловным образом помещается транзакт, вошедший в
блок. Поле B
определяет, в какое место списка пользователя следует
поместить
этот транзакт. Если в поле B записано ключевое слово
FIFO, то тран-
закт помещается в конец списка, если LIFO - в начало
списка. В дру-
гих случаях транзакты упорядочиваются в соответствии с
вычисленным
значением поля B, где обычно записывается один из СЧА
транзактов,
таких как PR, M1 или P. Если поле B содержит СЧА PR, то
транзакты
упорядочиваются по убыванию приоритета. В остальных
случаях произ-
водится упорядочение по возрастанию указанного СЧА.
Например, блок
LINK 5,FIFO
помещает транзакты в список пользователя с номером 5 в
порядке их
поступления в блок. Блок
LINK BUFER,P$ORDER
помещает транзакты в список пользователя с именем BUFER,
упорядочи-
вая их по возрастанию параметра с именем ORDER.
Условия, при которых транзакт помещается в список
пользовате-
ля, в безусловном режиме проверяются средствами,
предусмотренными
разработчиком модели. Например, направить транзакт в
список пользо-
вателя в случае занятости устройства можно так, как
показано на
рис. 16. Если устройство с именем FAC4 занято, то
блок GATE не
впускает транзакт в блок SEIZE, а направляет его в блок
LINK с име-
нем WAIT, и транзакт вводится в конец списка
пользователя с именем
BUFER.
- 35 -
.
Ш1
....................
GATE NU FAC4,WAIT
SEIZE FAC4
....................
WAIT LINK BUFER,FIFO
....................
Ш1.5
Рис. 16
Для вывода одного или нескольких транзактов из
списка пользо-
вателя и помещения их обратно в список текущих событий
служит блок
UNLINK (вывести из списка), имеющий следующий формат:
1имя 0 UNLINK X
A,B,C,D,E,F
В поле A указывается имя или номер списка
пользователя. Поле B
содержит имя блока, в который переходят выведенные из
списка поль-
зователя транзакты. В поле C указывается число выводимых
транзактов
или ALL для вывода всех находящихся в списке транзактов.
Операнды в полях D и E вместе со вспомогательным
операндом X
определяют способ и условия вывода транзактов из списка
пользовате-
ля. Если поля D и E пусты, то и операнд X не
используется, а тран-
закты выводятся с начала списка пользователя. Если поле
D содержит
ключевое слово BACK, то поле E и вспомогательный
операнд X не
используются, а транзакты выводятся с конца списка. В
остальных
случаях значение поля D интерпретируется как номер
параметра тран-
зактов, находящихся в списке пользователя, а из списка
выводится
заданное число тех транзактов, у которых значение этого
параметра
по отношению к значению операнда в поле E
удовлетворяет условию,
заданному вспомогательным операндом X. Операнд X
принимает те же
значения, что и в блоке TEST.
В поле F указывается имя блока, куда переходит
транзакт, выхо-
дящий из блока UNLINK, если из списка пользователя не
выведен ни
один транзакт. Если это поле пусто, то выводящий транзакт
переходит
в следующий блок независимо от количества выведенных
транзактов.
Например, блок
UNLINK 5,NEXT,1
выводит из списка пользователя с номером 5 один
транзакт с начала
списка и направляет его в блок с именем NEXT. Блок
UNLINK BUFER,ENT1,1,BACK
выводит из списка пользователя с именем BUFER один
транзакт с конца
списка и направляет его в блок с именем ENT1. Блок
UNLINK E P$UCH,MET2,ALL,COND,P$COND,MET3
выводит из списка пользователя, номер которого записан в
параметре
- 36 -
UCH выводящего транзакта, и направляет в блок с именем
MET2 все
транзакты, содержимое параметра COND которых равно
содержимому од-
ноименного параметра выводящего транзакта. Если таких
транзактов в
списке не окажется, то выводящий транзакт будет
направлен в блок с
именем MET3, в противном случае - к следующему блоку.
Следует отметить следующие особенности
выполнения блока
UNLINK. Во-первых, если поля D и E содержат ссылки на
СЧА транзак-
тов, то поле D вычисляется относительно транзактов в
списке пользо-
вателя, а поле E - относительно активного транзакта.
Во-вторых,
после вывода транзактов из списка симулятор продолжает
или начинает
продвижение транзакта с наивысшим приоритетом, а при
равенстве при-
оритетов отдает предпочтение транзакту-инициатору вывода.
Каждый список пользователя имеет следующие СЧА: CH
- текущая
длина списка; CA - средняя длина списка (целая часть);
CM - макси-
мальная длина списка; CC - общее число транзактов,
вошедших в
список; CT - целая часть среднего времени пребывания
транзакта в
списке.
Воспользуемся рассмотренными блоками для
моделирования много-
канальной СМО с ожиданием транзактов в списке
пользователя (рис.
17). Если МКУ с именем STO2 не заполнено, блок GATE
впускает вновь
прибывший транзакт в блок ENTER, и в МКУ занимается
один канал.
Если же МКУ заполнено, то блок GATE направляет транзакт в
блок LINK
с именем WAIT, помещающий транзакт в конец списка
пользователя с
именем BUFER, моделирующего очередь к МКУ. Каждый
транзакт, покида-
ющий МКУ по завершении обслуживания и освобождающий
один канал,
проходит блок UNLINK и выводит один транзакт с начала
списка (если
список не пуст), направляя его в блок с именем ENT1 на
занятие ка-
нала в МКУ.
Ш1
STO2 STORAGE 2
EXP FUNCTION RN1,C24
0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
GENERATE 100,FN$EXP
GATE SNF STO2,WAIT
ENT1 ENTER STO2
ADVANCE 160,FN$EXP
LEAVE STO2
UNLINK BUFER,ENT1,1
TERMINATE 1
WAIT LINK BUFER,FIFO
Ш1.5
Рис. 17
- 37 -
Заметим, что для изменения дисциплины обслуживания
на "позже
пришел - раньше обслужен" достаточно или заменить
в поле B блока
LINK FIFO на LIFO, или записать в поле D блока UNLINK операнд
BACK.
Следует также обратить внимание на то, что блоки
QUEUE-DEPART для
сбора статистики об ожидающих транзактах не
используются, так как
почти все те же данные можно получить из статистики о
списке поль-
зователя.
Рассмотрим еще один пример, иллюстрирующий
использование
списков пользователя для организации нестандартных
дисциплин обслу-
живания. Пусть в одноканальной СМО с ожиданием требуется
организо-
вать такую дисциплину, при которой приоритет отдается
заявкам с на-
именьшим временем обслуживания. Такая модель будет иметь
вид, пока-
занный на рис. 18.
В параметр TSRV поступающих в модель транзактов в
блоке ASSIGN
записывается случайное время обслуживания, вычисляемое с
использо-
ванием функции EXP. Если устройство SYSTEM свободно, то
блок GATE
впускает транзакт в блок SEIZE, и устройство занимается
на время
P$TSRV. Если же в момент поступления транзакта
устройство занято,
то блок GATE направляет транзакт в блок LINK, который
вводит тран-
Ш1
EXP FUNCTION RN1,C24
0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
GENERATE 100,FN$EXP
ASSIGN TSRV,80,EXP
GATE NU SYSTEM,WAIT
SFAC SEIZE SYSTEM
ADVANCE P$TSRV
RELEASE SYSTEM
UNLINK LINE,SFAC,1
TERMINATE 1
WAIT LINK LINE,P$TSRV
Ш1.5
Рис. 18
закт в список пользователя LINE, упорядочивая
транзакты по воз-
растанию времени обслуживания, записанного в параметре
P$TSRV. Блок
UNLINK по освобождении устройства выводит с начала
списка транзакт
с наименьшим временем обслуживания, обеспечивая тем
самым заданную
дисциплину.
- 38 -
.
3. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ GPSS/PC
Для управления прогоном модели используются
управляющие опера-
торы GPSS/PC. С одним из них - оператором START - мы уже
сталкива-
лись при рассмотрении блока TERMINATE. Оператор START
(начать) име-
ет следующий формат:
START A,B,C,D
Поле A содержит константу, задающую начальное
значение счетчи-
ка завершений. В поле B может быть записано ключевое
слово NP -
|