Главная » Каталог    
рефераты Разделы рефераты
рефераты
рефератыГлавная

рефератыБиология

рефератыБухгалтерский учет и аудит

рефератыВоенная кафедра

рефератыГеография

рефератыГеология

рефератыГрафология

рефератыДеньги и кредит

рефератыЕстествознание

рефератыЗоология

рефератыИнвестиции

рефератыИностранные языки

рефератыИскусство

рефератыИстория

рефератыКартография

рефератыКомпьютерные сети

рефератыКомпьютеры ЭВМ

рефератыКосметология

рефератыКультурология

рефератыЛитература

рефератыМаркетинг

рефератыМатематика

рефератыМашиностроение

рефератыМедицина

рефератыМенеджмент

рефератыМузыка

рефератыНаука и техника

рефератыПедагогика

рефератыПраво

рефератыПромышленность производство

рефератыРадиоэлектроника

рефератыРеклама

рефератыРефераты по геологии

рефератыМедицинские наукам

рефератыУправление

рефератыФизика

рефератыФилософия

рефератыФинансы

рефератыФотография

рефератыХимия

рефератыЭкономика

рефераты
рефераты Информация рефераты
рефераты
рефераты

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


              МИНИСТЕРСТВО СВЯЗИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
           Московский ордена Трудового
Красного Знамени
            я_технический университет связи и
информатики
       Кафедра вычислительной математики и
программирования
             Методические указания для
слушателей ФПКП
         по моделированию систем и сетей связи
на GPSS/PC
                              Часть 1
                  ОСНОВЫ МОДЕЛИРОВАНИЯ НА
GPSS/PC
                            Москва 1993
.
                                        План
УМД на 1993/94 уч. г.
             Методические указания для
слушателей ФПКП
         по моделированию систем и сетей связи
на GPSS/PC
                              Часть 1
                  ОСНОВЫ МОДЕЛИРОВАНИЯ НА
GPSS/PC
        Составители: Л.А.Воробейчиков,
Г.К.Сосновиков
     Ил. 24, список лит. 8 назв.
     Издание утверждено на заседании кафедры
вычислительной
    
математики и программирования 11 марта 1993 г., протокол N6
     Рецензент Васильев В.К., канд. техн.
наук, доцент
.
                             ВВЕДЕНИЕ
     Процессы функционирования различных
систем и сетей связи могут
быть  представлены  той  или  иной 
совокупностью  систем массового
обслуживания
(СМО) - стохастических, динамических, дискретно-непре-
рывных
математических моделей. Исследование характеристик таких мо-
делей
может проводиться либо аналитическими 
методами,  либо  путем
имитационного
моделирования [1-6].
     Имитационная модель отображает  стохастический  процесс  смены
дискретных
состояний СМО в непрерывном времени в форме моделирующе-
го
алгоритма.  При его реализации на  ЭВМ 
производится  накопление
статистических
данных по тем атрибутам модели, характеристики кото-
рых
являются предметом исследований. По окончании моделирования на-
копленная
статистика обрабатывается, и результаты моделирования по-
лучаются
в виде выборочных распределений исследуемых величин или их
выборочных
моментов.  Таким образом, при
имитационном моделировании
систем
массового обслуживания речь  всегда  идет 
о  статистическом
имитационном
моделировании [5;6].
     Сложные функции моделирующего алгоритма
могут быть реализованы
средствами
универсальных языков программирования (Паскаль, Си), что
предоставляет
неограниченные возможности в 
разработке,  отладке  и
использовании
модели.  Однако подобная гибкость
приобретается ценой
больших
усилий,  затрачиваемых  на 
разработку  и  программирование
весьма  сложных моделирующих алгоритмов,  оперирующих со списковыми
структурами
данных. Альтернативой этому является использование спе-
циализированных
языков имитационного моделирования [5-7].
     Специализированные языки имеют средства
описания  структуры  и
процесса
функционирования моделируемой системы, что значительно об-
легчает
и упрощает программирование имитационных моделей, поскольку
основные  функциии моделирующего алгоритма при этом
реализуются ав-
томатически.
Программы  имитационных  моделей на специализированных
языках
моделирования близки  к  описаниям 
моделируемых  систем  на
естественном
языке, что позволяет конструировать сложные имитацион-
ные
модели пользователям,  не являющимся
профессиональными програм-
мистами.
     Одним из 
наиболее эффективных и распространенных языков моде-
лирования
сложных дискретных систем является в настоящее время язык
GPSS  [1;4;7]. 
Он  может быть с наибольшим
успехом использован для
моделирования
систем,  формализуемых в виде систем
массового обслу-
живания.
В качестве объектов языка используются аналоги таких стан-
дартных
компонентов СМО, как заявки, обслуживающие приборы, очереди
                              - 3 -
и т.п.
Достаточный набор подобных компонентов позволяет конструиро-
вать
сложные имитационные модели,  сохраняя
привычную  терминологию
СМО.
     На персональных  компьютерах (ПК) типа IBM/PC язык GPSS реали-
зован в
рамках пакета прикладных программ GPSS/PC [8]. Основной мо-
дуль  пакета 
представляет собой интегрированную среду,  включающую
помимо
транслятора со входного языка средства ввода и 
редактирова-
ния
текста модели, ее отладки и наблюдения за процессом моделирова-
ния,  графические средства отображения
атрибутов  модели,  а 
также
средства  накопления 
результатов  моделирования в базе
данных и их
статистической
обработки.  Кроме основного модуля
в  состав  пакета
входит
модуль создания стандартного отчета GPSS/PC, а также ряд до-
полнительных
модулей и файлов.
     В данном издании,  состоящем из двух частей, излагаются основы
моделирования
систем и сетей связи с использованием пакета GPSS/PC.
В
первой части рассматриваются основные понятия и средства GPSS/PC,
приемы  конструирования GPSS-моделей и технология
работы с пакетом.
Изложение
материала сопровождается небольшими 
учебными  примерами.
Относительно   подробное  
рассмотрение   языка   GPSS/PC  
вызвано
отсутствием
в литературе учебного материала по данной версии языка.
     Во второй части рассматриваются примеры
GPSS-моделей различных
систем
и сетей массового обслуживания, 
используемых для формализа-
ции  процессов 
функционирования  систем и сетей
связи.  Приводится
также
ряд примеров моделирования систем и сетей связи с использова-
нием
GPSS/PC. Подробно комментируются тексты GPSS-моделей и резуль-
таты
моделирования.
                    1. ОБЩИЕ СВЕДЕНИЯ О
GPSS/PC
     Исходная программа на языке GPSS/PC,  как и программа на любом
языке
программирования,  представляет собой
последовательность опе-
раторов.
Операторы GPSS/PC записываются и вводятся в ПК в следующем
формате:
         я1номеря0_я1строки имя операция
операнды ; комментарии
     Все операторы  исходной  программы  должны 
начинаться с я1номе-
я1рая0_я1строки
я0- целого положительного числа от 1 до 9999999. После вво-
да
операторов они располагаются в исходной программе в соответствии
с
нумерацией строк.  Обычно нумерация
производится с некоторым  ша-
гом,
отличным от 1, чтобы иметь возможность добавления операторов в
нужное
место исходной программы.  Некоторые
операторы  удобно  вво-
дить,  не включая их в исходную программу. Такие
операторы вводятся
                              - 4 -
без
номера строки.
     В настоящем издании при описании формата
операторов и в приме-
рах
моделей номера строк будут 
опускаться  для  лучшей 
читаемости
текста.
     Отдельные операторы могут иметь я1имя
я0для ссылки на эти операто-
ры в
других операторах. Если такие ссылки отсутствуют, то этот эле-
мент
оператора не является обязательным.
     В поле я1операции я0записывается ключевое
слово (название операто-
ра),
указывающее конкретную функцию, выполняемую данным оператором.
Это  поле 
оператора является обязательным. 
У некоторых операторов
поле
операции включает в себя также я1вспомогательный операндя0.
     В полях я1операндов я0записывается
информация,  уточняющая и конк-
ретизирующая
выполнение функции,  определенной в поле
операции. Эти
поля в
зависимости от типа операции 
содержат  до  семи 
операндов,
расположенных  в  определенной  последовательности  и  обозначаемых
обычно
первыми буквами латинского алфавита от 
A  до  G.  Некоторые
операторы  вообще не имеют операндов,  а в некоторых операнды могут
быть
опущены,  при этом устанавливаются их
стандартные значения (по
умолчанию).  При записи операндов используется
позиционный принцип:
пропуск
операнда отмечается запятой.
     Необязательные я1комментарии я0в случае
их присутствия  отделяются
от поля
операндов точкой с запятой.  Комментарии
не могут содержать
букв русского
алфавита.
     Операторы GPSS/PC  записываются,  начиная с первой позиции, 
в
свободном
формате, т.е. отдельные поля разделяются произвольным ко-
личеством
пробелов.  При вводе исходной программы
в интегрированной
среде
GPSS/PC размещение отдельных полей операторов с  определенным
количеством
интервалов между ними производится автоматически.
     Каждый оператор GPSS/PC относится к
одному из  четырех  типов:
операторы-блоки,
операторы определения объектов, управляющие опера-
торы и
операторы-команды.
     я1Операторы-блоки я0формируют  логику 
модели.  В  GPSS/PC имеется
около
50 различных видов блоков,  каждый из
которых выполняет  свою
конкретную
функцию. За каждым из таких блоков стоит соответствующая
подпрограмма
транслятора,  а операнды каждого блока
служат парамет-
рами
этой подпрограммы.
     я1Операторы определения обя0ъя1ектов
я0служат для описания  параметров
некоторых  объектов 
GPSS/PC (о самих объектах речь пойдет дальше).
Примерами
параметров объектов могут быть количество каналов в  мно-
гоканальной  системе 
массового  обслуживания,  количество 
строк и
столбцов
матрицы и т.п.
                              - 5 -
     я1Управляющие операторы  я0служат для управления процессом модели-
рования
(прогоном модели). 
я1Операторы-команды 
я0позволяют  управлять
работой
интегрированной среды GPSS/PC. Управляющие операторы и опе-
раторы-команды
обычно не включаются в исходную 
программу,  а  вво-
дятся  непосредственно  с  клавиатуры  ПК в процессе интерактивного
взаимодействия
с интегрированной средой.
     После трансляции  исходной программы в памяти ПК создается так
называемая
я1текущая модель,  я0являющаяся
совокупностью  разного  типа
я1объектовя0,  каждый 
из  которых  представляет  собой некоторый набор
чисел в
памяти ПК,  описывающих свойства и
текущее состояние объек-
та.  Объекты GPSS/PC можно разделить на семь
классов: динамические,
операционные,
аппаратные, статистические, вычислительные, запомина-
ющие и
группирующие.
     Динамические объекты,   соответствующие   заявкам  в  системах
массового
обслуживания, называются в GPSS/PC я1транзактамия0. Они "соз-
даются"
и "уничтожаются" так, как это необходимо по логике модели в
процессе
моделирования. С каждым транзактом может быть связано про-
извольное  число параметров,  несущих в себе необходимую информацию
об этом
транзакте. Кроме того, транзакты могут иметь различные при-
оритеты.
     Операционные объекты GPSS/PC, называемые
я1блокамия0, соответству-
ют
операторам-блокам исходной программы.  Они,  как уже говорилось,
формируют
логику модели, давая транзактам указания: куда идти и что
делать
дальше. Модель системы на GPSS/PC можно представить совокуп-
ностью
блоков,  объединенных в соответствии с
логикой работы реаль-
ной  системы 
в так называемую я1блок-схемуя0. 
Блок-схема модели может
быть
изображена графически,  наглядно
показывая взаимодействие бло-
ков в
процессе моделирования.
     Аппаратные объекты GPSS/PC - это
абстрактные элементы,  на ко-
торые
может быть расчленено (декомпозировано) оборудование реальной
системы.  К ним относятся я1одноканальные я0и
я1многоканальные устройства
и
я1логические переключатели. 
я0Многоканальное устройство иногда назы-
вают
я1памятьюя0.
     Одноканальные и многоканальные устройства
соответствуют обслу-
живающим
приборам в  СМО.  Одноканальное  устройствоя1,  я0которое  для
краткости
далее  будем называть просто
устройством,  может обслужи-
вать
одновременно только один транзакт. 
Многоканальное  устройство
(МКУ)  может 
обслуживать одновременно несколько транзактов.  Логи-
ческие
переключатели (ЛП) используются для 
моделирования  двоичных
состояний  логического 
или  физического характера.  ЛП может нахо-
диться
в двух состояниях: включено и выключено. Его состояние может
                              - 6 -
изменяться
в процессе моделирования,  а также
опрашиваться для при-
нятия
определенных решений.
     Статистические объекты  GPSS/PC 
служат  для сбора и обработки
статистических
данных о функционировании модели. 
К  ним  относятся
я1очереди
я0и я1таблицыя0.
     Каждая очередь обеспечивает сбор и
обработку данных о транзак-
тах,
задержанных в какой-либо точке модели, 
например перед однока-
нальным
устройством.  Таблицы используются для
получения выборочных
распределений
некоторых случайных величин,  например
времени пребы-
вания
транзакта в модели.
     К вычислительным  объектам GPSS/PC относятся я1переменные
я0(ариф-
метические
и булевские) и я1функциия0.  Они
используются для вычисления
некоторых
величин, заданных арифметическими или логическими выраже-
ниями
либо табличными зависимостями.
     Запоминающие объекты GPSS/PC обеспечивают
хранение в памяти ПК
отдельных
величин,  используемых в модели,  а также массивов  таких
величин.
К ним относятся так называемые я1сохраняемые величины я0и я1мат-
я1рицы
сохраняемых величин.
     К объектам  группирующего класса относятся я1списки пользователя
и
я1группы. я0Списки пользователя используются для организации очередей
с  дисциплинами,  отличными  от  дисциплины "раньше пришел - раньше
обслужен".
Группы в данном издании рассматриваться не будут.
     Каждому объекту  того  или иного класса
соответствуют я1числовые
я1атрибутыя0,
описывающие его состояние в данный момент модельного вре-
мени.  Кроме того, 
имеется ряд так называемых я1системных атрибутов,
относящихся
не к отдельным объектам,  а к модели в
целом.  Значения
атрибутов
всех объектов модели по окончании моделирования выводятся
в
стандартный отчет GPSS/PC. Большая часть атрибутов доступна прог-
раммисту  и составляет так называемые я1стандартные
числовые атрибуты
я1(СЧА),
я0которые могут использоваться в качестве операндов операторов
исходной
программы. Все СЧА в GPSS/PC являются целыми числами.
     Каждый объект GPSS/PC имеет я1имя я0и
я1номеря0. Имена объектам даются
в
различных операторах исходной программы, а соответствующие им но-
мера
транслятор присваивает автоматически. Имя объекта представляет
собой
начинающуюся с буквы последовательность букв латинского алфа-
вита,
цифр и символа "подчеркивание". При необходимости имени любо-
го
объекта, кроме имени блока, можно поставить в соответствие любой
номер с
помощью оператора описания EQU, имеющего следующий формат:
                        я1имяя0    EQU   
я1номер
Блокам
присваиваются  их порядковые номера в
исходной программе (не
путать
с номерами строк!).
                              - 7 -
     Для я1ссылки  я0на какой-либо стандартный числовой атрибут некото-
рого
объекта соответствующий операнд оператора 
исходной  программы
записывается
одним из следующих способов:
       яШ1
                             
я1СЧАя0$я1имяя0                     
;
       яШ1.5
                              я1СЧАjя0                         ,
где
я1СЧА я0- системное обозначение (название) конкретного стандартного
числового
атрибута данного объекта;  я1имя я0- имя
объекта;  я1j я0-  номер
объекта;
$ - символ-разделитель.
     я1Прогон я0текущей модели, т.е.
собственно моделирование, выполня-
ется с
помощью специальной управляющей программы, 
которую называют
симулятором
(от английского SIMULATE - моделировать, 
имитировать).
Работа
GPSS-модели под управлением симулятора заключается в переме-
щении
транзактов от одних блоков к другим, 
аналогично тому,  как в
моделируемой
СМО перемещаются заявки, соответствующие транзактам.
     В начальный момент времени в GPSS-модели
нет ни  одного  тран-
закта.  В 
процессе  моделирования симулятор
генерирует транзакты в
определенные
моменты времени в соответствии с теми логическими пот-
ребностями,  которые возникают в моделируемой
системе.  Подобным же
образом
транзакты покидают модель в определенные моменты времени  в
зависимости
от специфики моделируемой системы. В общем случае в мо-
дели
одновременно существует большое 
число  транзактов,  однако 
в
каждый
момент времени симулятор осуществляет продвижение только ка-
кого-либо
одного транзакта.
     Если транзакт начал свое движение,  он перемещается от блока к
блоку
по пути, предписанному блок-схемой. В тот момент, когда тран-
закт
входит в некоторый блок, на исполнение вызывается подпрограмма
симулятора,  соответствующая типу этого блока,  а после ее выполне-
ния,
при котором реализуется функция данного блока, транзакт "пыта-
ется"
войти в следующий блок. Такое продвижение транзакта продолжа-
ется до
тех пор, пока не произойдет одно из следующих возможных со-
бытий:
     1) транзакт входит в блок, функцией
которого является удаление
транзакта
из модели;
     2) транзакт входит в блок, функцией
которого является задержка
транзакта
на некоторое определенное в модели время;
     3) транзакт "пытается" войти
в  следующий  блок,  однако  блок
"отказывается"  принять его.  В этом случае транзакт остается в том
блоке,  где находился, и позднее будет повторять
свою попытку войти
в
следующий блок.  Когда условия в модели
изменятся,  такая попытка
может
оказаться успешной, и транзакт сможет продолжить свое переме-
щение
по блок-схеме.
                              - 8 -
     Если возникло одно из описанных выше
условий, обработка данно-
го  транзакта прекращается,  и начинается перемещение другого тран-
закта.  Таким образом, выполнение моделирования
симулятором продол-
жается
постоянно.
     Проходя через блоки модели, каждый
транзакт вносит вклад в со-
держимое  я1счетчиков блоковя0.  Значения этих счетчиков доступны прог-
раммисту
через СЧА блоков: W - текущее содержимое блока и N - общее
количество
входов в блок.
     Каждое продвижение транзакта в модели
является событием, кото-
рое
должно произойти в определенный момент модельного времени.  Для
того,  чтобы поддерживать правильную  временную 
последовательность
событий,
симулятор имеет я1таймер я0модельного времени, который автома-
тически
корректируется в соответствии с логикой, 
предписанной  мо-
делью.
     Таймер GPSS/PC имеет следующие
особенности:
     1) регистрируются  только целые значения (все временные интер-
валы в
модели изображаются целыми числами);
     2) единица модельного времени
определяется разработчиком моде-
ли,  который задает все временные интервалы в
одних и тех же,  выб-
ранных
им единицах;
     3) симулятор не анализирует состояние
модели в каждый  следую-
щий
момент модельного времени (отстоящий от текущего на единицу мо-
дельного
времени),  а продвигает таймер к  моменту 
времени,  когда
происходит
ближайшее следующее событие.
     Значения таймера доступны программисту
через системные СЧА  C1
(я1относительное
времяя0) и AC1 (я1абсолютное времяя0).
     Центральной задачей, выполняемой
симулятором, является опреде-
ление того,
какой транзакт надо выбрать следующим для продвижения в
модели,
когда его предшественник прекратил свое продвижение. С этой
целью
симулятор рассматривает каждый транзакт как элемент некоторо-
го
списка.  В относительно простых
моделях  используются  лишь 
два
основных
списка: я1список текущих событий я0и я1список будущих событийя0.
     Список текущих событий включает в себя те
транзакты, планируе-
мое  время продвижения которых равно или меньше
текущего модельного
времени
(к последним относятся  транзакты,  движение 
которых  было
заблокировано
ранее).  Он организуется в порядке
убывания приорите-
тов
транзактов,  а в пределах каждого уровня
приоритета - в порядке
поступления
транзактов.
     Список будущих событий включает в себя
транзакты,  планируемое
время  продвижения которых больше текущего
времени,  т.е.  события,
связанные
с продвижением этих транзактов,  должны
произойти в буду-
                              - 9 -
щем.  Этот 
список  организуется в порядке
возрастания планируемого
времени
продвижения транзактов.
     Симулятор GPSS/PC  помещает транзакты в зависимости от условий
в
модели в тот или иной список и переносит транзакты  из  списка  в
список,  просматривает списки, выбирая следующий
транзакт для обра-
ботки,  корректирует таймер модельного времени после
обработки всех
транзактов
в списке текущих событий.
       2. ОСНОВНЫЕ БЛОКИ GPSS/PC И СВЯЗАННЫЕ С
НИМИ ОБЪЕКТЫ
                2.1. Блоки, связанные с
транзактами
     С транзактами  связаны блоки создания, 
уничтожения,  задержки
транзактов,
изменения их атрибутов и создания копий транзактов.
     Для создания   транзактов, 
входящих  в  модель, 
служит  блок
GENERATE
(генерировать), имеющий следующий формат:
                   я1имяя0    GENERATE    A,B,C,D,E
     В поле A задается среднее значение
интервала времени между мо-
ментами
поступления в модель двух последовательных транзактов. Если
этот
интервал постоянен,  то поле B не
используется. Если же интер-
вал
поступления является случайной величиной, 
то в поле B указыва-
ется
модификатор среднего значения, который может быть задан в виде
модификатора-интервала
или модификатора-функции.
     Модификатор-интервал используется,  когда интервал поступления
транзактов
является случайной величиной с равномерным законом расп-
ределения
вероятностей. В этом случае в поле B может быть задан лю-
бой  СЧА, 
кроме ссылки на функцию,  а
диапазон изменения интервала
поступления
имеет границы A-B, A+B.
     Например, блок
                        GENERATE    100,40
создает
транзакты  через  случайные 
интервалы времени,  равномерно
распределенные
на отрезке [60;140].
     Модификатор-функция используется, если
закон распределения ин-
тервала
поступления отличен от равномерного. В этом случае в поле B
должна  быть записана ссылка на функцию (ее
СЧА),  описывающую этот
закон,  и случайный интервал поступления  определяется,  как  целая
часть
произведения поля A (среднего значения) на вычисленное значе-
ние
функции.
     В поле C задается момент поступления в
модель первого транзак-
та.  Если это поле пусто или равно 0,  то момент появления  первого
транзакта
определяется операндами A и B.
                              - 10 -
     Поле D задает общее число транзактов,
которое должно быть соз-
дано
блоком GENERATE. Если это поле пусто, то блок генерирует неог-
раниченное
число транзактов до завершения моделирования.
     В поле E задается я1приоритетя0,  присваиваемый генерируемым тран-
зактам.
Число уровней приоритетов неограничено, причем самый низкий
приоритет
- нулевой.  Если поле E пусто,  то генерируемые транзакты
имeют
нулевой приоритет.
     Транзакты имеют ряд стандартных числовых
атрибутов.  Например,
СЧА с
названием PR позволяет ссылаться на приоритет транзакта.  СЧА
с
названием M1 содержит так называемое я1резидентное время я0транзакта,
т.е.
время, прошедшее с момента входа транзакта в модель через блок
GENERATE.  СЧА с названием XN1 содержит внутренний
я1номер транзактая0,
который
является уникальным и позволяет всегда отличить один  тран-
закт от
другого.  В отличие от СЧА других
объектов,  СЧА транзактов
не
содержат ссылки на имя или номер транзакта. 
Ссылка на СЧА тран-
закта
всегда относится к активному транзакту, т.е. транзакту, обра-
батываемому
в данный момент симулятором.
     Важными стандартными числовыми атрибутами
транзактов  являются
значения  их параметров.  Любой транзакт может иметь неограниченное
число
параметров,  содержащих те или иные
числовые значения. Ссылка
на  этот 
СЧА  транзактов  всегда относится к активному транзакту и
имеет
вид Pя1j я0или Р$я1имяя0,  где я1j я0и
я1имя я0- номер и имя параметра  соот-
ветственно.  Такая ссылка возможна только в том
случае,  если пара-
метр с
указанным номером или именем существует, т.е. в него занесе-
но
какое-либо значение.
     Для присваивания  параметрам 
начальных значений или изменения
этих
значений служит блок ASSIGN 
(присваивать),  имеющий  следущий
формат:
                      я1имяя0    ASSIGN   
A,B,C
     В поле 
A  указывается номер или имя
параметра,  в который за-
носится
значение операнда B. Если в поле A после имени (номера) па-
раметра
стоит знак + или -,  то значение
операнда B добавляется или
вычитается
из текущего содержимого параметра.  В
поле С может  быть
указано
имя или номер функции-модификатора, 
действующей аналогично
функции-модификатору
в поле B блока GENERATE.
     Например, блок
                        ASSIGN    5,0
записывает
в параметр с номером 5 значение 0, а блок
                        ASSIGN    COUNT+,1
добавляет
1 к текущему значению параметра с именем COUNT.
                              - 11 -
.
     Для записи текущего модельного  времени 
в  заданный  параметр
транзакта
служит блок MARK (отметить), имеющий следующий формат:
                         я1имяя0    MARK   
A
     В поле A указывается номер или имя
параметра транзакта,  в ко-
торый
заносится текущее модельное время при входе этого транзакта в
блок
MARK.  Содержимое этого параметра может
быть позднее использо-
вано для
определения я1транзитного времени я0пребывания транзакта в ка-
кой-то
части модели с помощью СЧА с названием MP.
     Например, если на входе участка модели
поместить блок
                          MARK    MARKER                   ,
то
на  выходе  этого участка СЧА MP$MARKER будет содержать разность
между
текущим модельным временем и временем, 
занесенным в параметр
MARKER
блоком MARK.
     Если поле A блока MARK пусто,  то текущее время  заносится  на
место  отметки 
времени входа транзакта в модель, 
используемой при
определении
резидентного времени транзакта с помощью СЧА M1.
     Для изменения приоритета транзакта служит
блок PRIORITY (прио-
ритет),
имеющий следующий формат:
                      я1имяя0    PRIORITY    A,B
     В поле A записывается новый приоритет
транзакта.  В поле B мо-
жет  содержаться ключевое слово BU,  при наличии которого транзакт,
вошедший
в блок,  помещается в списке
текущих  событий  после 
всех
остальных  транзактов 
новой приоритетной группы,  и
список текущих
событий
просматривается с начала.  Использование
такой  возможности
будет
рассмотрено ниже.
     Для удаления транзактов из модели служит
блок  TERMINATE  (за-
вершить),
имеющий следующий формат:
                       я1имяя0    TERMINATE    A
     Значение поля  A указывает,  на сколько
единиц уменьшается со-
держимое
так называемого счетчика завершений при входе транзакта  в
данный
блок TERMINATE.  Если поле A не
определено, то оно считается
равным
0,  и транзакты,  проходящие через такой блок,  не уменьшают
содержимого
счетчика завершений.
     Начальное значение счетчика завершений
устанавливается  управ-
ляющим
оператором START (начать), 
предназначенным для запуска про-
гона
модели.  Поле A этого оператора  содержит 
начальное  значение
счетчика
завершений  (см.  разд. 
3).  Прогон модели заканчивается,
когда
содержимое счетчика завершений обращается в 0. Таким образом,
в  модели 
должен быть хотя бы один блок TERMINATE с непустым полем
A,
иначе процесс моделирования никогда не завершится.
                              - 12 -
.
     Текущее значение счетчика завершений
доступно программисту че-
рез
системный СЧА TG1.
     Участок блок-схемы    модели,  
связанный   с   парой  
блоков
GENERATE-ТERMINATE,  называется 
сегментом.  Простые  модели 
могут
состоять
из одного сегмента, в сложных моделях может быть несколько
сегментов.
     Например, простейший  сегмент модели,  состоящий всего из двух
блоков
GENERATE и TERMINATE и приведенный на рис. 1, в совокупности
с управлящим
оператором START моделирует процесс создания случайно-
го
потока транзактов,  поступащих в модель
со средним интервалом  в
100
единиц модельного времени,  и
уничтожения этих транзактов.  На-
чальное
значение счетчика завершений равно 1000. 
Каждый  транзакт,
проходящий  через блок TERMINATE,  вычитает из счетчика единицу,  и
таким
образом моделирование завершится, 
когда  тысячный  по 
счету
транзакт
войдет в блок TERMINATE.  При этом
точное значение таймера
в
момент завершения прогона непредсказуемо. Следовательно, в приве-
денном  примере продолжительность прогона
устанавливается не по мо-
дельному
времени,  а по количеству
транзактов,  прошедших через мо-
дель.
       яШ1
                        GENERATE    100,40
                        TERMINATE   1
                        START       1000
       яШ1.5
                              Рис. 1
     Если необходимо  управлять 
продолжительностью  прогона по
мо-
дельному
времени, то в модели используется специальный сегмент, на-
зываемый
сегментом таймера.
       яШ1
                        GENERATE    100,40
                        TERMINATE
                        GENERATE    100000
                        TERMINATE   1
                        START       1
       яШ1.5
                              Рис. 2
     Например, в модели из двух
сегментов,  приведенной на рис.  2,
первый
(основной) сегмент выполняет те же функции, что и в предыду-
щем
примере.  Заметим,  однако, что поле A блока TERMINATE в первом
сегменте
пусто, т.е. уничтожаемые транзакты не уменьшают содержимо-
го  счетчика 
завершений.  Во втором сегменте
блок GENERATE создаст
                              - 13 -
первый
транзакт в момент модельного времени, равный 100000. Но этот
транзакт
окажется и последним в данном сегменте, 
так как,  войдя в
блок
TERMINATE,  он обратит в  0 
содержимое  счетчика  завершений,
установленное
оператором START равным 1.  Таким
образом, в этой мо-
дели
гарантируется завершение прогона в определенный момент модель-
ного
времени,  а точное количество
транзактов,  прошедших через мо-
дель,
непредсказуемо.
     В приведенных примерах транзакты,
входящие в модель через блок
GENERATE,  в тот же момент модельного времени
уничтожались в  блоке
TERMINATE.  В моделях систем массового обслуживания
заявки обслужи-
ваются
приборами (каналами) СМО  в  течение 
некоторого  промежутка
времени
прежде, чем покинуть СМО. Для моделирования такого обслужи-
вания,
т.е. для задержки транзактов на определенный отрезок модель-
ного  времени, 
служит блок ADVANCE (задержать), 
имеющий следующий
формат:
                       я1имяя0    ADVANCE   
A,B
     Операнды в полях A и B имеют тот  же 
смысл,  что  и 
в  соот-
ветствующих
полях блока GENERATE.  Следует отметить,
что транзакты,
входящие
в блок ADVANCE,  переводятся из списка
текущих  событий  в
список
будущих событий, а по истечении вычисленного времени задерж-
ки
возвращаются назад,  в список текущих
событий,  и их продвижение
по  блок-схеме продолжается.  Если вычисленное время задержки равно
0,  то транзакт в тот же момент модельного
времени переходит в сле-
дующий
блок, оставаясь в списке текущих событий.
     Например, в сегменте, приведенном на рис.
3, транзакты, посту-
пающие  в модель из блока GENERATE через случайные
интервалы време-
ни,
имеющие равномерное распределение на отрезке [60;140], попадают
в  блок ADVANCE.  Здесь определяется случайное время задержки тран-
закта,  имеющее равномерное распределение на  отрезке 
[30;130],  и
транзакт
переводится в список будущих событий. По истечении времени
задержки
транзакт возвращается в список текущих событий и входит  в
блок
TERMINATE, где уничтожается. Заметим, что в списке будущих со-
бытий,
а значит и в блоке  ADVANCE  может 
одновременно  находиться
произвольное
количество транзактов.
       яШ1
                        GENERATE    100,40
                        ADVANCE     80,50
                        TERMINATE   1
       яШ1.5
                              Рис. 3
                              - 14 -
.
     В рассмотренных выше примерах случайные
интервалы времени под-
чинялись
равномерному закону распределения вероятностей.  Для полу-
чения
случайных величин с другими распределениями в GPSS/PC исполь-
зуются
вычислительные объекты: переменные и функции.
     Как известно,  произвольная случайная величина связана со слу-
чайной  величиной 
R,  имеющей равномерное
распределение на отрезке
[0;1],  через свою обратную функцию  распределения.  Для  некоторых
случайных  величин уравнение связи имеет явное
решение,  и значение
случайной
величины с  заданным  распределением  вероятностей  может
быть
вычислено через R по формуле.  Так,
например, значение случай-
ной
величины E с показательным (экспоненциальным) распределением  с
параметром
d вычисляется по формуле:
                         E= -(1/d) * ln(R)
Напомним,
что  параметр d имеет смысл
величины,  обратной математи-
ческому
ожиданию E, а, следовательно, 1/d - математическое ожидание
(среднее
значение) случайной величины E.
     Для получения случайной величины R с
равномерным распределени-
ем на
отрезке [0;1] в GPSS/PC имеются встроенные генераторы случай-
ных
чисел.  Для получения случайного числа
путем обращения к такому
генератору
достаточно записать системный СЧА RN с номером генерато-
ра,
например  RN1.  Правда,  встроенные  генераторы случайных чисел
GPSS/PC
дают числа не на отрезке [0;1],  а
целые  случайные  числа,
равномерно  распределенные  от 0 до 999,  но их
нетрудно привести к
указанному
отрезку делением на 1000.
     Проще всего  описанные  вычисления  в 
GPSS/PC  выполняются  с
использованием  я1арифметических переменныхя0.  Они могут быть целыми и
действительными.  я1Целые переменные я0определяются перед
началом моде-
лирования  с 
помощью  оператора определения
VARIABLE (переменная),
имеющего
следующий формат:
                   я1имяя0    VARIABLE    я1выражение
Здесь
я1имя я0- имя переменной, используемое для ссылок на нее, а я1выра-
я1жение
я0- арифметическое выражение, 
определяющее переменную. Арифме-
тическое  выражение представляет собой комбинацию
операндов,  в ка-
честве
которых могут выступать константы, 
СЧА  и  функции,  знаков
арифметических  операций 
и круглых скобок.  Следует
заметить,  что
знаком
операции умножения в GPSS/PC является символ # (номер).  Ре-
зультат
каждой промежуточной операции в целых переменных преобразу-
ется к
целому типу путем отбрасывания дробной части, и, таким обра-
зом,
результатом операции деления является целая часть частного.
     я1Действительные переменные  я0определяются  перед началом модели-
рования
с помощью оператора определения FVARIABLE, 
имеющего тот же
                              - 15 -
формат,  что и оператор VARIABLE. Отличие
действительных переменных
от
целых заключается в том,  что в  действительных  переменных  все
промежуточные  операции 
выполняются  с  сохранением 
дробной части
чисел,
и лишь окончательный результат приводится к целому типу отб-
расыванием
дробной части.
     Арифметические переменные обоих типов
имеют единственный СЧА с
названием
V, значением которого является результат вычисления ариф-
метического
выражения, определяющего переменную. Вычисление выраже-
ния  производится при входе транзакта в
блок,  содержащий ссылку на
СЧА V с
именем переменной.
     Действительные переменные  могут быть использованы для получе-
ния
случайных интервалов времени с показательным законом  распреде-
ления.  Пусть 
в модели из примера на рис.  3
распределения времени
поступления
транзактов и времени задержки должны иметь 
показатель-
ный
закон. Это может быть сделано так, как показано на рис. 4.
       яШ1
           TARR    FVARIABLE    
-100#LOG((1+RN1)/1000)
           TSRV    FVARIABLE    
-80#LOG((1+RN1)/1000)
                   GENERATE      V$TARR
                   ADVANCE       V$TSRV
                   TERMINATE     1
       яШ1.5
                              Рис. 4
     Переменная с именем TARR задает выражение
для  вычисления  ин-
тервала  поступления со средним значением 100,  вторая переменная с
именем
TSRV - для вычисления времени задержки со средним  значением
80.  Блоки 
GENERATE  и  ADVANCE 
содержат в поле A ссылки на соот-
ветствующие
переменные,  при этом поле B не
используется, так как в
поле A
содержится случайная величина, не нуждающаяся в модификации.
     Большинство случайных величин не  может 
быть  получено  через
случайную
величину R с помощью арифметического выражения. Кроме то-
го,
такой  способ  является достаточно трудоемким, 
так как требует
обращения
к математическим  функциям,  вычисление 
которых  требует
десятков  машинных 
операций.  Другим  возможным 
способом является
использование
вычислительных объектов GPSS/PC типа я1функцияя0.
     Функции используются для вычисления
величин,  заданных таблич-
ными
зависимостями. Каждая функция определяется перед началом моде-
лирования
с помощью оператора определения FUNCTION (функция), имею-
щего
следующий формат:
                      я1имяя0    FUNCTION    A,B
Здесь
я1имя я0- имя функции,  используемое для
ссылок на нее; A - стан-
                              - 16 -
дартный
числовой атрибут,  являющийся аргументом
функции;  B -  тип
функции
и число точек таблицы, определяющей функцию.
     Существует пять типов функций.  Рассмотрим вначале я1непрерывные
я1числовые
функции, я0тип которых кодируется буквой C. Так, например, в
определении
непрерывной числовой функции,  таблица
которой содержит
24
точки, поле B должно иметь значение C24.
     При использовании непрерывной функции
для  генерирования  слу-
чайных  чисел ее аргументом должен быть один из
генераторов случай-
ных
чисел RNj. Так, оператор для определения функции показательного
распределения
может иметь следующий вид:
                    EXP    FUNCTION    RN1,C24
Особенностью
использования  встроенных  генераторов случайных чисел
RNj в
качестве аргументов функций является то, 
что их  значения  в
этом
контексте интерпретируются как дробные числа от 0 до 0,999999.
     Таблица с координатами точек функции
располагается в  строках,
следующих  непосредственно  за  оператором
FUNCTION.  Эти строки не
должны
иметь поля нумерации. Каждая точка таблицы задается парой Xi
(значение
аргумента) и Yi (значение функции), 
отделяемых  друг  от
друга
запятой. Пары координат отделяются друг от друга символом "/"
и
располагаются на произвольном 
количестве  строк.  Последователь-
ность
значений аргумента Xi должна быть строго возрастающей.
     Как уже отмечалось,  при использовании функции в поле B блоков
GENERATE
и ADVANCE вычисление интервала поступления или времени за-
держки  производится путем умножения операнда A на
вычисленное зна-
чение
функции.  Отсюда следует, что функция,
используемая для гене-
рирования  случайных 
чисел с показательным распределением, 
должна
описывать
зависимость y=-ln(x),  представленную
в  табличном  виде.
Оператор
FUNCTION с такой таблицей, содержащей 24 точки для обеспе-
чения
достаточной точности аппроксимации, имеет следующий вид:
       яШ1
         EXP    FUNCTION    RN1,C24
        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.85/.88,2.12/.9,2.3
       
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
       яШ1.5
       
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
     Вычисление непрерывной функции
производится следующим образом.
Сначала
определяется интервал (Xi;Xi+1), на котором находится теку-
щее
значение СЧА-аргумента (в нашем примере - сгенерированное  зна-
чение
RN1). Затем на этом интервале выполняется линейная интерполя-
ция с
использованием соответствующих значений Yi и Yi+1.  Результат
интерполяции
усекается (отбрасыванием дробной части) и используется
в
качестве значения функции. Если функция служит операндом B блоков
GENERATE  или 
ADVANCE,  то усечение результата
производится только
                              - 17 -
после
его умножения на значение операнда A.
     Использование функций для получения
случайных чисел с заданным
распределением
дает хотя и менее точный результат за 
счет  погреш-
ностей
аппроксимации,  но зато с меньшими
вычислительными затратами
(несколько
машинных операций на выполнение линейной 
интерполяции).
Чтобы к
погрешности аппроксимации не добавлять слишком большую пог-
решность
усечения, среднее значение при использовании показательных
распределений
должно быть достаточно большим (не менее 50). Эта ре-
комендация
относится и к использованию переменных.
     Функции всех типов имеют единственный СЧА
с названием FN, зна-
чением
которого является вычисленное значение 
функции.  Вычисление
функции
производится при входе транзакта в блок, 
содержащий ссылку
на СЧА
FN с именем функции.
     Заменим в примере на рис.  4 переменные TARR и TSRV на функцию
EXP
(рис. 5).
     Поскольку в обеих моделях используется
один и тот же генератор
RN1,  интервалы 
поступления  и  задержки, 
вычисляемые  в   блоках
GENERATE
и ADVANCE, должны получиться весьма близкими, а может быть
и
идентичными.  При большом количестве
транзактов, пропускаемых че-
рез  модель (десятки и сотни тысяч),  разница в скорости вычислений
должна
стать заметной.
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                ADVANCE     80,FN$EXP
                TERMINATE   1
       яШ1.5
                              Рис. 5
     Особенностью непрерывных функций является
то, что они принима-
ют
"непрерывные" (но только целочисленные) значения в диапазоне  от
Y1 до
Yn , где n - количество точек таблицы. В отличие от них я1диск-
я1ретные
числовые функциия0, тип которых кодируется буквой D в операнде
B
оператора определения функции, 
принимают только отдельные (диск-
ретные)
значения,  заданные координатами Yi в
строках, следующих за
оператором
определения FUNCTION.  При вычислении
дискретной функции
текущее
значение  СЧА-аргумента,  указанного 
в  поле  A  оператора
FUNCTION,  сравнивается по условию <=
последовательно со всеми зна-
чениями
упорядоченных по возрастанию 
координат  Xi  до 
выполнения
                              - 18 -
этого  условия при некотором i.  Значением функции становится целая
часть
соответствующего значения Yi.
     Если последовательность значений
аргумента таблицы с координа-
тами   точек  
функции   представляет   числа  
натурального   ряда
(1,2,3,...,n),
то  такую дискретную функцию с целью
экономии памяти
и
машинного времени удобно определить как я1списковую числовую  функ-
я1цию
я0(тип L).
     Пусть в модели на рис.  5 заявки, 
моделируемые транзактами, с
равной  вероятностью 1/3 должны относиться к одному
из трех классов
(типов)
1,2 и 3,  а среднее время задержки
обслуживания заявок каж-
дого  типа должно составлять соответственно
70,  80 и 90 единиц мо-
дельного
времени. Это может быть обеспечено способом, показанным на
рис. 6.
     В блоке 
ASSIGN в параметр TYPE каждого сгенерированного тран-
закта
заносится тип заявки, получаемый с помощью дискретной функции
CLASS.
Аргументом функции является генератор случайных чисел RN1, а
координаты
ее таблицы представляют собой обратную функцию распреде-
ления  дискретной 
случайной  величины "класс
заявки" с одинаковыми
вероятностями
каждого из трех значений случайной величины.
     Поле A 
блока  ADVANCE  содержит 
ссылку  на списковую функцию
MEAN,
аргументом которой служит параметр TYPE входящих в блок тран-
зактов.  В 
зависимости  от  значений этого параметра (типа заявки)
среднее
время задержки принимает одно из 
трех  возможных  значений
функции
MEAN: 70, 80 или 90 единиц.
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
         CLASS  FUNCTION    RN1,D3
        .333,1/.667,2/1,3
         MEAN   FUNCTION    P$TYPE,L3
        1,70/2,80/3,90
                GENERATE    100,FN$EXP
                ASSIGN      TYPE,FN$CLASS
                ADVANCE     FN$MEAN,FN$EXP
                TERMINATE   1
       яШ1.5
                              Рис. 6
     Следует отметить,  что в 
данном  примере  можно 
было  бы  не
использовать  параметр 
TYPE  и обойтись одной дискретной
функцией,
возвращающей
с равной вероятностью одно из трех возможных 
значений
среднего
времени задержки. Однако использование параметров дает не-
                              - 19 -
которые
дополнительные возможности,  которые
будут рассмотрены поз-
же.
     Транзакты могут  входить  в  модель 
не  только   через  
блок
GENERATE,  но  и
путем создания копий уже существующих транзактов в
блоке
SPLIT (расщепить), имеющем следующий формат:
                       я1имяя0    SPLIT   
A,B,C
     В поле A задается число создаваемых копий
исходного  транзакта
(родителя),  входящего 
в  блок SPLIT.  После выхода из блока SPLIT
транзакт-родитель
направляется в следующий  блок,  а 
все  транзак-
ты-потомки
поступают в блок, указанный в поле B. Если поле B пусто,
то все
копии поступают в следующий блок.
     Транзакт-родитель и его потомки,
выходящие из блока SPLIT, мо-
гут
быть пронумерованы в параметре,  имя или
номер которого указаны
в  поле 
C.  Если у транзакта-родителя
значение этого параметра при
входе в
блок SPLIT было равно k,  то при выходе
из блока оно станет
равным  k+1, 
а значения этого параметра у транзактов-потомков ока-
жутся
равными k+2, k+3 и т.д.
     Например, блок
                        SPLIT    5,MET1,NUM
создает
пять копий исходного транзакта и направляет 
их  в  блок  с
именем  MET1. 
Транзакт-родитель и потомки нумеруются в параметре с
именем
NUM.  Если, например, перед входом в
блок значение этого па-
раметра  у транзакта-родителя было равно 0,  то при выходе из блока
оно
станет равным 1, а у транзактов-потомков значения параметра NUM
будут
равны 2, 3, 4, 5 и 6.
           2.2. Блоки, связанные с аппаратными
объектами
     Все примеры моделей, рассматривавшиеся
выше, пока еще не явля-
ются
моделями систем массового обслуживания, так как в них не учте-
на  основная 
особенность СМО:  конкуренция
заявок на использование
некоторых
ограниченных ресурсов системы.  Все
транзакты, входящие в
эти  модели 
через  блок GENERATE,  немедленно получают возможность
"обслуживания"
в блоке ADVANCE,  который  никогда 
не  "отказывает"
транзактам  во входе, сколько бы транзактов в нем не
находилось.
     Для моделирования  ограниченных  ресурсов  СМО в модели
должны
присутствовать
аппаратные объекты: одноканальные или многоканальные
устройства.
я1Одноканальные устройства я0создаются в текущей модели при
использовании
блоков SEIZE (занять) и RELEASE (освободить), имеющих
следующий
формат:
                              - 20 -
.
       яШ1
                        я1имя я0   SEIZE     
A
       яШ1.5
                        я1имяя0   я1 я0RELEASE    A
     В поле A указывается номер или имя
устройства.  Если  транзакт
входит
в блок SEIZE,  то устройство, указанное
в поле A, становится
занятым
и остаётся в этом состоянии до тех пор, 
пока этот же тран-
закт  не 
пройдёт  соответствующий  блок 
RELEASE,  освобождая уст-
ройство.
Если устройство, указанное в поле A блока SEIZE, уже заня-
то
каким-либо транзактом, то никакой другой транзакт не может войти
в этот
блок и остаётся в предыдущем блоке. 
Транзакты,  задержанные
(заблокированные)
перед блоком SEIZE, остаются в списке текущих со-
бытий и
при освобождении устройства обрабатываются с учетом приори-
тетов и
очередности поступления.
     Каждое устройство имеет следующие  СЧА: 
F  -  состояние  уст-
ройства
(0 - свободно,1 - занято); FR - коэффициент использования в
долях
1000; FC - число занятий устройства; FT - целая часть средне-
го
времени занятия устройства.
     Воспользуемся блоками SEIZE и RELEASE для
моделирования  одно-
канальной
СМО с ожиданием (рис.  7).  Теперь блок ADVANCE находится
между
блоками SEIZE и RELEASE, моделирующими занятие и освобождение
устройства
с именем SYSTEM, и поэтому в нем может находиться только
один
транзакт. Транзакты, выходящие из блока GENERATE в моменты за-
нятости
устройства, не смогут войти в блок SEIZE и будут оставаться
в блоке
GENERATE, образуя очередь в списке текущих событий.
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                SEIZE       SYSTEM
                ADVANCE     80,FN$EXP
                RELEASE     SYSTEM
                TERMINATE   1
       яШ1.5
                              Рис. 7
     Для моделирования  я1захвата 
(прерывания) 
я0одноканального  уст-
ройства
вместо  блоков  SEIZE и RELEASE используются соответственно
блоки
PREEMPT (захватить) и RETURN (вернуть). 
Блок  PREEMPT  имеет
следующий
формат:
                   я1имя я0   PREEMPT      A,B,C,D,E
     В поле 
A  указывается  имя или номер устройства,  подлежащего
захвату.  В поле B кодируется условие захвата. Если
это поле пусто,
                              - 21 -
то  захват 
возникает,  если обслуживаемый
транзакт сам не является
захватчиком.  Если же в поле B записан операнд PR, то
захват возни-
кает,  если 
приоритет 
транзакта-захватчика  выше,  чем 
приоритет
обслуживаемого
транзакта.
     Поля C, 
D  и E определяют поведение
транзактов,  обслуживание
которых
было прервано.  Поле C указывает имя
блока, в который будет
направлен
прерванный транзакт. В поле D может быть указан номер или
имя
параметра прерванного транзакта,  в
который записывается время,
оставшееся  этому 
транзакту  до  завершения 
обслуживания  на уст-
ройстве.  При отсутствии операнда в поле E прерванный
транзакт сох-
раняет  право 
на  автоматическое  восстановление  на устройстве по
окончании
захвата.  Если же в поле E указан
операнд RE, то транзакт
теряет
такое право.
     Блок RETURN имеет единственный операнд
A,  содержащий имя  или
номер
устройства, подлежащего освобождению от захвата.
     Блоки PREEMPT и RETURN могут быть
использованы для моделирова-
ния СМО
с абсолютными приоритетами. В простейших случаях, при одном
уровне
захвата,  в блоке PREEMPT используется
единственный  операнд
A.  При 
этом прерванный транзакт переводится симулятором из списка
будущих
событий в так называемый я1список прерываний я0устройства, а по
окончании  захвата устройства возвращается в список
будущих событий
с
предварительно вычисленным временем занятия устройства  для 
про-
должения
обслуживания.
     Для создания в модели я1многоканальных
устройств (МКУ) я0они долж-
ны  быть предварительно определены с помощью
операторов определения
STORAGE
(память), имеющих следующий формат:
                        я1имя я0   STORAGE   
A
Здесь
я1имя - я0имя МКУ,  используемое для
ссылок на него;  A - емкость
(количество
каналов обслуживания) МКУ, задаваемая константой.
     Для занятия и освобождения каналов
обслуживания МКУ  использу-
ется
пара блоков ENTER (войти) и LEAVE (покинуть), 
имеющих следую-
щий
формат:
       яШ1
                        я1имя я0   ENTER   
A,B
       яШ1.5
                        я1имяя0    LEAVE   
A,B
     В поле A указывается номер или имя МКУ, в
поле B я1- я0число кана-
лов
МКУ,  занимаемых при входе в блок ENTER
или  освобождаемых  при
входе в
блок LEAVE. Обычно поле B пусто, и в этом случае по умолча-
нию
занимается или освобождается один канал.
     При входе транзакта в блок ENTER текущее
содержимое МКУ увели-
чивается
на число единиц,  указанное в поле
Bя1.  я0Если свободная  ем-
кость
МКУ меньше значения поля B, то транзакт не может войти в блок
                              - 22 -
ENTER и
остается в предыдущем блоке, образуя очередь в списке теку-
щих
событий.
     При входе транзакта в блок LEAVE текущее
содержимое МКУ умень-
шается
на число единиц, указанное в поле B. Не обязательно освобож-
дается
такое же число каналов МКУ,  какое
занималось при входе дан-
ного
транзакта в блок ENTER, однако текущее содержимое МКУ не долж-
но
становиться отрицательным.
     Многоканальные устройства имеют следующие
СЧА: S - текущее со-
держимое
МКУ; R - свободная емкость МКУ; SR - коэффициент использо-
вания в
долях 1000; SA - целая часть среднего содержимого МКУ; SM -
максимальное
содержимое МКУ;  SC - число занятий
МКУ;  ST  -  целая
часть
среднего времени занятия МКУ.
     Воспользуемся блоками ENTER-LEAVE и
оператором STORAGE для мо-
делирования
двухканальной СМО с ожиданием (рис. 
8).  Если  текущее
содержимое
МКУ с именем STO2 меньше 2,  т.е.  в блоке ADVANCE нахо-
дится
один или ни одного транзакта, то очередной транзакт, поступа-
ющий в
модель через блок GENERATE, может войти в блок ENTER и затем
в блок
ADVANCE.  Если же текущее содержимое МКУ
равно 2, то очеред-
ной  транзакт 
остается в блоке GENERATE, 
образуя очередь в списке
текущих
событий. По истечении задержки одного из двух обслуживаемых
транзактов
в блоке ADVANCE и после входа его в блок LEAVE первый из
заблокированных
транзактов сможет войти в блок ENTER.
       яШ1
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                TERMINATE   1
       яШ1.5
                              Рис. 8
     К аппаратным объектам относятся также
я1логические переключатели
я1(ЛП)я0,  которые могут находиться в  двух 
состояниях:  "включено"  и
"выключено".  В 
начале  моделирования все ЛП
находятся в состоянии
"выключено".  Отдельные переключатели могут быть
установлены в  на-
чальное
состояние "включено" с помощью оператора INITIAL (инициали-
зировать),
имеющего следующий формат:
       яШ1
                         INITIAL    LS$я1имя
       яШ1.5
                         INITIAL    LSя1j
                              - 23 -
Здесь
я1имя я0и я1j я0- соответственно имя и номер ЛП,  устанавливаемого  в
начальное
состояние "включено".
     Для включения, выключения и
инвертирования логических переклю-
чателей
в процессе моделирования служит блок LOGIC (установить ЛП),
имеющий
следующий формат:
                        я1имяя0   
LOGIC X    A
     В поле A указывается имя или номер ЛП.
Вспомогательный операнд
X
указывает вид операции,  которая
производится с логическим перек-
лючателем
при входе транзакта в блок:  S -
включение,  R - выключе-
ние, I
- инвертирование. Например:
       яШ1
                          LOGIC S    9
       яШ1.5
                          LOGIC R    FLAG
     Логические переключатели  имеют 
единственный  СЧА с названием
LS.
Значение СЧА равно 1, если ЛП включен, и 0, если он выключен.
            2.3. Блоки для сбора
статистических данных
     Два последних  примера в предыдущем параграфе представляют со-
бой
законченные модели одноканальной и многоканальной СМО с  ожида-
нием.  Однако 
такие модели разрабатываются обычно для исследования
различных
характеристик,  связанных с ожиданием
заявок  в  очереди:
длины  очереди, 
времени ожидания и т.п.,  а в
приведенных примерах
очередь
транзактов образуется в списке текущих событий и недоступна
исследователю.
Для регистрации статистической информации о процессе
ожидания
транзактов в модели должны 
присутствовать  статистические
объекты:
очереди или таблицы.
     Объекты типа я1очередь я0создаются в  модели 
путем  использования
блоков  - регистраторов очередей:  QUEUE (стать в очередь) и DEPART
(уйти
из очереди), имеющих следующий формат:
       яШ1
                       я1имяя0   я1 я0QUEUE     A,B
       яШ1.5
                       я1имя я0   DEPART   
A,B
     В поле A указывается номер или имя
очереди, а в поле B - число
единиц,  на которое текущая длина очереди
увеличивается  при  входе
транзакта  в 
блок QUEUE или уменьшается при входе транзакта в блок
DEPART.  Обычно поле B пусто, и в этом случае его
значение по умол-
чанию
принимается равным 1.
     Для сбора  статистики о транзактах, 
заблокированных перед ка-
ким-либо
блоком модели,  блоки QUEUE и
DEPART  помещаются  перед 
и
после
этого блока соответственно.  При
прохождении транзактов через
блоки
QUEUE и DEPART соответствующим образом 
изменяются  следующие
СЧА  очередей: 
Q - текущая длина очереди;  QM -
максимальная длина
                              - 24 -
очереди;  QA - целая часть средней длины очереди;  QC - общее число
транзактов,  вошедших в очередь;  QZ - число транзактов,  прошедших
через
очередь без ожидания (число "нулевых"  входов);  QT  - 
целая
часть
среднего времени ожидания с учетом "нулевых" входов; QX - це-
лая
часть среднего времени ожидания без учета "нулевых" входов.
     Дополним приведенную на рис. 7 модель
одноканальной СМО блока-
ми
QUEUE и DEPART (рис. 9). Теперь транзакты, заблокированные перед
блоком
SEIZE из-за занятости устройства SYSTEM, 
находятся в  блоке
QUEUE,
внося свой вклад в статистику о времени ожидания, накаплива-
емую в
статистическом объекте типа "очередь"  с  именем  LINE. 
При
освобождении
устройства первый из заблокированных транзактов войдет
в блок
SEIZE и одновременно в  блок  DEPART, 
прекращая  накопление
статистики
об ожидании этого транзакта.
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                QUEUE       LINE
                SEIZE       SYSTEM
                DEPART      LINE
                ADVANCE     80,FN$EXP
                RELEASE     SYSTEM
                TERMINATE   1
       яШ1.5
                              Рис. 9
     Очень часто исследователя интересует не
только среднее  значе-
ние  времени 
ожидания в очереди,  но и
дисперсия этого времени,  а
также  статистическое  распределение 
выборки   времени   ожидания,
представляемое  обычно 
графически  в виде
гистограммы.  Имея такое
распределение,  можно оценить вероятность того,  что время ожидания
превысит  или не превысит некоторое заданное
значение.  Для сбора и
обработки
данных о выборочном распределении времени ожидания в оче-
реди
служат статистические объекты типа я1Q-таблицая0.
     Для создания в модели такой таблицы она
должна быть  предвари-
тельно  определена с помощью оператора определения
QTABLE (Q-табли-
ца),
имеющего следующий формат:
                     я1имя я0   QTABLE   
A,B,C,D
Здесь
я1имя я0- имя таблицы,  используемое для
ссылок на нее; A я1- я0номер
или имя
очереди, распределение времени ожидания в которой необходи-
мо
получить;  B я1- я0верхняя граница
первого частотного интервала таб-
лицы; C
- ширина частотных интервалов; D я1- я0количество частотных ин-
                              - 25 -
тервалов.
     Диапазон всевозможных  значений 
времени  ожидания  в очереди,
указанной
в поле A,  разбивается на ряд частотных
интервалов, коли-
чество  которых 
указано в поле D.  Первый из этих
интервалов имеет
ширину
от минус бесконечности до 
величины,  указанной  в 
поле  B,
включительно.
Второй интервал включает значения, большие, чем вели-
чина
первой границы в поле B, но меньшие или равные B+C, и т.д. Все
промежуточные  интервалы имеют одинаковую ширину,  указанную в поле
C.  Наконец, последний интервал включает все
значения, большие, чем
последняя  граница. 
Значения операндов B,  C и D
должны задаваться
целыми
константами.  Операнд B может быть
неположительным, хотя для
Q-таблицы
это не имеет смысла,  так как время не
может быть отрица-
тельным.
Операнды C и D должны быть строго положительными.
     При прохождении транзакта через блоки
QUEUE и DEPART его время
ожидания
фиксируется,  и к счетчику частотного
интервала таблицы, в
который
попало это время, добавляется 1. Одновременно в таблице на-
капливается
информация для вычисления среднего значения 
и  средне-
квадратического
отклонения (корня из дисперсии) 
времени  ожидания.
По  окончании моделирования среднее значение и
среднеквадратическое
отклонение
времени ожидания, а также счетчики попаданий в различные
частотные
интервалы выводятся в стандартный отчет GPSS/PC.
     Таблицы, как и другие объекты
GPSS/PC,  имеют СЧА:  ТС - общее
число
транзактов,  вошедших в очередь,  связанную с таблицей;  TB -
целая  часть среднего времени ожидания в
очереди;  TD - целая часть
среднеквадратического
отклонения времени ожидания в очереди.
     Дополним модель из примера на рис. 9
оператором QTABLE для по-
лучения  распределения  времени  ожидания  в 
очереди с именем LINE
(рис.
10).
       яШ1
         WTIME  QTABLE      LINE,50,50,10
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                QUEUE       LINE
                SEIZE       SYSTEM
                DEPART      LINE
                ADVANCE     80,FN$EXP
                RELEASE     SYSTEM
                TERMINATE   1
       яШ1.5
                              Рис. 10
                              - 26 -
.
     Оператор определения таблицы с именем
WTIME разбивает ось вре-
мени на
10 частотных интервалов.  Первый
интервал включает значения
от  0 до 50, 
второй - от 50 до 100,  третий -
от 100 до 150 и т.д.
Последний,  десятый, 
интервал включает значения, 
превышающие 450.
Если,  например, 
время  ожидания  некоторого 
транзакта  в очереди
составило
145 единиц модельного времени,  то  к 
счетчику  третьего
частотного
интервала будет добавлена 1.  Следует
заметить,  что ин-
формация
в таблицу с именем WTIME заносится автоматически, при вхо-
де
транзактов в блоки QUEUE и DEPART, и никаких специальных мер для
этого
принимать не требуется.
     Таблицы в GPSS/PC могут использоваться в
более общем случае не
только
для табулирования времени ожидания в очереди, но и для полу-
чения  выборочных распределений произвольных СЧА
любых объектов мо-
дели.  Для определения таблиц служит оператор TABLE
(таблица), фор-
мат
которого совпадает с форматом оператора QTABLE. Отличие состоит
лишь в
том,  что в поле A оператора TABLE
записывается  стандартный
числовой
атрибут,  выборочное распределение
которого необходимо по-
лучить,  а операнды B,  C и D определяют разбиение на частотные ин-
тервалы
диапазона всевозможных значений этого СЧА.
     Занесение информации в таблицу,
определяемую оператором TABLE,
уже не
может быть выполнено симулятором автоматически, как в случае
Q-таблиц.
Для этого используется специальный блок TABULATE (табули-
ровать),
имеющий следующий формат:
                       я1имя я0   TABULATE   
A
     В поле A указывается номер или имя
таблицы, определенной соот-
ветствующим
оператором TABLE.
     При входе транзакта в блок TABULATE
текущее значение табулиру-
емого
аргумента таблицы,  указанного в поле A
оператора TABLE,  за-
носится
в нее в соответствии с заданным в операторе TABLE разбиени-
ем
области значений аргумента на частотные интервалы.  Одновременно
корректируются
текущие значения СЧА таблицы:  счетчик
входов в таб-
лицу
TC,  среднее время ожидания TB и
среднеквадратическое отклоне-
ние
времени ожидания TD.
     Пусть, например,  в модели многоканальной СМО,  приведенной на
рис.  8, 
надо получить распределение времени пребывания  заявок  в
системе,
включающего время ожидания в очереди и время обслуживания.
Это
может быть обеспечено способом, показанным на рис. 11.
     Оператор TABLE  определяет таблицу с именем TTIME,  аргументом
которой
служит СЧА М1 - время  пребывания  транзакта 
в  модели.  В
рассматриваемой  модели значение СЧА M1 одновременно будет являться
временем
пребывания транзакта в СМО в том 
случае,  если  занесение
                              - 27 -
информации
в таблицу производить перед выходом транзакта из модели.
Поэтому
блок TABULATE,  заносящий информацию
о  времени  пребывания
каждого  транзакта 
в  модели в таблицу TTIME,  располагается перед
блоком
TERMINATE.  Диапазон возможных
значений  времени  пребывания
транзакта  в модели разбит в операторе TABLE на 12
частотных интер-
валов,
ширина которых (кроме последнего) равна 100 единицам модель-
ного
времени.
       яШ1
         TTIME  TABLE       M1,100,100,12
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                TABULATE    TTIME
                TERMINATE   1
       яШ1.5
                              Рис. 11
            2.4. Блоки, изменяющие маршруты
транзактов
     В приведенных  выше  примерах  транзакты, 
выходящие из любого
блока,  всегда поступали в следующий блок.  В более сложных моделях
возникает  необходимость  направления  транзактов к
другим блокам в
зависимости
от некоторых условий. Эту возможность обеспечивают бло-
ки
изменения маршрутов транзактов.
     Блок TRANSFER (передать) служит для
передачи входящих  в  него
транзактов
в блоки, отличные от следующего. Блок имеет девять режи-
мов
работы,  из которых рассмотрим здесь
лишь  три  наиболее  часто
используемых.
В этих трех режимах блок имеет следующий формат:
                     я1имя я0   TRANSFER   
A,B,C
Смысл
операндов в полях A, B и C зависит от режима работы блока.
     В режиме я1безусловной передачи я0поля A
и C пусты,  а  в  поле  B
указывается
имя блока,  к которому безусловным
образом направляется
транзакт,
вошедший в блок TRANSFER. Например:
                        TRANSFER    ,FINAL
     В режиме я1статистической передачи
я0операнд A определяет  вероят-
ность,  с которой транзакт направляется в блок,
указанный в поле C.
С
вероятностью 1-A транзакт направляется в блок, указанный в поле B

следующий, если поле B пусто).
                              - 28 -
     Вероятность в поле A может быть
задана  непосредственно  деся-
тичной
дробью, начинающейся с точки. Например, блок
                     TRANSFER    .75,THIS,THAT
с
вероятностью 0,75 направляет транзакты в блок с именем THAT,  а с
вероятностью
0,25 - в блок с именем THIS.
     Если же 
поле A начинается не с десятичной точки и не содержит
одного
из ключевых слов - признаков других режимов работы блока, то
его  значение рассматривается как количество
тысячных долей в веро-
ятности
передачи. Например, предыдущий блок TRANSFER можно записать
также в
следующем виде:
                     TRANSFER    750,THIS,THAT
     В режиме 
я1логической  передачи  я0в поле A записывается ключевое
слово
BOTH (оба).  Транзакт,  поступающий в блок TRANSFER,  сначала
пытается  войти 
в блок,  указанный в поле B (или
в следующий блок,
если
поле B пусто),  а если это не
удается,  т.е. блок B отказывает
транзакту
во входе,  то в блок,  указанный в поле C. Если и эта по-
пытка
неудачна, то транзакт задерживается в блоке TRANSFER до изме-
нения
условий в модели, делающего возможным вход в один из блоков B
или
C,  причем при одновременно возникшей
возможности  предпочтение
отдается
блоку B. Например:
                    TRANSFER    BOTH,MET1,MET2
     Блок TEST  (проверить) служит для задержки или изменения марш-
рутов
транзактов в зависимости от соотношения двух 
СЧА.  Он  имеет
следующий
формат:
                      я1имя я0   TEST X   
A,B,C
     Вспомогательный операнд  X содержит условие проверки соотноше-
ния
между СЧА и может принимать следующие значения:  L (меньше); LE
(меньше
или равно);  E (равно);  NE (не равно); GE (больше или рав-
но); G
(больше). Поле A содержит первый, а поле B - второй из срав-
ниваемых
СЧА.  Если проверяемое условие A X B
выполняется,  то блок
TEST
пропускает транзакт в следующий блок. 
Если же это условие  не
выполняется,  то транзакт переходит к блоку, указанному в
поле C, а
если
оно пусто, то задерживается перед блоком TEST.
     Например, блок
                      TEST LE    P$TIME,C1
не
впускает  транзакты,  у которых значение параметра с именем TIME
больше
текущего модельного времени. Блок
                      TEST L     Q$LINE,5,OUT
направляет
транзакты в блок с именем OUT, если текущая длина очере-
ди LINE
больше либо равна 5.
                              - 29 -
.
     Для задержки или изменения маршрута
транзактов  в  зависимости
от   состояния  
аппаратных   объектов   модели 
служит  блок  GATE
(впустить),
имеющий следующий формат:
                       я1имя я0   GATE X   
A,B
     Вспомогательный операнд X содержит код
состояния  проверяемого
аппаратного  объекта, 
а  в  поле A указывается имя или номер этого
объекта.
Если проверяемый объект находится в заданном состоянии, то
блок
GATE пропускает транзакт к следующему блоку. 
Если же заданное
в блоке
условие не выполняется, то транзакт переходит к блоку, ука-
занному  в 
поле B,  а если это поле
пусто,  то задерживается перед
блоком
GATE.
     Операнд X  может  принимать следующие
значения:  U (устройство
занято);  NU (устройство свободно);  I (устройство  захвачено);  NI
(устройство
не захвачено);  SE (МКУ пусто);  SNE (МКУ не пусто); SF
(МКУ
заполнено);  SNF (МКУ не
заполнено);  LS (ЛП включен),  LR (ЛП
выключен).
     Например, блок
                        GATE SNE    BUF3
отказывает
во входе транзактам,  поступающим в
моменты, когда в МКУ
с
именем BUF3 все каналы обслуживания свободны. Блок
                        GATE LR     4,BLOK2
направляет
транзакты  в  блок  с  именем 
BLOK2,  если  в момент их
поступления
ЛП с номером 4 включен.
     Блоки рассматриваемой  группы 
используются  при моделировании
различных
СМО с потерями заявок. 
Воспользуемся,  например, блоками
TRANSFER
для моделирования двухканальной СМО с отказами и повторны-
ми
попытками (рис. 12).
       яШ1
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE   
100,FN$EXP
         ENT1   TRANSFER    BOTH,,REFUS
                ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                TERMINATE   1
         REFUS  TRANSFER    .1,,OUT
                ADVANCE     250,FN$EXP
                TRANSFER    ,ENT1
         OUT    TERMINATE   1
       яШ1.5
                              Рис. 12
                              - 30 -
.
     Транзакты, поступающие  в 
модель,  попадают в блок TRANSFER
с
именем
ENT1,  работающий в логическом режиме.
Если в момент поступ-
ления  транзакта 
в  МКУ STO2 хотя бы один канал
свободен,  то блок
TRANSFER
направит транзакт в следующий блок, 
т.е.  в  блок  ENTER.
Если же
в момент поступления оба канала МКУ заняты, 
и поэтому блок
ENTER
отказывает во входе,  то  транзакт 
будет  направлен  в 
блок
TRANSFER
с именем REFUS,  работающий в
статистическом режиме. С ве-
роятностью
0,9 транзакты из  этого  блока 
передаются  в  следующий
блок,  задерживаются  в  нем  на 
случайное время и с помощью блока
TRANSFER,  работающего в безусловном режиме,  передаются 
вновь  на
вход  модели в блок с именем ENT1.  С вероятностью 0,1 транзакты из
блока с
именем REFUS передаются в блок TERMINATE с именем  OUT  для
уничтожения.
     Следует заметить,  что для уничтожения транзактов,  получивших
отказ  в 
обслуживании,  понадобился  отдельный 
блок TERMINATE для
фиксации
в стандартном отчете количества 
потерянных  транзактов  с
помощью
счетчика блока с именем OUT (СЧА N$OUT).
     Для моделирования той же СМО может быть
использован также блок
TEST
(рис.  13).  В этом варианте модели транзакт проходит  в 
блок
ENTER,
если текущее число занятых каналов (СЧА S$STO2) меньше 2.
       яШ1
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
         ENT1   TEST L     
S$STO2,2,REFUS
                ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                TERMINATE   1
         REFUS  TRANSFER    .1,,OUT
                ADVANCE     250,FN$EXP
                TRANSFER    ,ENT1
         OUT    TERMINATE   1
       яШ1.5
                              Рис. 13
     При использовании блока GATE модель
принимает вид,  показанный
на
рис.  14.  В этом варианте транзакт проходит в блок ENTER,  если
условие
"МКУ STO2 не заполнено" истинно.
    
    
                              - 31 -
.
       яШ1
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
         ENT1   GATE SNF    STO2,REFUS
                ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                TERMINATE   1
         REFUS  TRANSFER    .1,,OUT
                ADVANCE     250,FN$EXP
                TRANSFER    ,ENT1
         OUT    TERMINATE   1
       яШ1.5
                              Рис. 14
                 2.5. Блоки, работающие с
памятью
     Для хранения  в  памяти отдельных
числовых значений и массивов
таких значений
используются сохраняемые величины и матрицы сохраня-
емых
величин.
     я1Сохраняемые величины я0могут
использоваться в модели для  хране-
ния  исходных данных,  которые надо изменять при различных прогонах
модели,
промежуточных значений и результатов моделирования. В нача-
ле  моделирования  все сохраняемые величины устанавливаются равными
0. Для
установки отличных от 0 начальных значений сохраняемых вели-
чин
используется оператор INITIAL, имеющий следующий формат:
       яШ1
                     INITIAL   
X$я1имяя0,я1значение
       яШ1.5
                     INITIAL    Xя1jя0,я1значение
Здесь
я1имя я0и я1j я0- соответственно имя и номер сохраняемой величины,  а
я1значение
я0- присваиваемое ей начальное значение (константа).
     Для изменения  сохраняемых  величин  в 
процессе моделирования
служит
блок SAVEVALUE (сохранить величину), 
имеющий следующий фор-
мат:
                      я1имя я0   SAVEVALUE    A,B
     В поле A указывается номер или имя
сохраняемой величины, в ко-
торую
записывается значение операнда B.  Если
в поле A после  имени
(номера)
сохраняемой величины стоит знак + или -, 
то значение опе-
ранда B
добавляется или вычитается из текущего содержимого сохраня-
емой
величины. Например:
       яШ1
                       SAVEVALUE    5,Q$LINE
       яШ1.5
                       SAVEVALUE    NREF+,1
                              - 32 -
.
     Сохраняемые величины имеют
единственный  СЧА  с 
названием  X,
значением
которого является текущее значение соответствующей сохра-
няемой
величины.
     Изменим пример на рис. 14 таким образом,
чтобы исходные данные
модели  (средний 
интервал  поступления  транзактов и среднее время
обслуживания)
были заданы сохраняемыми величинами,  а
результат мо-
делирования
(количество потерянных транзактов) фиксировался также в
сохраняемой
величине.  Такая модель будет иметь
вид,  показанный на
рис.
15.
     я1Матрицы я0сохраняемых  величин дают возможность упорядочить сох-
раняемые
значения в виде матриц m*n, где m - число строк, n - число
столбцов
матрицы.  Каждая матрица должна быть
перед началом модели-
рования
определена с помощью оператора MATRIX (определить матрицу),
имеющего
следующий формат:
                      я1имя я0   MATRIX   
A,B,C
     Поле A 
оператора  не  используется  и сохранено в GPSS/PC для
совместимости
со старыми версиями GPSS.  В полях B и
C  указываются
соответственно
число строк и столбцов матрицы, 
задаваемые констан-
тами,  причем общее число элементов, равное
произведению B на C, не
должно
превышать 8191. Например, оператор
                      MTAB    MATRIX   
,10,2
определяет
матрицу  с  именем  MTAB,  содержащую десять строк и два
столбца.
       яШ1
                INITIAL     X$TARR,100
                INITIAL     X$TSRV,160
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    X$TARR,FN$EXP
         ENT1   GATE SNF    STO2,REFUS
                ENTER       STO2
                ADVANCE     X$TSRV,FN$EXP
                LEAVE       STO2
         OUT    TERMINATE   1
         REFUS  TRANSFER    .1,,COUT
                ADVANCE     250,FN$EXP
                TRANSFER    ,ENT1
         COUT   SAVEVALUE   NREF+,1
                TRANSFER    ,OUT
       яШ1.5
                              Рис. 15
    
                              - 33 -
.
     В начале моделирования элементы всех
определенных матриц уста-
навливаются
равными 0. Для установки отличных от 0 начальных значе-
ний
отдельных элементов матриц используется оператор INITIAL, имею-
щий
следующий формат:
       яШ1
                  INITIAL    MX$я1имяя0(я1a,bя0),я1значение
       яШ1.5
                  INITIAL    MXя1jя0(я1a,b)я0,я1значение
Здесь
я1имя я0и я1j я0- соответственно имя и номер матрицы;  я1a я0и я1b я0- номера
соответственно
строки и столбца, задаваемые константами; я1значение я0-
присваиваемое
элементу матрицы начальное значение, задаваемое также
константой.
     Для изменения значений элементов матриц в
процессе моделирова-
ния
служит блок MSAVEVALUE (сохранить значение 
элемента  матрицы),
имеющий
следующий формат:
                   я1имя я0   MSAVEVALUE    A,B,C,D
     В поле A указывается имя или номер  матрицы, 
после  которого,
как и в
блоке SAVEVALUE,  может стоять знак +
или -.  В полях B и C
указываются
номера соответственно строки  и  столбца, 
определяющие
изменяемый
элемент матрицы.  В поле D указывается
величина, исполь-
зуемая
для изменения заданного элемента матрицы. Например:
       яШ1
                 MSAVEVALUE    5,3,2,X1
       яШ1.5
                 MSAVEVALUE    MTAB+,P$ROW,P$COL,1
     Матрицы имеют единственный СЧА с
названием MX, ссылка на кото-
рый
записывается в следующем виде:
       яШ1
                       MX$я1имяя0(я1a,bя0)
       яШ1.5
                       MXя1jя0(я1a,b)
Здесь
я1имя я0и я1j я0- соответственно имя и номер матрицы;  я1a я0и я1b я0- номера
соответственно
строки и столбца, задаваемые константами или ссылка-
ми на
СЧА параметров транзактов. Например:
       яШ1
                       MX5(2,1)
       яШ1.5
                       MX$MTAB(P$ROW,P$COL)
          2.6. Блоки для работы со списками
пользователя
     Так как 
заблокированные  транзакты
находятся в списке текущих
событий,  то при 
большом  количестве  таких 
транзактов  симулятор
расходует  слишком 
много  времени на просмотр этого
списка с целью
выбора
очередного транзакта для продвижения. Для экономии машинного
времени  заблокированные транзакты целесообразно
помещать в так на-
зываемые
я1списки пользователя я0и оставлять их там до тех пор, пока не
выполнятся  условия, 
позволяюшие дальнейшее продвижение этих тран-
зактов.
Кроме того, размещение ожидающих транзактов в списках поль-
зователя
позволяет организовать различные дисциплины очередей,  от-
                              - 34 -
личные
от дисциплины "раньше пришел - раньше обслужен", реализован-
ной в
списке текущих событий.
     Списки пользователя представляют собой
некоторые буферы,  куда
могут  временно помещаться транзакты,  выведенные из списка текущих
событий.  В отличие от списков текущих и будущих
событий  транзакты
вводятся
в списки пользователя и выводятся из них не автоматически,
а в
соответствии с логикой модели с помощью специальных блоков.
     Для ввода  транзактов  в  список пользователя служит блок LINK
(ввести
в список),  который может быть
использован в двух  режимах:
условном
и безусловном. Ограничимся рассмотрением лишь безусловного
режима,
в котором блок LINK имеет следующий формат:
                        я1имя я0   LINK   
A,B
     В поле A задается имя или номер списка
пользователя, в который
безусловным  образом помещается транзакт,  вошедший в блок.  Поле B
определяет,  в какое место списка  пользователя  следует  поместить
этот
транзакт. Если в поле B записано ключевое слово FIFO, то тран-
закт
помещается в конец списка, если LIFO - в начало списка. В дру-
гих  случаях транзакты упорядочиваются в
соответствии с вычисленным
значением
поля B,  где обычно записывается один из
СЧА  транзактов,
таких
как PR,  M1 или P.  Если поле B содержит СЧА PR, то транзакты
упорядочиваются
по убыванию приоритета.  В остальных
случаях произ-
водится
упорядочение по возрастанию указанного СЧА.
     Например, блок
                       LINK    5,FIFO
помещает
транзакты в список пользователя с номером 5 в 
порядке  их
поступления
в блок. Блок
                       LINK    BUFER,P$ORDER
помещает
транзакты в список пользователя с именем BUFER, упорядочи-
вая их
по возрастанию параметра с именем ORDER.
     Условия, при  которых транзакт помещается в список пользовате-
ля,  в безусловном режиме проверяются
средствами,  предусмотренными
разработчиком
модели. Например, направить транзакт в список пользо-
вателя
в случае занятости устройства можно 
так,  как  показано 
на
рис.
16.  Если устройство с именем FAC4
занято,  то  блок  GATE  не
впускает
транзакт в блок SEIZE, а направляет его в блок LINK с име-
нем
WAIT,  и транзакт вводится в конец
списка пользователя с именем
BUFER.
                              - 35 -
.
       яШ1
                       ....................
                       GATE NU    FAC4,WAIT
                       SEIZE      FAC4
                       ....................
               WAIT    LINK       BUFER,FIFO
                       ....................
       яШ1.5
                              Рис. 16
     Для вывода  одного или нескольких транзактов из списка пользо-
вателя
и помещения их обратно в список текущих событий служит  блок
UNLINK
(вывести из списка), имеющий следующий формат:
                  я1имя я0   UNLINK X   
A,B,C,D,E,F
     В поле A указывается имя или номер списка
пользователя. Поле B
содержит
имя блока,  в который переходят
выведенные из списка поль-
зователя
транзакты. В поле C указывается число выводимых транзактов
или ALL
для вывода всех находящихся в списке транзактов.
     Операнды в  полях  D и E вместе со
вспомогательным операндом X
определяют
способ и условия вывода транзактов из списка пользовате-
ля.  Если поля D и E пусты, то и операнд X не
используется, а тран-
закты
выводятся с начала списка пользователя. 
Если поле D содержит
ключевое  слово 
BACK,  то  поле 
E  и вспомогательный операнд X не
используются,  а транзакты выводятся с конца  списка. 
В  остальных
случаях  значение поля D интерпретируется как номер
параметра тран-
зактов,  находящихся в списке пользователя,  а из списка 
выводится
заданное  число тех транзактов,  у которых значение этого параметра
по
отношению к значению операнда в поле 
E  удовлетворяет  условию,
заданному  вспомогательным  операндом X.  Операнд X
принимает те же
значения,
что и в блоке TEST.
     В поле F указывается имя блока, куда
переходит транзакт, выхо-
дящий
из блока UNLINK,  если из списка
пользователя не  выведен  ни
один
транзакт. Если это поле пусто, то выводящий транзакт переходит
в
следующий блок независимо от количества выведенных транзактов.
     Например, блок
            UNLINK      5,NEXT,1
выводит
из  списка  пользователя с номером 5 один транзакт с начала
списка
и направляет его в блок с именем NEXT. Блок
            UNLINK      BUFER,ENT1,1,BACK
выводит
из списка пользователя с именем BUFER один транзакт с конца
списка
и направляет его в блок с именем ENT1. Блок
            UNLINK E    P$UCH,MET2,ALL,COND,P$COND,MET3
выводит
из списка пользователя,  номер которого
записан в параметре
                              - 36 -
UCH
выводящего транзакта,  и направляет в
блок с  именем  MET2  все
транзакты,  содержимое параметра COND которых равно
содержимому од-
ноименного
параметра выводящего транзакта.  Если
таких транзактов в
списке
не окажется,  то выводящий транзакт
будет направлен в блок с
именем
MET3, в противном случае - к следующему блоку.
     Следует отметить   следующие  
особенности   выполнения  блока
UNLINK.  Во-первых, если поля D и E содержат ссылки
на СЧА транзак-
тов, то
поле D вычисляется относительно транзактов в списке пользо-
вателя,  а поле E - относительно  активного 
транзакта.  Во-вторых,
после
вывода транзактов из списка симулятор продолжает или начинает
продвижение
транзакта с наивысшим приоритетом, а при равенстве при-
оритетов
отдает предпочтение транзакту-инициатору вывода.
     Каждый список  пользователя имеет следующие СЧА:  CH - текущая
длина
списка;  CA - средняя длина списка
(целая часть); CM - макси-
мальная  длина 
списка;  CC  - 
общее число транзактов,  вошедших
в
список;  CT - целая часть среднего времени
пребывания  транзакта  в
списке.
     Воспользуемся рассмотренными  блоками для моделирования много-
канальной
СМО с ожиданием транзактов в 
списке  пользователя  (рис.
17).
Если МКУ с именем STO2 не заполнено, 
блок GATE впускает вновь
прибывший  транзакт 
в  блок ENTER,  и в МКУ занимается один канал.
Если же
МКУ заполнено, то блок GATE направляет транзакт в блок LINK
с  именем 
WAIT,  помещающий транзакт в
конец списка пользователя с
именем
BUFER, моделирующего очередь к МКУ. Каждый транзакт, покида-
ющий  МКУ 
по  завершении  обслуживания и освобождающий один канал,
проходит
блок UNLINK и выводит один транзакт с начала списка  (если
список
не пуст),  направляя его в блок с именем
ENT1 на занятие ка-
нала в
МКУ.
       яШ1
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                GATE SNF    STO2,WAIT
         ENT1   ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                UNLINK      BUFER,ENT1,1
                TERMINATE   1
         WAIT   LINK        BUFER,FIFO
       яШ1.5
                              Рис. 17
                              - 37 -
     Заметим, что для изменения дисциплины
обслуживания  на  "позже
пришел  - 
раньше  обслужен" достаточно
или заменить в поле B блока
LINK
FIFO на LIFO, или записать в поле D блока UNLINK операнд BACK.
Следует  также обратить внимание на то,  что блоки QUEUE-DEPART для
сбора
статистики об ожидающих транзактах не используются,  так  как
почти  все те же данные можно получить из
статистики о списке поль-
зователя.
     Рассмотрим еще   один   пример,  иллюстрирующий  использование
списков
пользователя для организации нестандартных дисциплин обслу-
живания.  Пусть в одноканальной СМО с ожиданием
требуется организо-
вать
такую дисциплину, при которой приоритет отдается заявкам с на-
именьшим
временем обслуживания. Такая модель будет иметь вид, пока-
занный
на рис. 18.
     В параметр TSRV поступающих в модель
транзактов в блоке ASSIGN
записывается
случайное время обслуживания, 
вычисляемое с использо-
ванием
функции EXP.  Если устройство SYSTEM
свободно,  то блок GATE
впускает
транзакт в блок SEIZE,  и устройство
занимается  на  время
P$TSRV.  Если 
же в момент поступления транзакта устройство занято,
то блок
GATE направляет транзакт в блок LINK, 
который вводит тран-
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                ASSIGN      TSRV,80,EXP
                GATE NU     SYSTEM,WAIT
         SFAC   SEIZE       SYSTEM
                ADVANCE     P$TSRV
                RELEASE     SYSTEM
                UNLINK      LINE,SFAC,1
                TERMINATE   1
         WAIT   LINK        LINE,P$TSRV
       яШ1.5
                              Рис. 18
закт  в 
список  пользователя LINE,  упорядочивая транзакты по воз-
растанию
времени обслуживания, записанного в параметре P$TSRV. Блок
UNLINK  по освобождении устройства выводит с начала
списка транзакт
с
наименьшим временем обслуживания, 
обеспечивая тем самым заданную
дисциплину.
    
    
                              - 38 -
.
                 3. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ
GPSS/PC
     Для управления прогоном модели
используются управляющие опера-
торы
GPSS/PC.  С одним из них - оператором
START - мы уже сталкива-
лись
при рассмотрении блока TERMINATE. Оператор START (начать) име-
ет
следующий формат:
                         START    A,B,C,D
     Поле A содержит константу, задающую
начальное значение счетчи-
ка
завершений.  В поле B может быть
записано ключевое  слово  NP  -
признак  подавления 
формирования стандартного отчета по завершении
моделирования.  Если поле B пусто,  то по окончании прогона 
модели
формируется  отчет со стандартной статистической
информацией о всех
объектах
модели (см.  разд.  5). Поле C не используется и сохранено
для
совместимости со старыми версиями GPSS. 
Поле D может содержать
1 для
включения в отчет списков текущих и будущих событий. Если по-
ле D
пусто,  то выдача в отчет содержимого
этих списков не произво-
дится.
     Оператор SIMULATE (моделировать)
устанавливает предел реально-
го
времени,  отводимого на прогон модели.
Если прогон не завершится
до
истечения этого времени, то он будет прерван принудительно с вы-
дачей
накопленной статистики в отчет.
     Оператор SIMULATE  имеет 
единственный  операнд A,  содержащий
предельное
время моделирования в  минутах,  задаваемое 
константой.
Оператор  размещается перед оператором START,  начинающим лимитиро-
ванный
прогон.
     Оператор RMULT (установить значения
генераторов) позволяет пе-
ред
началом прогона установить начальные значения генераторов  слу-
чайных
чисел RN,  определяющие генерируемые ими
последовательности.
Поля
A-G оператора могут содержать начальные 
значения  генераторов
соответственно
RN1-RN7,  задаваемые константами.
Начальные значения
генераторов,  не установленные операторами RMULT,
совпадают с номе-
рами
генераторов.
     Оператор RESET (сбросить) сбрасывает всю
статистическую инфор-
мацию,  накопленную 
в процессе прогона модели.  При
этом состояние
аппаратных,
динамических и запоминающих объектов, а также генерато-
ров
случайных чисел сохраняется,  и
моделирование может быть возоб-
новлено
с повторным сбором статистики. Оператор не имеет операндов.
     С оператором  RESET  связано различие
между относительным (СЧА
C1) и
абсолютным (СЧА AC1) модельным временем. Таймер относительно-
го
времени C1 измеряет модельное время, 
прошедшее после последнего
сброса
статистики оператором RESET,  а
таймер  абсолютного  времени
                              - 39 -
AC1 -
модельное время, прошедшее после начала первого прогона моде-
ли.  Если не использовалось ни одного оператора
RESET,  то значения
этих  таймеров совпадают.  Оператор RESET устанавливает таймер C1 в
ноль и
не влияет на таймер AC1.
     Оператор RESET используется обычно при
моделировании нестацио-
нарных
процессов,  когда требуется собрать
статистику по  отдельным
интервалам
стационарности или исключить влияние переходного периода
на
собираемую статистическую информацию.
     Пусть, например,  в модели, приведенной на рис. 18, необходимо
отбросить
статистику,  собираемую на первой тысяче
транзактов.  Это
может
быть сделано способом, показанным на рис. 19.
     Первый оператор START начинает прогон
модели длиной 1000 тран-
зактов
(переходный период).  Поскольку
статистика,  накопленная  на
этом  периоде, 
не используется,  в поле B
оператора указан признак
подавления
формирования отчета NP. Оператор RESET сбрасывает накоп-
ленную  статистику, 
не  изменяя состояния
модели.  Второй оператор
START
начинает основной прогон модели с формированием отчета по за-
вершении
прогона.
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                ASSIGN      TSRV,80,EXP
                GATE NU     SYSTEM,WAIT
         SFAC   SEIZE       SYSTEM
                ADVANCE     P$TSRV
                RELEASE     SYSTEM
                UNLINK      LINE,SFAC,1
                TERMINATE   1
         WAIT   LINK        LINE,P$TSRV
                START       1000,NP
                RESET
                START       10000
       яШ1.5
                              Рис. 19
     Оператор CLEAR (очистить) очищает
модель,  подготавливая ее  к
повторному
прогону.  При этом сбрасывается вся
накопленная в преды-
дущем
прогоне статистика,  из модели удаляются
все транзакты, и она
приводится
к исходному состоянию,  как перед первым
прогоном. Уста-
навливаются
в ноль сохраняемые величины и матрицы, что следует учи-
тывать  при 
использовании этих объектов для хранения исходных дан-
ных.  Исключение составляют генераторы случайных
чисел,  которые не
                              - 40 -
возвращаются  к своим начальным значениям,  что позволяет повторить
прогон
модели на новой последовательности случайных чисел. Оператор
не
имеет операндов.
     Оператор CLEAR используется обычно для
организации  нескольких
независимых
прогонов модели на разных последовательностях случайных
чисел.  Перед повторением прогона можно при
необходимости переопре-
делить
отдельные объекты модели,  например  емкости 
многоканальных
устройств.
     Пусть, например,  требуется повторить прогон модели, приведен-
ной на
рис.  17, три раза при емкости МКУ,
равной 1, 2 и 3. Это мо-
жет
быть выполнено так,  как показано  на 
рис.  20.  После 
каждой
очистки  модели оператором CLEAR оператор STORAGE
устанавливает но-
вое
значение емкости МКУ с именем STO2.
     Оператор END  (закончить) 
завершает  я1сеанс я0работы с
GPSS/PC и
возвращает
управление в операционную  систему.  Оператор 
не  имеет
операндов.
       яШ1
         STO2   STORAGE     1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                GATE SNF    STO2,WAIT
         ENT1   ENTER       STO2
                ADVANCE     160,FN$EXP
                LEAVE       STO2
                UNLINK      BUFER,ENT1,1
                TERMINATE   1
         WAIT   LINK        BUFER,FIFO
                START       10000
                CLEAR
         STO2   STORAGE     2
                START       10000
                CLEAR
         STO2   STORAGE     3
                START       10000
       яШ1.5
                              Рис. 20
     Как правило,  управляющие операторы не включаются  в  исходную
программу,  т.е. 
не имеют номеров строк,  а
вводятся пользователем
непосредственно
с клавиатуры ПК.
    
    
                              - 41 -
.
         4. НЕКОТОРЫЕ ПРИЕМЫ КОНСТРУИРОВАНИЯ
GPSS-МОДЕЛЕЙ
                     4.1. Косвенная адресация
     В рассматривавшихся до сих пор примерах
моделей ссылки на раз-
личные  объекты 
GPSS/PC  производились  исключительно по данным им
произвольным
именам.  Такая я1адресация я0объектов
удобна,  когда  речь
идет о
небольшом числе объектов каждого типа. 
Если же число объек-
тов
некоторого типа велико, то во избежание пропорционального роста
количества  блоков 
в модели используют ссылки на эти объекты по их
номерам
с использованием так называемой я1косвенной адресациия0.
     Идея косвенной  адресации заключается в том, 
что каждый тран-
закт в
некотором своем параметре содержит номер того или иного объ-
екта, а
в полях блоков, адресующихся к объектам, записывается ссыл-
ка на
этот параметр транзакта. Проиллюстрируем применение косвенной
адресации
на примере следующей модели.
       яШ1
         EXP    FUNCTION    RN1,C24
        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.85/.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/.9998,8
         CLASS  FUNCTION    RN1,D3
        .333,1/.667,2/1,3
         MEAN   FUNCTION    P$TYPE,L3
        1,70/2,80/3,90
         PRIOT  VARIABLE    4-P$TYPE
         STO2   STORAGE     2
         WTIME  QTABLE      LINE,50,50,10
         TTIME  TABLE       M1,100,100,12
                GENERATE    100,FN$EXP
                ASSIGN      TYPE,FN$CLASS
                PRIORITY    V$PRIOT
                QUEUE       LINE
                QUEUE       P$TYPE
                ENTER       STO2
                DEPART      P$TYPE
                DEPART      LINE
                ADVANCE     FN$MEAN,FN$EXP
                LEAVE       STO2
                TABULATE    TTIME
                TERMINATE   1
       яШ1.5
                              Рис. 21
     Пусть на вход моделируемой многоканальной
СМО с двумя каналами
обслуживания
поступает пуассоновский поток заявок со средним интер-
валом
поступления 100 единиц модельного времени. 
Каждая  заявка  с
равной
вероятностью  1/3 относится к одному из
трех классов:  1,  2
                              - 42 -
или
3,  а среднее время обслуживания заявок
каждого типа составляет
соответственно  70, 
80 и 90 единиц модельного времени. 
Чем меньше
среднее
время обслуживания заявки, тем выше ее приоритет. Необходи-
мо  построить модель,  позволяющую оценить средние значения времени
ожидания
заявок каждого типа,  а также
распределения общего времени
ожидания
в очереди и общего времени пребывания в системе. Такая мо-
дель
имеет вид, показанный на рис. 21.
     Переменная PRIOT  служит 
для  вычисления приоритета
транзакта
как
функции его класса,  содержащегося в
параметре с  именем  TYPE.
Транзакты
класса 1 (P$TYPE=1) получат приоритет 3, транзакты класса
2 -
приоритет 2 и транзакты класса 3 - приоритет 1.
     В блоке 
ASSIGN  в параметр TYPE транзактов
записывается класс
заявки,  разыгрываемый с помощью функции CLASS.  В следующем 
блоке
PRIORITY
с помощью переменной PRIOT определяется приоритет транзак-
тов,
первоначально равный 0 (отсутствует поле E в блоке GENERATE).
     Далее каждый транзакт
"отмечается" в блоках QUEUE в двух 
оче-
редях.  Очередь 
с  именем  LINE является общей для транзактов всех
классов.
Входя в следующий блок QUEUE, транзакт отмечается в очере-
ди с
номером 1, 2 или 3 в зависимости от класса заявки, записанного
в параметре
TYPE.  Аналогичным образом фиксируется
уход из очередей
в
блоках DEPART.  Таким образом,  в модели создается четыре объекта
типа
"очередь":  одна очередь с
именем LINE и три с номерами 1, 2 и
3.  При 
этом  три  последние 
очереди создаются одной парой блоков
QUEUE-DEPART!
В этом и заключается эффект косвенной адресации.
     Как уже отмечалось ранее,  каждому имени объекта симулятор сам
ставит
в соответствие некоторый номер. При ссылках на объекты одно-
го  и того же типа одновременно по именам и
номерам,  как это имеет
место в
рассматриваемом примере,  существует
опасность параллельной
адресации
к одному и тому же объекту вместо двух разных или, наобо-
рот,  к двум разным объектам вместо одного.  Так, в рассматриваемой
модели
мы, вообще говоря, не знаем, какой именно номер поставит си-
мулятор
в соответствие имени очереди LINE. Если этот номер будет от
1 до
3,  то это приведет к ошибке, так как в
модели окажется не че-
тыре
очереди, а три, причем в одну из них будет заноситься информа-
ция как
обо всех транзактах, так и дополнительно о транзактах одно-
го из
трех классов. Как избежать такой ситуации?
     К счастью,  в большинстве случаев об этом можно не заботиться,
поскольку
симулятор ставит в соответствие именам объектов достаточ-
но  большие 
номера,  начиная  с 10000. 
При необходимости же можно
воспользоваться
оператором EQU,  о котором уже
говорилось  выше,  и
самостоятельно
сопоставить имени объекта желаемый номер. 
Например,
                              - 43 -
в рассматриваемой
модели для того, чтобы очередь с именем LINE име-
ла
номер 4, достаточно записать оператор:
                         LINE    EQU   
4
               4.2. Обработка одновременных
событий
     Так как модельное время в GPSS  целочисленно,  то  оказывается
вполне  вероятным одновременное наступление двух или
более событий,
причем
вероятность этого тем больше,  чем
крупнее выбранная единица
модельного  времени. 
В некоторых случаях одновременное наступление
нескольких
событий,  или так называемый я1временной
узеля0,  может  су-
щественно
нарушить логику модели.
     Рассмотрим, например,  еще раз модель на рис.  14. Здесь может
образоваться
временной узел между событиями "поступление  транзакта
на  вход 
модели"  и  "завершение  обслуживания  в  МКУ". 
Если не-
посредственно
перед завершением обслуживания были заняты оба канала
МКУ,  то 
обработка  временного  узла зависит от последовательности
транзактов,
соответствующих событиям, в списке текущих событий.
     Предположим, что первым в списке
расположен транзакт, освобож-
дающий
канал МКУ. Тогда вначале будет обработан этот транзакт, т.е.
событие  "завершение обслуживания в
МКУ",  причем условие "МКУ
STO2
не
заполнено", проверяемое в блоке GATE, станет истинным. Затем бу-
дет
обработан транзакт,  поступивший на вход
модели,  в блок GATE с
именем
ENT1,  из блока GENERATE или из блока
TRANSFER в безусловном
режиме.
При этом транзакт будет впущен в блок ENTER, и МКУ в тот же
момент
модельного времени снова окажется заполненным. 
Такая ситуа-
ция при
обработке временного узла представляется естественной.
     Предположим теперь, что первым в списке
текущих событий распо-
ложен  транзакт, 
поступающий на вход модели.  Так
как условие "МКУ
STO2 не
заполнено" ложно,  то блок GATE
направит  этот  транзакт  в
блок с
именем REFUS. Таким образом, в модели будет зафиксирован от-
каз в
обслуживании, хотя в этот же момент модельного времени, после
обработки
транзакта, освобождающего канал, МКУ станет доступным.
     Порядок расположения транзактов,
соответствующих рассматривае-
мым
событиям, в списке текущих событий случаен, и в среднем в поло-
вине
случаев временной узел будет обрабатываться не так, как нужно.
В
результате статистика, связанная с отказами, окажется искаженной.
     Для правильной обработки временного узла
надо обеспечить такой
порядок  расположения  транзактов  в списке
текущих событий,  чтобы
транзакт,
освобождающий МКУ, всегда располагался первым. Этого мож-
но
добиться, управляя приоритетами транзактов (рис. 22).
                              - 44 -
       яШ1
         STO2   STORAGE     2
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
         ENT1   GATE SNF    STO2,REFUS
                ENTER       STO2
                PRIORITY    1
                ADVANCE    
160,FN$EXP
                LEAVE       STO2
                TERMINATE   1
         REFUS  TRANSFER    .1,,OUT
                ADVANCE     250,FN$EXP
                TRANSFER    ,ENT1
         OUT    TERMINATE   1
       яШ1.5
                              Рис. 22
     Транзакты, поступающие в модель через
блок GENERATE, имеют ну-
левой
приоритет. Такой же приоритет имеют транзакты, получившие от-
каз в
обслуживании, направленные в блок с именем REFUS и затем пов-
торно
поступающие в блок с именем ENT1. Те же транзакты, что посту-
пают на
обслуживание,  повышают приоритет до 1 в
блоке PRIORITY,  и
после
выхода из блока ADVANCE 
возвращаются  из  списка 
будущих  в
список
текущих событий,  располагаясь в начале
списка.  Таким обра-
зом,
нужный порядок транзактов обеспечивается, и временной узел бу-
дет
обработан правильно.
     Опасность неверной обработки
временных  узлов  характерна 
для
моделей
со списками пользователя. Рассмотрим, например, еще раз мо-
дель на
рис. 18. Здесь также возможен временной узел между события-
ми
"приход транзакта" и "завершение обслуживания транзакта".
     Пусть первым в списке текущих событий
располагается вновь при-
шедший
транзакт. Так как устройство с именем SYSTEM занято, то блок
GATE
направит этот транзакт в блок LINK, и он будет введен в список
пользователя
с именем LINE.  Затем будет обработан
транзакт,  осво-
бождающий
устройство.  Проходя через блок
UNLINK,  он выведет тран-
закт  с 
начала списка пользователя и направит его в список текущих
событий,  где тот продвинется  в 
блок  SEIZE,  занимая 
устройство
SYSTEM.
     Если же первым в списке текущих  событий 
располагается  тран-
закт,  освобождающий устройство,  то он выведет первый из ожидающих
транзактов
из списка пользователя в список текущих событий, где тот
расположится
после вновь пришедшего транзакта. Поэтому первым будет
                              - 45 -
обработан
вновь пришедший транзакт, который пройдет через блок GATE
и
займет устройство "без очереди". 
Транзакт-очередник, который был
выведен
из списка пользователя, 
"застрянет" перед блоком 
SEIZE  и
после  очередного 
освобождения устройства займет его, 
нарушая,  в
свою
очередь, логику работы модели.
     Проведенный анализ  показывает, 
что  для правильной обработки
временного
узла необходимо обеспечить  такой  порядок 
расположения
транзактов  в списке текущих событий,  чтобы первым всегда распола-
гался
вновь пришедший транзакт. В рассматриваемом случае этого мож-
но
добиться, используя блок PRIORITY с операндом BU (рис. 23).
     Перед освобождением  устройства 
обслуженный транзакт проходит
через
блок PRIORITY,  который,  оставляя неизменным приоритет тран-
закта
PR,  переводит его в конец списка
текущих событий.  При новом
просмотре
списка в случае наличия временного узла начинает  обраба-
тываться
вновь поступивший транзакт. Так как устройство еще занято,
он
направляется блоком GATE в список 
пользователя.  При  повторной
обработке
обслуженного транзакта тот освобождает устройство и выво-
дит
очередной транзакт из списка пользователя. 
Таким образом, пра-
вильная
обработка временного узла обеспечивается и в этом случае.
       яШ1
         EXP    FUNCTION    RN1,C24
       
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.85/.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/.9998,8
                GENERATE    100,FN$EXP
                ASSIGN      TSRV,80,EXP
                GATE NU     SYSTEM,WAIT
         SFAC   SEIZE       SYSTEM
                ADVANCE     P$TSRV
                PRIORITY    PR,BU
                RELEASE     SYSTEM
                UNLINK      LINE,SFAC,1
                TERMINATE   1
         WAIT   LINK        LINE,P$TSRV
       яШ1.5
                              Рис. 23
    
    
                              - 46 -
.
         5. КОМАНДЫ GPSS/PC И ТЕХНОЛОГИЯ
РАБОТЫ С ПАКЕТОМ
                5.1. Загрузка интегрированной
среды
     Пакет GPSS/PC  включает  в  себя 
два основных модуля:  модуль
GPSSPC.EXE,  представляющий интегрированную среду, в
которой произ-
водится
ввод, редактирование, отладка и выполнение модели, и модуль
GPSSREPT.EXE,  предназначенный для  получения 
стандартного  отчета
GPSS/PC.
Загрузка обоих модулей производится обычным образом из ко-
мандной
строки MS DOS или из программы-оболочки Norton Commander.
     После загрузки  интегрированной 
среды  на  экране 
появляется
"заставка"
с названием пакета:  начинается так
называемый я1сеанс я0ра-
боты с
GPSS/PC.  Затем заставка гасится, и
появляется экран, разде-
ленный
на две части:  большая верхняя часть
содержит так называемое
я1окно
данныхя0,  меньшая нижняя часть - я1окно
командя0. Окно данных в на-
чальный
момент пусто,  в окне команд  в 
верхней  я1командной  строке
высвечен  символ 
"приглашения" 
я2>  я0,  сигнализирующий о готовности
системы
принимать команды.
                      5.2. Ввод новой модели
    
Если исходная программа с моделью еще не введена и не записана
на
диске, то необходимо ввести ее с клавиатуры. Ввод производится в
командную
строку. Сначала вводится номер строки очередного операто-
ра и
нажимается клавиша я2Пробеля0. Курсор автоматически перемещается к
началу
следующего поля - поля имени, и в позиции курсора высвечива-
ется  символ 
я2L я0,  сигнализирующий о
том,  что вы находитесь в поле
имени
(LABEL - метка).  Если оператор имеет
имя,  необходимо ввести
его и
нажать клавишу я2Пробеля0, в противном случае - сразу нажать кла-
вишу
я2Пробеля0.  В любом случае курсор
переходит к  началу  следующего
поля -
поля операции,  о чем сигнализирует
символ я2V я0(VERB - глагол)
в
позиции курсора.  Необходимо ввести
название оператора  и  нажать
клавишу
я2Пробеля0.  Очень удобным является
то,  что название оператора
не
обязательно вводить полностью:  как
только транслятор распознает
оператор
по нескольким первым буквам, он после нажатия клавиши я2Про-
я2бел
я0сам дополнит его до полного названия.
     При синтаксической  ошибке 
в  операторе под командной
строкой
появляется
указатель на место ошибки,  причем
ошибочный  символ  не
вводится.
Необходимо в этом случае повторить ввод символа.
                              - 47 -
.
     Аналогичным образом вводятся поля
операндов,  при этом в пози-
ции
курсора высвечивается обозначение текущего поля (я2Aя0, я2Bя0, ... ,я2Gя0).
Для
перехода к следующему полю операндов вводится запятая,  для пе-
рехода
к полю комментариев - я2Пробеля0.  При
переходе курсора  в  поле
комментариев
в позиции курсора высвечивается символ я2; 
я0, сигнализи-
рующий
о возможности начать ввод комментария.
     По окончании ввода последнего поля
операндов  или  комментария
следует
нажать клавишу я2Enterя0,  при этом
введенный оператор трансли-
руется
и отображается в окне данных,  а
командная строка очищается,
и в ее
первой позиции снова появляется символ "приглашения".
     По мере ввода новых операторов окно
данных заполняется,  и  по
окончании
ввода в нем находится вся исходная программа в последова-
тельности
ввода,  необязательно совпадающей  с 
последовательностью
нумерации
строк. Для отображения в окне данных исходной программы в
последовательности
нумерации строк необходимо  ввести  в 
командную
строку
команду DISPLAY (отобразить). Эта команда, как и все осталь-
ные
команды GPSS/PC,  вводится без номера
строки. С помощью команды
DISPLAY
можно также вывести в окно данных отдельную строку,  указав
ее
номер в поле A команды, или последовательность строк, указав на-
чальный
и конечный номера в полях A и B соответственно.
                5.3. Редактирование
текста  модели
     Удалить строки из исходной  программы 
можно  командой  DELETE
(удалить),
указав в полях A и B начальный и конечный номера удаляе-
мой
последовательности. Для удаления одной строки достаточно ввести
лишь
поле A.
     При необходимости вставить в текст  новый 
оператор,  поместив
его
между уже введенными операторами, 
достаточно ввести его с про-
межуточным
номером строки.  Вы можете
перенумеровать строки,  введя
команду
RENUMBER (перенумеровать), в поле A которой указывается но-
мер
первой строки, а в поле B - шаг перенумерации.
     Отредактировать содержимое строки можно с
помощью команды EDIT
(редактировать),  в поле A которой указывается номер  редактируемой
строки.  При 
вводе такой команды в командной строке появляется ре-
дактируемая
строка. Подводя курсор к нужным позициям строки, вы мо-
жете
внести в нее необходимые изменения.  По
окончании редактирова-
ния
следует нажать клавишу я2Enterя0,  и
отредактированная строка пере-
несется
в окно данных,  заменив в исходной
программе первоначальную
строку
с этим номером.  Вы можете убедиться в
этом,  введя  команду
DISPLAYя2.
                              - 48 -
     Если редактируемый оператор короткий, а
изменений в нем много,
то  редактирование удобнее произвести,  введя измененный оператор с
тем же
номером строки.
              5.4. Запись и считывание модели
с диска
     Если работа с моделью предполагается
и  по 
окончании  данного
сеанса,  то 
после  ввода и редактирования
исходную программу имеет
смысл
записать на диск.  Для этого необходимо
ввести  команду  SAVE
(сохранить),  в поле A которой указывается имя файла, в
который бу-
дет
записана модель. Файл должен иметь расширение я2.GPSя0.
     Записав модель в файл,  вы сможете в следующем сеансе работы с
GPSS/PC
не вводить ее заново с клавиатуры, а считать с диска, введя
команду  @я1спецификацияя0_я1файлая0,  где 
я1спецификацияя0_я1файла я0- полное имя
файла,  которое вы дали исходной программе в команде
SAVE, включаю-
щее  расширение 
я2.GPSя0.  При выполнении команды
я2@ я0операторы исходной
программы
по мере их считывания из файла транслируются и 
выводятся
в окно
данных.
         5.5. Прогон модели и наблюдение за
моделированием
     После того, как исходная программа модели
введена с клавиатуры
или
считана с диска и оттранслирована,  в
памяти ПК создалась теку-
щая
модель, и теперь можно выполнить ее прогон. Для этого в команд-
ную
строку необходимо ввести управляющий оператор START,  указав  в
поле  A 
соответствующее  начальное  значение 
счетчика завершений.
После
нажатия  клавиши я2Enter я0оператор
START переносится в окно дан-
ных, и
прогон модели начинается. Об этом сигнализирует сообщение
                      я2Simulation inя0
я2Progressя0               ,
появляющееся
в нижней строке командного окна - я1строке состоянияя0,  а
также  так 
называемый  я1индикатор
моделированияя0,  мигающий в правой
стороне
нижней части окна данных.
     Если прогон  модели достаточно длинный, 
то можно наблюдать за
процессом
моделирования, открывая те или иные я1графические окная0. Это
производится  путем 
нажатия  клавиши я2Alt
я0одновременно с символьной
клавишей
с первой буквой названия окна.
     Например, после нажатия клавиш я2Alt+B
я0в верхней части экрана на
месте
окна данных появляется я1окно блоков я0(BLOCKS), изображающее ди-
намику
продвижения транзактов через блок-схему модели. Рядом с каж-
дым
блоком выводится текущее число транзактов в нем, которое обнов-
ляется
в процессе моделирования. Нажав клавиши я2Alt+Nя0, вы можете за-
                              - 49 -
менить
эту информацию на общее число 
транзактов,  прошедших  через
каждый
блок.  Блок,  в котором находится активный транзакт, выделен
повышенной
яркостью (на цветных мониторах - другим цветом).
     Нажав клавиши   я2Alt+Fя0,  вы  можете 
наблюдать  я1окно  устройств
(FACILITIES),  в котором наглядно отображена информация  о 
текущем
состоянии
каждого устройства модели:  его
использовании, занятости,
очереди
к нему.
     Аналогичную информацию  о многоканальных устройствах можно по-
лучить,
нажав я2Alt+S я0и открыв я1окно памятей я0(STORAGES).
     Если в модели используются статистические
таблицы,  то,  нажав
клавиши
я2Alt+Tя0,  вы откроете я1окно  таблиц 
я0(TABLES)  с  гистограммой
распределения  соответствующего  атрибута  модели,  обновляющейся в
процессе
моделирования.  Над гистограммой
выводятся  также  текущие
значения  среднего и среднеквадратического отклонения
табулируемого
атрибута.
     Если в модели используются матрицы,  то, 
нажав клавиши я2Alt+Mя0,
вы
откроете я1окно матриц я0(MATRICES),  в
котором можно наблюдать  об-
новляющиеся
в процессе моделирования значения элементов матриц.
     Находясь в любом из перечисленных
окон,  вы можете путем нажа-
тия
клавиш я2Alt+L я0включить я1трассировку я0активного транзакта. При этом
в
верхней части окна появляется строка, содержащая информацию о те-
кущем
модельном времени, номере активного транзакта и его продвиже-
нии
через блок-схему модели.  Отключить
трассировку можно повторным
нажатием
этих же клавиш.
     Перемещение внутри окна любого типа к
тому или  иному  объекту
этого  типа осуществляется путем нажатия клавиш
управления курсором
я2PgUpя0,  я2PgDn я0и я2Endя0. Возвращение в окно
данных производится путем на-
жатия
клавиш я2Alt+Dя0.
     Следует заметить,  что наблюдение графических окон и  особенно
строки
трассировки существенно замедляет моделирование, и при длин-
ных
прогонах моделей этой возможностью не следует злоупотреблять.
     Открытие того  или иного окна может быть выполнено также с по-
мощью
команды WINDOW (окно), в поле A которой указывается имя окна,
однако
удобнее это делать так, как описано выше.
     Кроме графических окон внутри любого из
них,  кроме окна  дан-
ных,
может быть открыто до четырех я1микрооконя0. Микроокна открываются
и
закрываются командой MICROWINDOW (микроокно), 
имеющей  следующий
формат:
               MICROWINDOW   
A,B,C    ; я1комментарий
     В поле A указывается номер микроокна -
константа 1,  2,  3 или
4.  Поле B содержит наблюдаемую величину - любой
СЧА модели. Поле C
                              - 50 -
определяет
состояние микроокна в результате выполнения команды:  ON
-
открыто, OFF - закрыто. Если поле C пусто, то по умолчанию коман-
да
открывает заданное микроокно.  В поле
комментария может быть за-
дано
название микроокна длиной до восьми символов.
     При открытии  любого окна заданные микроокна с обновляющейся в
процессе
моделирования информацией появляются в правой части  соот-
ветствующего
окна. Микроокно имеет форму прямоугольника с названием
над  рамкой, 
если  оно  было 
задано  в  комментарии   к   команде
MICROWINDOW.
     В процессе моделирования можно также
наблюдать одновременно до
двух  я1графиков зависимостей я0любых СЧА модели
от модельного времени.
Для
этого необходимо до запуска модели ввести одну или две  команды
PLOT
(начертить), имеющие следующий формат:
                 PLOT    A,B,C,D   
; я1комментарий
     В поле 
A указывается аргумент зависимости - любой СЧА модели.
Поле B
должно содержать максимальное значение этого СЧА, определяю-
щее  масштаб 
изображения по оси Y.  Операнд B
задается константой,
значение
которой должно быть не менее 13. Поля C и D определяют на-
чальное
и конечное значения модельного времени, 
определяющие масш-
таб
изображения по оси X.  Эти операнды
также задаются константами.
В  поле комментария может быть задан заголовок
графика длиной до 34
символов.
     График обновляется  при 
каждом  изменении модельного
времени,
если
оно попадает в диапазон,  заданный
операндами C и D. Указанный
в  поле 
A СЧА-аргумент вычисляется относительно первого транзакта,
обрабатываемого
после изменения модельного времени.
     Процесс моделирования можно прервать,
нажав одну из клавиш я2Esc
или
я2Homeя0.  При этом в строке состояния
командного  окна  появляется
сообщение
о номере активного транзакта, обрабатываемого симулятором
в
момент прерывания.  Вы можете
узнать  значения  интересующих  вас
стандартных  числовых 
атрибутов модели в момент прерывания, 
введя
команду
SHOW (показать), операндом которой служат отдельные СЧА или
выражения  из 
них.  Значение заданного в
команде СЧА или выражения
выводится
в окно данных или другое  активное  окно. 
Введя  команду
EVENTS  (события), 
можно  увидеть в окне данных
содержимое списков
текущих
и будущих событий. Команда USERCHAINS (списки пользователя)
позволяет  просматривать в окне данных содержимое
списков пользова-
теля.
Обе последние команды не имеют операндов.
     Инициировать прерывание  моделирования  можно  также с помощью
команды
STOP (остановить), имеющей следующий формат:
                           STOP    A,B,C
                              - 51 -
     В поле A указывается номер
транзакта,  вызывающего прерывание,
задаваемый
константой.  Если это поле пусто,  то прерывание вызыва-
ется
любым транзактом.  В поле B задается имя
или номер блока,  при
входе в
который происходит прерывание. Если этот операнд опущен, то
прерывание
происходит при входе в любой блок.  В
поле C указывается
ON  для установки условия прерывания и OFF для
снятия этого условия
(по
умолчанию ON).
     Например, команда
                         STOP    100,MET1
устанавливает
условие  прерывания моделирования при
входе транзакта
с
номером 100 в блок с именем MET1. Команда
                         STOP    2
будет
вызывать прерывание при каждом продвижении транзакта с  номе-
ром 2,
а команда
                         STOP    ,CHAIR
при
каждом  входе любого транзакта в блок с
именем CHAIR.  Наконец,
команда
                         STOP
без
операндов будет вызывать прерывание при каждом продвижении  лю-
бого
транзакта, а команда
                         STOP    ,,OFF
снимает
все условия прерывания,  установленные
ранее другими коман-
дами
STOP.
     Прервав моделирование,  можно 
также  воспользоваться командой
STEP
(выполнить шаг) для пошагового выполнения модели  с  целью  ее
я1отладкия0.
Операнд в поле A команды задает количество входов активно-
го
транзакта в блоки,  которое производится
при  каждом  выполнении
команды.  Обычно этот операнд равен 1,  и каждое выполнение команды
STEP
приводит к продвижению активного транзакта к следующему блоку.
Отладку
с использованием команды STEP удобно проводить,  находясь в
окне
блоков.
     Для продолжения  моделирования после прерывания следует ввести
в
командную строку команду CONTINUE (продолжить).
     Команды STEP  и CONTINUE могут не только вводиться в командную
строку
с клавиатуры, но и выбираться из я1меню командя0, появляющемся в
командном
окне при активизации любого графического окна. Выбор про-
изводится
подводом крестообразного курсора в прямоугольную  область
нужной  команды 
и нажатием клавиши я2Insя0.  В
окне блоков меню команд
предоставляет
также некоторые дополнительные возможности [8].
     Команды STEP,  CONTINUE, а также любые другие часто используе-
мые
команды удобно загрузить на функциональные клавиши я2F1-F10я0.  Для
                              - 52 -
этого  после 
ввода загружаемой команды с клавиатуры необходимо на-
жать
клавиши я2Ctrl+Fn, я0где n - номер выбранной функциональной клави-
ши.  После загрузки команды на функциональную
клавишу для ее выпол-
нения
достаточно нажатия этой клавиши.
        5.6. Получение и интерпретация
стандартного отчета
     По завершении прогона модели раздается
звуковой  сигнал,  и  в
строке
состояния появляются сообщения
     я2Writing REPORT.GPS я0  я2Simulation Complete я0  я2Reporting ...я0    ,
сигнализирующие
о  том, 
что моделирование закончено и в данный мо-
мент
производится создание отчета о прогоне модели. 
Затем  система
переходит
в состояние ожидания дальнейших команд.
     Отчет, создаваемый по завершении
моделирования, записывается в
файл со
стандартным именем REPORT.GPS.  Это имя
может быть изменено
командой
REPORT (создать отчет), имеющей следующий формат:
                            REPORT A,B
     В поле A указывается спецификация файла,
в который должен быть
выведен  отчет. 
Если поле B содержит ключевое слово NOW,  то отчет
создается
немедленно после ввода команды.
     Необходимо иметь ввиду,  что отчет, 
создаваемый автоматически
по
завершении прогона модели или командой REPORT, является я1неформа-
я1тированнымя0,
т.е.  непригодным для непосредственного
просмотра.  Для
форматирования  и 
создания  стандартного отчета
GPSS/PC необходимо
завершить
сеанс и выполнить программу я1форматирования отчетая0.  Выход
из  интегрированной  среды  (завершение  сеанса) производится путем
ввода
управляющего оператора END (закончить). При этом производится
выход в
MS DOS или в программу-оболочку Norton Commander.
     Для форматирования отчета необходимо
загрузить модуль формати-
рования
GPSSREPT.EXE.  После  его 
загрузки  на  экране 
появляется
"заставка"
с названием модуля, двумя окнами в нижней части экрана и
сообщениями-подсказками.
В левом окне выведено имя файла, в котором
находится   неформатированный   отчет   (по   умолчанию  
это  файл
REPORT.GPS).  В правом окне выведено обозначение  устройства, 
куда
должен  быть 
выведен форматированный отчет (по умолчанию это экран
дисплея
я2SCRN:я0).  Форматированный отчет может
быть также выведен  на
печать
или на диск. Для этого в правое окно надо ввести обозначение
я2PRN:
я0или  имя файла на диске
соответственно.  Для переключения окон
используется
клавиша я2Enterя0.  Для создания отчета
на выбранном  уст-
ройстве  следует 
нажать клавишу я2Пробеля0,  для выхода
из программы -
клавишу
я2Escя0.
                              - 53 -
     Если содержимое окон по умолчанию
оставлено без изменения,  то
после
нажатия клавиши я2Пробел я0на экране появляется отчет о последнем
прогоне
модели, выполненном перед завершением сеанса работы с моду-
лем
GPSSPC.EXE. Отчет содержит следующую информацию:
     1) общие сведения о модели и ее
прогоне,  включающие модельное
время  начала 
(я2START_TIMEя0) и конца (я2END_TIMEя0) прогона,  количество
блоков
в модели (я2BLOCKSя0),  количество
устройств (я2FACILITIES), я0коли-
чество
многоканальных устройств (я2STORAGESя0), 
объем памяти, оставав-
шейся
свободной при прогоне модели (я2FREE_MEMORYя0);
     2) сведения об именах объектов
модели,  включающие для каждого
имени  идентификатор  (я2NAMEя0), 
присвоенное  ему  числовое 
значение
(я2VALUEя0)  и 
тип  имени:  0, 
если числовое значение имени присвоено
пользователем
с помощью оператора EQU;  1,  если числовое  значение
имени
присвоено системой; 2, если имя является именем блока;
     3) сведения о блоках модели,  включающие для каждого блока но-
мер  строки 
исходной программы (я2LINEя0), 
номер или имя блока (я2LOCя0),
название
блока (я2BLOCK_TYPEя0), количество транзактов, прошедших через
блок
(я2ENTRY_COUNTя0),  текущее количество
транзактов в блоке в момент
завершения
моделирования  (я2CURRENT_COUNTя0),  количество 
транзактов,
заблокированных  перед 
блоком  в  момент 
завершения моделирования
(я2RETRYя0);
     4) сведения об устройствах модели, включающие
для каждого уст-
ройства
его имя или номер (я2FACILITYя0), количество занятий устройства
(я2ENTRIESя0),
коэффициент использования (я2UTIL.я0), среднее время на одно
занятие
(я2AVE._TIMEя0) и ряд других данных;
     5) сведения  о  многоканальных
устройствах модели,  включающие
для
каждого МКУ его имя или номер (я2STORAGEя0), 
емкость (я2CAP.я0), коли-
чество   свободных  
каналов   в  момент 
завершения  моделирования
(я2REMAIN.я0),
наименьшее (я2MIN.я0) и наибольшее (я2MAX.я0) количество занятых
каналов
в процессе моделирования, количество занятий МКУ (я2ENTRIESя0),
среднее
количество занятых каналов (я2AVE.Cя0.), 
коэффициент использо-
вания
(я2UTIL.я0) и ряд других данных;
     6) сведения об очередях модели,  включающие для каждой очереди
ее имя
или номер (я2QUEUEя0), максимальную длину очереди в процессе мо-
делирования
(я2MAX.я0), текущую длину очереди в момент завершения моде-
лирования
(я2CONT.я0),  общее количество
транзактов, вошедших в очередь
в
процессе моделирования (я2ENTRIESя0), и количество "нулевых" входов в
очередь  (я2ENTRIES(0)я0),  среднюю длину очереди (я2AVE.CONT.я0),  среднее
время
ожидания в очереди с учетом всех транзактов (я2AVE.TIMEя0) и  без
учета
"нулевых" входов (я2AVE.(-0)я0);
                              - 54 -
.
     7) сведения о статистических таблицах
модели,  включающие  для
каждой
таблицы ее имя или номер (я2TABLEя0), 
среднее значение (я2MEANя0) и
среднеквадратическое
отклонение (я2STD.DEV.я0) 
табулируемой  величины,
границы
частотных интервалов (я2RANGEя0), 
частоты (я2FREQUENCYя0) и накоп-
ленные
частоты в процентах (я2CUM.%я0) попадания наблюдений в  эти 
ин-
тервалы;
     8) сведения о списках пользователя
модели, включающие для каж-
дого
списка его имя или номер (я2USER_CHAINя0), количество транзактов в
списке
в момент завершения моделирования (я2CHAIN_SIZEя0),  среднее ко-
личество
транзактов в списке (я2AVE.CONTя0), 
общее количество транзак-
тов,  вошедших в список в процессе моделирования
(я2ENTRIESя0),  макси-
мальное
количество транзактов, находившихся в списке (я2MAXя0), среднее
время
пребывания транзакта в списке (я2AVE.TIMEя0);
     9) сведения о логических переключателях
модели, включающие для
каждого
ЛП его имя или номер (я2LOGICSWITCHя0) и состояние ЛП в  момент
завершения
моделирования: 1 - "включен", 0 - "выключен";
     10) сведения о сохраняемых величинах  модели, 
включающие  для
каждой
сохраняемой величины ее имя или номер (я2SAVEVALUEя0) и значение
в
момент завершения моделирования (я2VALUEя0);
     11) сведения о матрицах модели, 
включающие для каждой матрицы
ее имя
или номер (я2MATRIXя0),  а также список
всех элементов матрицы в
формате:
"строка" (я2ROWя0), "столбец" (я2COLUMNя0),
"значение" (я2VALUEя0).
     Если в операторе START задан вывод в
отчет списков  текущих  и
будущих
событий, то отчет включает в себя также сведения о транзак-
тах,
находившихся в момент завершения моделирования в этих списках.
Сведения  о транзактах размещаются в отчете в
соответствии с разме-
щением
транзактов в каждом списке.
     Информация о списке текущих событий
включает в себя для каждо-
го
транзакта его номер (я2XACT_NUMBERя0), 
приоритет (я2PRIя0), резидентное
время
транзакта (я2M1я0), номер текущего блока (я2CURRENTя0), номер следую-
щего
блока (я2NEXTя0),  а также перечень
всех  параметров  транзакта 
в
формате:
"параметр" (я2PARAMETERя0), "значение" (я2VALUEя0).
     Информация о списке будущих событий
включает для каждого тран-
закта  те 
же данные,  однако вместо
резидентного времени транзакта
(я2M1я0)
выводится запланированное время выхода транзакта из списка бу-
дущих
событий (я2BDTя0).
     Разумеется, сведения об объектах того или
иного  типа  появля-
ются в
отчете только в том случае,  если в
модели присутствует хотя
бы один
объект данного типа.  Кроме того,
включением в отчет сведе-
ний об
объектах разных типов можно управлять с помощью так называе-
мого
установочного файла SETTINGS.GPS [8].  В
отчетах о прогоне мо-
                              - 55 -
делей,
включающих в себя другие, не рассматривавшиеся здесь объекты
GPSS/PC,
появляется соответствующая информация и об этих объектах.
     На рис. 24 приведен отчет о прогоне
модели примера на рис. 21.
       яШ1
START_TIME   END_TIME 
BLOCKS    FACILITIES  STORAGES  
FREE_MEMORY
       0      
14617     12           0          1        274320
LINE   LOC    
BLOCK_TYPE     ENTRY_COUNT   CURRENT_COUNT   RETRY
 80    
1       GENERATE            150              0         0
 90    
2       ASSIGN              150              0         0
 100   
3       PRIORITY            150              0         0
 110   
4       QUEUE               150              0         0
 120   
5       QUEUE               150              0         0
 130   
6       ENTER               150              0         0
 140   
7       DEPART              150              0         0
 150   
8       DEPART              150              0         0
 160   
9       ADVANCE             150              0         0
 170   
10      LEAVE               150             
0         0
 180   
11      TABULATE            150              0         0
 190   
12      TERMINATE           150              0         0
QUEUE   MAX 
CONT. ENTRIES ENTRIES(0) AVE.CONT. AVE.TIME  AVE.(-0)
  1      
1     0      54        48     0.02        6.07     54.67
  2      
1     0      42        35     0.01        4.14     24.86
  3      
1     0      54        49     0.02        6.22     67.20
 LINE    
2     0     150       132     0.06        5.59     46.56
STORAGE        CAP. REMAIN. MIN.  MAX. 
ENTRIES AVL.  AVE.C. UTIL.
 STO2             2     2     0    
2      150   1    
0.66  0.328
TABLE     MEAN   
STD.DEV. RETRY  RANGE           FREQUENCY  CUM.%
 WTIME    
5.59     25.23    0
                                 -        50         144      96.00
                              50 -       100           3      98.00
                             100 -       150           1      98.67
                             150 -       200           2     100.00
 TTIME   
69.48     70.88    0
                                 -       100         117      78.00
                             100 -       200          23      93.33
                             200 -       300           8      98.67
                             300 -       400           2     100.00
       яШ1.5
                              Рис. 24
     Отчет выводится на экран  постранично.  Для  вывода  очередной
страницы  необходимо нажать клавишу я2Пробеля0,  для прекращения вывода
отчета
- клавишу я2Escя0.  По окончании вывода
отчета на экране появля-
ется
сообщение
         я2[SPACE] for another report я0  я2Any other key to end
Для
создания  отчета  на 
другом устройстве или другого отчета надо
нажать
клавишу я2Пробеля0,  для выхода из
программы  GPSSREPT  - 
любую
другую
клавишу.
    
                              - 56 -
     Помимо отчета отдельные результаты  моделирования  могут  быть
также  выведены 
в я1базу данных я0GPSS/PC [8] с помощью команд RESULT.
Однофакторный
я1дисперсионный анализ я0и получение я1доверительных интер-
я1валов  я0для выведенных в базу данных характеристик
модели могут быть
выполнены
с помощью команды ANOVA. Рассмотрение этих команд выходит
за
рамки данного издания.
                              - 57 -
.
                         СПИСОК ЛИТЕРАТУРЫ
     1. Шакин В.Н.,  Воробейчиков Л.А., Шибанов С.Е., Семенова Т.И.
Моделирование
систем и сетей связи: Учебное пособие/МИС.- М., 1988.
     2. Игельник Б.М.,  Лившиц В.М., Шибанов С.Е. Аналитическое мо-
делирование
систем связи: Учебное пособие/МИС. - М., 1989.
     3. Шакин В.Н., Лившиц В.М. Принципы
построения локальных сетей
и  анализ 
их  характеристик: Учебное  пособие для слушателей ФПКП/
МИС. -
М., 1990.
     4. Методические указания по использованию
средств имитационно-
го  моделирования систем и сетей связи для
слушателей ФПКП/ Л.А.Во-
робейчиков,
В.Н.Шакин, С.Е.Шибанов/МИС. - М., 1990.
     5. Шеннон  Р.  Имитационное
моделирование систем - искусство и
наука:
Пер. с англ. - М.: Мир, 1978.
     6. Максимей И.В.  Имитационное моделирование на ЭВМ. - М.: Ра-
дио и
связь, 1988.
     7. Шрайбер Т.Дж. Моделирование на GPSS:
Пер. с англ. - М.: Ма-
шиностроение,
1980.
     8. GPSS/PC  general  purpose
simulation.  Reference Manual.  -
Minuteman
software. P.O. Box 171. Stow, Massachusetts 01775, 1986.
                              - 58 -
.
                            ОГЛАВЛЕНИЕ
   ВВЕДЕНИЕ
....................................................  3
   1. ОБЩИЕ СВЕДЕНИЯ О GPSS/PC
.................................  4
   2. ОСНОВНЫЕ БЛОКИ GPSS/PC И СВЯЗАННЫЕ С
НИМИ ОБЪЕКТЫ ........ 10
        2.1. Блоки, связанные с транзактами
.................... 10
        2.2. Блоки, связанные с аппаратными
объектами .......... 20
        2.3. Блоки для сбора статистических
данных ............. 24
        2.4. Блоки, изменяющие маршруты
транзактов ............. 28
        2.5. Блоки, работающие с памятью ....................... 32
        2.6. Блоки для работы со списками
пользователя ......... 34
   3. УПРАВЛЯЮШИЕ ОПЕРАТОРЫ GPSS/PC
............................ 39
   4. НЕКОТОРЫЕ ПРИЕМЫ КОНСТРУИРОВАНИЯ
GPSS-МОДЕЛЕЙ ............ 42
        4.1. Косвенная адресация
............................... 42
        4.2. Обработка одновременных событий
................... 44
   5. КОМАНДЫ GPSS/PC И ТЕХНОЛОГИЯ РАБОТЫ С
ПАКЕТОМ ............ 47
        5.1. Загрузка интегрированной среды
.................... 47
        5.2. Ввод новой модели
................................. 47
        5.3. Редактирование текста модели
...................... 48
        5.4. Запись и считывание модели с
диска ................ 49
        5.5. Прогон модели и наблюдение за
моделированием ...... 49
        5.6. Получение и интерпретация
стандартного отчета ..... 53
   СПИСОК ЛИТЕРАТУРЫ
........................................... 58
рефераты Рекомендуем рефератырефераты

     
Рефераты @2011