Пусть первым в списке текущих событий располагается вновь пришедший транзакт. Так как устройство с именем SYSTEM занято, то блок GATE направит этот транзакт в блок LINK, и он будет введен в список пользователя с именем LINE. Затем будет обработан транзакт, освобождающий устройство. Проходя через блок UNLINK, он выведет транзакт с начала списка пользователя и направит его в список текущих событий, где тот продвинется в блок SEIZE, занимая устройство SYSTEM. Если же первым в списке текущих событий располагается транзакт, освобождающий устройство, то он выведет первый из ожидающих транзактов из списка пользователя в список текущих событий, где тот расположится после вновь пришедшего транзакта. Поэтому первым будет обработан вновь пришедший транзакт, который пройдет через блок 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
5. КОМАНДЫ GPSS/PC И ТЕХНОЛОГИЯ РАБОТЫ С ПАКЕТОМ
5. 1. Загрузка интегрированной среды
Пакет GPSS/PC включает в себя два основных модуля: модуль GPSSPC. EXE, представляющий интегрированную среду, в которой производится ввод, редактирование, отладка и выполнение модели, и модуль GPSSREPT. EXE, предназначенный для получения стандартного отчета GPSS/PC. Загрузка обоих модулей производится обычным образом из командной строки MS DOS или из программы-оболочки Norton Commander.
После загрузки интегрированной среды на экране появляется "заставка" с названием пакета: начинается так называемый сеанс работы с GPSS/PC. Затем заставка гасится, и появляется экран, разделенный на две части: большая верхняя часть содержит так называемое
окно данных, меньшая нижняя часть - окно команд. Окно данных в начальный момент пусто, в окне команд в верхней командной строке высвечен символ "приглашения" >, сигнализирующий о готовности системы принимать команды.
5. 2. Ввод новой модели
Если исходная программа с моделью еще не введена и не записана на диске, то необходимо ввести ее с клавиатуры. Ввод производится в командную строку. Сначала вводится номер строки очередного оператора и нажимается клавиша Пробел. Курсор автоматически перемещается к началу следующего поля - поля имени, и в позиции курсора высвечивается символ L, сигнализирующий о том, что вы находитесь в поле имени (LABEL - метка). Если оператор имеет имя, необходимо ввести его и нажать клавишу Пробел, в противном случае - сразу нажать клавишу Пробел. В любом случае курсор переходит к началу следующего поля - поля операции, о чем сигнализирует символ V (VERB - глагол) в позиции курсора. Необходимо ввести название оператора и нажать клавишу Пробел. Очень удобным является то, что название оператора не обязательно вводить полностью: как только транслятор распознает оператор по нескольким первым буквам, он после нажатия клавиши Про бел сам дополнит его до полного названия. При синтаксической ошибке в операторе под командной строкой появляется указатель на место ошибки, причем ошибочный символ не вводится. Необходимо в этом случае повторить ввод символа.
Аналогичным образом вводятся поля операндов, при этом в позиции курсора высвечивается обозначение текущего поля ( A, B, ...., G ). Для перехода к следующему полю операндов вводится запятая, для перехода к полю комментариев Пробел. При переходе курсора в поле комментариев в позиции курсора высвечивается символ ; , сигнализирующий о возможности начать ввод комментария. По окончании ввода последнего поля операндов или комментария следует нажать клавишу Enter, при этом введенный оператор транслируется и отображается в окне данных, а командная строка очищается, и в ее первой позиции снова появляется символ "приглашения".
По мере ввода новых операторов окно данных заполняется, и по окончании ввода в нем находится вся исходная программа в последовательности ввода, необязательно совпадающей с последовательностью нумерации строк. Для отображения в окне данных исходной программы в последовательности нумерации строк необходимо ввести в командную строку команду DISPLAY (отобразить). Эта команда, как и все остальные команды GPSS/PC, вводится без номера строки. С помощью команды DISPLAY можно также вывести в окно данных отдельную строку, указав ее номер в поле A команды, или последовательность строк, указав начальный и конечный номера в полях A и B соответственно.
5. 3. Редактирование текста модели
Удалить строки из исходной программы можно командой DELETE (удалить), указав в полях A и B начальный и конечный номера удаляемой последовательности. Для удаления одной строки достаточно ввести лишь поле A.
При необходимости вставить в текст новый оператор, поместив его между уже введенными операторами, достаточно ввести его с промежуточным номером строки. Вы можете перенумеровать строки, введя команду RENUMBER (перенумеровать), в поле A которой указывается номер первой строки, а в поле B - шаг перенумерации.
Отредактировать содержимое строки можно с помощью команды EDIT (редактировать), в поле A которой указывается номер редактируемой строки. При вводе такой команды в командной строке появляется редактируемая строка. Подводя курсор к нужным позициям строки, вы можете внести в нее необходимые изменения. По окончании редактирования следует нажать клавишу Enter, и отредактированная строка перенесется в окно данных, заменив в исходной программе первоначальную строку с этим номером. Вы можете убедиться в этом, введя команду DISPLAY. Если редактируемый оператор короткий, а изменений в нем много, то редактирование удобнее произвести, введя измененный оператор с тем же номером строки.
5. 4. Запись и считывание модели с диска
Если работа с моделью предполагается и по окончании данного сеанса, то после ввода и редактирования исходную программу имеет смысл записать на диск. Для этого необходимо ввести команду SAVE (сохранить), в поле A которой указывается имя файла, в который будет записана модель. Файл должен иметь расширение. GPS. Записав модель в файл, вы сможете в следующем сеансе работы с GPSS/PC не вводить ее заново с клавиатуры, а считать с диска, введя команду @ спецификация_файла, где спецификация_файла - полное имя файла, которое вы дали исходной программе в команде SAVE, включающее расширение. GPS. При выполнении команды @ операторы исходной программы по мере их считывания из файла транслируются и выводятся в окно данных.
5. 5. Прогон модели и наблюдение за моделированием
После того, как исходная программа модели введена с клавиатуры или считана с диска и оттранслирована, в памяти ПК создалась текущая модель, и теперь можно выполнить ее прогон. Для этого в командную строку необходимо ввести управляющий оператор START, указав в поле A соответствующее начальное значение счетчика завершений. После нажатия клавиши Enter оператор START переносится в окно данных, и прогон модели начинается. Об этом сигнализирует сообщение Simulation in Progress, появляющееся в нижней строке командного окна - строке состояния, а также так называемый индикатор моделирования, мигающий в правой стороне нижней части окна данных.
Если прогон модели достаточно длинный, то можно наблюдать за процессом моделирования, открывая те или иные графические окна. Это производится путем нажатия клавиши Alt одновременно с символьной клавишей с первой буквой названия окна.
Например, после нажатия клавиш Alt+B в верхней части экрана на месте окна данных появляется окно блоков (BLOCKS), изображающее динамику продвижения транзактов через блок-схему модели. Рядом с каждым блоком выводится текущее число транзактов в нем, которое обновляется в процессе моделирования. Нажав клавиши Alt+N, вы можете заменить эту информацию на общее число транзактов, прошедших через каждый блок. Блок, в котором находится активный транзакт, выделен повышенной яркостью (на цветных мониторах - другим цветом). Нажав клавиши Alt+F, вы можете наблюдать окно устройств (FACILITIES), в котором наглядно отображена информация о текущем состоянии каждого устройства модели: его использовании, занятости, очереди к нему.
Аналогичную информацию о многоканальных устройствах можно получить, нажав Alt+S и открыв окно памятей (STORAGES).
Если в модели используются статистические таблицы, то, нажав клавиши Alt+T, вы откроете окно таблиц (TABLES) с гистограммой распределения соответствующего атрибута модели, обновляющейся в процессе моделирования. Над гистограммой выводятся также текущие значения среднего и среднеквадратического отклонения табулируемого атрибута.
Если в модели используются матрицы, то, нажав клавиши Alt+M, вы откроете окно матриц (MATRICES), в котором можно наблюдать обновляющиеся в процессе моделирования значения элементов матриц.
Находясь в любом из перечисленных окон, вы можете путем нажатия клавиш Alt+L включить трассировку активного транзакта. При этом в верхней части окна появляется строка, содержащая информацию о текущем модельном времени, номере активного транзакта и его продвижении через блок-схему модели. Отключить трассировку можно повторным нажатием этих же клавиш.
Перемещение внутри окна любого типа к тому или иному объекту этого типа осуществляется путем нажатия клавиш управления курсором
PgUp, PgDn и End. Возвращение в окно данных производится путем нажатия клавиш Alt+D.
Следует заметить, что наблюдение графических окон и особенно строки трассировки существенно замедляет моделирование, и при длинных прогонах моделей этой возможностью не следует злоупотреблять.
Открытие того или иного окна может быть выполнено также с помощью команды WINDOW (окно), в поле A которой указывается имя окна, однако удобнее это делать так, как описано выше.
Кроме графических окон внутри любого из них, кроме окна данных, может быть открыто до четырех микроокон. Микроокна открываются и закрываются командой MICROWINDOW (микроокно), имеющей следующий формат:
MICROWINDOW A, B, C ; комментарий
В поле A указывается номер микроокна - константа 1, 2, 3 или 4. Поле B содержит наблюдаемую величину - любой СЧА модели. Поле C определяет состояние микроокна в результате выполнения команды: ON - открыто, OFF - закрыто. Если поле C пусто, то по умолчанию команда открывает заданное микроокно. В поле комментария может быть задано название микроокна длиной до восьми символов. При открытии любого окна заданные микроокна с обновляющейся в процессе моделирования информацией появляются в правой части соответствующего окна. Микроокно имеет форму прямоугольника с названием над рамкой, если оно было задано в комментарии к команде MICROWINDOW.
В процессе моделирования можно также наблюдать одновременно до двух графиков зависимостей любых СЧА модели от модельного времени. Для этого необходимо до запуска модели ввести одну или две команды PLOT (начертить), имеющие следующий формат:
PLOT A, B, C, D ; комментарий
В поле A указывается аргумент зависимости - любой СЧА модели. Поле B должно содержать максимальное значение этого СЧА, определяющее масштаб изображения по оси Y. Операнд B задается константой, значение которой должно быть не менее 13. Поля C и D определяют начальное и конечное значения модельного времени, определяющие масштаб изображения по оси X. Эти операнды также задаются константами. В поле комментария может быть задан заголовок графика длиной до 34 символов.
График обновляется при каждом изменении модельного времени, если оно попадает в диапазон, заданный операндами C и D. Указанный в поле A СЧА-аргумент вычисляется относительно первого транзакта, обрабатываемого после изменения модельного времени.
Процесс моделирования можно прервать, нажав одну из клавиш Esc или Home. При этом в строке состояния командного окна появляется сообщение о номере активного транзакта, обрабатываемого симулятором в момент прерывания. Вы можете узнать значения интересующих вас стандартных числовых атрибутов модели в момент прерывания, введя команду SHOW (показать), операндом которой служат отдельные СЧА или выражения из них. Значение заданного в команде СЧА или выражения выводится в окно данных или другое активное окно. Введя команду EVENTS (события), можно увидеть в окне данных содержимое списков текущих и будущих событий. Команда USERCHAINS (списки пользователя) позволяет просматривать в окне данных содержимое списков пользователя. Обе последние команды не имеют операндов.
Инициировать прерывание моделирования можно также с помощью команды STOP (остановить), имеющей следующий формат:
STOP A, B, C
В поле A указывается номер транзакта, вызывающего прерывание, задаваемый константой. Если это поле пусто, то прерывание вызывается любым транзактом. В поле B задается имя или номер блока, при входе в который происходит прерывание. Если этот операнд опущен, то прерывание происходит при входе в любой блок. В поле C указывается ON для установки условия прерывания и OFF для снятия этого условия (по умолчанию ON).
Например, команда
STOP 100, MET1 устанавливает условие прерывания моделирования при входе транзакта с номером 100 в блок с именем MET1. Команда
STOP 2 будет вызывать прерывание при каждом продвижении транзакта с номером 2, а команда
STOP, CHAIR при каждом входе любого транзакта в блок с именем CHAIR. Наконец, команда
STOP без операндов будет вызывать прерывание при каждом продвижении любого транзакта, а команда
STOP, ,OFF снимает все условия прерывания, установленные ранее другими командами STOP.
Прервав моделирование, можно также воспользоваться командой STEP (выполнить шаг) для пошагового выполнения модели с целью ее
отладки. Операнд в поле A команды задает количество входов активного транзакта в блоки, которое производится при каждом выполнении команды. Обычно этот операнд равен 1, и каждое выполнение команды STEP приводит к продвижению активного транзакта к следующему блоку. Отладку с использованием команды STEP удобно проводить, находясь в окне блоков.
Для продолжения моделирования после прерывания следует ввести в командную строку команду CONTINUE (продолжить).
Команды STEP и CONTINUE могут не только вводиться в командную строку с клавиатуры, но и выбираться из меню команд, появляющемся в командном окне при активизации любого графического окна. Выбор производится подводом крестообразного курсора в прямоугольную область нужной команды и нажатием клавиши Ins. В окне блоков меню команд предоставляет также некоторые дополнительные возможности [8].
Команды STEP, CONTINUE, а также любые другие часто используемые команды удобно загрузить на функциональные клавиши F1-F10. Для этого после ввода загружаемой команды с клавиатуры необходимо нажать клавиши Ctrl+Fn, где n - номер выбранной функциональной клавиши. После загрузки команды на функциональную клавишу для ее выполнения достаточно нажатия этой клавиши.
5. 6. Получение и интерпретация стандартного отчета
По завершении прогона модели раздается звуковой сигнал, и в строке состояния появляются сообщения
Writing REPORT. GPS Simulation Complete Reporting.... , сигнализирующие о том, что моделирование закончено и в данный момент производится создание отчета о прогоне модели. Затем система переходит в состояние ожидания дальнейших команд.
Отчет, создаваемый по завершении моделирования, записывается в файл со стандартным именем REPORT. GPS. Это имя может быть изменено командой REPORT (создать отчет), имеющей следующий формат:
REPORT A, B
В поле A указывается спецификация файла, в который должен быть выведен отчет. Если поле B содержит ключевое слово NOW, то отчет создается немедленно после ввода команды.
Необходимо иметь ввиду, что отчет, создаваемый автоматически по завершении прогона модели или командой REPORT, является неформа тированным, т. е. непригодным для непосредственного просмотра. Для форматирования и создания стандартного отчета GPSS/PC необходимо завершить сеанс и выполнить программу форматирования отчета. Выход из интегрированной среды (завершение сеанса) производится путем ввода управляющего оператора END (закончить). При этом производится выход в MS DOS или в программу-оболочку Norton Commander. Для форматирования отчета необходимо загрузить модуль форматирования GPSSREPT. EXE. После его загрузки на экране появляется "заставка" с названием модуля, двумя окнами в нижней части экрана и сообщениями-подсказками. В левом окне выведено имя файла, в котором находится неформатированный отчет (по умолчанию это файл REPORT. GPS). В правом окне выведено обозначение устройства, куда должен быть выведен форматированный отчет (по умолчанию это экран дисплея SCRN: ). Форматированный отчет может быть также выведен на печать или на диск. Для этого в правое окно надо ввести обозначение
PRN: или имя файла на диске соответственно. Для переключения окон используется клавиша Enter. Для создания отчета на выбранном устройстве следует нажать клавишу Пробел, для выхода из программы клавишу Esc.
Если содержимое окон по умолчанию оставлено без изменения, то после нажатия клавиши Пробел на экране появляется отчет о последнем прогоне модели, выполненном перед завершением сеанса работы с модулем GPSSPC. EXE. Отчет содержит следующую информацию:
1) общие сведения о модели и ее прогоне, включающие модельное время начала ( START_TIME ) и конца ( END_TIME ) прогона, количество блоков в модели ( BLOCKS ), количество устройств ( FACILITIES), количество многоканальных устройств ( STORAGES ), объем памяти, остававшейся свободной при прогоне модели ( FREE_MEMORY );
2) сведения об именах объектов модели, включающие для каждого имени идентификатор ( NAME ), присвоенное ему числовое значение ( VALUE ) и тип имени: 0, если числовое значение имени присвоено пользователем с помощью оператора EQU; 1, если числовое значение имени присвоено системой; 2, если имя является именем блока;
3) сведения о блоках модели, включающие для каждого блока номер строки исходной программы ( LINE ), номер или имя блока ( LOC ), название блока ( BLOCK_TYPE ), количество транзактов, прошедших через блок ( ENTRY_COUNT ), текущее количество транзактов в блоке в момент завершения моделирования ( CURRENT_COUNT ), количество транзактов, заблокированных перед блоком в момент завершения моделирования ( RETRY );
4) сведения об устройствах модели, включающие для каждого устройства его имя или номер ( FACILITY ), количество занятий устройства ( ENTRIES ), коэффициент использования ( UTIL. ), среднее время на одно занятие ( AVE. _TIME ) и ряд других данных;
5) сведения о многоканальных устройствах модели, включающие для каждого МКУ его имя или номер ( STORAGE ), емкость ( CAP. ), количество свободных каналов в момент завершения моделирования ( REMAIN. ), наименьшее ( MIN. ) и наибольшее ( MAX. ) количество занятых каналов в процессе моделирования, количество занятий МКУ ( ENTRIES ), среднее количество занятых каналов ( AVE. C. ), коэффициент использования ( UTIL. ) и ряд других данных;
6) сведения об очередях модели, включающие для каждой очереди ее имя или номер ( QUEUE ), максимальную длину очереди в процессе моделирования ( MAX. ), текущую длину очереди в момент завершения моделирования ( CONT. ), общее количество транзактов, вошедших в очередь в процессе моделирования ( ENTRIES ), и количество "нулевых" входов в очередь ( ENTRIES(0) ), среднюю длину очереди ( AVE. CONT. ), среднее время ожидания в очереди с учетом всех транзактов ( AVE. TIME ) и без учета "нулевых" входов ( AVE. (-0) );
7) сведения о статистических таблицах модели, включающие для каждой таблицы ее имя или номер ( TABLE ), среднее значение ( MEAN ) и среднеквадратическое отклонение ( STD. DEV. ) табулируемой величины, границы частотных интервалов ( RANGE ), частоты ( FREQUENCY ) и накопленные частоты в процентах ( CUM. % ) попадания наблюдений в эти интервалы;
8) сведения о списках пользователя модели, включающие для каждого списка его имя или номер ( USER_CHAIN ), количество транзактов в списке в момент завершения моделирования ( CHAIN_SIZE ), среднее количество транзактов в списке ( AVE. CONT ), общее количество транзактов, вошедших в список в процессе моделирования ( ENTRIES ), максимальное количество транзактов, находившихся в списке ( MAX ), среднее время пребывания транзакта в списке ( AVE. TIME ); 9) сведения о логических переключателях модели, включающие для каждого ЛП его имя или номер ( LOGICSWITCH ) и состояние ЛП в момент завершения моделирования: 1 - "включен", 0 - "выключен";
10) сведения о сохраняемых величинах модели, включающие для каждой сохраняемой величины ее имя или номер ( SAVEVALUE ) и значение в момент завершения моделирования ( VALUE );
11) сведения о матрицах модели, включающие для каждой матрицы ее имя или номер ( MATRIX ), а также список всех элементов матрицы в формате: "строка" ( ROW ), "столбец" ( COLUMN ), "значение" ( VALUE ).
Если в операторе START задан вывод в отчет списков текущих и будущих событий, то отчет включает в себя также сведения о транзактах, находившихся в момент завершения моделирования в этих списках. Сведения о транзактах размещаются в отчете в соответствии с размещением транзактов в каждом списке. Информация о списке текущих событий включает в себя для каждого транзакта его номер ( XACT_NUMBER ), приоритет ( PRI ), резидентное время транзакта ( M1 ), номер текущего блока ( CURRENT ), номер следующего блока ( NEXT ), а также перечень всех параметров транзакта в формате: "параметр" ( PARAMETER ), "значение" ( VALUE ).
Информация о списке будущих событий включает для каждого транзакта те же данные, однако вместо резидентного времени транзакта ( M1 ) выводится запланированное время выхода транзакта из списка будущих событий ( BDT ). Разумеется, сведения об объектах того или иного типа появляются в отчете только в том случае, если в модели присутствует хотя бы один объект данного типа. Кроме того, включением в отчет сведений об объектах разных типов можно управлять с помощью так называемого установочного файла SETTINGS. GPS [8]. В отчетах о прогоне моделей, включающих в себя другие, не рассматривавшиеся здесь объекты 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
Отчет выводится на экран постранично. Для вывода очередной страницы необходимо нажать клавишу Пробел, для прекращения вывода отчета - клавишу Esc. По окончании вывода отчета на экране появляется сообщение
[SPACE] for another report Any other key to end Для создания отчета на другом устройстве или другого отчета надо нажать клавишу Пробел, для выхода из программы GPSSREPT - любую другую клавишу.
Помимо отчета отдельные результаты моделирования могут быть также выведены в базу данных GPSS/PC [8] с помощью команд RESULT. Однофакторный дисперсионный анализ и получение доверительных интер валов для выведенных в базу данных характеристик модели могут быть выполнены с помощью команды ANOVA. Рассмотрение этих команд выходит за рамки данного издания.