![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Блоки, изменяющие порядок прохождения блоков сообщениями
Обычно интерпретатор пытается продвинуть сообщение к следующему по номеру блоку. Однако существуют блоки, которые позволяют изменять номер следующего блока. 4.3.4.1. Блок TRANSFER Блок TRANSFER имеет следующий формат: TRANSFER [< A> ], [< B> ], [< C> ], [< D> ] Блок TRANSFER является основным средством, позволяющим направить сообщение к любому блоку модели. Поле А задает режим выбора следующего блока, к которому должно перейти сообщение. Существуют следующие режимы работы блока TRANSFER: - безусловный (пробел); - статистический (.); - BOTH. Кроме того, операнд А может быть дробным числом, именем, положительным целым числом или СЧА. Поля В и С задают возможные значения номеров следующих блоков или их положение. Использование значений описано при рассмотрении определенных режимов выбора. Операнды могут быть именем, положительным целым числом или СЧА. Если поле В пусто, ассемблер записывает в нем номер блока, следующего за блоком TRANSFER. Безусловный режим выбора. Если операнд А пропущен, то блок TRANSFER работает в безусловном режиме. Входящее в блок TRANSFER сообщение переходит к блоку, указанному в поле В. Если сообщение в этот блок войти не может, попытка направить сообщение к какому-либо другому блоку не производится. Статистический режим выбора. Когда операнд А не является зарезервированным словом, блок TRANSFER работает в статистическом режиме выбора. Значение аргумента, записанного после точки (.) в поле А, рассматривается как трехзначное число, показывающее (в частях от тысячи), какой процент входящих в блок сообщений следует направить к блоку, указанному в поле С. Остальные сообщения направляются к блоку, указанному в поле В, или к следующему по номеру блоку, если операнд В пропущен. Для каждого сообщения выбирается один из двух возможных вариантов; после того как выбор сделан, второй вариант для этого сообщения не рассматривается. Пример: BCD TRANSFER.709, BLK1, BLK2 Из общего числа сообщений, входящих в блок BCD, в среднем 0, 709 будут пытаться войти в блок BLK2. Остальные 0, 291 будут пытаться войти в блок BLK1. Режим BOTH. Если в поле А стоит зарезервированное слово ВOTH, блок TRANSFER работает в режиме BOTH. В этом режиме каждое входящее сообщение сначала пытается перейти к блоку, указанному в поле В. Если это сделать не удается, сообщение пытается перейти к блоку, указанному в поле С. Если сообщение не сможет перейти ни к тому, ни к другому блоку, оно остается в блоке TRANSFER и будет повторять в том порядке попытки перехода при каждом просмотре списка текущих событий до тех пор, пока не сможет выйти из блока TRANSFER.
4.3.4.2. Блок TEST Блок TEST имеет следующий формат: TEST < X> < A>, < B>, [< C> ] Блок TEST определяет номер следующего блока для вошедшего в него сообщения в зависимости от того, выполняется требуемое условие или нет. Блок управляет потоком сообщений, проверяя выполнение алгебраических отношений между значениями СЧА, заданных в полях А и В. Операнды А и В – сравниваемые величины, которые могут быть именем, любым целым числом или СЧА. Если в полях А и В заданы СЧА, то они должны быть записаны как СЧАj (например: очередь Q1). Необходимо присвоить им номера в начале программы с помощью оператора EQU. Во вспомогательном поле операции оператора описания блока TEST < X> – записывается один из шести условных операторов: - 'L' – меньше. Отношение истинное, если значение аргумента поля А меньше значения аргумента поля В; - 'LE' – меньше или равно. Отношение истинное, если значение аргумента поля А меньше или равно значению аргумента поля В; - 'E' – равно. Отношение истинное, если значения обоих аргументов равны; - 'NE' – не равно. Отношение истинное, если значения аргументов полей А и В не равны; - 'G' – больше. Отношение истинное, если значение аргумента поля А больше значения аргумента поля В; - 'GE' – больше или равно. Отношение истинное, если значение аргумента поля А больше или равно значению аргумента поля В. Если отношение СЧА, заданных в полях А и В, истинно, сообщение переходит к следующему блоку. Если отношение ложно, сообщение переходит к блоку, номер которого задан полем С. C – номер блока для входящего сообщения, если отношение величин, заданных в полях А и В, ложно. Операнд C может быть именем, положительным целым числом или СЧА. Блок TEST может работать в двух режимах: 1) в режиме безусловного входа. Если в поле С задан номер следующего блока, сообщения никогда не задерживаются на входе блока TEST. Если заданное в блоке TEST отношение истинно, то сообщение пытается перейти к следующему по номеру блоку. Если отношение ложно, сообщение пытается перейти к блоку, заданному полем С. Выбор следующего блока производится только один раз (в момент входа сообщения в блок TEST); 2) в режиме условного входа. Если поле С блока TEST пусто (т.е. не указан альтернативный выход), сообщения не могут войти в блок TEST до тех пор, пока условия не изменятся таким образом, что отношение будет истинно. Если отношение истинно, сообщение входит в блок TEST и пытается перейти к следующему по номеру блоку. Блоки для обработки сообщений, принадлежащих одному Семейству Блоки GENERATE являются основным средством создания сообщений и ввода их в модель. Вход сообщений в блок GENERATE не допускается. Помимо блока GENERATE, для создания сообщений используется также блок SPLIT, который создает заданное число копий вошедшего в блок сообщения. Эти копии принадлежат к тому же семейству, что и породившее их сообщение. Блок TERMINATE является основным средством уничтожения сообщений и удаления их из модели. Для удаления сообщений, принадлежащих к одному семейству, может быть также использован блок ASSEMBLE. 4.3.5.1. Блок SPLIT Блок SPLIT имеет следующий формат: SPLIT < A>, [< B> ], [< C> ] Блок SPLIT выполняет функцию копирования входящего в него сообщения, которое называется исходным или порождающим. В поле А задается число создаваемых копий. Операнд А может быть именем, положительным целым или СЧА. Если вычисленное значение аргумента поля А равно нулю, то блок SPLIT не выполняет никаких операций. После создания копий сообщение пытается перейти к следующему по номеру блоку. Все копии формируются в момент входа порождающего сообщения в блок SPLIT. Поле В задает номер следующего блока, к которому переходят копии исходного сообщения, причем значение вычисляется для каждой копии отдельно. Операнд В может быть именем, положительным целым, СЧА. В поле С может быть задан номер параметра, используемого для присвоения копиям последовательных номеров. Операнд С может быть именем, положительным целым, СЧА. Каждая новая копия становится членом семейства сообщений, порожденного одним исходным сообщением, которое было создано блоком GENERATE. Сообщения, принадлежащие к одному семейству, объединяются интерпретатором в список. 4.3.5.2. Блок ASSEMBLE Блок ASSEMBLE имеет следующий формат: ASSEMBLE < A> Блок ASSEMBLE объединяет заданное число сообщений, принадлежащих к одному семейству, в одно сообщение (т.е. осуществляет сборку заданного числа сообщений). После сборки из блока ASSEMBLE выходит только одно сообщение, которое переходит в следующий по номеру блок. В одном и том же блоке ASSEMBLE возможна одновременная сборка сообщений нескольких семейств. Когда сообщение входит в блок ASSEMBLE, интерпретатор просматривает семейство, к которому принадлежит это сообщение, и проверяет, есть ли другое сообщение из того же семейства в данном блоке ASSEMBLE. Поле А задает число сообщений, участвующих в сборке. Операнд А может быть именем, положительным целым, СЧА. 4.3.5.3. Блок MATCH Блок MATCH имеет следующий формат: MATCH < A> Блок MATCH используется для синхронизации движения двух сообщений, принадлежащих к одному семейству, без удаления этих сообщений из модели. Блоки MATCH не объединяют синхронизируемые сообщения. Синхронизация осуществляется путем подбора пар сообщений из одного семейства и задержки этих сообщений до тех пор, пока оба сообщения из одной пары не поступят в заданные точки модели. Сообщения никогда не задерживаются в блоке MATCH. Сообщения, для которых выполнилось условие синхронизации, переходят к следующему по номеру блоку. В одной паре блоков MATCH могут одновременно находиться в состоянии синхронизации пары сообщений из различных семейств. Возможна также одновременная синхронизации пар сообщений из одного семейства в нескольких блоках MATCH. Поле А задает имя или номер другого блока MATCH, называемого " сопряженным блоком MATCH". Если такого блока нет, происходит останов по ошибке. Операнд А может быть именем, положительным целым, СЧА. Допускается использование блока MATCH в качестве сопряженного самому себе. Стандартным числовым атрибутом, связанным с описываемым оператором является: МВ< номер блока> – флаг синхронизации. Возвращает 1, если сообщение, находящееся в блоке < номер блока>, принадлежит к тому же семейству, что и текущее. Списки пользователя В GPSS/PC имеется тип списков сообщений, названных списками пользователя, которые дают возможность удалять сообщения из списков текущих событий и переводить их во временно неактивное состояние. Впоследствии эти сообщения возвращаются в список текущих событий. 4.3.6.1. Блок LINK Блок LINK имеет следующий формат записи: LINK < A>, < B>, [< C> ] Блок LINK удаляет сообщение из списка текущих событий и помещает его в список пользователя. Поле А задает номер списка пользователя, в который будет помещено вошедшее сообщение. Операнд А может быть именем, положительным целым, СЧА. Поле В задает алгоритм упорядочивания списка пользователя. Операнд В может быть LIFO, FIFO, именем, целым или СЧА. Допустимые операнды: - FIFO – вошедшее сообщение помещается в конец списка пользователя; - LIFO – вошедшее сообщение помещается в начало списка пользователя; - номер параметра – входящие сообщения располагаются в списке пользователя в соответствии со значением указанного параметра. Сообщения располагаются по возрастанию значения этого параметра. Чем меньше значение параметра, тем ближе сообщение к началу списка, чем больше значение параметра, тем ближе сообщение к концу списка. Поле С, указывающее альтернативный выход, используется при описании различных ситуаций, возникающих в очередях. Операнд С может быть именем, положительным целым, СЧА. Если поле С пусто, индикатор, связанный с заданным списком пользователя, устанавливается в единицу. Это приводит к тому, что все входящие сообщения безусловно заносятся в список пользователя, определенный полем А в том порядке, какой задан полем В. Если поле С не пустое, проверяется индикатор списка пользователя. Если индикатор списка установлен в единицу, вошедшее сообщение заносится в список пользователя в том порядке, какой задан в поле В. Если индикатор списка установлен в " 0", он переводится в единицу, и вошедшее сообщение переходит к блоку, заданному в поле С. Пример: LINK HOLD, FIFO В этом примере вошедшее сообщение помещается в конец списка пользователя с именем HOLD. Стандартными числовыми атрибутами, связанными с описываемым оператором, являются: CA< номер списка> – среднее число сообщений в списке пользователя с именем < номер списка>; CC< номер списка> – общее число сообщений в списке пользователя с именем < номер списка>; CH< номер списка> – текущее число сообщений в списке пользователя с именем < номер списка>; CM< номер списка> – максимальное число сообщений в списке пользователя с именем < номер списка>; CT< номер списка> – среднее время пребывания сообщения в списке пользователя с именем < номер списка>, которое рассчитывается следующим образом: 4.3.6.2. Блок UNLINK Блок UNLINK имеет следующий формат записи: UNLINK [< X> ] < A>, < B>, [< C> ], [< D> ], [< E> ], [< F> ] Блок UNLINK удаляет сообщения из списка пользователя. Указатели отношения, записываемые во вспомогательном поле операции < X>, определяют, какое явное условие следует рассматривать. Если указатель отношения не задан, предполагается отношение равенства (Е). Указатели отношения следующие: - 'G' – больше. Отношение истинно, если значение параметра, заданного в поле D, больше значения, заданного в поле Е; - 'GE' – больше или равно. Отношение истинно, если значение параметра, заданного в поле D, больше или равно значению, заданному в поле Е; - 'L' – меньше. Отношение истинно, если значение параметра, заданного в поле D, меньше значения, заданного в поле Е; - 'LE' – меньше или равно. Если значение параметра, заданного в поле D, меньше или равно значению, заданному в поле Е, то отношение истинно; - 'E' – равно. Отношение истинно, если значение параметра, заданного в поле D, равно значению, заданному в поле Е; - 'NE' – не равно. Отношение истинно, если значение параметра, заданного в поле D, не равно значению, заданному в поле Е. Поле А задает номер списка пользователя, из которого удаляются одно или несколько сообщений. Операнд А может быть именем, положительным целым или СЧА. В поле В указывается номер блока, к которому переходят удаленные сообщения. Операнд В может быть именем, положительным целым, СЧА. Поле С задает счетчик числа удаленных сообщений. Операнд С может быть " ALL", именем, положительным целым или СЧА. Значение СЧА является числом удаляемых сообщений. Может быть задано " ALL", что означает удаление всех сообщений. Пример использования блока UNLINK: UNLINK HOLD, REENTRY, 1 Первое сообщение из списка пользователя с именем HOLD помещается в блок с именем REENTRY. Оно заносится в список текущих событий за сообщением с таким же приоритетом. Входящее сообщение переходит к следующему блоку. Стандартными числовыми атрибутами, связанными с описываемым оператором являются те же, что и для LINK. Устройства Устройства используются при моделировании систем для имитации работы оборудования единичной емкости, например, процессора, каналов передачи данных, устройств ввода-вывода, линии связи и т.д. Такое оборудование в любой момент времени может обрабатывать только одно сообщение. 4.3.7.1. Блок SEIZE Блок SEIZE имеет следующий формат: SEIZE < A> Операнд А может быть именем, положительным целым или СЧА. Свободный блок SEIZE позволяет вошедшему в него сообщению занять указанное устройство. Блок SEIZE задерживает сообщение, если устройство занято или находится в состоянии недоступности. В поле А задается имя занимаемого устройства. Стандартными числовыми атрибутами, связанными с оператором SEIZE, являются: F< номер устройства> – возвращает 1, если устройство занято, 0 - если свободно; FС< номер устройства> – общее число входов в устройство; FI< номер устройства> – возвращает 1, если устройство обслуживает прерывание, 0 в противном случае; FR< номер устройства> – коэффициент использования устройства, выражается в тысячных долях и возвращает целое число от 0 до 1000; FT< номер устройства> – среднее время занятости устройства одним сообщением; FV< имя устройства> – возвращает 1, если устройство доступно и 0 – если недоступно. 4.3.7.2. Блок RELEASE Блок RELEASE имеет следующий формат: RELEASE < A> Блок RELEASE предназначен для освобождения устройства тем сообщением, которым оно было занято. Если сообщение обрабатывается устройством, то с помощью блока RELEASE оно освобождает устройство и переходит к следующему последовательному блоку. Операция освобождения выполняется немедленно после входа сообщения в блок RELEASE. В поле А задается номер освобождаемого устройства. Операнд А может быть именем, положительным целым или СЧА. Стандартными числовыми атрибутами, связанными с описываемым оператором, являются те же, что и для SEIZE. Многоканальные устройства При моделировании систем объекты GPSS/PC типа " многоканальные устройства" используются для имитации работы объектов реальных систем, параллельно обрабатывающих поступающие заявки. 4.3.8.1. Оператор описания многоканального устройства Оператор описания многоканального устройства имеет следующий формат: < NAME> STORAGE < A> Оператор STORAGE определяет емкость многоканального устройства в текущей модели. Поле метки определяет имя многоканального устройства. Поле может быть именем. Операнд А определяет объем многоканального устройства. Операнд А может быть положительным целым. Стандартными числовыми атрибутами, связанными с описываемым оператором, являются: - S< номер многоканального устройства> – текущее содержимое. Возвращает емкость заполненной части устройства; - SА< номер многоканального устройства> – среднее содержимое. Возвращает целую часть среднего заполнения устройства; - SС< номер многоканального устройства> – счетчик числа входов в многоканальное устройство; - SЕ< номер многоканального устройства> – незаполненность устройства. Возвращает 1, если устройство использовалось не полностью, и 0 – в противном случае; - SF< номер многоканального устройства> – заполненность устройства. Возвращает 1, если устройство используется полностью, 0 – в противном случае; - SR< номер многоканального устройства> – коэффициент использования многоканального устройства, выраженный в долях тысячи. Возвращает целое в интервале от 0 до 1000; - SM< номер многоканального устройства> – максимально занятая емкость устройства; - SТ< номер многоканального устройства> – среднее время пребывания сообщения в устройстве; - SV< номер многоканального устройства> – доступность устройства. Возвращает 1, если устройство доступно, 0 – в противном случае. Блоки, связанные с описываемым оператором: ENTER, LEAVE. 4.3.8.2. Блок ENTER Блок ENTER имеет следующий формат записи: ENTER < A>, [< B> ] Блок ENTER позволяет вошедшему сообщению использовать многоканальное устройство. Сообщение может быть задержано на входе в блок, если многоканальное устройство заполнено, или имеющейся емкости недостаточно, или устройство в данный момент недоступно. В поле А указывается номер или имя многоканального устройства, куда входит сообщение. Операнд может быть именем, положительным целым или СЧА. В поле В содержится число занимаемых единиц многоканального устройства. Если поле В пусто, то предполагается, что занимается одна единица. Если это значение равно нулю, то сообщение никогда не задерживается на входе, а блок рассматривается как нерабочий. Операнд может быть именем, положительным целым или СЧА. Стандартными числовыми атрибутами, связанными с описываемым оператором, являются те же, что и для STORAGE и: - R< имя многоканального устройства> – емкость незаполненной части устройства. 4.3.8.3. Блок LEAVE Блок LEAVE имеет следующий формат: LEAVE < A>, [< B> ] Блок LEAVE освобождает определенное число единиц многоканального устройства. Занятый объем многоканального устройства уменьшается на число освобождаемых единиц. Оставшаяся емкость многоканального устройства увеличивается на ту же величину. Счетчик числа входов не изменяется. Недоступность многоканального устройства не влияет на блок LEAVE. Поле А блока LEAVE определяет номер или имя многоканального устройства. Операнд может быть именем, положительным целым или СЧА. Поле В - число освобождаемых единиц многоканального устройства. Операнд может быть именем, положительным целым или СЧА. Если это поле пусто, предполагается 1. Число освобождаемых единиц не должно превышать текущее содержимое многоканального устройства. Стандартные числовые атрибуты, связанные с описываемым оператором, те же, что и для ENTER. 4.3.8.4. Блоки GATE SNE, GATE SF, GATE SNF, GATE SE, GATE SV Блоки GATE имеют следующий формат: GATE < X> < A>, < B> Блоки GATE позволяют управлять движением сообщений в модели в соответствии со значением логических операторов, связанных с многоканальным устройством (в поле Х). К этим операторам относятся: - SNEj – многоканальное устройство j не пусто; - SEj – многоканальное устройство j пусто; - SNFj – многоканальное устройство j заполнено; - SFj – многоканальное устройство j не заполнено; - SNVj – многоканальное устройство j недоступно; - SVj – многоканальное устройство j доступно. Блок GATE может задержать сообщение на входе, если не задан альтернативный выход. Поле А определяет имя многоканального устройства, состояние которого проверяется. Операнд А может быть именем, положительным целым числом или СЧА. Поле В – альтернативный блок, если логический атрибут имеет значение " ложь". Операнд В может быть именем, положительным целым или СЧА. Если поле В определено, то оно должно содержать метку блока, допустимую для текущей модели. Очереди В GPSS/PC объекты типа " очередь" вводятся для сбора статистических данных. Статистика об очередях собирается в моменты входа сообщения в блок QUEUE (вход в очередь) или в блок DEPART (выход из очереди). С объектом " очередь" связаны два типа блоков: QUEUE, DEPART.
4.3.9.1. Блок QUEUE Формат записи блока QUEUE: QUEUE < A>, [< B> ] Блок QUEUE увеличивает длину очереди. В поле А задается номер или имя очереди, к длине которой добавляются единицы. Операнд может быть именем, положительным целым или СЧА. Поле В определяет число единиц, на которое увеличивается текущая длина очереди. Если поле В пусто, то прибавляется единица. Операнд может быть именем, положительным целым или СЧА. Стандартные числовые атрибуты, связанные с описываемым оператором, следующие: - Q – текущая длина очереди; - QА – средняя длина очереди; - QС – общее число входов в очередь; - QМ – максимальная длина очереди; - QТ – среднее время ожидания в очереди; - QХ – среднее время ожидания в очереди для сообщений с ненулевым временем задержки; - QZ – число входов в очередь с нулевым временем задержки. 4.3.9.2. Блок DEPART Блок DEPART имеет следующий формат: DEPART < A>, [< B> ] Блок DEPART служит для уменьшения длины очереди. В поле А задается номер или имя очереди, длину которой нужно уменьшить. Операнд может быть именем, положительным целым или СЧА. В поле В задается число единиц, на которое уменьшается длина очереди. Это число не должно превышать текущую длину очереди. Если поле В пусто, длина очереди уменьшается на единицу. Операнд может быть именем, положительным целым или СЧА. |
Последнее изменение этой страницы: 2017-04-13; Просмотров: 499; Нарушение авторского права страницы