Моделирование на GPSS
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
езусловном. Ограничимся рассмотрением лишь безусловного
режима, в котором блок LINK имеет следующий формат:
имя 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.
....................
GATE NU FAC4,WAIT
SEIZE FAC4
....................
WAIT LINK BUFER,FIFO
....................
Рис. 16
Для вывода одного или нескольких транзактов из списка пользо-
вателя и помещения их обратно в список текущих событий служит блок
UNLINK (вывести из списка), имеющий следующий формат:
имя 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
выводит из списка пользователя, номер которого записан в параметре
UCH выводящего транзакта, и направляет в блок с именем MET2 все
транзакты, содержимое параметра COND которых равно содержимому од-
ноименного параметра выводящего транзакта. Если таких транзактов в
списке не окажется, то выводящий транзакт будет направлен в блок с
именем MET3, в противном случае - к следующему блоку.
Следует отметить следующие особенности выполнения блока
UNLINK. Во-первых, если поля D и E содержат ссылки на СЧА транзак-
тов, то поле D вычисляется относительно транзактов в списке пользо-
вателя, а поле E - относительно активного транзакта. Во-вторых,
после вывода транзактов из списка симулятор продолжает или начинает
продвижение транзакта с наивысшим приоритетом, а при равенстве при-
оритетов отдает предпочтение транзакту-инициатору вывода.
Каждый список пользователя имеет следующие СЧА: CH - текущая
длина списка; CA - средняя длина списка (целая часть); CM - макси-
мальная длина списка; CC - общее число транзактов, вошедших в
список; CT - целая часть среднего времени пребывания транзакта в
списке.
Воспользуемся рассмотренными блоками для моделирования много-
канальной СМО с ожиданием транзактов в списке пользователя (рис.
17). Если МКУ с именем STO2 не заполнено, блок GAT