Смекни!
smekni.com

Моделирование на GPSS (стр. 9 из 13)

или 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 не заполнено, блок GATE впускает вновь

прибывший транзакт в блок ENTER, и в МКУ занимается один канал.

Если же МКУ заполнено, то блок GATE направляет транзакт в блок LINK

с именем WAIT, помещающий транзакт в конец списка пользователя с

именем BUFER, моделирующего очередь к МКУ. Каждый транзакт, покида-

ющий МКУ по завершении обслуживания и освобождающий один канал,

проходит блок UNLINK и выводит один транзакт с начала списка (если

список не пуст), направляя его в блок с именем ENT1 на занятие ка-

нала в МКУ.

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

Рис. 17

Заметим, что для изменения дисциплины обслуживания на "позже

пришел - раньше обслужен" достаточно или заменить в поле B блока

LINK FIFO на LIFO, или записать в поле D блока UNLINK операнд BACK.

Следует также обратить внимание на то, что блоки QUEUE-DEPART для

сбора статистики об ожидающих транзактах не используются, так как

почти все те же данные можно получить из статистики о списке поль-

зователя.

Рассмотрим еще один пример, иллюстрирующий использование

списков пользователя для организации нестандартных дисциплин обслу-

живания. Пусть в одноканальной СМО с ожиданием требуется организо-

вать такую дисциплину, при которой приоритет отдается заявкам с на-

именьшим временем обслуживания. Такая модель будет иметь вид, пока-

занный на рис. 18.

В параметр TSRV поступающих в модель транзактов в блоке ASSIGN

записывается случайное время обслуживания, вычисляемое с использо-

ванием функции EXP. Если устройство SYSTEM свободно, то блок GATE

впускает транзакт в блок SEIZE, и устройство занимается на время

P$TSRV. Если же в момент поступления транзакта устройство занято,

то блок GATE направляет транзакт в блок LINK, который вводит тран-

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

Рис. 18

закт в список пользователя LINE, упорядочивая транзакты по воз-

растанию времени обслуживания, записанного в параметре P$TSRV. Блок

UNLINK по освобождении устройства выводит с начала списка транзакт

с наименьшим временем обслуживания, обеспечивая тем самым заданную

дисциплину.

3. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ GPSS/PC

Для управления прогоном модели используются управляющие опера-

торы GPSS/PC. С одним из них - оператором START - мы уже сталкива-

лись при рассмотрении блока TERMINATE. Оператор START (начать) име-

ет следующий формат:

START A,B,C,D

Поле A содержит константу, задающую начальное значение счетчи-

ка завершений. В поле B может быть записано ключевое слово NP -

признак подавления формирования стандартного отчета по завершении

моделирования. Если поле B пусто, то по окончании прогона модели

формируется отчет со стандартной статистической информацией о всех

объектах модели (см. разд. 5). Поле C не используется и сохранено

для совместимости со старыми версиями GPSS. Поле D может содержать

1 для включения в отчет списков текущих и будущих событий. Если по-

ле D пусто, то выдача в отчет содержимого этих списков не произво-

дится.

Оператор SIMULATE (моделировать) устанавливает предел реально-

го времени, отводимого на прогон модели. Если прогон не завершится

до истечения этого времени, то он будет прерван принудительно с вы-

дачей накопленной статистики в отчет.

Оператор SIMULATE имеет единственный операнд A, содержащий

предельное время моделирования в минутах, задаваемое константой.

Оператор размещается перед оператором START, начинающим лимитиро-

ванный прогон.

Оператор RMULT (установить значения генераторов) позволяет пе-

ред началом прогона установить начальные значения генераторов слу-

чайных чисел RN, определяющие генерируемые ими последовательности.

Поля A-G оператора могут содержать начальные значения генераторов

соответственно RN1-RN7, задаваемые константами. Начальные значения

генераторов, не установленные операторами RMULT, совпадают с номе-

рами генераторов.

Оператор RESET (сбросить) сбрасывает всю статистическую инфор-

мацию, накопленную в процессе прогона модели. При этом состояние

аппаратных, динамических и запоминающих объектов, а также генерато-

ров случайных чисел сохраняется, и моделирование может быть возоб-

новлено с повторным сбором статистики. Оператор не имеет операндов.

С оператором RESET связано различие между относительным (СЧА

C1) и абсолютным (СЧА AC1) модельным временем. Таймер относительно-

го времени C1 измеряет модельное время, прошедшее после последнего

сброса статистики оператором RESET, а таймер абсолютного времени

AC1 - модельное время, прошедшее после начала первого прогона моде-

ли. Если не использовалось ни одного оператора RESET, то значения

этих таймеров совпадают. Оператор RESET устанавливает таймер C1 в

ноль и не влияет на таймер AC1.

Оператор RESET используется обычно при моделировании нестацио-

нарных процессов, когда требуется собрать статистику по отдельным

интервалам стационарности или исключить влияние переходного периода

на собираемую статистическую информацию.

Пусть, например, в модели, приведенной на рис. 18, необходимо

отбросить статистику, собираемую на первой тысяче транзактов. Это

может быть сделано способом, показанным на рис. 19.

Первый оператор START начинает прогон модели длиной 1000 тран-

зактов (переходный период). Поскольку статистика, накопленная на

этом периоде, не используется, в поле B оператора указан признак

подавления формирования отчета NP. Оператор RESET сбрасывает накоп-

ленную статистику, не изменяя состояния модели. Второй оператор

START начинает основной прогон модели с формированием отчета по за-

вершении прогона.

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

START 1000,NP

RESET

START 10000

Рис. 19

Оператор CLEAR (очистить) очищает модель, подготавливая ее к

повторному прогону. При этом сбрасывается вся накопленная в преды-

дущем прогоне статистика, из модели удаляются все транзакты, и она

приводится к исходному состоянию, как перед первым прогоном. Уста-

навливаются в ноль сохраняемые величины и матрицы, что следует учи-

тывать при использовании этих объектов для хранения исходных дан-