Логика работы интерпретатора


 

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

- цепь текущих событий (одна цепь в системе);

- цепь будущих событий (одна цепь в системе).

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

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

1. Транзакт попал в блок ADVANCE и, до некоторого момента, нет возможности продвинуть его в следующий блок модели.

2. Транзакт должен войти в модель в некоторый более поздний момент времени через блок GENERATE.

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

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

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

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

Когда транзакт прекратит свое движение, интерпретатор выполняет одно из двух действий:

1. Выбирается следующий по очереди транзакт из цепи текущих событий.

2. Следующий транзакт берется не следующий по очереди, а интерпретатор начинает просматривать цепь текущих событий сначала. Это происходит тогда, когда последний блок, прошедший через интерпретатор, прошел блоки SEIZE или RELEASE. В этом случае, блокировки для некоторых транзактов могут быть сняты, а это значит, что их можно будет двигать дальше.

После того, как был обработан последний транзакт в цепи текущих событий, интерпретатор начинает работать с цепью будущих событий:

Интерпретатор продвигает модельное время (в счетчике) к значению, запланированному к движению следующего транзакта. Этот транзакт, как и другие транзакты с таким же временем, переносятся из цепи будущих событий в цепь текущих событий, в которой они занимают место в соответствии со своим приоритетом (чем выше уровень приоритета, тем ближе к началу встанет транзакт). Затем, начинается новый просмотр транзактов в цепи текущих событий.

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

 



Дата добавления: 2016-11-04; просмотров: 1805;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.