Язык GPSS - это язык декларативного типа, построенный по принципу объектно-ориентированного языка. Основными элементами этого языка являются транзакты и блоки, которые отображают соответственно динамические и статические объекты моделируемой системы.
Предназначение объектов системы различно. Выбор объектов в конкретной модели зависит от характеристик моделируемой системы. Каждый объект имеет некоторое число свойств, названых в GPSS стандартными числовыми атрибутами (СЧА) { В GPSS World используется термин «системные числовые атрибуты». При изложении материала авторы придерживаются термина «стандартные числовые атрибуты» в соответствии с известной работой Т. Дж. Шрайбера [10], полагая, что понятие «системная» применимо к глобальной информации, которая не связана с какими-то отдельными элементами. Практически всегда к системным атрибутам относится системное время. См. Е. Киндлер «Языки моделирования», 1985, стр. 18.}.
Часть СЧА доступна пользователю только для чтения, а на значение других он может влиять, используя соответствующие блоки.
|
|
Блоки и транзакты. Каждая GPSS-модель обязательно должна содержать такие объекты, как блоки и транзакты.
В GPSS концепция передачи управления от блока к блоку имеет специфические особенности. Последовательность блоков GPSS-модели показывает направления, в которых перемещаются элементы. Каждый такой элемент называется транзактом. Транзакты - это динамические элементы GPSS-модели.
Блоки языка GPSS представляют собой подпрограммы, написанные на макроассемблере или на языке Си, и содержат набор параметров (операндов) для обращения к ним. Как и во всех языках моделирования в GPSS существует внутренний механизм передачи управления, который реализуется в модельном времени, что дает возможность отобразить динамические процессы в реальных системах. Передача управления от блока к блоку в GPSS-программах реализуется с помощью движения транзактов в модельном времени. Обращение к подпрограммам блоков происходит через движение транзактов.
Содержательное значение транзактов определяет разработчик модели. Именно он устанавливает аналогию между транзактами и реальными динамическими элементами моделируемой системы. Такая аналогия никогда не указывается транслятору GPSS, она остается в воображении разработчика моделей. В табл. 4.1 приведены примеры аналогий между транзактами и элементами реальных систем.
Таблица 4.1
Система | Элементы систем, которые моделируются транзактами |
Магазин | Покупатель |
Автомобильное шоссе | Автомобиль |
Склад | Заявка |
С точки зрения программы - транзакт это структура данных, которая содержит такие поля: имя или номер транзакта; время появления транзакта; текущее модельное время; номер блока, в котором находится транзакт; номер блока, куда он продвигается; момент времени начала продвижения; приоритет транзакта; параметры транзакта: PI, P2,...
|
|
В языке GPSS все транзакты нумеруются по мере их появления в модели. Параметры транзактов отображают свойства моделируемого динамического объекта. Например, если моделируется движение автомобилей на участке дороги, то параметрами транзакта (автомобиля) в зависимости от целей моделирования могут быть скорость, тормозной путь, габариты и др.
Каждый транзакт занимает некоторые объем памяти ЭВМ. После того, как он закончит свое движение по блокам модели, его необходимо уничтожать для освобождения памяти, чтобы избежать ее переполнения. Поскольку транслятору не известно, сколько транзактов одновременно будет находиться в модели, то память под транзакты выделяется динамически.
Таким образом, при начале моделирования в GPSS-модели не существует ни одного транзакта. В процессе моделирования транзакты входят в модель в определенные моменты времени, соответствующие логике функционирования моделируемой системы. Таким же образом транзакты покидают модель в зависимости от специфики моделирования. В общем случае в модели существует несколько транзактов, но в каждый момент времени движется только один из них.
Если транзакт начал свое движение, он передвигается от блока к блоку по пути, указанному блок-схемой (логикой работы модели). В тот момент, когда транзакт входит в блок, вызывается соответствующая этому блоку подпрограмма. Далее транзакт (в общем случае) пытается войти в следующий блок. Его перемещение продолжается до тех пор, пока не выполнится одно из таких возможных условий:
1. Транзакт входит в блок, функцией которого является задержка транзакта на определенное время.
2. Транзакт входит в блок, функцией которого является удаление транзакта из модели.
3. В соответствии с логикой модели транзакт пытается войти в следующий блок, но блок не принимает этот транзакт. В этом случае транзакт остается в том блоке, в котором в данное время находится, но позже будет повторять попытки войти в следующий блок. Когда условия в модели изменятся, одна из таких попыток может быть успешной. После этого транзакт продолжит свое перемещение по модели. Подробнее это рассматривается в параграфе 4.22.
Если выполняется одно из указанных условий, транзакт остается на месте и в модели делается попытка перемещения другого транзакта.
Объекты типа «ресурсы». Аналогами обслуживающих устройств реальных систем в GPSS являются объекты типа «ресурсы». К объектам этого типа относятся устройства, многоканальные устройства {В языке GPSS используется термин STORAGE, дословный перевод которого - хранилище, память. На самом деле по функциональному назначению STORAGE определяет емкость (количество) однотипных устройств обслуживания, которые в одних случаях отображают обслуживание (кассиры, турникеты), а в других хранилища (емкость склада, память компьютера и т.п.). Поэтому, в тексте используется термин «многоканальное устройство», также как в [10].} и логические ключи. Как и в каждом объектно-ориентированном языке в GPSS каждый объект имеет свойства и методы, которые изменяют эти свойства. В GPSS свойства объектов называют стандартными числовыми атрибутами (СЧА).
Устройство (одноканальное устройство, прибор) представляет собой ресурс, который в любой момент времени может быть занят только одним транзактом. Интерпретатор автоматически вычисляет такие его СЧА, как общее время занятости устройства, число транзактов, который занимали устройство, коэффициент использования устройства, среднее время занятости устройства одним транзактом и т. п.
|
|
Многоканальные устройства (МКУ) (несколько параллельных одинаковых устройств) представляют собой объекты типа «ресурсы» для параллельной обработки. Они могут быть использованы несколькими транзактами одновременно. Пользователь определяет емкость каждого МКУ, который используется в модели, а интерпретатор ведет учет числа устройств, занятых в каждый момент времени. Интерпретатор также автоматически подсчитывает такие СЧА: число транзактов, которые вошли в МКУ; среднее число каналов, занятых одним транзактом; среднее время нахождения транзакта в устройстве и др.
Некоторые события в системе могут заблокировать или изменить движение транзактов. Например, кассир кинотеатра, идя на обед, ставит табличку «В другое окно», и все следующие клиенты на протяжении обеда обращаются в другую кассу. Для моделирования этих ситуаций введены логические ключи. Транзакт может устанавливать эти ключи в положение «Включено» или «Выключено». Через некоторое время состояние ключа может быть использовано другими транзактами для выбора одного из двух возможных путей движения или ожидания момента изменения состояния ключа. Состояние ключа может быть изменено любым транзактом.
Переменные. Арифметические переменные позволяют вычислять арифметические выражения, которые состоят из операций над СЧА объектов. В выражениях могут быть использованы функции (библиотечные или пользовательские). Булевы переменные позволяют пользователю одновременно проверять несколько условий, исходя из состояния объектов или значений СЧА.
Функции. Используя функции, пользователь может задавать непрерывную или дискретную функциональную зависимость между аргументом функции и ее значением. Функции в GPSS задаются табличным способом с помощью операторов описания функций.
Ячейки и матрицы сохраняемых величин. Ячейки сохраняемых величин и матрицы используются для хранения некоторой пользовательской числовой информации, запись в эти объекты выполняют транзакты. Записанную в этих объектах информацию может считывать любой транзакт. Таким образом, эти объекты являются глобальными и доступны из любой части модели.
|
|
Очереди. В любой системе движение потока транзактов может быть задержано из-за недоступности ресурсов (например, необходимые устройства или МКУ уже заняты). В этом случае задержанные транзакты становятся в очередь - еще один тип объектов GPSS. Учет этих очередей составляет одну из основных функций интерпретатора.
Пользователь может специально определить точки модели, в которых необходимо собирать статистику об очередях, то есть установить регистраторы очереди. Тогда интерпретатор будет автоматически собирать статистику об очередях (длину очереди, среднее время нахождения в очереди и т.п.). Вся эта информация является СЧА и доступна пользователю в процессе моделирования.
Интерпретатором автоматически поддерживается дисциплина обслуживания очереди FIFO («первым пришел - первым обслужился»), и пользователь может получить стандартную статистическую информацию только об этих очередях. Если у пользователя возникает необходимость организовать очередь из транзактов с другой дисциплиной обслуживания (например, LIFO), то для этого используются списки пользователей. Эти списки также помогают осуществлять синхронизацию движения разных транзактов по модели.
Таблицы. Объект «таблица» предназначен для сбора статистики о случайных величинах, заданных пользователем. Таблица состоит из частотных классов, в которые заносится число попаданий конкретной величины (некоторого СЧА). Для каждой таблицы вычисляется математическое ожидание и среднеквадратическое отклонение.