Основные концепции моделирования на gpss

Вид материалаДокументы
Принципы использования блоков QUЕUЕ и DЕРАRТ
QUEUE и DЕРАRТ
JОЕ. Предположим, что мы собираем статистику об этом ожидании. В сегмент модели регистратор очереди будет введен блоками QUEUЕ
JOЕ не занят. Транзакт входит в блок QUEUE
SEIZЕ, и состояние прибора JОЕ
JОЕ находится в занятом состоянии, и следующий транзакт входит в сегмент модели рис. 8.2. Проходя блок QUEUE
JОЕ занят. Транзакт вынужденно перестает продвигаться, оставаясь в блоке QUEUE
Подобный материал:
1   2   3   4   5   6   7   8   9   10   11

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


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

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

Специализированный язык, разработанный для моделирования систем массового обслуживания, должен иметь средства сбора такого рода статистической информации. GPSS обеспечивает такую возможность с помощью средства, называемого регистратором очереди. При использовании разработчиком регистратора очереди в тех точках модели, где число ресурсов ограничено, интерпретатор начинает автоматически собирать статистику, описывающую ожидание (если оно есть), возникающее в этих точках.

Регистратор очереди во многих отношениях подобен такому элементу моделирования, как прибор. Как и при использовании приборов, в модели может быть несколько различных регистраторов очередей. При использовании регистраторов очередей в точках, где возможно ожидание, собирается статистика, описывающая поведение очереди в соответствующей точке модели.

Регистраторы очередей различают заданием имен. Условия назначения имен те же, что и условия назначения имен приборов. Имена могут быть числовыми или символическими. Если они числовые, то числа должны быть целыми и положительными. Наибольший номер, используемый в модели, должен быть равным максимальному числу регистраторов в модели. (Как и при использовании приборов, максимальное число регистраторов очередей,допустимое при моделировании, зависит от объема используемой памяти.

Максимальное число регистраторов очередей равно (О, 150 и 300 для 64К, 128К и 25бК байт памяти соответственно). Если имя символическое, оно должно содержать от трех до пяти алфавитно-цифровых символов, причем первые три символа должны быть алфавитными.

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

Операнд А используют в блоках QUEUE и DЕРАRТ для указания имени соответствующей очереди. При входе транзакта в блок QUEUE выполняется обработка соответствующей подпрограммы, включающей следующие четыре действия:
  1. "Счетчик входов" для данной очереди увеличивается на единицу.
  2. Запись "счетчика текущего содержимого" для данной очереди также увеличивается на единицу.
  3. Транзакт "привязывается" к очереди указанием ее имени.
  4. Транзакт "привязывается" к очереди с запоминанием значения текущего модельного времени.


Рис. 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Т в различные моменты модельного времени. Это означает, что имеет место "ненулевое вхождение" в очередь.