logo
Обработка данных / Томашевский_Имитационное моделирование в среде GPSS_2003

4.23. Списки пользователей

Блок LINK (ВНЕСТИ В СПИСОК). БлокLINKсобирает транзакты изCTCи помещает их в СП. Таким образом, интерпретатор их E просматривает и не перемещает по блокам модели до тех пор, пока пользователь не возвратит их в модель. Формат блока:

LINK A,B[,C]

Операнд А задает номер или имя СП, в который будет помещен транзакт. Операнд А может быть положительным целым, именем,CЧA,CЧA*CЧA. ОперандВзадает алгоритм упорядочивания СП.

Операнд Вмо­жет бытьLIFO,FIFO, целым, СЧА,CЧA*CЧA.

Допустимые значения операнда В:

FIFOвошедший транзакт помещается в конец СП;

LIFOвошедший транзакт помещается в начало СП;

номер параметра – входящие в СП транзакты располагаются в соответствии со значением указанного параметра;

PR– приоритет транзакта (транзакт помещается в список в соответствииcприоритетом);

M1– время нахождения транзакта в модели;

Операнд Cуказывает альтернативный выход, который используется при описании разных ситуаций, возникающих в очередях. ОперандCможет быть именем, положительным целым, СЧА,CЧA*CЧA.

Если операнд Cне задан, индикатор, связанныйcзаданным СП, устанавливается в положение «1». Это приводит к тому, что все тран­закты, безусловно входящие в блок, заносятся в СП, определенный операндомА, в порядке, который задан операндомВ.

Если операнд Cзадан, проверяется индикатор СП. Если индика­тор списка установлен в положение «1», вошедший транзакт, зано­сится в СП в порядке, заданном операндомВ. Если же индикатор списка установлен в положение «0», он переводится в положение «3», и вошедший транзакт перемещается к блоку, заданному в опе­рандеC.

Пример 4.53

LINK LIST,F IFO

В этом примере транзакт, вошедший в блок, помещается в ко­нец списка cименемLIST.

Стандартные числовые атрибуты, связанные c блоком LINK:

СА<номер списка>, СА$<имя списка> – среднее число транзактов в СП;

CC<номер списка>, СС$<имя списка> – общее число транзактов в СП;

CH<номер списка>, СН$<имя списка> – – текущее число транзата в СП;

CM<номер списка>, СМ$<имя списка> – максимальное число транзактов в СП;

CT<номер списка>, СТ$<имя списка> – среднее время пребывания транзакта в СП.

Блок UNLINK (ВЫВЕСТИ ИЗ СПИСКА). БлокUNLINK уда­ляет транзакты из СП. После этого интерпретаторGPSSвозобновляет их движение по модели.

Формат блока:

UNLINK (X| A,B,[C|,[D],[E],[F]

Операторы отношения, которые записываются во вспомога­тельном операнде X, определяют, какое условие (отношение) будет рассматриваться. Если этот оператор не задан, предполагается отно­шение равенстваE.

Операторы отношения могут быть такими:

G (больше) – отношение истинно, если значение параметра, за­данного в операндеD, больше значения, заданного в операндеE;

GE (больше или равно) – отношение истинно, если значение параметра, заданного в операндеD,больше значения, заданного в операндеE, или равно ему;

L (меньше) – отношение истинно, если значение параметра, за­данного в операндеD,меньше значения, заданного в операндеE;

LE (меньше или равно) – отношение истинно, если значение параметра, заданного в операндеD, меньше значения, заданного в операндеE, или равно ему;

E (равно) – отношение истинно, если значение параметра, за­данного в операнде D, равно значению, заданному в операндеE;

NE(не равно) – отношение истинно, если значение параметра, заданного в операндеD, не равно значению, заданному в операндеЁ.

Операнд А задает СП, из которого удаляются один или несколь­ко транзактов. Операнд А может быть именем, положительным це­лым, СЧА илиCЧA*CЧA.

В операнде Вуказывается номер блока, к которому переходят удаляемые из списка транзакты. ОперандВможет быть именем, по­ложительным целым, СЧА,CЧA*CЧA. ОперандCзадает число транзактов, удаляемых из СП (счетчик удалений). ОперандCможет быть именем, положительным целым, СЧА,CЧA*CЧAили «ALL» (означает удаление всех транзактов).

Операнд Dможет быть именем, целым, СЧА,CЧA*CЧA, ; «ВАСК». Действия, выполняемые при вхождении транзакта в блок ,UNLINK, зависят от того, на что ссылается операндD. В операндеDмогут быть указаны номер параметра, булева переменная или слово «ВАСК».

Номер параметра. Если операнд E пропущен, значение задан­ного параметра вошедшего транзакта сравнивается со значением этого же параметра транзактов СП. Если E не пропущен, значение заданного параметра транзактов СП сравнивается со значением СЧА из операндаE. В обоих случаях транзакты, удовлетворяющие заданному отношению, будут удалены из списка и направлены в блок, указан­ный в операндеВ.

Булева переменная BVjвычисляется отдельно для каждого транзакта из СП. Если для транзакта значениеBVj=l, то он удаляется из СП (количество удаляемых транзакгов не может превышать значения операндаC). ЕслиBVj=0 для всех транзактов списка, то вошедший транзакт пытается переместиться в блок, заданный в операн­деF. Если операндFпропущен, транзакт пытается перейти в следующий по номеру блок.

Если в операнде Dзадана булева переменная, операнд E должен быть пустым. Если булева переменнаяBVjимеет ссылку на какой-либо параметр, то эта ссылка относится к параметрам транзактов из списка, А не к входящему в блокUNLINKтранзакту.

Слово «ВАСК». Из указанного списка, начинаяcего конца, бу­дет исключено столько транзактов, сколько задано операндомC. Операнд E в этом случае должен быть пустым.

Операнд E содержит СЧА, значение которого сравнивается со значением параметра транзактов СП (номер параметра указан в опе­рандеD). Операнд E может быть именем, целым, СЧА,CЧA*CЧA.

Операнд Fзадает номер следующего блока длятого транзакта, который входит в блокUNLINKв случаях, когда соответствующий СП пустой или не выполнено заданное отношение, или же указанная в операндеDбулева переменная равна нулю для всех транзактов спи­ска (т.е. в случае, когда из СП нельзя ничего удалить). ОперандFможет быть именем, положительным целым, СЧА,CЧA*CЧA.

Пример 4.54

UNLINK LIST,FORW,1

Первый транзакт из СП cименемLISTпомещается в блокcметкойFORW. Он заносится вCTCпосле транзактовcтаким же приоритетом. Транзакт, вошедший в блокUNLINK, переходит в следующий блок.

Рассмотрим последовательность операций, выполняемых при входе транзакта в блок UNLINK. В зависимости от того, какие из операндовA-FблокаUNLINKзаполнены, можно выделить восемь основных вариантов.

Вариант 1.ОперандыА, В, Cзаданы, операндыD, E, Fне зада­ны. Вычисляются значения операнда А для определения номера (имени) СП. Проверяется, есть ли в списке транзакты. Если их нет, соответствующий этому списку индикатор устанавливается в «0», А транзакт, вошедший в блок, переходит к следующему по номеру блоку.

Если список не пуст, вычисляется значение операнда C(счетчи­ка удалений), определяющего число транзактов, удаляемых из спи­ска. Транзакты удаляются, начинаяcпервого в списке до тех пор, по­ка значение счетчика удалений не станет равным нулю или пока не будут исчерпаны все транзакты из списка. Удаленные из СП транзак­ты будут помещены вCTCи направлены к блоку, номер которого указан в операндеВ. Транзакт, вошедший в блокUNLINK, переме­щается к следующему по номеру блоку.

Вариант 2.ОперандыА, В, CиFзаполнены, операндыDи E не заданы. Этот вариант аналогичен варианту 1, за исключением случая, когда указанный СП пуст. При этом индикатор списка устанавливается в «0», А транзакт, вошедший в блокUNLINK, перемещается к блоку, указанному в операндеF, А не к следующему по номеру блоку.

Вариант 3.ОперандыА, В, CиDзаполнены, операнды E иFне заполнены, в операндеDзадано значение параметраPj. Этот вариант гакже аналогичен варианту 1. Однако из списка удаляются только те фанзакты, у которых значение параметраPjравно значению этого же параметраPjтранзакта, вошедшего в блокUNLINK. Транзакты из списка удаляются до тех пор, пока значение счетчика удалений (определяемого операндомC) не станет равно нулю или пока не будут просмотрены все транзакты из списка. Все удаленные из СП транзакты перемешаются к блоку, указанному в операндеВблокаUNLINK. Транзакт, вошедший в блокUNLINK, перемещается к сле­дующему по номеру блоку.

Вариант 4. ОперандыА, В, CиDзаполнены, операнды E иFне заданы, А в операндеDзаписано слово «ВАСК». Этот вариант анало­гичен варианту 1, за исключением того, что транзакты удаляются, на­чинаяcконца списка.

Вариант 5. ОперандыА, В, CиD – заполнены, операнды E иF – пусты, в операндеDзадана булева переменнаяBVj. Этот вариант аналогичен варианту 3, за исключением того, чтоBVjвычисляется отдельно для каждого транзакта СП. Из СП удаляются только тран­закты, для которыхBVj=l.

1. Если BVj имеет ссылки на какой-либо параметр, то эти ссылки относятся к параметрам, связаннымcтранзактами из СП, А неcвошедшим транзактом.

2. В случаях, когда в операнде DблокаUNLINK записана перемен­наяBVjили «ВАСК», операнд E должен быть не заполненным, ина­че – ошибка.

Вариант 6. ОперандыА, В, C, DиFзаполнены, операнд E не заполнен. Этот вариант аналогичен варианту 3, за исключением тех случаев, когда или заданный СП пуст (CHj=0), или заданное отноше­ние не выполняется ни для одного транзакта списка, илиBVj=0 для всех транзактов СП. В таких случаях транзакт, вошедший в блокUNLINK, перемещается к блоку, номер которого задан в операндеF, А не к следующему по номеру блоку. Индикатор списка устанавливается в «0» только в том случае, если список пуст.

Вариант 7.ОперандыА, В, C, Dи E заполнены, операндFне заполнен.

Число удаляемых транзактов определяется значением операнда C. Номер блока, к которому направляются удаленные транзакты, оп­ределяется операндомВ. Транзакты, для которых значениеPj(опе­рандD) равно СЧА из операндаE, удаляются из списка. Транзакты просматриваются и удаляются (если это возможно), начинаяcначала списка. Удаление продолжается до тех пор, пока значение счетчика удалений (операндC) не станет равным нулю или пока из СП не будут удалены все транзакты. Транзакт, вошедший в блокUNLINК, перемещается к следующему по номеру блоку.

Вариант 8.ОперандыА, В, C, DиFзаполнены. Этот вариант аналогичен варианту 5, за исключением тех случаев, когда СП пуст (то естьCHj=0) или заданное отношение не выполняется ни для од­ного из транзактов списка. Транзакт, вошедший в блокUNLINK, пе­реходит к блоку, заданному в операндеF, А не к следующему по но­меру блоку. Если заданное отношение выполняется для какого-нибудь транзакта из списка, транзакт, вошедший в блок, перемещает­ся к следующему по номеру блоку. Если СП пустой, индикатор спи­ска устанавливается в «0».

Пример4.55[13]

Рассмотрим модель обслуживания cалгоритмомFIFOвыбора из очереди:

Транзакты, выходящие из блока GENERATE, поступают в блокQUEUE. После внесения соответствующих изменений в статистику, собираемую по данной очереди, транзакт входит в блокLINK. Так как в блокеLINK существует альтернативный выход, проверяется состояние индикатора спискаCHAIN (имя которого определятся операндом А блокаLINK). Если индикатор этого списка установлен в «0», транзакт немедленно устанавливает его в «1» и переходит к альтернативному блоку, то есть в данной модели – к блокуSEIZE. Если индикатор списка установлен в «1», то транзакт, входящий в блокLINK, без дальнейших проверок заносится в СПCHAIN. Так как в операндеВзадан алгоритмFIFO, транзакт помещается в юнец этого СП.

Отметим, что транзакты, занесенные в СП, не проходят даль­нейшей обработки до тех пор, пока они не будут удалены из списка другими транзактами, входящими в блок UNLINK. После удаления из СП транзакт поступает к блоку, указанному в операндеВблокаUNLINK.

Когда транзакт входит в блок SEIZE, проводится корректировка статистики, связаннойcзаданным в этом блоке устройством. Потом транзакт переходит к блокуDEPART, где корректируется статистика очереди, А потом переходит к блокуADVANCE, в котором он остает­ся на протяжении времени, определяемом операндами блокаAD­VANCE.

После выхода из блока ADVANCEтранзакт входит в блокRELEASE. Освобождается указанное в блоке устройство и коррек­тируется связаннаяcним статистика. После этого транзакт переме­щается к блокуUNLINK.

При перемещении транзакта к блоку UNLINKпросматривается СП, имя которого задано в операндеА:

1) если СП пуст, то есть CH$CHAIN = 0, то индикатор списка устанавливается в «0» и транзакт переходит к следующему по номеру блоку, то есть кTERMINATE;

2) если СП не пуст, то есть CH$CHAIN ≠ 0, то первый транзакт этого списка удаляется, помещается вCTCи направляется к блоку, указанному в операндеВблокаUNLINK(в данной модели это блокSEIZE, помеченный меткойCAN).Aтранзакт, вошедший в блокUNLINK, перемещается к блокуTERMINATE.

Рассмотренная модель не сложна, но хорошо иллюстрирует не­сколько важных моментов:

1) в этой системе активными могут быть только те транзакты, которые выходят из блока GENERATE, или тот транзакт, который в данный момент занимает устройство. Все остальные транзакты нахо­дятся в СПCHAIN;

2) так как все задержанные транзакты, то есть транзакты, нахо­дящиеся в очереди к устройству FC_1, будут помещены в СПCHAIN, интерпретатор не будет тратить время на изменение индика­торов задержки всех этих транзактов при каждом изменении положе­ния устройства. Экономия времени зависит от длины очереди: чем длиннее очередь, тем больше времени будет сэкономлено благодаря блокамLINKUNLINK, которые используются для управления оче­редями к разным .объектам;

3) пользователь имеет возможность динамически формировать свои списки независимо от списков задержки, которые поддержива­ются системой GPSS;

4) использование блоков LINK-UNLINK дает возможность синхронизировать движение разных транзактов в модели, например, задерживать в списке транзакты до тех пор, пока какой-либо другой транзакт не выведет их из спискаcпомощью блокаUNLINK.

Пример 4.56

Рассмотрим работу мультиплексора (см. главу 5), который под­ключен к высокоскоростному каналу (BK) связи и работает в режиме разделения времениcчетырьмя низкоскоростными каналами (HK), опрашивая их циклически. На один опрос каждого изHKмультип­лексор тратит 50 мс, время переключения междуHK– 10 мс. Если в опрашиваемомHKесть сообщение, оно передается поBKв течение 500+60 мс. За один опрос передается одно сообщение. Время возник­новения сообщений в четырех неравномерно распределено в интер­вале 1500±500 мс, и сообщения равновероятно могут появляться на любом канале.

Необходимо определить загрузку BKпри передаче по нему 1000 сообщений.

Программа:

Пример 4.57

На вход CMOпоступает пуассоновский поток заявок со средним временем55 c, которые последовательно обслуживаются двумя уст­ройствами. Порядок выбора требований из очереди для обслужива­ния первым и вторым устройствами –LIFO. Заявки покидают систе­му не обслужившись, если на момент входа заявки в первую очередь в ней есть больше четырех заявок или время нахождения во второй очереди превышает 40c. Время обслуживания заявки первым устрой­ством составляет 30c, вторым – 20 ±5 c. Необходимо смоделировать прохождение черезCMO100 заявок.

Программа:

В модели значения индикаторов списков пользователя позволя­ют определить состояние устройств обслуживания. Если в момент входа в блок LINK индикатор списка включен («1»), это означает, что соответствующее устройство занято и транзакт становится в на­чало спискаSP1 илиSP2 (LIFO), индикатор остается включенным. Если индикатор списка выключен («0» – соответствующее устройст­во свободно) – он включается, А транзакт переходит на обслуживание в блокMUS1 илиMUS2. В параметреcименемTOCH транзакта запоминается момент времени, к которому транзакт должен попасть на обслуживание устройствомUSTR2, в противном случае транзакт будет удален из модели блокомUNLINK (строка 170).

Пример 4.58

Рассмотрим модель эвакуации потерпевших и раненых во время боевых действий. Потерпевшие эвакуируются 5 – и 13-местными ав­томобилями. Если на пункте эвакуации собирается раненых больше чем мест в автомобиле, то вывозится столько раненых, сколько есть свободных мест. Иначе вывозятся все. Известными являются функ­ции времени прибытия раненых к медицинскому пункту (МП) полка. В каждом полку есть четыре МП. Раненые эвакуируются в военно-полевой передвижной госпиталь (ВППГ), где им предоставляется не­обходимая помощь.

Фрагмент программы: