Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В.Д. Боев, Р.П. Сыпченко.docx
Скачиваний:
241
Добавлен:
19.09.2019
Размер:
7.07 Mб
Скачать

6.2.6.2. Блок displace

Блок DISPLACE предназначен для нахождения любого тран-закта и перемещения его к новому блоку. Блок DISPLACE имеет формат:

DISPLACE A,B,[C],[D]

Операнд А - номер транзакта, который нужно переместить.

Операнд B - метка блока, к которому перемещается транзакт, указанный операндом А.

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

Операнд D - метка альтернативного блока для транзакта.

Операнды А, B, С и D могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр. Например:

DISPLACE (P2+32),Term3,Ostatok,Met2

Операнд А указан выражением в скобках. Это выражение вычисляется и округляется до целого. Полученный результат является номером транзакта, который следует переместить. Далее блок DISPLACE отыскивает этот транзакт. При этом возможны случаи:

  • транзакт есть в модели, и не находится в списке будущих событий;

  • транзакт есть в модели, и находится в списке будущих событий;

  • транзакта с нужным номером нет в модели. В первом случае транзакт перемещается к блоку с меткой

Term3. Во втором случае определяется время, оставшееся до его повторного ввода в процесс моделирования, и записывается в параметр с именем Ostatok. Если параметра с таким именем нет, он создается. Транзакт также перемещается к блоку с меткой Term3. В третьем случае, т. е. когда в модели нет транзакта с нужным номером, активный транзакт, вошедший в блок DISPLACE, направляется к блоку с меткой Met2. Если операнда D нет, активный транзакт переходит к следующему блоку.

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

  • будущих событий;

  • отложенных прерываний (для прерывающих транзактов);

  • задержки (в порядке приоритета);

  • пользователя;

  • повторных попыток. И не исключается из списков:

  • текущих событий;

  • прерываний (для прерванных транзактов);

  • групп.

При перемещении прерванные выполнения в устройствах не сбрасываются.

Это означает, что перемещаемый транзакт продолжает занимать устройство. Следовательно, если необходимо, нужно освободить устройство.

Пример использования блока DISPLACE приведен в п. 6.8.2.

6.2.7. Прерывание функционирования одноканального устройства

Если на входе ОКУ образуется очередь, выбор транзакта для ОКУ занятия после его освобождения происходит:

  • в порядке поступления (FIFO) - для транзактов с равными приоритетами;

  • с учетом приоритета, указанного операндом Е блока GENERATE.

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

Такой режим функционирования ОКУ организуется блоками SEIZE и RELEASE, рассмотренными в п. 6.2.2.

Однако может возникнуть необходимость смоделировать ситуацию, когда очередной транзакт должен занять ОКУ, прервав обслуживание предыдущего транзак-та. Такое прерывание называется "захватом" ОКУ и моделируется блоком PREEMPT (захватить). Формат блока:

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

Операнд А - имя или номер захватываемого ОКУ.

Когда ОКУ свободно (см. блок-диаграмму), блок PREEMPT работает также, как и блок SEIZE.

При занятом ОКУ блок PREEMPT функционирует либо в приоритетном режиме, либо в режиме прерывания. Режимы определяются операндом B:

  • PR - приоритетный;

  • по умолчанию ( B не используется) - режим прерывания.