<< Пред.           стр. 3 (из 6)           След. >>

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

 В - разброс или модификатор среднего значения (по умолчанию - ноль);
 С - время появления первого транзакта;
 D - общее число генерируемых транзактов;
 Е - уровень приоритета каждого транзакта (по умолчанию - ноль).
 F,G,H,I – параметры транзакты.
 Примечание: при курсовом проектировании будут использоваться четыре или пять первых операндов.
 GENERATE 2,1,,10
 Эта запись читается следующим образом:
 «Генерируется транзакт, распределенный по равномерному закону со средним значением 2 и модификатором 1, всего будет произведено 10 таких транзактов».
 Как видно из формата, по умолчанию закон распределения временных интервалов - равномерный с управляемым средним и разбросом, что позволяет, в том числе, моделировать потоки с равными интервалами. Также в GPSS/H предусмотрена возможность задавать более сложные распределения. В том случае, когда используются встроенные функции (см. ниже), любая встроенная функция ставится на место операнда А, а операнд В отсутствует. Например:
  GENERATE RVNORM(1,1,0.5),,1,4
 Эта запись читается следующим образом:
 «Генерируется случайное число (Random Value-RV), распределенное по нормальному закону, взятое с первого генератора случайных чисел - ГСЧ
  ( первое число в скобках), со средним значением равным 1 и стандартным отклонением 0.5; пришедшее в систему в первую единицу времени. Всего с этого ГСЧ поступит 4 транзакта».
  GENERATE RVEXPO(7,0.75),,,,5
  Эта запись читается следующим образом:
  «Генерируется случайное число, распределенное по экспоненциальному закону, взятое с седьмого ГСЧ с параметром потока 0.75, приходящее с приоритетом 5».
 В моделях GPSS/H могут применяться более одного блока GENERATE, когда надо представить различные действия для транзактов, например, клиенты банка, приходящие осуществлять различные операции в различном темпе.
  Оператор GENERATE не допускает входа транзактов в него! Любой транзакт, вошедший в оператор исполнения GENERATE, вызовет ошибку исполнения и прервет работу программы с выдачей предупреждения в листинге.
 TERMINATE (Уничтожить, терминировать)
 Служит для удаления транзактов из модели по завершении их обработки. Производит подсчет выведенных из модели транзактов, уменьшая величину специального счетчика - счетчика завершений.
 Формат: , где:
 А - величина, на которую будет уменьшен счетчик завершений. По умолчанию А=0. Операнд А может принимать любые значения в интервале от 0 до плюс бесконечности. Физический смысл числового значения операнда А заключается в задании веса терминирования. Например, на погрузочную площадку выходят двери 4 складов, большемерная фура занимает всю длину погрузочной площадки, и никакая другая машина не сможет производить погрузку. Окончание погрузки фуры (выход транзакта из системы) освобождает сразу 4 места. Эта цифра вычитается из числа стартов (счетчика завершений), подробнее см. в 3.5.
 В тех случаях, когда счетчик завершений не уменьшается с каждым транзактом, покидающим модель, моделирование может продолжаться бесконечно.
 В программе может быть любое количество операторов TERMINATE, но обязательно хотя бы один из них должен иметь операнд А, отличный от нуля, хотя и все TERMINATE могут иметь отличные от нуля значения операнда А. Единственное принципиальное условие – ни из одного оператора TERMINATE не должны выходить транзакты.
 Итак два оператора исполнения GENERATE и TERMINATE являются особыми: в первый не могут входить транзакты, а из второго не могут выходить транзакты! Все остальные рассматриваемые операторы или блоки имеют и вход и выход.
 SEIZE (завладеть), RELEASE (освободить)
 Оператор SEIZE, является парным с оператором RELEASE, использование их по одиночке не допустимо. Имена, записываемые в операнде А пары должны быть идентичны. Оператор служит приглашением ко входу в одно из устройств модели. Транзакт, подойдя к блоку SEIZE, пытается занять устройство, названное в операторе. Если устройство занято, транзакт ожидает освобождения устройства перед этим оператором. Перед оператором SEIZE может находиться любое количество транзактов. При попадании первого транзакта на обслуживание в устройство, происходит переключение, осуществляемое программой, запрещающее вход в устройство до окончания обслуживания.
 Формат:< SEIZE А>,
 где А - имя (или номер) устройства.
 Функция оператора RELEASE - моделировать освобождение устройства. Пройдя обслуживание в операторе ADVANCE, и исполнив, оператор RELEASE, транзакт переключает поименованное в операторе устройство из положения «занято» в положение «свободно» и разрешает вход в ADVANCE, первому из транзактов, ожидающих перед оператором SEIZE .
 Формат: ,
 где А - имя (или номер) устройства.
 ADVANCE ( продвижение вперед, успех)
 Этот оператор моделирует задержку транзакта в устройстве (в терминах теории СМО - обработку заявки).
 Формат:< ADVANCE A,[B]>, где
 А - среднее время задержки,
 В - разброс относительно среднего значения (модификатор).
 На месте операнда А, как и в операторе GENERATE, может быть задана любая встроенная функция, тогда операнд В отсутствует.
 Три описанных выше оператора составляют модель простейшей СМО на языке GPSS/H. Программа, в которой имеется такая последовательность операторов, будет отслеживать все статистические характеристики устройства.
 ENTER ( войти), LEAVE (отпустить)
 Эта пара операторов выполняет те же функции, что и SEIZE и RELEASE, но не для устройств, а для STORAGE - «хранилищ», то есть для ресурсов, к которым может обращаться более одного транзакта. Такие объекты могут быть полезны при моделировании, например, распараллеленного процесса: обработки потока деталей на нескольких одинаковых станках, выхода публики из театра через несколько дверей и т.д. Эти «хранилища», или устройства параллельной обработки, должны быть предварительно описаны в программе при помощи оператора описания STORAGE (см. ниже). По логике своей работы связки операторов SEIZE – ADVANCE – RELEASE; ENTER- ADVANCE- LEAVE; абсолютно одинаковы, но употребляются для разных объектов.
 QUEUE ( образовать очередь), DEPART (выйти из очереди)
 Помимо устройств, в которых происходит обработка заявок (задержка транзактов), необходимо собирать сведения о таких объектах, как очереди, образующиеся на входах устройств. В языке GPSS/H по умолчанию очередь образуется и функционирует нормально, но никаких сведений о ней не аккумулируется. Для организации сбора таких данных используется пара связанных операторов: QUEUE, который отмечает постановку заявки-транзакта в «хвост» очереди (в терминах модели это называется «конец очереди»), и DEPART, собирающий статистику об уходе транзактов из очереди при освобождении устройства. Эти два оператора ставятся по желанию пользователя, не влияют на основные статистические результаты листинга и могут быть поставлены для получения интересующей пользователя информации с любого объекта модели, где может происходить образование и накопление очереди. Они не препятствуют входу транзактов и имеют нулевое время входа. Последовательность постановки операторов:
 QUEUE(имя)- SEIZE…. RELEASE- DEPART (то же самое имя).
 Можно создавать несколько вложенных друг в друга очередей, при этом вначале выходят из более короткой очереди, затем из длинной (см. 3.7).
 Формат:< QUEUE А,[B]>, где
 А - имя очереди (имена такого рода используются не только для удобства идентификации в процессе работы с моделью, но и для указания необходимых сведений при работе в оболочке);
 В - число добавляемых в очередь элементов.
 Строго говоря, оператор QUEUE увеличивает текущее содержимое очереди, определенной в поле А, на величину, указанную в поле В.
 При прохождении оператора DEPART транзакт покидает указанную очередь, причем счетчик длины очереди уменьшается.
 Формат: , где
 А - имя очереди,
 В - число удаляемых из очереди элементов.
 Обычно описанные выше операторы применяются в программах языка GPSS/H в традиционном порядке, обеспечивающем моделирование работы устройства (простейшей СМО) с учетом образующейся очереди и со сбором всей необходимой статистической информации. Тело программы на языке GPSS/H может, например, выглядеть следующим образом.
 Пример
 Предположим, в почтовое отделение приходят посылки приблизительно раз в три часа, независимо от времени суток. В зависимости от размеров посылки, ее «обслуживание» в отделении может с равной вероятностью занимать два, три или четыре часа. Ниже приведена простейшая программа (точнее, тело программы с опущенной нумерацией) на GPSS/H, моделирующая такой процесс:
 
 
 GENERATE 3 Ввод в модель транзактов - посылок с интервалом в 3 часа
 QUEUE Q1 Постановка транзактов в очередь Q1
 SEIZE POST Занятие транзактом устройства POST (начало обработки посылки)
 ADVANCE 3,1 Задержка транзакта на время от 2 до 4 часов
 RELEASE POST Освобождение устройства POST (окончание обработки посылки)
 DEPART Q1 Выход транзакта из очереди
 TERMINATE 1 Вывод транзактов из модели по одному
 
 Для облегчения процедуры сбора и анализа статистической информации об очередях в GPSS/H предусмотрены следующие стандартные числовые атрибуты очередей:
 
 
 СЧА Описание
 Q(qname), Q(j) Текущая длина очереди
 QA(qname), QA(j) Средняя длина очереди
 QC(qname), QC(j) Полное число транзактов, вошедших в очередь
 QM(qname), QM(j) Максимальное число транзактов в очереди на данный момент
 QT(qname), QT(j) Среднее время пребывания транзакта в очереди
 QX(qname), QX(j) Среднее время пребывания транзакта в очереди (за исключением тех, которые прошли без задержки)
 QZ(qname), QZ(j) Количество транзактов, которые не задерживались в очереди
 
 TRANSFER (передать)
 Этот оператор предназначен для движением транзактов по модели; он применяется в тех случаях, когда необходимо нарушить обычный порядок движения - по прямой, с последовательным прохождением блоков.
 Формат: , где
 А - вероятность перехода на метку блока, записанного в поле С;
 В и С - метки блоков, между которыми предстоит выбирать.
 Существуют 4 следующие основные варианты применения ОБ:
 1. Безусловный переход:
 < TRANSFER , B >
 А - по умолчанию 0, заменяется обязательной запятой
 В — не имеет значения по умолчанию, характеризует имя (адрес) блока, к которому направляется транзакт.
 2. Условный переход с одним альтернативным адресом (режим "BOTH"):
 < TRANSFER BOTH, B, C >
 А - не имеет значения по умолчанию, операнд заменяется словом BOTH, указывающим тип режима;
 В — по умолчанию обозначает, что Хакт следует в первый последовательный блок, при именовании операнда В характеризует имя (адрес) блока, к которому направляется транзакт(основной адрес);
 С — не имеет значения по умолчанию, характеризует собой альтернативный адрес (при невозможности войти в блок с адресом В).
 3. Условный переход со многими альтернативами (режим "ALL"):
 
 А – не имеет значения по умолчанию, операнд заменяется словом ALL, указывающим тип режима;
 В — по умолчанию обозначает, что Х акт следует в первый последовательный блок, при именовании представляет собой первый адрес;
 С — не имеет значения по умолчанию, определяет последний адрес;
 D —не имеет значения по умолчанию, представляет собой константу М, используемую для вычисления возмож­ных адресов движения транзактов: адрес в поле В, затем — В+М, В+2М, ..., адрес в поле С.
 4. Статистический переход (переход с заданной вероятно­стью):
 
 А —не имеет значения по умолчанию, характеризует вероятность перехода транзакта по адресу С или часть времени используемую ОБ С;
 В —по умолчанию является следующим последовательным ОБ, при именовании представляет собой альтернативный адрес.
 В GPSS/H удобно использовать так называемую относительную адресацию, т.е. обращение к какому-либо блоку, не имеющему метки, осуществляется с помощью его относительного адреса. Для примера рассмотрим три варианта записи блока безусловного пе­рехода.
 Примеры.
 1. TRANSFER ,CPU2
 2. TRANSFER ,*+3
 3. TRANSFER ,CPU1+2
 В первом примере ОБ (прямая адресация) направляет транзакт к блоку с именем CPU2. Два остальных — примеры отно­сительной адресации. Второй ОБ посылает транзакт к треть­ему по счету блоку после рассматриваемого ОБ. Блок, к кото­рому направляется транзакт последним ОБ, является вторым по счету от блока CPU1.
 Далее приводятся примеры для варианта BOTH
 1. TRANSFER BOTH,KASS1,KASS2,
 2. TRANSFER BOTH,,TWO.
 В примере 1 транзакт первоначально направляется к блоку с отметкой KASS1. При невозможности войти в этот блок транзакт направляется к блоку с меткой KASS2. В примере 2 транзакт дела­ет попытку войти в следующий блок, если ему это не удается, он направляется к блоку с именем TWO.
 Пример для варианта ALL, приведём фрагмент программы :
  TRANSFER ALL,FIRST,LAST,3
 FIRST GATE LS AAA
  ADVANCE 5
  GATE LR BBB TRANSFER ,LAST+2
  ADVANCE 2
  TRANSFER ,LAST+2
 LAST GATE LS CCC
  ADVANCE 3,1
 Транзакт последовательно пытается войти в следующие бло­ки: FIRST, FIRST+3, FIRST+6 (LAST).
  Вариант вероятностного перехода
 1. TRANSFER .370,THIS,THAT
 В примере с вероятностью 0,37 транзакт перейдет к блоку ТНАТ (37% транзактов), а с вероятностью 0,63 - к блоку ТНIS (63% транзактов).
 TEST (проверить)
 Этот ОБ определяет направление движения транзакта в зависимости от выполнения условия, заданного алгебраическим соотношением. Оператор имеет расширенное поле операции, включающее общепринятые обозначения логических операций: L(меньше), LE(меньше или равно), E (равно ), NE (не равно ), G ( больше ), GE ( больше или равно ).
 Формат записи имеет вид :
  < TEST XX A, B, C >
 XX - дополнительный код логической операции (L, LE, E, NE, G, GE.);
 А - не имеет значения по умолчанию, представляет собой выражение, левая часть которого сравнивается с требуемой операцией, если сравнение истинно, то Хакт продвигается в следующий последовательный ОБ.
  В - не имеет значения по умолчанию, представляет собой выражение, правая часть которого сравнивается с операндом А;
 С - не имеет значения по умолчанию и представляет собой имя или номер ОБ к которому направляется Хакт, если результат сравнения ложный ( альтернативный адрес). Если операнд С отсутствует, а результат сравнения ложный, Хакт запрещён вход в ОБ TEST и сравнение проводится каждый раз, пока Хакт находится в СТС. Такое обстоятельство приводит к избыточному использованию памяти, в этом случае ( операнд С не определён ) следует пользоваться ОБ GATE. Рассмотрим примеры использования ОБ
 1. ТESТ LE Q1,10
 2. ТЕST NE S1,PF2
 3. TEST GE PF1,PF2,CPU
 В первом примере транзакт задерживается, если длина очереди 1 больше 10;
 Во втором примере транзакт задерживается, если текущее содержимое памяти 1 равно значению 2-го параметра транзакта форматом "слово";
 В третьем примере транзакт переходит к следующему блоку, если PF1 PF2, либо, в противном случае, направляется к блоку СPU.
 ASSIGN (задать)
 Этот ОБ изменяет атрибуты транзактов. К числу таких атрибутов относятся значения, записываемые в полях операндов F- I ОБ GENERATE. операнды F,G,H,I, относящиеся к параметрам транзакта, задаются по умолчанию в виде листов параметров и с помощью ОБ ASSIGN могут быть видоизменены.
  Формат ОБ ASSIGN имеет вид:
  < ASSIGN A,B,C,D >
 A - не имеет значения по умолчанию , определяет имя или номер параметра, которому назначается значение. Если последний символ в операнде А + или -, то параметр уменьшается или увеличивается на значение, определяемое операндом В.
 В - не имеет значения по умолчанию, представляет собой замещаемое значение, которое вычитается или прибавляется к значению операнда А, если модифицируется параметр, представляемый числом с плавающей точкой, то операнд В то же должен иметь такой вид.
 С – не имеет значения по умолчанию, определяет имя или номер оцениваемой функции, значение операнда В умножается на значение функции, предварительно определив знак функции.
 D - не имеет значения по умолчанию, определяет формат параметра PF(fullword), PH(halfword), PB(byte), PL(floating point) (по умолчанию PH ). Если функция отсутствует ( операнд С), то формат параметра сдвигается влево на место операнда С.
  Рассмотрим несколько примеров :
 ASSIGN 3+,5,,PB
 ASSIGN 1-7,3
 ASSIGN 5,2.5,,PL
 В первом примере производится прибавление к значению параметра 3 5 единиц. Во втором примере параметрам с 1 по 7 приписывается значение 3 форматом полуслово. В третьем примере задаётся значение параметру форматом «плавающая точка».
  PRIORITY
  В процессе моделирования иногда приходится менять как дисциплину обслуживания, так и приоритет транзакта. Для этой цели используется ОБ PRIORITY, формат ОБ имеет вид :
  < PRIORITY A >,
 A - не имеет значения по умолчанию, определяет новое значение приоритета для Хакт. Транзакты удаляются при этом из СТС и возвращается обратно с новым приоритетом, становясь последним в список данного приоритета. Уровень приоритета в последней версии GPSS/H может изменяться от - 2147483632 до + 2147483632 .
  Приведём пример использования ОБ
  1. PRIORITY 5
 В примере у транзакта переназначается приоритет.
  TABULATE (Создать таблицу )
  Этот ОБ используется для сбора дополнительной информации, которая не выводится в стандартном отчёте. Структура таблицы задаётся ОУ TABLE (см. параграф 3.3.2). МФ может содержать несколько таблиц, которые описываются в отчёте и каждая содержит размер выборки, стандартное выборочное отклонение, относительные и накопленные частоты Каждая таблица имеет свои СЧА, формат ОБ имеет вид:
  < TABULATE A,[B] >
 A - не имеет значения по умолчанию, определяет имя или номер таблицы, в которую вносятся желаемые наблюдения, описание таблицы даётся в модуле описания с помощью ОУ TABLE .
 В - по умолчанию равен 1, является не обязательным и служит в качестве весового коэффициента при создании взвешенных таблиц.
  Рассмотрим примеры применения ОБ
  1. TABULATE BLACK
 TABULATE 2
 TABULATE BLACK,2
  В первом примере заполняется таблица с именем BLACK, во втором примере, таблица за номером 2, в третьем примере все данные вносятся с коэффициентом 2.
  LOGIC( проверить логику ), GATE ( запирать )
  Эта комбинация ОБ LOGIC(Проверить логику) – GATE (Запирать) и ОУ INITIAL может находиться в одном из двух состояний « включено - выключено » и служит для сигнализации о состоянии моделируемой системы по отношению к сложившимся условиям. По терминологии GPSS/H логический переключатель может быть в установочном состоянии (set) - код состояния LS, либо свободен (clear)- код состояния LC. ОУ INITIAL задаёт начальное состояние или изменение состояния логического переключателя, а также сохраняемых величин ( Savevalue ) и матричных величин ( Matrix Savevalue ), его формат имеет вид:
  < INITIAL А(n)/ A(n)/…>,
 А - не имеет значения по умолчанию и обозначает один из кодов состояния LS, LС, содержимое скобок указывает на имя инициализируемого устройства, слэш “/” символизирует возможный набор устройств, например:
  INITIAL LS(KEY)/LC(KNOB).
 В этом примере начальное состояние логического переключателя KEY в положении “установить”, а начальное состояние логического переключателя KNOB в положении “ свободен “.
  ОБ LOGIC изменяет состояние логического переключателя. Кроме кода действия, ОБ имеет дополнительные коды: S- установлен, C- свободен или переустановлен -R (reset ) и инвертирован – I, т.е. изменил состояние на противоположное, ОБ имеет формат:
  < LOGIC X A > ,
 X - дополнительный код S ,C( R ), I
 A - не имеет значения по умолчанию и обозначает имя или номер логического переключателя, устанавливаемого в одно из состояний, задаваемых дополнительным кодом, например :
 1. LOGIC S SWCH
 2. LOGIC I KL1
 В первом примере проходит команда на установку переключателя SWCH
 Во втором примере инвертируется переключатель KL1.
  Существуют два СЧА, относящихся к логическому переключателю, введённые выше, а именно LS и LC , которые обозначают следующее:
 LC (имя или номер )- истинно, когда логический переключатель свободен, если это так, то СЧА равен 1, в противном случае СЧА равен 0.
 LS ( имя или номер )- истинно, если логический переключатель установлен, если это так, то СЧА равен 1, в противном случае СЧА равен 0.
  Используемый в этой цепочке ОБ GATE, препятствует входу следующего транзакта, если определяемые условия ложны, что делается с помощью дополнительных кодов ОБ, отличающихся от условий применения ОБ GATE. Вначале рассмотрим его использование в общем виде, формат ОБ GATE в этом случае имеет вид:
  < GATE XXX A[,B ] >,
 XXX - дополнительный код.
  Для логического переключателя это LS и LC.
  Для устройств:
 I- прервано, NI не прервано, U - захвачено или прервано, NU –ни захвачено и ни прервано, FV- доступно, FNV - не доступно, FS готово к захвату, FNS - не готово к захвату.
 Для памятей:
 SE – пуста, SNE - не пуста, SF- полна,SNF- не полна, SV-доступна, SNV – не доступна.
  Для транзактов, имеющих одинаковые характеристики (групп, ансамблей):
 M- является членом группы, NM - не является членом группы.
 А - не имеет значения по умолчанию ни для одного объекта, представляет собой имя или номер логических переключателей, устройств, памятей или ОБ, проверяющих наличие транзактов, отвечающих заданным условиям. ( К числу таких ОБ относятся ASSEMBLE ,GATHER , MATCH ).
 В - при умолчании 0, в режиме перехода относится ко всем формам ОБ и указывает на имя или номер дополнительного , не последовательного блока к которому направится Х акт при ложности дополнительного кода , т.е указывает альтернативный адрес.
 Приведём несколько примеров :
 1. GATE LS 1
 2. GATE FNV 7
 3. GATE SF 16
 4. GATE FNI 21,ALTR
 В первом примере транзакт блокируется до установки ключа 1 .
 Во втором примере транзакт блокируется пока устройство 7 занято .
 В третьем примере транзакт блокируется до заполнения памяти 16 .
 В четвёртом примере транзакт после прерывания устройства 21 переходит к ALTR.
 В данном параграфе рассмотрены только те операторы блоков, которые потребуются для выполнения курсового проекта, на самом деле ОБ в языке больше и они участвуют в разделении транзактов, их группировании, выделении необходимых и т.д. Кроме того, в последней версии появилось 12 операторов управления с первой буквой В (индекс блока), которые могут включаться в модуль исполнения, упрощая функции управления моделью. Подробнее см. (Л.1,2).
 
 3.3.2. Операторы управления
 Как было указано выше, эти операторы используются для управления выполнением программы языка GPSS/H и описания других объектов, встречающихся в программе. Вначале рассмотрим три главных ОУ, без которых процесс моделирования не может быть осуществлен.
 А. Главные операторы управления
 SIMULATE (моделировать, воспроизвести)
 Этот оператор указывает, что программа на языке GPSS/H должна быть выполнена после успешной компиляции. Располагается в начале модели, меток не имеет по определению, операндов при практической работе не имеет, хотя иногда используется операнд А, задающий лимит времени моделирования. При курсовом проектировании операнд не используется.
 START (начать)
 При исполнении этого ОУ происходят следующие события:
 - счетчик завершений устанавливается в начальное значение,
 - инициализируется процесс поступления транзактов в модель,
 - начинается последовательное движение транзактов от ОБ к ОБ.
  Формат ОУ имеет вид:
  ,
 А – начальное значение счетчика завершений, от 1 и выше.
 Метка у ОУ отсутствует по определению.
 ЕND (окончить)
 ОУ выполняет две функции, во первых, его наличие свидетельствует о физическом окончании модельного файла, а во вторых, его исполнение останавливает процесс моделирования и передает управление ОС.
 ОУ не имеет операндов и меток.
 Б. Операторы управления процессом моделирования
 Далее рассмотрим ряд операторов управления, приводимых в алфавитном порядке, подробнее см.(Л.1,2).
 CLEAR (очистить)
  Этот ОУ позволяет провести от двух и более последовательных прогонов модели. Исполнение ОУ происходит после окончания одной реплики и началом другой, таким образом осуществляется связь между репликами. ОУ CLEAR всегда располагается в модуле управления между первым ОУ START и последним ОУ END, появление ОУ CLEAR требует обязательного парного ему ОУ START, т.е. при наличии в модуле управления нескольких ОУ CLEAR, обязательно должно быть столько же ОУ START, не считая первого, стоящего в начале модуля. Исполнение ОУ CLEAR приводит к следующим последствиям :
 Относительное и абсолютное время обнуляются .
 Все транзакты, находящиеся в модели к моменту окончания процесса ИМ, т.е. вошедшие в модель, но не дошедшие до ОБ TERMINATE уничтожаются.
 Все устройства и памяти модели возвращаются в состояние готовности ( не занятости ).
 Все статистические данные обнуляются (число использованных ОБ, число входов в устройства, памяти и очереди, максимальное содержание памятей и очередей и т.д. ).
  Повторение нового прогона необходимо для сбора статистических данных о модели, однако при этом нельзя забывать того обстоятельства, что при простом повторении прогона генераторы случайных чисел -ГСЧ стартуют с одной и той же позиции и выходная статистика от прогона к прогону не будет изменяться. Для того, чтобы прогоны сделать статистически независимыми необходимо, чтобы ГСЧ не возвращались в исходное положение. ОУ CLEAR позволяет, дополнительно к вышесказанному, сделать это за счёт реализации следующих положений :
 ГСЧ остаются в том положении, в котором они находились на момент окончания предыдущего прогона, т.е. начальное положение ГСЧ следующего прогона отличается от предыдущего, что позволяет сделать результаты прогонов статистически независимыми.
 Счётчик ИН транзактов также не обнуляется и номера транзактов нового прогона являются продолжением после последнего номера транзакта предыдущего прогона ( например, если предыдущий прогон кончился ИН 104, то новый начинается с ИН 105).
  Формат ОУ CLEAR имеет вид :
  < CLEAR >
 Необходимо отметить , что ОУ никогда не имеет ни меток (ярлыков), ни операндов. Пример применения ОУ CLEAR будет приведен непосредственно при рассмотрении примера в 3.7.
  FUNCTION ( функционировать )
  Этот ОУ используется для определения характера функции, связывающей независимую переменную с рядом зависимых величин. Эта связь может иметь непрерывный или дискретный вид. Кроме того функция может быть представлена в символьном виде, когда значение функции вычисляется из выражения, приводимого в списке. Формат ОУ FUNCTION имеет вид:
  < label FUNCTION A,B,[C] основной формат
  X1,Y1/X2,Y2/,…/Xn,Yn > точки функции
 Label – ярлык употребляется в обязательном порядке и служит для идентификации функции .
 А - не имеет значения по умолчанию, определяет независимую переменную функции (аргумент), например, если используется равномерное распределение и БСВ берётся с 3-го генератора, то запись будет иметь вид RN3 (random number). Операнд может кодироваться дополнительным выражением. Единственным ограничением является то, что аргумент не может прямо или косвенно ссылаться на функцию для которой он является независимой переменной. Значения функции могут задаваться числом с плавающей точкой.
 B - не имеет значения по умолчанию, состоит из двух символов ( без пробела), первый из которых представляет собой обозначение типа функции, вида: C- непрерывная числовая, D – дискретная числовая, L - список числовых значений, E - дискретная символьная, M – список дискретных символов, S- селектор объектов; второй символ представляет собой целое число связанных пар значений функции, которые представляют собой точки функции и приводятся во второй строке описания формата. Если используется символ S, то он уточняется операндом С, используемым только в этом случае .
 С - по умолчанию равен 0, применяется для перечисления типов объектов, если используются объекты разных типов, то приводятся их символы, разделяемые запятой без пробелов.
  Рассмотрим пример записи функции :
 SERVTIME FUNCTION RN7,D5
 .2,4/.55,7.5/.7,10.5/.8,13.5/1,16.5
 В примере описывается ОУ FUNCTION, имеющая ярлык SERVTIME, равномерно –распределённое время обслуживания берётся с ГСЧ 7, распределение времени дискретно, функция имеет 5 пар точек, х - представляет собой накопленную частоту, а у- время обслуживания. Необходимо отметить, что начало и конец записи точек функции не выделяется никакими символами, пары точек отделяются слэшем, значения внутри пары разделяются запятой, 0 не пишется, а запись начинается с точки.
  INITIAL( Начальное значение )
  Этот ОУ используется для установления начальных значений сохраняемым величинам ( Savevalue ), матричным величинам и логическим переключателям . Формат ОУ INITIAL имеет вид :
  < INITIAL символ инициализации[ / символ инициализации ]…>.
  В формате под символом инициализации понимается обозначение величины, представляемое как символ величины отделённый от имени величины знаком $, например X$SAM,25 - что значит полнословная сохраняемая величина SAM, имеющая значение 25. Если в качестве начального значения используется выражение, то оно представляется в скобках. При нескольких символах инициализации, они отделяются друг от друга слэшем, который не ставится в начале и конце наименований. Например :
 1. INITIAL XH1-XH10,13/XB$SAM-XB$JOE,(5+XH$INIT)
 2. INITIAL LS10/LR1-LR5
 Из первого примера следует, что в первом символе полусловные сохраняемые величины с 1-ой по 10-ю имеют значение 13, а во втором сохраняемые величины SAM –JOE имеют значение, указанное в скобках, т.е. к полусловному значению сохраняемой величины INIT добавляется 5. Во втором примере, относящимся к логическим переключателям устанавливается, что логический переключатель 10 находится во включённом состоянии, а переключатели с1-го по 5-ый выключены.
  RESET(установить, сбросить в нуль)
  Этот ОУ похож на ОУ CLEAR, также используется для целей сбора статистических данных, но имеет ряд отличительных черт, так при исполнении ОУ RESET не происходит разрушения транзактов, абсолютное время не обнуляется (обнуляется только относительное время). Использование ОУ RESET эффективно при определении момента времени, когда процесс ИМ становится установившимся .
  RMULT (Переустановить )
  Этот ОУ используется для управления текущей позицией ГСЧ, вводя данные с помощью ОУ RMULT можно переназначать положение любого ГСЧ, что позволяет достигать статистической независимости ИМ и избегать корреляции между отдельными потоками БСВ. Формат ОУ RMULT имеет вид :
  < [label] RMULT A,B,C,D,…. >
 label - отсутствует по определению, наличие ярлыка приводит к ошибке.
 А- по умолчанию текущее значение ГСЧ1, появление операнда А устанавливает новую текущую позицию для ГСЧ1 (RN1),
 В – по умолчанию текущее значение ГСЧ2, появление операнда В устанавливает новую текущую позицию для ГСЧ2 и т.д.
 Приведём несколько примеров использования ОУ RMULT :
 1. RMULT 50000
 2. RMULT ,125000
 3. RMULT 25000,,100000
 В первом примере устанавливается значение ГСЧ1 равное 50000, остальные остаются неизменными. Во втором примере начальные значения всех ГСЧ остаются неизменными, а новое текущее значение ГСЧ2 равняется 125000 . В третьем примере все ГСЧ сохраняют неизменное положение , кроме первого и третьего .
  Положение занимаемое ОУ RMULT в МФ зависит от задач, стоящих перед исследователем. Если необходимо, c целью исключения корреляции, разнести потоки заявок от потоков обслуживания, то ОУ RMULT помещается в первом модуле описания, если нужно провести переназначение между прогонами, то ОУ RMULT помещается в модуле управления после ОУ START.
  STORAGE (Запомнить )
  Этот ОУ используется для определения ёмкости одной или нескольких памятей. Исполнение ОУ STORAGE (впрочем, как и всех рассмотренных ОУ) происходит только после успешного завершения процесса компиляции, при этом вводится в действие оговорённое число ресурсов ОУ STORAGE . ОУ STORAGE в силу своей специфики должен располагаться в модуле описания, до того как началось движение транзактов, так как после компиляции программа последовательно исполняет все ОУ, стоящие до первого ОУ START. Формат ОУ STORAGE может быть представлен двумя способами :
  1. < label STORAGE A >,
  Label - не имеет значения по умолчанию, отсутствие ярлыка приводит к ошибке компиляции. Ярлык является идентификатором памяти, ёмкость которой определяется. При этом формате можно определить только одну память.
 А - не имеет значения по умолчанию, отсутствие приводит к ошибке компиляции. Операнд определяет ёмкость памяти, т.е. число моделируемых устройств обслуживания. Необходимо иметь в виду, что в этом формате можно использовать одну единицу ёмкости в заданный момент времени.
  Приведём примеры записи:
 1. SAM STORAGE 10,
 2. 3 STORAGE 5.
 В первом примере памяти SAM определяется ёмкость 10 , во втором примере памяти за номером 3 определяется ёмкость 5.
  Используя многоканальное обслуживание можно не определять ОУ STORAGE, в этом случае ёмкость по умолчанию практически равна бесконечности ( а именно , 2147483647 ).
  При записи во втором формате :
  2. < STORAGE Sname1,A/Sname2, B/Sname3,C … >
  можно определять несколько памятей сразу. Определитель памяти представляет пары обозначений, разделённых запятой, между собой пары отделяются слэшем. Вначале пишется символ памяти, а затем её имя – первый член пары, после запятой пишется операнд А,В,… , характеризующий ёмкость памяти- второй член пары. Символ S может быть отделён от имени памяти символом $ или имя может быть включено в круглые скобки, памяти одинаковой ёмкости могут записываться через тире.
  Приведём комбинированный пример записи ОУ STORAGE
  STORAGE S1,10/S$CORE,5/S(SAM)-S(JOE),15
  Комментарий : все виды записей воспринимаются программой одинаково и могут комбинироваться.
 В примере памяти S1 приписывается ёмкость 10, памяти S с именем CORE приписывается ёмкость 5, а ряд памятей с именами S(SAM) –S(JOE) имеют одинаковую ёмкость 15.
  В случае если память имеет ёмкость равную единице, то она полностью аналогична устройству, осуществляющему одноканальное обслуживание. Отсюда следует, что в GPSS/H одноканальное обслуживание можно моделировать двумя способами. Поэтому имеет смысл кратко рассмотреть разницу между этими двумя возможностями . Во первых, обслуживание в устройствах может быть прервано (PREEMPT ) транзактом с более высоким приоритетом, чего не допускается при обслуживании с памятями. Во вторых, у устройств поддерживается понятие готовности - не готовности ( рабочее состояние - состояние ожидания), для памятей их состояния имеют другой смысл , что будет рассмотрено ниже . В- третьих, при исполнении ОБ SEIZE программа записывает ИН Хакт и при исполнении ОБ RELEASE проверяет тот ли транзакт вышел из устройства обслуживания . При исполнении ОБ ENTER ИН Хакт не записывается . Предупреждение: в GPSS/H чётко разделены функции устройств и памятей и необходимо соблюдать внутренние правила программы .
  Выше были высказаны замечания в адрес не очень чёткого определения STORAGE, необходимо помнить, что этот термин прежде всего относится к устройству, моделирующему группу идентичных серверов, а не определяет физическое расположение или объём. Следует обратить внимание на обязательность идентичности, как только серверы не идентичны их следует моделировать устройствами, а не памятями! Для определения числа идентичных серверов используется термин ёмкость ( который, впрочем, также не удачен, как и память, так как сразу возникает ассоциация с конкретным местом куда что-то можно положить и соответственно забрать). Для определения состояния памятей в GPSS/H используется несколько терминов:
 Память считается заполненной (Full), если каждая единица ресурса
  ( сервер ) занята в момент обращения к ней,
 Память считается пустой (Empty), если каждая единица ресурса свободна .
 Текущее содержание (Current Contents) памяти определяется числом единиц ресурса, занятых на текущий момент времени.
 Остающаяся ёмкость (Remaining Capacity) памяти, число единиц ресурса свободных на текущий момент. Так например, при заполненности памяти остающийся объём равен 0.
  Следует иметь в виду, что все перечисленные термины имеют отношение только к GPSS/H.

<< Пред.           стр. 3 (из 6)           След. >>

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