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

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

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

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

“Освободить накопитель” [Метка] LEAVE Имя_накопителя

[,Количество_освобождаемых_ единиц]

Пример: LEAVE DISK

Транзакт, проходя через блок LEAVE, освобождает в памятиDISK одну единицу памяти.

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

Если освобождается большее количество единиц памяти, чем осталось, то выводится сообщение об ошибке.

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

Пример:

 

 

 

Метка

Операция

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

 

ENTER

MAIN,3200

занять память

 

PREEMPT

CPU

прерывание фоновой

 

ADVANCE

180

счет срочной задачи

 

RETURN

CPU

 

конец прерывания

 

LEAVE

MAIN,3200

освободить память

MAIN

STORAGE

40000

 

 

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

-имя или номер накопителя;

-объем накопителя, определенный в модели;

-максимальное содержимое накопителя за время моделирования;

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

-среднее значение содержимого накопителя за время

21

моделирования; - коэффициент использования накопителя.

Стандартные числовые атрибуты для накопителей: j – номер или $имя устройства;

Sj – количество занятых единиц накопителя j; Rj – количество свободных единиц накопителя j;

SRj – использование накопителя j (в тысячных долях); SAj – средняя занятость накопителя (округленно) j; SMj – максимальная занятость накопителя j;

SCj – количество входов в накопитель j;

STj – среднее время использования единицы емкости накопителя j.

Пример: S$DISK, R$BUFFER, SM3 , SC$CHANNL

Значение первого СЧА представляет количество занятых единиц емкости накопителя DISK на момент обращения к СЧА. Второй СЧА представляет количество свободных единиц в накопителе BUFFER. Третий СЧА дает значение максимальной занятости накопителя с номером 3, достигнутой к моменту обращения к нему. Четвертый СЧА содержит количество входов транзактов в накопитель CHANNL к моменту обращения к СЧА.

2.4. Очереди. БлокиQUEUE и DEPART

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

Для сбора статистических данных об очередях в системе GPSS предусмотрены блоки QUEUE и DEPART. Блок QUEUE фиксирует вход транзакта в очередь, а блок DEPART – выход из очереди.

“Отметить транзакт в очереди” [Метка] QUEUE Имя_очереди

[,Число_прибавляемое_к_длине_очереди]

Пример: QUEUE QTOWRK “Покинуть очередь”

22

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

Пример: DEPART QTOWRK

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

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

Аэтого блока, на число, записанное в поле В. Интерпретатор вычисляет временной интеграл длины

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

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

Проход транзакта через блок DEPART имитирует выход его из очереди. При этом интерпретатор вычитает из длины очереди, указанной в поле А, число, указанное в поле В, фиксирует время пребывания транзакта в очереди. Причем, если оно оказалось равным 0, то число из поля В прибавляется к счетчику числа транзактов, прошедших через данную очередь без задержки («нули» очереди).

Пример:

 

Метка

Операция

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

 

QUEUE

1

 

SEIZE

2

 

DEPART

1

 

ADVANCE

150

 

RELEASE

2

Прохождение транзактов через приведенную в примере последовательность блоков имитирует работу с устройством с номером 2 с очередью к нему с номером 1, которое затрачивает 150 единиц времени на обслуживание одной заявки.

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

-номер или имя очереди;

-максимальное значение длины очереди в процессе моделирования;

23

-текущее содержимое очереди;

-общее количество входов транзактов в очередь;

-количество “нулевых” входов транзактов в очередь, т.е. таких транзактов, которые ждали ноль единиц времени;

-среднее значение длины очереди;

-среднее значение времени задержки транзакта в очереди

сучетом "нулевых" транзактов;

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

СЧА для очередей:

j – номер или $имя очереди Qj – текущая длина очереди j; QAj – средняя длина очереди j;

QMj – максимальная длина очереди j; QCj – количество входов в очередь j;

QZj – количество "нулевых" входов в очередь j;

QTj – среднее время пребывания транзакта в очереди j (округленно) с учётом «нулей»;

QXj – среднее время пребывания транзакта в очереди j, исключая "нулевые" входы (округленно).

Пример: Q$TOWRK1, QM3 , QC$QUEE2

Первый СЧА имеет значением длину очереди TOWRK1 на

момент обращения, второй СЧА дает максимальное значение очереди с номером 3 на момент обращения к СЧА, третий СЧА содержит количество входов в очередьQUEE2.

Собирать статистику об очередях можно с помощью блока

QTABLE.

“Записать в таблицу время пребывания транзакта в очереди”

Имя_таблицы QTABLE Имя_очереди

,Правая_граница_первого_интервала, Ширина_интервала,Количество_интервалов

Пример: QUTBL QTABLE QTOWR,50,10,7

Блок QTABLE аналогичен блоку TABLE (п.2.13) для сбора статистики о любых значениях модели. В отличие от блока TABLE описательный блок QTABLE не требует никаких дополнительных выполняемых блоков.

24

2.5. Логические ключи. БлокиLOGIC и GATE

Объекты типа "логический ключ", принадлежащие к типу "оборудование", применяются в моделях для управления потоками транзактов. Логический ключ может находиться в одном из двух состояний: " включен" (true) или " выключен" (false). В начале моделирования все ключи выключены.

Для установления состояния ключа используется блок

LOGIC.

“Установить значение логического ключа”

[Метка] LOGIC S | R | I Имя_ключа

"S" – включение, "R" – выключение, "I" – инвертирование. В поле операндов А этого блока указывается номер или имя логического ключа. В позиции 14 поля операции (через один пробел после слова LOGIC или через подчеркивание) указывается условное обозначение того действия, которое

должно быть выполнено над этим ключом.

Пример: LOGIC S RTY1 или LOGIC_S RTY1

Блок устанавливает значение логического ключа RTY1 в состояние "включен" не зависимо от того, в каком состоянии был ключ.

По умолчанию все ключи с началом моделирования установлены в состояние R(eset).

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

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

“Проверить условие”

[Метка] GATE Операция Что_проверяется[,Метка_блока]

Операция -> LS | LR | NI | I | NU | U | SE | SNE | SF | SNF Пример: GATE NU WERK1,TOWRK2

Мнемоническое обозначение проверяемого условия записывается в поле операции, отступив один пробел от слова GATE или через подчеркивание, т.е. в колонках 13–15. Обозначение объекта, состояние которого проверяется,

25

записывается в поле А блока GATE.

Блок разрешает вход транзакта (пропускает его через себя) при выполнении указанного в нем условия.

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

Когда при невыполнении условия в блоке GATE нужно передать транзакт на другой блок, метку этого блока следует записать в поле В блока GATE.

Мнемонические обозначения состояний для оборудования в GPSS следующие:

для устройств

NU – устройство свободно (не используется);

U – устройство занято посредством блоков SEIZE или

PREEMPT;

NI – устройство работает без прерывания (не захвачено блоком PREEMPT);

I – устройство обслуживает прерывание (захвачено блоком PREEMPT);

для накопителей

SE – накопитель пуст; SNE – накопитель не пуст;

SF – накопитель заполнен полностью; SNF – накопитель заполнен не полностью; для логических ключей

LR – ключ выключен;

LS – ключ включен.

В качестве примера приведен участок модели, имитирующей прохождение заявок через СМО с тремя последовательно расположенными приборами, которые в модели обозначены 1, 2, 3, со временами обслуживания 10,

20, 30.

Дисциплина обслуживания такова, что, если прибор

занят, то заявка передается на блок с именем OUT.

Пример:

 

Метка

Операция

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

 

GATE NU

1,OUT если устройство 1

26

*занято, то передать транзакт на блок OUT

 

SEIZE

1

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

 

ADVANCE

10 обслуживание

 

RELEASE

1

освобождение устройства 1

 

GATE NU

2,OUT

если устройство 2

* занято, то передать транзакт на блок OUT

 

SEIZE

2

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

 

ADVANCE

20 обслуживание

 

RELEASE

2

освобождение устройства 2

 

GATE NU

3,OUT

если устройство 3

* занято, то передать транзакт на блок OUT

 

SEIZE

3

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

 

ADVANCE

30 обслуживание

 

RELEASE

3

освобождение устройства 3

 

 

 

 

OUT

 

 

 

2.6.Создание и уничтожение транзактов.

БлокиGENERATE и TERMINATE

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

“Создать транзакт”

GENERATE

[Среднее_значение_времени_между_транзактами] [,Отклонение_от_среднего] [,Время_до_первого_транзакта] [,Количество_порождаемых_транзактов] [,Приоритет_транзактов] [,Количество_параметров_ транзакта][,F|H].

Операнды блока определяют режим работы генератора

иатрибуты создаваемых транзактов.

Вполях А и В этого блока задается интервал системного времени между соседними моментами создания транзактов (интерпретация этих полей в блоках ADVANCE и GENERATE аналогична). В поле B может быть обращение к функции.

Среднее значение времени по умолчанию – 1. Отклонение по умолчанию – 0.

27

Вполе С – момент выхода первого транзакта.

Вполе D – число транзактов, которые должны быть созданы блоком. Если D пусто, то блок генерирует транзакты до тех пор, пока не будет остановлено моделирование. Операнд D показывает, сколько транзактов выйдет из GENERATE. Сколько транзактов дойдёт до конца модели, зависит от работы модели.

Поле E служит для задания приоритета транзакта (PR). Если поле опущено, то приоритет транзакта равен 0. В противном случае приоритет транзакта может быть задан в пределах от 0 до 127.

Поле F служит для задания количества параметров транзакта(P1, P2, P3,…). Если поле опущено, то количество параметров транзакта равно 12. В противном случае количество параметров транзакта может изменяться от 0 до

100.

Поле G служит для задания формата параметров транзакта. Если поле опущено, то формат параметров транзакта равен полуслову H. В противном случае формат параметров транзакта может быть слово F или полуслово H.

По смыслу блока транзакты не должны входить в

GENERATE.

Пример:

GENERATE 10,,150,1000,64,25,H

Данный блок генерирует транзакты каждые 10 единиц времени, начиная с момента 150. Всего будет создано 1000 транзактов, каждый из которых имеет приоритет 64 и 25 параметров формата «полуслово».

Замечания.

1.После создания транзакта все параметры имеют нулевое значение. Обозначение параметров: P1 , P2, Р3 и т.д.

2.Каждый транзакт имеет стандартный числовой атрибут "отметка времени" – М1, в который блок GENERATE записывает время входа транзакта в систему.

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

28

искажению временных характеристик входного потока транзактов.

Для обеспечения выхода транзакта из блока GENERATE за ним помещают блок ADVANCE 0. В этом случае все транзакты при невозможности перемещаться далее по модели скапливаются в этом блоке.

Пример:

 

Метка

Операция

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

 

GENERATE

23,7

 

ADVANCE

0

 

SEIZE

WERK1

Блок TERMINATE служит для удаления из модели входящих в него транзактов. Если в поле А этого блока указано какое-либо число, то интерпретатор уменьшает на это число значение глобального "счетчика уничтожений", служащего для определения конца моделирования. (Моделирование прекращается, когда значение счетчика станет равным 0). Начальное значение счетчика определяется управляющим оператором START.

“Уничтожить транзакт”

[Метка] TERMINATE [Значение_вычитаемое_из_счетчика_в_START]

Пример: TERMINATE 1

Если у всех блоков TERMINATE опущено поле А, т.е. упомянутый счетчик не изменяется, то моделирование будет продолжаться до тех пор, пока задача не будет исключена оператором ЭВМ, либо снята операционной системой по истечении времени, либо когда все транзакты, количество которых указано в GENERATE, пройдут через TERMINATE.

СЧА для транзактов:

Pj – значение j-го параметра транзакта;

P*j – косвенная адресация: значение j-го параметра является адресом, номером (параметра), значение которого используется;

М1 – время пребывания транзакта в системе от момента выхода из блока GENERATE до момента обращения к параметру;

МРj – содержит разность между текущим системным временем, которое обозначается как С1, и значением Рj;

29

МР*j – косвенная адресация: значение j-го параметра является адресом, номером (параметра), значение которого используется, таким образом, параметр содержит разность между текущим системным временем, которое обозначается как С1, и значением параметра, номер которого – это значение параметра j;

PR – приоритет транзакта.

Пример: P1, MP7, PR, P*4, MP*2

Первый СЧА P1 позволяет получить значение первого параметра. Второй СЧА имеет своим значением разность между системным временем С1 на момент обращения к СЧА и значением Р7. Обращение к PR позволяет получить значение приоритета транзакта. Если значение четвёртого параметра транзакта P4 равно 5, то обращение P*4 даёт значение пятого параметра P5. Если значение второго параметра транзакта P2 равно 7, то обращение MP*2 даёт разность между значением системного времени С1 и значением седьмого параметра P7.

2.7. Размножение транзактов. Блок SPLIT

При прохождении транзакта через блок SPLIT производится генерация определенного количества копий этого транзакта в соответствии с числом, заданным в поле А этого блока. Блок SPLIT образует “семейство” транзактов. Исходный (порождающий) транзакт, пройдя блок SPLIT, поступает на вход следующего за ним блока, а его копии – на вход блока, метка которого указана в поле В блока SPLIT

“Создать копии”

[Метка] SPLIT Количество_копий,Метка_блока [,Значения_параметров][, Количество_параметров]

Пример: SPLIT 11,TOWERK

Транзакт, который вошел в блок, пройдет на следующий блок, и одновременно на блок с меткой TOWERK будет направлено 11 транзактов. Всего в “семействе” будет 12 транзактов.

Если в блоке SPLIT не заданы поля С и D, то создаваемые им транзакты будут иметь те же значения параметров, что и исходный транзакт.

30