Моделирование информационных технологий на GPSS

Нв2(8) 2007

А.А. Емельянов

Моделирование информационных технологий

на GPSS

В последние годы имитационное моделирование (англ. simulation — симуляция) широко применяется в области исследований информационных процессов и IT. В вузах для этого задействуют различные системы имитационного моделирования. Однако самыми популярными пока являются GPSS World и Actor Pilgrim — родственные системы, используемые в различных областях, имеющие схожую идеологию, но по-разному реализованные. Статья предназначена для читателей, которые совсем не знают GPSS, но хотели бы в ускоренном режиме научиться составлять работающие модели IT с помощью GPSS World.

Язык и система имитационного моделирования йРББ

Любая моделируемая система может быть описана в терминах небольшого набора абстрактных элементов — объектов. Подобным же образом логические правила, лежащие в основе систем, могут быть сведены к обобщенному набору простых операций. Таким образом, язык моделирования состоит из абстрактных объектов и операций. Специфические элементы и логические правила конкретных систем представляются в терминах абстрактных объектов и операций этого языка. Комбинируя элементы и логические операции модели, можно выполнять на ней эксперименты значительно быстрее и с меньшими затратами, чем в реальной системе. GPSS обеспечивает такой системный язык. Он строится из наборов простых объектов, разделяемых на четыре класса: динамические, аппарат-но-ориентированные, статистические и операционные.

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

Аппаратно-ориентированные объекты соответствуют элементам оборудования, которые управляются транзактами. Они включают в себя устройства, накопители и логические переключатели. Устройство может обслуживать одновременно только один тран-закт. Оно представляет собой потенциальное «узкое место». Накопитель может обслуживать одновременно несколько тран-зактов. Логический переключатель является бистабильным индикатором, который, принимая при прохождении одного транзакта состояние «включено» или «выключено», может изменять путь других транзактов.

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

Наконец операционные объекты, называемые блоками, формируют логику системы, давая транзактам указания, куда идти и что делать дальше. Эти блоки в совокупности с другими классами объектов, указанными выше, и составляют средства языка GPSS.

Для описания структур различных систем широко используются блок-схемы. Они

83

Нв2(8) 2007

8

£

0 §

1 *

состоят из последовательности блоков, описывающих определенный этап действия системы. Линии, соединяющие блоки, указывают на порядок прохождения через систему или описывают последовательность событий, которые нужно исследовать. Альтернативные ситуации, которые могут возникнуть в системе, изображаются более чем одной линией, выходящей из блока. И наоборот, один блок может иметь несколько входящих линий; так отображается тот факт, что один блок является общим для нескольких последовательностей событий. Выбор пути при наличии нескольких вариантов может быть случайным или логическим, т. е. зависящим от состояния системы в момент выбора. Оба эти метода могут поддерживаться в ОРББ.

Хотя блок-схема представляет собой обычное средство описания системы, обозначения, которые в ней используются, не стандартизованы и зависят от системы и программиста. Для симулятора ОРББ были введены некоторые условности и общие представления о моделируемых системах, каждое из которых соответствует некоторому действию или условию, обычно встречающемуся в системах. В блок-схеме могут быть введены случайные величины, предусмотрены различные процедуры формирования статистик. В процессе моделирования транзактам могут присваиваться приоритеты различных уровней, а сами транзакты могут обеспечивать принятие сложных логических решений. Возможно также моделирование взаимосвязи переменных в системе, таких как длина очереди и интенсивность поступления транзактов, стоимость и время обработки. Для того чтобы смоделировать систему, необходимо составить ее описание в терминах ОРББ. Затем симу-лятор генерирует транзакты, продвигает их через заданные блоки и выполняет действия, соответствующие блокам.

Симулятор ОРББ передвигает транзакты от блока к блоку аналогично тому, как движутся в реальной системе единицы потоков, изображаемые транзактами. Каждое

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

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

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

84

Главной задачей любой моделирующей программы является просмотр, посредством которого проверяются все возможные события. Транзакты в ОРББ входят в цепи. Существует пять видов цепей, и транзакт может находиться в любой момент времени в любой из этих цепей. Цепь текущих событий включает в себя те транзакты, планируемое время наступления событий которых равно или меньше текущего часового времени (к последним относятся транзакты, движение которых планировалось в некоторый предыдущий момент времени, но они в этот момент были блокированы). Цепь будущих событий включает в себя транзакты, планируемое время наступления событий которых больше текущего часового времени, т.е. наступление этих событий должно произойти в будущем. Цепь прерываний включает в себя отдельные транзакты, обслуживание которых занятыми или захваченными ими устройствами прервано. Цепь парных транзактов содержит транзакты, которые в текущий момент времени имеют статус парности (т.е. ожидают прибытия синхронизирующих транзактов, ниже «синхронизация движения транзактов»). И, наконец, цепь пользователя включает в себя те тран-закты, которые программист удалил из цепи текущих событий и поместил в цепь пользователя в качестве временно пассивных тран-зактов.

Цепь текущих событий выстраивается в порядке убывания приоритетов транзак-тов, а в пределах каждого класса приоритета в порядке вхождения транзактов в цепь.

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

Модель-программу на языке ОРББ пишут построчно по определенному формату, который содержит три различных поля: метки (обычно колонки 2-6), операции (колонки 8-18) и переменных (начиная с колон-

№2(8) 2007

ки 19). Поле переменных содержит подпо- § ля, которые обозначают А, В, С, ..., Н. * Последующие подполя отделяются от пре- | дыдущих запятыми. Если подполе, которое ^ должно стоять между указанными подполя- ^ ми, пропущено, то вместо него необходимо ставить запятую. Конец поля переменных обозначается первой пустой клеткой, считая от колонки 19. Любое подполе, не определенное пользователем в поле переменных, программа считает пустым. Любая информация, следующая за пропуском после поля переменных, воспринимается как комментарий.

Каждый объект ОРББ требует определенного числа ячеек основной памяти, в которых во время моделирования хранятся атрибуты объекта. Атрибуты объектов, к которым может обращаться программист, называются стандартными числовыми атрибутами (СЧА). Все СЧА имеют одно- или двухбуквенные мнемонические обозначения. Мнемоническое обозначение указывает на тип атрибута, а целочисленное — на конкретный атрибут.

Номера блоков можно определять символическими обозначениями. При этом они должны включать от трех до пяти знаков, не содержащих пробел, первые три из которых обязательно буквы. Эти ограничения необходимы для того, чтобы избежать смешивания атрибутов системы и символов. Дополнительным ограничением является недопустимость таких специальных знаков, как «+», «-», «*» и т.д.

Если в полях А, В или С блока представлены стандартные числовые атрибуты N или Wj (где} — номер атрибута), то необходимо, чтобы номер блока был представлен в качестве аргумента. Если этот номер определяется символически, то такое представление должно быть отличным от мнемонических обозначений, указанных СЧА (Ы или W). В качестве префикса символическое обозначение должно использовать знак доллара $. Всем символам в поле переменных для удобства может предшествовать знак доллара. Пользователь может использовать относительную адресацию. В символи-

^85

Нв2(8) 2007

S3

0

s

1 *

ческой записи CROSS+n символ CROSS указывает на нужный блок, а число n — на номер блока, отсчитываемого от номера блока CROSS.

При косвенной адресации предполагается, что нужный аргумент представлен некоторым параметром. Последний обозначается звездочкой *, за которой следует целое число, определяющее соответствующий параметр. Например, S*10 соответствует текущему значению накопителя, номер которого задан параметром 10. Косвенная адресация может производиться с помощью любого СЧА, кроме C1, M1 и RNn (где n — номер блока).

Далее рассмотрим типы блоков, применяющихся для представления оцениваемых систем, и дадим описание управляющих команд. При этом объекты сгруппированы логически в соответствии с выполняемыми ими функциями.

Аппаратно-ориентированные блоки

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

• коэффициент использования устройства, равный отношению суммарного времени, в течение которого устройство было занято и/или находилось в состоянии захвата, к общему времени моделирования;

• общее число транзактов, поступивших на данное устройство;

• среднее время использования устройства одним транзактом;

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

Четыре типа блоков — SEIZE, RELEASE, PREEMPT и RETURN обеспечивают тран-зактам пользование этими элементами обслуживания.

Блок SEIZE служит для записи факта использования устройства входящим в этот блок транзактом. Когда транзакт пытается войти в блок SEIZE осуществляется проверка свободно ли устройство, номер которого задан значением аргумента А этого блока. Транзакту не разрешается занимать устройство, которое уже занято или захвачено другим транзактом. Устройство будет оставаться занятым до тех пор, пока находящийся в нем транзакт не войдет в соответствующий блок RELEASE, в котором он освобождает устройство. Между блоками SEIZE и RELEASE может быть расположено произвольное число блоков. Транзакт может занимать и прерывать обслуживание любого количества устройств.

Например:

SEIZE 14

; Занятие устройства 14.

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

Например:

RELEASE 14

; Освобождение занятого устройства 14.

Блок PREEMPT выполняет для занятого устройства операции, аналогичные тем, которые выполняет блок SEIZE для свободного устройства. Важно отметить, что транзакт может захватить (прервать работу) устройства, занятого в данный момент другим тран-

86

зактом, посредством блока PREEMPT, но прервать его работу посредством блока SEIZE — он не может. Прерывание, сгенерированное транзактом на каком-либо устройстве, определенном в поле А, не снимается до тех пор, пока транзакт, генерировавший прерывание, не войдет в блок RETURN. Обслуживание продолжается после снятия прерывания. Транзакт, вошедший в блок PREEMPT, мог ранее занять любое число других устройств и прервать обслуживание любого числа других транзактов на занятых ими устройствах. В случае, если устройство уже захвачено, вход другим транзактам в блок PREEMPT запрещается. В момент окончания захвата устройства предыдущим транзактом новый, ожидающий входа в блок PREEMPT, получает возможность использовать устройство. Исключением из описанных выше правил является случай работы блока PREEMPT в режиме с приоритетами, когда в поле В указывается символ «PR». В качестве альтернатив обработки транзактов, отстраненных от обслуживания, могут быть использованы следующие соображения:

1)поле С, определяющее какой-либо другой блок, к которому отсылается отстраненный от обслуживания транзакт;

2) если отстраняющийся от обслуживания транзакт находится в блоке ADVANCE, оставшееся время обслуживания вычисляется и помещается в параметре, определенном в поле D блока PREEMPT, а сам транзакт направляется в другой блок, указанный в поле С. При этом транзакт сохраняет право на обслуживание его устройством. Если в поле Е блока PREEMPT записано «RE», то выполняются действия п. 1, но при этом отстраненный транзакт теряет право на пользование устройством.

Например:

PREEMPT 2

; Захват устройства 2.

Блок RETURN выполняет для устройства с прерванным обслуживанием операции,

Нв2(8) 2007

аналогичные тем, которые выполняет блок § RELEASE для занятого устройства. Тран- * закт, вошедший в блок RETURN, покидает | устройство, в котором он вызвал прерыва- ¡4 ние. Снятие прерывания происходит в мо- ^ мент входа транзакта в блок. После этого транзакт не влияет на состояние устройства даже в том случае, если он не может войти в следующий по номеру блок и остается в блоке RETURN. Транзакт никогда не задерживается на входе этого блока. Прерывание может быть снято только тем транзак-том, которым оно было генерировано.

Например:

RETURN2

; Освобождение захваченного ; устройства 2.

Два типа блоков — ENTER и LEAVE — предназначены для представления в блок-схеме случаев параллельного обслуживания элементов. Каждый из них определяет номер многоканального обслуживающего устройства (накопителя STORAGE) и количество занимаемых или освобождаемых мест в накопителе. Статистики использования накопителя включают в себя:

• среднее содержимое накопителя, т. е. среднее число занятых транзактами мест в накопителе из числа, определяющего его емкость;

• коэффициент использования накопителя, равный среднему содержимому накопителя, отнесенному к его емкости;

• общее число вхождений в накопитель, т. е. в блоки ENTER;

• среднее время пребывания транзакта в накопителе, т.е. среднее время с момента вхождения в накопитель до момента выхода из него;

• максимальное содержимое накопителя за время моделирования.

Накопитель описывают с помощью оператора STORAGE. Поле метки используется для указания номера накопителя, а поле А

^87

Нв2(8) 2007

S3

0 §

1 *

для указания его максимальной емкости — числа каналов обслуживания. Каждый новый оператор заменяет предыдущий с тем же номером. Максимально допустимая емкость накопителя 231-1. В начальный момент предполагается, что каждый накопитель свободен.

Например:

4 STORAGE 100

; Емкость накопителя 4 равна 100.

Транзакт не может войти в накопитель, если он уже заполнен или число свободных единиц накопителя меньше, чем требует транзакт. В поле А блока ENTER задается номер накопителя, а в поле В — число единиц емкости, которые транзакт должен занять. Если поле В пусто, число занимаемых единиц емкости принимается равным 1. Если транзакт не может войти в накопитель, то он будет задержан до того момента, пока в накопителе не освободится требуемое число единиц емкости.

Например:

ENTER FN3,100

Вхождение транзакта в накопитель, номер которого задан функцией FN3, и занятие 100 единиц емкости накопителя.

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

Например:

LEAVE 6, FN*11

Вошедший в блок транзакт освобождает в накопителе 6 столько единиц емкости, каково значение функции, определенной в параметре 11.

Для управления потоком транзактов в блок-схеме может быть использован тип оборудования, называемый логическим переключателем, который способен находиться в одном из двух состояний «включен» или «выключен». Все переключатели в начале программы имеют сброшенное состояние.

Блок LOGIC устанавливает состояние логического переключателя, которое может быть проверено любым транзактом в любой части модели. Когда транзакт входит в блок LOGIC, состояние логического переключателя, номер которого задан в поле А, может быть изменено в зависимости от мнемонического обозначения в поле операции следующим образом:

S —логический переключатель устанавливается в состояние «включен»;

R — логический переключатель устанавливается в состояние «выключен»;

I — логический переключатель инвертируется, т. е. если он был включен, то выключается, и наоборот.

Мнемонические обозначения S, R или I записываются в позиции 14 оператора LOGIC. Состояние логического переключателя позволяет сделать выбор одного из двух возможных направлений для потока транзактов.

Например:

LOGIC R 165

; Логический переключатель 165 ; устанавливается в состояние ; «выключено».

Транзактно-ориентированные блоки

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

88

ки и копирования транзактов — GENERATE, TERMINATE, ADVANCE, SPLIT; синхронизации движения транзактов — ASSEMBLE, MATCH, GATHER; изменения параметров транзактов, отметки времени и определения числа объектов, находящихся в заданном состоянии —ASSIGN, INDEX, MARK, COUNT, SELECT; модификации потока — TRANSFER, LOOP, TEST, GATE; изменения приоритетов транзактов, а также удаления транзактов из цепи текущих событий и возвращения их в эту цепь — PRIORITY, LINK, UNLINK.

Создание, уничтожение и задержка транзактов

Блоки GENERATE генерируют транзак-ты. Эти блоки используются для изображения источников транзактов в системе. Интенсивность генерации определяется заданными интервалами времени между моментами генерации последовательных транзактов. Созданные транзакты переходят к следующему по номеру блоку. Когда в фазе ввода во входной программе встречается блок GENERATE, сразу генерируется один тран-закт. Каждому создаваемому транзакту может быть задан приоритет в поле Е. Пустое поле Е соответствует нулевому приоритету генерируемых транзактов. Транзакт выйдет из блока GENERATE по истечении интервала времени, вычисленного с учетом среднего значения времени, заданного в поле А, и модификатора, заданного в поле В.

Значение аргумента поля А не должно превышать 999 999. Среднее значение времени может быть модифицировано аргументом поля В одним из следующих способов:

1) посредством модификатора интервала. При этом интервал изменения основного времени может быть задан константой, значение которой не должно превосходить среднего времени. Эта константа определяет интервал, в котором времена распределены равномерно. Любое из (2B+1) целых чисел, заключенных в интервале (А-В, А+В), будет выбираться с вероятностью 1/(2B+1);

Ия2(8) 2007

2) посредством модификатора-функции. § При этом в поле В записывается модифи- * катор-функция, а вычисленное значение ат- | рибута, заданного в поле А, умножается на ¡4 значение функции, заданной в поле В. На ^ каждом этапе берется только целая часть значения.

Поскольку транзакт генерируется в процессе работы программы ввода, используемые для задания среднего значения времени и модификатора функции и переменные должны быть заданы раньше блока GENERATE. Если первое время формирования транзакта получено равным 0, оно всегда принимается симулятором равным 1. Среднее значение предполагается равным 1, если поле А является пустым, а модификатор определяется полем В. Поле С интерпретируется как интервал смещения и в случае его определения рассматривается без модификаций как временной интервал, предшествующий возникновению в блоке первого транзакта. Поле D ограничивает число транзактов, которые должны быть созданы блоком GENERATE. Если это поле является пустым, блок будет генерировать транзакты неопределенно долго. Число параметров, назначаемых новому транзакту, определяется полем F этого блока. Если поле F пусто, то каждому транзакту назначается 12 параметров. Пользователь может выделить для параметров либо полное слово F, либо полуслово Н, причем указанные символы помещаются в поле G.

Например:

GENERATE 10,2,1000,10,4

; Первый транзакт появляется на выходе ; блока в момент времени 1000 единиц. ; Блок создает всего 10 транзактов, ; имеющих уровень приоритета, ; равный 4. Среднее значение времени ; между моментами возникновения ; транзактов равно 10; реальное ; значение времени находится в пределах

; от 8 до 12 единиц.

^89

Нв2(8) 2007

§3

0

s

1 *

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

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

Например:

TERMINATE 2

Каждый транзакт, входящий в блок, вычитает 2 из общего числа транзактов, которые должны быть выведены из системы до окончания процесса моделирования.

Блок ADVANCE позволяет задерживать движущиеся в блок-схеме транзакты и вычисляет интервал времени, в течение которого вошедший в блок транзакт должен в нем оставаться. Длина интервала времени вычисляется также как в блоке GENERATE, исходя из среднего времени, заданного в поле А, и модификатора, заданного в поле В. Транзакт в любой момент может беспрепятственно войти в блок ADVANCE. При выходе из блока транзакт переходит к следующему по номеру блоку.

Например:

ADVANCE 500,FN

Вошедший в этот блок транзакт задерживается на величину времени, равную 500xFN2.

Блок SPLIT выполняет функцию копирования входящего в него транзакта. Число создаваемых копий задается аргументом поля А. Если вычисленное значение аргумента поля А равно 0, то блок SPLIT не выполняет никаких операций и вошедший в него транзакт переходит к следующему по номеру блоку. Все копии создаются

в момент вхождения транзакта в блок SPLIT. После создания копий исходный транзакт пытается перейти к следующему по номеру блоку, а все копии исходного транзакта переходят к блоку, номер которого задан в поле В блока SPLIT, причем значение аргумента поля В для каждой копии вычисляется заново. В поле С может быть задан номер параметра, используемого для присвоения копиям последовательных номеров и хранения значений этих номеров. Поле D блока SPLIT используется для задания числа параметров, выделяемых каждой копии исходного транзакта. Если поле D пусто, то каждая копия имеет столько же параметров, сколько их имеет исходный транзакт и значения всех параметров исходного транзакта переписываются в соответствующие параметры копий. Если в поле D задано число параметров копий, то переписываются значения только тех параметров транзактов, для которых есть соответствующие параметры копий (т. е. параметры с такими же номерами). Если копия имеет большее число параметров, чем исходный транзакт, то все дополнительные параметры имеют нулевые значения. Формат параметров исходных транзактов сохраняется для всех копий. Помимо значений параметров в каждую копию записываются значение приоритета и отметки времени исходного транзакта. Вторичные транзакты являются независимыми в своем движении согласно блок-схеме модели, за исключением случаев, когда они могутбыть синхронизированы использованием специальных блоков.

Например: SPLIT 6,NEXTY,10

Основной транзакт направляется в следующий по порядку блок, а 6 его копий — в блок NEXTY. Если параметр 10 на входе в блок имеет значение N, то на выходе из блока он имеет значение N+1 для основного транзакта и N+2, N+3, ..., N+7 — для вторичных транзактов.

90

Синхронизация движения транзактов

Термин «ансамбль» служит для обозначения всех транзактов, созданных из основного транзакта или из вторичного транзак-та, образованного от того же основного.

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

Блок ASSEMBLE объединяет заданное число транзактов, принадлежащих к одному ансамблю, в один транзакт (т.е. осуществляет сборку заданного числа транзактов). Транзакты никогда не задерживаются на входе блока ASSEMBLE. Из него транзакты переходят в следующий по номеру блок. Счетчик сборки определяется полем А. Первый транзакт ансамбля, входящий в блок ASSEMBLE, задерживается в этом блоке до тех пор, пока число задержанных транзактов не станет равным заданному. Блок ASSEMBLE обеспечивает сохранение атрибутов только для первого транзакта из группы, прибывшего в него. Действие всех последующих транзактов этой группы завершается.

Например:

ASSEMBLE 5

; Действие четырех транзактов ; завершается, продолжается только ; действие одного транзакта, который ; первым вошел в этот блок.

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

Нв2(8) 2007

щему по номеру блоку. В поле А задается §

номер другого блока MATCH, называемого *

сопряженным блоком. Допускается исполь- |

зование блока MATCH в качестве сопря- ¡4

женного самому себе. В этом случае он дей- ^ ствует как блок GATHER с начальным значением счетчика 2.

Например:

MATCH THERE

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

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

Например:

GATHER 7

; Этот блок должен собрать семь ; транзактов ансамбля, прежде чем они ; получат разрешение на дальнейшее ; движение.

Изменение параметров транзактов.

Отметка времени.

Определение числа объектов, находящихся в заданном состоянии

Блок ASSIGN является основным средством присвоения числовых значений параметрам транзактов. Он никогда не задерживает транзакты на входе. Из блока ASSIGN транзакты переходят в следующий по номе-

Ив2(8) 2007

8

0 §

1

t

ру блок. Значение аргумента поля А задает номер (от 0 до 100) параметра, которому присваивается значение. Значения параметров представляют собой целые числа в пределах от -215 до 215-1 для параметров, представленных полусловами, и от -231 до 231-1 для параметров, представленных полными словами. В момент создания транзак-та все его параметры равны 0. Непосредственно за аргументом поля А может не стоять никакого знака или же стоять знак «+» или «-». Они показывают, как будет использовано вычисленное значение аргумента поля В: будет ли оно заменять текущее значение параметра или же алгебраически суммироваться с текущим значением (в соответствии с указанным знаком). В поле С можно задать номер функции, используемой в качестве модификатора. В этом случае значение, присваиваемое параметру, будет равно произведению значения, заданного полем В, на значение функции.

Например:

ASSIGN FN3-, X10

; Значение SAVEVALUE 10 будет ; вычитаться из значения параметра, ; определенного функцией FN3.

Блок INDEX используется для изменения значений параметров, входящих в него транзактов. Значение, определенное полем В, суммируется с текущим значением параметра, номер которого определен в поле А. Полученная сумма записывается в параметр 1 вошедшего в блок INDEX транзак-та. Значение параметра, указанное в поле А, не изменяется (кроме случая, когда в нем указан параметр 1). Блок INDEX никогда не задерживает транзакт на входе. Из этого блока транзакты переходят в следующий по номеру блок.

Например:

INDEX 3,20

Число 20 прибавляется к значению параметра 3, и результат помещается в параметре 1.

Блок MARK позволяет выполнить сброс времени прохождения транзакта после того, как он уже продвигался некоторое время в блок-схеме. Блок MARK никогда не задерживает транзакты на входе. Выходя из него, транзакты переходят к следующему по номеру блоку. Когда транзакт входит в блок MARK, текущее значение абсолютного времени записывается в отметке времени этого транзакта. В поле А может быть указан номер параметра транзакта, и если он задан, то при входе транзакта в этот блок текущее значение абсолютного времени записывается в указанном параметре. Если поле А пусто или содержит 0, программа присваивает отметке времени значение, равное текущему значению абсолютного времени, что равносильно сбросу времени прохождения соответствующего транзакта.

Блок COUNT дает пользователю возможность определять число объектов, удовлетворяющих заданному условию.

Например, пользователю может понадобиться некоторое число свободных устройств в определенном диапазоне номеров или число накопителей с коэффициентом использования менее 500 (в долях от 1000) и т.д. Поле А задает номер параметра вошедшего в блок транзакта, в котором будет организован счетчик числа объектов. В полях В и С блока задаются соответственно нижняя и верхняя границы диапазона номеров определенного объекта, для которых будет проверяться заданное условие. Поле D используется совместно с условными операторами (Е — равно, NE — не равно, G — больше, GE — больше или равно, L — меньше, LE — меньше или равно), задаваемыми в колонке 14. Значение стандартного числового атрибута, заданного в поле D, вычисляется и сравнивается со значением атрибута объекта, указанного в поле Е. Если в колонке 14 заданы операторы, отличные от условных NU, U, NI, I, SE, SNE, SF, SNF, LR, LS (рассмотрены ниже в описании блока GATE), то поле Е задавать не нужно. Иначе в нем помещается какой-либо из атрибутов просматриваемых объек-

92

тов, для которого будет производиться подсчет. Он может быть задан любым стандартным числовым атрибутом (кроме MATRIX SAVEVALUE).

Например:

COUNT SF 5,10,20

; В блоке будет подсчитано число ; заполненных накопителей с номерами ; от 10 до 20. Это число помещается ; в параметре 5 вошедшего в блок ; транзакта.

Действия блока SELECT аналогичны действиям блока COUNT за исключением того, что вместо подсчета числа объектов, удовлетворяющих заданному условию, блок SELECT выбирает первый объект, удовлетворяющий заданному условию, и записывает его номер в параметре транзакта, заданного значением аргумента поля А. Поля А-Е блока SELECT идентичны полям А-Е блока COUNT. Поле F используется для задания альтернативного выхода на случай, если в указанном диапазоне нет объектов, удовлетворяющих заданному условию. Если поле F пусто, то тран-закт переходит к следующему по номеру блоку. В колонке 14 может быть записано любое из 16 мнемонических обозначений, рассмотренных при описании блока COUNT. Кроме того, в этой колонке могут быть использованы еще два мнемонических обозначения МАХ и MIN. Если используется одно из этих обозначений, то поле D задавать не нужно.

Например:

SELECT MAX 1,5,10,FR

; Среди устройств с номерами 5-10 ; выбирается устройство, которое ; имеет максимальное значение ; степени загруженности, и его номер ; размещается в параметре 1 вошедшего ; в блок транзакта.

Модификация потока

Обычно симулятор пытается продвинуть транзакт к следующему по номеру блоку.

Нв2(8) 2007

Изменять номер следующего блока позво- § ляют блоки TRANSFER, LOOP, TEST, GATE. 1

Блок TRANSFER является основным сред- | ством, направляющим транзакт к любому ^ блоку блок-схемы. Это может быть выполне- ^ но различными путями: логически, статистически, условно и безусловно. Выбор этих вариантов производится посредством мнемонического кода, заданного в поле А блока. Поле В определяет первый (или единственный) выбираемый блок. Поле С определяет альтернативный блок.

Если поле А пусто, то каждый транзакт, входящий в блок, отсылается к блоку, указанному в поле В.

Если в поле А стоит код BOTH, то тран-закт сначала пытается перейти к блоку, указанному в поле В. Если такой переход невозможен, транзакт пытается перейти к блоку, указанному в поле С. В случае получения транзактом запрета на вхождение и во второй блок он остается в блоке TRANSFER и каждую единицу часового времени повторяет попытки выхода из него.

Если в поле А стоит код ALL, то транзакт прежде всего пытается перейти к блоку, указанному в поле В. Если такой переход невозможен, то транзакт пытается перейти к блокам B, B+1, B+2, B+N, ..., С, где N — значение шага, заданного в поле D, а С — блок, указанный в поле С. Номер блока С должен быть больше номера блока, указанного в поле В, на величину, кратную шагу N. Если транзакт не находит возможности выхода, он остается в блоке TRANSFER и повторяет попытки выйти из него.

Значение аргумента, записанного после точки «.» в поле А, рассматривается как трехзначное число, показывающее какую долю входящих в блок транзактов следует направлять к блоку, указанному в поле В. В поле А допускается косвенная адресация.

Если в поле А стоит код PICK, то из последовательности блоков В, B+1, В+2, ..., С случайным образом выбирается один блок, к которому должен быть направлен транзакт. Все блоки, включая В и С, выбираются с одинаковой вероятностью, равной

^93

Ив2(8) 2007

8

0 §

1

t

1/[(С-В)+1]. Если транзакт не может сразу перейти к следующему блоку, то он будет ждать снятия блокирующего условия.

Если в поле А указана мнемоника функции FN, то вычисляется значение функции, номер которой указан в поле В. Если результат получается нецелочисленным, то он усекается до целой части. Для определения номера следующего блока полученное целое число суммируется с аргументом поля С (в поле С может быть записан 0). Транзакт пытается перейти к блоку с вычисленным номером и остается в блоке TRANSFER до тех пор, пока не сможет перейти именно к этому блоку.

Код Р в поле А означает, что значение аргумента поля В интерпретируется как номер параметра транзакта, вошедшего в блок TRANSFER. Для определения следующего блока для данного транзакта значение этого параметра суммируется со значением аргумента поля С (в поле С может быть записан 0). Транзакт пытается перейти к блоку с вычисленным номером и остается в блоке TRANSFER до тех пор, пока не сможет перейти именно к этому блоку. Если в поле А стоит код SBR, то транзакт будет пытаться перейти к блоку, указанному в поле В, и ни к какому другому. Значение аргумента поля С интерпретируется как номер параметра транзакта, в этот параметр автоматически записывается номер данного блока TRANSFER. Этот режим блока обычно используется для перехода к подпрограмме, началом которой является блок, указанный в поле В. Таким образом, если в конце подпрограммы записать блок

TRANSFER Р,СЧА/,1:

где номер следующего блока определяется как РхСЧА/'+1, то транзакт сможет вернуться к блоку, который следующим после блока TRANSFER, обратится к подпрограмме. Значение СЧА/ — это номер параметра, записанный в поле С блока TRANSFER.

Еще одним кодом, который можно вводить в поле А блока TRANSFER, является код SIM. Он служит для того, чтобы отобра-

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

Эта информация содержатся в SIM-ин-дикаторе, который равен либо 1, либо 0. Если SIM-индикатор транзакта равен 1, то метод выбора посредством символа SIM обеспечивает пересылку этого транзакта в следующий блок, определенный полем С, и сброс индикатора в 0. SIM-индикатор имеет значение равное 0, если транзакт не получал запретов на вхождение в блоки, встречающиеся на пути его следования. Значение индикатора равное 1, является отражением того факта, что какое-то условие не удовлетворяется. Если имеется некоторое количество таких условий, они могут непрерывно проверяться, и если все они удовлетворяются, то SIM-индикатор транзакта остается равным 0. В том случае, если хотя бы одно из этих условий не удовлетворяется, индикатор становится равным 1. Блок, определенный полем С, проверяется первым, при этом транзакт повторяет проверки до тех пор, пока не выполнятся все условия одновременно. Блок ADVANCE производит сброс SIM-индикатора в 0.

Например:

TRANSFER .370,THIS,THAT

; В блок THAT будет направлено 37% ; транзактов, в блок THIS — 63%.

Блок LOOP используется для организации циклов, т. е. для управления числом прохождений определенного участка блок-схемы одним транзактом. В качестве счетчика цикла может быть использован любой параметр транзакта. Транзакт никогда не задерживается на входе блока LOOP. Симулятор определяет значение параметра, номер которого указан в поле А блока LOOP. Это целое число уменьшается на единицу и снова записывается в том же параметре. Если новое значение параметра, номер которого указан в поле А, не равно 0, то транзакт из бло-

94

ка LOOP перейдет в блок, номер которого указан в поле В. Если же новое значение параметра равно 0, то транзакт из блока LOOP перейдет в следующий по порядку блок. В поле В обычно указывается номер блока, являющегося началом цикла. Один и тот же цикл может одновременно выполняться произвольным числом транзактов.

Например:

LOOP 5,WAIT

; Транзакт четыре раза будет ; направляться в блок WAIT, прежде чем ; перейти в следующий по номеру блок.

Блок TEST, в противоположность блоку LOOP, не изменяет никаких атрибутов тран-закта, кроме номера следующего блока, к которому тот должен перейти. Блок управляет потоком транзактов, проверяя выполнение алгебраических отношений между значениями двух стандартных числовых атрибутов, заданных в полях А и В. Шесть мнемонических обозначений, задающих проверяемое условие, могут быть записаны, начиная с колонки 13. Если в поле С задан номер следующего блока, то транзакты не задерживаются на входе блока TEST. Если заданное условие выполняется, то транзакт пытается перейти к следующему блоку, заданному полем С. Выбор следующего блока производится только один раз в момент вхождения транзакта в блок TEST. Если поле С пусто, то транзакты не могут войти в блок TEST, пока не выполнятся проверяемые блоком условия.

Например:

TEST E V6,№D,SPEC

; Если переменная 6 равна 0, ; транзакт перейдет в следующий ; по номеру блок, в противном случае — ; в блок SPEC.

Блок GATE, как и блок TEST, не изменяет никаких атрибутов транзактов, кроме номера следующего блока, к которому тот должен перейти из блока GATE. Он управляет пото-

№2(8) 2007

ком транзактов в зависимости от значения § одного из 12 стандартных логических атрибу- * тов, записываемого в колонках 13-18. Этот | блок дает запрет на вход транзактов в том ¡4 случае, если определенное оборудование не ^ имеет желаемого статуса. В поле А указывается номер проверяемой единицы оборудования. Если в поле В определен альтернативный блок, то транзакты при невыполнении требуемого условия будут направляться к этому блоку. Если поле В пусто, то они не могут войти в блок GATE до тех пор, пока указанный логический атрибут не примет значение «истина». Мнемонические символы, указывающие проверяемые условия, следующие:

NU — устройство не занято, U — устройство занято, NI — устройство не прервало обслуживания,

I — устройство прервало обслуживание, SE — накопитель пуст, SNE — накопитель не пуст, SF — накопитель заполнен, SNF — накопитель не заполнен, LR — логический переключатель в состоянии «выключено»,

LR — логический переключатель в состоянии «включено»,

М — условие синхронизации в определенном блоке блок-схемы,

NM — условие отсутствия синхронизации в определенном блоке блок-схемы.

Например: GATE LR 1000

; Если логический переключатель 1000 ; установлен в состояние «выключено», ; то транзакт входит в этот блок, ; в противном случае блок дает запрет ; на его продвижение.

Изменение приоритетов транзактов. Удаление транзактов из цепи текущих событий и возвращение их в эту цепь

Блок PRIORITY используется для присвоения транзакту нужного приоритета. Он

никогда не задерживает транзакты на вхо-

^95

Ив2(8) 2007

S3

0

s

1 t I

to

де. От блока PRIORITY транзакты переходят к следующему по порядку блоку. Значение аргумента поля А определяет присваиваемый транзакту приоритет, это значение может изменяться от 0 до 127 включительно.

Например:

PRIORITY 6

;Транзакту присваивается уровень ; приоритета равный 6.

Блок LINK используется для удаления транзакта из цепи текущих событий и помещения его в цепь пользователя. Поле А может содержать любой стандартный числовой атрибут, задающий цепь пользователя, в которую будет введен вошедший в блок транзакт. Поле В задает порядок размещения транзактов в цепи:

FIFO — транзакт помещается в конец цепи;

LIFO — транзакт помещается в начало цепи;

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

Например, транзакт может быть помещен в цепь пользователя в случае занятости устройства. Для указания состояния устройства здесь используется индикатор цепи. Он устанавливается в 0, когда устройство свободно, и в 1, когда оно занято. Если поле Е блока не пустое, то проверяется состояние индикатора цепи. Если индикатор цепи равен 1, то вошедший в блок транзакт заносится в цепь пользователя в соответствии с порядком, заданным в поле В. Если индикатор равен 0, то он устанавливается

равным 1, а транзакт переходит к блоку, номер которого задан в поле С.

Например:

LINK X19,LIFO,BLK

При индикаторе цепи равном 1, транзакт будет направлен в цепь пользователя, номер которой определен в ячейке 19, и разместится в начале цепи, а при индикаторе равном 0 — в блок BLK.

Блок UNLINK используется для удаления транзактов из цепи пользователя. Поле А задает цепь пользователя, из которой удаляется транзакт. Поле В определяет номер следующего блока для транзактов, удаленных из цепи. Запись ALL в поле С означает, что из цепи будут удалены все транзакты. Если в поле С задан стандартный числовой атрибут, то его значение интерпретируется как число удаляемых из цепи транзактов.

Например:

UNLINK CHAIN,BLK,ALL

При индикаторе цепи равном 1, все транзакты будут удалены из цепи пользователя CHAIN, спланированы для входа в блок BLK, а при индикаторе равном 0, вошедший в блок транзакт система отправит в следующий блок.

Вычисляемые объекты и блоки,

обеспечивающие вывод статистик

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

Арифметические переменные представляют собой арифметические сочетания

96

значений различных стандартных числовых атрибутов, в том числе и других арифметических переменных. Описание переменной задается одним оператором (оператор VARIABLE), который содержит требуемое арифметическое выражение. Значение арифметической переменной может использоваться как аргумент поля блока, функции или таблицы, операнд в другой арифметической или булевской переменной и т.д. В качестве аргумента блока значение арифметической переменной может представлять:

• номер объекта;

• номер объекта в логическом атрибуте (в блоке GATE);

• номер параметра транзакта (в блоках ASSIGN, LOOP, MARK, SPLIT);

• значение атрибута.

В арифметических переменных используют 5 арифметических операторов:

• алгебраическое сложение «+»;

• алгебраическое вычитание «-»;

• алгебраическое умножение «*»;

• алгебраическое деление «/» производит усечение результата до целого значения сразу же до начала следующей операции;

• деление по модулю «@» отбрасывает целую часть результата и сохраняет остаток, который считается положительным.

В выражении переменной может быть задано произвольное число перечисленных выше операций в различных сочетаниях. Знак результата вычислений определяется по обычным алгебраическим правилам. Допустимы отрицательные значения переменных. Выражения переменных анализируются слева направо. Умножение, деление и деление по модулю выполняются раньше, чем сложение и вычитание. Перед выполнением любой арифметической операции определяется значение каждого элемента и выделяется его целая часть. Деление на 0 не считается ошибкой, и результат

Нв2(8) 2007

такого деления всегда равен 0. Допускает- §

ся использование скобок, причем выраже- *

ние переменной может содержать не более |

пяти пар скобок. ¡4

Например:

7 VARIABLE X*4/100@10

; Значение переменной 7 вычисляется ; как частное от деления хранимого ; значения — номер хранимого значения ;определяется параметром 4 ; обрабатываемого в данный момент ; транзакта — на константу 100 и затем ; делением по модулю на константу 10.

Арифметические переменные с плавающей точкой FVARIABLE аналогичны рассмотренным выше арифметическим переменным, только от их элементов перед выполнением арифметических операций и от результатов промежуточных арифметических операций не берется целая часть. Она выделяется для окончательного результата. Арифметическая переменная и переменная с плавающей точкой не могут иметь одинаковые номера. Деление по модулю для переменных с плавающей точкой не допускается. Переменные с плавающей точкой следует применять осторожно, поскольку результаты их использования иногда могут быть весьма неожиданными. Например, значение 1/5 в форме с плавающей точкой будет 0,1999, а не 0,2.

В операторе определения переменной не должно быть никаких знаков после 71-й позиции. Кроме того, переменная не переносится с одной строки программы на следующую. Не должно быть никаких знаков и в позиции 18. Значения констант не должны содержать более 11 знаков.

Например:

1 FVARIABLE 10

; Значение переменной 1 будет равно 36, ; поскольку результат деления ; не усекается до целой части. Константа10 ; будет умножена на 3,67, и от результата

; 36,7 будет взята целая часть.

^97

Ив2(8) 2007

Введение в модель булевских переменных ^АЯ1АВ_Е) дает возможность, используя только один блок, принимать решения в зависимости от состояния и значения многих объектов йРвБ. Булевские переменные представляют собой логические выражения, составленные из различных стандартных числовых атрибутов, в том числе и из других булевских переменных. Эти переменные описываются и используются так же, как арифметические переменные. Вместо вычисления значения, как в случае с арифметической переменной, в булевской проверяется одно или несколько логических условий. Результатом проверки является 1, если заданные условия удовлетворяются, и 0, если они не удовлетворяются.

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

Условными операторами являются:

— больше, чем;

'_' — меньше, чем;

'Е' — равно;

^Е' — не равно;

'_Е' — меньше или равно;

^Е' — больше или равно.

Третьим типом операторов, используемых при задании булевских переменных, являются булевские операторы: «+» соответствует оператору ИЛИ, «*» соответствует И. Скобки следует использовать только в тех случаях, когда они необходимы. Любое число в скобках интерпретируется как 0, если оно равно нулю, и как 1, если оно не равно нулю. Если булевская переменная задается одним стандартным числовым атрибутом, то значение этой булевской переменной будет равно 0, если значение атрибута равно нулю, и 1, если значение атрибута не равно нулю.

S3

0 §

1 *

FUn, если устройство п занято, в противном случае 0;

FNUn, если устройство не занято, в противном случае 0;

FIn—1, если устройство захвачено, в противном случае 0;

FNIn-1, если устройство не захвачено, иначе 0;

SFn-1, если накопитель заполнен, иначе

0;

SNFn-1, если накопитель не заполнен, иначе 0;

SEn-1, если накопитель пуст, иначе 0;

SNEn-1, если накопитель не пуст, иначе 0;

_Яп-1, если логический переключатель в состоянии «выключен», иначе 0.

_Sn-1, если логический переключатель в состоянии «включен», иначе 0.

Условные операторы производят алгебраическое сравнение операндов, которыми могут быть константы и стандартные числовые атрибуты. Все условные операторы записываются в апострофы.

Например:

7 BVARIABLE

Переменная 7 равна единице, если значение переменной 2 больше пяти и либо обслуживание устройством 2 не подвергается прерыванию, либо логический переключатель 7 находится в состоянии «выключено».

Функции GPSS не связаны с каким-либо типом блоков. Они могут быть непрерывными числовыми Сп, дискретными числовыми Dn, табличными числовыми Ln, дискретными атрибутивными Еп и табличными атрибутивными Мп. При задании функции в поле метки оператора определения функции указывается идентификационный номер функции, в поле операции FUNCTION, в поле А — аргумент (независимая переменная), в поле В — число пар координат (точек). При этом числу в поле В предшествует символ, указывающий тип функции. Аргументом может быть любой из стандартных числовых атрибутов. Если в качестве аргу-

98

мента используется псевдослучайное число RNj, то оно имеет дробные значения, равномерно распределенные в интервале 0 < RNj < 1. За каждым оператором описания FUNCTION должно следовать достаточное количество строк для задания отдельных точек (пар X, Y) функции, где i —номер точки. В каждой строке, следующей за оператором описания, может быть задано шесть пар значений, располагающихся в 12 шестиколонных полях: А^ в колонках 1-6, Y в колонках 7-12; А2 в колонках 13-18, Y2 в колонках 19-24; ...; А6 в колонках 61-66; Y6 в колонках 67-72 и т.д. Комментарии, расположенные между оператором описания и строками, задающими значения функции, не допускаются. Как для X , так и для Y можно использовать нецелые числа. Каждое последующее значение X должно быть больше, чем предыдущее, т. е. Xi < Xi+1. Поскольку поля в строках, следующих за оператором описания функции, при фиксированном формате имеют ширину в шесть колонок, Xj и Y, изменяются в пределах от -99 999 до 999 999.

Пользователь может задавать значения координат в свободном формате, для любой координаты — более шести разрядов, и увеличивать максимальное значение при вводе до ±(231-1). При применении свободного формата нужно соблюдать следующие правила:

1) первая запись в строке свободного формата должна начинаться с позиции 1;

2) последняя запись должна заканчиваться в позиции 71 или раньше;

3) значения координат Xj и Yj одной точки разделяются запятой;

4) наборы координат разделяются знаком деления «/»;

5) координаты Xi и Yi, относящиеся к одной точке, должны находиться на одной строке.

Непрерывные числовые функции характеризуются тем, что соседние точки этих функций соединяются прямыми. Когда зна-

№2(8) 2007

чение аргумента попадает между двумя за- § данными значениями, симулятор производит * линейную интерполяцию. Для дискретной | числовой функции интерполяция не произ- ^ водится и ее значение берется равным зна- ^ чению в правом конце интервала. Если значениями аргумента функции являются последовательные целые числа 1, 2, 3, ..., то машинное время, необходимое для вычисления значений такой функции, может быть значительно уменьшено, если эту функцию описать как табличную. Подобно числовым функциям, значениями которых могут быть только числа, атрибутивные функции выражены через любые стандартные числовые атрибуты.

Например:

10 FUNCTION *3, D5

0,5/1,10/2,15/3,20/4,25.

Специальные ячейки памяти SAVEVALUE используются в моделях для хранения значений стандартных числовых атрибутов и их последующего использования. В каждой такой ячейке формата слово может быть записано значение, не превосходящее ±(231-1), а в каждой ячейке формата полуслово — значение, не превосходящее ±(215-1). Хранимые значения не имеют стандартных логических атрибутов. Следовательно, они не могут быть использованы блоком GATE для управления потоком транзактов. Однако можно использовать значение стандартного числового атрибута Xj в качестве одного из аргументов блока TEST.

Блок SAVEVALUE выполняет функцию записи значения любого стандартного числового атрибута для последующего использования. Транзакт всегда может войти в этот блок и затем перейти к следующему по номеру блоку. Начальные значения для всех хранимых значений нулевые. Аргумент поля В используется для задания стандартного числового атрибута, значение которого следует записать. Значение аргумента поля А задает номер хранимого значения. Поле С используется для задания формата

99

№2(8) 2007

хранимого значения. Если требуется ячейка формата полуслово, то в поле С записывается символ «Н». Если поле С пусто, считается, что производится обращение к ячейке формата слово.

Непосредственно за обозначением стандартного числового атрибута в поле А блока SAVEVA_UE может не стоять никакого знака или стоять знак «+» или «-». Эти знаки указывают режим обработки хранимого значения. При отсутствии знака после аргумента поля А значение стандартного числового атрибута, заданного в поле В, заменяет прежнее хранимое значение, номер которого указан в поле А. Если после аргумента поля А стоит знак « + », то значение стандартного числового атрибута, заданного в поле В, суммируется с хранимым значением, номер которого задан в поле А. Если после аргумента поля А стоит знак «-», то значение аргумента поля В вычитается из текущего хранимого значения, номер которого определяется значением аргумента поля А.

Например:

SAVEVA_UE *2+,Х*5

; К текущему хранимому значению, ; номер которого указан в параметре 5 ; вошедшего в блок транзакта, Ц ; добавляется текущее хранимое

; значение, номер которого указан

; в параметре 2.

I

§ Пользователь может хранить интере-¡3 сующую его информацию в ячейках, кото-й рые организованы в матрицы размерами | шхп. Он может задать число строк и столб-§ цов матрицы, а также формат ячеек (слово или полуслово) при помощи оператора опи-Ц сания матрицы.

* Блок MSAVEVA_UE используется для за-I писи матричных хранимых значений, он § аналогичен блоку SAVEVA_UE. В поле А за-§ дается номер матрицы, в которую должно Ц быть записано значение аргумента поля D. ^ Поля В и С определяют соответственно номер строки и столбца. Аргументами полей

100

А-D могут быть любые стандартные числовые атрибуты. Поле Е используется для определения формата хранимых значений аналогично полю С для SAVEVALUE.

Например:

MSAVEVALUE 2+,4,5,Q3

; Текущее значение длины очереди 3 ; будет суммироваться с текущим ; значением, расположенным в строке 4 ; и столбце 5 матричного хранимого ; значения.

Особенностью хранимого значения SAVEVALUE является возможность ссылаться на него всем транзактам в системе. На параметр может ссылаться только «свой» транзакт. В модели может быть только один набор SAVEVALUE, пронумерованный как Х1, Х2, X3, ..., тогда как каждый транзакт имеет свой собственный набор параметров, пронумерованный как P1, P2, P3, ... .

Оператор INITIAL позволяет задавать начальные значения хранимых величин. В поле А перед номером хранимого значения записывается обозначение Х(Н) — для одиночных, МХ(МН) — для матричных хранимых значений. В результате действия оператора величина, заданная в поле В, заменяет текущее хранимое значение.

Например:

INITIAL X88, 120

; Хранимое значение с номером 88 ; становится равным 120.

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

1) средняя длина очереди;

2) общее число вхождений в очередь, т. е. в блоки, связанные с данной очередью;

3) число транзактов, которые вошли в очередь, но не были задержаны (число «нулевых» вхождений);

Нв2(8) 2007

4) процент «нулевых» вхождений;

5) среднее время ожидания в очереди для всех входящих в нее транзактов;

6) среднее время ожидания, затраченное задержанными в очереди транзактами, т.е. исключая «нулевые» вхождения в очередь;

7) текущая и максимальная длина очереди.

Очереди не имеют стандартных логических атрибутов. Однако, как и в случае с SAVEVALUE, блок TEST можно использовать для определения различных соотношений между стандартными числовыми атрибутами и константами. Таким образом, блок TEST может управлять потоком сообщений в зависимости от значений атрибутов очереди.

Транзакт всегда может войти в блок QUEUE. От блока QUEUE он пытается перейти к следующему по номеру блоку. Как правило, следующий блок может задержать транзакт на входе. Такими блоками могут быть SEIZE, PREEMPT, ENTER, GATE или блок TEST в режиме условного входа.

Поле А блока QUEUE определяет номер очереди, поле В — число единиц, на которое увеличивается текущая длина очереди. Если поле В пусто, это число считается равным 1. Длина очереди может изменяться от 0 до 231-1.

Например:

QUEUE *10, P1

; Длина очереди, номер которой ; определен в параметре 10, ; при вхождении транзакта в блок ; будет увеличиваться на величину, ; заданную в параметре 1.

ленное время пребывания в любой очереди §

может табулироваться. Для нахождения рас- *

пределения частот существует специальный |

оператор — QTABLE (аналогичен TABLE). ¡4

Например:

DEPART V3,V4

; При вхождении транзакта в этот блок ; длина очереди, номер которой ; определен с помощью V3, уменьшается ; на величину, задаваемую V4.

Таблицы используются в имитационных моделях для того, чтобы получить распределение указанного аргумента, который может быть любым стандартным числовым атрибутом. Текущее значение аргумента таблицы табулируется всякий раз, когда транзакт входит в блок TABULATE. Соответствующее вхождение будет записано в таблицу, номер которой определен полем А блока TABULATE. Следует отметить, что операции, выполняемые при табулировании аргумента, зависят от режима работы таблицы. Блок TABULATE может также указывать число единиц, которые должны быть добавлены в тот интервал, в который попало значение аргумента. Число единиц задается в поле В. Если поле В пусто, эта величина полагается равной 1. Если поле В заполнено, то поле D соответствующего оператора описания таблицы должно начинаться с любого буквенного символа.

Например:

TABULATE 48

; Входящий в блок транзакт дает ; указание программе вывести статистику ; в соответствии с таблицей 48.

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

Оператор описания таблицы TABLE обеспечивает пользователя средствами для указания как аргумента таблицы частот, так и количества и ширины составляющих ее интервалов. Если за стандартным числовым атрибутом, используемым в качестве аргумента, следует знак минус «-», таблица работает в разностном режиме. В этом ре-

101

№2(8) 2007

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

Мнемонический символ RT, помещенный в поле А, указывает, что способ формирования таблицы основан на подсчете прибывающих транзактов. При этом способе формирования таблиц вхождение транзак-та в блок TABULATE не приводит к вводу соответствующих данных для формирования распределения. Вместо этого число единиц, определенное в блоке TABULATE, добавляется в счетчик прибывающих транзактов. При этом оператор TABLE должен содержать в поле Е временной интервал. Если это число равно, например, 1000, то содержимое счетчика каждые 1000 ед. времени должно переноситься для формирования распределения, после чего счетчик должен сбрасываться в 0. При таком способе формирования таблицы распределение получается в виде чисел, пропорциональных числу прибывающих транзактов за каждые 1000 ед. времени.

Пользователь может поместить в поле А оператора определения таблицы мнемонический указатель IA, который определяет S3 способ формирования таблицы, основанный на измерении интервалов между мо* ментами прибытия транзактов. Как и в слу-| чае разностного способа, обычная табуля-§ ция при этом не производится. Таблица, та-¡3 ким образом, представляет распределение й времени между прибытиями транзактов =g в заданную точку блок-схемы. § Поле А при обычной табуляции определяет табулируемую величину и может быть Ц представлено любым стандартным число-^ вым атрибутом. Поле В задает верхний пре-I дел первого интервала, ширина каждого § последующего интервала задается по-|§ лем С, а общее число интервалов — по-Ц лем D. Получаемая в результате табуляции § таблица содержит группу частот, каждая из которых представляет число попаданий та-

102

булируемой величины в заданный интервал. Помимо этого вывод содержит среднее значение и стандартное отклонение числа вхождений в таблицу и сумму аргументов для всех вхождений в таблицу. В выводе на печать указывается также, является ли таблица взвешенной или невзвешенной. Для взвешенной таблицы производится также вычисление взвешенных среднего значения и стандартного отклонения.

Например:

6 TABLE S196,20,20,100

; Таблица определяет формат вывода ; содержимого накопителя 196.

Специальные типы блоков

Выше приводилось краткое описание основных блоков GPSS. В этом параграфе рассматриваются некоторые блоки, которые могут понадобиться при составлении моделей повышенной сложности. К ним относятся блоки вывода статистики (PRINT, TRACE, UNTRACE), а также блоки управления группами транзактов (JOIN, REMOVE, SCAN, ALTER).

Вывод статистик

Блок PRINT вызывает вывод статистик, полученных на момент входа в него тран-закта. Поле С этого блока содержит мнемокод, определяющий нужный вывод данных, а поля А и В — соответственно верхний и нижний пределы номеров устройств, накопителей, очередей, таблиц или хранимых значений. Если требуется вывести на печать только один набор статистик, то необходимо разместить один и тот же номер в полях, определяющих как верхний, так и нижний пределы.

Например:

PRINT 1,500,X

; Вывод на печать содержимого ; хранимых значений с номерами 1-500.

В целях отладки и для проверки правильности блок-схемы надо убедиться в том, что

Ns2(8) 2007

транзакты правильно проходят через предусмотренные программистом части модели. Блок TRACE производит действия, необходимые для прослеживания движения выбранного транзакта. Когда транзакт входит в этот блок, специальный флажок транзакта устанавливается равным 1. Блок UNTRACE служит для прекращения трассировки тран-закта путем сброса этого флажка. Во время вхождения трассируемого транзакта в очередной блок производится печать двух строк. Первая строка содержит номера транзакта, предыдущего и очередного блоков, текущие значения условного времени и счетчика, определяющего окончание моделирования (оператор START). Вторая строка является обычным выводом на печать информации о транзакте. Допустимо вхождение в несколько блоков TRACE перед блоком UNTRACE, а также вхождение в блок UNTRACE при неустановленном флажке. Вхождение в блок TRACE отмечается при выходе, а вхождение в блок UNTRACE не фиксируется.

Управление группами транзактов

Во многих моделях, реализованных с помощью GPSS, транзакты изображают объекты, которые могли бы быть объединены в группы по общим признакам. Для того чтобы обеспечить пользователя средствами разделения транзактов или других объектов на категории, в GPSS введен специальный класс объектов — группы. Принадлежность к группе и возможность обращения к членам группы совершенно не зависят от состояния составляющих группу транзак-тов. Если транзакты составляют группу, к любому из них можно обратиться независимо от того, находится он в списке текущих или будущих событий, в списках прерывания или пользователя. Блоки, связанные с группами, позволяют пользователю изменять значения некоторых атрибутов, таких как приоритет или значения параметров всех входящих в группу транзактов.

Группы работают в одном из двух возможных режимов: транзактном или числовом. Режим работы группы определяется

первым обращением к ней. Как только ре- § жим работы установлен, любое последую- * щее обращение к группе должно произ- | водиться в заданном режиме. При работе ^ в транзактном режиме элементы группы ^ представляют собой номера образующих группу транзактов. При работе в числовом режиме элементы группы представляют список числовых значений. С группами связан блок JOIN.

Блок JOIN является средством, при помощи которого транзакт или числовое значение могут быть включены в группу. Этот блок никогда не задерживает транзактов на входе. Объекты располагаются в группе в порядке поступления. Если заполнено только поле А, то считается, что блок обращается к группе лишь в транзактном режиме, т. е. входящий в блок транзакт становится членом группы, номер которой задан в поле А. Транзакт может быть членом любого числа групп. Если заполнены поля А и В, то считается, что блок обращается к группе в числовом режиме, т. е. значение аргумента поля В вычисляется и присоединяется к группе, номер которой определен в поле А. Когда группа работает в числовом режиме, любое заданное числовое значение появляется в списке членов данной группы только один раз.

Например:

JOIN X19

; Вошедший в блок транзакт становится ; членом группы, номер которой ; определен хранимым значением ; с номером 19.

Пример. Моделирование информационно-справочной системы

Описание системы и постановка задачи

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

103

Нв2(8) 2007

различных программ управления. При этом заказчик на информацию — сама автоматизированная система.

Однако в последнее время широкое распространение получают специализированные системы, называющиеся информационно-справочными. Под ними понимают компьютерные системы, дающие ответы по тому или иному кругу вопросов на поступающие в систему индивидуальные запросы людей (например, работников управленческого аппарата). Структурная схема одной из таких систем приведена на рис. 1. Система работает следующим образом. Имеется пять типов запросов, которые, как и ответы на них, поступают на рабочие станции (пользовательские терминальные компьютеры) 1, 2 и 3. Станции 1 и 2 обрабатывают сообщения, относящиеся к первым четырем запросам (каждая из этих станций может принимать все четыре типа запросов), а станция 3 — сообщения, относящиеся к запросам пятого типа. Предполагается, что сообщения, имеющие отношение к терминалу 3, обладают более высоким приоритетом, чем те, которые имеют отношение к терминалам 1 и 2.

Существует пять прикладных программ, каждая из которых обрабатывает сообщения, относящиеся к определенному запросу. Прикладные программы хранятся на дисковом накопителе HDD2. Запросы же

Рис. 1. Структура информационно-справочной системы

посредством главной памяти и процессора записываются на диске HDD1, образуя очередь запросов.

Всякий раз при поступлении в главную память запроса с диска HDD1 обрабатывающая этот запрос программа загружается в оперативную память RAM центрального компьютера с одним процессором CPU.

Процесс обработки сообщений в системе происходит следующим образом:

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

2) чтение запроса с HDD1 в RAM;

3) запись в главную память программы с HDD2 с номером, соответствующим типу запроса, и поиск информации с помощью вызванной программы;

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

Главная память может содержать одновременно до пяти сообщений, прочитанных с терминалов, и до восьми, прочитанных с диска HDD1, но процессор в каждый момент времени может обрабатывать только одно сообщение.

Входящие потоки сообщений, соответствующие запросам 1, 2 и 5, характеризуются равномерным распределением интервалов между моментами поступления требований, а потоки, соответствующие запросам 3 и 4, являются пуассоновскими.

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

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

Модель информационно-справочной системы содержит 37 блоков. Текст модели на языке GPSS занимает 55 строк (рис. 2).

Рассмотрим подробнее строки текста модели, а затем ее блок-схему.

104

№2(8) 2007

*LINE LOC OPERATION A,B,C,D,E,F,G COM

01 SIMULATE

02 EXPON FUNCTION RN1,C2 4

0,0/.1 ,.104/. 2,.222/.3,.355/.4,.509/.5,.69

.6,.915/.7,1. 2/.75,1.38/. 8,1.6/.84,1.83/.88, 2 12

.9,2.3/.92,2. 52/.94,2.81/ .95,2.99/.96,3.2/.97 3.5

.98,3. 9/.99,4 .6/.995,5.3/ .998,6.2/.999,7.0/ 9997,8

07 TERM1 EQU 1

08 TERM2 EQU 2

09 TERM3 EQU 3

10 CPU EQU 4

11 RAM EQU 5

12 RAM STORAGE 8

13 XTIME TABLE M1,0,1000,100

14 TMEAN FUNCTION P1,D5

1,30/2 ,40/3,50/4,55/5,60

16 TSPR FUNCTION P1,D5

1,5/2, 5/3,5/4 ,10/5,10

18 GENERATE 600,10 ;01

19 ASSIGN 1,1 ;02

20 TRAN1 TRANSFER BOTH,INPU1,INPU2 ;03

21 GENERATE 720,20 ;04

22 ASSIGN 1,2 ;05

23 TRAN2 TRANSFER BOTH,INPU1,INPU2 ;06

24 GENERATE 480,FN$EXPON ;07

25 ASSIGN 1,3 ;08

26 TRAN3 TRANSFER BOTH,INPU1,INPU2 ;09

27 GENERATE 54 0,FN$EXPON ;10

28 ASSIGN 1,4 ;11

29 TRAN4 TRANSFER BOTH,INPU1,INPU2 ;12

30 GENERATE 660,30,,,1 ;13

31 ASSIGN 1,5 ;14

32 SEIZE TERM3 ;15

33 ASSIGN 2,TERM3 ;16

34 TRAN5 TRANSFER ,INCOM ;17

35 INPU1 SEIZE TERM1 ;18

36 ASSIGN 2,TERM1 ;19

37 TRAN6 TRANSFER ,INCOM ;20

38 INPU2 SEIZE TERM2 ;21

39 ASSIGN 2,TERM2 ;22

40 INCOM PREEMPT CPU ;23

41 ADVANCE 20 ;24

42 RETURN CPU ;25

43 ENTER RAM ;26

44 PREEMPT CPU ;27

45 ADVANCE 10 ;28

46 RETURN CPU ;29

47 SEIZE CPU ;30

48 ADVANCE FN$TMEAN,FN$TSPR ;31

49 RELEASE CPU ;32

50 ADVANCE 60 ;33

51 LEAVE RAM ;34

52 RELEASE P2 ;35

53 TABULATE XTIME ;36

54 TERMINATE 1 ;37

55 START 100

еа

I

I? .Si

Рис. 2. Текст модели информационно-справочной системы на языке GPSS

105

№2(8) 2007

Строки имеют следующее назначение:

I) начало модели;

2-6) определение функции: наименование — EXPON, вид — непрерывный, значения аргумента формируются генератором случайных чисел RN1, задание координат функции EXPON;

7-10) присваивание символов устройствам;

II) присваивание символа накопителю;

12) определение емкости накопителя;

13) определение таблицы XTIME: табулируемая величина — время прохождения транзакта, начало отсчета аргумента в таблицах — 0, ширина интервала — 1000, число интервалов — 100;

14, 15) определение функции: наименование TMEAN, значение аргумента определяется параметром Р1 транзакта, вид функции — список значений;

16, 17) определение функции: наименование TSPR, значение аргумента функции определяет параметр Р1 транзакта, вид функции — список значений;

18)генерирование транзактов-запросов (запрос 1): средняя продолжительность интервалов между моментами появления транзактов — 600 ед. времени, модификатор — 10 ед. времени;

00 19) присваивание параметру Р1 транзак-та значения равного 1 (рабочая станция 1);

je 20, 23, 26, 29) передача транзакта в один | из свободных блоков — INPU1 или INPU2; § 21)генерирование транзактов-запросов ¡3 (запрос 2): средняя продолжительность ин-й тервалов между моментами появления тран-Í зактов — 720 ед. времени, модификатор — § 20 ед. времени;

22) присваивание параметру Р1 транзак-Ц та значения равного 2 (рабочая станция 2); Í 24)генерированиетранзактов-запросов

1 (запрос 3): средняя продолжительность ин-§ тервалов между моментами появления тран-|§ зактов — 480 ед. времени, модификатор — ! функция EXPON;

§ 25) присваивание параметру Р1 транзак-та значения, равного 3 (рабочая станция 3);

106

27)генерирование транзактов-запросов (запрос 4): средняя продолжительность интервалов между моментами появления транзактов — 540 ед. времени, модификатор — функция EXPON;

28)присваивание параметру Р1 транзакта значения, равного 4 (терминал 4);

30) генерирование транзактов-запросов (запрос 5): средняя продолжительность интервалов между моментами появления транзактов — 660 ед. времени, модификатор — 30 ед. времени, приоритет — 1;

31)присваивание параметру Р1 транзакта значения равного 5 (терминал 5);

32) занятие рабочей станции 3;

33)присваивание параметру Р2 транзакта значения равного 3;

34, 37) безусловная передача транзакта в блок INCOM;

35) занятие рабочей станции 1;

36) присваивание параметру Р2 тран-закта значения равного 1;

38) занятие рабочей станции 2;

39)присваивание параметру Р2 транзакта значения равного 2;

40) прерывание работы CPU;

41) моделирование записи на диск HDD1 (время записи — 20 ед. времени);

42) конец прерывания работы CPU;

43) вхождение в накопитель RAM;

44) прерывание работы CPU;

45) моделирование записи запроса с диска HDD1 в оперативную память (время записи — 10 ед. времени);

46) конец прерывания работы CPU;

47) занятие CPU;

48) моделирование поиска информации: среднее значение времени поиска TMEAN, модификатор TSPR;

49) освобождение CPU;

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

51) выход из накопителя RAM;

52) освобождение терминала, определенного значением параметра Р2;

№2(8) 2007

53) формирование таблицы частот ХТ1МЕ;

54) уничтожение транзакта;

55) задание числа уничтоженных тран-зактов перед окончанием прогона модели.

Перейдем к рассмотрению структуры блок-схемы модели. В ней можно выделить

две части: генерирование транзактов и имитациию работы системы. Схема генерирования транзактов (рис. 3) содержит 5 независимых фрагментов.

Схема имитации обслуживания справочных запросов центральным компьютером (рис. 4) использует приоритетные правила

£

I?

TRAN5

TRANSFER

Г) Д)

Рис. 3. Схема генерирования транзактов:

а) ввод запросов типа 1, б) ввод запросов типа 2, в) ввод запросов типа 3, г) ввод запросов типа 4, д) ввод запросов типа 5

107

Нв2(8) 2007

§3

I

I

0

s

1 *

TRAN1 TRAN 2 TRAN3 TRAN4

TRAN1 TRAN 2 TRAN3 TRAN4

TRAN 5 TRAN 6

108

Рис. 4. Схема имитации обслуживания справочных запросов

fasility

storage ram

No2(8) 2007

entries util.

ave. time avail. ovner pend inter retry delay

term1 27 0. .994 1722 . .666 1 64 0 0 250 0

term2 26 0. .993 1786. .154 1 68 0 0 250 0

term3 50 0. .986 922 , .234 1 264 0 0 0 21

cpu 305 0. .999 153 . .180 1 68 0 0 0 0

cap. rem. min. мах/ 8 6 0 3

entries avl. 102 1

ave.с. util. retry delay 2.929 0.366 0 0

CO

s

s? .Si

table xtime

0. .000 - 1000 . .000 4 4. .00

1000. .000 - 2000 . .000 5 9. .00

2000. .000 - 3000. .000 4 13. .00

3000. .000 - 4000 . .000 4 17. .00

4000. .000 - 5000 . .000 6 23 . .00

5000. .000 - 6000. .000 4 27. .00

6000. .000 - 7000. .000 7 34. .00

7000. .000 - 8000 . .000 4 38. .00

8000. .000 - 9000 . .000 4 42 . .00

9000. .000 - 10000, .000 5 47. .00

10000. .000 - 11000. .000 3 50. .00

mean std. dev. range retry erequency cum.%

13188.642 10113.450 0

Рис. 5. Результаты моделирования информационно-справочного обслуживания

для прерывания обслуживания менее приоритетных заявок.

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

Из результатов моделирования видно, что загрузка приборов (терминалов и CPU) является высокой. Сильная загрузка приборов и принятая дисциплина обслуживания приводят к большим затратам на пребывание требований в системе (среднее время пребывания согласно полученной таблице частот XTIME равно 13188,642 ед. времени) при сравнительно небольших затратах времени на выполнение отдельных операций.

Улучшение характеристик информационной системы может быть достигнуто за счет увеличения числа приборов, входящих в систему, изменения дисциплины обслуживания запросов или степени детализации модели (если необходимо исследовать свойства hardware или software). Однако любая детализация может существенным образов усложнить GPSS-модель. Поэтому в сложных случаях довольно часто используют другие системы, например, Pilgrim.

В следующем номере планируются статьи, демонстрирующие возможности систем GPSS World и Actor Pilgrim.

Список литературы

1. Боев В.Д. Инструментальные средства GPSS World. СПб.: БХВ-Петербург, 2004.

2. Бражник А. Н. Имитационное моделирование: возможности GPSS World. СПб.: Реноме, 2006.

3. Емельянов А.А, Власова Е.А., Дума Р. В. Имитационное моделирование экономических процессов / Под ред. А.А. Емельянова. М.: Финансы и статистика, 2006.

4. Шрайбер Т.Дж. Моделирование на GPSS. М.: Машиностроение, 1979.

109