Краткое практическое руководство по GPSS

Принципы использования блоков QUЕUЕ и DЕРАRТ


В любых системах массового обслуживания число ресурсов ограничено. Это означает, что не всегда можно немедленно предоставить ресурс при каждом требовании на его использование. В парикмахерской, например, таким ограниченным ресурсом является сам парикмахер. Если он занят в момент прихода клиента, то последний вынужден ждать своей очереди. В действительности, ожидающие обслуживания требования всегда составляют очередь, что дало основание называть такие системы системами с очередями (системами массового обслуживания).

Воспользуемся собственным опытом при использовании ограниченного ресурса и рассмотрим, какие события при этом происходят.

  1. Присоединяемся к очереди, т.е. образуем с другими требованиями группу "ожидающих обслуживания". Присоединение к очереди происходит в некоторый момент времени.
  2. Ждем своей очереди. Ожидание происходит в течение некоторого интервала времени.
  3. Покидаем очередь. Уход из очереди происходит в некоторый момент времени. Очень часто бывает необходимо собрать статистику, описывающую особенности протекания процесса. Эта статистика должна дать ответ на следующие вопросы:
    • Сколько раз требования приходили в очередь?
    • Сколько пришедших требований фактически присоединилось к очереди и сколько сразу заняли прибор?
    • Каково было максимальное значение длины очереди?
    • Каково было среднее число ожидающих требований?
    • Каково среднее время ожидания тех требований, которым пришлось ждать?
Специализированный язык, разработанный для моделирования систем массового обслуживания, должен иметь средства сбора такого рода статистической информации. GPSS обеспечивает такую возможность с помощью средства, называемого регистратором очереди. При использовании разработчиком регистратора очереди в тех точках модели, где число ресурсов ограничено, интерпретатор начинает автоматически собирать статистику, описывающую ожидание (если оно есть), возникающее в этих точках.

Регистратор очереди во многих отношениях подобен такому элементу моделирования, как прибор. Как и при использовании приборов, в модели может быть несколько различных регистраторов очередей.
Рис. 8.1. Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) с операндами А :

Блоки QUEUE (СТАТЬ В ОЧЕРЕДЬ) и DEPART (ПОКИНУТЬ ОЧЕРЕДЬ) с операндами А:

Операнд Значение Значение или результат по умолчанию
А Имя (символическое или числовое) очереди, к которой необходимо присоединиться или котороую надо покинуть Ошибка
Когда транзакт присоединяется к очереди, устанавливается факт привязки транзакта. В этом смысле информация, указывающая, что конкретный транзакт является элементом очереди, приписывается самому транзакту. Транзакт перестает быть элементом очереди только тогда, когда он переходит в блок DЕРАRТ соответствующей очереди. Когда это происходит, интерпретатор выполняет подпрограмму обработки блока, включающую следующее:
  1. Запись "счетчика текущего содержимого" соответствующей очереди уменьшается на единицу.
  2. Используя привязку к значению времени, интерпретатор определяет, является ли время, проведенное транзактом в очереди, нулевым. Если да, то такой транзакт по определению является транзактом с "нулевым пребыванием" в очереди; соответствующим образом изменяется счетчик "нулевых вхождений" (причина возникновения нулевых вхождений объяснена ниже).
  3. Ликвидируется привязка транзакта, ука- зывающая на принадлежность транзакта соответствующей очереди.
В конце моделирования интерпретатор автоматически распечатывает такие элементы статистики, как "счетчик входов", "максимальное содержимое", "среднее значение содержимого" и "счетчик текущего содержимого". Распечатывается также среднее время пребывания в очереди. Рассмотрим подробнее значение среднего времени пребывания в очереди. Интерпретатор может накапливать эти статистические данные двумя способами. Одним из них является расчет времени пребывания в момент входа каждого из транзактов в блок DЕРАRТ (ПОКИНУТЬ ОЧЕРЕДЬ). На самом деле интерпретатор поступает иначе. Вместо того, чтобы независимо обрабатывать блок DЕРАRТ, интерпретатор отслеживает полное время нахождения в очереди, накопленное до текущего времени, получаемое суммированием значений для всех прошедших и находящихся в очереди транзактов. Таким обрадом, в любой момент времени интерпретатором может быть рассчитано среднее время пребывания в очереди делением полного времени пребывания в очереди, накопленного до текущего времени, на значение счетчика входов.


Преимуществом такого подхода является учет тех транзактов, которые не покидамт очередь в момент обработки статистики. Недостатком же является тот факт, что это время будет несколько занижено, поскольку те транзакты, которые еще не вышли из очереди (если таковые имеются), должны оставаться в очереди еще некоторое время, а это никак не учитывается в расчете. Фактически интерпретатором рассчитываются два статистических параметра времени нахождения в очереди. Один из них является средним временем по всем входам в очередь. Обычно часть входов в очередь имеет нулевое время пребывания в очереди, т. е. им не приходится ждать. Поэтому интерпретатор также считает и статистику для среднего времени пребывания в очереди, исключая те входы, которые не вызвали ожидания. Это объясняет, для чего транзакту приписывается значение содержимого таймера при входе в блок QUEUE и для чего в блоке DЕРАRТ проверяется, не было ли время ожидания этого транзакта нулевым. Рассмотрим теперь пример записи пары блоков QUEUE и DЕРАRТ в модели. Рассмотрим снова рисунок примера последовательности ЗАНЯТЬ -ЗАДЕРЖАТЬ-ОСВОБОДИТЬ. Пример последовательности SЕIZЕ - АDVANСЕ -RЕLЕАSЕ
Ожидание может возникнуть ввиду занятости прибора с именем JОЕ. Предположим, что мы собираем статистику об этом ожидании. В сегмент модели регистратор очереди будет введен блоками QUEUЕ и DЕРАRТ (рис. 8.2). Регистратору очереди присвоено произвольное символическое имя JОЕQ.

Рис.8.2. Добавление сегмента регистратора очереди Как же работает показанный на рисунке сегмент модели? Положим, что транзакт вошел в этот сегмент в момент, когда прибор JOЕ не занят. Транзакт входит в блок QUEUE, при этом выполняется соответствующая подпрограмма. Модифицируется счетчик входов, содержимое очереди увеличивается на 1, транзакту приписывается время входа в очередь и имя очереди. Далее транзакт тут же пытается войти в блок SEIZЕ. Поскольку прибор JОЕ свободен, эта попытка оказывается успешной. Выполняется подпрограмма SEIZЕ, и состояние прибора JОЕ изменяется со "свободно" на "занято".


Далее транзакт немедленно попадает в блок DЕРАRТ. Выполняется соответствующая подпрограмма, счетчик содержимого очереди уменьшается на 1, и т. д. Продолжая продвижение, транзакт попадает в блок АDVANCE. Вычисляется время задержки в соответствии с распределением 16 ± 4, и транзакт временно прекращает продвижение. Все это происходит в какой-то определенный момент модельного времени. Это означает, что хотя транзакт входит в очередь JОЕQ, время его пребывания в этой очереди равно нулю, т. е. вхождения вызваны тем простым фактом, что блок SEIZЕ располагается между блоками QUEUE и DЕРАRТ. Все транзакты, попадающие на прибор, должны пройти через пару QUEUE - DЕРАRТ, даже если прибор свободен и его можно занять. Предположим теперь, что прибор JОЕ находится в занятом состоянии, и следующий транзакт входит в сегмент модели рис. 8.2. Проходя блок QUEUE, он модифицирует значения счетчика входов и счетчика текущего содержимого. Ему приписывается имя очереди и значение таймера в момент входа в очередь. Далее происходит отказ, поскольку прибор JОЕ занят. Транзакт вынужденно перестает продвигаться, оставаясь в блоке QUEUE. Позднее, когда транзакт, находящийся на приборе, покидает его, ожидающий транзакт опять попытается войти в блок SEIZE. На этот раз попытка окажется успешной. Двигаясь дальше, транзакт войдет в блок DЕРАRТ, уменьшая значение счетчика содержимого очереди на 1, и т. д. В описанной ситуации транзакт проходит блоки QUEUE и DEРАRТ в различные моменты модельного времени. Это означает, что имеет место "ненулевое вхождение" в очередь.

Содержание раздела