Для изменения маршрута движения транзактов в GPSS используется блок TRANSFER (передать). Рассмотрим три основных режима работы блока TRANSFER.
Блок TRANSFER в р е ж и м е б е з у с л о в н о й п е р е д а ч и имеет следующий формат записи:
TRANSFER,B,
где В – позиция блока, в которую должен перейти транзакт (номер или метка блока). Операнд А не используется.
Блок TRANSFER в с т а т и с т и ч е с к о м р е ж и м е осуществляет передачу транзакта в один из двух блоков случайным образом. Формат записи блока TRANSFER в этом случае такой:
TRANSFER A,[B],C,
где А – вероятность передачи транзакта в блок С, задаваемая в долях тысячи;
В – позиция блока, в которую должен перейти транзакт с вероятностью (1 – А), по умолчанию – следующий блок;
C – позиция блока, в которую должен перейти транзакт с вероятностью А.
При задании вероятности (операнд А) используется не более трех цифр, первый символ записи – «.» (десятичная точка), если используется действительное число, оно должно быть в пределах от 0 до 1,0. Если операнд положительное целое число, то вероятность интерпретируется в долях тысячи.
|
|
П р и м е р использования блока TRANSFER в статистическом режиме:
TRANSFER.233,LUNIT1,LUNIT2
LUNIT1 SEIZE UNIT1
…
LUNIT2 QUEUE QUNIT2.
Транзакт переходит в блок c меткой LUNIT1 с частотой 0,767 и в блок c меткой LUNIT2 – c частотой 0,233.
Блок TRANSFER – в р е ж и м е BOTH. Входящий транзакт сначала пытается перейти к блоку, указанному в операнде В. Если это сделать не удается, то транзакт пытается перейти в блок, указанный в операнде C. Если транзакт не сможет перейти ни ктому, ни к другому блоку, то он остается в блоке TRANSFER и при каждом просмотре списка текущих событий будет повторять в том же порядке попытки перехода до тех пор, пока не сможет выйти из блока TRANSFER. В данном случае блок TRANSFER имеет следующий формат:
TRANSFER BOTH,В,С
П р и м е р использования блока TRANSFER в режиме BOTH [4]:
TRANSFER BOTH, LL1, LL2
LL1 SEIZE UN1
…
LL2 SEIZE UN2
…
Первоначально транзакт пытается перейти в блок c меткой LL1. В случае занятости устройства UN1, транзакт пытается войти в блок c меткой LL2. Если транзакт не может войти и в этот блок (устройство UN2 также занято), то он остается в списке текущих событий и повторяет эти попытки при каждом просмотре списка до тех пор, пока не выйдет из блока TRANSFER.