Все примеры моделей, рассматривавшиеся выше, пока еще не явля-
ются моделями систем массового обслуживания, так как в них не учте-
на основная особенность СМО: конкуренция заявок на использование
некоторых ограниченных ресурсов системы. Все транзакты, входящие в
эти модели через блок GENERATE, немедленно получают возможность
"обслуживания" в блоке ADVANCE, который никогда не "отказывает"
транзактам во входе, сколько бы транзактов в нем не находилось.
Для моделирования ограниченных ресурсов СМО в модели должны
присутствовать аппаратные объекты: одноканальные или многоканальные
устройства. Одноканальные устройства создаются в текущей модели при
использовании блоков SEIZE (занять) и RELEASE (освободить), име-
ющих следующий формат:
Имя SEIZE A
Имя RELEASE A
В поле A указывается номер или имя устройства. Если транзакт
входит в блок SEIZE, то устройство, указанное в поле A, становится
занятым и остаётся в этом состоянии до тех пор, пока этот же тран-
закт не пройдёт соответствующий блок RELEASE, освобождая уст-
ройство. Если устройство, указанное в поле A блока SEIZE, уже заня-
то каким-либо транзактом, то никакой другой транзакт не может войти
в этот блок и остаётся в предыдущем блоке. Транзакты, задержанные
(заблокированные) перед блоком SEIZE, остаются в списке текущих со-
бытий и при освобождении устройства обрабатываются с учетом приори-
тетов и очередности поступления.
Каждое устройство имеет следующие СЧА: F - состояние уст-
ройства (0 - свободно,1 - занято); FR - коэффициент использования в
долях 1000; FC - число занятий устройства; FT - целая часть средне-
го времени занятия устройства.
Воспользуемся блоками SEIZE и RELEASE для моделирования одно-
|
канальной СМО с ожиданием (рис. 7). Теперь блок ADVANCE находится
между блоками SEIZE и RELEASE, моделирующими занятие и освобождение
устройства с именем SYSTEM, и поэтому в нем может находиться только
один транзакт. Транзакты, выходящие из блока GENERATE в моменты за-
нятости устройства, не смогут войти в блок SEIZE и будут оставаться
в блоке GENERATE, образуя очередь в списке текущих событий.
EXP FUNCTION RN1,C24
0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
GENERATE 100,FN$EXP
SEIZE SYSTEM
ADVANCE 80,FN$EXP
RELEASE SYSTEM
TERMINATE 1
Рис. 7
Для моделирования захвата (прерывания) одноканального уст-
ройства вместо блоков SEIZE и RELEASE используются соответственно
блоки PREEMPT (захватить) и RETURN (вернуть). Блок PREEMPT имеет
следующий формат:
Имя PREEMPT A,B,C,D,E
В поле A указывается имя или номер устройства, подлежащего
захвату. В поле B кодируется условие захвата. Если это поле пусто,
то захват возникает, если обслуживаемый транзакт сам не является
захватчиком. Если же в поле B записан операнд PR, то захват возни-
кает, если приоритет транзакта-захватчика выше, чем приоритет
обслуживаемого транзакта.
Поля C, D и E определяют поведение транзактов, обслуживание
которых было прервано. Поле C указывает имя блока, в который будет
направлен прерванный транзакт. В поле D может быть указан номер или
имя параметра прерванного транзакта, в который записывается время,
оставшееся этому транзакту до завершения обслуживания на уст-
ройстве. При отсутствии операнда в поле E прерванный транзакт сох-
|
раняет право на автоматическое восстановление на устройстве по
окончании захвата. Если же в поле E указан операнд RE, то транзакт
теряет такое право.
Блок RETURN имеет единственный операнд A, содержащий имя или
номер устройства, подлежащего освобождению от захвата.
Блоки PREEMPT и RETURN могут быть использованы для моделирова-
ния СМО с абсолютными приоритетами. В простейших случаях, при одном
уровне захвата, в блоке PREEMPT используется единственный операнд
A. При этом прерванный транзакт переводится симулятором из списка
будущих событий в так называемый список прерываний устройства, а
по окончании захвата устройства возвращается в список будущих собы-
тий с предварительно вычисленным временем занятия устройства для
продолжения обслуживания.
Для создания в модели многоканальных устройств (МКУ) они долж-
ны быть предварительно определены с помощью операторов определения
STORAGE (память), имеющих следующий формат:
Имя STORAGE A
Здесь имя - имя МКУ, используемое для ссылок на него; A – емко-
cть (количество каналов обслуживания) МКУ, задаваемая константой.
Для занятия и освобождения каналов обслуживания МКУ использу-
ется пара блоков ENTER (войти) и LEAVE (покинуть), имеющих следую-
щий формат:
Имя ENTER A,B
Имя LEAVE A,B
В поле A указывается номер или имя МКУ, в поле B число кана-
лов МКУ, занимаемых при входе в блок ENTER или освобождаемых при
входе в блок LEAVE. Обычно поле B пусто, и в этом случае по умолча-
нию занимается или освобождается один канал.
|
При входе транзакта в блок ENTER текущее содержимое МКУ увели-
чивается на число единиц, указанное в поле B. Если свободная
емкость МКУ меньше значения поля B, то транзакт не может войти в
блок ENTER и остается в предыдущем блоке, образуя очередь в списке
текущих событий.
При входе транзакта в блок LEAVE текущее содержимое МКУ умень-
шается на число единиц, указанное в поле B. Не обязательно освобож-
дается такое же число каналов МКУ, какое занималось при входе дан-
ного транзакта в блок ENTER, однако текущее содержимое МКУ не долж-
но становиться отрицательным.
Многоканальные устройства имеют следующие СЧА: S - текущее со-
держимое МКУ; R - свободная емкость МКУ; SR - коэффициент использо-
вания в долях 1000; SA - целая часть среднего содержимого МКУ; SM -
максимальное содержимое МКУ; SC - число занятий МКУ; ST - целая
часть среднего времени занятия МКУ.
Воспользуемся блоками ENTER-LEAVE и оператором STORAGE для мо-
делирования двухканальной СМО с ожиданием (рис. 8). Если текущее
содержимое МКУ с именем STO2 меньше 2, т.е. в блоке ADVANCE нахо-
дится один или ни одного транзакта, то очередной транзакт, поступа-
ющий в модель через блок GENERATE, может войти в блок ENTER и затем
в блок ADVANCE. Если же текущее содержимое МКУ равно 2, то очеред-
ной транзакт остается в блоке GENERATE, образуя очередь в списке
текущих событий. По истечении задержки одного из двух обслуживаемых
транзактов в блоке ADVANCE и после входа его в блок LEAVE первый из
заблокированных транзактов сможет войти в блок ENTER.
STO2 STORAGE 2
EXP FUNCTION RN1,C24
0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
GENERATE 100,FN$EXP
ENTER STO2
ADVANCE 160,FN$EXP
LEAVE STO2
TERMINATE 1
Рис. 8