Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка данных / Томашевский_Имитационное моделирование в среде GPSS_2003.doc
Скачиваний:
189
Добавлен:
31.05.2015
Размер:
13.56 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 блоков).