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

Комплекс по МСиП 2014 / Операторы GPSS

.htm
Скачиваний:
20
Добавлен:
15.04.2015
Размер:
246.14 Кб
Скачать

Операторы GPSS На главную |Блоки|Основные сокращения|Общие положения |Примеры операторов| Алгоритм ИМ |Задания |Программы к заданиям|Примеры моделей Операторы языка описания модели

 Версия языка описания модели и режимов моделирования, реализованная в системе GPSS World, содержит 53 типа блоков (операторов). В зависимости от назначения операторы подразделяются на несколько групп.

1.                  Операторы, осуществляющие модификацию атрибутов транзактов:

a)                 генерирование и уничтожение транзактов: GENERATE, SPLIT, TERMENATE, ASSEMBLE;

b)                 временная задержка: ADVANCE;

c)                  синхронизация движения двух (MATCH) и нескольких (GATHER) транзактов;

d)                 изменение параметров транзактов: ASSIGN, INDEX, MARK, PLUS;

e)                 изменение приоритета транзакта: PRIORITY.

2.                  Операторы, изменяющие последовательность движения транзактов (операторы передачи управления): DISPLACE, TRANSFER, LOOP, TEST, GATE.

3.                  Операторы, связанные с группирующей категорией: ADOPT, ALTER, EXAMINE, JOIN, REMOVE, SCAN.

4.                  Операторы, описывающие объекты аппаратной категории:

a)                 одноканальные устройства: EQU, RELEASE, PREEMT, RETURN, FUNAVAIL, FAVAIL;

b)                 многоканальные устройства (памяти): ENTER, LEAVE, SAVAIL, SUNAVAIL;

c)                  ключи (логические переключатели): LOGIC.

5.                  Операторы, сохраняющие необходимые значения для дальнейшего использования: SAVEVALUE, MSAVEVALUE.

6.                  Операторы, обеспечивающие получение статистических результатов:

a)                 очереди: QUEUE, DEPART;

b)                 таблицы: TABULATE.

7.                  Операторы для организации списка пользователя: LINK, UNLINK.

8.                  Операторы для организации ввода-вывода:

a)                 открытие/закрытие файла: OPEN/CLOSE;

b)                  считывание/запись в файл:  READ/WRITE;

c)                  установка позиции текущей строки: SEEK.

9.                  Специальные операторы: BUFFER, COUNT, EXECUTE, INTEGRATION, TRACE, UNTRACE.

Замети, что в терминологии системы GPSS World одноканальным называется устройство, которое может обрабатывать только один транзакт; многоканальным – которое может обрабатывать одновременно несколько транзактов (последнее может использоваться для имитации оборудования, осуществляющего параллельную обработку).

Основные операторы языка GPSS World и способы их применения с пояснениями приведены ниже в виде примеров с конкретными значениями подполей в поле переменных.

В записи оператора выделяют четыре части (четыре поля):

<метка> <название> <поле переменных> <комментарии>.

Назначение меток такое же, как и в других алгоритмических языках. В поле операции записывается название оператора.

В поле переменных выделяют подполя (далее будем называть их операндами), разделяемые при записи запятыми и служащие для указания чисел, СЧА, символов, обозначений меток и т.п. Операнды могут быть пустыми. Операнды поля переменных условно обозначают буквами A, B, C, D, E, F, G, H, I  и отделяют друг от друга запятыми. Назначение каждого операнда указывается при описании оператора.

Комментарий записывается после последнего непустого операнда через один или несколько пробелов. Наличие символа «*» в начале строки указывает, что это комментарий. Комментарий не является обязательным.

Пример, поясняющий структуру оператора:

MET1   GENERATE    30,5        Генерация транзактов.

В данном примере оператор имеет метку МЕТ1, имя GENERATE, операнды поля переменных А=30 и В=5, а также комментарий «Генерация транзактов».

Для генерации и других операций с транзактами используются операторы GENERATE и FUNCTION.

Поле переменных оператора GENERATE может иметь до пяти операндов. Операнд А оператора GENERATE задает среднее время поступления транзактов, В – модификатор среднего времени, С- начальная задержка создания первого транзакта, D- число создаваемых транзактов (если поле пусто, то генерируется неограниченное число транзактов, Е- приоритет (если значение не задано, то приоритет 0). Чем больше значение Е, тем больше приоритет.

GENERATE 12,4,50,5,1 - генерация транзактов, интервалы времени между появлениями транзактов распределены равномерно в диапазоне [12-4, 12+4], первый транзакт появится с задержкой в 50 единиц модельного времени, всего будет создано 5 транзактов, приоритет транзактов равен единице.

GENERATE 12,4,50,,1 - то же, но количество генерируемых транзактов неограничено.

GENERATE 6,FN$FFF,50,5,1 - то же, но интервал времени между появлениями транзактов есть целая часть произведения числа 6 на значение функции FFF.

GENERATE  ,,0,3 – создание трех транзактов в момент времени 0.

FNK FUNCTION RN1,C4 0,0/0.1,0.8/0.5,1.6/1.0,1.9 - описание функции FNK, ее аргументом является случайная величина (на это указывает значение RN1), равномерно распределенная в диапазоне [0,1], функция является непрерывной числовой (указатель С), заданной таблично четырьмя точками: (0;0), (0.1; 0.8), (0.5, 1.6), (1.0; 1.9).

FNK FUNCTION *2,D4 0,12/1,9/2,8/3,6 - то же, но аргументом является значение второго параметра транзакта, для которого вычисляется значение дискретной величины (D) числовой функции FNK, заданной таблично четырьмя узловыми точками. Это текущее значение округляется до ближайшего большего значения аргумента в узловой точке.

ADVANCE  A,B - задержка транзакта на время, определенное содержимым операндов A и B, смысл величин, записываемых в них, такой же, как и в операторе GENERATE.

ADVANCE  13,5 - задержка транзакта на время, определяемое случайным образом по равномерному закону в интервале [8,18] единиц времени.

Значение операнда В должно быть В≤А.

ADVANCE  Р1 – задержка на число единиц времени, указанных в первом параметре транзакта.

ADVANCE  PER1,FN*2 – задержка на число единиц времени, равное произведению значения переменной PER1 на значение функции, номер которой указан во 2-ом параметре активного транзакта.

TERMINATE 1 - удаление транзакта из системы, при этом содержимое итогового счетчика уменьшается на 1 единицу, моделирование заканчивается, если содержимое счетчика станет равным или меньше нуля.

SPLIT 3,LLL,6 - копирование транзактов, в данном случае создаются три копии исходного транзакта, исходный транзакт направляется в следующий по порядку оператор, а созданные копии - в оператор с меткой LLL, при этом параметр 6 основного транзакта увеличивается на единицу, а транзактов копий - на 2, 3 и 4 соответственно.

ASSEMBLE 5 - собирается 5 транзактов, первый из вошедших в оператор транзактов продолжит движение в следующий оператор, остальные четыре уничтожаются.

GATHER 3 – транзакты задерживаются в операторе, пока их число не станет равным значению поля А (в данном случае – 3). Затем все транзакты поступают в следующий оператор.

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

Каждый транзакт может иметь несколько параметров, закреплённых только за ним. Каждый параметр имеет номер, с помощью которого ведётся обращение к нему, и числовое значение. Оба этих числа целые с неограниченными значениями и точностью. Значение параметра активного транзакта может быть использовано при обращении к стандартному числовому атрибуту (СЧА) по номеру или имени. При обращении к параметрам можно использовать косвенную адресацию. В этом случае номер объекта GPSS требует записать в параметр активного транзакта.

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

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

С транзактом связаны следующие СЧА:

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

Pi -текущее содержимое i-го параметра активного транзакта,

PR-значение приоритета активного транзакта,

XN1-номер активного транзакта.

В параметры транзактов должны быть записаны числовые значения перед обращением к ним. Это можно сделать с помощью блоков (операторов) ASSIGN и TRANSFER SUB.

Оператор ASSIGN используется для задания или модификации значения параметра транзакта. Может иметь до трех операндов. В поле А задается номер параметра. Может быть именем, целым положительным число, СЧА, СЧА* параметром со знаком (+ или -). В поле В задается модификатор (число, текст, имя), если не задан, то - 0. Если параметр отсутствовал, то он создается. В поле С указывается номер модификатора- функции.

ASSIGN 2,12 - второй параметр транзакта получит значение 12.

ASSIGN 2,NAP - второй параметр транзакта получит значение NAP.

ASSIGN 3+,Q4 - изменится значение третьего параметра транзакта - к нему прибавится значение длины очереди 4.

ASSIGN 5+,4 – к текущему значению 5-го параметра транзакта прибавить 4.

ASSIGN 5-,-4 – от текущего значения 5-го-го параметра транзакта отнять (-4).

ASSIGN TEXT,”CRUISER” – назвать параметр транзакта именем TEXT и занести в него текст “CRUISER”.

Модификацию первого параметра транзакта можно выполнить с помощью оператора INDEX. В этом операторе операнд А – некоторый параметр транзакта, В- цифровая величина (константа, имя переменной).

INDEX 2,5 – к значению 2-го параметра добавляется 5 и результат заносится в 1-й параметр.

Параметру А транзакта можно присвоить значение величины системного времени АС1 используя оператор:

MARK A .

LOOP 6,MET - организация цикла: переход 5 раз к оператору с меткой MET и на шестой раз - к следующему по порядку оператору.

LOOP Р2,MET - организация цикла – если значение 2-го параметра транзакта равно К, то переход (К-1) раз к оператору с меткой MET.

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

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

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

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

Состояние устройства меняют операторы: SEIZE, RELEASE, PREEMPT, RETURN.

SEIZE PLOT - занятие устройства PLOT приходящим на его вход транзактом; если устройство занято, то транзакт задерживается в очереди к этому устройству.

Имя устройства или памяти рекомендуется задавать не менее чем тремя символами (чтобы случайно не спутать с именами СЧА).

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

RELEASE PLOT - освобождение устройства PLOT от обслуженного транзакта.

Если перед SEIZE задерживаются несколько транзактов с одинаковым приоритетом, они обслуживаются в соответствии с правилом: «первым пришел — первым обслужен». Блок PREEMPT приостанавливает обслуживание транзакта, захватившего устройства ранее, и дает возможность прерванному транзакту снова захватить устройство после того, как закончится обслуживание прервавшего транзакта:

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

Транзактам могут присваиваться приоритеты. Если приоритет не указан, то он принимается минимальным, т.е. равным 0. Если при выполнении оператора PREEMPT оказывается, что одно прерывание уже произошло (устройство обслуживает прерывание), то оператор не выполняется и соответствующий транзакт задерживается до тех пор, пока не освободится устройство. Затем обслуживается новый прерывающий транзакт, а не прерванный.

Если прерванный транзакт находится в блоке ADVANCE, то вычисляется остаток времени (от момента прерывания до момента выхода из блока ADVANCE) и полученное значение помещается в параметре, описанном в поле D блока PREEMPT. В этом случае прерванный транзакт будет послан в оператор, указанный в поле С блока PREEMPT. Прерванный транзакт продолжает претендовать на данное устройство.

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

PREEMPT    16

ADVANCE    150

RETURN       16

Вышеприведенная группа операторов реализует прерывание на устройстве 16, дает задержку обслуживания на 150 единиц, а затем происходит возврат устройства к обслуживанию прерванного транзакта.

PRIORITY 2 - транзакту присваивается приоритет 2. Операнд А может быть именем, целым числом, выражением, параметром.

Оператор FUNAVAIL выполняет операции, переводящие устройство в состояние недоступности. Недоступность устройства предупреждает занятие или прерывание устройства последующими сообщениями. При этом возможно задание специальных режимов работы оператора FUNAVAIL, обесп