Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В.Д. Боев, Р.П. Сыпченко.docx
Скачиваний:
179
Добавлен:
19.09.2019
Размер:
7.07 Mб
Скачать

6.2.7.1. Прерывание в приоритетном режиме

В приоритетном режиме прервать обслуживание предыдущего (обслуживаемого) транзакта, т. е. "захватить" ОКУ, может только транзакт с большим приоритетом. Если приоритет претендующего на занятие ОКУ транзакта равен или ниже приоритета обслуживаемого транзакта, он помещается в список задержки ОКУ последним в своем приоритете.

Что делать с транзактом, обслуживание которого прерывается? Это определяют операнды С, D и Е.

Операнд С - имя или номер блока, куда должен быть направлен прерванный транзакт.

Операнд Е при значении RE определяет режим удаления прерванного транзакта.

Операнд D - номер параметра прерванного транзакта, в который записывается оставшееся до завершения обслуживания время.

Операнды А, С, D и Е могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр.

Транзакт, захвативший ОКУ, освобождает его от захвата вхождением в блок RETURN.Формат блока:

RETURN A

Операнд А - имя или номер освобождаемого ОКУ. Например:

RETURN Rem1

Освободить от захвата ОКУ Rem1.

Применение блоков PREEMPT и RETURN показано в п. 6.5.5.

6.2.7.2. Прерывание в режиме "захвата"

В режиме "захвата", если ОКУ уже используется, активный транзакт помещается в список отложенных прерываний или "захватывает" ОКУ. Прерывание обслуживания сразу, а не помещение транзакта в список, происходит тогда, когда список отложенных прерываний пуст и обслуживаемый транзакт сам не является "захватчиком".

Транзактам из списка отложенных прерываний предоставляется право занять ОКУ ранее, чем прерванным транзактам или транзак-там из списка задержки ОКУ.

6.2.7.3. Проверка состояния одноканального устройства, функционирующего в приоритетном режиме

Проверка состояния ОКУ в приоритетном режиме может проводиться блоком GATE, а также с использованием булевой переменной и блока TEST.

Рассмотрим проверку состояния ОКУ блоком GATE.

Условие проверки задается одним из следующих условных операторов Х:

  • I - ОКУ, заданное операндом А, прервано;

  • NI - ОКУ, заданное операндом А, не прервано.

Например:

GATE I Stan

GATE NI (V$Rasp-3)

GATE I Print,Udal

GATE I *1

В первом примере блок GATE пропустит транзакт, когда ОКУ Stan будет прервано. Во втором примере транзакт пройдет к следующему блоку, когда не прервано ОКУ, номер которого определяется как результат вычисления и последующего округления до целого выражения в скобках ( V$Rasp-3 ). В третьем примере в случае прерывания ОКУPrint транзакт будет направлен к блоку с меткой Udal.

В первом и втором примерах блок GATE работает в режиме отказа во входе в случае невыполнения условия. Здесь также остается справедливым замечание, сделанное в п. 6.2.4: отсутствие операнда В может привести к увеличению машинного времени моделирования. Однако в некоторых случаях такой режим, наверное, можно использовать.

6.2.8. Недоступность одноканального устройства

Для моделирования неисправностей ОКУ и других ситуаций в GPSS World предусмотрены блоки, реализующие недоступность и доступность ОКУ. При использовании этих блоков статистика ОКУ не искажается. Здесь имеется в виду следующее. Для моделирования, например, неисправностей можно использовать и режим прерывания ( PREEMPT ). Однако при этом транзакты, вызывающие прерывания (имитирующие отказы ОКУ), учитываются в статистике, как и транзакты, обслуженные при исправном функционировании ОКУ. А это неправильно, вследствие чего и искажается статистика ОКУ.