Занятие многоканального устройства и его освобождение

Занятие и освобождение МКУ имитируется блоками ENTER (войти) и LEAVE (выйти). Форматы блоков:

ENTER A,[B]LEAVE A,[B]

Операнд А в обеих блоках используется для указания имени, соответствующего МКУ. Операнд B задает число устройств (элементов памяти), которое должно быть занято в блоке ENTER или освобождено в блоке LEAVE. По умолчанию операнд В = 1. При В = 0 блок считается неработоспособным.

Когда транзакт входит в блок ENTER, операнд А используется для нахождения МКУ с указанным именем. Если такого МКУ нет, происходит останов по ошибке "Обращение к несуществующей памяти". Если МКУ существует и задан операнд B, он вычисляется, округляется до целого и полученный результат используется для оценки свободной емкости. Транзакт может войти в блокENTER, если МКУ находится в доступном состоянии и достаточно емкости для выполнения запроса. В противном случае транзакт помещается в список задержки устройства в соответствии с приоритетом.

Когда транзакт входит в блок ENTER (см. блок-диаграмму), планировщик выполняет следующие действия:

  • увеличивает на 1 счетчик входов МКУ;
  • увеличивает на значение операнда B (по умолчанию на 1) текущее содержимое МКУ;
  • уменьшает на значение операнда B (по умолчанию на 1) доступную емкость МКУ.

Если транзакт при входе в блок ENTER запрашивает больше устройств (элементов памяти), чем определено командой STORAGE, т. е. ее операнд А меньше операнда B блока ENTER, возникает ошибка "Запрос элементов памяти превышает ее общую емкость".

МКУ никогда не может быть удалено из текущей модели, даже если команда STORAGE удаляется из рабочей программы. МКУ можно переопределить, т. е. изменить емкость другой командой STORAGEс тем же самым именем. Например:

Batr STORAGE 18

Повторное описание:

Batr STORAGE 24

Имитация обслуживания транзакта в течение какого-то промежутка времени также осуществляется блоком ADVANCE.

Пример 1.

Nak STORAGE 20... ENTER Nak,2 ADVANCE 120,40 LEAVE Nak,2...

Командой STORAGE определяется МКУ с именем Nak емкостью 20 единиц. При входе транзакта в блок ENTER занимается 2 единицы и столько же освобождается в блоке LEAVE при выходе из МКУ.

Пример 2.

Nak STORAGE 20...ENTER Nak,21ADVANCE 120,40LEAVE Nak,2...

При входе транзакта в блок ENTER произойдет останов по ошибке, так как транзакт будет пытаться занять больше каналов (21), чем определено (20) командой STORAGE. То же самое произойдет, если при выходе из блока LEAVE транзакт будет пытаться освободить каналов больше, чем определено командой STORAGE.

Пример 3.

Pun1 EQU 1Pun2 EQU 2Pun3 EQU 3Pun1 STORAGE 6Pun2 STORAGE 5Pun3 STORAGE 3...ENTER *1ADVANCE MX$NorVr(P2,P3)LEAVE *1...

В данном примере определены три МКУ с именами Pun1, Pun2, Pun3 и емкостями 6, 5 и 3 соответственно. Именам командами EQU поставлены в соответствие номера 1, 2 и 3.

Предполагается, что при входе транзакта в блок ENTER в его первом параметре (ссылка *1) содержится какой-либо один из трех номеров. Согласно этому номеру и занимается МКУ, а затем освобождается. Операнд B в блоках ENTER и LEAVE не используется, поэтому транзактом занимается и освобождается одна единица емкости МКУ.

Ранее (см. табл. 1) для МКУ был употреблен термин "память". Это связано с тем, что блоки ENTER и LEAVE могут быть использованы для имитации функционирования запоминающих устройств, например, оперативного или внешних устройств памяти. В этом случае в качестве операнда B этих блоков может быть использован один из параметров транзакта, имитирующего, например, сообщение, содержащий количество занимаемых (освобождаемых) ячеек памяти. Пример такого использования блоков ENTER и LEAVE приведен в 7.5.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: