Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бычков Программирование в системе моделирования ГПСС-2010

.pdf
Скачиваний:
61
Добавлен:
16.08.2013
Размер:
562.49 Кб
Скачать

момент условного (системного) времени, задаваемого "часами" системы, работа которых организуется интерпретатором. Фактически, "часы" в интерпретаторе GPSS – это целая переменная, значение которой соответствует текущему моменту системного времени модели.

При построении модели пользователь должен задаться соотношением единицы системного времени, используемого в модели, к реальному времени, в котором происходит функционирование моделируемой системы.

Отметим, что системное время никак не связано с машинным временем, затрачиваемым на выполнение моделирования. При разработке модели программист должен определить « вес» единицы системного времени и везде в модели учитывать этот вес.

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

При продвижении транзактов через блоки могут происходить события четырёх основных типов:

1.Создание или уничтожение транзакта;

2.Изменение значения атрибута объекта или параметра транзакта;

3.Задержка транзакта на некоторый промежуток системного времени;

4.Изменение маршрута движения транзакта по блокам модели.

Модель на GPSS представляет собой последовательность предложений, изображающих объекты того или иного типа, а

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

11

образом, в отличие от традиционных языков программирования в GPSS по модели идет не управление, а транзакты.

1.4. Изображение блоков в GPSS-модели

При описании блоков в квадратных скобках указан операнд или метка, которые могут быть опущены. В качестве метки обычно используется идентификатор ограниченной длины. Первые три символа – обязательно буквы. Различные реализации системы GPSS допускают различные написания меток, операндов и стандартных числовых и логических атрибутов.

Комментарий записывается через пробел за операндами или целой строкой со звездочкой в первой позиции.

В качестве операндов могут быть использованы стандартные числовые и логические атрибуты.

В GPSS применяется бланковая форма записи программ, т.е. требуется учитывать номер колонки в записи.

Каждый блок записывается в отдельной записи, которая разбивается на ряд полей: поле метки, поле операции, поле операндов и поле комментария. Операндов может быть 7. Они обозначаются буквами А, В, С, D, E, F, G (рис. 1.2). Количество операндов и их значения зависят от блока. Пробел один или несколько между полями обязателен.

Метка

 

Операция

 

A, B, C, D, E, F, G

1

6

7

8

18

19

20

MET1

 

ADVANCE

 

10,5 комментарий

*пример

 

комментария

 

 

 

 

Рис. 1.2. Формат записи для модели GPSS

В поле метки (позиции 1–6) программист может поместить символическую метку блока, по которой он может обращаться к нему, например передавать на него транзакты из других блоков модели. Первый символ метки должен быть в первой позиции.

Поле операции (позиции 8–18) служит для задания типа блока, а поля операндов– для задания его операндов.

12

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

Концом поля операндов считается первый пробел после 19 позиции. Вслед за ним может быть помещен комментарий. При необходимости комментарий может занимать всю строку. Тогда в ее первую позицию нужно записать символ *(звездочка).

В некоторых реализациях системы GPSS нет бланковой формы записи, т.е. они допускают разделение полей одним или несколькими пробелами без соблюдения позиций.

Кроме описания всех блоков, составляющих модель, интерпретатору для проведения моделирования нужна еще некоторая дополнительная информация, например продолжительность счета, указания о повторных запусках модели и т.д. Эта информация задается с помощью специальных управляющих операторов интерпретатора.

Модель должна начинаться управляющим оператором SIMULATE. Заканчивается модель оператором END.

Исходный текст модели система моделирования читает до оператора START, в котором задается значение счетчика

для завершения моделирования.

Поэтому все блоки модели

как

выполняемые, т.е. те,

через которые

проходят

транзакты, так и декларативные для накопителей,

функций,

переменных, таблиц и так далее должны быть размещены до оператора START.

“Начать моделирование” START Значение_счетчика

Пример: START 200

Работа модели остановится после того, как через блок TERMINATE 1 пройдет 200 транзактов. Из счетчика, указанного в START, вычитается значение, указанное в

TERMINATE.

Некоторые реализации системы GPSS допускают

повторные

запуски модели путем

указания операторов

управления моделью и других операторов START,

которые

следуют друг за другом /5/.

 

 

Для всех

выполняемых блоков,

составляющих

модель,

13

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

СЧА для блоков:

Nj – число транзактов, вошедших в блок j;

Wj – число транзактов, ожидающих входа в блок j.

Пример: N31, W73

Значением первого СЧА является количество транзактов, вошедших в блок с номером 31 на момент обращения к СЧА. Значением второго СЧА является количество транзактов, ожидающих на момент обращения к СЧА входа в блок с номером 73 (очередь к блоку 73). Например: N31=350,

W73=23.

Некоторые реализации требуют, чтобы всем идентификаторам в программе были заранее присвоены целые числа с помощью оператора EQU. Например: Comp Equ 4.

Во многих блоках вместо идентификаторов – имен устройств, памяти, очередей – могут быть использованы целые числа.

2. ОСНОВНЫЕ БЛОКИ СИСТЕМЫ GPSS

2.1. Задержка транзактов. Блок ADVANCE

Удобным средством моделирования различного рода обслуживания, длящегося некоторый промежуток времени, является задержка транзакта, которая выполняется в GPSS с помощью блока ADVANCE.

“Задержать транзакт”

[Метка] ADVANCE Среднее_значение_задержки [,Отклонение_от_среднего] |

[,Имя_функции или Номер_функции]

Пример: ADVANCE 37,7

Поля А и В блока ADVANCE служат для задания времени, на которое этот блок задерживает входящий в него

14

транзакт. Постоянное время задержки указывается в поле А, при этом поле В остаётся пустым.

Пример:

ADVANCE 50

выполняет задержку транзакта на 50 единиц системного времени.

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

Время задержки имеет равномерное распределение в интервале [Т1, Т2]. В этом случае в поле А указывается среднее значение интервала времени, а в поле В – максимальное отклонение от среднего.

Пример: задать задержку в интервале от 7 до 21 единицы времени

ADVANCE 14,7

Время задержки может иметь более сложное распределение. В этом случае время задержки определяется умножением числа, заданного в поле А, на значение функции, указанной в поле В. Эта функция определяет требуемый закон распределения случайных чисел.

Пример:

ADVANCE 100,FN$EXPON

задает задержку на f единиц времени, где f – целая часть от произведения 100 на значение функции EXPON. Функции описаны в п.3.6.

2.2.Блоки, описывающие работу устройств

ВGPSS транзакты могут оказывать на устройства определенные воздействия, которые часто встречаются при имитационном моделировании СМО. Содержание воздействия определяется блоком, через который проходит транзакт, а конкретное устройство, на которое направлено это воздействие, задается в поле операндов этого блока.

ВGPSS устройства задаются при помощи номеров или имен, употребленных в соответствующих блоках модели.

15

2.2.1.Блоки SEIZE и RELEASE

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

“Занять устройство без приоритета” [Метка] SEIZE Устройство

Пример: SEIZE IBM5 “Освободить устройство” [Метка] RELEASE Устройство

Пример: RELEASE IBM5

Устройство указывается с помощью имени или номера. Если устройство, указанное в блоке SEIZE, уже занято, то другой транзакт не может войти в этот блок и задерживается перед ним до момента освобождения устройства. Несколько транзактов, задержанных на входе блока SEIZE,

обслуживаются в порядке поступления.

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

Вывод данных об устройствах и СЧА для них рассматриваются в п. 2.2.2.

Пример. Рассмотрим участок модели, который моделирует обслуживание заявок сначала прибором СТАН1 в течение от 5 до 15 единиц времени, а затем одновременно двумя приборами СТАН2 и СТАН3 в течение 14 единиц

времени.

 

 

 

Метка

Операция

A, B, C, D, E, F, G

 

SEIZE

СТАН1

занять СТАН1

 

ADVANCE

10,5

обработка

 

RELEASE

СТАН1

освободить СТАН1

 

SEIZE

СТАН2

занять СТАН2

16

SEIZE

СТАН3

занять СТАН3

ADVANCE

14

обработка

RELEASE

СТАН2

освободить СТАН2

RELEASE

СТАН3

освободить СТАН3

2.2.2.Блоки PREEMPТ и RETURN

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

ипереходит на обслуживание "срочной" заявки и, обслужив ее, возвращается к обслуживанию первой менее приоритетной заявки.

Блок PREEMPT “Захватить устройство” имеет две формы. Первая форма, более простая, используется, как правило, совместно с блоком SEIZE, который занимает устройство раньше и задает обслуживание менее приоритетного транзакта. Когда другой транзакт входит в блок PREEMPT, PREEMPT прерывает обслуживание менее приоритетной заявки и выполняет обслуживание на этом

устройстве более приоритетной заявки.

Первая форма задаёт два уровня приоритетов. Один уровень связан с блоком SEIZE и задаёт фоновый уровень. Второй уровень приоритета задаётся первой формой

PREEMPT.

“Захватить устройство по двухуровневому приоритету” [Метка] PREEMPT Устройство

Пример: SEIZE CHANL и PREEMPT CHANL.

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

При поступлении транзакта на блок PREEMPT при использовании первой формы происходит следующее:

-устройство, указанное в поле А этого блока, прерывает обслуживание транзакта, который его занимал блоком SEIZE (этот транзакт будем называть прерванным), и начинает обслуживание прерывающего транзакта;

-прерванный транзакт ждет окончания обслуживания прерывающего транзакта. При этом время его ожидания не

17

фиксируется;

-обслуживание устройством прерывающего транзакта прекращается тогда, когда этот транзакт пройдет блок RETURN, в котором указано это устройство:

“Вернуть захваченное устройство” [Метка] RETURN Устройство

Пример: RETURN CHANL;

-если в момент поступления транзакта на блок PREEMPT указанное в нем устройство уже занято обслуживанием прерывания (был транзакт, который вошел в PREEMPT с этим устройством), то транзакт задерживается на входе блока PREEMPT. Когда указанное устройство закончит обслуживание первого прерывания, транзакт, задержанный на входе блока PREEMPT, войдет в него, если его приоритет опять выше приоритета прерванного транзакта, и устройство

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

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

В приводимом примере транзакт второго потока заявок может прервать обслуживание на устройстве WERK1, если транзакты первого потока раньше заняли это устройство, и начинается приоритетное обслуживание. Освобождается устройство WERK1 через 100 единиц времени. После этого продолжится обслуживание транзакта из первого потока.

Пример:

 

Метка

Операция

A, B, C, D, E, F, G

 

GENERATE

первый поток заявок

 

SEIZE

WERK1 занять устройство

 

ADVANCE

300 обработка

 

RELEASE

WERK1 освободить WERK1

 

 

 

GENERATE

второй поток заявок

 

 

 

PREEMPT

WERK1 прерывание WERK1

 

ADVANCE

100 обработка

 

RETURN

WERK1 освободить WERK1

18

Для устройств после завершения моделирования выводятся следующие (основные) данные:

-имя или номер устройства;

-количество транзактов, вошедших в устройство;

-доля занятости устройства в процессе моделирования;

-среднее время занятия устройства одним транзактом. Стандартные числовые атрибуты для устройств:

j – номер или $имя устройства

Fj – статус устройства по занятости: 0 – устройство j

свободно, 1 – устройство j занято;

FIj – статус устройства по прерыванию: 0 – устройство j не прервано, 1 – устройство j прервано;

FVj – статус устройства по доступности: 0 – устройство j не доступно, 1 – устройство j доступно;

FRj – коэффициент использования (загрузка) устройства (в тысячных долях). Если устройство 1 используется 27 % времени, то FR1=270;

FCj – число транзактов, вошедших в устройство j;

FTj – среднее время использования устройства одним транзактом (округленно).

Пример: FR$WERK3, FC $CPU, FR7

Первый СЧА содержит на момент обращения коэффициент загрузки устройства WERK3, например FR$WERK3=875, т.е. устройство WERK3 использовалось на момент обращения на 87,5 %. Второй СЧА содержит на момент обращения к СЧА количество транзактов, вошедших в устройство CPU, например FC$CPU=423, т.е. в устройство CPU вошло 423 транзакта.

Вторая форма использует различные значения приоритетов транзактов и рассматривается в п.3.2.

2.3. Накопители. БлокиENTER и LEAVE

Накопитель ("память") в GPSS – это особый тип оборудования, которое в отличие от устройств содержит заранее определенное количество единиц. Поэтому накопители могут использоваться для представления объектов, выполняющих параллельную обработку нескольких заявок.

19

Для того чтобы задать в программе моделирования память некоторого объема, используется описательный блок STORAGE “Описать накопитель”. Нужно записать в поле метки номер памяти или ее имя, по которому на нее можно ссылаться, в поле операции слово STORAGE. В поле операндов записывается целое число, определяющее объем памяти.

“Описать накопитель”

Имя_накопителя STORAGE Количество_единиц_памяти

Пример: DISK STORAGE 4000

В примере задается память с именем DISK объемом в

4000 условных единиц.

 

Если где-либо

в

модели происходит обращение к

неописанной памяти, то считается, что она имеет объем 2 147 483 647 единиц. В начале работы программы все памяти считаются незанятыми.

Для фиксации входа транзакта в память применяется блок ENTER, в поле А которого указывается имя или номер памяти, а в поле В – число единиц памяти, которые занимает в ней транзакт. Поле В может быть опущено, в этом случае считается, что занимается одна единица памяти.

“Занять накопитель”

[Метка] ENTER Имя_накопителя [,Количество_занимаемых_единиц]

Пример: ENTER STOR1,2

Транзакт, проходя через блок ENTER, занимает в памяти STOR1 две единицы памяти. Что понимается под единицей памяти, зависит от решаемой задачи.

Если второй операнд опущен, то считается, что он равен

единице.

 

 

 

Если

в памяти нет

достаточного числа свободных

единиц,

запрашиваемых

блоком ЕNTER,

то транзакт

задерживается на входе этого блока до тех пор, пока в этой памяти не будет освобождено необходимое число единиц памяти. Причем в то время, пока этот транзакт ждет входа в блок ENTER, другой транзакт, пришедший позже, может войти в блок ENTER, если для него достаточно свободных единиц памяти.

Освобождается содержимое памяти с помощью блока

20