Моделирование систем / lec9
.pdfПрерывания
Ситуация, когда очередной транзакт должен занять одноканальное устройство, прервав обслуживание предыдущего транзакта, называется «захватом» устройства и моделируется оператором PREEMPT (ЗАХВАТИТЬ).
PREEMPT A,[B],[C],[D],[E],
А (обязательный операнд) – имя или номер захватывае-
мого ОКУ;
Когда ОКУ свободно, оператор PREEMPT работает так же, как и оператор SEIZE
При занятом ОКУ оператор PREEMPT функционирует
в режиме прерывания (параметр В опущен)
в приоритетном режиме (параметр В = PR)
Вприоритетном режиме прервать обслуживание транзакта, т. е. «захватить» ОКУ, может только транзакт с большим приоритетом. Если приоритет претендующего на занятие ОКУ транзакта равен или ниже приоритета обслуживаемого транзакта, он помещается в список задержки ОКУ последним в своем приоритете
Прерванные транзакты претендуют на дополнительное использование устройства, когда прервавший их транзакт это устройство освободит. Прерванные транзакты помещаются в список задержки в порядке приоритета;
С – метка оператора, куда может быть направлен прерванный транзакт;
D – номер параметра прерванного транзакта, в который записывается оставшееся до завершения обслуживания время.
Е – указатель удаления прерванного транзакта из списка задержки (Е = RE). Если режим RE не задан (операнд E опущен), то прерванный транзакт по возвращении в список текущих событий будет вновь пытаться занять устройство
Транзакт, захвативший ОКУ, освобождает его от захвата вхождением в оператор RETURN.
Формат записи:
RETURN А,
где А – имя или номер освобождаемого ОКУ. Прерывание может быть снято в операторе RETURN только тем транзактом, которым оно сгенерировано.
Устройство может быть захвачено любое количество раз, но не два раза подряд одним транзактом.
Транзакт не может войти в оператор, если устройство находится в недоступном состоянии. Такие транзакты помещаются в список задержки устройства в соответствии c приоритетом, а внутри приоритета – по правилу FIFO.
Стандартные числовые атрибуты, связанные c описываемым оператором, те же, что и для одноканального устройства, c добавлением СЧА FIj, который является флагом прерывания устройства (1, если устройство находится в состоянии прерывания, 0 – в противном случае).
П р и м е р.
Использование оператора PREEMPT в приоритетном режиме.
GENERATE |
5,,,3 |
|
PRIORITY |
XN1 |
;XN1 – номер транзакта |
PREEMPT |
REM1,PR |
|
ADVANCE |
11 |
|
RETURN |
REM1 |
|
TERMINATE |
1 |
|
Блок GENERATE генерирует только три транзакта в моменты 5, 10 и 15 модельного времени и перестает быть активным. Каждый очередной транзакт, благодаря оператору PRIORITY, имеет более высокий приоритет, чем предыдущий: 1, 2 и 3 соответственно.
Пр и м е р.
Всистему наряду с обычными запросами поступают срочные, требующие немедленного выполнения. Прерванные запросы выполняются на вспомогательном более медленном устройстве.
GENERATE 10,5; queue dev1 seize dev1 depart dev1 advance 6,4 release dev1 TERMINATE
GENERATE 100,25
preempt dev1,,inter,1,re advance 27,7
return dev1 TERMINATE
inter queue intr seize dev2 depart intr advance (10#p1) release dev2 TERMINATE
GENERATE 3600 TERMINATE 1
start 1
1 |
GENERATE |
360 |
2 |
QUEUE |
360 |
3 |
SEIZE |
360 |
4 |
DEPART |
360 |
5 |
ADVANCE |
360 |
6 |
RELEASE |
336 |
7 |
TERMINATE |
336 |
8 |
GENERATE |
35 |
9 |
PREEMPT |
35 |
10 |
ADVANCE |
35 |
11 |
RETURN |
35 |
12 |
TERMINATE |
35 |
13 |
QUEUE |
23 |
14 |
SEIZE |
23 |
15 |
DEPART |
23 |
16 |
ADVANCE |
23 |
17 |
RELEASE |
23 |
18 |
TERMINATE |
23 |
19 |
GENERATE |
1 |
20 |
TERMINATE |
1 |
FACILITY ENTRIES |
UTIL. AVE. TIME |
|
|||
DEV1 |
|
395 |
0.831 |
7.575 |
|
DEV2 |
|
23 |
0.206 |
32.316 |
|
QUEUE |
MAX CONT. |
ENTRY ENTRY(0). AVE.TIME |
|||
DEV1 |
4 |
0 |
360 |
118 |
0.841 |
INTR |
1 |
0 |
23 |
23 |
0.000 |
Семейство транзактов
Семейство транзактов создается путем копирования транзакта, поступающего в оператор SPLIT. Порождающий транзакт и его копии образуют семейство (ансамбль), которому будут принадлежать также и все копии, которые могут быть порождены затем любым транзактом семейства.
SPLIT N,B,C
N - количество копий,
B - метка оператора, на который передаются копии,
C - номер параметра транзактов, куда записываются последовательные номера копий. (Порождающий транзакт получает при этом номер 1.)
Любой транзакт семейства может быть уничтожен оператором TERMINATE.
Кроме того, транзакты-копии уничтожаются оператором ASSEMBLE, который задерживает поступающие на него транзакты одного семейства до тех пор, пока их количество не станет равно значению параметра этого оператора. Затем все транзакты кроме того, у которого порядковый номер наименьший, уничтожаются, а оставшийся транзакт передается на следующий оператор.
ASSEMBLE M
M - количество транзактов одного семейства, которые должен собрать оператор.
П р и м е р.
Промоделировать работу участка сборки радиоэлектронной аппаратуры, на который поступают комплекты из двух блоков. Блоки проходят автономное тестирование и отладку на отдельных стендах.
Затем производится сборка и настройка изделия.
Если очередь на сборку превышает установленный предел, параллельно с основным сборщиком начинает работать дополнительный, который прекращает работу, когда величина очереди уменьшается до заданной величины.
GENERATE |
10,5; |
split |
1,lab1,1 |
queue |
stend1 |
seize |
stend1 |
depart |
stend1 |
advance |
9,6 |
release |
stend1 |
transfer |
,lab2 |
lab1 queue |
stend2 |
seize |
stend2 |
depart |
stend2 |
advance |
10,2 |
release |
stend2 |
lab2 assemble |
2 |
queue |
sborka |
gate LR |
double,lab3 |
test G |
Q$sborka,10,lab4 |
logic S |
double |
lab3 transfer BOTH lab4,lab5 |
|
lab4 seize |
sborka |
depart |
sborka |
advance |
15,10 |
release |
sborka |
TERMINATE |
|
lab5 seize |
sborkaadd |
depart |
sborka |
advance |
15,10 |
release |
sborkaadd |
test L |
Q$sborka,2,lab6 |
logic R |
double |
lab6 TERMINATE |
|
GENERATE 3600 TERMINATE 1 start 1
LABEL |
LOC |
BLOCK TYPE |
ENTRY COUNT |
|
1 |
GENERATE |
360 |
|
2 |
SPLIT |
360 |
|
3 |
QUEUE |
360 |
|
4 |
SEIZE |
360 |
|
5 |
DEPART |
360 |
|
6 |
ADVANCE |
360 |
|
7 |
RELEASE |
359 |
|
8 |
TRANSFER |
359 |
LAB1 |
9 |
QUEUE |
360 |
|
10 |
SEIZE |
357 |
|
11 |
DEPART |
357 |
|
12 |
ADVANCE |
357 |
|
13 |
RELEASE |
356 |
LAB2 |
14 |
ASSEMBLE |
715 |
|
15 |
QUEUE |
356 |
|
16 |
GATE |
356 |
|
17 |
TEST |
185 |
|
18 |
LOGIC |
6 |
LAB3 |
19 |
TRANSFER |
177 |
LAB4 |
20 |
SEIZE |
239 |
|
21 |
DEPART |
239 |
|
22 |
ADVANCE |
239 |
|
23 |
RELEASE |
238 |
|
24 |
TERMINATE |
238 |