Каждый прибор имеет четыре списка транзактов:
Список задержки(DELAY CHAIN)- список транзактов, ожидающих занятия прибора (в порядке приоритета). Транзакту, который пытается занять уже использующийся прибор, отказывается во входе в блок SEIZE, и он помещается в список задержки прибора в порядке приоритета. Таким же образом транзакт, который пытается войти в блок PREEMPT в приоритетном режиме и имеющий равный или меньший приоритет, чем занимающий транзакт помещается в список задержки прибора в порядке приоритета. Затем, когда транзакт перестает занимать прибор, и если список отложенных прерываний и список прерываний пусты, транзакту с самым высоким приоритетом, находящемуся в списке задержки, передается право занять прибор.
Список отложенных прерываний(PENDING CHAIN) - список транзактов, ожидающих занятия прибора по приоритету с возможностью вытеснения транзакта, ранее занимавшего прибор. Список отложенных прерываний содержит транзакты, ожидающие входа в блок PREEMPT, работающий в режиме прерывания. Транзакту отказывается во входе в блок, если прибор уже используется. Поступивший транзакт помещается в список отложенных прерываний. Транзактам из списка отложенных прерываний право занять прибор предоставляется раньше, чем транзактам из списков прерываний или задержки.
Список прерываний(INTERRUPT CHAIN)- список транзактов, которые были вытеснены из данного прибора. Когда транзакту разрешен вход в блок PREEMPT, а прибор в данный момент занят другим транзактом, право занять прибор передается новому транзакту. «Старый» транзакт помещается в список прерываний с тем, чтобы позже его право занять прибор было восстановлено. Транзакты, находящиеся в одном или более списках прерываний, могут продолжать свое продвижение в процессе моделирования, однако их движение ограничено. Такие транзакты не могут находиться в СБС и не могут покидать блоки ASSEMBLE, GATHER или MATCH, куда они были помещены при выполнении условия синхронизации. Когда транзакт перестает занимать прибор, и если список отложенных прерываний пуст, право занять прибор передается первому транзакту, находящемуся в списке прерываний.
Список повторных попыток(RETRY CHAIN) - список транзактов, ожидающих изменения статуса прибора. Эти транзакты вновь активизируются, когда прибор меняет свое состояние. О транзактах, находящихся в списке задержки, списке отложенных прерываний или списке прерываний или занимающих прибор, говорят, что они «состязаются» за прибор.
В итоге, когда прибор освобождается занимающим его транзактом:
• сначала право занять прибор передается транзактам, находящимся в списке отложенных прерываний,
• затем транзактам, вытесненным ранее и находящимся в списке прерываний,
• и только потом транзактам, ожидающим в порядке приоритета в списке задержки.
Когда новый занимающий транзакт выбирается из списка задержки или списка отложенных прерываний, он немедленно входит в блок SEIZE или PREEMPT, а затем помещается в СТС позади транзактов с равными приоритетами.
|