Моделирование систем

ВВЕДЕНИЕ
GPSS(General Purpose System Simulation) является языком для имитацион-
ного моделирования.
Любая система может быть описана при помощи определенного количества
стандартных элементов - объектов. Логические правила, лежащие в основе
системы,могут быть сведены к набору простых операций.Следовательно,язык
моделирования должен состоять из абстрактных объектов и из операций.
Категории и типы объектов GPSS.
------------------T--------------------------¬
¦ Категория ¦ Тип ¦
+-----------------+--------------------------+
¦ Динамическая ¦ Транзакты ¦
+-----------------+--------------------------+
¦ Операционная ¦ Блоки ¦
+-----------------+--------------------------+
¦ Аппаратная ¦ Приборы ¦
¦ ¦Многоканальные устройства ¦
¦ ¦ Ключи ¦
+-----------------+--------------------------+
¦ Вычислительная ¦ Переменные ¦
¦ ¦ (арифметические,булевые) ¦
¦ ¦ Функции ¦
+-----------------+--------------------------+
¦ Статистическая ¦ Очереди ¦
¦ ¦ Таблицы ¦
+-----------------+--------------------------+
¦ Запоминающая ¦Ячейки сохраняемых вел-ин ¦
¦ ¦Матрицы сохраняемых вел-ин¦
+-----------------+--------------------------+
¦ Группирующая ¦ Цепи (Списки) ¦
¦ ¦ Группы ¦
L-----------------+---------------------------
Транзакты являются объектами динамической категории. Это какие-то
составляющие исследуемых потоков, которые, двигаясь по фиксированной
структуре модели, состоящей из объектов других категорий, выполняют ряд
установленных операций.
Операционные объекты (блоки) задают логику функционирования модели и
определяют путь движения транзактов среди объектов аппаратной категории.
Объекты аппаратной категории это абстрактные элементы при помощи
которых может быть составлена модель реальной системы. Воздействуя на
эти объекты, транзакты могут изменить их состояние, либо влиять на дви-
жение других транзактов.
Вычислительная категория предназначена для описания ситуаций, когда
связь между компонентами моделируемой системы может быть просто и
компактно описана при помощи математических выражений.
С целью оценки характеристики моделируемой системы используются
регистраторы очереди и таблицы (Статистическая категория). Они не
влияют на работу модели, занимаясь сбором статистической информации.
Однако они могут косвенно влиять (своими параметрами) на работу модели.
Запоминающая категория предназначена для записи в ячейки или матрицы
ячеек интересующие нас значения.
GPSS позволяет, в случае необходимости, включать транзакты в списки и
группы. Также имеется возможность выполнять групповые операции над
транзактами из списков.
Для описания структур моделируемых систем широко используется их
графическое представление (блок-схемы). Они состоят из определенного
количества блоков, каждый из которых описывает определенный этап
работы модели согласно логике ее функционирования. Блоки соединяются
линиями, указывающими последовательность прохождения транзактов. Или же
они могут описывать события, происходящие в системе.
В каждый блок может войти определенное количество транзактов. Также
каждый блок имеет определенное количество выходов. Выбор пути движения
при выходе из блока происходит либо случайным образом, либо по
определенному алгоритму. Транзакт может находиться только внутри блока.
Действие, описываемое соответствующим блоком, выполняется при входе
транзакта в него. Блок может отказать транзакту во входе при каких-то
блокирующих условиях.В GPSS каждый блок имеет свой образ(конфигурацию).
Таким образом, блок-схемы унифицированы.
Транзакты в GPSS (IV) могут иметь до 100 параметров, а также им может
быть присвоен приоритет (всего 128 уровней приоритета). Каждый транзакт
имеет свой номер (этот параметр не доступен, также, как и время ввода в
систему). В процессе моделирования параметры и приоритеты могут быть
унифицированы, их значения могут быть использованы в объектах
вычислительной категории, а также в блоках, регулирующих маршрут
транзактов.
Для моделирования системы, ее нужно описать в терминах GPSS.
Программа, управляющая: движением транзактов, изменением состояний
объектов, сбором статистики называется симулятором . После запуска
программы на выполнение, симулятор генерирует транзакты, обеспечивает
их продвижение по блокам, выполняет соответствующие действия, указанные
в блоках. [Транзакты движутся от блока к блоку подобно потокам, которые
ими моделируются]. Любое изменение состояния системы называется
событием . Симулятор фиксирует время наступления событий, обрабатывая
их правильно во времени. Если время события наступило, то транзакт не
может быть продвинут, это действие будет выполнено при изменении
блокирующих условий.
Для поддерживания правильной последовательности событий во времени, в
моделирующей системе имеются системные часы, показывающие модельное
время. Показание часов в любой момент времени называется абсолютным
модельным временем . Абсолютное время не может быть изменено
пользователем до конца моделирования. Существует также и относительное
время , которое может быть изменено при помощи специальных карт.
GPSS работает только с целочисленными значениями. Соответственно
время может принимать только целые значения.
Единица времени в модели (секунда, час, год) выбирается самим
пользователем, симулятор же работает с условными единицами (модельным
временем). Симулятор не анализирует состояние системы в каждый интервал
времени, а изменяет абсолютное время, приравнивая его к времени
ближайшего события. Соответственно время моделирования не зависит от
временного интервала в реальной системе, а зависит от количества
обрабатываемых событий.
ЦЕПИ СОБЫТИЙ В GPSS
В GPSS транзакты могут состоять в нескольких цепях (цепи эквивалентны
спискам). Причем существует 5 типов цепей событий:
1. Цепь текущих событий
2. Цепь будущих событий
3. Цепь прерываний
4. Цепь парных транзактов
5. Цепь пользователя
В цепи текущих событий находятся транзакты с временем события, равном
модельному времени. Обработка транзактов в цепи текущих событий
производится по приоритету (чем выше приоритет, тем раньше он будет
обработан). В своем классе транзакты располагаются согласно времени
поступления (чем раньше пришел транзакт, тем ближе к началу очереди он
стоит в своем классе).
Начало -------------------------------¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ Конец
обработки -------------------------------¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ обработки
Высший Низший
приоритет приоритет
При обработке транзакта симулятор продвигает его вперед насколько это
возможно. При попадании в блок с блокирующими условиями или в блок с
задержкой, его движение прекращается и симулятор обрабатывает следующий
транзакт.
В цепь будущих событий помещаются транзакты, время движения которых
больше текущего модельного времени. Порядок нахождения транзактов в
этой цепи - по мере увеличения времени (приоритеты не учитываются). Из
цепи будущих событий транзакты переходят в цепь текущих событий, когда
наступает их время.
Цепь пользователя содержит транзакты, извлекаемые из модели самим
пользователем.
В цепи прерываний находятся транзакты, обработка которых была
прервана. Данные транзакты вводятся в модель после снятия прерывания.
Цепь парных транзактов содержит транзакты, дальнейшее движение
которых невозможно из-за отсутствия одного или нескольких транзактов (в
зависимости от используемого блока).
СИНТАКСИС ЯЗЫКА GPSS
Для написания программ на GPSS используются латинские буквы [AЎZ] и
цифры [0Ў9], а также специальные символы. Кириллицу допустимо
использовать только в комментариях. Программы записывают в определенном
фиксированном формате, содержащем 3 поля:
-===========T=============¬
¦ Поле ¦ Позиции ¦-
¦===========+=============¦-
¦ Метки ¦ 2Ў6 ¦-
+-----------+-------------+-
¦ Блоков ¦ 8Ў18 ¦-
+-----------+-------------+-
¦ Операндов ¦ 19Ў73 ¦-
L-----------+---------------
---------------------------
Поле операндов допускает запись до 8-ми операндов. Позиции операндов
обозначаются латинскими буквами:
A,B,C,D,E,F,G,H
¦ 19Ў73 ¦
Длина записи операнда не форматирована. Операнды разделяются между
собой запятыми (использование пробела для этих целей недопустимо). При
отсутствии какого-либо операнда и наличии информации после него, его
обозначают запятой.
A B C
GENERATE 100,,3
Если после отсутствующего операнда нет другой информации, то запятые не
ставятся.
A
GENERATE 100
GPSS использует, как правило, целые числа. Формат чисел может быть
полнословным (такое число хранится в 4-х байтах [ё(2^31-1)]) и
полусловный (2 байта [ё(2^15-1)]).
Любая информация в поле операндов после пробела в строке
воспринимается как комментарий. Для записи обширных комментариев
необходимо записать в первую позицию "*"; в этом случае, строка целиком
воспринимается как комментарий и игнорируется симулятором.
Поле: 1 7 8 18 19 73
-==T============T==T=================T=============T======¬
¦ ¦ ¦ ¦ ¦ ¦ ¦
Стандартные Числовые Атрибуты
В GPSS каждому объекту присуждается ряд атрибутов, описывающих его
состояние в данный момент времени. Они могут иметь логический либо
числовой характер. Атрибуты к которым имеет доступ пользователь
называются стандартными.
г===============T===================T============T====================¬
¦ Тип объекта ¦ Обозначение СЧА ¦ Диапазон ¦ Описание ¦
¦===============+===================+============+====================¦
¦ Транзакты ¦ Pj ¦ ё(2^31-1) ¦ Величина параметра ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ PR ¦ 0Ў127 ¦ Уровень приоритета ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ M1 ¦ Ў 2^31-1 ¦ Транзактное время ¦
¦ ¦ ¦ ¦ [C1-Tвх] ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ MPj ¦ Ў 2^31-1 ¦ Относительное ¦
¦ ¦ ¦ ¦ транзактное время ¦
¦ ¦ ¦ ¦ [C1-Pj] ¦
¦===============+===================+============+====================¦
¦ Блоки ¦ Nj ¦ Ў 2^24-1 ¦ Входной счетчик ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ Wj ¦ Ў 2^15-1 ¦ Текущее содержимое ¦
¦ ¦ ¦ ¦ блока ¦
¦===============+===================+============+====================¦
¦ Приборы ¦ Fj ¦ 0 либо 1 ¦ Состояния прибора ¦
¦ ¦ ¦ ¦ 0-свободен 1-занят ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ FCj ¦ Ў 2^31-1 ¦ Входной счетчик ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ FRj ¦ 0Ў999 ¦ Коэффициент ¦
¦ ¦ ¦ ¦ использования ¦
¦ ¦ ¦ ¦ прибора ¦
¦ ¦ ¦ ¦ (в долях от 1000) ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ FTj ¦ Ў 2^31-1 ¦ Среднее время ¦
¦ ¦ ¦ ¦ занятия прибора ¦
¦ ¦ ¦ ¦ одним транзактом ¦
¦ ¦ ¦ ¦ (tср. задержки) ¦
¦===============+===================+============+====================¦
¦Многоканальные ¦ Rj ¦ Ў 2^31-1 ¦ Количество ¦
¦ устройства ¦ ¦ ¦ свободных каналов ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ Sj ¦ Ў 2^31-1 ¦ Текущее содержимое ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ SAj ¦ Ў 2^31-1 ¦ Среднее содержимое ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ SCj ¦ Ў 2^31-1 ¦ Входной счетчик ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ SRj ¦ 0Ў999 ¦ Коэффициент ¦
¦ ¦ ¦ ¦ использования ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ SMj ¦ Ў 2^31-1 ¦ Максимальное ¦
¦ ¦ ¦ ¦ содержимое ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ STj ¦ Ў 2^31-1 ¦ Среднее время ¦
¦ ¦ ¦ ¦нахождения транзакта¦
¦ ¦ ¦ ¦ в МУ ¦
¦===============+===================+============+====================¦
¦ Переменные ¦ BVj ¦ 0 либо 1 ¦ Значение булевой ¦
¦ ¦ ¦ ¦ переменной ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ Vj ¦ ё(2^31-1) ¦ Значение арифм. ¦
¦ ¦ ¦ ¦ переменной ¦
¦===============+===================+============+====================¦
¦ Функции ¦ FNj ¦ ё(2^31-1) ¦ Значение функции ¦
¦===============+===================+============+====================¦
¦ Очереди ¦ Qj ¦ Ў 2^31-1 ¦ Текущая длина ¦
¦ ¦ ¦ ¦ очереди ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ QAj ¦ Ў 2^31-1 ¦ Ср. длина очереди ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ QCj ¦ Ў 2^31-1 ¦ Входной счетчик ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ QMj ¦ Ў 2^31-1 ¦Макс. длина очереди ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ QZj ¦ Ў 2^31-1 ¦ Счетчик нулевых ¦
¦ ¦ ¦ ¦ транзактов ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ QTj ¦ Ў 2^31-1 ¦Ср. время нахождения¦
¦ ¦ ¦ ¦транзактов в очереди¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ QXj ¦ Ў 2^31-1 ¦ Среднее время ¦
¦ ¦ ¦ ¦задержки транзактов ¦
¦ ¦ ¦ ¦в очереди, исключая ¦
¦ ¦ ¦ ¦ нулевые ¦
¦===============+===================+============+====================¦
¦ Таблицы ¦ TBj ¦ ё(2^31-1) ¦ Ср.значение ¦
¦ ¦ ¦ ¦ аргумента таблицы ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ TCj ¦ Ў 2^31-1 ¦ Входной счетчик ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ TDj ¦ Ў 2^31-1 ¦ Среднеквадратичное ¦
¦ ¦ ¦ ¦отклонение аргумента¦
¦===============+===================+============+====================¦
¦ Ячейки ¦ Xj ¦ ё(2^31-1) ¦Значение j-ой ячейки¦
¦ ¦ ¦ ¦ полнословного ф-та ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ XHj ¦ ё(2^15-1) ¦Значение j-ой ячейки¦
¦ ¦ ¦ ¦ полусловного ф-та ¦
¦===============+===================+============+====================¦
¦ Матрицы ячеек ¦ MX(a,b)j ¦ ё(2^31-1) ¦ Значение элемента ¦
¦ ¦ ¦ ¦ строки a,столбца b ¦
¦ ¦ ¦ ¦ полнословного ф-та ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ MH(a,b)j ¦ ё(2^15-1) ¦ Значение элемента ¦
¦ ¦ ¦ ¦ строки a,столбца b ¦
¦ ¦ ¦ ¦ полусловного ф-та ¦
¦===============+===================+============+====================¦
¦ Цепь ¦ CAj ¦ Ў 2^15-1 ¦ Среднее содержимое ¦
¦ пользователя ¦-------------------+------------+--------------------¦
¦ ¦ CCj ¦ Ў 2^31-1 ¦ Входной счетчик ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ CHj ¦ Ў 2^15-1 ¦Текущее количество ¦
¦ ¦ ¦ ¦ элементов в цепи ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ CMj ¦ Ў 2^15-1 ¦Максимальное кол-во ¦
¦ ¦ ¦ ¦ элементов в цепи ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ CTj ¦ Ў 2^31-1 ¦ Среднее время ¦
¦ ¦ ¦ ¦ нахождения одного ¦
¦ ¦ ¦ ¦ элемента в цепи ¦
¦===============+===================+============+====================¦
¦ Системные ¦ RN1ЎRN8 ¦ 0.0000001Ў ¦Генераторы случайных¦
¦ атрибуты ¦ ¦ 0.9999999 ¦ чисел ¦
¦ ¦ ¦ L-----+> в качестве арг-та ¦
¦ ¦ ¦ ¦ функции ¦
¦ ¦ ¦ 0Ў999 ---+> в других случаях ¦
¦ ¦-------------------+------------+--------------------¦
¦ ¦ C1 ¦ Ў 2^31-1 ¦Абсолютное системное¦
¦ ¦ ¦ ¦ время ¦
L===============¦===================¦============¦====================-
УПРАВЛЯЮЩИЕ КАРТЫ GPSS
Управляющие карты используются в GPSS для управления процессом
моделирования.
КАРТЫ:
1. SIMULATE (Не имеет операндов) - указывает симулятору на
необходимость прогона модели. В случае ее отсутствия, после
синтаксического анализа симулятор закончит моделирование.
2. START - указывает симулятору на то, что все данные введены и
необходимо начинать прогон модели. Поле A указывает симулятору величину
счетчика завершения. Моделирование заканчивается, когда эта величина
меньше либо равна нулю. Счетчик завершений уменьшается на величину,
помещенную в поле A блока TERMINATE.
TERMINATE 1
START 200
(когда 200 транзактов войдут в блок, моделирование закончится)
Поле B используют для блокировки выдачи статистики. Если в поле B
помещено NP (Not Print), статистика не выдается.
GENERATE 200
...
TERMINATE 1
START 100,NP
Поле C используют для получения промежуточной статистики. В нем
указывают интервал выдачи этой статистики. Содержимое поля C
уменьшается синхронно с уменьшением счетчика завершения. Когда
содержимое C равно нулю, выдается статистика, восстанавливается его
исходное значение и процесс продолжается. Желательно, чтобы содержимое
C было кратно содержимому поля A (N=i*K)
START 100,,20
Поле D указывает на необходимость выдачи статистики о цепи текущих
событий, цепи будущих событий, цепи прерываний и цепи пользователя. При
возникновении такой необходимости в D ставят 1, иначе D пусто.
A B C D
START N [NP] [K] [1]
3. RESET - В результате воздействия этой карты на модель стирается вся
накопленная статистика. Эта карта не влияет на ячейки и матрицы ячеек,
на генераторы случайных чисел, а также не выводит транзакты из модели.
Системное время остается неизменным. Возможно использование карты в
выборочном режиме, указывая в поле операндов объекты, атрибуты которых
не нужно менять.
Выборочное стирание:
RESET F1,Q10-Q15
4. CLEAR - При воздействии карты CLEAR сбрасывается вся статистика, из
модели выводятся все транзакты, системное время C1=0, а также
обнуляются ячейки и матрицы. Возможно использование карты в выборочном
режиме, указывая в поле операндов объекты, параметры которых необходимо
сохранить. (Карта не воздействует на генераторы случайных чисел)
CLEAR X10,X20-X25
5. JOB - Эту карту помещают между двумя моделями одного пользователя.
Она выполняет все функции карты CLEAR, а также стирает из памяти
описание модели. Позволяет одним запуском прогонять несколько моделей.
Устанавливает в начальные состояния генераторы случайных чисел.
6. END - указывает симулятору на конец набора введенных задач.
МЕТОДЫ АДРЕСАЦИИ В GPSS
Существуют 2 типа адресации в GPSS - прямая и косвенная.
Прямая адресация - обращение к конкретному прибору. Она возможна по
номеру объекта либо по его имени.
( SEIZE - занять прибор.)
SEIZE 1 - Занять прибор N1
Имя или метка может состоять из 5 символов, но не менее 3-х, которые
должны быть буквами. При обращении к СЧА имя разделяется от самого СЧА
при помощи знака "$" (в компьютерах типа IBM PC).
FN$EXPON
Для СЧА объектов с номером разделитель не ставится (FN1)
Косвенная адресация используется, когда требуется адресация некоторого
блока относительно другого блока с меткой. Также возможна адресация на
"самого себя".
TRANSFER ,*+3 -перевести тр-т из этого блока в 3-ий
Возможна адресация объектов GPSS при помощи параметров транзакта. В
этом случае вместо имени или номера объекта ставят Pj либо *j.
Адресация к параметрам транзакта :
Адресовать *n ¬ прямая адресация [n - число]
pn -
-------> p*n - косвенная адресация
значение параметра, номер которого хранится в n.
если p5=8
p8=40
то, p*5=40
ПЕРЕМЕННЫЕ В GPSS
В GPSS существует 3 типа переменных:
1.Арифметические
2.Арифметические с плавающей запятой
3.Булевые
Арифметические переменные представляют собой арифметическое
объединение значений различных СЧА, а также других арифметических
переменных. Описание переменной осуществляется с помощью специальной
карты следующего формата:
поле метки поле блоков поле операндов
VARIABLE арифметическое выражение
Пример:
25 VARIABLE Q9+3+FN*4
Переменная под номером 25 содержит следующее выражение:
Текущая длина 9-ой очереди + 3 + значение функции, адрес которой задан
в 4-м параметре транзакта.
Адресация арифметических переменных происходит согласно СЧА Vj по имени
или по номеру. V25 - имя 25-ой переменной, которую можно использовать в
программе (ей также можно присвоить имя и обращаться по нему). Возможна
и косвенная адресация.
В GPSS существуют 5 арифметических действий:
------T-------------------------------¬
¦ + ¦ Алгебраическое сложение ¦-
+-----+-------------------------------+-
¦ - ¦ Алгебраическое вычитание ¦-
+-----+-------------------------------+-
¦ * ¦ Алгебраическое умножение ¦-
+-----+-------------------------------+-
¦ / ¦ Алгебраическое деление ¦-
¦ ¦ [Дробная часть отбрасывается] ¦-
+-----+-------------------------------+-
¦ @ ¦ Деление по модулю ¦-
¦ ¦ [10 @ 7 = 3] ¦-
L-----+---------------------------------
---------------------------------------
До выполнения любой операции вычисляется, при необходимости, значение
каждого элемента либо считывается (если это СЧА) и берется его целая
часть. При описании переменных возможно использование 5 вложенных пар
скобок. Также возможно новое описание одной и той же переменной по ходу
моделирования.
Арифметические переменные с плавающей запятой
Переменные с плавающей запятой аналогичны арифметическим переменным
за исключением того, что перед выполнением операции, а также в ходе
вычисления выражения не отбрасывается дробная часть. (Дробная часть
отбрасывается только для конечного значения переменных). Промежуточные
результаты также не изменяются.
Описание переменных этого типа аналогично простым арифметическим
переменным, но в поле блоков записывают FVARIABLE. Адресация
производится также по СЧА Vj, поэтому номера этих двух типов переменных
не должны совпадать.
VAR1 VARIABLE 10*(11/3)
FVAR1 FVARIABLE 10*(11/3)
Тогда, V$VAR1 = 30
V$FVAR1 = 36
Деление по модулю для переменных с плавающей запятой невозможно .
Булевые переменные
Булевые переменные представляют собой логические выражения, состоящих
из различных СЧА (логических атрибутов), включая другие булевые
переменные. Описание производится аналогично арифметическим переменным,
но в поле блоков записывают BVARIABLE. При обработке булевых переменных
симулятор проверяет одно или несколько логических условий. (Результат
может быть 1 либо 0).
Допустимо использование 3-х типов операторов:
-----------------¬
¦ 1. Логических ¦-
¦ 2. Условных ¦-
¦ 3. Булевых ¦-
L------------------
------------------
Логические операторы
Логические операторы связаны с состоянием объектов GPSS. Возможно
использование следующих логических операторов: [n - номер(число)]
-==============T============T==============================¬
¦ Приборы ¦ FUn(Fn) ¦ 1 - прибор занят ¦
¦ ¦ ¦ 0 - прибор свободен ¦
¦ +------------+------------------------------+
¦ ¦ FNUn ¦ 1 - прибор свободен ¦
¦ ¦ ¦ 0 - прибор занят ¦
¦ +------------+------------------------------+
¦ ¦ FIn ¦ 1 - прибор обслуживает ¦
¦ ¦ ¦ прерывание ¦
¦ ¦ ¦ 0 - в противном случае ¦
+--------------+------------+------------------------------+
¦Многоканальные¦ SFn ¦ 1 - МУ заполнено ¦
¦ устройства ¦ ¦ (нет свободных каналов) ¦
¦ ¦ ¦ 0 - в противном случае ¦
¦ ¦ ¦ (есть хотя бы 1 канал) ¦
¦ +------------+------------------------------+
¦ ¦ SNFn ¦ - обратно SFn ¦
¦ +------------+------------------------------+
¦ ¦ SEn ¦ 1 - МУ пусто ¦
¦ ¦ ¦ 0 - МУ не пусто ¦
¦ +------------+------------------------------+
¦ ¦ SNEn ¦ - обратно SEn ¦
+--------------+------------+------------------------------+
¦ Ключи ¦ LRn ¦ 1 - логический ключ сброшен ¦
¦ ¦ ¦ 0 - лог. ключ не сброшен ¦
¦ +------------+------------------------------+
¦ ¦ LSn ¦ - обратно LRn ¦
L==============¦============¦==============================-
Пример:
LOGV BVARIABLE SF$MEM
LOGV=1 когда МУ SF$MEM заполнено, LOGV=0 - в противном случае
Условные операторы
Условные операторы используют для алгебраического сравнения и
записывают в одинарных кавычках:
'G' (Greater) - ">"
'L' (Less) - " "
'GE'(Greater or Equal) - ">="
'LE'(Less or Equal) - " 3
BV1=0 при V10<=3
Булевые операторы
Здесь возможны 2 типа операций: "+" - ИЛИ
"*" - И
Адресация булевых переменных производится по СЧА BVj; их номера (имена)
могут совпадать с соответствующими номерами арифметических переменных.
Пример:
-----------T----------¬
¦ ¦ ¦
Для того, чтобы занять один из 3-х ----------¬----------¬----------¬
приборов, надо узнать свободен ли ¦Прибор N1¦¦Прибор N2¦¦Прибор N3¦
хотя бы один из них. L----------L----------L----------
GATE FU1,ADR1
GATE FU2,ADR2
GATE FU3
Другой вариант:
10 BVARIABLE FNU1+FNU2+FNU3
GATE BV10
ФУНКЦИИ GPSS
Аргументом функции может служить любой СЧА, включительно другая
функция. В GPSS используют табулярный (табличный) метод задания
функций, а именно при помощи пар, состоящих из аргумента и значения
функции.
Существует 5 типов функций:
Обозначение
1. Числовая непрерывная C
2. Числовая дискретная D
3. Числовая табулярная L
4. Атрибутивная дискретная E
5. Атрибутивная табулярная M
Описание функции производят следующим образом:
Поле метки Поле блоков A B
Имя или номер FUNCTION аргумент ф-ии тип,число,
функции указывающее на
кол-во задаваемых
точек
Пример:
10 FUNCTION P3,D5
В строке, следующей за картой FUNCTION, начиная с первой позиции,
дается описание точек, состоящее из значения аргумента, разделенного
запятой от значения функции. Точки разделяются "/". Величина аргумента
должна возрастать по мере описания функции.
10 FUNCTION P3,D5
1,15/5,10/6,6/9,0/11,50
Аргумент и функция могут принимать целые и дробные значения. При
обращении к функции дробная часть отбрасывается:
FUNC FUNCTION RN1,C3
0,1/0.5,1.75/1,3.89
Обращение к функции производится по СЧА FNj либо FN$ .
Непрерывные функции
[В поле B ставится буква C]. Для непрерывных функций на интервалах их
описания между соответствующими точками производится линейная
интерполяция. Непрерывная функция дает возможность аппроксимировать
любые известные функции. При попадании аргумента за границы
описываемого интервала, экстраполяция не производится, функция
принимает значения, описываемые на соответствующей границе.
Числовые дискретные функции
[В поле B ставится буква D].Числовые дискретные функции предполагают
одно и то же значение функции FNj=Yi на интервале (X[i-1],Xi).
Интерполяция не производится, значение функции на интервале равно ее
значению на правой границе.
При X X(right) FNj=Y(right)
Числовая табулярная функция
[В поле B ставится буква L]. Если значение аргумента = 1,2,3...n(т.е.
натуральные числа), то такие функции имеет смысл записывать как
табличные (это экономит машинное время). При попадании аргумента вне
интервала [1,n], выдается сообщение об ошибке [OVERFLOW].
Пример: Описывается интервал [1,10]
Значения записываются парами:
1,2/2,3/3,2/4,1/5,5/6,5/7,5/8,5/9,5/10,5
Атрибутивные дискретные и табулярные функции
В атрибутивных функциях их значениями являются СЧА. Атрибутивные
дискретные функции схожи с числовыми дискретными, а табулярные
соответственно с числовыми табулярными.
Для атрибутивных дискретных функций в поле B ставится буква E.
Для атрибутивных табулярных функций в поле B ставится буква M.
СЧА1 СЧА2 СЧА3
-----T----T----T-----
СЧА1¦СЧА2¦СЧА3¦СЧА4
-----+----+----+---->
Аргумент
15 FUNCTION P1,E3
1,Q10/3,C1/10,Q3
Для атрибутивной табулярной функции:
¦
¦ сча1 сча2 сча3
¦ ¦ ¦ ¦
L----+----+----+--->
0 1 2 3
Экспоненциальное распределение:
¦ --
¦ --
¦ ---
¦ -----
¦ --------
L----------------->
0 1
БЛОКИ
Общие понятия
В результате входа транзакта в блок,могут иметь место след. действия:
1. Генерация или удаление транзакта.
Блоки GENERATE и SPLIT генерируют транзакты (В GENERATE транзакты
не входят).
Блоки TERMINATE и ASSEMBLE выводят транзакты из модели.
2. Изменение в значении атрибутов объектов.
Атрибуты могут быть СЧА либо логические операторы.
Возможно изменение атрибутов следующих объектов:
а)Транзакта, вошедшего в блок
б)Других транзактов
в)Других объектов GPSS
3. Задержка транзакта в течение заданного интервала времени.
Блоки могут иметь до 7-ми аргументов (операндов), записывающихся в
соответствующих полях поля операндов A,B,C,D,E,F.
Основные правила описания блоков
Если какое-либо поле пусто, оно не воспринимается симулятором либо
воспринимается по умолчанию. Если аргумент какого-либо поля записан без
"[]", его присутствие обязательно и наоборот.
В полях блоков возможны следующие записи:
СЧАj - СЧА j-го объекта. Например: S10
СЧА*n - косвенная адресация объектов S*10
К - константа
Pn - параметр
P*n - параметр (косвенное обращение)
Служебные
Слова BOTH,ALL и др.
[Иногда может быть записано имя блока]
Если поле помечено "*", то возможна косвенная адресация (в некоторых
случаях она недопустима). После * нужно указать номер параметра.
Карта блока:
¦2 6¦8 18¦
¦ [метка] ¦ БЛОК ¦ A,B,C,D,E,F,G
Блоки, оперирующие блоками
1.Блок CHANGE - позволяет менять блоки в процессе моделирования. Блок,
указанный в поле A заменяется на блок, указанный в поле B.
Формат:
поле блоков A B
CHANGE изменяемый замещающий
-- блок -¬ -- блок -¬
¦ К ¦ ¦ К ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
¦Символ. ¦ ¦Символ. ¦
¦ имя ¦ ¦ имя ¦
L- -- L- --
Пример:
5 ASSIGN 6,V5
...
30 SAVEVALUE 1,FN4
...
60 CHANGE 5,30
2.Блок EXECUTE позволяет выполнение операции любого другого блока без
изменения порядка прохождения транзакта. После этого транзакт переходит
в следующий за блоком EXECUTE блок.
Формат:
поле блоков A
EXECUTE N выполняемого
-- блока -¬
¦ К ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ *n ¦
¦ имя ¦
L- --
Генерация и уничтожение транзактов
1.Блок GENERATE является основным блоком для ввода транзактов в модель.
Ни в одном поле этого блока недопустима косвенная адресация.
Поле A - среднее время между генерацией смежных транзактов. [К,СЧАj].
Поле B - модификатор, который может быть 2-х типов: интервал либо
функция. [К,СЧАj] либо [FNj].
Модификатор интервал используют в случаях, когда время генерации
транзактов равномерно распределено в каком-то заданном интервале.
Например: интервал 10ё2 т.е. [8,12].
Модификатор функцию используют, когда время распределено нерав-
номерно и подчиняется какому-то закону. В этом случае для определения
конкретного значения времени, содержимое поля A умножается на содер-
жимое поля B. Функция должна быть предварительно описана (как правило,
она, в качестве аргумента, имеет ГСЧ). При обращении к функции,
вычисляется ее значение и умножается на аргумент в поле A.
Пример:
GENERATE 10,2
Другой случай:
GENERATE 10,FN$FUNC
Поле C - исходная задержка. Задает интервал времени, после которого
начнется генерация транзактов. [К,СЧАj].
Поле D - общее количество генерируемых транзактов. Если D пусто, то
генерируется бесконечное число транзактов. [К,СЧАj].
Поле E - приоритет вводимых транзактов. [К] К=0Ў127.
По умолчанию приоритет равен нулю.
Поле F - количество параметров вводимых транзактов. [К] К=0Ў100.
По умолчанию количество параметров равно 12.
Поле G - формат параметров. F - полнословный (32 бита)
По умолчанию [H]- полусловный (16 битов)
Пример:
GENERATE X10,FN2,FN$FUNC,10,100
Величина среднего времени записана в ячейке X10; начальная задержка
описывается функцией FN$FUNC; 10 транзактов с приоритетом 100.
2.Блок TERMINATE предназначен для вывода транзактов из модели.
Поле A указывает сколько единиц необходимо вычесть из счетчика
завершений при входе каждого транзакта.
Формат:
поле блоков A
TERMINATE -- -¬
¦ К ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ *n ¦
L- --
(В модели может быть любое количество блоков TERMINATE)
Управление временем моделирования
1.Блок ADVANCE используют для программной задержки транзактов. В поле A
указывается среднее время задержки, в поле B - модификатор.
Формат:
поле блоков A B
ADVANCE --ср.время-¬ -- модификатор -¬
¦ задержки ¦ ¦функция интервал¦
¦ ¦ ¦-- -¬ -- -¬¦
¦ K ¦ ¦¦ FNj ¦ ¦ К ¦¦
¦ СЧАj ¦ ¦¦ FN*n ¦ ¦ СЧАj ¦¦
¦ СЧА*n ¦ ¦L- -- ¦ СЧА*n¦¦
¦ *n ¦ ¦ ¦ *n ¦¦
¦ ¦ ¦ L- --¦
L- -- L- --
Смысл модификаторов тот же, что и в блоке GENERATE.
ADVANCE A,B ¦Bср.
1 ¦
Bср.= ---- ¦ -----
2B+1 ¦ -----
L----------->
A-B A A+B
Примечание: Константы не могут превышать К<=999999.
Данный блок может содержать (иметь в себе) более одного транзакта.
Приборы и связанные с ними блоки
Приборы используют для имитации устройств с 1-им каналом обслуживания.
Соответственно, в приборе может находится не более одного транзакта.
1.Блок SEIZE используют для моделирования занятия прибора транзактом. В
случае, если прибор занят, перед ним образуется очередь.
Формат:
поле блоков A
SEIZE номер прибора
-- -¬
¦ К ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ *n ¦
L- --
2.Блок RELEASE используют для моделирования освобождения прибора
транзактом, его занимающим. Освобождение осуществляется в момент входа
транзакта в блок. Данный блок никогда не задерживает транзакт на входе.
Формат:
поле блоков A
RELEASE номер прибора
-- -¬
¦ К ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ *n ¦
L- --
Прибор, указанный в поле A, должен быть занят именно тем транзактом,
который пытается его освободить, иначе возникнет ошибка выполнения.
3.Блок PREEMPT выполняет для занятого прибора аналогичную функцию блока
SEIZE для свободного прибора. Он вводит транзакт в прибор на место
предыдущего (прерывание обслуживания). Транзакт, прерывающий данный
прибор, не может одновременно прервать и другой.
Если прибор не занят и не прерван, то блок PREEMPT действует
аналогично блоку SEIZE. Если прибор прерван транзактом с таким же
приоритетом, то перед ним выстраивается очередь на прерывание
аналогичных транзактов.
Простейший формат:
поле блоков A
PREEMPT номер прибора
-- -¬
¦ К ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ *n ¦
L- --
Для данного блока существует ряд дополнительных функций:
Одной из важнейших функций блока PREEMPT является возможность
прерывания транзакта транзактом с более высоким приоритетом. Для
использования приоритетного режима, в поле B записывают PR. В этом
режиме транзакт с приоритетом n может быть прерван транзактом с
приоритетом, большим n. В поле C указывают номер блока, куда будет
направлен прерванный транзакт, который в дальнейшем будет претендовать
на ресурс прибора. Если в поле C ничего не указывать, то транзакт
отправляется в цепь прерываний. В поле D может быть записан СЧА
(константа), значение которого определяет номер параметра прерванного
транзакта, в котором, в последствие, будет записано оставшееся время,
которое транзакт должен был занимать соответствующий прибор. В поле E
может быть записано RE, означающее, что прерванный транзакт, в
последствие, не будет претендовать на данный прибор. Необходимо
отметить, что если поле B пусто, то все следующие поля игнорируются.
Формат:
поле блоков A -- B C D E -¬
PREEMPT номер прибора ¦-- -¬-- N -¬-- N -¬-- -¬¦
-- -¬ ¦¦режи즦блокদпараметрদрежи즦
¦ К ¦ ¦¦ PR ¦¦ K ¦¦ K ¦¦ RE ¦¦
¦ СЧАj ¦ ¦L- --¦ *n ¦¦ *n ¦L- --¦
¦ СЧА*n ¦ ¦ ¦ СЧАj¦¦ СЧАj ¦ ¦
¦ *n ¦ ¦ ¦СЧА*n¦¦ СЧА*n ¦ ¦
L- -- ¦ ¦метка¦L- -- ¦
¦ L- -- ¦
L- --
4.Блок RETURN . При помощи этого блока моделируется снятие прерывания с
прерванного прибора. Это действие должен осуществлять транзакт,
прервавший прибор (как и в блоке RELEASE).
Формат:
поле блоков A
RETURN номер прибора
-- -¬
¦ К ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ *n ¦
L- --
МНОГОКАНАЛЬНЫЕ УСТРОЙСТВА
(память)
Общие понятия
Объекты типа МУ обычно используют для имитации работы устройств с
параллельной обработкой (например памяти ЭВМ). Устройства этого типа
характеризуются объемом и могут обрабатывать параллельно определенное
количество транзактов, каждый из которых занимает какое-то количество
каналов. Устройства блокируют движение транзактов при отсутствии
свободных каналов (или при недостаточном их количестве).
Статистика для МУ:
- Среднее количество занятых каналов
- Коэффициент использования МУ
- Число входов в МУ
- Среднее время задержки транзакта
- Содержимое на время окончания моделирования
- Максимальное содержимое
[МУ имеют 7 СЧА и 4 логических оператора(из раздела булевые переменные)
Карты описания МУ
Емкость любого МУ должна быть задана до начала моделирования. При
отсутствии описания,емкость берется максимально допустимой(2^31-1 кан.)
Описание производится при помощи карты STORAGE. Существует 2 формата
описания:
1.Поле метки - номер или имя МУ
Поле блоков - STORAGE
Поле операндов - число, равное количеству каналов
Пример:
10 STORAGE 2
MEM STORAGE 100
2.Этот формат позволяет описать одной картой несколько МУ:
Поле метки - пусто
Поле блоков - STORAGE
Поле операндов - описание каждого из блоков, разделенное "/".
Основные правила описания МУ
Перед номером МУ пишут S. Например: S1,S100. Возможно описание
устройства с именем. Например: S$MEM. В случае задания диапазона МУ,
записывают граничные номера, разделенные дефисом. Например: S1-S10.
Емкость указывается после описания МУ.
Пример:
STORAGE S1,30/S$MEM,2/S10,1
Блоки:
1.Блок ENTER моделирует занятие одного или нескольких каналов при входе
в него транзакта. Обладает блокирующим свойством при недостаточном
количестве свободных каналов. В поле A задается имя или номер МУ. В
поле В - количество занимаемых каналов при входе одного транзакта (по
умолчанию занимается один канал).
Формат:
поле блоков A -- B -¬
ENTER номер МУ ¦кол-во занимаемых¦
-- -¬ ¦ каналов ¦
¦ К ¦ ¦ K ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
L- -- L- --
Пример:
ENTER 5
Занять один канал МУ N5
ENTER *6,10
Занять МУ, N которого в 6-ом параметре;занять 10 каналов
ENTER *1,P1
ENTER MEM,P11
ENTER 1,R1 - заполнить МУ
(R1 - количество свободных каналов)
2.Блок LEAVE используют для освобождения определенного количества
каналов. Поля A и B аналогичны блоку ENTER. (Никогда не отказывает
транзакту во входе).
Формат:
поле блоков A -- B -¬
LEAVE номер МУ ¦кол-во освобождаемых¦
-- -¬ ¦ каналов ¦
¦ К ¦ ¦ K ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
L- -- L- --
По умолчанию освобождается 1
канал
Если содержимое поля B больше текущего содержимого МУ, то возникает
ошибка. Текущее содержимое Sj МУ уменьшается при входе в блок LEAVE на
содержимое поля B, а Rj увеличивается на содержимое поля B.
Sj' = Sj - [B]
Rj' = Rj + [B]
Пример:
LEAVE 5 - освобождает 1 канал в МУ N5
LEAVE 1,S1 - очистить МУ
LEAVE *3,V1
Пример простейшей модели многопроцессорной системы с общей памятью:
-------¬
-------+Память+-------¬
¦ L---T--- ¦
-----+----¬-----+----¬-----+----¬
¦Процессор¦¦Процессор¦¦Процессор¦
L----------L----------L----------
SIMULATE
RND FUNCTION RN2,D2
0.333,1/0.667,2/1,3
MEM STORAGE 10
GENERATE 100,10
ASSIGN 1,FN$RND
ENTER MEM
SEIZE PROC
ADVANCE 270,30
RELEASE PROC
LEAVE MEM
TERMINATE 1
START 1000
END
Блоки статической категории
ОЧЕРЕДИ И БЛОКИ, СВЯЗАННЫЕ С НИМИ
Общие понятия:
Объекты типа очередь используют для сбора статистики об очередях,
появляющихся в моделируемой системе в результате различных условий
блокировки.
Статистика, выдаваемая симулятором:
- средняя длина очереди
- количество входов
- количество нулевых входов (без задержки)
- процент нулевых входов
- среднее время задержки в очереди одного транзакта
- среднее время задержки с учетом нулевых входов
- текущая и максимальная длина очереди
1.Блок QUEUE используют для регистрации входа транзакта в очередь. В
поле A указывают номер очереди, в поле B - количество единиц, на
которое увеличивается очередь при входе одного транзакта. (По умолчанию
очередь увеличивается на одну единицу).
Формат:
поле блоков A B
QUEUE номер очереди -- инкремент -¬
-- -¬ ¦ очереди ¦
¦ К ¦ ¦ K ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
L- -- L- --
Блок QUEUE никогда не отказывает транзакту во входе. Обычно за ним
следуют блоки с блокирующими свойствами (например SEIZE,PREEMPT,ENTER).
Транзакт может одновременно находится в нескольких очередях.
Пример:
QUEUE 3
QUEUE OCER1
QUEUE *1,P10
2.Блок DEPART уменьшает длину соответствующей очереди, указанной в поле
A, на количество единиц, указанное в поле B.
Формат:
поле блоков A B
DEPART номер очереди -- декремент -¬
-- -¬ ¦ очереди ¦
¦ К ¦ ¦ K ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
L- -- L- --
Содержимое поля B должно быть всегда меньше длины текущей очереди.
Пример:
DEPART 5
DEPART QUE
ТАБЛИЦЫ
Таблицы используют для получения функции распределения заданного
аргумента, которым может быть любой СЧА.
Основная статистика, представляемая таблицами:
- сумма значений аргумента, введенных в таблицу после последней карты
RESET или CLEAR
- количество входов в таблицу.
- среднее значение аргумента, вычисляемое как сумма всех значений
аргумента, деленная на количество входов.
- среднеквадратичное отклонение аргумента.
- среднее значение аргумента в последнем диапазоне, если таковые
имеются.
Строка интервала таблицы содержит:
1.верхнюю границу интервала
2.количество попаданий в интервал
3.процент попаданий в интервал
4.суммарное число, меньшее либо равное верхней границе
данного интервала
5.суммарное число значений, больших верхней границы данного
интервала
1.Карта TABLE используется для описания таблицы. Данная карта содержит
ряд полей:
Поле метки - номер или имя таблицы
Поле блоков - TABLE
Поле A - аргумент таблицы
Поле B - верхняя граница нижнего интервала
Поле C - ширина интервала
Поле D - количество интервалов
[Для режима RT используется также поле E, задающее интервал табуляции]
Таблицы могут работать в разностном режиме, который задается
помещением минуса сразу после аргумента. В этом случае в таблицу
вводится не абсолютное значение аргумента, а разность между текущим и
предыдущим значениями. При первом попадании, в таблицу ничего не
вводится, запоминается лишь значение аргумента.
Существует 3 специальных режима работы: IA , RT , QTABLE . Для их
задания , их помещают вместо аргумента.
1-ый 2-ой
интервал интервал >Overflow
---------+---------+---------+---------+---------+---------+---------
аргумент
Формат:
поле поле
метки блоков A B C D -- E -¬
N или TABLE аргумент или верхняя граница ширина кол-во ¦ интервал¦
имя режим нижнего интервала интервала инт-лов¦табуляции¦
таблицы -- -¬ [K] [K] [K] ¦ [K] ¦
¦ К ¦ ¦ для RT ¦
¦ СЧАj ¦ L- --
¦ СЧА*n ¦
¦ *n ¦
L- --
Пример:
XTIME TABLE M1,500,100,10
1.Блок TABULATE . Значение аргумента таблицы вводится в нее каждый раз,
когда транзакт входит в блок TABULATE. Номер или имя таблицы указывают
в поле A. В поле B указывается количество единиц, на которое будет
увеличен счетчик интервала попадания аргумента. (По умолчанию это 1).
Формат:
поле блоков A B
TABULATE номер или имя -- инкремент -¬
таблицы ¦ интервала ¦
-- -¬ ¦ ¦
¦ К ¦ ¦ K ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
L- -- L- --
Пример:
TABULATE XTIME
Специальные режимы работы таблиц
Режим IA (Inter arrival) используют для оценки распределения
промежутков времени между приходом транзактов в определенную точку
модели. В этом случае при попадании транзактов в блок TABULATE
фиксируется абсолютное модельное время и из него вычитается время
прихода предыдущего транзакта. Полученный интервал вводится в таблицу.
Пример:
1 TABLE IA,0,100,10
Режим RT (Rate) используют для оценки распределения интенсивности
поступления транзактов в определенную точку модели. Для его
использования, мнемонику RT помещают вместо аргумента, а блок TABULATE-
в интересующую нас точку. Режим требует заполнения поля E, указывающего
интервал времени измерения интенсивности.
Режим QTABLE позволяет оценить закон распределения времени нахождения
транзакта в очереди.
Обычными средствами это делается так: При помощи QTABLE:
5 TABLE MP2,0,5,40 5 QTABLE 8,0,5,40
MARK 2 QUEUE 8
QUEUE 8 SEIZE 3
SEIZE 3 DEPART 8
DEPART 8
TABULATE 5
ВСПОМОГАТЕЛЬНЫЕ СТАТИСТИЧЕСКИЕ БЛОКИ
1.Блок PRINT используют для вывода на печать информации об определенных
объектах GPSS (приборах,таблицах и т.д.).
Формат:
Поле A - нижняя граница диапазона объектов
Поле B - верхняя граница диапазона объектов
Поле C - мнемоника соответствующего класса объектов
Поле D - индикатор (указатель) страниц
Мнемоника объектов, помещаемая в поле C:
MOV* - цепь текущих событий
PUT* - цепь будущих событий
I* - цепь прерываний
MAT* - цепь синхронизации
C* - абсолютное и относительное время
B - общее количество входов и текущее содержимое блоков
N - количество входов в блоки
W - текущее содержимое блоков
S - статистика многоканальных устройств
Q - статистика очередей
F - статистика приборов
U - статистика цепей пользователя
T - статистика таблиц
X - содержимое полнословных ячеек
XH - содержимое полусловных ячеек
MX - содержимое матриц полнословных ячеек
MH - содержимое матриц полусловных ячеек
LG - состояние логических ключей
CHA - вывод на печать элементов цепи пользователя
G - вывод на печать текущих элементов группы
При использовании мнемоники со "*", поля A и B не заполняются.
Пример:
PRINT ,,C
PRINT ,,PUT
Если поля A и B не заполняются при использовании остальной мнемоники,
то выводится информация о всех объектах данного класса.
Пример:
PRINT ,,T
PRINT 1,10,S
При необходимости вывода информации об одном объекте, в полях A и B
записывается его номер.
Пример:
PRINT 6,6,F
Если в поле D находится любой символ, информация распечатывается
непрерывно , в противном случае (если D пусто), происходит смена
страницы при каждом выполнении блока PRINT.
Пример:
PRINT 6,6,F,1
Использование блока PRINT в программе:
GENERATE 100000
PRINT ,,F
PRINT ,,Q
TERMINATE 1
START 1,NP
END
2.Блок TRACE используют для включения индикатора трассировки.
3.Блок UNTRACE используют для выключения индикатора трассировки.
Эти блоки не имеют операндов. Их используют для отслеживания маршрута
движения транзакта на определенном участке модели. Данные блоки
используют только для отладки модели. После включения индикатора
трассировки, при входе в любой следующий блок, для каждого транзакта
распечатывается строка вида:
TRANS 1 FROM 1 TO 2 CLOCK 2 TERMINATIONS TO GO 005
номер транзакта от 1 к 2 время значение счетчика заверш.
БЛОКИ, ИЗМЕНЯЮЩИЕ МАРШРУТ ДВИЖЕНИЯ ТРАНЗАКТОВ
1.Блок TRANSFER является основным средством для изменения маршрута
транзакта. Возможна работа в 9-и режимах (указывающихся в поле A):
---------------T----------------¬
¦ Режим ¦ Поле A ¦-
+--------------+----------------+-
¦ Безусловный ¦ Пусто ¦-
¦Статистический¦.Число до 3 цифр¦-
¦ BOTH ¦ BOTH ¦-
¦ ALL ¦ ALL ¦-
¦ PICK ¦ PICK ¦-
¦ Функция ¦ FN ¦-
¦ Параметр ¦ P ¦-
¦ Подпрограмма ¦ SBR ¦-
¦ SIM ¦ SIM ¦-
L--------------+------------------
--------------------------------
Мнемоническое обозначение поля A задает режим выбора следующего
блока. Поля B и C указывают на возможные блоки перевода транзактов.
1. Безусловный режим . В нем входящий транзакт будет переведен к блоку,
указанному в поле B (поле C здесь не используется).
Пример:
TRANSFER ,NEXT (метка блока)
2. Статистический режим . Значение аргумента, следующего за точкой (до
3-х цифр), указывает на то, какая доля транзактов будет переведена
блоку, метка которого находится в поле C. Остальные транзакты перейдут
к блоку с меткой из поля B. Если поле B пусто, то его доля транзактов
переведется к следующему за блоком TRANSFER блоку. Возможно
использование косвенной адресации. Запись типа .*n указывает на то, что
вероятность находится в n-ом параметре.
В GPSS пропорция (доля транзактов) может быть задана при помощи
любого СЧА. При вычислении СЧА может быть 3 случая. Пусть X - значение
СЧА: 1) X =1000
1) Если значение вычисленного СЧА<=0, то транзакт передается блоку с
меткой в поле B.
2) Во 2-ом случае этим значением определяется доля передаваемых
транзактов.
3) При X>=1000 переход произойдет к блоку с меткой в поле C.
Пример:
TRANSFER .749,11,25
74.9% транзактов перейдут к блоку 25; 25.1% - к у y
TRANSFER .*1,,Метка
TRANSFER .XH10,BLOK1,BLOK3
3. Режим BOTH . В этом режиме каждый входящий в блок TRANSFER транзакт
пытается перейти к блоку с меткой в поле B. При неудачной попытке (вход
в блок заблокирован), осуществляется попытка перехода к блоку с меткой
в поле C. В случае неудачи, транзакт остается в блоке TRANSFER и
попытается выйти из него при очередной смене модельного времени (по
вышеуказанному алгоритму).
Пример:
TRANSFER BOTH,BLOK1,TERM
4. Режим ALL .Любой транзакт,вошедший в блок TRANSFER, вначале пытается
перейти к блоку (пусть он имеет номер N) с меткой в поле B. В случае
отказа,транзакт попытается последовательно перейти к блокам N+M, N+2*M,
до L, где M - шаг, который задается в поле D, L - номер последнего
блока, который задается в поле C.При этом:(L-N) кратно M; L>N; L=i*M+N.
В случае отказа по всем направлениям, транзакт остается в цепи текущих
событий до появления условий перехода. В этом режиме использование
косвенной адресации и СЧА в полях B,C,D недопустимо .
Пример:
TRANSFER ALL,60,120,10
TRANSFER ALL,NEXT1,NEXT2,5
5. Режим PICK . Из последовательности блоков с номерами N, N+1, N+2,...
N+i,M случайным образом выбирают блок для передачи ему транзакта. N -
номер блока из поля B, M - номер блока из поля C. Вероятность выбора
любого из этих блоков одинакова и равна 1/(M-N+1).
Примечание: Транзакт попытается перейти только к выбранному блоку. При
невозможности перехода, он останется в блоке TRANSFER до
разблокирования этого направления.
Пример:
TRANSFER PICK,30,19
6. Режим Функция . В этом режиме симулятор вычисляет значение функции,
номер которой указывается в поле B, и отбрасывает дробную часть. Для
определения номера следующего блока, полученное значение прибавляется к
аргументу поля C. При блокировке направления, транзакт остается в блоке
TRANSFER, ожидая условий для продвижения.
Пример:
TRANSFER FN,10,*5
[Номер следующего блока равен FN10 + P5]
7. Режим Параметр . В поле A записывают "P". Значение аргумента поля B
блока TRANSFER в данном случае интерпретируется как номер параметра
входящего транзакта. Для определения направления перехода, значение
этого параметра добавляется к аргументу в поле C.
Пример:
TRANSFER P,5,FN10
тогда, номер блока равен P5 + FN10
8. Режим Подпрограмма . В поле A записывают "SBR". Вошедший в блок
TRANSFER транзакт пытается перейти к блоку, указанному в поле B.
Значение поля C интерпретируется как номер параметра транзакта, в
который автоматически записывается номер блока TRANSFER. Данный режим
обычно используют при переходе к подпрограмме, начинающейся с блока с
меткой в поле B.
Пример:
TRANSFER SBR,NEXT,10
<----------------------¬
... ¦
¦
подпрограмма ¦
¦
TRANSFER P,10,1 ----
9. Режим SIM . В этом режиме дальнейшее движение транзакта прекращается
за счет включения индикатора задержки. Этот индикатор будет находится
во включенном состоянии до выполнения определенных условий.
2.Блок LOOP используют для организации циклов, т.е. для управления
многократным прохождением отрезка модели. В качестве счетчика циклов
может быть использован любой параметр транзакта. Данный блок никогда не
отказывает транзакту во входе. Симулятор вычисляет (устанавливает)
значение параметра транзакта, указанного в поле A, при входе в блок
LOOP. Это значение уменьшается на единицу и вновь записывается в
соответствующий параметр. При этом, транзакт передается блоку,
указанному в поле B, но только в том случае, если новое значение
параметра отлично от нуля; в противном случае, транзакт переходит к
следующему блоку.
Формат:
поле блоков A B
LOOP N параметра N блока
-- -¬ -- -¬
¦ К ¦ ¦ К ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
L- -- ¦ метка ¦
L- --
Пример:
LOOP 5,ADR1
Адрес перехода (метка)
3.Блок TEST указывает номер следующего блока для перевода транзактов в
случае выполнения или не выполнения каких-то условий. Блок TEST
анализирует алгебраические отношения между двумя СЧА, указанных в
соответствующих полях A и B. Отношение задается при помощи мнемоники,
записанной в дополнительном поле, начиная с 13-ой позиции.
'G' (Greater) - ">"
'L' (Less) - " "
'GE'(Greater or Equal) - ">="
'LE'(Less or Equal) - "<="
Существует два режима работы: условный вход и безусловный вход .
В режиме безусловного входа (если задается адрес в поле C) транзакт
никогда не задерживается на входе. Если заданное условие выполняется,
то он пытается перейти к следующему блоку; в противном случае,
переводится к блоку с меткой в поле C.
В режиме условного входа (поле C пусто) транзакт не может войти в блок
TEST, пока не выполнится заданное условие. Если условие выполняется, то
транзакт переходит к следующему за TEST блоку.
Формат:
поле блоков 13 A B C
TEST поз. 1-й СЧА 2-ой СЧА альтернативный адрес
-- -¬ -- -¬ -- -¬ -- -¬
¦ E ¦ ¦ К ¦ ¦ K ¦ ¦ K ¦
¦ NE ¦ ¦ СЧАj ¦ ¦ СЧАj ¦ ¦ СЧАj ¦
¦ L ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ G ¦ ¦ *n ¦ ¦ *n ¦ ¦ *n ¦
¦ LE ¦ L- -- L- -- ¦ метка ¦
¦ GE ¦ L- --
L- --
Пример:
TEST L C1,1000
4.Блок GATE как и блок TEST позволяет изменить направление движения
транзактов в зависимости от двенадцати логических атрибутов
(отношений). Мнемоника кода записывается с 13-ой позиции. Номер
соответствующего объекта задается в поле A. Данный блок, как и
предыдущий имеет два режима по входу (альтернативный адрес задается в
поле B).
Мнемоника:
Для приборов:
- U - прибор занят
- NU - прибор не занят
- I - прибор прерван
- NI - прибор не прерван
Для МУ:
- SE - МУ пусто (Sj=0)
- SNE - МУ не пусто
- SF - МУ заполнено (Rj=0)
- SNF - МУ не заполнено
Для ключей:
- LS - ключ установлен (включен)
- LN - ключ сброшен
Для транзактов:
- M - в блоке, заданном в поле A, находится
транзакт в состоянии синхронизации,
принадлежащий тому же семейству, что и
транзакт, входящий в блок GATE (или
пытающийся войти).
- NM - в блоке, указанном в поле B, нет тр-та
в состоянии синхронизации и из того же
семейства, что и транзакт, входящий в
GATE.
Предпочтительней использовать блок GATE, нежели TEST (выигрыш во
времени и экономия памяти).
Формат:
поле блоков 13-я A B
GATE позиция номер объекта альтернативный адрес
указатель -- -¬ -- -¬
¦ К ¦ ¦ K ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ *n ¦ ¦ *n ¦
¦ имя ¦ ¦ метка ¦
¦ метка ¦ L- --
L- --
Пример:
GATE NU 5
GATE SE MEM,VMP32
БЛОКИ, ИЗМЕНЯЮЩИЕ ПАРАМЕТРЫ ТРАНЗАКТОВ
1.Блок ASSIGN используется для присвоения числовых значений параметрам
транзактов. Номер параметра задается в поле A, в поле B помещается
новое численное значение, в поле C может быть указан номер модификатора
функции,в этом случае, новое значение параметра определяется умножением
содержимого поля B на соответствующую функцию,номер которой указывается
в поле C. Блок ASSIGN может работать в трех режимах: инкрементном,
декрементном и
замещения.
Инкрементный режим задается помещением плюса после аргумента в поле A.
Новое значение параметра будет вычислено путем добавления к старому
значению содержимого поля B.
Декрементный режим задается помещением "-" после аргумента в поле A.
Новое значение определяется вычитанием из текущего значения параметра
содержимого поля B.
Режим замещения . После аргумента в поле A ничего не стоит. Новое
значение замещает текущее содержимое параметра транзакта.
Формат:
поле блоков A B C
ASSIGN номер новое значение -- -¬
параметра параметра ¦модификатор¦
-- -¬-- -¬-- -¬ ¦ ¦
¦ K ¦¦ + ¦¦ K ¦ ¦ K ¦
¦ *n ¦¦ - ¦¦ *n ¦ ¦ *n ¦
¦ СЧАj ¦L- --¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦
L- -- L- -- L- --
Пример:
ASSIGN 5,10
ASSIGN *5+,X15
2.Блок INDEX используют для изменения первого параметра входящего
транзакта. Значение поля B добавляется к параметру,указанному в поле A,
и присуждается первому параметру.
Формат:
поле блоков A B
INDEX номер -- -¬
параметра ¦инкремент¦
-- -¬ ¦ ¦
¦ K ¦ ¦ K ¦
¦ *n ¦ ¦ *n ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
L- -- L- --
Если не указывать инкремент, то он трактуется как 0.
Пример:
INDEX 1,1 (P1=P1+1)
INDEX 3,FN4 (P1=P3+FN4)
3.Блок MARK . Любой транзакт имеет два СЧА, связанных с интервалом
прохождения участка модели. Это M1 - транзактное время (M1=C1-Tвхода).
MPn - параметрическое транзактное время
MPn=C1-Pn ( M1<>MP1 )
При входе в блок MARK параметру, указанному в поле A, присуждается
значение модельного времени. Если поле A пусто, это значение
присуждается внутреннему параметру транзакта для отметки времени.
Формат:
поле блоков A
MARK -- номер -¬
¦параметра¦
¦ K ¦
¦ *n ¦
¦ СЧАj ¦
¦ СЧА*n ¦
L- --
Пример:
MARK 10
MARK *5
4.Блок COUNT позволяет пользователю подсчитать количество объектов,
удовлетворяющих заданному условию.
Поле A задает номер параметра транзакта, в котором организуется счетчик
объектов, удовлетворяющих заданному условию.
Поля B и C задают интервал просмотра объектов (B - нижняя граница, C -
верхняя граница).
Поле D используется с условными операторами:E,NE,GE,LE,L,G записанными,
начиная с 14-ой позиции операционного поля. Для этого случая, значение
СЧА, записанного в поле D, сравнивается с СЧА, указанном в поле E. При
использовании логических указателей, поля D и E не заполняются. В поле
E указывается один из СЧА, просматриваемых объектов, который,
впоследствии, сравнивается с аргументом в поле D.
В поле E записывают только мнемоническое обозначение СЧА, поскольку
интервал просмотра задается полями B и C. Начиная с 14-ой позиции,
указывается условие подсчета (либо условный оператор, либо логический
указатель [за исключением M и NM как и в блоке GATE]).
Формат:
поле блоков 14-я A B C
COUNT позиция номер нижняя граница верхняя граница
условие параметра интервала интервала
-- -¬ -- -¬ -- -¬
¦ K ¦ ¦ K ¦ ¦ K ¦
¦ *n ¦ ¦ *n ¦ ¦ *n ¦
¦ СЧАj ¦ ¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦
L- -- L- -- L- --
-- D E -¬
¦величина, сравниваемая с атрибут ¦
¦ атрибутом объекта ¦
¦ -- -¬ -- -¬¦
¦ ¦ K ¦ ¦ K ¦¦
¦ ¦ *n ¦ ¦ *n ¦¦
¦ ¦ СЧАj ¦ ¦ СЧАj ¦¦
¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦¦
¦ L- -- L- --¦
L- --
Пример:
COUNT LE 1,1,5,X10,FC
COUNT SF 5,10,30
COUNT NU 10,X1,X2
5.Блок SELECT работает аналогично блоку COUNT, за исключением того, что
вместо подсчета объектов, удовлетворяющих заданному условию, этот блок
выбирает первый из них, записывая его номер в параметр, указанный в
поле A. Поля AЎE аналогичны соответствующим полям блока COUNT. Поле F
задает альтернативный выход в случае, если в диапазоне просмотра нет
объектов, удовлетворяющих соответствующему условию. Если поле F пусто,
то транзакт всегда переходит к следующему блоку. В отличие от блока
COUNT блок SELECT может работать в режимах MIN и MAX. В этом случае в
блоке SELECT выбираются объекты (или один объект), атрибуты которого
минимальны (максимальны). Поля F и D в этом режиме пустые.
Формат:
поле блоков 15 поз. A B C D E
SELECT условие N параметра нижняя верхняя срав-мая атрибут
граница граница величина объекта
-- F -¬
¦альтернативный¦
¦ выход ¦
¦ K ¦
¦ *n ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ метка ¦
L- --
Пример:
SELECT MAX 1,5,10,,FR
SELECT GE 10,10,20,X5,Q
SELECT NU 1,1,10,,,MET10
Блоки PRIORITY и BUFFER
1.Блок PRIORITY предназначен для присуждения транзакту необходимого
приоритета. Приоритет влияет на положение транзакта в цепи текущих
событий и, соответственно, на очередность его обработки, а также на его
положение в очередях. [Исходный приоритет устанавливается в блоке
GENERATE в поле E]. В блоке PRIORITY требуемый приоритет записывают в
поле A. Если поле B пусто, симулятор изменит приоритет транзакта и
продвинет его дальше до останова.Если в поле B стоит мнемоника BUFFER ,
то сразу после изменения приоритета, симулятор изменит цепь текущих
событий в соответствие с новым приоритетом и начнет заново обрабатывать
ее.
Формат:
поле блоков A -- B -¬
PRIORITY необходимый ¦ индикатор ¦
приоритет ¦пересмотра ЦТС¦
-- -¬ ¦ ¦
¦ K ¦ ¦ BUFFER ¦
¦ *n ¦ L- --
¦ СЧАj ¦
¦ СЧА*n ¦
L- --
2.Блок BUFFER используют для немедленного прекращения обработки ЦТС и
для инициализации новой обработки.
Формат:
поле блоков
BUFFER
СЕМЕЙСТВА ТРАНЗАКТОВ И СООТВЕТСТВУЮЩИЕ БЛОКИ
1.Блок SPLIT используют для создания определенного количества копий
входящего в него транзакта. В отличие от введенных при помощи блока
GENERATE транзактов, копии, создаваемые блоком SPLIT, образуют
семейство с транзактом-оригиналом. Необходимое количество копий
указывают в поле A; если A=0, то блок SPLIT не выполняет никаких
действий, пропуская транзакт дальше. Копии создаются в момент входа
транзакта-родителя в блок SPLIT, затем транзакт-родитель пытается
перейти к следующему блоку, указанному в поле B, причем значение
аргумента поля B может вычисляться отдельно для каждой копии. В поле C
может быть указан номер параметра, используемого для присуждения каждой
копии номера в возрастающем порядке и для записи этого номера в
соответствующий параметр. Поле D используют для задания количества
параметров каждой копии. В случае, если D пусто, это количество
совпадает с числом параметров транзакта-родителя, а также сохраняются
их значения.
При помощи внутренних атрибутов организуется список членов семейства.
Симулятор отслеживает состав семейства, исключая из него удаленные из
модели транзакты. Одновременно существует большое количество семейств,
так, каждый введенный блоком GENERATE транзакт считается семейством.
Формат:
поле блоков A B -- C -¬-- D -¬
SPLIT количество блок для перевода ¦ номе𠦦кол-во пар-ов¦
копий копий ¦ пар-рদ для копий ¦
-- -¬ -- -¬ ¦ ¦¦ ¦
¦ K ¦ ¦ K ¦ ¦ K ¦¦ K ¦
¦ *n ¦ ¦ *n ¦ L- --¦ *n ¦
¦ СЧАj ¦ ¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦
L- -- L- -- L- --
Пример:
SPLIT 3,MET1,7
SPLIT 4,FN$ADR,5,10
2.Блок ASSEMBLE объединяет заданное количество транзактов одного
семейства. Транзакты никогда не задерживаются на входе данного блока.
После прибытия необходимого количества транзактов одного семейства
(количество указывают в поле A), из блока выходит только первый
прибывший транзакт, остальные выводятся из модели.
Особенности:
1) Для каждого семейства в одном блоке ASSEMBLE выполняется только одна
операция объединения.
2) В одном блоке может параллельно выполняться объединение для
транзактов различных семейств.
3) Для любого семейства объединение может осуществляться параллельно в
различных блоках ASSEMBLE.
4) После окончания операции объединения для данного семейства, может
начаться новое объединение для того же семейства.
Формат:
поле блоков A
ASSEMBLE количество
транзактов
-- -¬
¦ K ¦
¦ *n ¦
¦ СЧАj ¦
¦ СЧА*n ¦
L- --
Пример:
ASSEMBLE 12
ASSEMBLE P3
3.Блок GATHER аналогичен по своему действию блоку ASSEMBLE в смысле
обработки семейств транзактов и отличается от него только тем, что не
выводит транзакты из модели, а пропускает их к следующему блоку по
прибытию последнего транзакта.
Формат:
поле блоков A
GATHER количество
транзактов
-- -¬
¦ K ¦
¦ *n ¦
¦ СЧАj ¦
¦ СЧА*n ¦
L- --
4.Блок MATCH используют для синхронизации движения двух транзактов
одного семейства без их изъятия из модели. Блок MATCH не объединяет
транзакты, позволяя им двигаться по своему (одному) маршруту.
Синхронизация осуществляется путем выбора пар транзактов одного
семейства и их задержки до тех пор, пока оба этих транзакта не
достигнут заданных точек блок-схемы. Транзакты никогда не задерживаются
на входе данного блока и переходят к следующему блоку при выполнении
условий синхронизации. В поле A указывают номер другого блока MATCH,
называемого сопряженным (блоки указывают друг на друга). Если в такой
блок попадает транзакт, являющийся единственным членом семейства, то
генерируется ошибка. Возможно использование блока MATCH сопряженным с
самим собой. В этом случае его действие эквивалентно блоку GATHER с
операндом в поле A: MATA: MATCH META.
При входе транзакта в блок MATCH, симулятор просматривает сопряженный
ему блок MATCH, затем просматривает семейство данного транзакта, и при
наличии в сопряженном блоке транзакта этого же семейства, позволяет им
двигаться дальше.
Формат:
поле блоков A
MATCH сопряженный
блок
-- -¬
¦ K ¦
¦ *n ¦
¦ СЧАj ¦
¦ СЧА*n ¦
¦ метка ¦
L- --
ЦЕПЬ ПОЛЬЗОВАТЕЛЯ
Цепь пользователя позволяет извлекать транзакты из модели на некоторое
время и возвращать их обратно при необходимости. Это позволяет
уменьшить цепь текущих событий и,соответственно, уменьшить время счета.
В модели может быть несколько цепей пользователя.
Логика функционирования:
--------------------¬да ---------------¬
¦есть ли блокировка?+--¬ ¦ покинуть ЦТС,¦маршрут движения в ЦП
L---------T---------- L>¦поместить тр-т+----¬ начало ЦП
нет¦ +----------------+
¦ блокирующий блок ¦ ¦ маршрут +----------------+
L---------T---------- ¦извлеченного транзакта +----------------+
----------+---------¬ L------------------------+----------------+
¦блоки,имитирующие ¦ +----------------+
¦ограниченный ресурс¦ +----------------+
L---------T---------- +----------------+
----------+---------¬ +----------------+
¦ блок, устраняющий ¦ +----------------+
¦ блокировку ¦ +----------------+
L---------T---------- -->+----------------+
----------+---------¬ ¦ +----------------+
¦извлечение тр-та из¦ ссылка на соотв. ЦП ¦ L-----------------
¦ ЦП для занятия +------------------------ конец ЦП
¦ освободившихся ¦
¦ ресурсов ¦
L--------------------
1.Блок LINK предназначен для вывода транзакта из цепи текущих событий и
помещения их в цепь пользователя.Поле A задает номер цепи пользователя,
поле B указывает алгоритм систематизации цепи.
FIFO (First In - First Out) - Транзакт помещается в конец ЦП.
Извлечение тр-та происходит из начала.
LIFO (Last In - First Out) - Транзакт помещается в начало ЦП.
Pj - место транзакта в цепи определяется значением параметра Pj. По
мере уменьшения j, транзакт помещается ближе к началу цепи. В
случае равенства j-го параметра у двух транзактов, они
помещаются в ЦП согласно времени прихода.
Поле C- альтернативный выход.
Если индикатор связи цепи включен, то транзакт помещается в ЦП. В
противном случае, он отправляется по адресу, указанному в поле C.
Формат:
поле блоков A B -- C -¬
LINK номер алгоритм ¦альтернативный¦
ЦП систематизации ¦ выход ¦
-- -¬ -- -¬ ¦ ¦
¦ K ¦ ¦ FIFO ¦ ¦ K ¦
¦ *n ¦ ¦ LIFO ¦ ¦ *n ¦
¦ СЧАj ¦ ¦ Pj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ L- -- ¦ СЧА*n ¦
L- -- ¦ метка ¦
L- --
Пример:
LINK *1,LIFO
Поместить транзакт в цепь с номером в первом параметре в начало ЦП.
LINK ABC,P10,ADR1
2.Блок UNLINK выполняет обратную блоку LINK операцию. Он предназначен
для вывода транзакта из цепи пользователя. Поле A задает номер цепи
пользователя. Поле B указывает на блок, которому будут переданы
транзакты, выводимые из цепи пользователя. В поле C организован счетчик
выводимых транзактов. Запись ALL в поле C означает вывод всех
транзактов. Поле D может содержать следующие аргументы:
1.Номер параметра транзакта цепи пользователя.
В случае, если поле T пусто, значение соответствующего параметра,
входящего в блок UNLINK транзакта,будет сравниваться с соответствующими
параметрами транзактов из цепи. Если поле E не пусто,то соответствующие
параметры транзактов цепи будут сравниваться со значением аргумента
поля E (сравнение не равенство). Транзакты, для которых выполняется
условие сравнения, будут извлечены из цепи пользователя и отправлены по
адресу из поля B.
2.Слово BACK.
Из цепи пользователя будет выведено количество транзактов, указанное
в поле C, начиная с конца цепи пользователя. Поле E должно быть пустым.
3.Булевая переменная BVj.
Для каждого транзакта вычисляется булевая переменная. Из цепи
пользователя будут выведены только те транзакты, для которых BVj=1.
Если ЦП пуста (CHj=0) или нет транзактов, удовлетворяющих данным
условиям, то входящий в UNLINK транзакт попытается перейти по адресу,
указанному в поле F. Если поле F пусто - к следующему блоку.
Поле E содержит аргумент, значение которого сравнивается с параметром
транзакта(ов) ЦП из поля B. Поле F задает альтернативный адрес, по
которому транзакт переходит в случае не выполнения определенных
условий. Можно выделить 6 случаев заполнения полей:
1. A,B,C - заполнены ; D,E,F - пусты.
2. A,B,C,F - заполнены ; D,E - пусты.
3. A,B,C,D - заполнены ; E,F - пусты.
4. A,B,C,D,F - заполнены ; E - пусто.
5. A,B,C,D,E - заполнены ; F - пусто.
6. A,B,C,D,E,F - заполнены.
Формат:
поле блоков A B C -- D -¬-- E -¬-- F -¬
UNLINK номер N блока счетчик вывод.¦алгорит즦аргумент ¦¦альт.¦
ЦП приемника транзактов ¦ выбора ¦¦сравнения¦¦адрес¦
-- -¬ -- -¬ -- -¬ ¦ ¦¦ ¦¦ ¦
¦ K ¦ ¦ K ¦ ¦ K ¦ ¦ K ¦¦ K ¦¦ K ¦
¦ *n ¦ ¦ *n ¦ ¦ *n ¦ ¦ *n ¦¦ *n ¦¦ *n ¦
¦ СЧАj¦ ¦ СЧАj¦ ¦ СЧАj ¦ ¦ СЧАj ¦¦ СЧАj ¦¦ СЧАj¦
¦СЧА*n¦ ¦СЧА*n¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦¦ СЧА*n ¦¦СЧА*n¦
¦ имя ¦ ¦метка¦ ¦ ALL ¦ ¦ BACK ¦L- --¦метка¦
L- -- L- -- ¦переменная¦ ¦ BVj ¦ L- --
L- -- L- --
Пример:
SIMULATE
...
GENERATE 1000,FN$EXPON
QUEUE 1
LINK 1,FIFO,CAN
CAN: SEIZE 1
DEPART 1
ADVANCE 700,FN$EXPON
RELEASE 1
UNLINK 1,CAN,1
TERMINATE 1
START 1000
END
ГРУППЫ
GPSS позволяет объединять объекты или их атрибуты в группы.
Существует 2 режима объединения: 1) транзактный
2) числовой
В транзактном режиме в группы объединяются транзакты с соответствующими
номерами.
В числовом режиме -группа состоит из списка числовых значений.Например:
коэффициенты использования приборов, превышающих какой-либо уровень.
Примечание: коэффициенты использования в долях от 1000.
В транзактном режиме возможно изменение атрибутов транзактов из группы
независимо от их местонахождения. Интерпретация групп производится
самим пользователем.
Группы имеют всего один СЧА: Cj - количество компонентов группы.
Существует 5 блоков, работающих с группами.
1.Блок JOIN . При помощи этого блока, транзакт или число включается в
группу. [Дисциплина FIFO].
1.Транзактный режим:
Если в блоке JOIN заполнено только поле A, то подразумевается его
транзактный режим. Любой входящий в JOIN транзакт включается в группу с
номером в поле A.Режим группы задается первым включенным туда объектом.
Транзакт может состоять одновременно в нескольких группах.
Пример:
JOIN 20
Транзакт, который войдет в этот блок, будет присоединен к группе 20.
JOIN PR
Транзакт будет введен в группу с N,соответствующим его приоритету.
2.Числовой режим:
Числовой режим задается заполнением полей A и B. В этом случае
вычисляется значение аргумента поля B, численное значение помещается в
группу с номером в поле A. Любое числовое значение может быть введено в
группу только один раз.
JOIN 2,50
JOIN ADA,V1
Формат:
поле блоков A -- B -¬
JOIN номер ¦числовое¦
-- -¬ ¦значение¦
¦ K ¦ ¦ K ¦
¦ *n ¦ ¦ *n ¦
¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ имя ¦ L- --
L- --
2.Блок REMOVE позволяет извлекать из групп компоненты. Также работает в
двух режимах.
1.Транзактный режим:
В поле A задается номер группы. Симулятор проверяет, если входящий
транзакт принадлежит данной группе и извлекает его из группы, если он
ей принадлежит. Если данный транзакт не принадлежит группе, то он будет
отправлен по альтернативному адресу (поле F) или же к следующему блоку
(поле F пусто).
Пример:
REMOVE 15
REMOVE GRUP,,,,,ALT
Блок REMOVE может работать в режиме извлечения из группы определенного
числа транзактов, атрибуты которых соответствуют поставленному условию.
Для этого используются поля B,D,E.
В поле B задают количество извлекаемых из группы транзактов. Если поля
D и E не заполнены, то из группы извлекается заданное количество
транзактов (по дисциплине FIFO).В поле D задается аргумент, по которому
будут извлекаться транзакты из группы в случае равенства его аргументу
поля E. При помещении в поле B слова ALL, извлекаются все транзакты,
удовлетворяющие заданному условию.
Пример:
REMOVE 1,ALL
Если поле B пусто, то оно трактуется как 1.
REMOVE 3,10,,,PR,6
Если в D записать число, то оно интерпретируется как номер параметра.
2.Числовой режим:
В этом режиме используются поля A,C,F. A - имя или номер группы. C -
числовое значение. Симулятор проверяет, имеется ли числовое значение,
указанное в поле C, в группе с именем в поле A. При положительном
результате, это значение извлекается из группы. В противном случае,
транзакт переходит по альтернативному адресу либо к следующему блоку.
Пример:
REMOVE 5,,V$NAME,,,ADR1
Формат:
поле блоков A B C -- D E -¬--- F -¬¬
REMOVE номер кол-во числовое ¦ атрибут аргумент ¦¦¦альт.¦¦
группы тр-тов значение ¦ тр-та сравнения¦¦¦выхо䦦
--- -¬¬-- -¬ - ¬ ¦-- -¬-- -¬¦¦¦ ¦¦
¦¦ K ¦¦¦ K ¦ ¦ K ¦ ¦¦ K ¦¦ K ¦¦¦¦ K ¦¦
¦¦ *n ¦¦¦ *n ¦ ¦ *n ¦ ¦¦ *n ¦¦ *n ¦¦¦¦ *n ¦¦
¦¦ СЧАj¦¦¦ СЧАj ¦ ¦ СЧАj ¦ ¦¦ СЧАj ¦¦ СЧАj ¦¦¦¦ СЧАj¦¦
¦¦СЧА*n¦¦¦СЧА*n ¦ ¦ СЧА*n ¦ ¦¦ СЧА*n ¦¦ СЧА*n ¦¦¦¦СЧА*n¦¦
¦¦ имя ¦¦¦ ALL ¦ L - ¦¦ PR ¦L- --¦¦¦меткদ
LL- ---L- -- ¦L- -- ¦LL- ---
L- --
- ¬ -- -¬
¦ ¦- числовой режим ¦ ¦ - транзактный режим
L - L- --
3.Блок EXAMINE позволяет выбрать маршрут движения транзакта в зависи-
мости от того, находится ли он или заданное значение в группе. Данный
блок работает в двух режимах:
1.Транзактный режим:
Если входящий в блок EXAMINE транзакт присутствует в группе с именем,
указанным в поле A, то он переходит к следующему блоку. В противном
случае, он переходит по альтернативному адресу, указанному в поле C.
Поле B в этом режиме не используется.
Пример:
EXAMINE 10,,ALT1
2.Числовой режим:
В данном режиме выполняются те же действия, что и в транзактном, за
исключением того, что объектом поиска является числовое значение,
указанное в поле B.
Пример:
EXAMINE 20,PR,ADR2
Формат:
поле блоков A B C
EXAMINE номер числовое альтернативный
группы значение адрес
--- -¬¬- ¬ --- -¬¬
¦¦ K ¦¦¦ K ¦ ¦¦ K ¦¦
¦¦ *n ¦¦¦ *n ¦ ¦¦ *n ¦¦
¦¦ СЧАj¦¦¦ СЧАj ¦ ¦¦ СЧАj ¦¦
¦¦СЧА*n¦¦¦ СЧА*n ¦ ¦¦ СЧА*n ¦¦
¦¦ имя ¦¦L - ¦¦ метка ¦¦
LL- --- LL- ---
4.Блок SCAN работает только в транзактном режиме и позволяет пользова-
телю иметь доступ к атрибутам транзактов, где бы они не находились.
Блок SCAN позволяет:
1) Определить, имеются ли среди членов группы транзакты с определенными
значениями атрибутов.
2) Получить значения атрибутов транзакта,являющегося членом группы, для
которого выполняются заданные условия.
3) Изменить направления движения транзактов в случае, если в группе нет
транзактов удовлетворяющих заданным условиям.
Поле A задает номер просматриваемой группы. В поле B указывают
сравниваемый атрибут транзакта (параметр или приоритет). В поле C
задают аргумент для сравнения соответствующего атрибута. Если в группе
найден транзакт, значение атрибута которого равно аргументу поля C, то
значение атрибута (в поле D) транзакта (члена группы) записывается в
параметр с номером, указанным в поле E,входящего в блок SCAN транзакта.
В случае безуспешного поиска, транзакт перейдет по альтернативному
адресу (поле F) или к следующему блоку (поле F пусто).
Формат:
поле блоков A B C -- D E -¬-- F -¬
SCAN номер атриб. аргумент ¦считыв-ый пар-тр для¦¦альт.¦
группы поиска для сравн.¦ атрибут записи ¦¦выход¦
-- -¬ -- -¬ -- -¬ ¦-- -¬ -- -¬¦¦ ¦
¦ K ¦ ¦ K ¦ ¦ K ¦ ¦¦ K ¦ ¦ K ¦¦¦ K ¦
¦ *n ¦ ¦ *n ¦ ¦ *n ¦ ¦¦ *n ¦ ¦ *n ¦¦¦ *n ¦
¦ СЧАj¦ ¦ СЧАj ¦ ¦ СЧАj ¦ ¦¦ СЧАj ¦ ¦ СЧАj ¦¦¦ СЧАj¦
¦СЧА*n¦ ¦СЧА*n ¦ ¦ СЧА*n ¦ ¦¦ СЧА*n ¦ ¦ СЧА*n ¦¦¦СЧА*n¦
¦ имя ¦ ¦ PR ¦ L- -- ¦¦ PR ¦ L- --¦¦метка¦
L- -- L- -- ¦L- -- ¦L- --
L- --
Пример:
SCAN 1,PR,6,,,ADR1
Если в группе 1 есть транзакт с приоритетом 6, то он проходит дальше,
иначе идет по ADR1.
SCAN 4,10,X1,PR,6,NEXT
Для первого же транзакта 4-ой группы, у которого PR10=X1, выполняется
следующее действие: 6-му параметру вошедшего в блок транзакта
присваивается приоритет, найденного транзакта из группы.
5.Блок ALTER позволяет изменять атрибуты транзактов из группы. Данный
блок дает возможность:
1) Изменить значение заданного атрибута для всех членов группы.
2) Изменить атрибут для части членов группы.
3) Изменить значение заданного атрибута только в случае выполнения
заданных условий.
В поле A задается имя или номер группы.В поле B - кол-во транзактов, у
которых атрибут подлежит изменению (если в поле B находится ALL, то для
всех транзактов). В поле C задается атрибут транзактов из группы,
который будет изменен. Любое число трактуется как номер параметра, PR -
приоритет. Поле D задает новое значение атрибута. В поле E помещают
атрибут транзакта (число трактуется как номер параметра, PR-приоритет).
Перед изменением атрибутов (членов группы), значение этого атрибута (в
поле E) сравнивается (на равенство) с атрибутом в поле F. Поле G задает
альтернативный выход, когда заданная группа пустая или же нет
транзактов, для которых выполняется заданное условие.
Формат:
поле блоков A B C D
ALTER номер счетчик изменяемый новое значение
группы транзактов атрибут атрибута
-- -¬ -- -¬ -- -¬ -- -¬
¦ K ¦ ¦ K ¦ ¦ K ¦ ¦ K ¦
¦ *n ¦ ¦ *n ¦ ¦ *n ¦ ¦ *n ¦
¦ СЧАj ¦ ¦ СЧАj ¦ ¦ СЧАj ¦ ¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ имя ¦ ¦ ALL ¦ ¦ PR ¦ L- --
L- -- L- -- L- --
-- E E -¬-- G -¬
¦ сравниваемый аргумент для ¦¦альтернативный¦
¦ атрибут сравнения ¦¦ выход ¦
¦ -- -¬ -- -¬ ¦¦ ¦
¦ ¦ K ¦ ¦ K ¦ ¦¦ K ¦
¦ ¦ *n ¦ ¦ *n ¦ ¦¦ *n ¦
¦ ¦ СЧАj ¦ ¦ СЧАj ¦ ¦¦ СЧАj ¦
¦ ¦ СЧА*n ¦ ¦ СЧА*n ¦ ¦¦ СЧА*n ¦
¦ ¦ PR ¦ L- -- ¦¦ метка ¦
¦ L- -- ¦L- --
L- --
Пример:
ALTER 1,ALL,PR,100
ALTER 3,ALL,PR,0,1,10,ALT2
Для транзактов, у которых P1=1, PR устанавливается в нуль. Если таковых
нет, то используется альтернативный адрес ALT2.
ОБЪЕКТЫ ЗАПОМИНАЮЩЕЙ КАТЕГОРИИ
Ячейки сохраняемых величин
Ячейки используют для хранения различных числовых значений,для вывода
на печать или для их дальнейшего использования. Существует 2 формата
ячеек: 1.Слово ё(2^31-1)
2.Полуслово ё(2^15-1)
СЧА ячеек:
Xj - значение, записанное в j-ой ячейке формата слово.
XHj - значение, записанное в j-ой ячейке формата полуслово.
Обладают всеми свойствами, присущими СЧА.
1.Блок SAVEVALUE позволяет записать в ячейку желаемое значение(конст.
или СЧА). Блок является прозрачным для транзактов.
Поле A задает номер или имя ячейки. Поле B - модифицирующее значение.
Поле C предназначено для задания формата ( для ячеек формата полуслова
в поле C стоит "H", формат слово выбирается по умолчанию). При попытке
записать в короткую (полусловную) ячейку значение, большее 2^15-1,
симулятор выдаст предупреждение. В этом случае, старшие биты будут
отброшены и моделирование продолжится.
Режимы блока SAVEVALUE:
1. Режим замены : После аргумента поля A ничего не пишут; значение поля
B заменяет старое значение данной ячейки.
Пример:
SAVEVALUE 10,V1
2. Инкрементный режим : Для задания этого режима, непосредственно за
аргументом в поле A записывают "+", а значение поля B добавляется к
старому значению ячейки. Результат записывается в ту же ячейку.
Пример:
SAVEVALUE 10+,15
3. Декрементный режим : Для задания этого режима, непосредственно за
аргументом в поле A записывают "-". Из старого значения вычитается
аргумент поля B. Результат записывается в ту же ячейку.
Пример:
SAVEVALUE X10-,1
Формат:
поле блоков A B C
SAVEVALUE номер модифицирующее
ячейки значение формат
-- -¬-- -¬-- -¬
¦ K ¦¦ + ¦¦ K ¦ [H]
¦ *n ¦¦ - ¦¦ *n ¦
¦ СЧАj ¦L- --¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦
¦ имя ¦ L- --
L- --
МАТРИЦЫ ЯЧЕЕК СОХРАНЯЕМЫХ ВЕЛИЧИН
Матрицы позволяют привязать дополнительные атрибуты к объектам GPSS.
Для использования матриц, их надо предварительно описать. Для этого
используют карту MATRIX .
Формат карты MATRIX:
Поле метки - имя или номер матрицы.
Операционное поле - слово MATRIX.
Поле A - X или H соответственно для описания полнословных и полусловных
ячеек.
Поле B - количество строк.
Поле C - количество столбцов.
Пример:
10 MATRIX X,5,5
ALFA MATRIX H,20,1
1.Блок MSAVEVALUE работает аналогично блоку SAVEVALUE, но информация
записывается в элементы матрицы с номером, указанном в поле A;
модифицирующееся значение записывается в поле D. Поля B и C задают
соответственно строку и столбец, на пересечении которых стоит
изменяемый элемент. Поле E задает формат элемента.
Формат:
поле блоков A B C D E
MSAVEVALUE номер номер номер мод-щее
матрицы строки столбца значение формат
-- -¬-- -¬-- -¬-- -¬-- -¬
¦ K ¦¦ + ¦¦ K ¦¦ K ¦¦ K ¦ [H]
¦ *n ¦¦ - ¦¦ *n ¦¦ *n ¦¦ *n ¦
¦ СЧАj ¦L- --¦ СЧАj ¦¦ СЧАj ¦¦ СЧАj ¦
¦ СЧА*n ¦ ¦ СЧА*n ¦¦ СЧА*n ¦¦ СЧА*n ¦
¦ имя ¦ L- --L- --L- --
L- --
Пример:
MSAVEVALUE 3,2,1,1000,H
MSAVEVALUE ALFA-,20,2,10
СЧА для матриц:
MXj(m,n) - элемент (m,n) из матрицы с номером j формата слово.
MHj(m,n) - элемент (m,n) из матрицы с номером j формата полуслово.
Карта INITIAL позволяет задавать исходные значения объектам запоминаю-
щей категории, а также задавать состояния логических ключей до начала
моделирования. По умолчанию значения ячеек,матриц до начала моделирова-
ния равны 0.
Карта имеет два формата:
Формат:
поле блоков A B
INITIAL номер
ячейки значение
-- -¬
¦ Xj ¦ K
¦ XHj ¦
L- --
либо
поле блоков A B
INITIAL элемент
матрицы значение
-- -¬
¦MXj(C,L)¦ K
¦MHj(C,L)¦
L- --
Пример:
INITIAL X10,1000
INITIAL MX$BETA(1,1),100
Формат 2 позволяет описать одной картой сразу несколько объектов:
INITIAL X1,53/X$ABC,3/XH1-XH10,1
INITIAL MX(4,5),-10/MH1-MH2(2-3,1-2),10
Примечание:
Значения матриц и ячеек не изменяются картой RESET, но
обнуляются картой CLEAR (за исключением избирательного
режима данной карты).
ЛОГИЧЕСКИЕ КЛЮЧИ
Логические ключи используют для имитации объектов с двумя состояниями.
Каждый ключ может находится в одном из следующих состояний: 1.Включен;
2.Выключен; (До начала моделирования, все ключи выключены ).
Ключи имеют два логических оператора:
LRj(Latch Reset) - истинно, когда ключ выключен
- ложно, когда ключ включен
LSj(Latch Set) - истинно, когда ключ включен
- ложно, когда ключ выключен
Состояния ключей анализируются блоком GATE LS и GATE LR, что позволяет
изменять маршрут движения транзактов в зависимости от состояния
соответствующего ключа. Также этот блок может пропускать или
останавливать транзакты.
1.Блок LOGIC устанавливает логический ключ в желаемое состояние. При
входе транзактов в этот блок, состояние ключа, указанного в поле A,
может быть изменено в зависимости от мнемоники в дополнительном
операционном поле следующим образом:
S - ключ включается
R - ключ выключается
I - изменяет свое состояние на противоположное
Формат:
поле блоков 14-я A
LOGIC поз. номер
-- -¬ ключа
¦ S ¦ -- -¬
¦ R ¦ ¦ K ¦
¦ I ¦ ¦ *n ¦
L- -- ¦ СЧАj ¦
¦ СЧА*n ¦
¦ имя ¦
L- --
Пример:
LOGIC R 10
LOGIC I X$BETA
Для установки ключей в состояние "включен" перед началом моделирования,
используют карту INITIAL:
INITIAL LS1/LS10/LS15/LS$ALFA
Примечание: Карта RESET не изменяет состояния ключей,только карта CLEAR
сбрасывает их (кроме выборочного режима).
МАКРООПРЕДЕЛЕНИЯ
Макроопределение представляет собой последовательность часто
употребляемых блоков, определяемую пользователем и которая может быть
вызвана одной картой (что существенно упрощает запись модели).
Макроопределение должно быть описано до начала моделирования.
Формат:
имя STARTMACRO
..........
..........
..........
ENDMACRO
Содержимое макроопределения отличается от обычного программного языка
GPSS обозначением формальных параметров символом "#" (формальные
параметры:латинские буквы, соответствующие аргументам 1,2,...10 полей).
Из одного макроопределения можно вызвать другое (уровень вложения: 2 ).
Пример:
OBSL STARTMACRO
QUEUE #A
SEIZE #A
DEPART #A
ADVANCE #B,#C
RELEASE #A
ENDMACRO
Для вызова в программе макроопределения, используется карта MACRO .
Формат:
имя MACRO реальные параметры