Блок PREEMPT - захватить устройство. Транзакт, попадающий в блок PREEMPT, захватывает устройство, имя которого указано в поле А блока. Если при захвате устройства оно свободно, то транзакт просто занимает устройство, в этом случае блок PREEMPT работает аналогично блоку SEIZE. Если при входе транзакта в блок PREEMPT устройство занято другим транзактом, то в этом случае транзакт входит в блок PREEMPT, а устройство прерывает обслуживание занимающего его транзакта и переключается на обслуживание транзакта, вошедшего в блок PREEMPT. При этом из состояния "занято" устройство переходит в состояние "захвачено". Когда транзакт, захватывающий устройство, освободит его, устройство возобновит прерванное обслуживание другого транзакта и перейдет в состояние «занято».
Если прерываемый транзакт в момент прерывания находится в блоке ADVANCE, то, начиная с момента прерывания, отсчет времени пребывания транзакта в этом блоке прекращается до тех пор, пока не будет восстановлено обслуживание транзакта. Таким образом, в момент восстановления прерванного обслуживания транзакта время, оставшееся этому транзакту до выхода из блока ADVANCE, такое же, каким оно считалось непосредственно в момент прерывания. Такое прерывание обслуживания называется прерыванием с последующим дообслуживанием.
|
|
Все транзакты, задержанные при обращении к устройству, упорядочиваются по приоритету. Кроме поля А, в блоке PREEMPT могут быть заданы операнды В, С, D и Е. Операнд В записывается в виде обозначения PR, задающего приоритетный режим работы блока. В этом режиме транзакт захватывает устройство, если оно свободно или обслуживает менее приоритетный транзакт. Прерывание обслуживания менее приоритетного транзакта происходит с последующим дообслуживанием.
Для определения последующего движения прерванных транзактов используются другие операнды. В поле С может быть указана метка какого-либо блока, на который будет передан прерванный транзакт. При этом прерванный транзакт продолжает претендовать на данное устройство. В поле D блока может быть задан номер параметра транзакта. Тогда, если прерванный транзакт находится в блоке ADVANCE, то вычисляется остаток времени обслуживания (время дообслуживания), и полученное значение помещается в параметр, заданный а поле D. Прерванный транзакт при этом будет послан в блок, указанный в поле С. Прерванный транзакт продолжает претендовать на данное устройство. Если в поле Е блока записано обозначение RE, то прерванный транзакт больше не будет претендовать на данное устройство.
Блок RETURN -освободить устройство. Этот блок используется в паре с блоком PREEMPT. Если транзакт захватил устройство посредством блока PREEMPT, то освободить его он может только в блоке RETURN. Имя освобождаемого устройства задается в поле А блока.
|
|
Пример 9
Оперативная память однопроцессорной ЭВМ разбита на три раздела с номерами 0,1 и 2. В каждом разделе находится по одной программе. Приоритет программы тем выше, чем меньше номер ее раздела. Программы вызываются на выполнение по требованиям пользователей, поступающим в случайные моменты времени.
Программа нулевого раздела вызывается с интервалами длительностью 10±8 с, время ее выполнения в зависимости от обрабатываемых данных равно 3±2 с. Программа первого раздела вызывается через каждые 2 мин и выполняется в течение 30±15 с. Через полчаса после начала поступления требований в нулевой и первый разделы начинают поступать требования во второй раздел с интервалами по 5±4 мин и обрабатываются 1 мин.
В случае конфликтных ситуаций, когда при поступлении какого-либо требования процессор выполняет другое требование, используется дисциплина абсолютных приоритетов.
Промоделировать 1 ч описанного процесса. При моделировании подсчитать число поступивших и число обслуженных требований каждого вида
SIMULATE
* модель нулевого раздела
GENERATE 10,8,,,2
SAVE VALUE 1+,1 подсчет требований
PREEMPT PROC,PR захват процессора
ADVANCE 3,2
RETURN PROC освобождение процессора
SAVEVALUE 2+,1
TERMINATE
* модель первого раздела
GENERATE 120„„1
SAVEVALUE 3+,1
PREEMPT PROC,PR
ADVANCE 30,15
RETURN PROC
SAVEVALUE 4+,1
TERMINATE
* модель второго раздела
GENERATE 300,240,1800
SAVEVALUE 5+,1
PREEMPT PROC,PR
ADVANCE 60
RETURN PROC
SAVEVALUE 6+,1
TERMINATE
* таймер
GENERATE 3600
TERMINATE 1
START 1
END
Управляющие блоки
Блок SIMULATE означает начало имитации и указывает симулятору на необходимость выполнения моделирования. В этом блоке может использоваться поле А, в котором в этом случае указывается количество повторений моделирования. Например, SIMULATE 5 показывает, что модель должна быть выполнена пять раз. По умолчанию модель выполняется один раз.
Блок START воспринимается как команда симулятору начать выполнение прочитанной части модели. В этом блоке в поле А также задается начальное значение счетчика транзактов. Здесь также может быть использовано поле В в значении NP, что означает - не выводить статистику по окончании моделирования. Если задан блок
START 1,NP,
то подавляется вывод всей информации об устройствах, памятях, очередях, таблицах и ячейках.
В этом случае выводится только информация о переменных, указанных в блоках PRINT. Блок PRINT выводит информацию о переменных, СЧА которых указано в поле А этого блока.
В поле С блока START можно задать начальное значение счетчика промежуточной печати. Содержимое этого счетчика уменьшается при входе транзактов в блок TERMINATE так же, как содержимое счетчика в поле А. Когда значение счетчика в поле С становится равным нулю или отрицательным, производится выдача статистики в обычном формате и восстанавливается начальное значение этого счетчика. После этого выполнение модели продолжается. Например, при использовании карты
START 5„1
совместно с блоком TERMINATE 1 выдача статистики в процессе моделирования будет произведена 5 раз.
Блок RESET предназначается для стирания в заданный момент времени статистики о предыстории процесса. Достигнутое состояние объектов при этом сохраняется.
|
|
Применение блока RESET позволяет уменьшить затраты машинного времени на сбор статистики о стационарном (в смысле вероятностных характеристик) процессе в тех случаях, когда предшествующий ему переходный процесс вносит заметные искажения в накапливаемую статистику.
Обычно блок RESET помещается в модели после блока START, а после RESET располагается следующий блок START. После прочтения блока RESET засылается нулевое содержимое в счетчики числа входов в блоки, коэффициенты использования устройств и памятей, а также обнуляются все накопленные статистики. При этом сохраняются текущие состояния и значения устройств, памятей, очередей, ячеек и датчиков случайных чисел.
Блок CLEAR переводит всю модель - всю статистику и все объекты - в исходное состояние. Исключением является лишь датчик случайных чисел - он не возвращается к начальному значению. Применение блока CLEAR позволяет осуществить независимые реализации моделируемого случайного процесса.