2.6. Блоки для работы со списками пользователя

Так как заблокированные транзакты находятся в списке текущих

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

расходует слишком много времени на просмотр этого списка с целью

выбора очередного транзакта для продвижения. Для экономии машинного

времени заблокированные транзакты целесообразно помещать в так на-

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

выполнятся условия, позволяюшие дальнейшее продвижение этих тран-

зактов. Кроме того, размещение ожидающих транзактов в списках поль-

зователя позволяет организовать различные дисциплины очередей, от-

личные от дисциплины "раньше пришел - раньше обслужен", реализован-

ной в списке текущих событий.

Списки пользователя представляют собой некоторые буферы, куда

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

событий. В отличие от списков текущих и будущих событий транзакты

вводятся в списки пользователя и выводятся из них не автоматически,

а в соответствии с логикой модели с помощью специальных блоков.

Для ввода транзактов в список пользователя служит блок LINK

(ввести в список), который может быть использован в двух режимах:

условном и безусловном. Ограничимся рассмотрением лишь безусловного

режима, в котором блок 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 не заполнено, блок 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 по освобождении устройства выводит с начала списка транзакт

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

дисциплину.


Информация о работе «Моделирование на GPSS»
Раздел: Информатика, программирование
Количество знаков с пробелами: 117295
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
113808
0
0

... , как в моделируемой СМО перемещаются заявки, соответствующие транзактам. В начальный момент времени в GPSS-модели нет ни одного транзакта. В процессе моделирования симулятор генерирует транзакты в определенные моменты времени в соответствии с теми логическими потребностями, которые возникают в моделируемой системе. Подобным же образом транзакты покидают модель в определенные моменты времени в ...

Скачать
13405
0
2

... возвращаются на ввод и во всех очередях обслуживаются первыми. Смоделировать работу вычислительного центра в течение 30 ч. Определить необходимую емкость буферов и функцию распределения времени обслуживания заданий. 1.1 Построение концептуальной модели объекта На первом этапе проведения моделирования необходимо построить концептуальную модель (Рис. 1), т.е. концептуальная (содержательная) ...

Скачать
36862
2
13

... в результате входа транзактов в блоки и выполнения блоками своих функций. В данной работе требуется с помощью пакета моделирования систем GPSS/PC исследовать модель заданной СМО. Задание На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин и имеет до ...

Скачать
8426
5
5

... А При входе в блок RELEASE освобождается устройство, номер которого указан в поле А. Устройство становится доступным для других транзактов. При моделировании работы устройств, когда новое требование пытается прервать обслуживание предыдущего, используются блоки PREEMPT (захватить устройство) и RETURN (вернуть устройство ранее прерванному требованию). Блок PREEMPT имеет следующий формат: ...

0 комментариев


Наверх