Блоки, связанные с аппаратными объектами

Пример модели на рис. 3 пока еще не является моделью СМО, так как в ней не учтена характерная особенность таких систем: конкуренция заявок на использование некоторых ограниченных ресурсов, например, ограниченного числа обслуживающих приборов. Все транзакты, входящие в модель (рис. 3) через блок GENERATE, немедленно получают возможность “обслуживания” в блоке ADVANCE, который никогда не “отказывает” транзактам во входе, сколько бы транзактов в нем не находилось. Можно считать, что данная модель является моделью СМО вида U/U/∞, в которой любая входящая заявка находит свободный прибор [4].

Для моделирования ограниченных ресурсов СМО в модели должны присутствовать аппаратные объекты: одноканальные или многоканальные устройства. Одноканальные устройствасоздаются в модели с помощью взаимодополняющих блоков SEIZE (занять) и RELEASE (освободить), имеющих следующий формат:

имя SEIZE A

имя RELEASE A

Обязательный операнд A задает номер или уникальное имя устройства. Значения операнда А в обоих блоках должны совпадать. Когда транзакт входит в блок SEIZE интерпретатором вызывается соответствующая подпрограмма, которая переводит устройство, заданное операндом A, из состояния “свободно” в состояние “занято”, имитируя, таким образом, событие “занятие прибора” в СМО. Если устройство уже занято каким-либо транзактом, то никакой другой транзакт не может войти в блок SEIZE и такой транзакт блокируется в том блоке, в котором находится. Транзакты, задержанные (заблокированные) перед блоком SEIZE, остаются в списке ТС и при освобождении устройства обрабатываются с учетом приоритетов и очередности поступления в список.

Устройство остаётся в состоянии “занято” до тех пор, пока тот самый транзакт, который занял его (входя в блок SEIZE) не войдет в соответствующий блок RELEASE и не переведет устройство из состояния “занято” в состояние “свободно”, имитируя событие “освобождение прибора” в СМО. Блок RELEASE не запрещает транзактами во входе, но в данный блок без ошибки может войти только тот транзакт, который до этого вошел в соответствующий блок SEIZE.

Блоки SEIZE и RELEASE в ходе моделирования собирают статистику, необходимую для определения следующих характеристик устройства:

1) количество занятий устройства;

2) коэффициент использования устройства (загрузка прибора);

3) среднее время на одно занятие устройства (время обслуживания) и т.д.

Каждое устройство имеет следующие СЧА: F – состояние устройства (0 – свободно, 1 – занято); FR – коэффициент использования устройства в долях 1000; FC – счетчик входов устройства; FT – целая часть среднего времени занятия устройства.

Воспользуемся блоками SEIZE и RELEASE для моделирования одноканальной СМО (рис. 4). Теперь блок ADVANCE находится между блоками SEIZE и RELEASE, моделирующими занятие и освобождение устройства с именем PRIBOR, и поэтому в нем может находиться только один транзакт. Транзакт, выходящий из блока GENERATE в момент, когда устройство занято, не сможет войти в блок SEIZE, и будет оставаться в блоке GENERATE, а также в списке ТС.

GENERATE 70,20

SEIZE PRIBOR

ADVANCE 50,30

RELEASE PRIBOR

TERMINATE

Рис. 4.

Однако в этой модели будет нарушен закон генерации транзактов, поскольку не обеспечивается беспрепятственный выход транзактов из блока GENERATE. Для соблюдения равномерного закона поступления транзактов, необходимо между блоками GENERATE и SEIZE поставить, например, безотказный блок ADVANCE с нулевыми операндами А и В (рис.5). Такой блок, не нарушая логику функционирования модели, обеспечит беспрепятственный выход транзактов, и теперь в нем будут находиться заблокированные блоком SEIZE транзакты.

GENERATE 70,20

ADVANCE 0,0

SEIZE PRIBOR

ADVANC 50,30

RELEASE PRIBOR

TERMINATE

Рис. 5.

Очень часто СМО состоят из двух или более одинаковых приборов, обслуживающих заявки параллельно. Для моделирования таких систем используются многоканальные устройства (МКУ), в которых количество каналов (емкость МКУ) равно количеству обслуживающих приборов в СМО.

Для создания в модели МКУоно должно быть предварительно описано с помощью оператора определения МКУ STORAGE (память), который имеет следующий формат:

имя STORAGE A

Здесь имя – уникальное имя МКУ, используемое для его однозначной идентификации, а также для ссылок на него. Операнд A задает емкость МКУ в виде целой положительной константы.

Для занятия и освобождения каналов обслуживания МКУ используется пара взаимодополняющих блоков ENTER (войти) и LEAVE (покинуть), имеющих следующий формат:

имя ENTER A,B

имя LEAVE A,B

В поле A в обоих блоках обязательно указывается имя МКУ, которое должно совпадать с именем, присвоенным данному МКУ в соответствующем операторе STORAGE. Операнд В задает число каналов МКУ, занимаемых одним транзактом при его входе в блок ENTER и освобождаемых когда он входит в блок LEAVE. Обычно операнд B не задается и по умолчанию его значение равно 1.

При входе транзакта в блок ENTER интерпретатор GPSS/PC вызывает соответствующую подпрограмму, которая выполняет следующие действия:

1) счетчик входов МКУ увеличивает на В;

2) текущее содержимое МКУ увеличивает на В;

3) доступная емкость МКУ уменьшает на В.

Если свободная емкость МКУ меньше B, то транзакт не может войти в блок ENTER, и он остается в текущем блоке, образуя очередь в списке ТС.

Когда транзакт входит в блок LEAVE интерпретатор:

1) увеличивает счетчик входов блока на В;

2) уменьшает текущее содержимое МКУ B;

3) увеличивает доступная емкость на В.

Блоки ENTER и LEAVE в ходе моделирования собирают статистику для определения следующих характеристик функционирования многоканального устройства (см. Приложение II):

1) количество занятий устройства;

2) коэффициент использования устройства (загрузка МКУ);

3) наименьшее и наибольшее количество занятых каналов МКУ;

4) среднее количество занятых каналов и т.д.

Многоканальные устройства имеют следующие СЧА: S – текущее содержимое МКУ; R – свободная емкость МКУ; R – коэффициент использования в долях 1000; SA – целая часть среднего содержимого МКУ; SM– максимальное содержимое МКУ; SC – счетчик входов МКУ; ST – целая часть среднего времени занятия МКУ.

Воспользуемся блоками ENTER, LEAVE и оператором STORAGE для моделирования трехканальной СМО (рис. 6). Очередной транзакт может войти в блок ENTER, а затем и в блок ADVANCE 50,30, если текущее содержимое МКУ с именем MKS3 меньше 3 (в блоке ADVANCE 50,30 находится меньше трех транзактов). В противном случае транзакт остается в блоке ADVANCE 0,0, который имеет такое же назначение, что и в модели на рис. 5. Только по истечении времени задержки в блоке ADVANCE 50,30 одного из трех находящихся там транзактов и после входа такого транзакта в блок LEAVE первый из заблокированных транзактов сможет войти в блок ENTER.

MKS3 STORAGE 3

GENERATE 70,20

ADVANCE 0,0

ENTER MKS3

ADVANCE 50,30

LEAVE MKS3

TERMINATE

Рис. 6.

В блоке GENERATE, как известно, операнд Е задает уровень приоритета транзактов, входящих в модель через данный блок, и чем больше значение Е, тем выше уровень их приоритета. Такой приоритет можно отнести к классу относительных приоритетов. Однако в СМО кроме относительного предусматривается и абсолютный приоритет, когда высокоприоритетная заявка прерывает обслуживание низкоприоритетной.

В GPSS/PC понятию “прерывание обслуживания заявки” соответствует понятие “захватить транзакт”, хотя захватывается не транзакт, а обслуживающее устройство. Транзакт, который захватывает устройство, называется захватчиком, а транзакт, обслуживание которого при этом прерывается, называется захваченным транзактом.

Для захвата одноканального устройства (с целью моделирования СМО с абсолютными приоритетами) вместо блоков SEIZE и RELEASE используются соответственно блоки PREEMPT (захватить) и RETURN (вернуть). Транзакт может захватить устройство, только войдя в блок PREEMPT, имеющий следующий формат:

имя PREEMPT A,B,C,D,E

Обязательный операнд A задает имя или номер устройства, подлежащего захвату. В поле B задается условие, при котором возможен захват. Если операнд В не задан, то захват происходит, если обслуживаемый транзакт сам не является захватчиком. При этом уровни приоритетов транзактов не имеют значения. Очевидно, в этом случае в модели может быть только один захваченный транзакт.

Если же в поле B записан операнд PR, то захват возможен только в том случае, когда возможный захватчик имеет более высокий, чем у обслуживаемого транзакта приоритет, независимо от того захватчик ли он или нет.

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

Необязательные операнды C, D и E определяют поведение транзактов, обслуживание которых было прервано. Поле C указывает имя блока, в который будет направлен прерванный транзакт. В поле D может быть указан номер или имя параметра прерванного транзакта, в который записывается время его дообслуживания в устройстве. При отсутствии операнда в поле E прерванный транзакт сохраняет право на автоматическое восстановление на устройстве по окончании захвата. Если же в поле E указан операнд RE, то транзакт теряет такое право.

Транзакт, захвативший устройство, может освободить его (вернуть захваченному транзакту) только войдя в блок RETURN, имеющий следующий формат:

имя RETURN А

Единственный обязательный операнд A данного блока задает имя или номер устройства, подлежащего освобождению от захвата, и его значение должно совпадать с содержимым поля А соответствующего блока PREEMPT.

Следует отметить, что в GPSS/PC не предусмотрена возможность захвата обслуживающих каналов в МКУ. В этом состоит отличие между одноканальным и многоканальным (емкостью 1) устройствами.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: