Смекни!
smekni.com

Системы и сети связи на GPSS/PC (стр. 8 из 12)

В поле 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 на занятие канала в МКУ.

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

Заметим, что для изменения дисциплины обслуживания на "позже пришел - раньше обслужен" достаточно или заменить в поле 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 по освобождении устройства выводит с начала списка транзакт с наименьшим временем обслуживания, обеспечивая тем самым заданную дисциплину.

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 начинает основной прогон модели с формированием отчета по завершении прогона.

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

START 1000,NP

RESET

START 10000

1.5

Рис. 19

Оператор CLEAR (очистить) очищает модель, подготавливая ее к повторному прогону. При этом сбрасывается вся накопленная в предыдущем прогоне статистика, из модели удаляются все транзакты, и она приводится к исходному состоянию, как перед первым прогоном. Устанавливаются в ноль сохраняемые величины и матрицы, что следует учитывать при использовании этих объектов для хранения исходных данных. Исключение составляют генераторы случайных чисел, которые не возвращаются к своим начальным значениям, что позволяет повторить прогон модели на новой последовательности случайных чисел. Оператор не имеет операндов.

Оператор CLEAR используется обычно для организации нескольких независимых прогонов модели на разных последовательностях случайных чисел. Перед повторением прогона можно при необходимости переопределить отдельные объекты модели, например емкости многоканальных устройств.

Пусть, например, требуется повторить прогон модели, приведенной на рис. 17, три раза при емкости МКУ, равной 1, 2 и 3. Это может быть выполнено так, как показано на рис. 20. После каждой очистки модели оператором CLEAR оператор STORAGE устанавливает новое значение емкости МКУ с именем STO2.

Оператор END (закончить) завершает сеанс работы с GPSS/PC и возвращает управление в операционную систему. Оператор не имеет операндов.

1

STO2 STORAGE 1

EXP FUNCTION RN1,C24