Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GPSS_2003.doc
Скачиваний:
36
Добавлен:
13.11.2019
Размер:
13.2 Mб
Скачать

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

Ранее были рассмотрены прямые способы адресации, когда:

1) номер объекта задается константой

2)номер объекта задается СЧА

Адресация может быть относительной и по отношению к само­му блоку. Это осуществляется при помощи записи *+/-п. Например,

TRANSFER ,*+2

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

Подобные ссылки не зависят от свойств транзакта, обрабаты­ваемого в данный момент времени. Использование прямой адресации может привести к введению большого числа дополнительных блоков только для того, чтобы записать номера объектов в СЧА, т.е. к увели­чению объема модели. Существенным образом сократить объем мо­дели и использовать зависимость номеров объектов от свойств транзактов позволяет косвенная адресация.

Общий формат косвенной адресации:

CЧA*CЧAj или CЧA*CЧA<имя>

Там, где допустимо использование СЧА, обычно могут исполь­зоваться и CЧA*CЧA.

При использовании косвенной адресации параметр P может опускаться.

Пример 4.46

SEIZE P*X1

Занять устройство, номер которого содержится в параметре транзакта, А номер параметра определяется значением ячейки X1.

SAVEVALUE l,X*P2

Поместить в ячейку c номером 1 значение, содержащееся в ячейке, номер которой определяется параметром 2.

Пример 4.47

В данной модели предполагается, что через некоторый узел сети проходят информационные сообщения грех типов, причем каждый из них характеризуется своим распределением числа символов. В моде­ли первый параметр транзакта содержит тип сообщения, А второй па­раметр – число символов сообщения.

При использовании косвенной адресации при обраще­нии к устройствам, МКУ или функциям через параметры приходится применять числовые значения имен. Транслятор GPSS/PC на этапе компиляции сам присваивает именам чи­словые значения, однако, при этом пользователь не контролирует та­кое присвоение. Для того, чтобы не возникали конфликты между чи­словыми значениями имен, присвоенных транслятором, и именами, заданных пользователем, необходимо использовать простое правило: в модели использовать имена либо только числовые, либо только символьные.

Назначение именам числовых значений осуществляется c помо­щью оператора EQU (аналог #define в языке программирования Си).

Пример 4.48

Необходимо занять МКУ, номер которого определяется в пер­вом параметре транзакта. По логике функционирования модели за­нимаетсяодин из двух МКУ: SECTION_A или SECTION_B.

Пример 4.49

Рассмотрим приход клиентов в банк и их обслуживание касси­рами. Время прихода клиентов задается функцией распределения ARRIVE. Для обслуживания открыто семь окошек кассиров, к каждому из них может образовываться очередь. Во время прихода кли­ента в банк, если хотя бы один кассир свободен, клиент сразу же подходит к этому кассиру. В противном случае он присоединяется к любой кратчайшей очереди на текущий момент. Порядок обслужи­вания клиентов из очереди – FIFO.

Обслуживание в кассе разделяется на пять видов операций, частота появления которых и среднее время обслуживания задают­ся функцией MEAN.

В модели c несколькими очередями могут возникнуть одно­временные события прихода клиента и конца обслуживания касси­ром. Если событие «приход» будет рассмотрено ранее события «ко­нец обслуживания», то устройство в момент проверки будет считаться занятым и вновь прибывший клиент не сможет занять касси­ра. Поэтому необходимо обеспечить приоритетность в обработке события «освобождения кассира». Это можно сделать c помощью задания уровня приоритета (блок PRIORITY 1) между блоками GENERATE и ADVANCE.

Для реализации поиска свободного кассира используется блок TEST E, помеченный меткой NEXT, который проверяет, свободен ли кассир. Максимальный номер кассира запоминается в параметре гранзакта P5. По этому же параметру образуется цикл для проверки всех устройств (блок LOOP). Номер первого свободного кассира запоминается в параметре транзакта P3, и транзакт передается на обслуживание. Если все устройства заняты, то транзакт переходит к следующему блоку после LOOP. т.е. к блоку TEST, помеченному меткой SIT. Этот блок сравнивает длины очередей для всех уст­ройств. Первоначально для сравнения в параметр P2 транзакта по­мещается число 1000. Аналогично организуется цикл по всем оче­редям c помощью параметра P1 транзакта. Первоначально туда по­мещается максимальный номер очереди. Если длина следующей просматриваемой очереди меньше предыдущей, то запоминается номер очереди в параметре P3 и ее длина в параметре P2 транзакта. После просмотра всех очередей (перехода к следующему блоку по­сле LOOP) в этих параметрах окажется номер минимальной очере­ди и ее длина, соответственно.

Приведем текст соответствующей программы.

Отчет с результатами моделирования:

Гистограмма времени пребывания в системе приведена на рис.4.12

Рис. 4.12

Косвенная адресация является мощным инструментом языка GPSS, позволяющим существенно сократить размер модели и во многих случаях уложиться в ограничения для бесплатно распространяемых студенческих версий языка GPSS (в модели должно быть до 150 блоков).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]