Язык моделирования GPSS (General Purpose System Simulation) разработан фирмой IBM в США и с 1962 года входит в стандартное математическое обеспечение машин серии IBM360/370. Язык GPSS получил наиболее широкое распространение по сравнению с другими языками моделирования. Он включен в институтские учебные курсы по моделированию систем у нас в стране иизучается в аналогичных курсах во многих колледжах и университетах США и других стран. В данном учебном пособии рассматривается одна из версий языка GPSS, реализованная в среде MS DOS для компьютеров класса IBM XT и выше.
Язык GPSS ориентирован на решение задач статистического моделирования на ЭВМ процессов с дискретными событиями. Такими процессами описывается прежде всего функционирование систем массового обслуживания произвольной структуры и сложности: систем обработки данных, систем транспорта и связи, технологических процессов, предприятий торговли, а также функционирование вычислительных систем и разного рода автоматизированных систем.
|
|
Язык основан на схеме транзактов (сообщений). Под транзактом понимается формальный объект, который "путешествует" по системе (перемещается от блока к блоку), встречая на пути всевозможные задержки, вызванные занятостью тех или иных единиц оборудования. Транзакты имеют прямую аналогию с заявками в системах массового обслуживания. В качестве транзакта может выступать программа обработки информации, телефонный вызов, покупатель в магазине, отказ системы при исследовании надежности и т.д. Каждый транзакт обладает совокупностью параметров (до 100), которые называются атрибутами транзакта. В процессе имитации атрибуты могут меняться в соответствии с логикой работы исследуемой системы.
Язык GPSS - язык интерпретируемого типа, он связан с пошаговым выполнением операторов, называемых блоками. Совокупности блоков описывают функционирование самой моделируемой системы либо содержат информацию о порядке моделирования (о продвижении транзактов). Каждое продвижение транзакта (сообщения) является событием в модели. Комплекс программ; планирующий выполнение событий, реализующий функционирование блоков моделей, регистрирующий статистическую информацию о прохождении транзактов, называется симулятором [4]. Симулятор регистрирует время наступления каждого из известных на данный момент событий и выполняет их с нарастающей временной последовательностью. Симулятор обеспечивает отсчет модельного времени в принятых единицах, называемых абсолютным условным временем. С каждым сообщением связано относительное условное время, отсчет которого начинается при входе сообщения в моделируемую систему и заканчивается при выходе сообщения из системы Основными функциями управляющих операторов/блоков языка являются:
|
|
1) создание и уничтожение транзактов,
2) изменение их атрибутов,
3) задержка транзактов,
4) изменение маршрутов транзактов в системе.
Основные группы объектов языка [5]:
1) объекты, имитирующие единицы оборудования системы (устройство, память и логические переключатели);
2) статистические объекты (очередь, таблица),
3) вычислительные объекты (ячейка, арифметическая и логические переменные),
4) списки,
5) прочие объекты.
В рассматриваемой версии языка реализованы следующие объекты языка: устройство, память, очередь, таблица, ячейка, арифметическая переменная. Дадим описание этих объектов.
Устройство имитирует единицу оборудования, которое может одновременно обрабатывать только один транзакт. Устройство аналогично обслуживающему прибору в СМО. Оно служит для моделирования таких средств обработки элементов потоков, как станки, устройства ЭВМ, каналы связи и т.п. На устройствах можно реализовать самые различные дисциплины обслуживания транзактов, включающие учет требуемого времени обслуживания, значения приоритетов, возможности прерывания и т.д.
Память (накопитель) имитирует единицу оборудования, в которой может обрабатываться (храниться) несколько транзактов одновременно. Память позволяет легко моделировать средства обработки с ограниченной емкостью (стоянки автотранспорта, портовые причалы, устройства памяти ЭВМ, складские помещения, конвейеры и т.п.).
Очередь - объект, связанный со сбором статистики о задержках, возникающих на пути прохождения транзакта. Чаще всего очередь помещают перед устройством либо памятью. Следует учитывать, что естественно образующиеся в процессе моделирования очереди транзактов обрабатываются симулятором автоматически, а описываемый объект языка служит лишь для обеспечения вывода на печать соответствующих статистических данных.
Таблица обеспечивает накопление в процессе моделирования статистики о каком-либо заданном случайном параметре модели. По окончании прогона модели эта статистика автоматически обрабатывается и выводится на печать, в частности, в виде таблицы относительных частот попадания значений случайного параметра (аргумента таблицы) в указанные частотные интервалы. Печатаются также среднее значение и среднее квадратичное отклонение аргумента.
Ячейки используются для записи, накопления и хранения численных значений различных входных и выходных параметров моделируемой системы. Эти значения могут быть использованы для организации счетчиков числа проходящих транзактов, для вывода значений варьируемых параметров модели, для временного хранения значений стандартных числовых атрибутом (СЧА). Значения ячеек всегда выводятся на печать,
Арифметическая переменная позволяет выполнить заданную последовательность арифметических операций над любыми СЧА модели для вычисления значения зависимого от них параметра.
Любая программа на GPSS связана с созданием транзактов, проведением их через последовательность блоков и уничтожением транзактов. При этом создание или генерация транзактов основывается на знании закономерностей информационных потоков, циркулирующих в моделируемой системе, а путь прохождения транзакта через блоки определяется спецификой работы оборудования исследуемой системы.
Вложить в рамки формальной схемы GPSS конкретное смысловое содержание, определяемое исследуемой системой - задача непростая: для этого необходимо знать как формализмы языка, так и логику работы моделируемой системы. Тем не менее программирование на GPSS существенно облегчает пользователю процесс моделирования, сокращая и время чистого программирования (по сравнению с универсальными алгоритмическими языками), и время отладки программы.
|
|
Синтаксис языка
Алфавит. Алфавит языка GPSS состоит из латинских букв от А до Z, цифр от 0 до 9 и следующих специальных символов: $, #, *, +, -, /, (,),', точка, запятая и пробел.
Идентификаторы. Они должны содержать от трех до пяти алфавитно-цифровых символов, причем первые три символа должны быть буквами. Идентификаторы используются для формирования имен объектов и блоков. Исключение составляют ячейки и атрибуты транзактов, которые могут обозначаться не только идентификаторами, но и просто числами.
Блоки/операторы. Каждый блок языка записывается в отдельной строке и имеет следующую структуру:
[метка] операция [операнды] [комментарии]. Каждое поле отделяется друг от друга пробелами, обязательным является только поле операции, остальные поля могут отсутствовать.
Метка является именем-идентификатором блока. Поле операндов может содержать от 1 до 7 подполей: А, В, С, D. Е, F, G, содержимое которых отделяется друг от друга запятой. Для пропуска одного из подполей поля операндов ставится просто запятая: А„С.
Комментарии, кроме поля комментариев, могут быть заданы отдельной строкой: любая строка, начинающаяся с символа "*", тоже будет комментарием.
Стандартные числовые атрибуты. В процессе моделирования язык GPSS автоматически регистрирует и корректирует определенную информацию различных объектов, используемых в модели. Доступ к этой информации осуществляется с помощью СЧА, которые однозначно определяют статус объектов модели. СЧА меняются в процессе имитации, изменить их может как симулятор, так и пользователь. Для указания конкретного объекта, по которому необходимо получить требуемую информацию, за именем СЧА должно следовать числовое или символьное имя этого объекта. Если используется символьное имя, то между СЧА и именем объекта ставится знак $.
|
|
В таблице приведены некоторые СЧА основных объектов языка. Здесь каждый СЧА обозначается либо <имя СЧА> i,либо
< имя СЧА>$ <имя объекта>,
где i обозначает номер объекта.
Таблица
Объект | СЧА | Назначение |
Блок | N$<имя объекта> ws<hmh объекта> | Число транзактов, вошедших в блок с указанным именем. Число транзактов, находящихся в указанном блоке. |
Генераторы случайных чисел | Rni | Случайное число в диапазоне 0-999. При использовании СЧА в качестве аргумента функции представляются действительными числами в диапазоне 0.- 0.999999 |
Транзакт | Pi PR | Значение параметра Значение приоритета |
Память | S$<имя объекта> R$<имя объекта> | Текущее содержимое памяти Свободный объем памяти |
Очередь | Q$<имя объекта> | Текущая длина очереди |
Переменные | V$<имя переменной> | Значение арифметической переменной |
Ячейки | Х$<имя ячейки> или Xi | Значение ячейки |
Функции | FN$<имя функции> | Значение функции |
Мнемокоды. В некоторых блоках языка требуется указывать состояние объектов, для этого используются следующие коды:
Состояние объекта | Мнемокод |
Память: Пуста Не пуста Заполнена Не заполнена Устройство: Свободно Занято | E NE F NF NU U |
Блоки языка GPSS