В GPSS существует возможность автоматического сбора статистических данных, описывающих вынужденное ожидание, которое может происходить время от времени в различных точках модели (например, вследствие невозможности занять используемое другим транзактом ОКУ).
Сбор статистики осуществляется c помощью такого средства, как регистратор очереди, реализуемый блоками QUEUE и DEPART.
При использовании регистратора очереди интерпретатор автоматически начинает собирать информацию об ожидании c помощью СЧА (число входов транзактов в очередь; количество транзактов, которые фактически присоединились к очереди и сразу ее освободили, т. е. имели время ожидания, равное нулю; максимальная длина очереди; среднее количество ожидавших транзактов; среднее время ожидания транзактов). В модели может быть несколько регистраторов очередей, различающихся именами. Правила присвоения имени очереди те же, что и для устройств. [4, 5]
Блоки QUEUE и DEPART имеют следующий формат записи:
QUEUE A[,B];
DEPART A[,B],
где А (обязательный операнд) – имя очереди, в которую необходимо встать транзакту или которую надо освободить (числовое или символьное имя, CЧА);
|
|
В – число единиц, на которое увеличивается (уменьшается) длина очереди (число, СЧА). Значение В по умолчанию равно единице.
При входе транзакта в блок QUEUE (встать в очередь) счетчик входов данной очереди увеличивается на значение В; длина очереди (счетчик текущего содержимого) увеличивается на В; транзакт присоединяется к очереди c запоминаем ее имени и значения текущего модельного времени. Значение текущей длины очереди хранится в стандартном числовом атрибуте Q$<имя очереди>.
После того, как транзакт переходит в блок DEPART (освободить очередь) определенной очереди, он перестает быть ее элементом, при этом длина очереди уменьшается на В. Используя «привязку» к значению времени, интерпретатор определяет, является ли время, проведенное транзактом в очереди, нулевым, и если да, то такой транзакт по определению является транзактом c нулевым пребыванием в очереди, одновременно изменяется счетчик нулевых вхождений; ликвидируется «привязка» транзакта к очереди. Если в модели используются объекты типа «очередь», то в файле стандартной статистики будет представлена информация об этих объектах (см. прил. 2).
Ранее говорилось, что интерпретатор автоматически поддерживает дисциплину обслуживания очереди FIFO. На самом деле, используемая по умолчанию в GPSS дисциплина обслуживания является более сложной, чем «первым пришел — первым обслужен»; ее реализуют только для транзактов одинакового приоритета. Уровень приоритета ожидающих транзактов автоматически учитывается интерпретатором при выборе на обслуживание. [5]
|
|
П р и м е р ы использования блоков QUEUE и DEPART:
1. QUEUE Qunit1
SEIZE unit1
DEPART Qunit1
ADVANCE 16,4
RELEASE unit1
Все транзакты, попадающие в устройство unit1, должны пройти через пару блоков QUEUE – DEPARTс именемQunit1 даже тогда, когда устройство свободно и его можно сразу же занять и задержаться там в течение (16 ± 4) единиц модельного времени.
2. QUEUE QUN1 – увеличение на единицу длины Q$QUN1 очереди QUN1;
QUEUE QUN2,2 – увеличение на две единицы длины Q$QUN2 очереди QUN2;
DEPART QWORKER – уменьшение на единицу длины Q$QWORKER очереди QWORKER.
Таким образом, когда транзакт входит в блок QUEUE, то выбирается очередь c именем, определенным операндом А (при необходимости очередь создается).
Блок QUEUE не поддерживает список членов очереди, он только добавляет значение В к длине очереди.
Использование регистратора очереди необязательно, с eгo помощью интерпретатор собирает лишь статистику об ожидании. Один и тот же транзакт может одновременно увеличить длину нескольких очередей.
При выходе транзакта из очереди через блок DEPARTтранзакту не обязательно уменьшать длину очереди на ту же величину, на которую он увеличил ее при входе в блок QUEUE, но в итоге количество входов в очередь должно равняться количеству выходов из нее.