Научно-производственное объединение

"ЦЕНТРПРОГРАММСИСТЕМ"

СИСТЕМА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

ДЛЯ ИМИТАЦИОННОГО МОДЕЛИРОВАНИЯ

НА ЯЗЫКЕ 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; по выполнении этого ус­ловия моделирование прекращается.

_