- •3.4. Сбор статистических данных для получения оценок характеристик случайных величин
- •3.5. Определение количества реализаций при моделировании случайных величин
- •Глава 4. Система моделирования gpss
- •4.1. Объекты
- •4.2. Часы модельного времени
- •4.3. Типы операторов
- •4.4. Внесение транзактов в модель. Блок gеnеrате
- •4.5. Удаление транзактов из модели. Блок terminate
- •4.6. Элементы, отображающие одноканальные обслуживающие устройства
- •4.7. Реализация задержки во времени. Блок аdvance
- •4.8. Сбор статистики об ожидании. Блоки queue, depart
- •4.9. Переход транзакта в блок, отличный от последующего. Блок transfer
- •4.10. Моделирование многоканальных устройств
- •4.11. Примеры построения gpss-моделей
- •4.12. Переменные
- •4.13. Определение функции в gpss
- •4.14. Стандартные числовые атрибуты, параметры транзактов. Блоки аssign, маrк, lоор
- •4.15. Изменение приоритета транзактов. Блок рriority
- •4.16. Организация обслуживания с прерыванием. Блоки рrеемрт и return
- •4.17. Сохраняемые величины
- •4.18. Проверка числовых выражений. Блок теsт
- •4.20. Косвенная адресация
- •4.21. Обработка транзактов, принадлежащих одному семейству
- •4.22. Управление процессом моделирования в системе gpss
- •4.23. Списки пользователей
- •Блоки управления потоками транзактов
Блоки управления потоками транзактов
LOGIC, GATE LR, GATE LS и GАТЕ
Логические ключи (блок LOGIC). Логические ключи используются для моделирования объектов, имеющих всего два положения «Включен» (set или 1) и «Выключен» (reset или 0).
Блок LOGIC используется для включения, выключения или инвертирования положения ключа. Положение ключа можно проверить любым транзактом в любой части модели.
Блок LOGIC имеет такой формат:
LOGIC А
Операнд А – номер логического ключа; он может быть именем, положительным целым, СЧА или СЧА*СЧА. Когда транзакт входит в блок LOGIC, положение логического ключа, номер которого задан в операнде А, изменяется в зависимости от значения вспомогательного оператора Х следующим образом:
S – логический ключ устанавливается в положение «Включен»;
R – логический ключ устанавливается в положение «Выключен»;
I – логический ключ инвертируется, то есть положение его изменяется на противоположное.
Логический ключ имеет СЧА LS<номер ключа> или LS$<имя ключа>, который возвращает значение 1, если ключ в положении «Включен», и 0 – если в положении «Выключен».
Для изменения направления движения сообщений в зависимости от положения логических ключей используются блоки GATE LR и GATE LS.
Блоки GATE LR и GATE LS. Блоки GATE LR, GATE LS проверяют положение логического ключа. В операнде В задается номер блока, к которому переходит транзакт, если вспомогательный оператор Х имеет значение «ложь». Если значение логического оператора – «истина», транзакт переходит к следующему по порядку блоку. Если операнд В пустой, блок GATE LR (GATE LS) работает в режиме условного вхождения, если заполнен – в режиме безусловного вхождения.
В режиме условного вхождения транзакты могут войти в блок GАТЕ только в том случае, если логический оператор (LRj или LSj) имеет значение «истина». Если значение логического оператора – «ложь», транзакт помещается в список задержки и не обрабатывается интерпретатором до тех пор, пока значение не станет истинным. Единственным исключением являются транзакты, находящиеся в блоке ТRANAFER BOTH (или АLL). Когда потом какой-нибудь другой транзакт проходит блок LОGIC, изменяющий состояние соответствующего ключа, и присваивает указанному в блоке GАТЕ логическому оператору значение «истина», все транзакты, находящиеся в списке задержки, активизируются. После этого интерпретатор, просматривая СТС, получает возможность переместить один или несколько транзактов (включая и те, что находятся в блоке ТRANSFER ВОТН или АLL) в блок GАТЕ LR (GАТЕ LS), работающий в режиме условного вхождения.
Блок GАТЕ. Блок GАТЕ управляет потоком транзактов с помощью логических операторов. Блок GАТЕ, как и блок ТЕSТ, не изменяет никаких атрибутов транзактов. Он определяет номер следующего блока, к которому должен перейти транзакт из блока GАТЕ, Блок GАТЕ может задержать транзакт на входе, если не задан альтернативный выход. Блок GАТЕ имеет такой формат:
GАТЕ Х А,[В]
Операнд А содержит имя или номер объекта, для которого производится проверка. Операнд А может быть именем, положительным целым числом, СЧА или СЧА*СЧА.
Операнд В содержит номер следующего блока для входящего транзакта, если логический оператор имеет значение «ложь». Операнд В может быть именем, положительным целым числом, СЧА или СЧА*СЧА. Если операнд В определен, то он должен содержать номер блока, допустимый для текущей модели.
В дополнительном операторе Х задается один из следующих логических операторов:
1. Логические операторы, связанные с устройствами:
NU – устройство j, заданное в операнде А, свободно;
U – устройство j, заданное в операнде А, занято (в результате выполнения транзактом блока SЕIZE или РRЕЕMPT);
NI – устройство j, заданное в операнде А, не прервано;
I – устройство j, заданное в операнде А, обслуживает прерывания;
FV – устройство j, заданное в операнде А, доступно;
FNV – устройство j, заданное в операнде А, не доступно.
2. Логические операторы, связанные с МКУ:
SЕ – МКУ j, заданное в операнде А, пустое (S[j]=0);
SNЕ – МКУ j, заданное в операнде А, не пустое (S[j]<>0);
SF – МКУ j, заданное в операнде А, заполнено (R[j]=0);
SNF – МКУ j, заданное в операнде А, не заполнено (R[j]<>0);
SV – МКУ j, заданное в операнде А, доступно;
SNV – МКУ j, заданное в операнде А, не доступно.
3. Логические операторы, связанные с транзактами:
М – в блоке j, заданном в операнде А блока GАТЕ, находится в состоянии синхронизации транзакт, принадлежащий тому же семейству, что и транзакт, который находится в блоке GАТЕ или пытается войти в этот блок;
NM – в блоке j, заданном в операнде А блока GАТЕ, в состоянии синхронизации нет ни одного транзакта, принадлежащего тому же семейству, что и транзакт, который пытается войти в блок GАТЕ.
4. Логические операторы, связанные с логическими ключами:
LS – логический ключу, заданный в операнде А, включен;
LR – логический ключу, заданный в операнде А, выключен.
Режимы условного и безусловного входов в блок GАТЕ. Блок GАТЕ, как и блок ТЕSТ, может работать в режимах безусловного и условного вхождения.
В режиме безусловного вхождения транзакт никогда не задерживается на входе блока GАТЕ. Если заданный логический оператор имеет значение «истина», транзакт пытается перейти к следующему по номеру блоку. Если логический оператор имеет значение «ложь», то транзакты будут пытаться перейти к блоку, номер которого задан в операнде В блока GАТЕ. Выбор следующего блока производится один раз в момент вхождения транзакта в блок GАТЕ.
В режиме условного вхождения, если операнд В блока GАТЕ пустой (альтернативный выход не задан), транзакты не смогут войти в блок GАТЕ до тех пор, пока указанный в этом блоке логический оператор не будет иметь значение «истина». Интерпретатор не проверяет значение логических операторов, за исключением операторов М и NМ. В режиме условного вхождения задержанные транзакты находятся в списках задержки и, таким образом, исключаются из числа транзактов, обрабатываемых интерпретатором до тех пор, пока соответствующий логический оператор не примет значение «истина».
Пример 4.60
QUEUE LINE
GАТЕ SV
DEPART LINE
В данном случае транзакт помещается в список задержки, если МКУ LINE1 не доступно в тот момент, когда транзакт пытается войти в блок GАТЕ. Когда МКУ становится доступным, все транзакты выводятся из списка и делают попытку войти в МКУ.
Блоки GАТЕ – очень мощный инструмент, но они могут приводить к значительным затратам компьютерного времени на тщетные попытки транзактов войти в блок. Чтобы уменьшить частоту бесполезных попыток вхождения в блок, можно с помощью блоков LINK и UNLINK поместить транзакты в СП.
