Язык моделирования систем GPSS



Общие сведения о языке GPSS

Язык моделирования GPSS (General Purpose System Simulation) разработан фирмой IBM в США и с 1962 года входит в стандартное математическое обеспечение машин серии IBM 360/370. По сравнению с другими языками моделирования язык GPSS получил наиболее широкое распространение. Он включен в учебные курсы вузов по моделированию систем у нас в стране и изучается в аналогичных курсах во многих колледжах и университетах США и других стран. В учебном пособии рассматривается одна из версий языка GPSS, реализованная в среде MS DOS для компьютеров класса IBM XT и выше.

Язык GPSS ориентирован на решение задач статистического моделирования на ЭВМ процессов с дискретными событиями. Такими процессами описывается прежде всего функционирование систем массового обслуживания произвольной структуры и сложности: систем обработки данных, систем транспорта и связи, технологических процессов, а также функционирование вычислительных систем и разного рода автоматизированных систем.

Язык основан на схеме транзактов (сообщений). Под транзактом понимается формальный объект, который “путешествует” по системе (перемещается от блока к блоку), встречая на пути всевозможные задержки, вызванные занятостью тех или иных единиц оборудования. Транзакты имеют прямую аналогию с заявками в системах массового обслуживания. В качестве транзакта может выступать программа обработки информации, телефонный вызов, отказ системы при исследовании надежности и т.д. Каждый транзакт обладает совокупностью параметров (до100), которые называются атрибутами транзакта. В процессе имитации атрибуты могут меняться в соответствии с логикой работы исследуемой системы.

Язык GPSS - язык интерпретируемого типа, он связан с пошаговым выполнением операторов, называемых блоками. Совокупности блоков описывают функционирование самой моделируемой системы либо содержат информацию о порядке моделирования (о продвижении транзактов). Каждое продвижение транзакта (сообщения) является событием в модели. Комплекс программ, планирующий выполнение событий, реализующий функционирование блоков моделей, регистрирующий статистическую информацию о продолжении транзактов, называется симулятором. Симулятор регистрирует время наступления каждого из известных на данный момент событий и выполняет их с нарастающей временной последовательностью. Симулятор обеспечивает отсчет модельного времени в принятых единицах, называемых абсолютным условным временем. С каждым сообщением связано относительное условное время, отчет которого начинается при входе сообщения в моделируемую систему и заканчивается при выходе сообщения из системы. Оcновными функциями управляющих операторов/блоков языка являются:

1) создание и уничтожение транзактов,

2) изменение их атрибутов,

3) задержка транзактов,

4) изменение маршрутов транзактов в системе:

Основные группы объектов языка:

1) объекты, имитирующие единицы оборудования системы (устройство, память и логические переключатели);

2) статистические объекты (очередь, таблица),

3) вычислительные объекты (ячейка, арифметическая и логические переменные),

4) списки,

5) прочие объекты.

В рассматриваемой версии языка реализованы следующие объекты языка: устройство, память, очередь, таблица, ячейка, арифметическая переменная.

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

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

Очередь - объект, связанный со сбором статистики о задержках, возникающих на прохождения транзакта. Чаще всего очередь помещают перед устройством либо памятью. Следует учитывать, что естественно образующиеся в процессе моделирования очереди транзактов обрабатываются стимулятором автоматически, а описываемый объект языка служит лишь для обеспечения вывода на печать соответствующих статистических данных.

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

Ячейки используются для записи, накопления и хранения численных значений различных входных и выходных параметров моделируемой системы. Эти значения могут быть использованы для организации счетчиков числа проходящих транзактов, для вывода значений варьируемых параметров модели, для временного хранения значений стандартных числовых атрибутов (СЧА). Значения ячеек всегда выводятся на печать.

Арифметическая переменная позволяет выполнить заданную последовательность арифметических операций над любыми СЧА модели для вычисления значения зависимости от них параметра.

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

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

Синтаксис языка

Алфавит. Алфавит языка GPSS состоит из латинских букв от А до Z, цифр от 0 до 9 и следующих специальных символов: $ ,#, *, +, - , /, (,), , точка, запятая, пробел.

Индентификаторы. Они должны содержать от трех до пяти алфавитноцифровых символов, причем первые три символа должны быть буквы. Идентификаторы используются для формирования имен объектов и блоков. Исключение составляют ячейки и атрибуты транзактов, которые могут обозначаться не только идентификаторами, но и просто числами.

Блоки/операторы. Каждый блок языка записывается в отдельной строке и имеет следующую структуру:

[метка] операция [операнды] [комментарии]. Каждое поле отделяется друг от друга пробелами, обязательным является только поле операции, остальные поля могут отсутствовать.

Метка является именем-идентификатором блока. Поле операндов может содержать от 1до 7 подполей: А, В, С, D, E ,F, G, содержимое которых отделяется друг от друга запятой. Для пропуска одного из подполей поля операндов ставится просто запятая: А, , С.

Комментарии, кроме поля комментариев, могут быть заданы отдельной строкой: любая строка, начинающая с символа “*”, тоже будет комментарием.


Таблица 1 - Стандартные числовые атрибуты основных объектов языка GPSS

Объект Стандартный числовой атрибут Назначение
Блок N$<имя объекта> W$<имя объекта> Число транзактов, вошедших в блок с указанным именем Число транзактов, находящихся в указанном блоке
Генераторы случайных чисел Rni Случайное число в диапазоне 0 ч 999. При использовании СЧА в качестве аргумента функции представляются действительными числами в диапазоне 0.- 0.999999
Транзакт Pi PR Значение параметра Значение приоритета
Память S$<имя объекта> R$<имя объекта> Текущее содержимое памяти Свободный объем памяти
Очередь Q$ <имя объекта> Текущая длина очереди
Переменные V$ <имя переменной> Значение арифметической переменной
Ячейки X$ <имя ячейки> или Xi Значение ячейки
Функции FN$ <имя функции> Значение функции

Стандартные числовые атрибуты. В процессе моделирования язык GPSS автоматически регистрирует и корректирует определенную информацию различных объектов, используемых в модели. Доступ к этой информации осуществляется с помощью СЧА, которые однозначно определяют статус объектов модели. СЧА меняются в процессе имитации, изменить их может как симулятор, так и пользователь. Для указания конкретного объекта, по которому необходимо получить требуемую информацию, за именем СЧА должно следовать числовое имя этого объекта. Если используется символьное имя, то между СЧА и именем объекта ставится знак $.

В таблице 1 приведены некоторые СЧА основных объектов языка. Здесь каждый СЧА обозначается либо <имя СЧА> i, либо <имя СЧА> $ < имя объекта> где i обозначает номер объекта.

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


Таблица 2.

Состояние объекта Мнемокод
Память: пуста не пуста заполнена не заполнена Устройство: свободно занято E NE F NF NU U

Блоки языка GPSS

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

А - среднее время между поступлениями транзактов в систему (по умолчанию равно 1);

В - модификатор времени;

С - начальная задержка (время появления первого транзакта);

D - общее число транзактов, которое должно быть сгенерировано этим блоком (по умолчанию - неограниченное число транзактов);

E - приоритет транзакта, может принимать значения от 0 до 127. Приоритет возрастает в соответствии с номером (по умолчанию равен 0);

F - число параметров (атрибутов) транзакта (по умолчанию равно 12).

В поле В может быть модификатор двух типов: модификатор-интервал и модификатор-функция. Если задан модификатор-интервал (просто число), то для каждого временного интервала поступления транзактов длительность определяется как значение случайной величины, равномерно распределенной на интервале [А-В, А+В].

Например, блок GENERATE 10,5 будет генерировать транзакты через интервалы времени, длительность каждого из которых выбирается случайно в пределах от 5 до 15 . Необходимо помнить, что время в GPSS всегда целое. Поэтому в пределах от 5 до 15 минут могут выбираться только целые значения времени. Каждое из этих значений будет выбираться с одинаковой вероятностью. Таким образом, блок генерирует случайный поток транзактов, в котором время между тразактами равномерно распределено в диапазоне и имеет среднее значение А.

При использовании модификатора-функции интервал времени между транзактами определяется произведением содержимого полей А и В. Функция определяется специальными блоками языка, которые будут рассмотрены чуть позже.

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

Необходимо помнить, что смысл единицы времени в языке GPSS (секунда, минута, час, день и т.д.) закладывает пользователь, поэтому при написании программы необходимо все операнды, связанные со временем, привести к единому масштабу.

Блок уничтожения транзактов - TERMINATE. Обычно для простых программ это последний блок программы. Транзакты, попадающие в этот блок уничтожаются и больше не участвуют в процессе моделирования. Никаких других действий этот блок не выполняет, если единственный возможный операнд А в блоке не задан. Если же операнд А задан, то его значение вычитается из содержимого блока транзактов.

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

Например:

TERMINATE 1

START 100

Через программу модели пропускается 100 транзактов. Если ни в одном блоке TERMINATE не задан операнд А, то моделирование будет продолжаться, пока программа не будет снята.

Если в программе несколько блоков TERMINATE, то обычно операнд А задается только в одном блоке; чаще всего - в блоке, относящемся к имитатору интервала времени моделирования (таймеру).

GENERATE 480

TERMINATE 1

START 1

Таймер взаимодействует только с блоком START и никак не связан с содержательной стороной остальных фрагментов модели. Таймер служит для задания времени моделирования.

Задержка транзактов в блоках

Блок ADVANCE предназначен для задержки транзактов на определенные интервалы модельного времени.

Обязательный операнд А задает время задержки транзакта в блоке ADVANCE. Необязательный операнд В является модификатором-функцией или модификатором-интервалом. Значение операнда В используется здесь для модификации значения операнда А также, как в блоке GENERATE.

Любой транзакт входит в блок ADVANCE беспрепятственно. В нем транзакт задерживается на период модельного времени, величина которого определяется операндами А и В. После этого транзакт направляется к следующему блоку. Например, в блоке

ADVANCE 10

транзакт будет задержан на 10 единиц модельного времени.

В блоке

ADVANCE 10,Р1

транзакт будет задерживаться на случайное время, выбранное из диапазона 10 ± значение первого параметра транзакта (следует помнить, что значение первого параметра при этом не должно превышать 10, т.к. время не может быть отрицательным).

Работа с устройствами

Блок SEIZE - занять устройство. При входе транзакта в блок SEIZE выполняется операция занятия устройства, имя которого задается операндом А блока SEIZE. Занятие устройства транзактом выполняется следующим образом. Когда транзакт направляется из какого-нибудь блока в блок SEIZE, симулятор проверяет, свободно ли следующее устройство. Если оно не свободно, транзакт не может войти в этот блок. Он остается в предыдущем блоке до тех пор, пока устройство не освободится. Если же устройство свободно, то транзакт передвигается в блок SEIZE, занимает устройство и в тот же момент времени направляется к следующему за SEIZE блоку.

Блок RELEASE - освободить устройство. При входе транзакта в блок RELEASE происходит освобождение устройства, имя которого задается операндом А.

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

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


Дата добавления: 2018-09-23; просмотров: 840; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!