Операторы блоков

Профессиональная версия GPSS / Н насчитывает более 60 операторов блоков. Чтобы уяснить отличие от предыдущих версий все блоки можно условно разделить на три группы:

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

2. блоки, дублирующие некоторые новые и ряд старых операторов управления и описания и отличающиеся от них тем, что они вводятся непосредственно в ядро программы. Это сделано для удобства написания и эксплуатации модели. В настоящее время известно 12 таких блоков-дублеров:

BCALL, BCLEAR, BCLOSE, BFILEDEF, BGETLIST, BGETSTRING, BLET, BPUTPIC, BPUTSTRING, BRESET, BRMULT, BSTORAGE

3. Блоки, описывающие новые действия, возникшие после появления в языке дебаггера, например ATNWITE, позволяющий транзактам ожидать следующей интерактивной сессии.

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

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

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

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

- Квадратные скобки используются для необязательных элементов.

- Формат записи операторов включен в < >.

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

- Блокам надо стремиться присваивать символические имена, а не номера.

- Первым блоком в ядре программы всегда является GENERATE

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

К данной группе относятся операторы GENERATE, ADVANCE и TERMINATE. Оператор GENERATE служит для создания (генерации) транзактов в ИМ с заданными законами распределения интервалов поступления и имеет вид:

< GENERATE A,B,C,D,E,F,G,H,I>

Операнды А, В,..., I указывают следующие характеристики входного потока (если какие-либо операнды отсутствуют, то им по умолчанию присваиваются стандартные значения):

А — среднее время поступления транзактов (по умолчанию — 0) или встроенная функция;

В— модификатор среднего времени (0);

С — время задержки первого транзакта (0);

D — количество создаваемых блоком транзактов (∞);

Е — приоритет транзактов (0);

F...,I— количество и формат параметров транзактов

Если в поле F записан "0", то у транзактов нет параметров.

Примеры:

а) GENERATE, 10,2,1000,,4

б) GENERATE, 100,FN$ЕХРОN,,100,,5РВ

а) время поступления транзактов распределено равномерно на интервале [8, 12] (или 10 ± 2); первый транзакт будет создан в момент времени, равный 1000 единиц; всем транзактам присваивается приоритет 4;

б) время поступления транзактов распределено экспоненциально со средним значением 100; генерируется только 100 транзактов с нулевым приоритетом; каждый транзакт имеет по 5 параметров форматом "байт".

Для задержки транзактов на заданное время используется оператор ADVANCE

< ADVANCE A,B >

Операнды А и В аналогичны соответствующим операндам в операторе GENERATE.

Примеры:

ADVANCE 100,FN$ЕХРON

ADVANCE 10,2

Оператор TERMINATE уничтожает транзакты (удаляет из ИМ) и имеет вид:

< TERMINATE A >

Операнд A (по умолчанию — 0) принимает значения от 1 до бесконечности и указывает число, на которое уменьшается содержимое счетчика числа завершений, значение которого задается в управляющей карте START в поле операндов А (см. далее).

Примеры:

а) TERMINATE - ноль по умолчании

б) TERMINATE 2

а) транзакт уничтожается, счетчик числа завершений не изменяется;

б) в отличие от а) счетчик числа завершений уменьшается на 2.

Примечание:

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

Число TERMINATE также не ограничено, но только один из них имеет значащее значение операнда А.

Примечание: Следует отметить, что операторы GENERATE и TERMINATE относятся к числу особых. GENERATE допускает только выход из него, попытка войти в оператор приводит к машинной ошибке. TERMINATE наоборот допускает только вход!

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

Пример таймера:

GENERATE A, где А – время проведения испытаний.

TERMINATE A, где А - число уничтожаемых транзактов. Для таймера оно обычно равно 1.

Значение операнд А в операторе управления START при этом также равно 1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: