С помощью какого оператора задается емкость памяти gpss

Обновлено: 05.07.2024

Общие сведения о формате операторов GPSS. В GPSS для ссылки на числа, блоки и объекты используются имена (идентификаторы). Имя представляет собой алфавитно-цифровую последовательность длиной до 20 символов в GPSS/PC и до 250 символов в GPSS World, которая начинается c буквы. Допускается использование сим­волов только латинского алфавита, цифр и знака подчеркивания.

Формат GPSS-блоков такой:

[Номер cmpo ки ][< Метка >] < Операция > < Операнды > <; Ком­ментарии >

Номер строки. Обязательное поле для GPSS/PC (в GPSS World – игнорируется). Начинается c первой позиции строки. Представляет собой десятичное число.

Метка (имя блока). Содержимым поля является имя – последо­вательность символов, начинающаяся c буквы. В некоторых операто­рах это поле является обязательным.

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

Операнды. Блоки могут иметь операнды. Операнды блоков за­дают информацию, специфичную для действия данного блока. Число операндов блока зависит от типа блока. В блоках не может использоваться больше семи операндов. Операнды в общем случае обознача­ются символами: А, В, C, D , E , F , G. Значения операндов определя­ются типом блока. Одни операнды некоторых блоков должны быть определены всегда,адругие могут задаваться или не задаваться (т.е. являются необязательными). Операнды следуют один за другим и отделяются запятыми или одним пробелом. Если операнд опущен, то вместо него ставится запятая. Между операндами не должно быть более одного пробела, так как это будет означать, что операнды за­кончились и интерпретатор прекращает чтение строки.

Комментарии. Необязательное поле. Комментарии отделяются от поля операндов символом «;». Допускается запись комментария c начала строки. В этом случае в первой позиции строки ставится символ «;» или «*». В GPSS/PC допускаются комментарии c использова­нием заглавных или строчных букв только латинского алфавита, в GPSS World также допускается использование символов кириллицы.

Строка описания блока может содержать до 79 символов в GPSS/PC и до 250 символов в GPSS World. При описании форматов квадратные скобки [ ] указывают на необязательность поля.

Именами и метками не могут быть названия или начальные символы названий блоков, операторов, команд и СЧА. Во избежание конфликтов c ключевыми словами ре­комендуется в именах использовать символ подчеркивания.

Блок GENERATE (ГЕНЕРИРОВАТЬ) – это блок, через кото­рый транзакты входят в модель. Не существует ограничений на коли­чество разных блоков GENERATE в одной модели.

Интервал времени между последовательными появлениями транзактов из блока GENERATE называют интервалом поступле­ния. Когда транзакт входит в модель через блок GENERATE. интерпретатор планирует время поступления следующего транзакта путем розыгрыша случайного числа c соответствующим распределением интервалов поступления на время, равное текущему значению ЧАСОВ плюс разыгранное значение. При достижении этого значения модельного времени следующий транзакт вводится в модель через блок GENERATE и т.д.

Разработчик должен задать функцию распределения интервалов поступления транзактов в блоке GENERATE.

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

GENERATE [A],[B],[C],[D],[E]

Ta 6лица 4.2

* Если опущено поле операнда, транслятор проставляет значения по умолчанию или выдает ошибку.

А – среднее значение интервала поступления;

В – величина разброса возможных значений относительно сред­него значения. (Если операнд В не задается, то интервал времени по­ступления – детерминированная величина);

C – момент времени, в который в блоке GENERATE должен появиться первый транзакт. (После этого первого прихода все ос­тальные приходы транзактов возникают в соответствии c распределе­нием, заданным операндами А и В);

D – ограничитель общего числа транзактов, которое может вой­ти в модель через данный блок GENERATE на протяжении времени моделирования. (Если это число достигнуто, данный блок GENER ­ ATE перестает быть активным);

Е – уровень или класс приоритета каждого из транзактов. кото­рые вводятся в модель через данный блок GENERATE . (Всего суще­ствует 128 разных уровней, которые задаются c помощью чисел от 0 до 127. Чем больше число, тем выше приоритет).

1. Транзакты не могут входить в блок GENERATE , так как он сам их генерирует.

2. Если в модели GPSS/PC встречаются подряд два или больше блоков GENERATE , то последний блок пере­определяет операнды предыдущих блоков. В GPSS World транслятор выдает ошибку.

3. Операнды не могут быть отрицательными числами.

Операнды А, В, C целочисленные (в GPSS World могут быть действительными числами).

Пример 4.1

1. Задание равномерного закона распределения:

GENERATE 6,4

Операнды: A = 6, В = 4. Интервал времени поступления является случайным числом со средним значением 6 и полем допуска 8, то есть он может приобретать только одно из девяти разных значений: 2, 3,4,5,6,7,8,9, 10.

2. Задание детерминированного значения интервалов поступле­ния:

GENERATE 10

Операнды: A = 10, В = 0 (по умолчанию). Транзакты входят в модель каждые 10 единиц модельного времени.

3. Генерирование одного транзакта.

GENERATE . 1

Операнды: A = В = C = 0 (по умолчанию), D = 1. В нулевой мо­мент в модель входит один транзакт.

Транзакты удаляются из модели, попадая в блок TERMINATE (ЗАВЕРШИТЬ). В этот момент освобождается память, выделенная под транзакт. Эти блоки всегда позволяют выйти всем транзактам, которые пытаются это сделать. В модели может быть любое количе­ство блоков TERMINATE . Формат блока:

TERMINATE [ A ]

Счетчик завершения – это ячейка в памяти ЭВМ, которая хранит целое положительное число. Начальное значение этого счетчика ус­танавливается в начале моделирования. Оно равняется значению опе­ранда А команды START (НАЧАТЬ). В процессе моделирования транзакты попадают в блок TERMINATE и, таким образом, умень­шают значение счетчика на величину операнда А. Моделирование за­канчивается, когда значение счетчика становится равным нулю или отрицательному числу.

1. В модели может быть много блоков TERMINATE , но счетчик завершения – один, c начальным значением, ука­занным в команде START .

2. Не путать ограничитель транзактов в блоке GENERATE и счетчик завершения. Ограничитель задает число тран­зактов, которые войдут в модель, А счетчик – число транзактов, кото­рые выйдут из модели. По окончании моделирования транзакты мо­гут оставаться в модели.

Операнды обозначаются символами: A, B, C, D, E, F, G.

Перечислим основные операторы одноканальной системы массового обслуживания (СМО).

TERMINATE – удаление транзактов из модели.

TERMINATE [А]

TERMINATE 1 ; уменьшение на 1 ед.

Если блок TERMINATE стоит без значения, то уменьшение транзактов не происходит, так как по умолчанию стоит ноль.

Допустим модельное время выбрано в минутах, тогда моделирование на протяжении 24 часов в GPSS World будет выглядеть следующем образом 24*60 минут:

GENERATE 1440

TERMINATE 1

GENERATE 20,5

TERMINATE

START 10

Программа завершится, когда через неё пройдёт 10 транзактов.

SEIZE [А]

RELEASE [А]

Операторы SEIZE и RELEASE применимы только для одноканальной системы массового обслуживания.

ADVANCE – реализация задержки во времени (задержать).

В качестве примера запишем

Это значит, что значения обслуживания транзакта принимаются в диапазоне от 3 до 13.

Insert GPSS Block into Model Object

Среднее время прихода клиента к железнодорожной кассе для покупке билета составляет 12±3 минут. Время оформления билета кассиром составляет 5±2. Составить программу и промоделировать обслуживания кассиром 10-ти клиентов.

Модель одноканальной СМО в программе GPSS World.

GENERATE 12,3 ; время генерирования прихода клиентов
QUEUE QKASSA ; занять очередь
SEIZE KASSA ;занять кассу
DEPART QKASSA ; освободить очередь
ADVANCE 5,2 ; обслуживание кассиром
RELEASE KASSA ; покинуть кассу
TERMINATE 1 ; удаление транзакта
START 10

Получаем листинг отчёта

Листинг отчета

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.


2085

Написание этого мини туториала вместе с разработкой моделей заняло 6 часов чистого времени.
буду признателен если статья доберется до потенциально заинтересованных читателей.


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



Для начала нам понадобиться сам GPSS-World.

Мы будем использовать бесплатную версию для студентов.
Также при изучении языка имитационного моделирования будет полезен учебник
Можно взять вот этот .
На мой взгляд, не очень доступно, но лучше чем ничего.

Итак необходимым инструментарием мы запаслись, теперь осталось подключить фантазию и придумать первую модель.
Меня никак нельзя назвать гуру имитационного моделирования в целом и GPSS-World в частности, подосновой для примеров приведенных тут служили материалы из этой книги . Но думаю, что составляемые модели имеют право на жизнь.
Давайте для начала рассмотрим такой случай.
Дано:
Офис в котором работает 10 сотрудников, Кулер в конце коридора до которого «шкваркать 4 минуты», сотрудники которые желают испить чаю и совершают путешествие к кулеру один раз в час. Время наполнения чаши с пакетиком живительной влагой составляет примерно 2 минуты. Рабочий день составляет 480 минут (8 часов без перерыва на обед так сказать)
Определить:
Коэффициент использования кулера сотрудниками офиса.
Создадим имитационную модель

Поскольку комментарии я оставлял на своем ломаном английском, то безусловно вижу смысл детально рассказать о функционировании модели.
Строка 1 — GENERATE . 10 — сам по себе блок GENERATE задает нам количество входящих требований (в данном случае сотрудников офиса), запись операторов вида . 10 говорит нам о том что первые три параметра пропущены, а четвертый параметр указывает на максимальное количество входящих требований. Блок GENERATE. Можно задать и с другими параметрами, но об этом я расскажу немного позже.
Как вы догадались " ;" — отделяет поле комментария. Еще немного о конструкции оформления кода, код читается слева направо, есть несколько блоков, которые желательно разделять табуляцией. Самый левый блок это метка (аналогична метке в др. языках программирования), затем идет сам блок (например generate) затем обычно идут его параметры, затем комментарии. Когда-то давно нас учили разделять эти блоки табуляцией, но это скорее вопрос эстетики. 1 пробела кажется тоже достаточно что бы все запустилось. Кстати там где написано все БОЛЬШИМИ буквами, лучше так и писать, а то может вылететь ошибка при исполнении.
Строка 2 — ADVANCE 4,0.8; Отвечает за временные характеристики процесса, чтобы было понятней в данном случае это значит, что работник идет к кулеру 4 минуты ± 0.8 минуты.
Таким образом первая цифра означает затраченные единицы времени (итерации), вторая цифра означает отклонение в большую или меньшую сторону, в книгах написано что значение отклонения генерируется случайным образом, может это и так, но каждый перезапуск система выдает одинаковые значения (не знаю может быть есть аналог randomize из старого доброго паскаля, но я его не нашел).
Блок ADVANCE также можно задать с другими значениями, но об этом чуть позже.
Строка 3 — DRINK QUEUE STAND; — вот тут мы встречаем нашу первую метку DRINK, после которой следует блок QUEUE, который создает очередь в эту очередь у нас будут попадать все кто направляется к кулеру промочить горло,. STAND – это скажем так идентификатор очереди.
Строка 4 — SEIZE COOLER – блок SEIZE определяет свободно ли наше устройство, в данном случае идентификатор устройства COOLER (ну или попросту кулер).
Строка 5 DEPART STAND — если прошлый блок дал нам положительный результат (кулер свободен), то срабатывает следующий за ним блок DEPART, который обеспечивает выход человека из очереди STAND.
Строка 6 — ADVANCE 2,0.8 человек, который вышел из очереди будет наливать себе примерно 2 минуты кипяток в кружку (ну плюс успеет поболтать с людьми в очереди к кулеру)
Строка 7 — RELEASE COOLER, сделав свое «мокрое» дело, человек освободит устройство COOLER, для следующего страждущего.
Строка 8 — ADVANCE 60,10 – данный блок учитывает время. Которое человек испивший воды, затратит на то чтобы собраться с силами и прийти к кулеру еще раз (по крайней мере я надеюсь, что моделируется именно это).
Строка 9 — TRANSFER ,DRINK – «И повторится все, как встарь» — сказал бы А. Блок, если бы был знаком с программированием. Данный оператор обеспечивает переход на метку DRINK.
Строка 10 – GENERATE 480 казалось бы с точки зрения программирования после перехода на метку в прошлом блоке, все что лежит ниже не имеет смысла, но это не так.(а почему так, я если честно не сильно вникал, но судя по опыту и выпадающим ошибкам, этот кусок воспринимается немного вне контекста предыдущих 8 блоков). Главное, что данный блок задает нам время выполнения всей модели, а именно 480 минут (8 часов)
Строка 11 — TERMINATE 1 – Этот бок вычитает из каждой счетчика итераций единицу. Без этого блока можно уйти в бесконечный цикл.
Строка 12 — START 1 – Говорит программе с какого момента цикла начать, мы начинаем с первой минуты.

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

результаты Модель 1 - коэффициент использования кулера


проанализируем результаты
Итак мы видим, что в среднем наш кулер загружен на 33%, то есть в нашей команде из 10 сотрудников получается примерно так как если бы к нему постоянно прикладывался Администратор Петр, Марья Васильевна из бухгалтерии и Менеджер проекта Василий Чуфыркин, ну и еще 0.33 человека, или например — кот. На самом деле этот блок текста не несет смысловой нагрузки, мне просто очень хотелось нарисовать кота и кулер и Марью Васильевну из бухгалтерии (все кроме кота личности сугубо выдуманные)


Хотя черт побери после того как я прочел это, могу смело утверждать, что кулер мог бы напоить 12 милых котиков =)


Но вернемся к теме.

Давайте рассмотрим, результаты выдачи.

Facility – это список всех наших работающих устройств, в данном случае только кулер.
Entries 79 – означает число подходов на обслуживание к устройству, в данном случае число человек с пустыми чашками составило 79 – за всю рабочую смену.
Util – коэффициент использования оборудования, Он говорит нам о том, что кулер бездествовал (1-0.33)*100%=67% всего времени.
AVE. TIME – среднее время использования кулера 1 человеком 2.002 минуты
AVAIL. – Доступность кулера, не знаю что это значит видимо еденица говрит, что он был доступен
DELAY = 0 – говрит нам о том, что чсло людей которые просто подошли к кулеру, расстроились и ушли с пустыми руками (кружкой), равно нулю.

Теперь переедем к нашей очереди (QUEUE)
Как видите тут указано имя созданной нами ранее очереди,
В которой максимально находилось 9 человек, в которую было 79 входов, и 48 нулевых входов (по всей видимости входов без ожидания в очереди), среднее время проведенное человеком в очереди равно 1.5 минуты. Cont. = 0 говорит нам о том, что на момент окончания моделирования в очереди никого не было.

Ну вот вроде бы все не плохо, но что будет если мы вернемся в сытый 2006
Год и наймем еще 30 сотрудников в наш офис?

результаты Модель 1 - коэффициент использования кулера при 40 сотрудниках


Как видно из модели, наш кулер почти перестанет простаивать, а среднее время в очереди составит аж 20 минут, что наводит на мысли либо о том, что нужен второй кулер, либо о том, что пора всех лишать премии за долгие чаепития.
Может быть данная модель, простовата, но даже она при проявлении некоторой фантазии позволяет нам оценить количество кулеров которое необходимо на этаже.
Но на текущий момент мы с вами еще не умеем, разрабатывать многоканальные модели обслуживания. Так убьем же двух зайцев, научимся многоканальному обслуживанию и заодно ответим на вопросов, которым мы с коллегой задались в самом начале статьи. (кто внимательный и помнит — молодец, тому счастья добра и безпохмельных выходных: )

При создании модели операторы call центра и абоненты, зададимся такими условиями
Дано:
2 оператора техподдержки обслуживают пользовталей, которые звонят пимерно раз в две минуты, Если один оператор занят трубку берет другой. Рабочий день составляет 480 минут (8 часов без перерыва на обед так сказать)
Определить:
Коэффициент загруженности сотрудников службы поддержки.

Как и в прошлый раз опишу построчно

Строка 1 — HELPDESK STORAGE 2 – Создаем накопитель Служба поддержки емкостью 2 сотрудника
Строка 2 — GENERATE 6,3; вот мы и подошли к другому способу задачи блока генерации, в даннмо случае цифра 6 означает что примерно раз в 6 мнут появляется 1 звонок, цифра 3 означает что отклонения от шести минут составлят ± 1.5 минуы. Еще блок GENERATE можно было задать так
(Exponential(1,0,6)), вообще то что справедливо для ADVANCE, во многом справедливо и для GENERATE.
Строка 3 – ADVANCE (Exponential(1,0,2)),, — говорит нам о том сколько времени у звонящего уходит на то чтобы вспомнить телефон тех поддержки и набрать номер, а уходит у нас в среднем 2 минуты по экспоненциальному распределению. цифра 1 – выбирает генератор случайных чисел (от 1-7 как с ними работать я не разобрался), цифра 0 – определяет смещение (пока для меня тоже загадка), цифра 2 собственно минуты. Хочу добавить что существуют и другие законы распределения, по которым можно задать временной промежуток, но о них лучше почитать в учебнике. Который я указал вначале статьи.
Строка 4 — ENTER HELPDESK – вход в накопитель (входящий звонок)
Строка 5 — TRANSFER ALL,OPR1,OPR2,3 – говорит нам что данное событие обрабатывается для всех входящих вызовов (ALL), что операторы обработки начинаются с метки OPR1 и движутся с шагом в 3 блока пока не доберутся до метки OPR2
Строка 6 — OPR1 SEIZE OP1 — вот и наш первая метка, на которой происходит проверка занятости первого оператора службы поддержки (OP1)
Строка 7 — ASSIGN 1,OP1 – В случае если оператор 1 свободен. То мы передаем входящий звонок ему, если нет то через три строки (от 6-й) идем на строку 9
Строка 8 — TRANSFER ,COME — нет нужды узнавать о занятости второго оператора, переходим на метку COME
Строка 9 OPR2 SEIZE OP2 — если первый оператор был занят, проверяем второго
Строка 10 — - ASSIGN 1,OP2 – и отдаем звонок ему.
Строка 11 — COME LEAVE HELPDESK – звонок покидает накопитель служб поддержки
Строка 12 — ADVANCE 10,8 – время которое оператор затрачивает на то чтобы дать человеку совет как правильно вкрутить лампочку.
Строка 13 — RELEASE P1; — оператор помог человеку и освободился. P1 в данном случае это ссылка на некий указатель (или параметр ), этот момент я не могу объяснить, но он работает.
Строка 14 – TERMINATE – (ноль можно не писать по умолчанию и так ноль), если верить справки то в данном случае этот блок расскажет системе о том, что пора выводить эту итерацию из активного цикла и переходить к следующей. В любом случае без него система выдаст нам ошибку.
Строки 15- 17 аналогичны строкам первой модели.

В результате получим следующие данные

результаты Модель 2 - коэффициент использования операторов



Структура вывода похожа на структуру вывода первой модели, разве что вместо очереди — накопитель предлагаю вам с ней разобраться самостоятельно. Кстати параметры генерации отчета можно настроить (на этом компьютере у меня не установлен GPSS и нет желания его ставить, поэтому поверьте пока на слово, что в настройках программы есть такая возможность ну, а я если не забуду допишу в понедельник сюда, как это сделать)
Итак, мы видим, что наши операторы вполне приемлемо загружены примерно на 75% и 87 % соответственно. Будем считать, что двух операторов вполне достаточно, чтобы посоветовать людям как правильно вкрутить лампочку. Но мы же с вами — народ любопытный, давайте посмотрим, что будет если к ребятам подсадить еще одно нахлебника с телефоном.
Для этого рассмотрим немного модифицированную модель. Предлагаю вам разобраться с ней самостоятельно.

Результат под спойлером

результаты Модель 2 - коэффициент использования трех операторов



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

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

Давайте опять построчно

Строка 1 — INITIAL X$APPLES,3 ;1 задаем значение переменной, X$ в данном случае нам как-то указывает на название переменной, а цифра три это значение которое мы запишем в переменю APPLES (кстати я не фанат продукции APPLE просто в тот момент на общем столе лежало 3 яблока, а одно я забрал себе, прям как в детсадовских задачах по математике)
Строка – 2 GENERATE 1 – создадим 1 итерацию
Строка 3 — SAVEVALUE APPLES-,1; – сохраним в переменную яблоки ее значение минус один.
Строки 4-5 помогут нам закончить программу.



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

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

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

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

МКУ определяется до его использования командой STORAGE. Формат команды:

Name - имя МКУ. Символическому имени может быть поставлен в соответствие номер командой EQU . Это необходимо, если требуется обращаться к нескольким МКУ в блоках SELECT и COUNT или в других случаях. Операнд А может быть только целым положительным числом. Иные способы задания емкости вызывают ошибку.

В модели можно организовать функционирование МКУ в двух режимах:

  • занятие и освобождение МКУ;
  • недоступность МКУ.
6.2.10.1. Занятие многоканального устройства и его освобождение

Занятие и освобождение МКУ имитируется блоками ENTER (войти) и LEAVE (выйти). Форматы блоков:

Операнд А в обеих блоках используется для указания имени, соответствующего МКУ. Операнд B задает число устройств (элементов памяти), которое должно быть занято в блоке ENTER или освобождено в блоке LEAVE . По умолчанию операнд В = 1 . При В = 0 блок считается неработоспособным.

Когда транзакт входит в блок ENTER , операнд А используется для нахождения МКУ с указанным именем. Если такого МКУ нет, происходит останов по ошибке "Обращение к несуществующей памяти". Если МКУ существует и задан операнд B , он вычисляется, округляется до целого и полученный результат используется для оценки свободной емкости. Транзакт может войти в блок ENTER , если МКУ находится в доступном состоянии и достаточно емкости для выполнения запроса. В противном случае транзакт помещается в список задержки устройства в соответствии с приоритетом.

Когда транзакт входит в блок ENTER (см. блок-диаграмму), планировщик выполняет следующие действия:

  • увеличивает на 1 счетчик входов МКУ;
  • увеличивает на значение операнда B (по умолчанию на 1 ) текущее содержимое МКУ;
  • уменьшает на значение операнда B (по умолчанию на 1 ) доступную емкость МКУ.

Если транзакт при входе в блок ENTER запрашивает больше устройств (элементов памяти), чем определено командой STORAGE , т. е. ее операнд А меньше операнда B блока ENTER , возникает ошибка "Запрос элементов памяти превышает ее общую емкость".

МКУ никогда не может быть удалено из текущей модели, даже если команда STORAGE удаляется из рабочей программы. МКУ можно переопределить, т. е. изменить емкость другой командой STORAGE с тем же самым именем. Например:

Имитация обслуживания транзакта в течение какого-то промежутка времени также осуществляется блоком ADVANCE .

Командой STORAGE определяется МКУ с именем Nak емкостью 20 единиц. При входе транзакта в блок ENTER занимается 2 единицы и столько же освобождается в блоке LEAVE при выходе из МКУ.

При входе транзакта в блок ENTER произойдет останов по ошибке, так как транзакт будет пытаться занять больше каналов (21), чем определено (20) командой STORAGE . То же самое произойдет, если при выходе из блока LEAVE транзакт будет пытаться освободить каналов больше, чем определено командой STORAGE .

В данном примере определены три МКУ с именами Pun1 , Pun2 , Pun3 и емкостями 6 , 5 и 3 соответственно. Именам командами EQU поставлены в соответствие номера 1 , 2 и 3 .

Предполагается, что при входе транзакта в блок ENTER в его первом параметре (ссылка *1) содержится какой-либо один из трех номеров. Согласно этому номеру и занимается МКУ, а затем освобождается. Операнд B в блоках ENTER и LEAVE не используется, поэтому транзактом занимается и освобождается одна единица емкости МКУ.

6.2.10.2. Перевод многоканального устройства в недоступное состояние и восстановление его доступности

Недоступность МКУ моделируется блоком SUNAVAIL (символ S означает МКУ, UNAVAIL - недоступный). Формат блока:

Операнд А - имя или номер МКУ, может быть именем, положительным целым числом, выражением в скобках, СЧА, СЧА*параметр.

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

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

Нахождение в недоступном состоянии продолжается до тех пор, пока транзакт не войдет в блок SAVAIL .

Операнд А - имя или номер МКУ. Может быть таким же, как операнд А в блоке SUNAVAIL .

Если в момент перевода МКУ в доступное состояние в его списке задержки были транзакты, им предоставляется возможность занять МКУ в соответствии с дисциплиной "first-fit-with-skip" (первый подходящий с пропусками).

Транзакты, которым будет отказано в занятии МКУ, остаются в его списке задержки.

Замечание. Имитация выхода МКУ из строя, при котором все транзакты, находившиеся в МКУ на обслуживании, теряются, блоками SUNAVAIL и SAVAIL невозможна. Такая имитация возможна с использованием блока DISPLACE (см. п. 6.8.2).
6.2.10.3. Проверка состояния многоканального устройства

Состояние МКУ, как и состояние ОКУ, проверяется блоком GATE такого же формата

Отличие состоит в значениях условного оператора Х, которые могут быть следующими:

  • SE - МКУ, заданное операндом А , пусто;
  • SF - МКУ, заданное операндом А , заполнено;
  • SNE - МКУ, заданное операндом А , не пусто;
  • SNF - МКУ, заданное операндом А , не заполнено;
  • SNV - МКУ, заданное операндом А , не доступно;
  • SV - МКУ, заданное операндом А , доступно. Блок GATE также работает в двух режимах:
  • отказа во входе;
  • разрешении во входе и альтернативном выходе.

Если МКУ с именем Can не заполнено, т. е. имеются свободные каналы (элементы памяти), заданное в блоке GATE условие выполняется, и транзакт будет направлен к следующему блоку. Если МКУ заполнено, транзакт будет направлен к блоку с меткой Met5 .

Блок GATE позволяет только определить состояние не заполненности МКУ, т. е. наличие свободных каналов, но достаточно ли их для удовлетворения запроса, он не определяет.

Для проверки состояния МКУ могут также использоваться булева переменная и блок TEST [5]. Их использование позволяет расширить возможности по осуществлению проверок состояния, а также сократить машинное время, так как в одном блоке с помощью булевой переменной может проверяться сразу несколько условий.

6.2.10.4. Моделирование переключателей

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

  • включен ( ON или 1 );
  • выключен ( OFF или 0 ). В зависимости от состояния ключа изменяется направление движения транзактов.

Логический ключ моделируется блоком LOGIC. Формат блока:

Операнд А - имя или номер логического ключа. Может быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр.

Логический оператор Х - состояние логического ключа устанавливается в зависимости от следующих его значений:

  • S - ключ, заданный операндом А , включается;
  • R - ключ, заданный операндом А , выключается;
  • I - логический ключ инвертируется, т. е. состояние его меняется на противоположное, например, если был включен, будет выключен.

Состояние логического ключа проверяется также блоком GATE . Блок GATE имеет такой же формат, как и при проверке состояний ОКУ и МКУ, и два режима работы:

Операнд А - имя или номер проверяемого ключа. Может быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр.

Операнд B - метка блока, к которому будет направлен тран-закт при невыполнения условия, заданного оператором Х.

GPSS-модель представляет собой написанную на языке GPSS программу и включает в себя множество объектов, которые могут быть разбиты на 6 групп (рис.6.4):

· генераторы случайных чисел;

К основным объектам GPSS-модели относятся:

· операторы (блоки и команды) – основные объекты GPSS-модели, определяющие совокупность действий, которая должна быть выполнена в модели в соответствии с заданными в операторе параметрами, называемыми операндами;

· транзакты – динамические объекты, движущиеся в GPSS-модели от одного оператора (блока) к другому в заданной последовательности.


Объектами оборудования являются:

-· приборы (одноканальные устройства) – объекты, которые могут находиться в одном из двух состояний: свободном или занятом; при моделировании систем массового обслуживания используются для имитации процессов занятия и освобождения прибора, то есть для моделирования одноканальных СМО; занятие и освобождение прибора транзактом выполняется в GPSS-модели с помощью операторов SEIZE и RELEASE;

-· памяти (многоканальные устройства) – объекты, состоящие из множества элементов, которые занимаются и освобождаются транзактами, при этом один транзакт может занять один или несколько элементов памяти, но не более чем её ёмкость; при моделировании систем массового обслуживания «память» используется для имитации процессов занятия и освобождения приборов многоканальных СМО; ёмкость памяти задается в области описания GPSS-модели с помощью оператора STORAGE, а занятие и освобождение элементов «памяти» транзактом – с помощью операторов ENTER и LEAVE;

- очереди – объекты, используемые для накапливания транзактов, находящихся в состоянии ожидания какого-то события, например освобождения прибора или памяти; при моделировании систем массового обслуживания «очередь» используется для имитации процессов ожидания перед обслуживающими приборами; следует иметь в виду, что понятие «очередь» весьма относительное, поскольку в действительности транзакты, ожидающие освобождения прибора или памяти, заносятся в «список задержки» соответствующего прибора или памяти, при этом формирование списков задержки, то есть занесение в очередь и удаление из очереди, происходит автоматически, независимо от наличия операторов QUEUE и DEPART; последние используются только с целью сбора статистики по очередям путем фиксирования моментов поступления транзакта в очередь и удаления его из очереди;

-· логические ключи – объекты, которые могут находиться только в двух состояниях: «установлен» или «сброшен»; установка, сброс или инвертирование ключа осуществляется с помощью оператора LOGIC.

ВЫВОД

Объекты в GPSS-модели могут формироваться автоматически, либо должны объявляться с использованием специальных команд – операторов описания. К объявляемым объектам относятся: памяти, переменные, матрицы, таблицы, функции, а также параметры транзактов.

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