ТЕМА (1086517), страница 10
Текст из файла (страница 10)
В предыдущих параграфах мы описали операции, выполняемые интерпретатором. Это описание, тем не менее, не является достаточным. Например, нами был рассмотрен вопрос о движении транзактов от блока к блоку. Все еще не ясно, какой транзакт интерпретатор выберет следующим для продвижения в модели, когда другой транзакт прекратил двигаться, или в чем заключается cyть дисциплины обслуживания очереди "первым пришел - первым обслужен внутри одного приоритетного класса". На эти вопросы можно будет дать удовлетворительный ответ только после того, как будет рассмотрена логика, на которой основана работа интерпретатора.
В основном логика работы интерпретатора становится понятной из рассмотрения механизма отслеживания пути транзактов, движущихся в модели. Интерпретатор рассматривает каждый транзакт как элемент одной или нескольких цепей. Каждый транзакт может быть представлен как звено в цепи. Цепи являются открытыми, а не замкнутыми, следовательно, они имеют два конца, начальный и конечный. В качестве элемента цепи транзакт занимает определенное положение относительно начала цепи. Положение транзакта в цепи тесно связано с тем, как скоро транзакт должен снова вернуться в модель для продолжения движения. Последовательность обработки, в свою очередь, тесно связана с временем возникновений событий при выполнении моделирования.
Существуют цепи:
текущих событий;
будущих событий;
пользователя;
прерывания;
парности.
Имеется только одна цепь текущих и одна цепь будущих событий. В общем случае может существовать более чем одна цепь пользователя, цепь прерывания и цепь парности.
Изучение цепей текущих и будущих событий мы начнем здесь и далее будем продолжать его.
Цепь текущих событий состоит из тех транзактов, для которых планируется их продвижение в одном или нескольких блоках в течение текущего значения модельного времени или в течение ближайшего времени. В цепь текущих событий входят те транзакты, движение которых заблокировано ввиду текущих условий в модели. (По желанию пользователя транзакты могут быть перенесены из цепи текущих событий в цепь пользователя. Это можно сделать для уменьшения времени моделирования, использования нетипичной дисциплины обслуживания или для того и другого.Например,транзакт может быть временно заблокирован ввиду планирования его входа в блок SEIZE, когда требуемый прибор находится в состоянии "занято".
Цепь будущих событий состоит из таких транзактов, движение которых не планируется до наступления некоторого времени в будущем.
Описанные действия интерпретатора сведены в блок-схемы рис.12.1 и 12.2. Далее будут описаны эти фазы и объяснено, как действует интерпретатор.
Рис.12.1. Фаза коррекции таймера модельного времени интерпретатора GPSS.
Рис.12.2. Фаза просмотра интерпретатора GPSS.
УПРАЖНЕНИЯ §12
"Логика работы интерпретатора"
-
Общие вопросы по теме параграфов 12 и 13.
а) Что такое "время движения" ?.
б) Какая информация записывается в пятой позиции пятипозиционной записи транзакта?
в) Сколько всего существует цепей текущих и будущих событий?
г) В каком порядке располагаются транзакты в цепи будущих событий?
д) В каком случае могут возникнуть временные узлы в цепи будущих событий? Если они возникают, то как они разрешаются?
е) В каком порядке располагаются транзакты в цепи текущих событий?
ж) В каком случае могут возникнуть временные узлы в цепи текущих событий? Если они возникают, то как они разрешаются?
з) Как интерпретатор GPSS в момент начала фазы коррекции таймера определяет время будущего события в модели?
и) После того, как таймер модельного времени продвинут, сколько транзактов выбирается из цепи будущих событий и помещается в цепь текущих событий?
к) При таких условиях транзакт выбирается из цепи текущих событий и помещается обратно в цепь будущих событий?
л) В чем разница между пассивным и активным буферами транзактов в модели?
м) В каком порядке располагаются транзакты в пассивном буфере?
н) Почему нет необходимости разрешать проблему временных узлов в пассивном буфере?
о) Каким образом транзакты могут "жить" несколько раз в течение периода моделирования?
п) Проанализируйте следующее утверждение: "После каждой коррекции таймера модельного времени интерпретатор GPSS просматривает цепь текущих событий ровно один раз, а затем снова осуществляет коррекцию времени".
р) Почему может случиться так, что цепь текущих событий не обязательно должна быть пустой, прежде чем интерпретатор перейдет к выполнению фазы коррекции времени?
с) Проанализируйте следующее утверждение: "После завершения фазы ввода модели в цепи будущих событий находится ровно один транзакт для каждого блока GENERATE в модели".
т) Проанализируйте следующее утверждение: "Наименьшим временем движения, которое когда-либо может иметь транзакт, является 1".
у) Правильно ли то, что цепь текущих событий всегда пуста сразу после завершения фазы ввода модели? -
Продумайте, глядя на рис. 2.29, в чем различие между двумя сегментами, изображенными на рис. У4.
Рис.2.29. Фрагмент блок-схемы,показывающий логику работы интерпретатора при выходе транзакта из блока GENERATE и планировании прихода его последователя
Рис.У4.
§13 "Первый пример использования цепей текущих и будущих событий"
Рассмотрим, как интерпретатор GPSS использует цепи текущих и будущих событий на примере моделирования системы с одним прибором и очередью, представленном на рис. 13.1.
Рис. 13.1.Блок-схема для примера моделирования 2А.
Для этого надо сделать следующее:
-
Определить обозначения соответствующей информации о транзактах.
-
Задать распределения интервалов прихода и обслуживания транзактов.
-
Ввести таблицы, показывающие временную зависимость транзактов, находящихся в цепях текущих и будущих событий.
-
Пояснить действия, предпринимаемые интерпретатором, показом изменения информации о транзактах, перемещаемых в модели.
Обозначения для транзактов
Для транзакта имеется пять типов записей:
-
номер транзакта;
-
время, на которое запланирована попытка войти в следующий блок (время движения);
-
номер блока, через который транзакт сейчас проходит (текущий блок);
-
его уровень приоритета;
-
номер следующего блока, в который делается попытка войти.
Эта информация записывается в виде пяти символов в указанном порядке. Общий вид такой пятипозиционной записи представлен на рис.13.2,а. Численный пример представлен на рис.13.2,б.
Численный пример показывает, что транзакт номер 9 пытается в момент времени, равный 68, выйти из блока 5 и войти в блок 6. Транзакт номер 9 имеет нулевой приоритет.
Рис.13.2.[ Номер транзакта. Время движения. Номер текущего блока.
Уровень приоритета. Номер следующего блока]
[9.68.5.0.6]
Рис. 13.3. Перемещение транзактов между пассивным и активным буферами.
Как указывалось ранее, номер транзактам присваивает интерпретатор. Величина номера зависит от того, как много транзактов могут одновременно находиться в модели. Это число зависит от объема предоставляемой памяти. При объеме памяти в 64К максимальным числом транзактов является 200.
Ясно, что номера транзактов могут быть от 1 до 200. Транзакты могут принадлежать к одной из двух групп. Одна группа - это скрытая или пассивная группа транзактов, находящаяся в пассивном буфере, в отличие от транзактов, уже участвующих в модели. Другая группа хранится в активном буфере транзактов, т. е. они уже вошли в модель через один или более блоков GENERATE и пока еще не удалены из модели. (Существует еще один тип блоков, через которые транзакты могут войти в модель.)
Прежде чем начинается моделирование, транзакты в пассивном буфере располагаются в порядке возрастания номеров. В модели на 64К транзакты в пассивном буфере располагаются в порядке номеров 1, 2,....., 200. Этот буфер можно представить себе как расположенный "сверху - вниз" транзакт 1 находится в вершине буфера, транзакт 2 под ним и т.д. до последнего транзакта 200, находящегося в самом низу.
При возникновении необходимости ввести в модель транзакт интерпретатор достает его из вершины пассивного буфера. Этот транзакт вносится в модель через цепь будущих событий с помощью процедуры, которая будет описана ниже. И наоборот, когда возникает необходимость удалить соответствующий транзакт, его убирают из модели и помещают обратно в вершину пассивного буфера. Перемещение транзактов между пассивным и активным буферами показано на рис.13.3. Номера блоков присваиваются в том порядке, в котором стоят карты блоков в колоде. Например, на рис.13.5 представлено повторение распечатки программы рис.13.4 с номерами блоков, присвоенными интерпретатором. Номера блоков стоят в левой колонке.
Рис.13.4. Пример моделирования 2A. Модель и распечатка программы:
а -заполненный бланк для перфорации модели;
б - распечатка программы для модели, представленной в части а.
На бланке показаны поля имени (LOCATION),операции (OPERATION) и операндов (помечено символами А,В, С,D,Е,F,G). На распечатке поле имени отмечено символами * LOC.
а)
| LOCATION |
| OPERATION | A,B,C,D,E,F ------------------------> | ||||||||||||||||||||||||||||||||||||||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | 3 5 | 3 6 | 3 7 | 3 8 | 3 9 | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 | 4 6 |
|
|
|
|
|
| S | I | M | U | L | A | T | E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
| M | O | D | E | L |
| S | E | G | M | E | N | T |
| 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
| G | E | N | E | R | A | T | E |
| 1 | 8 | , | 6 |
| П | Р | И | Х | О | Д |
| К | Л | И | Е | Н | Т | О | В |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Q | U | E | U | E |
|
|
|
| J | O | E | Q |
| П | Р | И | С | О | Е | Д | И | Н | Е | Н | И | Е |
| К |
| О | Ч | Е | Р | Е | Д | И |
|
|
|
|
|
|
|
|
|
| S | E | I | Z | E |
|
|
|
| J | O | E |
|
| П | Р | И | Х | О | Д |
| В |
| К | Р | Е | С | Л | О |
| П | А | Р | И | К | М | А | Х | Е | Р | А |
|
|
|
|
|
| D | E | P | A | R | T |
|
|
| J | O | E | Q |
| У | Х | О | Д |
| И | З |
| О | Ч | Е | Р | Е | Д | И |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| A | D | V | A | N | C | E |
|
| 1 | 6 | , | 4 |
| О | Б | С | Л | У | Ж | И | В | А | Н | И | Е |
| У |
| П | А | Р | И | К | М | А | Х | Е | Р | А |
|
|
|
|
|
|
| R | E | L | E | A | S | E |
|
| J | O | E |
|
| О | С | В | О | Б | О | Ж | Д | Е | Н | И | Е |
| П | А | Р | И | К | М | А | Х | Е | Р | А |
|
|
|
|
|
|
|
|
| T | E | R | M | I | N | A | T | E |
|
|
|
|
| У | Х | О | Д |
| И | З |
| П | А | Р | И | К | М | А | Х | Е | Р | С | К | О | Й |
|
|
|
|
|
| * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
| M | O | D | E | L |
| S | E | G | M | E | N | T |
| 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| G | E | N | E | R | A | T | E |
| 4 | 8 | 0 | , | 1 |
| Т | А | Й | М | Е | Р |
| П | Р | И | Х | О | Д | И | Т |
| В |
| М | О | М | Е | Н | Т |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| В | Р | Е | М | Е | Н | И | , | Р | А | В | Н | Ы | Й |
| 4 | 8 | 0 |
|
|
|
|
|
|
|
| T | E | R | M | I | N | A | T | E |
| 1 |
|
|
|
| З | А | В | Е | Р | Ш | Е | Н | И | Е |
| П | Р | О | Г | О | Н | А |
|
|
|
|
|
|
|
|
| * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
| C | O | N | T | R | O | L |
| C | A | R | D | S |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| * |
|
|
|
| S | T | A | R | T |
| 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| E | N | D |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
б)
| BLOCK NUMBER *LOG OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 2 * 1 GENERATE 460 TIMER ARRIVES AT TIME 460 2 TERMINATE 1 SMUT OFF THE RUN * * MODEL SEGMENT 1 * 3 GENERATE 16,6 CUSTOMERS ARRIVE 4 QUEUE JOEQ ENTER THE LINE 5 SEIZE JOE CAPTURE THE BARBER 6 DEPART JOEQ LEAVE THE LINE 7 ADVANCE 16,4 USE THE BARBER 8 RELEASE JOE FREE THE BARBER 9 TERMINATE LEAVE THE SHOP * * CONTROL CARDS * START 1 START THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
Рис 13.5. Повторение рис. 13.4
| BLOCK NUMBER *LOC OPERATION A,B,C,D,E,F,G COMMENTS SIMULATE * * MODEL SEGMENT 1 * 1 GENERATE 18,6 CUSTOMERS ARRIVE 2 QUEUE JOEQ ENTERTHE LINE 3 SEIZE JOE CAPTURE THE BARBER 4 DEPERT JOEQ LEAVE THE LINE 5 ADVANCE 16,4 USE THE BARBER 6 RELEASE JOE FREE THE BARBER 7 TERMINATE LEAVE THE SHOP * * MODEL SEGMENT 2 * 8 GENERATE 480 TIME ARRIVES AT TIME 480 9 TERMINATE 1 SHUT OFF THE RUN * * CONTROL CARDS * START 1 SRART THE RUN END RETURN CONTROL TO OPERATING SYSTEM |
Предполагаемые значения интервалов прихода и времени обслуживания
В табл.13.1 представлена последовательность разыгранных значений, являющихся результатом обращения интерпретатора GPSS за первыми четырьмя значениями из выборки чисел с распределением 18 ± 6, которое задано в блоке 1 GENERATE.















