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

Программирование в GPSS - Создание и уничтожение транзактов

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

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

Моменты модельного времени, в которые из блока GENERATE будут выходить транзакты, задаются операндами A,B и C.

Операнд A задает длительность интервалов времени между появлениями транзактов. Например, блок

GENERATE 100

 

будет генерировать транзакты через каждые 100 единиц модельного времени: первый транзакт выйдет в момент 100, второй – в момент 200, третий – в момент 300 и т.д. Число генерируемых транзактов будет неограниченным.

В поле B записывается модификатор. Если записанный в поле B СЧА является функцией FNj, то его называют «модификатор-функция», в противном случае – «модификатор-интервал». Модификатор используется для модификации дли­тель­ности интервалов времени, заданной полем А.

Рассмотрим вначале применение модификатора-интервала. Если он задан, то для каждого временного интервала поступления транзактов длительность опре­де­ля­ет­ся как значение случайной величины, равномерно распределенной от «А-В» до «А+В». Например, блок

 

GENERATE 10,5

 

будет генерировать транзакты через интервалы времени, длительность каждого из которых выбирается случайно в пределах от 5 до 15. Необходимо помнить, что время в GPSS всегда целое. Поэтому в пределах от 5 до 15 могут выбираться только целые значения времени. Каждое из этих 11-ти целых значений будет выбираться с одинаковой вероятностью. Таким образом, если в поле В задан модификатор-ин­тер­вал, то блок GENERATE генерирует случайный поток транзактов, в котором время между транзактами равномерно распределено в диапазоне «А±В» и имеет среднее значение «А».

Если же в поле В задан модификатор-функция, то для каждого временного интервала поступления транзактов длительность определяется как произведение «А*В».

Пусть, например, в модели имеются строки

DIS FUNCTION C1,D3

3000,3/5000,2/6000,1

GENERATE 10,FN$DIS

 

В этом случае блок GENERATE будет генерировать транзакты вначале через каждые 30 единиц времени, пока модельное время не достигнет 3000 единиц, затем - через каждые 20 единиц времени, пока время не достигнет 5000 единиц, а после этого - через каждые 10 единиц времени.

Если использовать блок

GENERATE 1000,FN$EXP,

 

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

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

Ко всему сказанному об использовании полей A и В в блоке GENERATE необходимо добавить, что:

- операнды A - D могут быть не заданы; в этом случае принимаются их значения по умолчанию: A = 0, B = 0, C=1, D = Ґ.

- если при вычислении значения операнда C получен нуль, то симулятор игнорирует это значение и принимается C = 1;

- если операнд A не задан или равен нулю, то обязательно должен быть задан операнд D.

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

Пример. Задания поступают в ЭВМ через каждые 5±5 мин.

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

 

GENERATE 5,5 ;ПОСТУПЛЕНИЕ ЗАДАНИЙ.

 

Однако при таком описании потока заданий возникает заметная численная ошибка дискретизации: Время между поступлениями реальных заданий распределено непрерывно в интервале от 0 до 10 мин, а модельное время между транзактами может принимать только значения 1,2,3,...,10. Для уменьшения роли такой численной ошибки можно в качестве единицы времени выбрать секунду. Тогда блок, моделирующий поступление заданий, примет вид:

GENERATE 300,300 ;ПОСТУПЛЕНИЕ ЗАДАНИЙ.

 

Пример. Задания поступают в ЭВМ через каждые 5 мин; первое задание поступает в 0 ч, последнее - в 6 ч. Принимая за единицу времени секунду, можно поступление заданий представить в модели следующим блоком:

 

GENERATE 3000,,0,73.

 

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

Начальное значение счетчика транзактов задается в команде START. Когда в результате входа очередного транзакта в блок TERMINATE значение счетчика становится нулевым или отрицательным, симулятор прекращает выполнение модели и передает управление программе вывода, которая распечатывает накопленные симулятором данные о модели.





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

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


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




Разделы



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