Программирование в GPSS - Операции захвата и освобождения устройствОперация захвата устройства выполняется транзактом с помощью блока PREEMPT (прервать). Номер захватываемого устройства задается в этом блоке в поле А. Если транзакт захватил устройство посредством блока PREEMPT, то освобождать его он должен в блоке RETURN (восстановить). Номер освобождаемого устройства задается в блоке RETURN в поле А. Блок PREEMPT позволяет транзакту использовать устройство на более льготных условиях, чем блок SEIZE. Рассмотрим наиболее простой режим работы блока PREEMPT. В этом режиме блок работает в случае, если задан только операнд А. Здесь возможны следующие три ситуации. 1) При входе транзакта в блок PREEMPT устройство свободно. В этом случае транзакт беспрепятственно входит в блок и захватывает устройство. Устройство из состояния "свободно" переходит в состояние "захвачено". Когда транзакт войдет в соответствующий блок RETURN, устройство из состояния "захвачено" вновь перейдет в состояние "свободно". 2) При переходе транзакта в блок PREEMPT устройство занято другим транзактом, прошедшим блок SEIZE. В этом случае транзакт беспрепятственно входит в блок PREEMPT, а устройство прерывает обслуживание занимающего его транзакта и переключается на обслуживание транзакта, вошедшего в блок PREEMPT. При этом из состояния "занято" устройство переходит в состояние "захвачено". Когда транзакт, захвативший устройство, войдет в блок RETURN, устройство освободится, возобновит прерванное обслуживание другого транзакта и перейдет в состояние "занято". Если прерываемый транзакт в момент прерывания находится в блоке ADVANCE, то, начиная с момента прерывания, отсчет времени пребывания транзакта в этом блоке прекращается до тех пор, пока не будет восстановлено обслуживание транзакта. Таким образом, в момент восстановления прерванного обслуживания транзакта время, оставшееся этому транзакту до выхода из блока ADVANCE, такое же, каким оно считалось непосредственно в момент прерывания. Такое прерывание обслуживания называется прерыванием с последующим дообслуживанием. 3) При входе транзакта в блок PREEMPT устройство захвачено другим транзактом, прошедшим блок PREEMPT. В этом случае транзакт задерживается в предыдущем блоке до момента освобождения устройства. Все транзакты, задержанные при обращении к устройству, упорядочиваются по приоритету. Более сложные режимы прерывания задаются с помощью большего числа операндов. Кроме операнда A в блоке PREEMPT могут быть заданы какие-либо из операндов B,C,D,E. Операнд B записывается в виде обозначения PR, задающего приоритетный режим работы блока PREEMPT. В этом режиме транзакт захватывает устройство, если оно свободно или если оно обслуживает менее приоритетный транзакт. Прерывание обслуживания менее приоритетного транзакта происходит с его последующим дообслуживанием. Прерванные транзакты упорядочиваются по приоритету совместно с вновь приходящими транзактами, т.е. образуют с ними одну очередь к устройству. Вновь приходящий транзакт задерживается на входе блока PREEMPT только тогда, когда устройством обслуживается не менее приоритетный транзакт. Для определения последующего движения прерванных транзактов блок PREEMPT предоставляет пользователю следующие возможности . 1) В поле C может быть указано имя какого-либо блока, на который будет передан прерванный транзакт. При этом прерванный транзакт продолжает претендовать на данное устройство. 2) В поле D блока PREEMPT может быть задан номер параметра транзакта. Тогда, если прерванный транзакт находится в блоке ADVANCE, то вычисляется остаток времени обслуживания (время дообслуживания), и полученное значение помещается в параметр, заданный в поле D. Прерванный транзакт при этом будет послан в блок, указанный в поле C. Прерванный транзакт продолжает претендовать на данное устройство. 3) Если в поле E блока PREEMPT записано обозначение RE, то будут производиться те же операции, что и в случае 1), за исключением того, что прерванный транзакт больше не претендует на данное устройство.
Пример. Оперативная память однопроцессорной ЭВМ разбита на три раздела с номерами 0, 1, 2. В каждом разделе находится по одной программе. Приоритет программы тем выше, чем меньше номер ее раздела. Программы вызываются на выполнение по требованиям пользователей, поступающим в случайные моменты времени. Программа нулевого раздела вызывается с интервалами длительностью 10 8 с. Время ее выполнения процессором в зависимости от обрабатываемых данных колеблется в пределах 3 ± 2с. Программа первого раздела вызывается через каждые 2 мин. и выполняется процессором в течение 30 ± 15с. Через полчаса после начала поступления требований в нулевой и в первый разделы начинают поступать требования во второй раздел с интервалами по 5±4 мин. Такие требования обрабатываются 1 мин. В случае конфликтных ситуаций, когда при поступлении какого-либо требования процессор выполняет другое требование, используется дисциплина абсолютных приоритетов. Требуется написать модель на языке GPSS, воспроизводящую первый час описанного процесса. При моделировании необходимо подсчитывать число поступивших и число обслуженных требований каждого вида. Будем представлять требования на выполнение программ транзактами. Присвоим требованиям приоритеты 0, 1, 2. Согласно условию задачи нулевой — наименьший — приоритет должны иметь требования к третьему разделу, а приоритет 2 — требования к нулевому разделу. Процессор представим в модели устройством с номером 1. За единицу времени примем 1 с. Для подсчета требований воспользуемся ячейками SAVEVALUE. Тогда модель может быть написана в следующем виде.
* МОДЕЛЬ НУЛЕВОГО РАЗДЕЛА: GENERATE 10,8,,,2 ;ПЕРВЫЙ ПОТОК ТРЕБОВАНИЙ SAVEVALUE 1+,1 ;ПОДСЧЕТ ИХ ЧИСЛА PREEMPT 1,PR ;ЗАХВАТ ПРОЦЕССОРА ADVANCE 3,2 ;ВЫПОЛНЕНИЕ ТРЕБОВАНИЯ RETURN 1 ;ОСВОБОЖДЕНИЕ ПРОЦЕССОРА SAVEVALUE 2+,1 ;ПОДСЧЕТ ОБСЛУЖЕННЫХ ТРЕБ. TERMINATE * МОДЕЛЬ ПЕРВОГО РАЗДЕЛА: GENERATE 120,,,,1 ;ВТОРОЙ ПОТОК ТРЕБОВАНИЙ SAVEVALUE 3+,1 ;ПОДСЧЕТ ИХ ЧИСЛА PREEMPT 1,PR ;ЗАХВАТ ПРОЦЕССОРА ADVANCE 30,15 ;ВЫПОЛНЕНИЕ ТРЕБОВАНИЯ RETURN 1 ;ОСВОБОЖДЕНИЕ ПРОЦЕССОРА SAVEVALUE 4+,1 ;ПОДСЧЕТ ОБСЛУЖ-Х ТРЕБ-Й TERMINATE * МОДЕЛЬ ВТОРОГО РАЗДЕЛА: GENERATE 300,240,1800;ТРЕТИЙ ПОТОК ТРЕБОВАНИЙ SAVEVALUE 5+,1 ;ПОДСЧЕТ ИХ ЧИСЛА PREEMPT 1,PR ;ЗАХВАТ ПРОЦЕССОРА ADVANCE 60 ;ВЫПОЛНЕНИЕ ТРЕБОВАНИЯ RETURN 1 ;ОСВОБОЖДЕНИЕ ПРОЦЕССОРА SAVEVALUE 6+,1 ;ПОДСЧЕТ ОБСЛУЖ-Х ТРЕБ-Й TERMINATE * ОСТАНОВ. МОДЕЛИ ПРИ T=1 ЧАСУ = 3600 СЕКУНДАМ: GENERATE 3600 TERMINATE 1
START 1
В результате моделирования наряду с информацией об устройстве 1 автоматически будет выведено значение ячеек X1-X6 в виде таблицы, содержащей номера этих ячеек и их содержимое. Значение ячейки X1 будет равно числу требований, поступивших в нулевой раздел оперативной памяти, а ячейки X2 - числу обслуженных таких требований. Аналогично интерпретируются значения ячеек X3, X4 для требований первого раздела и ячеек X5, X6 - для второго. Отчет об исследовании.
START TIME END TIME BLOCKS FACILITIES STORAGES 0.000 3600.000 23 1 0
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 363 0 0 2 SAVEVALUE 363 0 0 3 PREEMPT 363 0 0 4 ADVANCE 363 1 0 5 RETURN 362 0 0 6 SAVEVALUE 362 0 0 7 TERMINATE 362 0 0 8 GENERATE 30 0 0 9 SAVEVALUE 30 1 0 10 PREEMPT 29 0 0 11 ADVANCE 29 0 0 12 RETURN 29 0 0 13 SAVEVALUE 29 0 0 14 TERMINATE 29 0 0 15 GENERATE 7 0 0 16 SAVEVALUE 7 0 0 17 PREEMPT 7 0 0 18 ADVANCE 7 0 0 19 RETURN 7 0 0 20 SAVEVALUE 7 0 0 21 TERMINATE 7 0 0 22 GENERATE 1 0 0 23 TERMINATE 1 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY 1 399 0.653 5.893 1 402 0 0 0 1
SAVEVALUE RETRY VALUE 1 0 363.000 2 0 362.000 3 0 30.000 4 0 29.000 5 0 7.000 6 0 7.000
|
