RETURN REM1
ADVANCE 11
PREEMPT REM1,PR
PRIORITY XN1
GENERATE 5,,,3
Прерывания
Добавка
String s,s1;
s=(String)lm.getItemAt(2);
s1=(String)lm2.getItemAt(1);
s= “третий”
s1=”пятый’
Ситуация, когда очередной транзакт должен занять одноканальное устройство, прервав обслуживание предыдущего транзакта, называется «захватом» устройства и моделируется оператором 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, 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