Этот блок обычно используется для того, чтобы передать
входящие в него транзакты в блоки, не следующие по номеру за ним. Передача может
быть выполнена логически, статистически, условно и безусловно. Вид передачи
определяется мнемоническим обозначением, указанным в поле А блока TRANSFER. При
безусловной передаче указывается один следующий блок (путь), а при условной
передаче—два или больше путей. Выбор того или иного пути определяется режимом
работы блока TRANSFER. Поле В определяет первый (или единственный) из следующих
блоков. Если следующий блок поля В описан на следующей карте, то поле В может быть
оставлено пустым. Когда симулятор ПМДС встречает карту — описание блока
TRANSFER с пустым полем В, то он записывает в поле В этой карты номер следующего
блока.
Поле С определяет следующий блок и интерпретируется в соответствии с режимом
работы блока TRANSFER. Существуют различные режимы работы блока TRANSFER.
Если поле А блока TRANSFER пусто, то все транзакты, поступающие на этот блок,
будут передаваться в блок, номер которого указан в поле В. Например:
TRANSFER ,NEXT
Если в поле А блока TRANSFER стоит BOTH, то каждый транзакт, поступающий на
этот блок, проверяет два пути. Сначала проверяется блок, указанный в поле В, и если
транзакт не может войти в этот блок, он пытается войти в блок, указанный в поле С. Если
транзакт не может войти и в этот блок, он задерживается в блоке TRANSFER и повторяет
опрос блоков, указанных в полях В и С, при каждом изменении текущего времени в
модели, пока не находит выхода. Этот режим выбора существенно увеличивает время
работы, так как если оба выхода заблокированы, опрос их состояния производится очень
часто. Например:
TRANSFER BOTH„SAM
SEIZE 52
SAM SEIZE 84
(транзакт блока TRANSFER пытается войти в блок SEIZE; если соответствующее
устройство занято, то он направляется в блок SAM; если транзакт не может войти в блок
SAM, то он остается в данном блоке TRANSFER и повторяет описанные выше операции
при каждом изменении текущего времени).
Если в поле А стоит ALL, то транзакты, входящие в блок, могут опрашивать много
путей (блоков). Поле В определяет первый выбираемый блок, поле С — последний. Поле
D определяет индексную константу i. Эта константа дает пользователю возможность
опрашивать определенные блоки, находящиеся между теми, которые заданы в полях В и
С. Транзакт, вошедший в блок TRANSFER, далее пытается выйти через блок, указанный в
поле В, Если блок, указанный в поле В, занят, то транзакт пытается войти в блоки с
номерами Y + i, Y +2i,..., Z, где Y— номер блока, указанного в поле В, Z — номер блока,
указанного в поле С. При этом Z - Y + Мi где М — некоторое целое положительное число.
Если транзакт не может войти ни в один из этих блоков, он остается в блоке TRANSFER и
при изменении текущего времени повторяет все описанные выше операции. Если задан
режим ALL, пользователь должен проследить за тем, чтобы номера просматриваемых
блоков совпадали с номерами, присваиваемыми блокам симулятором GPSS. Например:
TRANSFER ALL,FIRST,LAST,3
FIRST SEIZE 1
ASSIGN 12,K1„PB
TRANSFER ,LAST+2
SEIZE 2
ASSIGN 12,K2,,PB
TRANSFER ,LAST+2
LAST SEIZE 3
(транзакт пытается войти в блок FIRST; если он получает отказ, что определяется типом
блока FIRST, то транзакт пытается войти в блок FIRST+3; если и в этом блоке будет отказ,
то транзакт пытается войти в блок FIRST+6 (LAST); если транзакт не смог войти ни в
один из трех блоков, он остается в блоке TRANSFER и программа (система) переходит к
обработке другого транзакта). При каждой попытке продвинуть транзакты, находящиеся в
блоке TRANSFER, все проверки, перечисленные выше, производятся сначала, как и в
режиме BOTH, поэтому время счета также может значительно возрасти.
Если в поле А стоит SIM, то выбирается один из двух возможных путей. Каждый
входящий в блок транзакт содержит информацию для принятия решения. В каждом
транзакте есть индикатор SIM, установленный в 0 или 1. Если значение индикатора SIM
равно 1, то транзакт будет послан в блок указанный в поле С, а индикатор SIM будет
установлен в 0. Если индикатор SIM равен 0, то транзакт может направляться по
выбранному для него пути. Если транзакт получает отказ при попытке войти в какой-либо
блок, этот индикатор устанавливается в 1, фиксируя тот факт, что некоторое условие не
выполняется. Если одновременно должны удовлетворяться несколько условий, каждый из
них может быть проверен, и если все они удовлетворяются, то индикатор SIM транзакта
остается равным 0. Если не выполняется хотя бы одно из условий, индикатор SIM
устанавливается в 1. В таких случаях блок, заданный в поле С, указывает блок, в котором
проверялось первое условие, и транзакт выполняет проверку условий, пока все они не
будут удовлетворяться одновременно. Блок ADVANCE также устанавливает индикатор
SIM в 0. Проверка состояний связана с блоками, которые могут задерживать транзакты.
Для проверки условий используется блок GATE, описанный ранее.
Существует режим проверки одновременного выполнения нескольких условий. В
приведенном ниже примере транзакты не могут перейти к блоку SEIZE, если устройства
1, 2 и 15 не будут одновременно свободны. При входе транзактов в блок TRANSFER
проверяется значение индикатора SIM этого транзакта. Если транзакт был задержан в
каком-либо из блоков GATE, его индикатор установлен в 1. Когда индикатор проверяется
в блоке TRANSFER, оказывается, что транзакт был задержан, и он отсылается к тому
блоку, где производилась первая проверка (CPU), и вся последовательность проверок
повторяется. При проверке (т. е. при прохождении блока TRANSFER) с индикатором SIM,
индикатор всегда сбрасывается в 0, поэтому если транзакт повторяет последовательность
проверок в тот же момент времени, т. е. без задержки, то после второй попытки он
пройдет, так как индикатор SIM устанавливается в 0 при первой попытке, Например:
CPU GATE NU 1
GATE NU 2
САТЕ NU 15
TRANSFER SIM,,CPU
SEIZE 1,5
Рассмотрим статистический режим выбора. Если в поле А блока TRANSFER записана
десятичная дробь, то производится случайный выбор между блоками, описанными в поле
В и в поле С. Вероятность выбора блока С задается дробью. Например:
TRANSFER, 370,THIS,THAT
(т. е. режим выбора задан числом 370, при этом 37% всех транзактов, поступивших на
блок TRANSFER, будет передаваться на блок поля С, а 63% — на блок поля В).
Для каждого отдельного транзакта, естественно, выбирается только один из двух
путей. Выбор производится для каждого транзакта только один раз, в момент входа в блок
TRANSFER. Кроме этого, пользователю предоставлены еще четыре режима выбора:
PICK, SBR, FN и Р. |