Транзакты, выходящие из блока GENERATE, поступают в блок QUEUE. После внесения соответствующих изменений в статис гаку, собираемую по данной очереди, транзакт входит в блок LINK. Так как в блоке LINK существует альтернативный выход, проверяется состояние индикатора списка CHAIN (имя которого опгеделя:чтся операндом А блока LINK). Если индикатор этого списка установлен в «0», транзакт немедленно устанавливает его в «1» и переходит к альтернативному блоку, то есть в данной модели - к блоку SEIZE. Если индикатор списка установлен в «1», то транзакт, входящий в блок LINK, без дальнейших проверок заносится в СП CHAIN. Так как в операнде В задан алгоритм FIFO, транзакт помещается в конец этого СП.
Отметим, что транзакты, занесенные в СП, не проходят дальнейшей обработки до тех пор, пока они не будут удалены из списка Другими транзактами, входящими в блок UNLINK. После удаления из СП транзакт поступает к блоку, указанному в операнде В блока UNLINK.
Когда транзакт входит в блок SEIZE, проводится корректировка статистики, связанной с заданным в этом блоке устройством. Потом транзакт переходит к блоку DEPART, где корректируется статистика очереди, а потом переходит к блоку ADVANCE, в котором он остается на протяжении времени, определяемом операндами блока ADVANCE.
После выхода из блока ADVANCE транзакт входит в блок RELEASE. Освобождается указанное в блоке устройство и корректируется связанная с ним статистика. После этого транзакт перемещается к блоку UNLINK.
При перемещении транзакта к блоку UNLINK просматривается СП, имя которого задано в операнде А:
1) если СП пуст, то есть CH$CHAIN =0, то индикатор списка устанавливается в «0» и транзакт переходит к следующему по номеру блоку, то есть к TERMINATE;
2) если СП не пуст, то есть CH$CHAIN ≠ 0, то первый транзакт этого списка удаляется, помещается в СТС и направляется к блоку, указанному в операнде В блока UNLINK (в данной модели это блок SEIZE, помеченный меткой CAN). А транзакт, вошедший в блок UNLINK, перемещается к блоку TERMINATE.
Рассмотренная модель не сложна, но хорошо иллюстрирует несколько важных моментов:
1) в этой системе активными могут быть только те транзакты, которые выходят из блока GENERATE, или тот транзакт, который в данный момент занимает устройство. Все остальные транзакты находятся в СП CHAIN;
2) так как все задержанные транзакты, то есть транзакты, находящиеся в очереди к устройству FC_1, будут помещены в СП CHAIN, интерпретатор не будет тратить время на изменение индикаторов задержки всех этих транзактов при каждом изменении положения устройства. Экономия времени зависит от длины очереди: чем длиннее очередь, тем больше времени будет сэкономлено благодаря блокам LINK - UNLINK, которые используются для управления очередями к разным объектам;
3) пользователь имеет возможность динамически формировать свои списки независимо от списков задержки, которые поддерживаются системой GPSS;
4) использование блоков LINK - UNLINK дает возможность синхронизировать движение разных транзактов в модели, например, задерживать в списке транзакты до тех пор, пока какой-либо другой транзакт не выведет их из списка с помощью блока UNLINK.
Пример 4.56
Рассмотрим работу мультиплексора (см. главу 5), который подключен к высокоскоростному каналу (ВК) связи и работает в режиме разделения времени с четырьмя низкоскоростными каналами (НК), опрашивая их циклически. На один опрос каждого из НК мультиплексор тратит 50 мс, время переключения между НК - 10 мс. Если в опрашиваемом НК есть сообщение, оно передается по ВК в течение 500+60 мс. За один опрос передается одно сообщение. Время возникновения сообщений в четырех НК равномерно распределено в интервале 1500±500мс, и сообщения равновероятно могут появляться на любом канале.
Необходимо определить загрузку ВК при передаче по нему 1000 сообщений.
Программа:
* За основу взята программа из книги Дж. Мартина
* «Системный анализ передачи данных», т. 2