
книги из ГПНТБ / Система математического обеспечения ЕС ЭВМ
..pdfОператор конца процедуры PEND должен быть последним оператором процедуры во входном потоке. Он имеет следующий формат:
//и м я P E N D к о м м е н т а р и и
Имя и комментарии в операторе могут отсутствовать.
3.6. ПРОЦЕДУРЫ |
|
|
|
Процедура может содержать |
один |
или несколько операторов |
|
ЕХЕС, за которыми следуют необходимые операторы DD. Проце |
|||
дура не может содержать операторов задания, |
операторов |
||
JOBLIB DD, операторов DD с параметрами DATA или *, операто |
|||
ров ЕХЕС, вызывающих другие |
процедуры, ограничительных и |
||
пустых операторов. Процедура может |
находиться |
в библиотеке |
процедур, а также может быть закодирована во входном потоке, среди операторов, составляющих задание. В последнем случае процедура доступна только одному заданию, в котором она нахо дится.
Чтобы вызвать каталогизированную процедуру, необходимо в операторе ЕХЕС указать имя процедуры, под которым она запи сана в библиотеке процедур. Если процедура имеет оператор PROC в качестве первого оператора, то его имя не рассматри вается как имя процёдуры и может вообще отсутствовать. Запись новых и модификация существующих процедур в библиотеке осу ществляется утилитой IEBUPDTE.
Процедуры во входном потоке следует помещать перед первым оператором ЕХЕС. Каждая процедура должна начинаться опера тором PROC и заканчиваться оператором PEND. Допускается до 15 процедур в каждом задании. Оператор PROC обязательно дол жен иметь имя, которое является именем процедуры во входном потоке. Вызов процедуры осуществляется путем указания этого имени в операторе ЕХЕС.
При вызове процедуры необходимо присвоить значения пара метрам процедуры. Парахметрам, имеющим стандартные значения, присвоенные в процедуре, можно не присваивать новые значения при вызове процедуры.
При вызове процедуры можно изменить или добавить пара метры операторов ЕХЕС процедуры. Для этого в операторе вызо ва процедуры необходимо кодировать:
п а р а м е т р , и м я п у н к т а п р о ц е д у р ы = зн ач ен и е
Пусть процедура Р содержит следующие операторы ЕХЕС:
/ / S T l |
Е Х Е С |
P G M = A , P A R M = 7 7 7 |
/ / S T 2 |
Е Х Е С |
P G M = B , C O N D = (12, L E ) |
При вызове процедуры необходимо значение параметра PARM опустить, добавить к оператору ST1 параметр COND=(12, EQ) и заменить в операторе ST2 параметр COND на COND=(12, EQ).
91
Для этого необходимо кодировать следующее обращение к проце дуре:
/ / Р Р |
E X E C |
Р , P A R M . ST 1 = , C O N D . S T I = (12, E Q ), |
II |
|
C O N D . S T 2 = (12, E Q ) |
После подстановки параметров получим:
/ / S T I |
E X E C |
P G M = A , |
C O N D = (12, E Q ) |
/ / S T 2 |
E X E C |
P G M = B , |
C O N D - (12, E Q ) |
При вызове процедуры можно изменить или добавить парамет ры операторов DD процедуры. Для этого к оператору вызова про цедуры необходимо добавить оператор DD следующего формата:
// и м я п ун к т а п р о ц е д у р ы , и м я dd D D п а р а м е т р = зн ач еи и е
Пусть процедура Р содержит следующие операторы:
/ / T l |
E X E C |
P G M = A |
/ / M i |
D D |
D S N = K A T , D I S P = ( O L D , K E E P ) , |
II |
|
D C B = ( B L K S I Z E = 160, R E C F M = F ) , V O L = S E R = i l i |
При вызове процедуры необходимо заменить имя набора дан ных на CAT, добавить указание устройства 5050 и убрать указание серийного номера тома. Для этого необходимо кодировать следую щие операторы:
|
/ / Р Р |
E X E C |
Р |
|
//Т 1 .М 1 |
D D |
D S N = C A T , U N I T = 5050, V O L = |
После подстановки параметров получим: |
|||
/ / T l |
E X E C |
P G M = A |
|
/ / M l |
D D |
D S N = C A T , D i S P = (O L D , K E E P ) , |
|
II |
|
D C B = |
( B L K S I Z E = 160, R E C F M = F ) , U N I T = 5050 |
Если в операторе DD необходимо изменить только один под параметр DCB, то не следует кодировать все подпараметры. На пример, если в предыдущем примере размер блока нужно изме нить на 320, следует кодировать:
IIР Р |
E X E C |
Р |
//Т 1 .М 1 |
D D |
D C B = ( B L K S I Z E = 320) |
При вызове процедуры можно добавить дополнительный опе ратор DD к пункту процедуры. Для этого к оператору вызова про цедуры необходимо добавить новый оператор DD, у которого в качестве имени требуется указать:
// и м я п ун к т а п р о ц е д у р ы , и м я dd D D . . .
Пусть к процедуре Р из предыдущего примера надо добавить оператор DD с именем ММ. Для этого необходимо кодировать следующие операторы:
/ / Р Р |
E X E C |
Р |
/ / T l . M M |
D D |
S Y S O U T = A |
Имя добавляемого оператора DD должно отличаться от имен ' операторов DD пункта процедуры.
Все замены, дополнения и изменения в операторах процедуры выполняются только в момент вызова процедуры и не меняют копию процедуры в библиотеке или во входном потоке.
92
3.7. ОПЕРАТОРЫ КОМАНД, КОММЕНТАРИЙ, ОГРАНИЧИТЕЛЬНЫЕ И ПУСТЫЕ ОПЕРАТОРЫ
Оператор команд предназначен для ввода команд через вход ной поток. Команды, находящиеся во входном потоке, выполняют ся в момент ввода входного потока. Поэтому в мультипрограм мных режимах команды и задания, с которыми они вводятся, будут выполняться в разное время. Формат операторов команды
II к о м а н д а о п е р а н д ы к ом м е н т ар и и
Оператор комментариев предназначен для записи любой ин формации, которая может быть полезна для понимания использо вания или назначения операторов языка управления заданиями. Оператор комментариев имеет следующийформат:
II* к ом м ен т ар и и
Ограничительный оператор предназначен для указания конца данных во входном потоке. В однопрограммном режиме ограни чительный оператор обязателен в конце набора данных. В мульти программных режимах его можно не употреблять в конце набора данных, который начинается оператором DD*, однако его обяза тельно следует употреблять в конце набора данных, который начи нается операторо'м DD DATA. Ограничительный оператор имеет следующий формат:
/* к о м м е н т а р и и
Пустой оператор указывает системе на конец задания. Считав пустой оператор, система помещает задание во входную очередь в мультипрограммном режиме или инициирует его выполнение в однопрограммном режиме и начинает искать следующий оператор задания. Применение пустого оператора для указания конца зада ния необязательно. Пустой оператор имеет следующий формат: //
3.8. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ ЯЗЫКА УПРАВЛЕНИЯ ЗАДАНИЯМИ
Пусть некоторый набор данных создается программой А, моди
фицируется программой В и используется |
программой С. После |
||
этого он не нужен. Все три программы выполняются |
последова |
||
тельно, как пункты одного задания. |
Класс |
задания |
В, приори |
тет— 7. Объем памяти, необходимый |
для |
выполнения |
задания, |
составляет 50К. Имя задания ВТ. Набор данных размещается на
диске 5050. |
Первичное |
количество памяти |
25 дорожек, вторич |
ное— 5. Так |
как набор |
данных существует |
только в пределах |
одного задания, он является временным. Программа А использует входной набор данных, находящийся во входном потоке. Програм ма С вырабатывает выходной набор данных на устройство систем
93
ного вывода (класс А). Задание может выглядеть следующим образом:
/ / В Т |
J O B |
/ / S T I |
E X E C |
/ / D D N 1 |
D D |
II |
D D |
/ / I N P U T |
в х о д н о й н а б о р д а н н ы х
C L A S S = B , P R T Y = 7 , R E G I O N - 5 0 K 1 P G M = A
U N I T = 5 0 5 0 , D I S P = ( N E W , P A S S ) , S P A C E = ( T R K , (25, 5 ) )
*
I*
/ / S T 2 |
E X E C |
P G M = B |
/ / D D N 2 |
D D |
D S N = * . S T 1 . D D N 1 , D I S P = ( M O D , P A S S ) |
/ / S T 3 |
E X E C |
P G M = C |
/ / D D N 3 |
D D |
D S N = * . S T 1 . D D N 1 , D I S P = ( O L D , D E L E T E ) |
/ / O U T P U T ' D D |
S Y S O U T = A |
Так как набор данных является временным, имя ему можно не присваивать.
Если тот же набор данных используется в различных заданиях, то он не может быть временным. Пусть его имя будет BETA и он располагается на томе 222222 устройства 5050. Необходимо выпол нить те же самые программы, но в различных заданиях. Набор данных BETA сохранить. Предусмотреть автоматический рестарт пункта задания для программ А и С.
Задание, создающее набор данных BETA:
/ / B T l |
J O B |
C L A S S = B , P R T Y = 7, R E G I O N = 5 0 К |
/ / S T I |
E X E C |
P G M = A , R D = R |
/ / D D N l |
D D |
D S N = B E T A , D I S P = ( N E W , K E E P , D E L E T E ) , |
/ / |
U N I T = |
5050, V O L = S E R = 222222, |
If |
S P A C E = ( T R K , (2 5 ,5 )) |
|
/ / I N P U T |
D D |
* |
в х о д н о й н а б о р д а н н ы х
!*
Задание, модифицирующее набор данных BETA:
// В Т 2 |
J O B |
C L A S S = B , P R T Y = 7 , R E G I O N = 50K! |
/ / S T 2 |
E X E C |
P G M = B |
/ / D D N 2 |
D D |
D S N = B E T A , U N I T = 5 0 5 0 , |
/ / |
V O L = S E R = 222222, D I S P = ( M O D , K E E P ) |
Задание, использующее набор данных BETA:
// В Т 2 |
J O B |
C L A S S = B , P R T Y = 7 , R E G I O N = 50K |
/ / S T 3 |
E X E C |
P G M = C , R D = R |
/ / D D N 3 |
D D |
D S N = B E T A , U N I T = 5 0 5 0 , |
/ / |
V O L = S E R = 2 2 2 2 2 2 , D I S P = ( O L D , D E L E T E , K E E P ) |
|
/ / O U T P U T D D |
S Y S O U T = A |
Пусть необходимо выполнить те же действия, но набор данных BETA каталогизируется при создании.
Задание, создающее набор данных BETA:
// В Т 1
// STJ IID D N 1
//
//
/ / I N P U T
J O B |
C L A S S = B , P R T Y = 7 , R E G I O N = 5 0 K |
E X E C |
P G M = A , R D = R |
D D |
D S N = B E T A , D I S P = ( N E W , C A T L G , D E L E T E ) , |
U N I T = 5 0 5 0 , V O L = S E R = 2 2 2 2 2 2 , |
|
S P A C E = ( T R K , (2 5 ,5 )) |
|
D D |
* |
в х о д н о й н а б о р д а н н ы х
I *
Задание, модифицирующее набор данных BETA*
// В Т 2 |
J O B |
C L A S S = B , P R T Y = 7 , R E G I O N = 50K |
//S T 2 |
E X E C |
P G M = B |
/ / D D N 2 |
D D |
D S N = B E T A , D I S P = ( M O D , C A T L G ) |
Задание, использующее набор данных BETA:
// В Т З |
J O B |
C L A S S = B , P R T Y = 7 , R E G I O N = 5 0 K |
/ / S T 3 |
E X E C |
P G M = C , R D = R |
/ / D D N 3 |
D D |
D S N = B E T A , D I S P = (O L D , D E L E T E ) |
/ / O U T P U T D D |
S Y S O U T = A |
4. СУПЕРВИЗОР
4.1. ОБЩИЕ СВЕДЕНИЯ
Супервизор входит в состав управляющей программы. Он пред ставляет собой набор программ, выполняемых в ответ на запросы, поступающие из различных источников. Запросы реализуются через систему прерываний. Источниками запросов могут быть как аппаратные средства (завершение операции ввода-вывода, истече ние заданного интервала времени, внешние события, сбои в аппа ратуре и т. д.), так и программы. Запросы из программ представ ляют собой запланированные обращения к супервизору (напри мер, запрос на инициирование операции ввода-вывода), а также незапланированные действия программ (например, нарушение защиты памяти, переполнение и т. д.). Обслуживая запросы, су первизор выполняет управляющие действия, связанные с обеспе чением загруженности центрального процессора и координацией использования других ресурсов вычислительной системы.
Большинство программ супервизора является составной ча стью управления задачами. Супервизор ввода-вывода входит в состав управления данными. Многие программы супервизора включены в ядро операционной системы и постоянно находятся в оперативной памяти. Некоторые программы супервизора являются транзитными и загружаются в память по мере надобности. Про граммы супервизора выполняются в состоянии «супервизор», что позволяет им выполнять привилегированные команды.
В настоящей главе даются сведения о тех средствах суперви зора, которые могут быть использованы с помощью системных макрокоманд. Рассматриваются стандартные соглашения о связях между программами, принятые в операционной системе, а также методика использования системных макрокоманд. Как правило, использование средств супервизора совпадает для всех трех ре жимов управляющей программы, что обеспечивает программную совместимость этих режимов. Различия, зависящие от режима, особо оговариваются в тексте.
При описании макрокоманд применяются следующие синтакси ческие обозначения.
1. Слова или наборы слов, записанные строчными буквами допустимым употреблением цифр и пробелов, представляют собой синтаксические переменные, которые при употреблении макро команды необходимо заменить на соответствующие значения. Способ замены дан в описании макрокоманды. Все остальные зна-
96
ки, присутствующие в описании макрокоманды, в том числе и про писные буквы, должны употребляться так, как они записаны. Например,
регистр 1,Т
предусматривает, что «регистр 1» при написании макрокоманды необходимо заменить на конкретное значение, а сочетание «,Т» непосредственно употребить в макрокоманде. После замены ука занная выше запись может выглядеть следующим образом:
2,Т
где 2 является значением переменной «регистр 1».
2. Фигурные скобки { }, содержащие несколько расположен ных столбиком операндов, обозначают, что нужно сделать выбор одного из них. Например, обозначение
UJ
говорит о том, что необходимо употребить либо А, либо В.
3. Квадратные скобки [ ], содержащие один или несколько расположенных столбиком операндов, указывают на то, что нужно сделать выбор одного из них либо опустить запись. Например, обозначение
Ш
говорит о том, что можно употребить либо А, либо В, либо ничего не использовать при написании макрокоманды.
4. Многоточие «...» обозначает, что операнд, предшествующий многоточию, может быть повторен подряд несколько раз. Напри мер, обозначение
[ ц и ф р а ], . . .
свидетельствует о том, что цифра может употребляться несколько раз либо не употребляться совсем, так как она заключена в квад ратные скобки. С другой стороны, обозначение
ц и ф р а , |
. . . |
указывает на то, что цифра должна употребляться один или не сколько раз. В обоих случаях переменная цифра должна быть заменена на конкретное значение.
4,2. СОГЛАШЕНИЯ О СВЯЗЯХ
В операционной системе ОС ЕС используется модульный прин цип программирования. Модуль может объединяться и использо ваться с другими модулями, передавая им управление или полу чая управление от них. Для этого нужно соблюдать некоторые соглашения. К. ним относится, например, необходимость сохра нять содержимое регистров общего назначения при входе в про грамму и восстанавливать их при выходе. Соглашения необходи-
7. Заказ 3414, |
. 973 |
мо соблюдать, если заранее неизвестно, в каких сочетаниях про граммы будут использоваться.
В определенных случаях допустимы некоторые нарушения со глашений. Например, если известно, что программа не обращает ся к другим программам и не использует системных макрокоманд, то можно сохранять содержимое только тех регистров, которые используются в программе. Передачи и возврат управления, вы полняемые с помощью операционной системы (например, в дина мических структурах), требуют тщательного соблюдения согла шения о связях.
Соглашения о связях затрагивают сохранение и восстановление содержимого регистров, использование регистров связи при пере дачах управления, способы передачи и возврата управления.
При обсуждении соглашений всегда рассматривается пара, состоящая из вызываемой и вызывающей программ. Эти соглаше ния относятся ко всем вызываемым и вызывающим программам в системе. Каждая программа, которая получает управление при выполнении пункта задания от другой программы, первоначально является вызываемой программой. Во время выполнения этой про граммы может потребоваться работа какой-либо другой програм мы и первая программа становится вызывающей.
4.3. РЕГИСТРЫ СВЯЗИ
Регистры общего назначения 0, 1, 13, 14 и 15 называются реги страми связи и используются: управляющей программой. Рекомен дуется использовать их и при передаче управления от одной про граммы пользователя к другой независимо от того, осуществляется эта передача посредством управляющей программы или нет. Со держимое регистров связи может изменяться управляющей про граммой при выполнении передач управления и при использовании системных макрокоманд. Управляющая программа не изменяет содержимое регистров 2—12.
Регистры 0 и 1 используются для передачи параметров управ ляющей или вызываемой программе. В системных макрокомандах значения параметров засылаются в регистр 0 или 1 или оба реги стра. После этого производится обращение к программе суперви зора, использующей эти параметры. Эти действия выполняются в макрорасширении системной макрокоманды. Сама программа супервизора в макрорасширение не входит.
При передаче параметров от одной программы к другой число параметров может быть произвольным. В этом случае в регистр 1 записывается адрес списка параметров (рис. 18). Список парамет ров содержит одно слово на каждый параметр, выравненное по границе полного слова. Каждое слово содержит начальный адрес значения соответствующего параметра. Последнее слово в списке параметров отмечается «1» в старшем бите. Таким образом управ ляющая программа передает программе пункта задания информа-
98
дню из поля PARM оператора |
|
|||||
ЕХЕС. |
В этом |
случае список |
|
|||
параметров |
состоит из одного |
|
||||
слова, так |
как |
считается, что |
|
|||
передается один параметр. |
|
|||||
Регистр |
13 содержит |
адрес |
|
|||
области сохранения для про |
|
|||||
граммы, |
которой |
передается |
|
|||
управление. Управляющая про |
|
|||||
грамма |
может |
использовать |
|
|||
эту область |
при обработке за |
|
||||
просов, сделанных с помощью |
|
|||||
системных макрокоманд. Про |
|
|||||
грамма, |
которой |
передается |
|
|||
управление, может использо |
|
|||||
вать эту область сохранения с |
|
|||||
помощью макрокоманды SAVE. |
|
|||||
Регистр 14 при передаче уп |
|
|||||
равления вызываемой програм |
|
|||||
ме содержит либо |
адрес |
воз |
|
|||
врата к вызывающей програм |
|
|||||
ме, либо адрес возврата |
к уп |
Р и с . 18. П е р е д а ч а п а р а м е т р о в |
||||
равляющей |
программе, |
куда |
|
должна передать управление вызываемая программа после завер шения ее работы. В макрорасширениях большинства макрокоманд имеется команда, которая загружает регистр 14 адресом следую щей команды. Для возврата управления вызывающей программе может быть использована команда безусловного перехода по ре гистру 14. При этом необходимо обеспечить сохранность содержи мого этого регистра.
Регистр 15 может быть использован различным образом. При передаче управления из управляющей программы в нем находится адрес точки входа. При передаче управления любой другой про грамме необходимо адрес точки входа загрузить в регистр 15. В макрорасширениях системных макрокоманд в регистр 15 засы лается адрес списка параметров для управляющей программы. При возврате управления из вызываемой программы регистр 15 может содержать код возврата.
4.4. СОХРАНЕНИЕ РЕГИСТРОВ
Первым действием каждой программы должно быть сохране ние содержимого общих регистров, которые изменяются в процес се выполнения программы. Регистры 0, 1, 13, 14, 15 необходимо сохранять в любом случае, так как их содержимое, а также при знак результата изменяются при использовании системных мак рокоманд супервизора и управления данными.
Общие регистры запоминаются в области сохранения разме ром 18 слов, которая должна выделяться вызывающей програм-
7* |
99 |
А д р е с С о д е р ж и м о е
0 |
— 3 |
И с п о л ь з у е т с я п р о г р а м м а м и , н ап и сан н ы м и на П Л /1 |
||
4 — 7 |
А д р е с п р е д ы д у щ е й о б л а с т и с о х р а н е н и я |
|||
8 — 11 |
( з а п о м и н а е т с я в ы зы в а ю щ ей п р о гр а м м о й ) |
|||
А д р е с с л е д у ю щ е й о б л а с т и с о х р а н е н и я |
||||
12 — 15 |
( з а п о м и н а е т с я т е к у щ е й п р о гр а м м о й ) |
|||
Р е ги с т р 14 ( а д р е с в о зв р а т а ) |
||||
1 6 — 19 |
Р е г и с т р |
15 |
( а д р е с точки в х о д а ) |
|
2 0 — 2 3 |
Р е ги с т р 0 |
|
||
2 4 - 2 7 |
Р е ги с т р 1 |
|
||
2 8 — 31 |
Р е ги с т р 2 |
|
||
3 2 — 3 5 |
Р еги ст р |
3 |
|
|
3 6 — 3 9 |
Р е ги с т р |
4 |
|
|
4 0 — 4 3 |
Р е ги с т р 5 |
|
||
4 4 — 4 7 |
Р е ги с т р 6 |
|
||
4 8 — 51 |
Р е ги с т р |
7 |
|
|
5 2 — 5 5 |
Р е ги с т р |
8 |
|
|
5 6 — 59 |
Р е ги с т р |
9 |
|
|
6 0 - 6 3 |
Р еги ст р |
10 |
|
|
6 4 — 67 |
Р е ги с т р 11 |
|
||
6 8 — 71 |
Р е ги с т р |
12 |
|
|
|
Р я с . |
19. Ф о р м а т |
о б л а с т и с о х р а н е н и я |
мой. На рис. 19 приведен формат этой области. При передаче уп равления вызываемой программе адрес области сохранения дол жен содержаться в регистре 13. Содержимое каждого регистра запоминается в определенном месте области сохранения. Напри мер, регистр 0 всегда запоминается в 20—23 байтах области со хранения, регистр 2 — в 28—31 байтах и т. д. Проще всего запо минать все регистры. При этом последующие изменения в про грамме не приведут к изменению содержимого регистров.
Для сохранения регистров можно использовать команду груп повой записи (STM) либо макрокоманду SAVE. Последняя имеет следующий формат:
[и м я ] |
S A V E |
(р е ги ст р 1 [, регистр |
2] ) , [Т ] |
[, и д е н т и ф и к а т о р ] |
|
Регистры 1 и 2 |
обозначают, от какого и до |
какого регистра |
не |
||
обходимо |
осуществить сохранение. |
Регистры |
указываются в |
том |
же порядке, как при использовании команды групповой записи. Операнд Т свидетельствут, что необходимо произвести сохранение регистров 14 и 15.
В качестве идентификатора может быть любое имя, состоящее не более чем из 70 знаков, или звездочка. Если указана звездочка, то подразумевается имя макрокоманды. Если оно отсутствует, то подразумевается имя программной секции. В случае его отсутст вия это поле игнорируется.
Если указан идентификатор одним из перечисленных способов, то в макрорасширении, отступив 4 байта после адреса, приведен ного в регистре 15 (адрес точки входа), помещается 1 байт с ука-
№