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

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

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

Операции занятия и освобождения устройств выполняются в блоках SEIZE (занять) и RELEASE (освободить).

При вводе транзакта в блок SEIZE выполняется операция занятия устройства, номер или имя которого задается операндом A блока SEIZE. Номер устройства может быть задан в виде любого СЧА.

Занятие устройства транзактом выполняется следующим образом. Когда транзакт направляется из какого-нибудь блока в блок SEIZE, симулятор проверяет, свободно ли требуемое устройство. Если устройство не свободно, т.е. занято или захвачено, то транзакт не может войти в блок SEIZE. Он остается в предыдущем блоке до тех пор, пока устройство не освободится. Если же устройство свободно, то симулятор без задержки передвигает транзакт в блок SEIZE и транзакт занимает устройство. В этот же момент времени транзакт направляется к следующему за SEIZE блоку.

В последующем движении по модели транзакт может освободить занятое устройство. Освобождение устройства происходит в блоке RELEASE, в поле A которого указывается номер освобождаемого устройства.

При составлении моделей пользователь должен соблюдать правило: освободить устройство может только тот транзакт, который его занимает. Если транзакт попытается освободить устройство, занятое или захваченное другим транзактом, симулятор прервет выполнение модели и выдаст сообщение об ошибке.

Если несвободное устройство пытаются занять несколько транзактов с помощью одного или разных блоков SEIZE, то все они до момента освобождения устройства задерживаются в тех блоках, в которых находились в момент попытки перейти в блок (блоки) SEIZE. В момент освобождения устройства должен быть решен вопрос о том, какой из задержанных транзактов имеет право первым занять устройство. В GPSS этот вопрос решается следующим образом. Когда транзакты задерживаются на входе блока SEIZE, они регистрируются симулятором в списке. В этом списке транзакты упорядочиваются по приоритетам: любой транзакт с более высоким приоритетом находится впереди любого другого транзакта, имеющего более низкий приоритет. Если же приоритеты у каких-либо транзактов одинаковы, то такие транзакты упорядочиваются между собой по времени прихода: впереди оказывается транзакт, который раньше обратился к устройству. Такое упорядочение задерживаемых транзактов будем называть приоритетным. Приоритетное упорядочение является в GPSS основным способом упорядочения задерживаемых транзактов и применяется не только при обращениях к несвободному устройству, но и во многих других случаях. В момент освобождения устройства его занимает тот из задержанных транзактов, который находится в списке первым.

Транзакт может занимать любое число устройств. Освобождать занятые устройства транзакт может в любом порядке.

Пример. Пусть транзакты имеют одинаковые приоритеты и изображают кинозрителей, а устройство представляет кассира в кассе кинотеатра.

Каждый кинозритель приобретает у кассира билеты в течение 20 ± 5 с, в зависимости от числа билетов и необходимости получения сдачи. Кинозрители приходят через каждые 20 ± 10с, знакомятся в течение 15 ± 15с с обстановкой и занимают очередь. Общее число кинозрителей 200.

Тогда имитационную модель процесса обслуживания кинозрителей кассиром мы можем описать так.

 

* МОДЕЛЬ РАБОТЫ КАССИРА

GENERATE 20,10,,200 ;ПРИХОД ЗРИТЕЛЕЙ

ADVANCE 15,15 ;ЗНАКОМСТВО С ОБСТАНОВКОЙ

SEIZE 1 ;ОБРАЩЕНИЕ К КАССИРУ

ADVANCE 20,5 ;ПОКУПКА БИЛЕТА

RELEASE 1 ;ОСВОБОЖДЕНИЕ КАССИРА

TERMINATE 1 ;УХОД ЗРИТЕЛЯ

START 200 ;СЧЕТЧИК=200.

Отчет об исследовании

START TIME END TIME BLOCKS FACILITIES STORAGES

0.000 4127.389 6 1 0

LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY

1 GENERATE 200 0 0

2 ADVANCE 200 0 0

3 SEIZE 200 0 0

4 ADVANCE 200 0 0

5 RELEASE 200 0 0

6 TERMINATE 200 0 0

FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY

1 200 0.984 20.302 1 0 0 0 0 0

Рассмотрим логику выполнения этой модели. Первая строка модели является комментарием и симулятором не воспринимается. Блок GENERATE изображает приход зрителей: он генерирует транзакты через каждые 20 ± 10 единиц времени до тех пор, пока не будет выдано 200 транзактов. Каждый транзакт-зритель, поступивший из блока GENERATE, попадает в блок ADVANCE 15,15 и задерживается на время «ознакомления с обстановкой». Заметим, что, поскольку эта задержка случайная и может для разных транзактов отличаться на 30 единиц времени, то возможны случаи, когда позже попавшие в этот блок транзакты будут выходить из него раньше.

Если транзакт направляется из блока ADVANCE 15,15 в блок SEIZE 1, в то время как устройство 1 свободно, то он входит в этот блок, занимает устройство, переходит в блок ADVANCE 20,5 и задерживается в нем. Таким образом, в течение 20 ± 5 ед. модельного времени устройство 1 будет занято. Транзакты, пытающиеся в это время перейти из блока ADVANCE 15,15 в блок SEIZE, будут задержаны и упорядочены по приоритетам. Поскольку приоритеты у всех транзактов одинаковы и равны нулю (см. блок GENERATE), то транзакты будут упорядочены в порядке времени их обращения к устройству. Следовательно, задерживаемые транзакты будут в точности изображать живую очередь к кассиру.

Из блока ADVANCE 20,5 транзакт переходит в блок RELEASE 1 и освобождает устройство 1. В этот же момент времени транзакт переходит в блок TERMINATE и уничтожается. В результате из содержимого счетчика строки START вычитается 1. Моделирование будет продолжаться до тех пор, пока счетчик не станет равным нулю. В строке START задано начальное значение счетчика, которое равно 200. Следовательно, выполнение модели закончится в тот момент модельного времени, когда последний транзакт будет обслужен и освободит устройство. Строка START не только задает начальное значение счетчика. Ввод строки START является командой симулятору начать выполнение модели.





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

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


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




Разделы



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