Транзакты GPSS хранятся в списках. Существует пять видов списков в одном
из которых в любой момент времени может находиться транзакт: 1) текущих событии; 2)
будущих событий; 3) пользователя; 4) прерываний; 5) синхронизируемых транзактов.
В списке текущих событий транзакты расположены в порядке убывания приоритета;
внутри класса транзакты с одинаковыми приоритетами располагаются в порядке
поступления их в список Каждый транзакт в списке текущих событий может находиться
либо в активном состоянии (т. е. просматриваться в данный момент условного времени),
либо в состоянии задержки.
Если транзакт находится в активном состоянии, то процедура, осуществляющая
просмотр, пытается продвигать его к следующим блокам диаграммы. Если движение
транзакта блокируется каким-либо объектом аппаратной категории, т. е. вход в
следующий блок выполнить невозможно, то он переводится в состояние задержки.
Часть списка текущих событий для транзактов ожидающих изменения состояния
объектов аппаратной категории, представляют собой списки задержки. Существует
четыре вида списков, связанных с устройствами (устройство занято, свободно,
обслуживает прерывание, работает без прерываний), пять видов, связанных с памятями
(память заполнена, не заполнена, пуста, не пуста, транзакт может войти в память), и два
— с логическими ключами (ключ установлен, ключ сброшен).
Таким образом, заблокированный транзакт (например, блоке SEIZE из-за занятости
устройства) будет переведен в состояние задержки и помещен в список задержки
«устройство занято» для данного устройства. Когда другой транзакт освободит
устройство, все транзакты списка задержки «устройство занято» для данного устройства
будут переведены в активное состояние, и симулятор GPSS отметит, что произошло
изменение состояния устройства. Как только завершается обработка активного транзакта,
запускается процедура просмотра, и все транзакты, получившие возможность двигаться, в
результате изменения состояния устройства будут продвинуты. То же происходит с
любым из перечисленных выше списков задержки в момент, когда соответственно
изменяется состояние объекта аппаратной категории.
Пользователю следует учитывать, что для транзактов, заблокированных в блоке TEST
или пытающихся выйти из блока TRANSFER (в режимах BOTH, ALL), списков задержки
не существует. В этих случаях транзакты остаются в активном состоянии в списке
текущих событий и участвуют во всех просмотрах. Список будущих событий содержит транзакты, у которых намеченное время начала
движения больше, чем текущее. Такие транзакты размещаются в списке строго в порядке
возрастания времени начала движения, т. е. транзакт, время начала движения которого
является ближайшим к значению текущего времени, состоит в списке первым, а транзакт
с максимальным временем начала движения — последним. Приоритеты не влияют на
порядок транзактов в этом списке. Список пользователя содержит транзакты, удаленные пользователем из списка
текущих транзактов с помощью блока LINK. Список прерываний содержит транзакты, обслуживание которых прервано на одном
или более устройствах. Транзакты в списке прерываний расположены в порядке
поступления. Этот список никогда не обрабатывается как списковая структура; транзакты
по мере надобности заносятся в этот список и извлекаются из него. Все транзакты,
захватившие устройства (пройдя блок SEIZE) и прерванные другими транзактами
(прошедшими блок PREEMPT), помещаются в этот список до тех пор, пока не будут
сняты все условия прерываний. Если условия прерывания не снимаются, транзакт может
оставаться в списке прерывании неопределенно долго. Список синхронизируемых транзактов содержит транзакты, которые ожидают в
блоках ASSEMBLE или GATHER прихода заданного числа транзактов из той же группы:
находятся в блоках MATCH в ожидании поступления транзакта той же группы на
сопряженный блок MATCH. Этот список также никогда не обрабатывается как списковая
структура и представляет собой поднабор набора транзактов.
Опубликовал Kest
December 14 2009 20:22:37 ·
0 Комментариев ·
7207 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.