Смекни!
smekni.com

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

Если же в момент поступления оба канала МКУ заняты, и поэтому блок

ENTER отказывает во входе, то транзакт будет направлен в блок

TRANSFER с именем REFUS, работающий в статистическом режиме. С ве-

роятностью 0,9 транзакты из этого блока передаются в следующий

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

TRANSFER, работающего в безусловном режиме, передаются вновь на

вход модели в блок с именем ENT1. С вероятностью 0,1 транзакты из

блока с именем REFUS передаются в блок TERMINATE с именем OUT для

уничтожения.

Следует заметить, что для уничтожения транзактов, получивших

отказ в обслуживании, понадобился отдельный блок TERMINATE для

фиксации в стандартном отчете количества потерянных транзактов с

помощью счетчика блока с именем OUT (СЧА N$OUT).

Для моделирования той же СМО может быть использован также блок

TEST (рис. 13). В этом варианте модели транзакт проходит в блок

ENTER, если текущее число занятых каналов (СЧА S$STO2) меньше 2.

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

ENT1 TEST L S$STO2,2,REFUS

ENTER STO2

ADVANCE 160,FN$EXP

LEAVE STO2

TERMINATE 1

REFUS TRANSFER .1,,OUT

ADVANCE 250,FN$EXP

TRANSFER ,ENT1

OUT TERMINATE 1

Рис. 13

При использовании блока GATE модель принимает вид, показанный

на рис. 14. В этом варианте транзакт проходит в блок ENTER, если

условие "МКУ STO2 не заполнено" истинно.

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

ENT1 GATE SNF STO2,REFUS

ENTER STO2

ADVANCE 160,FN$EXP

LEAVE STO2

TERMINATE 1

REFUS TRANSFER .1,,OUT

ADVANCE 250,FN$EXP

TRANSFER ,ENT1

OUT TERMINATE 1

Рис. 14

2.5. Блоки, работающие с памятью

Для хранения в памяти отдельных числовых значений и массивов

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

емых величин.

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

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

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

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

0. Для установки отличных от 0 начальных значений сохраняемых вели-

чин используется оператор INITIAL, имеющий следующий формат:

INITIAL X$ имя,значение

INITIAL Xj ,значение

Здесь имя и j - соответственно имя и номер сохраняемой величины, а

значение - присваиваемое ей начальное значение (константа).

Для изменения сохраняемых величин в процессе моделирования

служит блок SAVEVALUE (сохранить величину), имеющий следующий фор-

мат:

имя SAVEVALUE A,B

В поле A указывается номер или имя сохраняемой величины, в которую

записывается значение операнда B. Если в поле A после имени (номера)

сохраняемой величины стоит знак + или -, то значение операнда B

добавляется или вычитается из текущего содержимого сохраняемой

величины. Например:

SAVEVALUE 5,Q$LINE

SAVEVALUE NREF+,1

Сохраняемые величины имеют единственный СЧА с названием X,

значением которого является текущее значение соответствующей сохра-

няемой величины.

Изменим пример на рис. 14 таким образом, чтобы исходные данные

модели (средний интервал поступления транзактов и среднее время

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

делирования (количество потерянных транзактов) фиксировался также в

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

рис. 15.

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

раняемые значения в виде матриц m*n, где m - число строк, n - число

столбцов матрицы. Каждая матрица должна быть перед началом модели-

рования определена с помощью оператора MATRIX (определить матрицу),

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

имя MATRIX A,B,C

Поле A оператора не используется и сохранено в GPSS/PC для

совместимости со старыми версиями GPSS. В полях B и C указываются

соответственно число строк и столбцов матрицы, задаваемые констан-

тами, причем общее число элементов, равное произведению B на C, не

должно превышать 8191. Например, оператор

MTAB MATRIX ,10,2

определяет матрицу с именем MTAB, содержащую десять строк и два

столбца.

INITIAL X$TARR,100

INITIAL X$TSRV,160

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 X$TARR,FN$EXP

ENT1 GATE SNF STO2,REFUS

ENTER STO2

ADVANCE X$TSRV,FN$EXP

LEAVE STO2

OUT TERMINATE 1

REFUS TRANSFER .1,,COUT

ADVANCE 250,FN$EXP

TRANSFER ,ENT1

COUT SAVEVALUE NREF+,1

TRANSFER ,OUT

Рис. 15

В начале моделирования элементы всех определенных матриц уста-

навливаются равными 0. Для установки отличных от 0 начальных значе-

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

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

INITIAL MX$ имя (a,b),значение

INITIAL MXj (a,b),значение

Здесь имя и j - соответственно имя и номер матрицы; a и b - номера

соответственно строки и столбца, задаваемые константами; значение -

присваиваемое элементу матрицы начальное значение, задаваемое также

константой.

Для изменения значений элементов матриц в процессе моделирова-

ния служит блок MSAVEVALUE (сохранить значение элемента матрицы),

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

имя MSAVEVALUE A,B,C,D

В поле A указывается имя или номер матрицы, после которого,

как и в блоке SAVEVALUE, может стоять знак + или -. В полях B и C

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

изменяемый элемент матрицы. В поле D указывается величина, исполь-

зуемая для изменения заданного элемента матрицы. Например:

MSAVEVALUE 5,3,2,X1

MSAVEVALUE MTAB+,P$ROW,P$COL,1

Матрицы имеют единственный СЧА с названием MX, ссылка на кото-

рый записывается в следующем виде:

MX$ имя (a,b)

MXj (a,b)

Здесь имя и j - соответственно имя и номер матрицы; a и b - номера

соответственно строки и столбца, задаваемые константами или ссылка-

ми на СЧА параметров транзактов. Например:

MX5(2,1)

MX$MTAB(P$ROW,P$COL)

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 указывается число выводимых транзактов