
книги из ГПНТБ / Система математического обеспечения ЕС ЭВМ
..pdfРазмер освобождаемой области памяти может быть задан как в макрокоманде, так и в регистре 0. Адрес освобождаемой области памяти может быть задан в макрокоманде и в регистре 1. Если за дан номер подпула, то нельзя использовать регистр 0 для указания размера области. Если размер и адрес области не указаны, а ука зан только номер подпула, то освобождается весь подпул.
Элементный тип макрокоманды имеет следующий формат:
[ и м я ] F R E E M A I N Е , Ь У = ч и с л о , А = а д р е с [ ,S P = 4 n o r o ]
Для элементного типа макрокоманды необходимо указать раз мер и адрес освобождаемой области памяти. Может быть указан также номер подпула.
Списковый тип макрокоманды имеет следующий формат;
[ и м я ] F R E E M A I N L, L A = а д р е с , А = а д р е с [ , 5 Р = ч и с л о ]
Для спискового типа макрокоманды следует указать адреса двух списков, аналогичных спискам спискового типа макрокоман ды GETMAIN. Разница заключается в том, что описок адресов ос вобождаемых областей должен заполнить программист перед вы дачей макрокоманды FREEMAIN, в то время как для макрокоман ды GETMAIN этот список заполняет система.
Переменный тип макрокоманды FREEMAIN имеет следующий формат:
[имя] F R E E M A I N V , A = адрес [,SP =4hc.io]
Операнд А определят адрес двух последовательных слов, вы равненных по границе полного слова, первое из которых содержит адрес освобождаемой области памяти, а второе:— ее размер.
4.7.ОБРАЗОВАНИЕ ПОДЗАДАЧ
Впроцессе инициирования для каждого пункта задания созда
ется одна задача, которая называется задачей пункта задания. В однопрограммном режиме в любой момент времени существует только одна задача. В мультипрограммных режимах одновремен но выполняются несколько задач. При этом в режиме без подзадач для одного пункта задания всегда существует только одна задача, а в режиме с подзадачами каждый пункт задания может образо вать несколько задач, используя макрокоманду ATTACH.
Для управления задачами управляющая программа строит для каждой задачи блок управления задачей — ТСВ, без которого за дача не может существовать. Он содержит всю информацию, необ ходимую для управления задачей. Блок управления задачей соз дается либо при инициировании пункта задания (для задачи пункта задания), либо при выполнении макрокоманды ATTACH. После выполнения макрокоманды ATTACH адрес блока управления за дачей находится в регистре 1.
Макрокоманда ATTACH образует задачу только в мультипро граммных режимах с подзадачами. Это режим с переменным чис лом задач и вариант режима с фиксированным числом задач, до пускающий образование подзадач. Во всех остальных режимах
№
макрокоманда ATTACH аналогична макрокоманде LINK и задач не образует. В дальнейшем будем рассматривать макрокоманду ATTACH в режимах с подзадачами.
Задача, которая выдает макрокоманду ATTACH, называется порождающей задачей, а задача, которая образуется макрокоман дой ATTACH, называется подзадачей порождающей задачи. Под задача, в свою очередь, может быть порождающей задачей и об разовывать свои подзадачи и т. д. Статус подзадач в процессе выполнения не отличается от статуса порождающей задачи. Поэто му в дальнейшем будем применять термин подзадача только в тех случаях, когда требуется подчеркнуть соподчиненность задач в процессе образования. В остальных случаях будем пользоваться термином задача, подразумевая под ним подзадачи и порождающие задачи. Порожденные подзадачи могут быть уничтожены макро командой DETACH.
Все задачи, выполняемые в некоторый момент времени, незави симо от того, какому заданию они принадлежат, имеют диспетчер ский приоритет, определяемый числом от 0 до 255. В каждый мо мент времени управление получает та задача, которая готова для выполнения и имеет наивысший приоритет. Такая задача называ ется активной. Остальные задачи находятся в состоянии ожидания. Их можно разбить на два класса:
а) задачи, находящиеся в состоянии ожидания какого-либо со бытия и, следовательно, не готовые для выполнения; диспетчер ский приоритет этих задач может быть как выше, так и ниже дис петчерского приоритета активной задачи;
б) задачи, готовые для выполнения, но находящиеся в состоя нии ожидания потому, что'их диспетчерский приоритет ниже дис петчерского приоритета активной задачи.
Как только задача с более высоким диспетчерским приорите том, чем приоритет текущей активной задачи, переходит в состоя ние готовности, она получает управление и становится активной, а выполнявшаяся ранее задача переводится в состояние ожидания.
В режиме мультипрограммирования с переменным числом за дач диспетчерский приоритет задач пунктов задания определяется параметром DPRTY оператора ЕХЕС или параметром PRTY опе ратора JOB. В режиме мультипрограммирования с фиксированным числом задач диспетчерский приоритет задачи пункта задания за висит от раздела памяти, в котором он выполняется. Чем больше начальный адрес раздела, тем выше приоритет.
Кроме диспетчерского приоритета, существует понятие гранич ного приоритета. Значение граничного приоритета задачи пункта задания равно начальному значению диспетчерского приоритета. Диспетчерский приоритет может изменяться в процессе выполне ния, но не может превысить значение граничного приоритета.
В момент образования подзадачи ей присваиваются значения граничного и диспетчерского приоритетов. Они могут быть равны ми соответствующим приоритетам порождающей задачи, если в макрокоманде ATTACH опущены операнды LPMOD и DPMOD.
122
В случае, если указанные операнды предусмотрены в макрокоман де, они определяют разницу приоритетов подзадачи относительно приоритетов порождающей задачи. Граничный приоритет подзада чи не может быть выше граничного приоритета порождающей за дачи. В процессе выполнения подзадачи ее диспетчерский приори тет может превысить граничный приоритет подзадачи, но не может превысить граничный приоритет порождающей задачи. При этом граничный приоритет подзадачи автоматически повышается до максимального значения диспетчерского приоритета.
Таким образом, граничный приоритет подзадачи предназначен для ограничения диспетчерского приоритета подзадачи данной под задачи. Граничный приоритет задачи пункта задания является максимальным значением любых приоритетов всех подзадач, об разованных при выполнении пункта задания.
Макрокоманда ATTACH имеет следующий формат:
[ и м я ] A T T A C H [ |
Е Р = и м я точки |
в х о д а |
|
|
'» |
[,О С В = |
а д р е с ] |
|||
| |
E P L O C = а д р е с |
и м ен и |
точки |
в х о д а |
> |
|
|
|||
I |
О Е = а д р е с |
эл е м е н т а сп иска |
J |
|
|
|||||
|
, P A R A M = |
(п ар а м е т р ы ) |
[,VL*= 1] ] |
|
|
|
||||
|
,L P M O D = чи сло ] |
[,D P M O D = ч и с л о ] |
|
|
|
|||||
|
, Е С В = ( а д р е с |
Е С В ) ] |
[ , Е Т Х Я = а д р е с |
п р огр ам м ы |
в ы х о д а ] |
|||||
|
, G S P V = 4 h« io |
|
|
1 |
Г , S H S P V = 4 H c n o |
1 |
||||
|
, G S P L = a f l p e c |
сп и ск а |
J |
[ , S H S P L = |
aApec с п и с к а ] |
После выполнения макрокоманды ATTACH в регистре 1 нахо дится адрес блока управления, образованный подзадачей. Он может быть использован в дальнейшем в макрокомандах DETACH, CHAP или EXTRACT. Поэтому его необходимо сохранять, если использу ются указанные макрокоманды. Первые четыре операнда макро команды ATTACH аналогичны соответствующим операндам мак рокоманды LINK.
С помощью операнда LPMOD можно указать число, на кото рое граничный приоритет подзадачи должен быть меньше гранич ного приоритета порождающей задачи. Это число обязательно дол жно быть положительным. Следовательно, граничный приоритет при образовании подзадачи можно уменьшить или оставить рав ным граничному приоритету порождающей задачи. Последнее име ет место тогда, когда операнд LPMOD не задан.
Операнд DPMOD служит для указания числа, на которое дис петчерский приоритет подзадачи должен отличаться от диспетчер ского приоритета порождающей задачи. Это число может быть как положительным (в этом случае диспетчерский приоритет подзада чи выше диспетчерского приоритета порождающей задачи), так и отрицательным (в этом случае диспетчерский приоритет подзадачи ниже диспетчерского приоритета порождающей задачи). Диспетчер ский приоритет не должен превышать граничный приоритет. Если операнд DPMOD опущен, то в качестве диспетчерского приоритета подзадачи используется диспетчерский приоритет порождающей задачи, если он не больше граничного приоритета подзадачи. В противном случае граничный приоритет подзадачщстановится ее диспетчерским приоритетом.
123
Операнд ЕСВ предназначен для указания адреса блока управ ления событием, с помощью которого производится синхронизация выполнения порождающей задачи и завершения ее подзадачи. Уп равляющая программа делает отметку о завершении подзадачи в этом блоке, а также помещает в него код возврата при нормаль ном завершении или код завершения при аварийном завершении. В порождающей задаче можно выдать макрокоманду WAIT, кото рая переведет ее в состояние ожидания до завершения подзадачи. После завершения подзадачи можно проанализировать код, нахо дящийся в блоке управления событием.
Если в макрокоманде ATTACH задан операнд ЕСВ, то для уни чтожения подзадачи после ее завершения необходимо использовать макрокоманду DETACH.
Операнд ETXR предназначен для указания адреса программы выхода, получающей управление после завершения подзадачи. К этому времени программа выхода должна находиться в опера тивной памяти.
Операнд GSPV предназначен для указания номера подпула, который передается подзадаче в монопольное использование. Опе ранд SHSPV указывает номера подпула, который может быть сов местно использован как порождающей задачей, так и подзадачей.
Операнд GSPL предназначен для указания адреса списка но меров подпулов, которые передаются подзадаче в монопольное ис пользование.
Операнд SHSPL предназначен для указания адреса списка но меров подпулов, которые могут быть совместно использованы как порождающей задачей, так и подзадачей.
Если в макрокоманде ATTACH задан операнд ETXR, то для уничтожения подзадачи после ее завершения необходимо использо вать макрокоманду DETACH. Эту макрокоманду можно использо вать в программе выхода.
Если в макрокоманде ATTACH не заданы ни операнд ЕСВ, ни операнд ETXR, то не следует выдавать макрокоманду DETACH для уничтожения подзадачи. Это делает управляющая программа после завершения подзадачи. Порождающая задача не может за вершиться, если не завершились ее подзадачи. Попытка заверше ния порождающей задачи раньше ее подзадач приводит к аварий ному завершению задачи и всех ее подзадач.
Для синхронизации выполнения задач используются макрокоман ды WAIT и POST, которые связаны через блок управления собы тием. Макрокоманда WAIT предназначена для того, чтобы задер жать выполнение задачи до тех пор,’ пока не случится одно или не сколько событий. Макрокоманда POST сигнализирует о том, что некоторое событие произошло.
Блок управления событием представляет собой полное слово, выравненное по границе полного слова, и имеет формат:
н о м е р р а з р я д а |
0 |
1___________________________31 |
|
|
к о д за в е р ш е н и я |
124
В начальном состоянии разряды 0 и 1 устанавливаются в нуле вое состояние. При выполнении макрокоманды WAIT разряд 0 ус танавливается в единицу. При выполнении макрокоманды POST разряд 1 устанавливается в единицу, а разряд 0 в нуль. Макро команда POST заносит код завершения в блок управления собы тием.
Макрокоманда POST имеет следующий формат:
[и м я ] P O S T а д р е с б л о к а у п р а в л е н и я с о б ы т и е м [, к о д за в е р ш е н и я ]
Если код завершения не указан, то предполагается нуль. Макрокоманда WAIT имеет следующий формат:
[ и м я ] W A I T [числ о собы т и й ,] J Е С В = а д р е с |
1 |
I Е С В Ы Б Т ^ а д р е с /
Если задан операнд ЕСВ, то это указывает на ожидание одно го события. С помощью операнда ECBLIST можно указать адрес поля основной памяти, содержащего список адресов нескольких блоков управления событием. Каждый адрес занимает полное сло во, выравненное по границе полного слова, последний адрес отме чается единицей в старшем разряде. Число событий не должно превышать число блоков управления событиями. Оно может быть меньше или равно числу блоков управления событиями.
Макрокоманда DETACH имеет следующий формат:
[и м я ] D E T A C H а д р е с а д р е с а бл ок а уп р а в л е н и я за д а ч е й
Изменение диспетчерского приоритета задачи или любой ее подзадачи производится макрокомандой CHAP. Макрокоманда имеет следующий формат:
[ и м я ] C H A P вели чи на и зм ен ен и я |
а д р е с а д р е с а б л о к а у п р а в л е н и я за д а ч е й |
|
[■; S ’ |
Величина изменения может быть как положительной, так и от рицательной. Второй операнд указывает адрес поля, содержащего адрес блока управления подзадачей, диспетчерский приоритет ко торой должен быть изменен. Если указано ’S’ или второй операнд опущен, то изменяется диспетчерский приоритет задачи. Для опре деления текущего значения диспетчерского приоритета необходи мо пользоваться макрокомандой EXTRACT. Указанная макро команда производит извлечение информации (в том числе и зна чения приоритетов) из некоторых полей блока управления зада чей.
Пусть программа А порождает две подзадачи В и С. Диспет черские приоритеты этих подзадач соответственно больше и мень ше приоритета порождающей задачи на единицу. Граничные при оритеты всех трех задач совпадают. Выполнение задачи А должно быть приостановлено в точке Е до тех пор, пока выполнение зада чи В не дойдет до точки Е1, а выполнение задачи С не дойдет до точки.Е2. Кроме того, выполнение задачи А должно быть приоста новлено в точке Е4 до тех пор, пока не завершатся задачи В и С. В качестве параметров программе В передаются блок управления
125
событием ЕСВ1 и некоторые величины Р1 и Р2, а программе С пе редаются блок управления ЕСВ2 и некоторые величины Р2 и РЗ.
Блок управления событием ЕСВ1 используется для фиксации выполнения задачи В в точке Е1. Блок управления событием ЕСВ2 используется для отметки о выполнении задачи С в точке Е2. Блок управления событием EVENT 1 используется для отметки о завер шении задачи В, блок управления событием EVENT2 — для отмет ки о завершении задачи С. Адреса последних двух блоков управ ления событием, служащие для отметки о завершении задач, пере даются с помощью операнда ЕСВ макрокоманды ATTACH. Адре са первых двух блоков управления событием, которые служат для отметки о некоторых промежуточных событиях, передаются через список параметров операндом PARAM.
После завершения выполнения задач В и С необходимо прове сти анализ кодов завершения. Если код завершения хотя бы одной из этих задач отличен от нуля, необходимо перейти на ERROR, где производится дополнительный анализ завершения указанных за дач. Анализ должен быть произведен до уничтожения подзадач
В и С.
Программа А имеет следующую структуру:
ATTACH |
ЕР = В, PARAM= (ЕСВ1, PI, Р2), VL= 1, |
|
ST |
|
DPMOD= 1, ECB= EVENT1 |
l, ТВ |
||
ATTACH * |
* ' EP=C,PARAM=(ECB2, P2, P3), VL=R |
|
ST |
1,TC |
DPMOD=—1,ECB= EVENT2 |
|
E WAIT 2*ECBLIST=LIST1'
E 4
D T B
D T C
E R R O R
W A I T |
2 ,E C B L I S T = L I S T 2 |
|
L |
5 .E V E N T 1 |
|
O f |
5 |
.E V E N T 2 |
L A |
5 |
,0 (5 ) |
L T R |
5,5 |
|
B N Z |
E R R O R |
|
D E T A C H |
|
Т В |
D E T A C H |
|
TC |
R E T U R N |
|
|
ТВ |
D S |
F |
|
TC |
D S |
F |
|
E V E N T 1 |
D C |
F ’O’ |
|
E V E N T 2 |
D C |
F ’O’ |
\ |
E C B 1 |
D C |
F ’O’ |
|
E C B 2 |
D C |
F ’O’ |
|
L IS T 1 |
D C A ( E C B I ) |
||
|
D C |
X ’8 0 ’ |
|
|
D C A L 3 ( E C B 2 ) |
||
L I S T 2 |
D C A ( E V E N T l ) |
||
|
D C |
X ’8 0 ’ |
|
|
|
В С |
|
A L 3 ( E V E N T 2 ) |
|
|
|
|
|
|
|
|
|
|
||||||
P i |
n s |
* |
• |
« |
• |
« |
• |
* |
• |
# |
* |
* |
# |
* |
|
|
|
|
|
|
’ |
‘ |
HS |
|
|
|
|
|
|||||||||||||
po |
|
|
ft |
W |
£ |
« |
« |
* |
» |
» |
( » |
* |
> |
|
|
|
|
|
||
' |
|
О « f t |
|
|
|
|
|
|||||||||||||
1^3 |
D S . . . . . . . .................................... |
|
|
|
|
|
||||||||||||||
|
Программа В имеет следующую структуру- |
|
|
|||||||||||||||||
|
• |
|
• |
* |
• |
• |
* |
* |
• |
« |
* |
* |
* |
* |
* • |
* |
» * |
* |
|
|
E l |
L |
|
2 ,0 ( 1 ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
P O S T |
|
(2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
• |
• |
• |
« |
в |
* |
* |
* |
* |
» |
» |
* . : * • |
• |
4 |
• |
• |
|
|
|
|
R E T U R N . . . . . ............................................................. |
|
|||||||||||||||||
|
Программа С имеет следующую структуру: |
|
||||||||||||||||||
* |
« * « |
• |
• |
* |
• |
• |
« |
« |
• |
• |
• |
» * |
< |
* |
« « |
|
|
|
|
|
Е 2 |
L |
1 2,0(1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
P O S T |
(12) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
R E T U R N |
|
|
|
|
|
|
............................................................. |
|
||||||||||
|
В програмхме А выдаются две макрокоманды ATTACH, которые |
|||||||||||||||||||
образуют две подзадачи. |
Адрес блока |
управления первой |
подза |
|||||||||||||||||
дачей |
запоминается |
в поле ТВ. |
Адрес |
блока |
управления |
второй |
подзадачей запоминается в поле ТС. Позже адреса блоков управ ления подзадачами используются в макрокомандах DETACH для уничтожения подзадач.
Макрокоманда WAIT, помеченная именем Е, предусматривает ожидание двух событий, адреса блоков управления которых поме щены в список LIST1. Это — ЕСВ1 и ЕСВ2. Адрес блока ЕСВ2 в списке помечен единицей в старшем разряде (DC Х’80’), что явля ется признакохм конца списка.
Адреса блоков управления событиями ЕСВТ и ЕСВ2 были пе реданы в списке параметров макрокохманд ATTACH программам В и С соответственно. Структура списков параметров рассматри валась в разделе 4.3. Пример списка изображен на рис. 18.
Рассмотрим, каким образом програхмма В отмечает завершение события в блоке управления ЕСВ1 в точке программы, помеченной меткой Е1. Команда, помеченная меткой Е 1, загружает адрес пер вого параметра в списке (т. е. адрес ЕСВ1) в регистр 2. Затем вы дается макрокоманда POST, где адрес блока управления событи ем указан как содержимое регистра 2. В результате выполнения этой макрокоманды производится отхметка о выполнении события в блоке управления ЕСВ1. Имя ЕСВ1 в программе В не употреб ляется. Програмхма В производит отметку любого блока управле ния событием, который передается ей как первый элемент списка параметров. Аналогично в задаче С производится отметка завер шения события в блоке ЕСВ2 в точке программы, помеченной мет кой Е2.
Таким образом, в качестве первого операнда макрокоманды POST можно указать как Ихмя блока управления событием, так и адрес регистра, заключенный в скобки, который содержит адрес блока управления событием. Чтобы узнать, в какой форме допу скается кодирование того или иного операнда в какой-либо макро команде, необходимо обратиться к свободной таблице операндов
127
и допустимых форм кодирования, приведенной в конце описания стандартных форм в руководстве «Макрокоманды супервизора и управления данными».
Макрокоманда WAIT, помеченная именем Е4, предусматривает ожидание завершения выполнения подзадач В и С. Адреса блоков управления событием помещены в списке LIST2. Это — EVENT1 и EVENT2. Так как эти блоки управления событием были указаны в операндах ЕСВ макрокоманды ATTACH, программист не дол жен отмечать завершение подзадачи макрокомандой POST. Мак рокоманда POST выдается автоматически управляющей програм мой.
После завершения выполнения подзадач В и С программа А загружает в регистр 5 логическую сумму кодов завершения двух подзадач. Чтобы установить в нуль старший байт регистра 5, ко торый будет содержать отметки о завершении, используется коман да LA 5,0(5). Так как эта команда производит действия по прави лам адресной арифметики, разряды от 0 до 7 устанавливаются в нуль.
Далее необходимо проверить, равна ли полученная логическая сумма нулю. Команда LA не вырабатывает признак результата, поэтому используем команду LTR 5,5. Эта команда не производит никаких действий, кроме выработки признака результата. Если со держимое регистра 5 отлично от нуля, то происходит переход по метке ERROR. Это свидетельствует о том, что хотя бы один из ко дов завершения отличен от нуля. Если же оба кода завершения равны нулю, то происходит уничтожение подзадач В и С и завер шение выполнения программы А.
4.8. ОРГАНИЗАЦИЯ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ РЕСУРСОВ
Выше рассматривались повторно используемые программы, ко торые допускают последовательное выполнение и в отличие от ре ентерабельных программ не допускают параллельного выполнения. При появлении повторных запросов на выполнение такой програм мы их необходимо задерживать до завершения выполнения по пре дыдущему запросу.
При использовании макрокоманд LINK, XCTL и ATTACH про верка возможности повторного использования программы и орга низация поочередного использования производятся управляющей программой. Если управление такой программе передается с по мощью команд передачи управления или с помощью макрокоман ды CALL (т. е. без участия управляющей программы), то про граммист должен выполнять все эти действия для правильного ис пользования такой программы.
Повторно использоваться может не только программа, но и некоторое поле данных, которое используется и модифицируется несколькими задачами, выполняемыми одновременно. В таких
128
случаях часто бывает необходимо предусматривать, чтобы запрос на данные был задержан, если эти данные модифицируются дру гим запросом и модификация не завершена.
Для использования их ресурсов применяется макрокоманда ENQ, осуществляющая либо запрос на использование ресурса, ли бо проверку возможности использования ресурса. Освобождение повторно используемого ресурса, запрошенного ранее, производит ся макрокомандой DEQ.
Макрокоманда ENQ имеет следующий формат:
имя E N Q ( а д р е с и м ен и оч е р е д и , |
а д р е с им ени р есу р са , |
| J .[ р а з м е р и м ен и |
р е с у р с а ] , [|т|рЕМ ]■•>■). |
‘ , R E T = T E S T ] |
|
,R E T — U S E |
|
. ,R E T = H A V E j |
|
Каждый ресурс идентифицируется сочетанием имени очереди и имени ресурса. Указанные имена выбираются произвольно и могут не совпадать с истинным именем или названием ресурса, если тако вое имеется. Имя очереди представляет собой поле оперативной памяти из восьми символов. Адрес этого поля указывается в пер вом операнде. Имя ресурса представляет собой поле основной па мяти от 1 до 255 байтов и может быть составным. Адрес этого поля указывается во втором операнде, размер — в четвертом.
Третий операнд допускает значения Е или S. Значение Е обоз начает запрос на монопольное использование ресурса. Если ресурс используется в результате монопольного запроса, все следующие запросы на ресурс задерживаются до освобождения ресурса мак рокомандой DEQ. Монопольный запрос необходимо использовать, если ресурс изменяется в процессе выполнения запроса. Значение S определяет запрос на совместное использование ресурса. Совме стные запросы используются, если ресурс не изменяется в процес се выполнения запроса. Такой запрос может быть удовлетворен вместе с другими запросами на совместное использование. Если поступил запрос на монопольное использование, в то время как ресурс используется совместно, то такой запрос, а также все после дующие запросы задерживаются.
Значение STEP пятого операнда говорит о том, что ресурс ис пользуется только внутри пункта задания. Значение SYSTEM пя того операнда указывает, что ресурс используется программами нескольких пунктов заданий.
Ключевой параметр RET определяет условный запрос на ре сурс. Если указано TEST, то проверяется состояние ресурса путем выдачи кода возврата (0 — ресурс доступен, 4 — ресурс не досту пен, 8 — этой же задачей уже сделан запрос на ресурс). Если ука зано USE, ресурс используется, если это возможно; если это не возможно, то задача не задерживается, о чем свидетельствуют ко ды возврата 4 и 8, обозначающие то же, что и в предыдущем слу чае. Если указано HAVE, то это значит, что управление ресурсом
Э. Заказ 3414. |
129 |
требуется, если данная, задача не выдавала ранее запроса на ре сурс.
Макрокоманда DEQ имеет следующий формат:
[имя] DEQ (адрес имени очереди, адрес имени ресурса,
[размер имени ресурса], [ s y f f EM ].»•>)
[,RET=HAVE]
Назначение операндов то же, что и в макрокоманде ENQ. Пусть программа А производит загрузку в оперативную память
повторно используемой программы REUSMOD. Адрес точки входа загружается в регистр 2. Затем образуется подзадача В. Как про грамма А, так и программа В совместно используют программу REUSMOD, обращаясь к ней по макрокоманде CALL. Необхо димо предотвратить совместное одновременное использование про граммы REUSMOD.
Программа А имеет следующую структуру:
LOAD |
|
ЕР = REUSMOD |
LR |
|
2,0 |
ATTACH |
’ ЕР = В* |
|
LR |
|
15,2 |
ENQ |
|
(N, М, 7, STEP) |
CALL |
|
(15) |
анализ кода возврата |
||
DEQ' |
* |
‘ (N,"m ‘, 7, STEP)’ |
N * DC |
"CL8’QP |
|
M DC |
CL7’REUSMOD’ |
Программа В имеет следующую структуру:
|
LR |
15,2 |
M, E, 7, STEP) |
|
ENQ |
(N, |
|
|
CALL |
(15) |
- |
|
анализ кода возврата |
||
|
DEQ* |
’ (N, M.V, STEP) |
|
N |
DC * |
* CL8’QP * |
|
M |
DC |
CL7’REUSMOD’ |
Перед обращением к модулю адрес точки входа загружается в регистр 15, чего требует макрокоманда CALL. Далее макрокоман да ENQ выдает монопольный запрос на ресурс, определяемый име нами Q1 и REUSMOD. В данном примере в качестве имени ресур са используется имя точки входа. Однако это делать не обязатель-