
книги из ГПНТБ / Система математического обеспечения ЕС ЭВМ
..pdfсоответствие номер этого блока от начала набора, то по этому номеру управляющая программа легко вычислит относительный адрес дорожки и номер блока на этой дорожке. Недостатком такой организации набора данных является то, что место под набор дан ных приходится выделять не по числу блоков в нем, а по диапазо ну номеров, что ведет к значительным потерям памяти, если доста точно большое число номеров не используется. Этот недостаток можно обойти, если использовать таблицу адресов блоков. При за писи блока данных в набор можно получить физический или отно сительный адрес блока и поместить его в таблицу адресов вместе с идентификатором этого блока с тем, чтобы поиск в таблице по идентификатору блока давал ее адрес.
Чем больше набор данных, тем менее эффективна такая орга низация набора данных, ибо таблица адресов становится велика, занимает достаточно большой объем памяти (оперативной или внешней), соответственно увеличивается время поиска в таблице.
Кроме прямой адресации, при прямой организации наборов данных можно использовать косвенную адресацию. В таком слу чае обычно имеем более общий, но зато более сложный способ ор ганизации набора данных. При косвенной адресации адрес каждо го блока набора данных получается как результат некоторых ма тематических преобразований ключа этого блока. Такие преобра зования носят название рандомизации. Косвенная адресация при меняется, когда диапазон изменения ключей блоков данных зна чительно превышает диапазон числа блоков и, следовательно, диапазон изменения адресов блоков. Поэтому возникает необходи мость в алгоритме, с помощью которого можно осуществить отобра жение диапазона ключей блоков на диапазон их адресов.
Избранный способ должен обеспечивать, во-первых, преобра зование любого допустимого ключа в адрес заданного диапазона и, во-вторых, небольшой процент синонимов, т. е. таких блоков, пре образование ключей которых приводит к получению одного и того же адреса. Эффективное средство борьбы с синонимами — отведе ние под набор данных большего объема памяти, чем требуется. Блок, который записывается по адресу, полученному путем преоб разования его ключа в адрес, называется основным. Все другие блоки, при преобразовании ключей которых получается тот же ад рес и которые не могут быть записаны по этому адресу, называют ся блоками переполнения. Число блоков переполнения можно зна чительно снизить, если преобразовывать значение ключа в адрес дорожки, а не в адрес блока.
Если рандомизация ведется до уровня адреса блока, то каж дый синоним порождает блок переполнения. Если же рандомиза ция выполняется до уровня адреса дорожки, то синонимы не по рождают блоков переполнения до тех пор, пока дорожка не будет заполнена. Существуют различные способы рандомизации, напри мер деление с остатком, свертка, переход к другой системе счисле ния и т. д. Выбор определенного способа производится опытным путем.
171
Базисный прямой метод доступа допускает следующие способы идентификации блока данных.
1.Относительный адрес блока (3-байтовое двоичное число). Используется только для записей фиксированного формата. Управ ляющая программа преобразует относительный адрес в физиче ский адрес блока.
2.Относительный адрес дорожки (2-байтовый двоичный номер
дорожки и однобайтовый двоичный номер блока). Относительный адрес дорожки преобразуется управляющей программой в физиче ский адрес блока.
3.Относительный адрес дорожки и ключ. Управляющая про грамма вычисляет физический адрес дорожки и осуществляет по иск блока на этой дорожке по ключу.
4.Физический адрес блока. Использование физических адресоз приводит к тому, что набор данных становится неперемещаемым.
При использовании для идентификации блока данных относи тельного адреса дорожки и ключа можно запросить расширенный поиск (задание полей DCBOPTCD и DCBL1MCT блока управле ния данными), который состоит в том, что поиск блока по ключу ограничивается просмотром не одной дорожки, а некоторого коли чества дорожек или блоков, заданного программистом в блоке уп равления данными. Расширенный поиск можно использовать также при добавлении блоков для поиска свободного места в наборе дан ных.
Базисный прямой метод доступа позволяет во время чтения или записи блока данных получать в определенной области, указанной в соответствующей макрокоманде, адрес этого блока данных в форме, определенной в поле DCBOPTCD блока управления дан ными.
Если несколько подзадач выполняют одновременно обновление некоторого блока данных одного и того же набора данных, ссыла ясь при этом на один блок управления данными, то базисный пря мой метод доступа дает возможность подзадаче, первой выдавшей макрокоманду READ, предотвратить обновление этого блока дру гими подзадачами (если в макрокоманде READ указан соответст вующий операнд). Остальные подзадачи начнут работу с этим бло ком данных только после выполнения в данной подзадаче макро команды WRITE или RELEX.
Набор данных с прямой организацией создается с помощью
специального |
режима |
базисного |
последовательного |
метода досту |
п а -р еж и м а |
создания |
набора |
данных с прямой |
организацией. |
Последовательная обработка набора данных с прямой организаци ей может выполняться с помощью базисного последовательного метода доступа, а выборочная обработка — с помощью базисного прямого метода доступа.
Рассмотрим два примера, иллюстрирующие создание и обра ботку набора данных с прямой организацией. В первом примере создается набор данных с прямой организацией. Создание набора данных выполняется на базе последовательного набора данных,
172
находящегося на магнитной ленте. Создаваемый набор данных име ет следующие характеристики: формат записи F, записи имеют 4-байтовые ключи, диапазон изменения которых 1050—6050. За прос памяти под набор данных делается на 5000 записей. Если за пись с некоторым ключом из указанного диапазона отсутствует, записывается фиктивная запись.
C I K L
S P A V N
F I K T •
E N D
К О N E C
O B L V V O D
V I V O D
L
O P E N
L A
G E T
L R
C
B N E
W R I T E C H E C K
AH
В
C
BH
W R I T E C H E C K
AH
BR L A
BR
CL O S E
DS ' ’
DC B
D C B
10, = F '1 0 5 0 '
( V I V O D , ( O U T P U T ) , V V O D )
5, S P A V N V V O D
3, |
1 |
|
1 0 , 0 ( 3 ) |
||
F IK T |
|
|
B L O K 1 . S F , V I V O D , (3) |
||
B L O K ! |
||
10, = |
H T |
|
C I K L |
|
|
10, = |
F '6 0 4 9 ' |
K O N E C
B L O K 2 , S D , V I V O D , O B L
B L O K 2
10, = H T 5
5, F IK T 5
( V V O D , , V I V O D )
C L 5 0
D S O R G = P S , M A C R F = ( G L ) , E O D A D = E N D , D D N A M E = H A B
D S O R G = P S , M A C R F = ( W L ) , D D N A M E = H A B 2
Для входного последовательного набора данных открывается блок управления данными VVOD в режиме ввода (INPUT), а для выходного— блок управления данными VIVOD в режиме вывода (OUPUT). Считывание входного последовательного набора данных осуществляется с помощью макрокоманды GET в режиме указа ния. После выполнения этой макрокоманды адрес очередной логи ческой записи находится в регистре 1.
Если это следующая запись формируемого набора данных с прямой организацией, то используется макрокоманда WRITE для ее записи на том прямого доступа.
Если же запись с некоторым ключом из вышеуказанного диа пазона отсутствует во входном наборе данных, то в формируемый набор помещается фиктивная запись (режим SD макрокоманды
WRITE).
Формирование набора данных с прямой организацией заверша ется после записи в него 5000 блоков данных, после чего выпол няется закрытие всех блоков управления данными.
Во втором примере осуществляется добавление блоков данных в только что созданный набор данных с прямой организацией. До полнительные блоки вводятся с магнитной ленты.
173
C IK L
••
V V O D
V I V O D
K L U C H
D A N N
O S T A T O K
O P E N
G E T
Р
S H
S T
W R I T E W A I T C L C
B E
D C B '
D C B
D S
D S
D S
( V I V O D , ( O U T P U T ) , V V O D ) V V O D , K L U C H
3, K L U C H
3 , = H T 0 5 0 '
3, O S T A T O K
B L O K , D A , V I V O D , D A N N ,' S ' , K L U C H , O S T A T O K + 1 E C B = B L O K
B L O K + 1 ( 2 ) , = X ' 0 0 0 0 ' C IK L
D S O R G = P S , M A C R F = ( G M ) , E O D A D = N N N , D D N A M E = H A B 1
D S O R G = D A , M A C R F = ( W A ) , D D N A M E = H A B 2 F
CL 100
F
Для входного последовательного набора ' данных |
открыва |
ется блок управления данными VVOD в режиме ввода |
(INPUT), |
а для набора данных с прямой организацией — VIVOD в режиме вывода (OUTPUT). Считывание входного набора данных осуществ ляется с помощью макрокоманды GET в режиме пересылки (пос ледовательный метод доступа с очередями). В результате очеред ная логическая запись помещается в область KLUCH. После это го, используя ключ, вычисляют относительный номер блока, кото рый запоминается в области OSTATOK.
Последующая макрокоманда WRITE помещает данную логиче скую запись как блок данных в набор данных с прямой организа цией.
В данном примере синхронизация операции вывода с выполне нием программы осуществляется с помощью макрокоманды WAIT. Анализ ошибочных ситуаций при выводе возлагается на програм миста.
7. ОСОБЕННОСТИ РЕАЛИЗАЦИИ языков ПРОГРАММИРОВАНИЯ
АЛГОЛА-60, ФОРТРАНА IV, КОБОЛА И ПЛ/1 ДЛЯ ОС ЕС ЭВМ
7.1. СТРУКТУРА СИСТЕМЫ ПРОГРАММИРОВАНИЯ'
Каждая из систем программирования ОС ЕС рассчитана на оп ределенный класс проблемных программистов (пользователей) и дает им возможность записывать алгоритмы и запросы на предо ставление услуг из определенного подмножества полного набора услуг ОС ЕС таким образом, что становится необязательным зна комство ни с внутренним устройством системы и ОС ЕС, ни с пол ным набором возможностей и услуг ОС ЕС.
Принято считать составными частями системы программиро вания исходный язык, языковый транслятор, системные библиоте ки, и, если необходимо, службу ведения личных библиотек.
Трансляторы обсуждаемых систем программирования относят ся к типу компилирующих программ и называются в дальнейшем компиляторами. Порцией исходного текста для каждого процесса компиляции служит так называемый исходный модуль: для Алго-
ла-60 и |
ПЛ/1 |
это программа или процедура, для |
Кобола — про |
|
грамма, |
для |
Фортрана IV — главная |
программа, |
подпрограмма |
или подпрограмма-функция. Результат |
компиляции, называемый |
объектным модулем, теряет, с точки зрения редактора связей, ис ходную языковую индивидуальность и обрабатывается затем на общих основаниях.
7.2.ФОРТРАН IV ОС ЕС
Всистему программирования Фортран IV входят два компи лятора: отладочный компилятор G и оптимизирующий компилятор
Н. Общая часть языковых версий для этих компиляторов содер жит в виде правильного подмножества ANS-Фортран, известный ранее как ASA-Фортран. Общие для G и Н расширения языка ANS-Фортран представляют собой, с одной стороны, элементы Фортрана V, ставшие традиционными для современных реализа ций, с другой — средства совместимости с ранними версиями язы ка, в частности, с Фортраном II. Кроме того, как и при любой реа лизации, существуют машинозависимые уточнения стандартного языка и элементы, зависимые от конкретной операционной систе мы. Ниже приведена схема состава языка Фортран IV ОС ЕС.
175
Ф о р т р а н _ IV О С Е С ~
■ A N S - Ф о р т р а н г э П р о м е ж у т о ч н ы й Ф о р т р а н г э Б а з и с н ы й Ф о р т р а н М а ш и н о з а в и с и м ы е у т о ч н е н и я
G— р а с ш и р е н и я — тольк о
Н— р а с ш и р е н и я — т ол ь к о
Э л е м е н т ы |
Ф о р т р а н а |
V |
Э л е м е н т ы |
Ф о р т р а н а |
II |
{О С Е С — за в и с и м ы е эл е м е н т ы
7.2.1. Машинозависимые уточнения языка
Для величин типа INTEGER максимум равен 231—1, т. е. 2147483647.
Для величин типа REAL:
максимум равен 1663, т. е. около 1075; минимум, отличный от нуля, равен 16~65, т. е. около 10~78;
количество значащих шестнадцатеричных цифр в зависи мости от объявления (TYPE DECLARATION) равно 6 или 14, т. е. около 7.2 или 16.8 десятичных цифр.
7.2.2. Элементы Фортрана V
Литерный набор для записи исходных программ расширен символом денежной единицы, относящимся к классу букв (см. приложение 2), а также двумя специальными литерами: ’-апост роф, & — логическое «И». Литеральные константы разрешается специфицировать заключением в одиночные апострофы.
Вводится понятие шестнадцатеричной константы для инициа лизации значений переменных. Шестнадцатеричная константа ог раничивается слева буквой Z, справа — ограничителем. Цифры шестнадцатеричной константы помещаются по две на каждый байт в правой части участка памяти, отведенного для соответствующей переменной, и дополняются слева нулями. При нехватке места в памяти обрезаются левые цифры константы.
Символическое имя может содержать символ денежной едини цы и, в частности, начинаться с этого символа. Размерность мас сивов может достигать 7. Разрешаются смешанные арифметиче ские выражения, т. е. операнды арифметических операций могут не совпадать по типу и по длине. Перед выполнением операции производится выравнивание типов и длин по старшему операнду согласно следующей схеме старшинства:
1( 2) |
1(4) |
/ |
С ( 8 ) — »-С (16) |
■R(4) |
R ( 8 ) — ►С (16) , |
||
|
|
N |
где I, R и С обозначают соответственно INTEGER, REAL и COMP LEX; цифрами обозначены длины в байтах.
Окончательный результат вычислений выравнивается по типу и длине левой части высказывания (statement) присваивания или по типу и длине, определяемым местом арифметического выраже ния: имеются в виду такие случаи, как индексное выражение или фактический параметр-выражение,-
176
Индексное выражение может иметь вид произвольного смешан
ного |
арифметического |
выражения с целыми и |
действительными |
операндами. Выражение |
может содержать элементы массивов и |
||
обращения к функциям. Результат приводится к целому типу. |
|||
В |
операциях отношения могут участвовать |
смешанные целые |
|
и действительные выражения. |
|
При неодназначной записи более чем двух операций возведения в степень подряд подразумевающиеся скобки расставляются, на чиная справа.
При возведении в степень показатель не может быть комплекс ным, а при комплексном основании — и действительным выраже нием.
При выравнивании действительной величины по комплексной мнимая часть принимается равной нулю. При выравнивании комп лексной величины по действительной мнимая часть игнорируется.
Под расширенной областью цикла понимается часть програм мы, выполняемая между выходом по прямой передаче управления из незавершенного самого внутреннего из гнезда вложенных друг в друга циклов и между возвратом управления в область действия этого же цикла; расширенная область должна находиться вне об ласти действия самого внешнего из гнезда вложенных циклов и не должна содержать других гнезд циклов, имеющих свои расширен ные области.
Высказывание PAUSE может иметь, кроме стандартных, сле дующий формат:
P A U S E ’ л и т е р а л ь н а я к о н с т а н т а ’
Выполнение этого высказывания состоит в передаче его текста оператору и переходе программы в состояние ожидания до вмеша тельства оператора.
Выполнение высказывания STOP в форме:
S T O P а
где а — не более чем пятизначное целое, влечет прекращение ра боты программы с передачей текста этого высказывания оператору.
Высказывание чтения может иметь, кроме стандартного, сле дующий формат:
READ (al, а2, ERR= a3, END —а4) список
где a l — целая переменная или константа длины 4, представляю щая собой ссылочный номер набора данных, получающий реальное содержание в dd-картах определения данных, внешних по отношению к фортрановской программе вы сказываниях языка управления заданиями ОС ЕС;
а2 — метка или массив с форматными данными, или NA- MELIST-имя;
аЗ — метка высказывания, получающего управление при ошиб ке ввода-вывода;
а4 — метка высказывания, получающего управление при попыт ке прочитать запись конца файла.
)2. Заказ 3414. |
177 |
Отсутствие одного из двух последних параметров или обоих сразу влечет в соответствующих ситуациях прекращение работы программы. Порядок записи параметров END и ERR несуществен.
Параметры высказывания
W R I T E ( a l , a 2 ) сп и с ок
аналогичны первым двум параметрам высказывания READ. Введено новое высказывание
N A M E L I S T / x l / с п и с о к 1 / х 2 / с п и с о к 2 . . .
где х 1, х2,... — NAMELIST-имена, указываемые в высказываниях чтения и записи и связывающие эти высказывания с соответствую щим^ NAMELIST-именам списками.
Данные для ввода и вывода по NAMELIST имеют формат
п р о б е л
&
N A M E L I S T — имя |
|
|
||
с 1 1 = с п и с о к |
11, |
с 12 = |
с п и с о к |
12, .« |
п р о б е л |
|
|
|
|
с 2 1 = сп и с ок |
21, |
с22 = |
сп и с о к |
22, . . . |
E N D
где cij — имя простой или индексированной переменной, или имя массива;
список ij — список целых и действительных констант, разде ленных запятыми.
Повторяющиеся группы констант могут быть изображены в со кращающей записи аналогично группам повторения в форматах
к * { ( с п и с о к к о н с т а н т )|к о н с т а н т а }
где к — коэффициент повторения.
Введены дополнительные спецификации форматов:
Z — для шестнадцатеричных полей данных, которые обрабаты ваются подобно шестнадцатеричным «литералам, дополняясь при вводе слева нулями, а при выводе — пробелами;
G — обобщенная спецификация для целых, действительных, двойной точности и логических данных, играющая роль специфи каций I, F,D,L в соответствии с объявленным или умалчиваемым типом переменных в списке ввода-вывода;
’литерал’ — используется наряду с обычным обозначением ли тералов: wH литерал;
Т — для указания номера той позиции в записи, начиная с ко рой производится передача данных.
Первая литера в записи, предназначенной для вывода на пе чать, действует как литера управления кареткой и на печать не выводится. Укажем рекомендуемые программисту значения первой литеры:
пробел— передвинуть каретку на одну строку (к началу сле дующей строки);
О — передвинуть каретку на две строки;
— — передвинуть каретку на три строки;
178
1— передвинуть каретку к первой строке следующей стра. ницы;
+— подавить переход к следующей строке.
Если запись передается не на печать или если первая литера
не специфицирована как wH или |
то первая литера представ |
ляет собой обычные данные. |
|
Если при печати числа по спецификациям I, D, Е, F или G ши рина поля указана недостаточной для выдачи старших значащих цифр, то все поле заполняется звездочками.
В стандартной записи высказываний ввода-вывода
R E A D |
( a l , а 2 ) сп и с о к |
|
R E A D |
( а ) сп и с ок |
|
W R I T E ( а ) сп и с ок |
||
E N D F I L E |
а |
|
R E W I N D |
а |
B A C K S P A C E а
первый параметр везде специфицируется и трактуется так же, как ссылочный номер набора данных в высказывании чтения.
В Фортране IV ЕС для ввода-вывода с прямым доступом к на борам данных введены следующие высказывания: DEFINE FILE, READ, WRITE, FIND.
D E F I N E F I L E a l ( k 1 , c l , b l , p i ) , а 2 ( к 2 , c2, b2, p 2 ) , . . .
где al, a2,. . . — беззнаковые целые константы, определяющие ссы лочные номера наборов данных;
к1, к2,. . . — беззнаковые целые константы, определяющие ко личество записей в соответствующих наборах дан ных;
с1, с2,. . . — максимальная длина записи (целая константа без знака) в наборах данных al, а2,...;
Ы, Ь2,... — принимают значения L, Е и U; U обозначает, что записи измеряются в словах и предназначены для бесформатных данных; Е обозначает, что записи измеряются в байтах и предназначены для фор матных данных; L обозначает, что записи измеря ются в байтах и могут содержать как форматные, так и бесформатные данные;
р1, р2,. . . — имена простых целых переменных, играющих роль указателей записи при операциях ввода-вывода.
Высказывание DEFINE FILE используется для декларирова ния описания наборов данных с прямым доступом и должно пред шествовать первому упоминанию этих наборов в операциях READ, WRITE и FIND:
R E A D ( а ’р, х, E R R = c ) сп и с о к
где а — ссылочный номер набора данных;
р— целое выражение, определяющее относительный номер за писи в наборе данных, начиная с которой выполняется чтение;
12* |
179 |
х— метка формата или имя массива с форматными данными; при бесформатном чтении этот параметр опускается;
с— метка, по которой передается управление при возникно вении состояния ошибки устройства ввода-вывода;
W R I T E ( а ’р, х ) сп и с ок
где параметры а, р и х имеют тот же смысл, что и соответствую щие параметры высказывания прямого READ.
F I N D ( a ’p)
где параметры а и р по смыслу подобны соответствующим пара метрам прямых READ и WRITE.
Это высказывание позволяет совмещать во времени операции поиска указанной записи и ввода-вывода предыдущей записи.
Высказывание DATA записывается в форме:
D A T A а 1 / с I /, а 2 / с 2 / , . . .
где а — список имен простых переменных, массивов и элементов массивов, при этом в качестве индексов используются це лые беззнаковые константы;
с— список констант, в котором повторяющиеся группы кон стант могут быть записаны с коэффициентом повторения
к* аналогично группам констант высказывания NAMELIST.
Программист имеет возможность управлять правилами умол чания с помощью следующего высказывания:
|
|
|
IM P L IC I T |
тип |
1*к1 (а 1), тип |
2*к 2 ( а 2 ) . . . |
|
|
|
|
||
где |
тип |
г — тип (INTEGER, REAL, COMPLEX |
или |
LOGICAL), |
||||||||
|
|
который в данной программной единице будет припи |
||||||||||
|
|
сываться по умолчанию всем именам, идентификато |
||||||||||
|
|
ры которых начинаются с одной из указанных в спис |
||||||||||
|
|
ке ai литер; |
|
|
|
при этом груп |
||||||
|
|
аг — список литер, разделенных запятыми; |
||||||||||
|
|
па алфавитноупорядоченных литер |
а п , а п + |
и . . . , |
а п |
|||||||
|
|
может быть записана в сокращенной форме ап—an + j ; |
||||||||||
|
* Ы — опция1, |
где k |
определяет |
умалчиваемую |
длину для |
|||||||
|
|
имен г-го списка: |
|
|
|
|
|
|
||||
|
|
|
|
|
|
Д л и н а , п р и п и с ы в а е м а я |
|
|||||
|
|
Тип |
|
|
|
и м ен а м си с т е м о й в о т |
|
|||||
|
|
|
|
Д л и н а |
с у т с т в и е |
оп ц и и |
*к |
|
|
|||
|
|
INTEGER |
2 |
или |
4 |
|
4 |
|
|
|
|
|
|
|
REAL |
|
4 |
или |
8 |
|
4 |
|
|
|
|
|
|
COMPLEX |
8 |
или |
16 |
|
8 |
|
|
|
|
|
|
|
LOGICAL |
1 |
или |
4 |
|
4 |
|
|
|
|
|
|
1 П о д оп ц и ей п о н и м а е т с я у к а з а н и е п р о гр а м м и с т а о в ы б р а н н о й |
им у с л у г е |
||||||||||
или |
в о з м о ж н о с т и |
си ст ем ы |
п р о гр а м м и р о в а н и я и з |
о п р е д е л я е м о г о |
д л я |
к а ж д о г о |
к он |
|||||
к р етн ого |
с л у ч а я |
сп и ск а |
у с л у г или в о з м о ж н о с т е й ; о т с у т с т в и е |
т а к о г о |
у к а з а н и я |
|||||||
обы ч н о в л еч ет п р и м е н е н и е н е к от ор ы х , о п р е д е л е н н ы х д л я |
д а н н о г о с л у ч а я , |
п р а |
||||||||||
вил |
у м о л ч а н и я . |
|
|
|
|
|
|
|
|
|
|
180