Научно-производственное объединение "ЦЕНТРПРОГРАММСИСТЕМ" СИСТЕМА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ ИМИТАЦИОННОГО МОДЕЛИРОВАНИЯ НА ЯЗЫКЕ G P S S ( СПО GPSS/PC ) Версия 2 Калинин 1989 |
1. ВВЕДЕНИЕ
Система GPSS/PC предназначена для имитационного моделировавания сложных дискретных систем.
Имитационное моделирование обеспечивает возможность испытания, оценки и проведения экспериментов с предлагаемой системой без каких-либо непосредственных воздействий на нее. При имитационном моделировании проводится эксперимент с программой, которая является моделью системы. Несколько часов, недель или лет работы исследуемой системы могут быть промоделированы на ЭВМ за несколько минут. В большинстве случаев модель является не точным аналогом системы, а скорее ее символическим изображением. Однако такая модель позволяет производить измерения, которые невозможно произвести каким-либо другим способом.
Первым шагом при анализе любой конкретной системы является выделение элементов системы и формулирование логических правил, управляющих взаимодействием этих элементов. Полученное в результате описание называется моделью системы. Модель обычно включает в себя те аспекты системы, которые представляют интерес или нуждаются в исследовании.
Для общих задач система моделирования должна предоставлять пользователю достаточно краткий и в то же время применимый к широкому классу систем язык моделирования. Исследование разнообразных дискретных систем показало, что любая система может быть описана при помощи необходимого набора абстрактных элементов, называемых объектами. Логические правила поведения таких систем описываются аналогичным в каждом случае набором операций.
В системе GPSS/PC языком моделирования является язык GPSS/PC. В данном документе приводятся общие сведения о GPSS/PC.
1.1. Блок-диаграммы
Наиболее распрстраненным методом описания систем является, по-видимому, составление блок-диаграмм. Блок-диаграмма - графическое представление операций, происходящих внутри системы. Другими словами, блок-диаграмма описывает взаимодействие событий внутри системы. Линии, соединяющие блоки, указывают маршруты потоков сообщений или описывают последовательность выполняемых событий. В случае нескольких вариантов действий от блока отходят несколько линий. Если же к блоку подходят несколько линий, то это означает, что выполняемая операция является общей для двух или более последовательностей блоков. Выбор логических путей может основываться на статистических или логических условиях, действующих в момент выбора.
При составлении блок-диаграммы рекомендуется сначала начертить общий график системы. Затем составляется отдельная блок-диаграмма для соответствия основных функций с блоками GPSS/PC, после чего вносятся детали. Чтобы выявить эти дополнительные подробности, некоторые части системы нужно проанализировать более тщательно. Степень детализации зависит от моделируемой системы и от того, что нужно узнать в процессе моделирования. Начинающие программисты составляют слишком подробную блок-диаграмму. Часто в этом нет необходимости.
Блок-диаграммы получили широкое применение при описании систем, но форма представления обычно зависит и от самой системы, и от специалиста, описывающего эту систему. Поэтому, при построении блок-диаграмм, следует соблюдать определенные условия, являющиеся основой создания программы на языке моделирования.
В GPSS/PC имеется определенное количество типов блоков для задания объектов и операций над ними. Каждому блоку соответствует графическое изображение на блок-диаграмме. Стрелки между блоками указывают маршруты потоков сообщений.
Далее, для того, чтобы применить язык моделирования GPSS/PC, каждый блок блок-диаграммы заменяется соответствующим оператором GPSS/PC.
1.2. Объекты GPSS/PC
Объекты в моделируемой системе предназначены для различных целей. Выбор объектов в конкретной моделируемой системе зависит от характеристик модели и, в некоторых случаях, от специалиста, составляющего модель. Совершенно не обязательно, чтобы в одной модели участвовали все типы объектов. Обязательным является лишь то, что в каждой модели должны быть блоки и сообщения, иначе просчитать ее будет невозможно. Какие объекты, помимо сообщений и блоков, будут включены в модель, будет зависеть от того, какие именно используются блоки и операнды блоков (которые могут повлечь появление операторов описания других объектов).
1.2.1. Сообщения
Сообщения(транзакты) - это динамические объекты GPSS/PC. Они создаются в определенных точках модели, продвигаются интерпретатором через блоки, а затем уничтожаются. Сообщения являются аналогами единиц-потоков в реальной системе. Сообщения могут представлять собой различные элементы даже в одной системе. Например, в модели ЭВМ одни сообщения могут являться прообразами программ пользователя, решаемых на данной ЭВМ, а другие представляют поток отказов в аппаратных средствах ЭВМ. С каждым сообщением в GPSS/PC связаны параметры. Параметры могут использоваться для связи конкретных числовых данных с этим сообщением. В приведенном выше примере параметрами сообщений первого типа могут быть: время обслуживания программы центральным процессором; число обращений к лентам, дискам; идентификация пользователя и т. д.
Сообщения движутся от блока к блоку так, как движутся элементы, которые они представляют (программы в примере с ЭВМ).
Каждое продвижение считается событием, которое должно происходить в конкретный момент времени. Интерпретатор GPSS/PC автоматически определяет моменты наступления событий. В тех случаях, когда событие не может произойти, хотя момент его наступления подошел (например, при попытке занять устройство, когда оно уже занято), сообщение прекращает продвижение до снятия блокирующего условия.
Сообщения нумеруются последовательно, начиная с номера 1. Параметры сообщений принимают значения из множества целых чисел. Каждое сообщение имеет один или более параметров. Параметры нумеруют-
ся. Номера параметров используются для ссылок на значения, присвоенные параметрам. Сообщениям может присваиваться приоритет, используемый системой в ходе моделирования.
С сообщениями связаны следующие понятия:
- отметка времени (Mark time) - значение модельного времени, когда сообщение впервые появилось в системе;
- семейство сообщений (Assebmly set)- совокупность объединенных в группу сообщений;
- индикатор задержки (Delay indikator) - указывает номер блока, перед которым находится сообщение, не имея возможности войти в него;
- индикатор трассировки (Trace indikator) - указывает номера блоков, которые проходятся активным сообщением;
- текущий блок (Current block) - номер блока, в котором находится активное сообщение;
- следующий блок (Next block) - номер блока, следующего за текущим блоком на пути движения активного сообщения;
- списки (Chains) - упорядоченные массивы информации, отображающие состояние сообщений в моделируемой системе.
Сообщения в процессе имитации могут иметь следующие состояния:
- активное (ACTIVE) - сообщение, имеющее наивысший приоритет в списке текущих событий;
- приостановленное (SUSPENDED) - сообщение находится в ожидании активизации в списках будущих или текущих событий;
- пассивное (PASSIVE) - сообщение временно переводится в список пользователя, список задержки или список ожидания;
- завершившееся (TERMINATE) - сообщение уничтожено и больше не выполняется в текущей модели;
- прерванное (PREEMTED) - обработка сообщения некоторым устройством прервана и сообщение переведено в один или более списков прерывания.
1.2.2. Блоки
После того, как система описана, исходя из операций, которые она выполняет, ее нужно описать на языке GPSS/PC, используя блоки, которые выполняют соответствующие операции в модели. Ниже перечислены некоторые свойства этих блоков. В последующих разделах подробно обсуждаются выполняемые ими операции.
В блоках могут происходить события четырех основных типов:
1) создание или уничтожение сообщений;
2) изменение числового атрибута объекта;
3) задержка сообщения на определенный период времени;
4) изменение маршрута сообщения в модели.
1.2.3. Одноканальные устройства
Аналогами обслуживающих приборов и реальных систем в GPSS/PC являются объекты типа "оборудование". К объектам этого типа относятся одноканальные устройства, многоканальные устройства и логические ключи. Одноканальные устройства, в дальнейшем их будем назы-
вать устройствами, представляют собой оборудование, которое в любой
момент времени может быть занято только одним сообщением. Интерпретатор записывает информацию о том, какое сообщение в настоящий момент занимает устройство. Если другое сообщение попытается захватить устройство, то это сообщение задерживается до тех пор, пока устройство не освободится. Программа также автоматически подсчитывает общее время занятости устройства. Это значение позволяет определить коэффициент использования каждого устройства. Подсчитывается также общее число сообщений, занимавших устройство, что позволяет вычислить среднее время занятости устройства одним сообщением. В реальных системах объекты типа "устройство" могут иногда прерывать обслуживание одних элементов и начинать обслуживание других.
Например, в порт может прибыть корабль с грузом высокого приоритета и потребовать немедленного обслуживания у одного из причалов. Прибывший корабль прервет, таким образом, разгрузку любого корабля, находящегося на причале, впоследствии разгрузка этого корабля возобновится. Такое прерывание можно легко представить средствами GPSS/PC, поскольку устройство в GPSS/PC тоже может быть временно прервано другим сообщением. Само устройство в логических и статистических целях продолжает считаться занятым. После окончания прерывания автоматически возобновляется обслуживание прерванного сообщения.
1.2.4. Многоканальные устройства
В GPSS/PC многоканальные устройства представляют объекты типа "оборудование" для параллельной обработки, они могут быть использованы несколькими сообщениями одновременно. Многоканальные устройства используются для представления физического оборудования, например, зрительного зала театра, стоянки автомобилей и, в некоторых случаях, основной памяти в системах для обработки данных. Пользователь определяет емкость каждого многоканального устройства, используемого в модели, а интерпретатор ведет учет числа единиц многоканальных устройств, занятых в каждый момент времени. Если сообщение пытается занять больше единиц многоканального устройства, чем свободно в данный момент, обработка этого сообщения задерживается до того момента, пока в многоканальном устройстве освободится достаточный объем.
Программа автоматически ведет подсчет числа сообщений, входящих в многоканальное устройство. Определяется также среднее число единиц многоканальных устройств, занятых одним сообщением, и среднее время пребывания сообщения в многоканальном устройстве. Эти статистические данные выдаются в конце счета и позволяют определить, насколько эффективно используются в системе объекты параллельной обработки и достаточна ли их емкость.
1.2.5. Логические ключи
Ранее происходившие в системе события могут заблокировать и изменить движение последующих событий. Например, кассир кинотеатра, уходя на обед, ставит табличку "К следующему окну", и все последующие клиенты обращаются в другую кассу. Для моделирования таких си-
туаций введены логические ключи. Сообщение может устанавливать эти
ключи в положение "включено" или "выключено". Впоследствии состояние ключа может быть проверено другими сообщениями для определения пути их следования.
Сообщение может установить ключ (установка ключа соответствует состоянию "включено"), сбросить его (состояние "выключено") или инвертировать, т. е. изменить на противоположное значение состояния ключа. Состояние ключа может быть изменено любым другим сообщением, и любое сообщение может использовать состояние ключа для выбора одного из двух возможных путей или ожидать момента изменения состояния ключа.
1.2.6. Арифметические переменные
Арифметические переменные позволяют вычислять арифметические выражения, состоящие из стандартных числовых атрибутов (СЧА), которые описаны ниже. Запись выражения переменной аналогична записи соответствующих операторов языка Фортран. В выражении переменной используют операторы, арифметические действия и вызовы библиотечных функций.
1.2.7. Булевские переменные
Булевские переменные позволяют пользователю проверять в одном блоке GPSS/PC одновременно несколько условий, исходя из состояния или значения объектов и их атрибутов. То есть, в данном блоке производится обращение к булевской переменной, выражение которой содержит в себе проверку нескольких условий. Булевская переменная имеет значение 1, если выражение переменной истинно, и 0, если выражение переменной ложно.
1.2.8. Выражения
Выражениями, используемыми в арифметических и булевских переменных, являются комбинации математических операторов, библиотечных функций, СЧА и констант, составленные по правилам элементарной алгебры. Выражения вычисляются слева направо с учетом иерархии операций. Оценка арифметических выражений производится в формате с плавающей точкой с двойной точностью (64 бита). Результат оценки усекается и хранится как целое число. Ниже, в угловых скобках, приводятся операторы и библиотечные функции, используемые в выражениях в порядке, соответствующем их применению при оценке выражений:
<-> - знак минус;
<'NOT'> - логическое отрицание: 1 (TRUE), если операнд 0;
0 (FALSE),если не ноль; <ABC()> - абсолютное значение операнда; <ATN()> - арктангенс операнда в радианах; <COS()> - косинус операнда в радианах; <INT()> - целая часть;
<EXP()> - экспонента операнда;
<LOG()> - натуральный логарифм операнда;
<SIN()> - синус операнда в радианах;
<SQR()> - квадратный корень из операнда;
<TAN()> - тангенс операнда в радианах;
<'AND'> - оператор логического умножения: 1 (TRUE), если оба
операнда не нулевые,0(FALSE) - в противном случае; <'OR'> - оператор логического сложения: 1 (TRUE), если один
из операндов не нулевой, 0 (FALSE) - в противном
случае;
<'G'> - оператор отношения "больше";
<'L'> - оператор отношения "меньше";
<'E'> - оператор отношения "равно";
<'NE'> - оператор отношения "не равно";
<'LE'> - оператор отношения "меньше или равно";
<'GE'> - оператор отношения "больше или равно";
< ^ > - оператор возведения в стенень;
< # > - оператор арифметического умножения;
< / > - оператор арифметического деления;
< \ > - оператор деления нацело;
< @ > - оператор деления по модулю;
< + > - оператор арифметического сложения;
< - > - оператор арифметического вычитания;
Выражение может иметь длину до 80 символов.
1.2.9. Функции
Используя функции, пользователь может производить вычисления непрерывных или дискретных функциональных зависимостей между аргументом функции (независимая величина) и зависимым значением функции. Функции широко применяются, например, для задания случайного интервала времени между генерацией двух сообщений. Все функции в GPSS/PC задаются табличным способом с помощью специальных операторов описания функции.
1.2.10. Ячейки сохраняемых величин и матрицы ячеек сохраняемых величин
Ячейки сохраняемых величин и матрицы ячеек сохраняемых величин также относятся к объектам GPSS/PC. Эти ячейки используются для сохранения некоторой числовой информации. Например, значение, занесенное в ячейку, может представлять собой длину очереди в какой-то конкретной точке модели. Любое сообщение может произвести запись информации в эти объекты. Впоследствии, записанную в эти объекты информацию может считывать любое сообщение.
Например, в случае моделирования работы порта для построения зависимости ожидания кораблей в очереди определенной длины от времени, достаточно через каждые Х единиц времени (Х задается пользователем) заносить значение длины очереди в ячейки (каждое значение в отдельную ячейку). В конце счета значения этих ячеек будут распечатаны, и по ним может быть построена искомая зависимость.
1.2.11. Очереди
В любой системе движение потока сообщений может быть задержано из-за недоступности оборудования. Например, требуемые устройства могут быть уже заняты или многоканальные устройства, в которые нужно войти, уже заполнены. В этом случае задержанные сообщения ставятся в "очередь" - еще один тип объектов GPSS/PC. Учет этих очередей составляет одну из основных функций интерпретатора GPSS/PC.
Пользователь может определить специальные точки в модели, в которых нужно собирать статистику об очередях. Тогда интерпретатор GPSS/PC автоматически будет собирать статистику об очередях (длину очереди, среднее время пребывания в очереди и т. д.). Число задержанных сообщений и продолжительность этих задержек определяется только в этих заданных точках. Интерпретатор также автоматически подсчитывает в этих точках общее число сообщений, поступающих в очередь. Это делается примерно также, как для устройств и памятей. В определенных счетчиках подсчитывается число сообщений, задерживающихся в каждой очереди, так как может представлять интерес число сообщений, прошедших какую-либо точку модели без задержки. Интерпретатор подсчитывает среднее время пребывания сообщения в очереди (для каждой очереди), а также максимальное число сообщений в очереди.
1.2.12. Таблицы
Как сказано выше, интерпретатор автоматически накапливает определенную статистику относительно устройств, памятей и очередей. Пользователь может также собрать дополнительную статистическую информацию. Например, необходимо собрать статистику о времени пребывания зрителя в кассе кинотеатра (время в очереди, время на приобретение билета). Поскольку в данной модели участвуют разные переменные (время, затрачиваемое на приобретение билета, длина очереди к окошку и т. д.), общее время пребывания сообщений в модели не может быть одинаковым. Сначала определяется диапазон значений, в которых может колебаться время пребывания сообщений в системе. Для удобства обработки информации этот диапазон следует как-то упорядочить (например, по числовым значениям).
Самым легким способом достижения такого упорядочивания - устанавливать диапазон значений, скажем от 5 до 6 минут, и затем табулировать те значения, которые попадают в этот диапазон. Если задается ряд последовательных диапазонов (например, 5-6, 6-7, 7-8 и т. д.), можно учесть все значения, которые попадают в каждый из заданных диапазонов. В результате табулируются частоты попадания значений времени пребывания сообщений в каждый из диапазонов (например, в диапазон 6-7 мин. попало 568 значений).
Для облегчения табулирования в GPSS/PC предусмотрен специальный объект - таблица. Таблица состоит из частотных классов, куда заносится число попаданий конкретного числового атрибута в каждый конкретный частотный класс. Для каждой таблицы вычисляется также математическое ожидание и среднеквадратичное отклонение. Эта статистика является стандартной для всех таблиц. При задании таблиц могут понадобиться различные режимы работы таблиц. Режим работы зависит от того, какая статистика нужна.
1.3. Модель системы
Описанные выше объекты в модели можно считать присутствующими неявно, т. е. их существование предполагается. Пользователю нет необходимости определять каждый объект и описывать, как его использовать. Он только описывает те действия, которые производятся над этими объектами. Анализируя выходную статистику, пользователь может установить, какое влияние эти действия оказали на объект. Нет особой трудности в описании последовательности действий, выполняемых над одним или несколькими типами отдельных сообщений. Трудность заключается в определении взаимосвязи нескольких типов сообщений. И в этом плане применение GPSS/PC особенно удобно. Описав условия, которые воздействуют на отдельные сообщения, и задав интерпретатору такой режим, по которому он будет продвигать сообщения заданным образом, можно по выходной статистике установить взаимосвязь различных типов сообщений.
1.4. Модельное время
Для того, чтобы обеспечить правильную временную последовательность событий в модели, организованы часы, хранящие значения текущего момента в модели. Все отрезки времени моделируемой системы измеряются целыми значениями. В отличие от обычных часов, измеряющих время в определенных единицах, обычно в секундах, часы в GPSS/PC меняют свое значение только для того, чтобы указать время наступления ближайшего события. Например, если текущее значение часов модели равно 2, а очередное событие должно наступить в момент времени 7, то значение часов увеличивается сразу на 5 единиц. Отметим, что единицы времени в модели не обязательно должны быть конкретными единицами времени, такими как секунда или час. Основной единицей времени в модели можно выбрать любую единицу, которая позволит получить необходимую точность моделирования. Важно помнить, единицы времени выбираются исходя из требований пользователя к точности моделирования.
1.5. Статистика GPSS/PC
Поскольку целью построения любой модели является исследование моделируемой системы, интерпретатор GPSS/PC автоматически собирает стандартную статистику по каждому типу объектов, занятых в модели. В зависимости от того, какие объекты и как используются в модели, пользователь имеет возможность получать дополнительную статистику как в процессе счета модели, так и по окончании счета. Эта дополнительная статистика помогает оценить результаты счета модели.
Стандартная статистика используется и при отладке модели, и при оценке самой системы.
. КОДИРОВАНИЕ ОПЕРАТОРОВ GPSS/PC
2.1. Стандартные числовые атрибуты
В процессе моделирования интерпретатор GPSS/PC автоматически регистрирует и корректирует информацию, касающуюся различных элементов, используемых в модели. Большая часть информации доступна только интерпретатору. Однако, к некоторым атрибутам объектов может обращаться и программист, манипулируя их значениями согласно логи-
ки модели. Такие атрибуты называются стандартными числовыми атрибутами (СЧА). Каждый объект GPSS/PC имеет свой набор СЧА. Кроме СЧА объектов существуют еще системные числовые атрибуты, к которым пользователь может обращаться в модели, но не может изменять их значение. Имя СЧА состоит из двух частей. Первая часть указывает групповое имя, идентифицирующее тип объекта и тип информации об объекте. Вторая часть идентифицирует конкретного члена группы.
Групповое имя состоит из одной-двух букв, фиксированных для информации об объектах определенного типа, например, Q - ссылка на текущее значение длины очереди, QA - целая часть среднего значения очереди и т. д. Объекты GPSS/PC могут быть идентифицированы с помощью числовых или символьных имен. Если объект идентифицирован с помощью номера, то ссылка на его стандартный числовой атрибут записывается как СЧАj, где j - номер объекта (целое число) . При символической идентификации объекта ссылка на его стандартный атрибут записывается как СЧА$<имя>, где <имя> - символьное имя объекта.
К системным числовым атрибутам относятся следующие величины: RNj - число, вычисляемое j датчиком случайных чисел (где
1<=j<=7). Все датчики генерируют последовательность равномерно распределенных случайных чисел. Это целое число изменяется от 0 до 999 включительно, кроме двух случаев его использования - в качестве аргумента функции или элемента в переменной. В этих случаях RNj будет дробью от 0 до 0.999999;
C1 - текущее значение условного времени. Автоматически изменяется программой и устанавливается в 0 управляющими операторами CLEAR или RESET;
AC1 - текущее значение абсолютного времени. Автоматически изменяется программой. Эта величина не меняется под действием управ-
ляющего оператора RESET и устанавливается в 0 лишь под действием
оператора CLEAR;
TG1 - число, равное текущему значению счетчика завершений. Сообщения, вошедшие в блоки TERMINATE с ненулевым операндом А, уменьшают значение этого счетчика на число, равное значению операнда А;
XN1 - возвращает номер активного сообщения;
Z1 - возвращает размер свободной оперативной памяти в байтах; М1 - время пребывания в модели сообщения, обрабатываемого
программой в данный момент. Эта величина может изменяться блоком MARK. Время пребывания вычисляется следующим образом: М1 равно разнице текущего значения абсолютного времени и отметки времени обрабатываемого сообщения;
PR - приоритет обрабатываемого в данный момент сообщения. Эта величина может изменяться блоком PRIORITY. По умолчанию приоритет равен 0.
Сообщения имеют СЧА:
Pj или *j, или *<имя>, или *$<имя> - значение параметра j текущего сообщения или значение параметра с именем <имя> текущего сообщения ;
MPj - значение времени, равное разности абсолютного модельного времени и содержимого j-го параметра текущего сообщения;
MBj - флаг синхронизации : 1 , если сообщение в блоке j принадлежит тому же семейству, что и текущее сообщение ; 0 - в противном случае.
Блоки имеют СЧА:
Nj - общее число сообщений, которое должно войти в j-й блок. Подсчет ведется программой автоматически. Например, N$MET1 - счетчик числа входов в блок МЕТ1. Этот счетчик изменяется при каждом входе сообщения в блок МЕТ1;
Wj - текущее число сообщений, которое находится в блоке j. Значение этого счетчика подсчитывается автоматически. Например, W$MET2 - счетчик текущего числа сообщений в блоке МЕТ2.
Многоканальные устройства имеют следующие СЧА:
Sj - текущее содержимое многоканального устройства j. Содержимое многоканального устройства может изменяться блоками ENTER и LEAVE. Например, S$OPER - текущее содержимое многоканального устройства OPER;
Rj - число свободных единиц многоканального устройства j. Эта величина может изменяться блоками ENTER и LEAVE. Например, R$MACH - свободный объем многоканального устройства MACH;
SRj - коэффициент использования многоканального устройства j в тысячных долях, т. е., если коэффициент равен 0.65, то SRj равно 650;
SAj - среднее содержимое многоканального устройства j (целая часть);
SMj - максимальное содержимое многоканального устройства j;
SCj - общее число входов в многоканальное устройство j;
STj - среднее время пребывания сообщений в многоканальном устройстве j.
SEj - флаг незанятости многоканального устройства j : 1 - свободно, 0 - занято;
SFj - флаг заполненности многоканального устройства j : 1 - заполнено, 0 - не заполнено;
SVj - флаг готовности многоканального устройства j : 1 - готово, 0 - не готово;
Устройства имеют следующие СЧА:
Fj - текущее состояние устройства j. Эта величина равна 0, если устройство свободно, и 1 - во всех остальных случаях. Этот атрибут изменяется блоками SEIZE, RELEASE, PREEMPT и RETURN. Например, F$ACPU - состояние устройства ACPU;
FIj - флаг прерывания устройства : 1, если устройство находится в состоянии прерывания, 0 - в противном случае;
FVj - флаг готовности устройства к использованию : 1 , если готово, 0 - в противном случае;
FRj - коэффициент использования устройства j в тысячных долях, т. е., если коэффициент равен 0.88, то FRj равен 880;
FCj - общее число входов в устройство j;
FTj - среднее время использования устройства одним сообщением.
Очереди имеют следующие СЧА:
Qj - длина соответствующей очереди j. Эта величина может из -
меняться блоками QUEUE и DEPART. Например, Q2 соответствует очереди
2;
QAj - средняя длина очереди j.
QMj - максимальная длина очереди j. Это значение автоматически определяется и сохраняется программой;
QCj - общее число входов в очередь j. Это значение автоматически определяется и сохраняется программой;
QZj - число нулевых входов в очередь j. Это значение подсчитывается автоматически;
QTj - среднее время пребывания сообщения в очереди j (включая нулевые входы);
QXj - среднее время пребывания сообщения в очереди j (без нулевых входов).
Таблицы имеют следующие СЧА:
TBj - вычисленное среднее таблицы j. Для занесения в таблицу используется блок TABULATE;
TCj - общее число включений в таблицу j;
TDj - вычисленное среднеквадратичное отклонение для таблицы. Ячейки и матрицы ячеек сохраняемых величин имеют следующие
СЧА:
Xj - содержимое ячейки j;
MXj(a, b)- содержимое элемента матрицы ячеек j, расположенного в строке a, столбце b;
Вычислительные объекты имеют следующие СЧА:
FNj - вычисленное значение функции j. От значения функции берется целая часть, за исключением тех случаев, когда это значение используется в качестве модификатора в блоках GENERATE, ADVANCE или ASSIGN или в качестве аргумента другой функции;
Vj - вычисленное значение переменной j. При вычислении значения переменной с фиксированной точкой получается целое число. При вычислении значения переменной с плавающей точкой дробная часть конечного результата отбрасывается;
BVj - вычисленное значение (1 или 0) булевской переменной.
Списки и группы имеют следующие СЧА:
GNj - текущее число членов в числовой группе j;
GTj - текущее число членов в группе сообщений с номерами j;
CHj - текущее число сообщений в j-том списке пользователя;
CAj - среднее число сообщений в j-том списке пользователя;
CMj - максимальное число сообщений в j-том списке пользователя;
CCj - общее число сообщений в j-том списке пользователя;
CTj - среднее время пребывания сообщения в j-том списке поль-
зователя;
LSj - возвращает состояние логического ключа j : 1 - установлен, 0 - не установлен.
Стандартные числовые атрибуты могут использоваться в качестве операндов практически в любом типе блоков. Также значение любого СЧА может входить в большинство операторов описания объектов. Особенность СЧА является то, что они обеспечивают пользователю доступ к характеристикам состояния системы в процессе моделирования.
2.2. Типы операторов GPSS/PC
После того, как блок-диаграмма составлена, она должна быть записана в форме, удобной для ввода в ЭВМ. Для этого информация об
объектах GPSS/PC записывается в виде операторов в определенном формате. Операторы GPSS/PC делятся на следующие типы:
- операторы описания блоков;
- операторы описания данных и контроля управления;
- команды GPSS/PC.
2.2.1. Операторы описания блоков
В исходном тексте модели блоки описываются с помощью операторов описания блоков. Каждому блоку соответствует определенный оператор описания блока. При обработке исходного текста модели ассемблер GPSS/PC присваивает последовательные номера блокам. Таким образом, с каждым блоком будет связан идентифицирующий номер. Если в модели к какому-либо блоку происходит обращение, то во избежание работы с номерами блоков можно идентифицировать его меткой (совокупностью алфавитно-цифровых символов), а ассемблер данной метке поставит в соответствие номер. В дальнейшем к данному блоку можно будет обращаться по метке.
В поле операции пользователь должен записать обозначение блока, например, GENERATE, ASSIGN, MSAVEVALUE, TERMINATE, SPLIT, PRIORITY, ENTER. Задание исходных данных, необходимых для выполнения операций, соответствующих блоку, производится в поле операндов. Всего может быть семь операндов, эти операнды обозначаются буквами A, B,C, D и т. д. Значение каждого операнда определяется типом блока. Если у блока несколько операндов, они разделяются запятыми. Не все операнды являются обязательными, и если они опущены, то вместо пропущенного операнда ставится запятая.
Ниже приводится список блоков GPSS/PC и дается их краткая характеристика:
ADVANCE - задержка сообщения на определенное время, с включением его в список будущих событий;
ALTER - проверка и модификация сообщений в группе;
ASSEMBLE - вывод из модели одного или нескольких сообщений;
ASSIGN - модификация параметров сообщений;
BUFFER - размещение сообщения в списке текущих событий последним в своем приоритетном уровне;
COUNT - подсчет числа элементов заданного множества, удолетворяющих указанному условию;
DEPART - вывод сообщения из очереди;
ENTER - захват сообщением всего или части многоканального устройства;
EXAMINE - влияние на продвижение сообщения в следующий блок в зависимости от принадлежности сообщения к некоторому объединению;
EXECUTE - принудительная обработка сообщения некоторым блоком модели;
FAVAIL - смена состояния устройства на "готово к использованию";
FUNAVAIL - смена состояние устройства на "не готово к использованию";
GATE - проверка состояния объекта модели и изменение направления движения потока сообщений;
GATER - накопление нескольких связанных друг с другом сообщений( ансамбль сообщений);
GENERATE - создание сообщения и размещение его в списке буду -
щих событий;
HELP - выполнение подпрограммы на Фортране или Ассемблере;
INDEX - изменение параметров сообщения;
JOIN - размещение члена в числовой группе или в группе сообщений;
LEAVE - освобождение всего или части многоканального устройства;
LINK - пересылка сообщения в список пользователя;
LOGIC - модификация логического ключа;
LOOP - организация цикла с уменьшением значения параметра сообщения;
MARK - сохранение значения системного времени в параметре сообщения;
MATCH - ожидание сообщением связанных с ним сообщений в других блоках модели(синхронизация сообщений);
MOVE - активизация перемещения сообщения по позициям;
MSAVEVALUE - присваивание значений элементам матриц;
PREEMPT - прерывание обработки обрабатываемого устройством сообщения и захват устройста активным сообщением;
PRIORITY - изменение приоритета сообщения;
QUEUE - включение сообщения в очередь;
RELEASE - освобождение сообщением устройства;
REMOVE - удаление члена из числовой группы или группы сообщений;
RETURN - освобождение захваченного устройства;
SAVAIL - изменение состояния многоканального устройства на "готово к использованию";
SAVEVALUE - присваивание значений ячейки сохраняемых величин; SCAN - просмотр членов группы до выполнения некоторого усло-
вия;
SEIZE - занятие устройства или ожидание его освобождения для последующего занятия;
SELECT - выбор блока для дальнейшего продвижения сообщения с использованием значения параметра сообщения;
SPLIT - создание копии сообщения с адресацией ее в некоторый блок;
SUNAVAIL - изменение состояния многоканального устройства на "не готово к использованию";
TABULATE - обновление данных таблицы;
TERMINATE - уничтожение сообщения, уменьшение счетчика завершенных сообщений;
TEST - проверка арифметических условий и модификация направления движения потока сообщений;
TRACE - установка флага трассировки для активного сообщения;
TRANSFER - пересылка сообщения на указанный блок;
UNLINK - вывод сообщения из списка пользователя;
UNTRACE - сброс флага трассировки для активного сообщения.
2.2.2. Операторы описания данных и контроля управления
Для описания многоканальных устройств, переменных, таблиц и т. д. требуются операторы описания объектов. Формат операторов описания объектов такой же, как и у операторов описания блоков: в поле метки содержится символическое обозначение, которое идентифицирует
описываемый объект; в поле операции задается имя оператора описания
(STORAGE, TABLE, INITIAL, и т. д.); в поле операндов - необходимое
количество операндов, определяемое типом оператора.
Интерпретатору GPSS/PC требуется также некоторая дополнительная информация для контроля за процессом моделирования. Кроме того, необходима информация для обеспечения условий проведения серий модельных экспериментов. Эта информация задается с помощью управляющих операторов GPSS/PC. Ниже приводится список операторов описания данных и контроля управления GPSS/PC с краткими комментариями по их назначению:
BVARIABLE - определение булевских переменных;
CLEAR - сброс накопленной статистики в 0 и удаление всех сообщений из модели;
END - завершение работы GPSS/PC и возврат в DOS;
EQU - присвоение целых значений именам;
FUNCTION - определение функций;
FVARIABLE - определение переменных с плавающей точкой;
INITIAL - присвоение или модификация значений ячеек сохраняемых величин или элементов матриц ячеек сохраняемых величин;
MATRIX - определение матриц ячеек сохраняемых величин;
QTABLE - определение Q-таблиц;
RESET - сброс статистики в 0 без сброса датчиков случайных чисел и таймера абсолютного времени;
RMULT - установка начальных значений одного или более генераторов случайных чисел;
SIMULATE - установка предела времени моделирования для последующей имитации;
START - установка значения счетчика завершения инициирования процесса;
STORAGE - определение многоканальных устройств;
TABLE - определение таблиц;
VARIABLE - определение целых переменных.
Все эти операторы подробно описываются в последующих разделах данного рукововства.
2.2.3. Команды GPSS/PC
GPSS/PC является развитой диалоговой системой, обеспечивающей пользователя разнообразными средствами подготовки программ моделей, отладки этих программ, проведения модельных экспериментов. Указанные возможности реализуются с использованием следующего набора команд:
ANOVA - выполнение анализа вариантов в файле результатов;
CONTINUE - продолжение прерванного процесса имитации;
DELETE - удаление строк программы модели в буфере редактора GPSS/PC;
DISPLAY - печать в окне данных на дисплее строк программы модели из буфера редактора GPSS/PC;
DOS - прерывание работы GPSS/PC и временный выход в DOS;
EDIT - модификация строки программы модели из буфера редактора GPSS/PC;
EVENTS - просмотр содержимого списков текущих и будущих событий в окне данных;
GROUPS - просмотр содержимого числовых групп или групп сооб -
щений в окне данных;
MICROWINDOW - открытие и закрытие микроокон;
PLOT - отображение значений СЧА в окне данных в процессе имитации;
RENUMBER - перенумерация строк программы модели в буфере редактора GPSS/PC;
REPORT - определение файла статистики с последующим его формированием;
RESULT - добавление числовых результатов в файл DOS;
SAVE - создание файла программы модели для всей или части программы из буфера редактора GPSS/PC;
SHOW - вычисление выражений и печать результатов в окне данных;
STEP - имитация с прохождением сообщением определенного числа блоков, с последующей остановкой моделирования;
STOP - остановка моделирования при появлении/выполнении определенных сообщений и/или блоков;
USERCHAINS - отображение в окне данных содержимого списков пользователя;
WINDOW - открытие большинства окон GPSS/PC.
2.3 Кодирование операторов GPSS/PC
При использовании GPSS/PC для ссылок на числа, блоки или объекты применяются имена. Имя представляет собой алфавитно-цифровую последовательность, длиной до 20 символов, начинающуюся с бук-
вы. Допустимо применение символов только латинского алфавита. В
состав имени могут включаться также символы подчеркивания "_". Именами не могут быть коды операторов GPSS/PC, ключевые слова или коды стандартных числовых атрибутов. При трансляции GPSS/PC присваивает именам уникальные номера, начиная со стартового номера 10000. Для модификации стартового номера необходимо скорректировать файл настройки системы SETTINGS. GPS. В выражениях могут использоваться имена системных переменных путем ссылок на них.
Для принудительного присваивания именам нужных номеров, необходимо, перед использованием имен, с помощью оператора EQU присвоить именам соответствующие номера.
Все числа хранятся GPSS/PС как целые в форме, позволяющей снять ограничения на длину и точность представления чисел. Однако есть ограничения на длину и точность представления чисел, вводимых в систему и расчитываемых системой. Общая длина чисел ограничивается 307 десятичными цифрами, точность их представления - до 15 десятичных цифр после запятой.
Все СЧА возвращают целые значения. Если значение с плавающей точкой присваивается некоторому СЧА, то оно преобразуется в целое число.
Строка описания оператора GPSS/PC состоит из следующей последовательности полей:
- номер строки. Необязательное поле, начинается с первой позиции строки. Содержимым поля может быть десятичное число из символов, в том числе десятичное дробное число, в последнем случае де-
сятичная точка рассматривается как один из семи символов. Пример,
105.7;
- поле метки. Используется в зависимости от типа операции.
Содержимым поля является некоторое имя;
- поле операции;
- поле операндов. Содержимое этих полей, их наличие и количество зависит от типа операции;
- поле комментариев. Необязательное поле. Содержит информацию, поясняющую назначение оператора. В данной версии допускается запись комментариев с использованием прописных и строчных букв латинского алфавита. Отделяется от поля операндов символом ";". Допускается запись комментариев с начала строки. В этом случае в первой позиции строки ставится символ ";" или "*".
Если при записи оператора пропускаются необязательные операнды, то их отсутствие отмечается символом ",".
Встроенный в систему GPSS/PC редактор исходных текстов модулей осуществляет переход к следующему полю строки оператора, при вводе в конце текущего поля пробела или запятой.
Строка описания оператора может содержать до 79 символов.
Завершение ввода строки описания оператора отмечается нажатием клавиши [CR], либо [<---], либо [Enter].
При использовании для создания программ модулей встроенного редактора GPSS/PC последний, управляя перемещением курсора по по-
лям вводимой строки, выдает в начале каждого поля строки подсказку,
поясняющую назначение поля.
Начало строки отмечается символом ">".
Символ "L" отмечает поле метки.
Символ "V" отмечает поле операции.
Символ ";" отмечает поле комментариев.
Символ "X" отмечает поле описания выражения в операторах опи-
сания переменных и блоков.
Символ "Z" отмечает поле описания функций в операторах описания функций.
Символ "O" отмечает поле описания логических указателей или логических отношений в описании блоков, использующих логические условия (ключи).
Символами "A", "B", "C", "D", "E", "F", "G" отмечаются поля операндов. Ввод описания очередного оператора в состав программы модели осуществляется нажатием клавиши [CR] или аналогичных ей. Отказ от ввода описания очередного оператора в программу модели и удаление его из буфера редактора выполняется при нажатии клавиши [Home].
С помощью клавиш [<--] или [Backspace] осуществляется возврат курсора на одну позицию влево с удалением ранее введенного сим-
вола.
Редактор добавляет новые строки в программу, ориентируясь на номер вводимой строки и номера ранее введенных строк. При этом возможно добавление строк в начало программы, в середину или в конец. Возможность указания номеров в виде десятичных дробных чисел позволяет вносить изменения в программу в больших объемах, нежели, чем при использовании в качестве номеров строк целых чисел. Более подробная информация по вводу, корректировке и удалению строк программы модели будет приведена при описании команд GPSS/PC и работы с редактором системы. При описании форматов конкретных операторов GPSS/PC приняты следующие соглашения:
- обозначения полей меток, полей указателей отношений или полей логических указателей, а также полей операндов заключены в условные скобки <...>;
- необязательные поля отмечаются квадратными скобками: [<имя
поля>].
2.3.1. Поле метки
Обращение к блоку производится по идентификатору (символическому имени), помещенному в поле метки при описании этого блока. Те блоки, к которым не производится непосредственное обращение, могут не иметь в поле метки никакого идентификатора.
В операторах описания данных (функций, переменных и таблиц) поле метки обязательно должно быть заполнено.
2.3.2. Поле операндов
В модели на GPSS/PC имена могут использоваться и как операнды. Имени, стоящему в поле А таких блоков как SEIZE, QUEUE, LOGIC и т. д. (в которых подразумевается конкретный объект), присваивается первый свободный номер (из номеров, относящихся к объекту, определяемому типом блока). Если имя появляется в качестве операнда, который не предполагает конкретный объект, имя считается идентификатором блока. Имена блоков заменяются номерами этих блоков. Если это имя не описано (не стоит в поле метки блока), то в выходной распечатке выдается сообщение о неописанном идентификаторе.
При использовании стандартных числовых атрибутов (СЧА) в качестве операндов с символическим адресом, перед именем пишется знак $. Например, W$ARM определяет счетчик текущего числа сообщений W в блоке ARM. Знак $ необходим для того, чтобы отличать идентификатор WARM от описанного выше СЧА.
2.4. Относительная адресация
Если необходимо обратиться к какому-либо блоку, не присваивая ему идентификатора, можно использовать его относительный адрес. В обращении вида ALPHA+n ALPHA представляет из себя блок с символическим адресом, а n - число блоков, которое отсчитывается от блока ALPHA.
Например,
TRANSFER BOTH, ARM+1, ARM+6
Но такой метод обращения можно применять только в том случае, если последовательные номера блоков довольно близки по значению, так как только в этом случае появляется возможность произвольного введения дополнительных карт, воздействующих на перемещение. Например, введение блока между блоком ARM+1 и блоком ARM+6 потребовало бы изменения аргумента поля С блока TRANSFER.
Адресация может быть относительной и по отношению к самому блоку. Это осуществляется при помощи записи *+/-n. Например,
TRANSFER ,*+3
В этом случае сам блок TRANSFER является ориентировочным блоком. Сообщение пытается войти в третий, относительно блока TRANSFER, блок.
2.5. Косвенная адресация
Самый простой прямой способ адресации в GPSS/PC показан на следующих примерах:
SEIZE 10 занять устройство 10
LEAVE P4 освободить многоканальное устройство с но-
мером, задаваемым параметром 4
При таком способе конкретный номер объекта задается либо как константа (первый пример), либо с помощью использования стандартных числовых атрибутов (второй пример). Подобные ссылки на определенные величины не зависят от каких-либо свойств сообщения, обрабатываемого в данный момент.
Использование прямой адресации может привести к введению большого числа дополнительных блоков только для того, чтобы записать номера объектов в СЧА, т. е. к увеличению объема модели. Иногда при моделировании возникают ситуации, при которых в качестве исходного данного должен использоваться СЧА, и желательно, чтобы номер используемого объекта зависел от свойств сообщения, которое ссылается на это исходное данное. В частности, может быть полезным, чтобы номер объекта являлся величиной параметра сообщения. Существенно сократить объем модели и использовать зависимость номеров объектов от свойств сообщений позволяет косвенная адресация. Общий вид косвенной адресации СЧА*СЧА[j]. Ниже приводятся примеры косвенной адресации.
SEIZE P*X1
Занять устройство, номер которого содержится в параметре; номер этого параметра определяется содержимым ячейки X1.
SAVEVALUE 1,X*P2,X
Поместить в ячейку SAVEVALUE c номером 1 значение, содержащееся в ячейке, номер которой определяется параметром 2.
В дальнейшем по тексту документа используется конструкция СЧА*<параметр>, где <параметр> - это либо <номер параметра> , либо <имя параметра>, либо $<имя параметра>.
2.6. Ограничения при использовании косвенной адресации
Ограничения при использовании косвенной адресации связаны с применением вторичных стандартных числовых атрибутов. В приведенных ниже примерах вторичные СЧА следуют за знаком "*".
*P2 X*V$VARX
FN*X$SAVEB FN*FN$FUNCCX
MX*X$AAA(P2,V$VAR)
Если вторичными СЧА являются переменные (V), функции (FN) и матрицы ячеек (примеры из правого столбика), то операнды, содержащие их, нельзя использовать в следующих случаях:
1) в качестве элементов переменных, а также переменных с плавающей точкой и булевских переменных;
2) в качестве аргумента функции или в качестве значений функции типа Е или М;
3) для описания номера строки или столбца матрицы в СЧА матрицы ячеек.
Примеры правильного использования косвенной адресации:
ADVANCE MX*V2(FN*P,2)
VARIABLE MX*P2(5,2)/5 BBB VARIABLE V*P2*FN*P3
XXX FUNCNION V*X$ONE, D15 SEIZE X*MX$BYTEM(1,2)
Примеры неправильного использования косвенной адресации:
ADVANCE MX*V2(FN*V4,2) ; V2 - ошибочный СЧА
BBB VARIABLE V*P2*FN*V3 ; V3 - ошибочный СЧА
XXX FUNCTION V*FN$YYY, D15 ; FN - ошибочный СЧА
3. ВНУТРЕННЯЯ ОРГАНИЗАЦИЯ
Существует много способов организации работы интерпретаторов программ, непосредственно осуществляющих процесс моделирования. Однако можно выделить общие для всех способов операции. Интерпретатор
должен прежде всего определять ближайшее следующее событие, которое
должно произойти. После того, как определено следующее событие (или
события), интерпретатор должен выполнить ряд проверок, чтобы определить, существуют ли в системе условия для наступления этого события. Если условия существуют, то интерпретатор переходит к обработке события. В этот момент времени интерпретатор может собирать некоторую статистическую информацию. Эта статистика впоследствии
является частью выходных данных, по которым можно судить о работе моделируемой системы. Этот основной цикл (выявление ближайшего следующего события и его обработка) повторяется столько раз, сколько нужно для завершения моделирования. По окончании моделирования интерпретатор выполняет дополнительную статистическую обработку информации, накопленной в процессе моделирования.
Из сказанного выше ясно, что основной задачей, которую выполняет интерпретатор, является просмотр возможных событий. Этот просмотр должен быть организован так, чтобы затрачиваемое на него время было минимальным.
Необходимо также рассмотреть вопрос об изменении условного времени. Существует два способа изменения времени, и выбор одного из этих способов влияет на организацию просмотра событий.
При первом способе значение времени изменяется с постоянным приращением в 1 единицу. В этом случае целью просмотра является выяснение того, должны ли произойти в данный момент какие-либо события. Если таких событий нет, то значение условного времени изменяется постоянным приращением в 1 единицу до тех пор, пока время наступления события не совпадет со значением условного времени.
При втором способе значение условного времени заменяется на время наступления следующего события. В этом случае нужны 2 просмотра: первый - для определения следующего значения условного времени, и второй - для выявления всех событий, которые могут произойти в этот момент.
В случае, когда события распределены во времени не равномерно, как обычно и бывает при исследовании большинства систем, второй из описанных способов, с точки зрения затрат машинного времени, более выгоден. В GPSS/PC использован именно этот способ.
Если использовать некоторый специальный способ расположения событий в хронологическом порядке, то можно значительно сэкономить машинное время, так как отпадает необходимость каждый раз просматривать весь список событий. При этом следующее ближайшее событие (или события) располагаются в начале списка. Однако, если в системе в любой заданный момент времени присутствует много активных событий, перегруппировка информации при упорядочении списка обычно занимает больше времени, чем его просмотр. Это затруднение можно преодолеть, собрав все события вместе, не сортируя их. При этом каждое событие связывается со следующим и предыдущим событиями. Когда нужно включить в эту последовательность новое событие, список пересматривается, но перемещения всей информации не требуется. Первое и последнее события в этом списке соответствующим образом идентифицируются.
Следующим вопросом, который необходимо учитывать при организации операции просмотра, является возможность наступления нескольких событий в один и тот же момент условного времени. В таком случае необходимо сначала определить, требует ли логика моделируемой системы, чтобы события, происходящие в один и тот же момент времени, были расположены в определенном порядке. Если в моделируемой системе существуют такие логические ограничения, то необходимо просмотреть все события, которые должны произойти в данный момент времени, и, прежде чем приступать к их обработке, определить их относительные приоритеты.
При создании эффективной процедуры просмотра важно также организовать просмотр сообщений, движение которых заблокировано, например, сообщений которые не могут войти в блок SEIZE из-за того, что нужное устройство занято. Простейшим решением является просмотр всех заблокированных сообщений для каждого нового значения условного времени и выбор тех, которые могут произойти в данный момент. Если моделируемая система перегружена, то этот способ с точки зрения затраты машинного времени очень невыгоден, так как каждое сообщение просматривается много раз до того, как выйдет из состояния блокировки.
Если причиной перевода сообщения в состояние блокировки является состояние системы в данный момент времени, то гораздо более эффективен способ обработки, при котором заблокированные по этой причине сообщения вообще не просматриваются до тех пор, пока не произойдет соответствующее изменение состояния системы. Такой способ может быть реализован, например, путем регистрации для каждой единицы оборудования тех сообщений, движение которых заблокировано из-за состояния в данный момент именно этой единицы оборудования. В момент, когда программа изменяет состояние этой единицы оборудования, она должна сразу же просмотреть сообщения, ожидающие этого изменения, и возобновить эту обработку.
3.1. Списки
В GPSS/PC сообщения хранятся в списках. Всего имеется 5 типов списков, и сообщение в любой момент времени может находиться в одном из списков. В списке текущих событий находятся сообщения, соответствующие событиям, время наступления которых меньше (сообщения, которые должны были начать двигаться в некоторый момент в прошлом, но были заблокированы) или равно текущему времени.
Список будущих событий содержит сообщения, соответствующие событиям, время наступления которых больше текущего времени, т. е. событиям, которые должны произойти в будущем. Соответствующие этим событиям сообщения находятся в блоках, задающих время наступления события явным образом, например, в блоках ADVANCE и GENERATE.
Список прерываний содержит те отдельные сообщения, обслуживание которых соответствующими устройствами было прервано, а также те, которые вызвали прерывание. Список синхронизируемых сообщений содержит сообщения, находящиеся в данный момент в состоянии сравнения. Список пользователя содержит сообщения, удаленные пользователем из списка текущих событий и помещенные в список пользователя как временно неактивные.
3.1.1. Список текущих событий
В списке текущих событий сообщения расположены в порядке убывания приоритета (т. е. сообщения с более высокими приоритетами расположены ближе к началу списка); внутри класса сообщений с одинаковыми приоритетами сообщения располагаются в порядке поступления их в список. Каждое сообщение в списке текущих событий может находиться либо в активном состоянии (т. е. просматриваться в данный момент условного времени), либо в состоянии задержки.
Если сообщение находится в активном состоянии, то процедура, осуществляющая просмотр, пытается продвигать эти сообщения к следующим блокам. Если движение сообщения блокируется каким-либо оборудованием, то вход в следующий блок выполнить невозможно, и сообщение переводится в состояние задержки.
Сообщения в таком состоянии игнорируются процедурой просмотра и помещаются в соответствующий список задержки.
Списки задержки представляют собой списки сообщений, ожидающих изменения состояния оборудования. Все эти виды списков задержки перечислены ниже.
Устройства. Устройство занято, устройство свободно, устройство обслуживает прерывание, устройство работает без прерываний, устройство доступно, устройство недоступно.
Многоканальные устройства. Устройство заполнено, устройство не заполнено, устройство пусто, устройство не пусто, сообщение может войти в устройство, устройство доступно, устройство недоступно.
Логические переключатели. Логический переключатель установлен, логический переключатель сброшен.
Таким образом, заблокированное сообщение (например, в блоке SEIZE из-за занятости устройства) будет переведено в состояние задержки и помещено в список задержки "устройство занято" для данного устройства. Позже, когда другое сообщение освободит устройство, все сообщения списка задержки "устройство занято" для данного устройства будут переведены в активное состояние, и интерпретатор отметит, что произошло изменение состояния устройства. Как только завершается обработка активного сообщения, запускается процедура просмотра,
и все сообщения, которые в результате изменения состояния устройства получили возможность двигаться, будут продвинуты.
То же происходит с любым из перечисленных выше списков задержки в момент, когда происходит соответствующее изменение состояния оборудования. Таким образом, интерпретатор не пытается продвинуть
сообщение, заблокированное из-за состояния оборудования, он ожидает
изменения состояния оборудования.
Такой способ обработки заблокированных сообщений дает значительную экономию машинного времени.
Пользователю следует учитывать, что для сообщений, заблокированных в блоке TEST или пытающихся выйти из блока TRANSFER (в режимах ALL, BOTH), списков задержки не существует. В этих случаях сообщения остаются в активном состоянии в списке текущих событий и участвуют во всех просмотрах.
3.1.2. Список будущих событий
Список будущих событий содержит сообщения, у которых намечен -
ное время начала движения больше, чем текущее время. Эти сообщения
размещаются в списке строго в порядке возрастания времени начала
движения, т. е. сообщение, время начала движения которого является
ближайшим к значению текущего времени, стоит в списке первым, а сообщение с максимальным временем начала движения - последним. Приоритеты сообщений не влияют на порядок сообщений в этом списке.
3.1.3. Списки пользователя
Списки пользователя представляют собой списки сообщений, удаленных пользователем из списка текущих событий при помощи блока LINK.
3.1.4. Списки прерываний
Списки прерываний содержат сообщения, обслуживание которых прервано на одном или более устройствах.
Сообщения в списках прерываний расположены в порядке поступления. Эти списки никогда не обрабатываются как списковые структу-
ры (имеется ввиду изменение адресов сообщений при вставке в середину списка); сообщения по мере надобности заносятся в эти списки и извлекаются из них. Все сообщения, захватившие устройства (пройдя блок SEIZE), и прерванные другими сообщениями (прошедшими блок PREEMPT), помещаются в эти списки до тех пор, пока не сняты все условия прерывания. Если условия прерывания не снимаются, сообщение может оставаться в списке прерываний неопределенно долго.
3.1.5. Списки синхронизируемых сообщений
Списки синхронизируемых сообщений содержат сообщения, которые:
- ожидают в блоках ASSEMBLE или GATHER прихода заданного числа сообщений из того же семейства;
- находятся в блоках MATCH в ожидании поступления сообщения из того же семейства на сопряженный блок MATCH.
Эти списки также никогда не обрабатываются как списковые структуры и представляют собой поднаборы набора сообщений системы.
3.2. Общая внутренняя последовательность событий
Теперь, после краткого рассмотрения организации ожидания сообщениями обслуживания, можно рассмотреть общую внутреннюю последовательность событий. Эти события могут быть разбиты на три фазы: "изменение значения условного времени", "просмотр списка текущих событий", "движение сообщений".
.2.1. Изменение значения условного времени
Предположим, что интерпретатор уже обслужил все события, которые должны были произойти в данный момент времени. Далее интерпретатор должен увеличить значение условного времени так, чтобы оно стало равным времени наступления ближайшего события в будущем. Поскольку в списке будущих событий сообщения расположены в порядке возрастания времени наступления, новое значение условного времени равно времени наступления первого события из списка будущих событий (каждому из сообщений в списке событий соответствует свое время наступления события). Таким образом, интерпретатор устанавливает значение условного времени равным времени наступления события для первого сообщения из списка будущих событий. Это сообщение передается на обработку в список текущих событий. В этот момент фактически и происходит изменение условного времени. Однако, интерпретатор должен проверить, нет ли еще других событий, которые должны произойти в тот момент условного времени. Для этого интерпретатор проверяет время наступления события для следующего события из списка будущих событий. Если время наступления события для следующего сообщения также равно новому значению текущего времени, то это сообщение также переводится на обработку в список текущих событий, а интерпретатор переходит к анализу времени наступления события для следующего сообщения из списка будущих событий. Этот процесс продолжается до тех пор, пока в списке будущих событий не окажется сообщение, для которого время наступления события больше, чем текущее значение условного времени, или пока в списке будущих событий не останется ни одного сообщения. Завершение просмотра сообщений из списка будущих событий указывает на то, что все сообщения, которые нужно обработать в данный момент условного времени, переведены в список текущих событий.
3.2.2. Просмотр списка текущих событий
Выбрав все нужные сообщения из списка будущих событий, интерпретатор начинает просматривать список текущих событий. При этом интепретатор пытается продвинуть все сообщения, находящиеся в активном состоянии в списке текущих событий, и изменить соответствующим образом состояние модели. Прежде всего устанавливается в 0 "флаг изменения состояния". Этот флаг показывает, произошло или не произошло изменение состояния какой-либо единицы оборудования в данный момент времени. Так как в начале обработки событий, относящихся к новому значению условного времени, никакие изменения в состоянии оборудования произойти еще не могли, флаг устанавливается в 0. Затем процедура просмотра выбирает первое сообщение из списка текущих событий и проверяет, установлен ли в 0 индикатор просмотра данного сообщения. Индикатор просмотра показывает, в каком состоянии находится данное сообщение: в активном или в состоянии задержки. Если сообщение находится в активном состоянии, то интерпретатор пытается продвинуть его на столько блоков, на сколько возможно, пока не встретятся блоки, содержащие блокирующие условия или явно заданную задержку во времени. Если же сообщение находится в состоянии задержки из-за того, что движение сообщения заблокировано состоянием оборудования (т. е. сообщение находится в списке задержки), или в случае,
когда интерпретатор закончил продвижение сообщения, обслуживается
следующее сообщение из списка текущих событий.
Интерпретатор продолжает действовать таким образом до тех пор, пока не просмотрит весь список. К этому времени все события, относящиеся к данному моменту условного времени, уже обработаны, и после этого наступает фаза изменения значения условного времени.
3.2.3. Продвижение сообщений
Как было сказано выше, если сообщение в списке текущих событий находится в активном состоянии, интерпретатор пытается его продвинуть. Если сообщение может двигаться, интерпретатор его двигает и выполняет операции, соответствующие проходимому сообщением блоку. После этого интепретатор определяет, не относится ли блок, в который вошло сообщение, к специальному типу BUFFER. Если да, то интерпретатор немедленно прекращает обработку сообщения и начинает просмотр с начала списка текущих событий.
Если блок, в который вошло сообщение, не является блоком типа BUFFER, интерпретатор проверяет, не произошло ли при выполнении предыдущего блока изменение состояния оборудования. Если изменение произошло, интерпретатор устанавливает в "1" флаг изменения состояния, устанавливает в "0" индикаторы просмотра для всех сообщений, находящихся в списке задержки, связанном с соответствующей единицей оборудования.
Если в выполняемом блоке не задана явным образом задержка сообщения, интерпретатор сразу же пытается продвинуть сообщение через следующий блок. Этот процесс продолжается до тех пор, пока сообщение не получает отказ при попытке войти в блок, не встречает блок ADVANCE с заданной явно задержкой во времени или не уничтожается блоком TERMINATE или ASSEMBLE.
Если движение сообщения блокируется из-за состояния оборудования, то индикатор просмотра для этого сообщения устанавливается в "1", это означает, что сообщение перешло в состояние задержки. Сообщение помещается в соответствующий список задержки, и затем интерпретатор определяет, произошло ли изменение состояния оборудования во время обработки этого сообщения. Если движение сообщения прекращено из-за заданной для него задержки во времени, оно помещается в список будущих событий, и затем интерпретатор также проверяет, не изменилось ли состояние оборудования.
Если при обслуживании текущего активного сообщения произошло изменение состояния оборудования, просмотр начинается сначала, и снова обслуживаются все сообщения списка текущих событий, находящиеся в активном состоянии. Если изменение состояния оборудования не происходило, интерпретатор снова обращается к списку текущих событий и проверяет, остались ли в нем сообщения, которые нужно обработать.
Описанная выше последовательность событий происходит для каждого нового момента условного времени до тех пор, пока счетчик завершения моделирования не станет равным 0; по выполнении этого условия моделирование прекращается.
_


