Баннер
Баннер

Программирование в GPSS - Операции захвата и освобождения устройств

Оглавление
Программирование в GPSS
прагматический аспект
Классы объектов языка GPSS
Интерпретации транзактов
Интерпретаций устройст
Элементы реальных систем
Очереди и таблицы
Блоки
Модельное время
Общеалгоритмические средства GPSS
Стандартные числовые атрибуты
Арифметические переменные
Логические (булевы) переменные
Функции
Ячейки и матрицы ячеек
Задание начальных значений ячеек и матриц
Объектно-ориентированные средства GPSS
Создание и уничтожение транзактов
Задержка транзактов в блоках ADVANCE
Операции занятия и освобождения устройств
Операции захвата и освобождения устройств
Операции блокирования и разблокирования устройств
Описание памятей и работа с ними
Операции с ключами
Блок GATE
Синхронизация транзактов
Изменение параметров транзактов
Управление маршрутами транзактов в модели
Сбор статистики с помощью очередей
Сбор статистики с помощью таблиц
Стандартные числовые атрибуты
Атрибуты транзактов
Атрибуты блоков
Системные атрибуты
Атрибуты оборудования
Статистические атрибуты
Атрибуты ячеек SAVEVALUE
Функции и переменные
Атрибуты списков пользователя
Атрибуты группы
Системные атрибуты
Блоки COUNT и SELECT
Все страницы
Операции захвата и освобождения устройств

Операция захвата устройства выполняется транзактом с помощью блока 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





Читайте также:

Добавить комментарий


Защитный код
Обновить




Разделы



Главная GPSS Программирование в GPSS