Предположим теперь, что первым в списке текущих событий расположен транзакт, поступающий на вход модели. Так как условие "МКУ STO2 не заполнено" ложно, то блок GATE направит этот транзакт в блок с именем REFUS. Таким образом, в модели будет зафиксирован отказ в обслуживании, хотя в этот же момент модельного времени, после обработки транзакта, освобождающего канал, МКУ станет доступным.
Порядок расположения транзактов, соответствующих рассматриваемым событиям, в списке текущих событий случаен, и в среднем в половине случаев временной узел будет обрабатываться не так, как нужно. В результате статистика, связанная с отказами, окажется искаженной.
Для правильной обработки временного узла надо обеспечить такой порядок расположения транзактов в списке текущих событий, чтобы транзакт, освобождающий МКУ, всегда располагался первым. Этого можно добиться, управляя приоритетами транзактов (рис. 22). 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. Если же первым в списке текущих событий располагается транзакт, освобождающий устройство, то он выведет первый из ожидающих транзактов из списка пользователя в список текущих событий, где тот расположится после вновь пришедшего транзакта. Поэтому первым будет обработан вновь пришедший транзакт, который пройдет через блок GATE и займет устройство "без очереди". Транзакт-очередник, который был выведен из списка пользователя, "застрянет" перед блоком SEIZE и после очередного освобождения устройства займет его, нарушая, в свою очередь, логику работы модели.
Проведенный анализ показывает, что для правильной обработки временного узла необходимо обеспечить такой порядок расположения транзактов в списке текущих событий, чтобы первым всегда располагался вновь пришедший транзакт. В рассматриваемом случае этого можно добиться, используя блок PRIORITY с операндом BU (рис. 23).
Перед освобождением устройства обслуженный транзакт проходит через блок PRIORITY, который, оставляя неизменным приоритет транзакта PR, переводит его в конец списка текущих событий. При новом просмотре списка в случае наличия временного узла начинает обрабатываться вновь поступивший транзакт. Так как устройство еще занято, он направляется блоком GATE в список пользователя. При повторной обработке обслуженного транзакта тот освобождает устройство и выводит очередной транзакт из списка пользователя. Таким образом, правильная обработка временного узла обеспечивается и в этом случае. 1 EXP FUNCTION RN1, C24
. 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, появляющееся в нижней строке командного окна - строке состояния, а также так называемый индикатор моделирования, мигающий в правой стороне нижней части окна данных.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10