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

4.24. Блоки управления потоками транзактов logic, gate lr, gate ls и gate

Логические ключи (блок LOGIC). Логические ключи исполь­зуются для моделирования объектов, имеющих всего два положения: «Включен» (set или 1 ) и «Выключен» (reset или 0).

Блок LOGIC используется для включения, выключения или ин­вертирования положения ключа. Положение ключа можно проверить любым транзактом в любой части модели.

Блок LOGIC имеет такой формат:

LOGIC Х А

Операнд А – номер логического ключа; он может быть именем, положительным целым, СЧА или CЧA*CЧA.

Когда транзакт входит в блок LOGIC, положение логического ключа, номер которого задан в операнде А, изменяется в зависимости от значения вспомогательного оператора Х следующим образом:

S – логический ключ устанавливается в положение «Включен»;

R – логический ключ устанавливается в положение «Выклю­чен»;

I – логический ключ инвертируется, то есть положение его из­меняется на противоположное.

Логический ключ имеет СЧА LS<номер ключа> или LS$<HMH ключа>, который возвращает значение 1, если ключ в по­ложении «Включен», и 0 – если в положении «Выключен».

Для изменения направления движения сообщений в зависимости от положения логических ключей используются блоки GATE LR и GATE LS

Блоки GATE LR и GATE LS. Блоки GATE LR, GATE LS проверяют положение логического ключа. В операнде В задается номер блока, к которому переходит транзакт, если вспомогательный оператор Х имеет значение «ложь». Если значение логического опе­ратора – «истина», транзакт переходит к следующему по порядку блоку. Если операнд В пустой, блок GATE LR (GATE LS) работает в режиме условного вхождения, если заполнен – в режиме безуслов­ного вхождения.

В режиме условного вхождения транзакты могут войти в блок GATE только в том случае, если логический оператор (LRj или LSj) имеет значение «истина». Если значение логического оператора – «ложь», транзакт помещается в список задержки и не обрабатывается интерпретатором до тех пор, пока значение не станет истинным. Пдинственным исключением являются транзакты, находящиеся в блоке TRANSFER BOTH (или ALL). Когда потом какой-нибудь другой транзакт проходит блок LOGIC, изменяющий состояние соответствующего ключа, и присваивает указанному в блоке GATE логическому оператору значение «истина», все транзакты, находящиеся в списке задержки, активизируются. После этого интерпретатор, про­сматривая CTC, получает возможность переместить один или не­сколько транзактов (включая и те, что находятся в блоке TRANSFER BOTH или ALL) в блок GATE LR (GATE LS), рабо­тающий в режиме условного вхождения.

Пример 4.59

Рассмотрим работу телефонной сети, имеющей 50 абонентских линий связи, причем одновременно может быть задействовано не бо­лее 10 связей между абонентами. Каждый абонент может соединиться c остальными, если свободны его входная линия связи и входная ли­ния вызываемого абонента. Из 50 линий для организации связи могут использоваться любые две свободных линии. Необходимо промоделировать работу телефонной сети для 1000 вызовов. Интервалы меж­ду вызовами и длительность разговора распределены по экспоненци­альному закону. Предусматривается, что первые 15 вызовов образуют переходной процесс в сети и эти данные не нужно учитывать при мо­делировании. Модель этой системы разработал Джеффри Гордон для GPSS/H. Приведенный текст программы модифицирован для GPSS World.

Программа:

Блок GATE. Блок GATE управляет потоком транзактов c по­мощью логических операторов. Блок GATE, как и блок TEST, не из­меняет никаких атрибутов транзактов. Он определяет номер следую­щего блока, к которому должен перейти транзакт из блока GATE. Блок GATE может задержать транзакт на входе, если не задан аль­тернативный выход. Блок GATE имеет такой формат:

GATEX A,|B|

Операнд А содержит имя или номер объекта, для которого про­изводится проверка. Операнд А может быть именем, положительным целым числом, СЧА или CЧA*CЧA.

Операнд В содержит номер следующего блока для входящего транзакта, если логический оператор имеет значение «ложь». Опе­ранд В может быть именем, положительным целым числом, СЧА или CЧA*CЧA. Если операнд В определен, то он должен содержать но­мер блока, допустимый для текущей модели.

В дополнительном операторе Х задается один из следующих ло­гических операторов:

1. Логические операторы, связанные c устройствами:

NU – устройство j, заданное в операнде А, свободно;

U – устройство j, заданное в операнде А, занято (в результате выполнения транзактом блока SEIZE или PREEMPT);

NI – устройство j, заданное в операнде А, не прервано;

I – устройство j, заданное в операнде А, обслуживает прерывания;

FV – устройство j, заданное в операнде А, доступно;

FNV – устройство j, заданное в операнде А, не доступно.

2. Логические операторы, связанные c МКУ:

SE – МКУ j, заданное в операнде А, пустое (S[j]=0);

SNE – МКУ j, заданное в операнде А, не пустое (S[j]<>0);

SF – МКУ j, заданное в операнде А, заполнено (R[t]=0);

SNF – МКУ j, заданное в операнде А, не заполнено (R[j]<>0);

SV – МКУ j, заданное в операнде А, доступно;

SNV – МКУ j, заданное в операнде А, не доступно.

3. Логические операторы, связанные c транзактами:

M – в блоке j, заданном в операнде А блока GATE, находится в состоянии синхронизации транзакт, принадлежащий тому же семей­ству, что и транзакт, который находится в блоке GATE или пытается войти в этот блок;

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

4. Логические операторы, связанные c логическими ключами:

LS – логический ключ j, заданный в операнде А, включен;

LR – логический ключ j, заданный в операнде А, выключен.

Режимы условного и безусловного входов в блок GATE. Блок GATE, как и блок TEST, может работать в режимах безусловного и условного вхождения.

В режиме безусловного вхождения транзакт никогда не задер­живается на входе блока GATE. Если заданный логический оператор имеет значение «истина», транзакт пытается перейти к следующему no номеру блоку. Если логический оператор имеет значение «ложь», го транзакты будут пытаться перейти к блоку, номер которого задан в операнде В блока GATE. Выбор следующего блока производится один раз в момент вхождения транзакта в блок GATE.

В режиме условного вхождения, если операнд В блока GATE пустой (альтернативный выход не задан), транзакты не смогут войти в блок GATE до тех пор, пока указанный в этом блоке логический оператор не будет иметь значение «истина». Интерпретатор не про­веряет значение логических операторов, за исключением операторов M и NM. В режиме условного вхождения задержанные транзакты на­ходятся в списках задержки и, таким образом, исключаются из числа транзактов, обрабатываемых интерпретатором до тех пор, пока соот­ветствующий логический оператор не примет значение «истина».

Пример 4.60

В данном случае транзакт помещается в список задержки, если МКУ LINE1 не доступно в тот момент, когда транзакт пытается войти в блок GATE. Когда МКУ становится доступным, все транзакты выводятся из списка и делают попытку войти в МКУ.

Блоки GATEочень мощный инструмент, но они могут приво­дить к значительным затратам компьютерного времени на тщетные попытки транзактов войти в блок. Чтобы уменьшить частоту бесполезных попыток вхождения в блок, можно c помощью блоков LINK и UNLINK поместить транзакты в СП.

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