Косвенная адресация

Косвенная адресация. В рассматривавшихся до сих пор примерах моделей ссылки на раз- личные объекты GPSS PC производились исключительно по данным им произвольным именам.

Такая 1адресация 0объектов удобна, когда речь идет о небольшом числе объектов каждого типа. Если же число объек- тов некоторого типа велико, то во избежание пропорционального роста количества блоков в модели используют ссылки на эти объекты по их номерам с использованием так называемой 1косвенной адресации0. Идея косвенной адресации заключается в том, что каждый тран- закт в некотором своем параметре содержит номер того или иного объ- екта, а в полях блоков, адресующихся к объектам, записывается ссыл- ка на этот параметр транзакта.

Проиллюстрируем применение косвенной адресации на примере следующей модели.

Ш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 CLASS FUNCTION RN1,D3 .333,1 .667,2 1,3 MEAN FUNCTION P TYPE,L3 1,70 2,80 3,90 PRIOT VARIABLE 4-P TYPE STO2 STORAGE 2 WTIME QTABLE LINE,50,50,10 TTIME TABLE M1,100,100,12 GENERATE 100,FN EXP ASSIGN TYPE,FN CLASS PRIORITY V PRIOT QUEUE LINE QUEUE P TYPE ENTER STO2 DEPART P TYPE DEPART LINE ADVANCE FN MEAN,FN EXP LEAVE STO2 TABULATE TTIME TERMINATE 1 Ш1.5 Рис. 21 Пусть на вход моделируемой многоканальной СМО с двумя каналами обслуживания поступает пуассоновский поток заявок со средним интер- валом поступления 100 единиц модельного времени.

Каждая заявка с равной вероятностью 1 3 относится к одному из трех классов 1, 2 или 3, а среднее время обслуживания заявок каждого типа составляет соответственно 70, 80 и 90 единиц модельного времени. Чем меньше среднее время обслуживания заявки, тем выше ее приоритет.

Необходи- мо построить модель, позволяющую оценить средние значения времени ожидания заявок каждого типа, а также распределения общего времени ожидания в очереди и общего времени пребывания в системе.

Такая мо- дель имеет вид, показанный на рис. 21. Переменная PRIOT служит для вычисления приоритета транзакта как функции его класса, содержащегося в параметре с именем TYPE. Транзакты класса 1 P TYPE 1 получат приоритет 3, транзакты класса 2 - приоритет 2 и транзакты класса 3 - приоритет 1. В блоке ASSIGN в параметр TYPE транзактов записывается класс заявки, разыгрываемый с помощью функции CLASS. В следующем блоке PRIORITY с помощью переменной PRIOT определяется приоритет транзак- тов, первоначально равный 0 отсутствует поле E в блоке GENERATE . Далее каждый транзакт отмечается в блоках QUEUE в двух оче- редях.

Очередь с именем LINE является общей для транзактов всех классов. Входя в следующий блок QUEUE, транзакт отмечается в очере- ди с номером 1, 2 или 3 в зависимости от класса заявки, записанного в параметре TYPE. Аналогичным образом фиксируется уход из очередей в блоках DEPART. Таким образом, в модели создается четыре объекта типа очередь одна очередь с именем LINE и три с номерами 1, 2 и 3. При этом три последние очереди создаются одной парой блоков QUEUE-DEPART! В этом и заключается эффект косвенной адресации.

Как уже отмечалось ранее, каждому имени объекта симулятор сам ставит в соответствие некоторый номер. При ссылках на объекты одно- го и того же типа одновременно по именам и номерам, как это имеет место в рассматриваемом примере, существует опасность параллельной адресации к одному и тому же объекту вместо двух разных или, наобо- рот, к двум разным объектам вместо одного. Так, в рассматриваемой модели мы, вообще говоря, не знаем, какой именно номер поставит си- мулятор в соответствие имени очереди LINE. Если этот номер будет от 1 до 3, то это приведет к ошибке, так как в модели окажется не че- тыре очереди, а три, причем в одну из них будет заноситься информа- ция как обо всех транзактах, так и дополнительно о транзактах одно- го из трех классов.

Как избежать такой ситуации? К счастью, в большинстве случаев об этом можно не заботиться, поскольку симулятор ставит в соответствие именам объектов достаточ- но большие номера, начиная с 10000. При необходимости же можно воспользоваться оператором EQU, о котором уже говорилось выше, и самостоятельно сопоставить имени объекта желаемый номер.

Например, в рассматриваемой модели для того, чтобы очередь с именем LINE име- ла номер 4, достаточно записать оператор LINE EQU 4 4.2.