ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.10.2024
Просмотров: 90
Скачиваний: 0
Второй пример иллюстрирует считывание трех разделов биб лиотеки с помощью базисного библиотечного метода доступа.
/ / C H O P |
D D |
|
L A |
|
S T |
|
O P E N |
|
B L D L |
|
L A |
B C I K L |
F I N D |
M C I K L |
R E A D |
|
C H E C K |
E N D |
В ' |
A |
|
|
C L |
|
B N E |
|
C L O S E |
I N D C B |
R E T U R N |
D C B |
|
L I S T |
D S |
D C |
|
|
D C |
|
D C |
|
D S |
|
D C |
|
D S |
|
D C |
|
D S |
|
D S |
E T A B L |
D S |
C O N S T |
D C |
B U F |
D S |
. . . , D S N = B I B L I O , D I S P = O L D
3, L I S T + 5 4 3, E T A B L
( I N D C B )
I N D C B , L I S T 3, L I S T + 1 2
I N D C B , ( 3 ) , C
B L O K , S F , I N D C B , B U F ,'S '
B L O K
M C I K L 3, C O N S T 3, E T A B L B C I K L
( I N D C B )
D S O R G = P O , M A C R F = R , D D N A M E = C H O P , E O D A D = E N D
OH
X '0 0 0 3 '
X'OOOE'
C 'M E M B E R O l'
C L 6
C ’M E M B E R 0 2 ’
C L 6
C M E M B E R 0 3 ’ C L 6
0 D
C L 4 X'OOOOOOOE' C L 8 0
В операторе DD описана библиотека BIBLIO. В программе для работы с библиотекой в макрокоманде DCB задана библиотечная организация. Работа с набором данных начинается с открытия блока управления данными INDCB. После этого выдается макро команда BLDL для получения адресов трех разделов библиотеки: MEMBEROl, MEMBER02 и MEMBER03. Для этого в ней указы вается адрес таблицы LIST, в которую будут помещены адреса указанных разделов. Таблица LIST содержит число элементов в ней, длину каждого элемента, имена разделов и резервирует ме сто для их адресов.
Затем следует макрокоманда FIND, которая настраивает блок управления данными на начало указанного в ней раздела библио теки. В данном случае в макрокоманде FIND указывается через регистр 3 адрес поля таблицы LIST, содержащего адрес соответ ствующего раздела библиотеки. После этого можно выдать мак рокоманды READ и CHECK для считывания записей раздела и контроля его завершения. Считывание выполняется в буфер BUF длиной 80 байтов. Длина считываемого блока берется из блока управления данными.
П *
163
После обработки первого раздела библиотеки весь цикл по об работке, начиная с макрокоманды FIND, повторяется для следую щего раздела и т. д.
По окончании каждого раздела библиотеки управление получает подпрограмма END, которая либо подготавливает продолжение обработки (переход к обработке следующего раздела), либо за крывает блок управления данными INDCB, когда все заказанные в программе разделы библиотеки обработаны.
6.9. СТРУКТУРА ИНДЕКСНО-ПОСЛЕДОВАТЕЛЬНОГО НАБОРА ДАННЫХ И МЕТОДЫ РАБОТЫ С НИМ
Индексно-последовательный набор данных представляет собой совокупность логических записей формата F или V. Каждая логи ческая запись имеет ключ. При записи на том прямого доступа логические записи могут объединяться в блоки. При этом на томе прямого доступа будем иметь блоки следующего вида.
Если логические записи не объединяются в блоки, то ключ логической записи помещается в поле ключа блока, а вся осталь ная часть логической записи — в область данных, если ключ пред шествует данным. Если ключ содержится внутри записи, то вся логическая запись помещается в поле данных.
Если логические записи объединяются в блоки, то в поле ключа блока помещается ключ последней логической записи блока, а поле данных блока содержит логические записи с их ключами.
При создании индексно-последовательного набора данных все его записи помещаются в область, называемую основной областью набора.
Работа с индексно-последовательным набором данных предпо лагает поиск по ключу. Для сужения области поиска во время создания индексно-последовательного набора данных управляю щей программой создается серия индексов: индекс дорожек на каждом цилиндре основной области, индекс цилиндров и до трех уровней главных индексов. Когда основная область набора данных занимает более одного цилиндра, создается область индексов, которая содержит индекс цилиндров и главные индексы. Память' на эту область может быть запрошена с помощью отдельного опе ратора DD, т. е. область индексов может быть независима от остальных областей индексно-последовательного набора данных..
Самым низшим уровнем индексов индексно-последовательного набора данных является индекс дорожек. Он заводится на каждом' цилиндре основной области для того, чтобы сократить поиск запи си на цилиндре до поиска на одной дорожке. Индекс дорожек размещается на нулевой дорожке цилиндра и содержит для каж дой дорожки цилиндра физический адрес первой записи данных и ключ последней записи на дорожке. На каждом цилиндре можут быть заведена область переполнения цилиндра (путем задания полей DCBOPTCD и DCBCYLOFL в блоке управления данными). Эта область используется в тех случаях, когда на дорожку добав
164
ляется запись, а дорожка целиком заполнена. Тогда возможны две ситуации. Если добавляемая запись имеет ключ, превышающий ключи всех записей дорожки, то она попадает в область перепол нения. В противном случае все записи дорожки с ключами, пре вышающими ключ новой записи, сдвигаются, а последняя запись дорожки попадает в область переполнения. В обоих случаях с помощью индекса дорожек осуществляется «продление» дорожки в область переполнения цилиндра.
Следующим по старшинству является индекс цилиндров. Вве дение индекса цилиндров позволяет вместо поиска на всех цилинд рах основной области набора данных осуществлять его только на одном цилиндре. Для каждого цилиндра основной области индекс цилиндров содержит физический адрес индекса дорожек и ключ последней записи цилиндра.
Если набор данных содержит большое количество цилиндров, то индекс цилиндров тоже достаточно велик. Чтобы сократить время просмотра индекса цилиндров, программист может запро сить построение главных индексов (путем задания полей DCBOPTCD и DCBNTM блока управления данными).
Предположим, что программист запросил построение главных индексов при условии, что индекс цилиндров занимает более четы рех дорожек. Тогда для каждых четырех дорожек индекса цилиндр ров в главном индексе низшего уровня будет содержаться физи. ческий адрес первой из четырех дорожек и ключ последней записи последней из этих четырех дорожек индекса цилиндров. Если при
Главный индекс
Рис. 28. Структура индексно-последовательного набора данных
165
этом окажется, что главный индекс низшего уровня занимает бо лее четырех дорожек, то управляющая программа построит глав ный индекс более высокого уровня для сокращения времени по иска в главном индексе низшего уровня. Этот процесс может продолжаться до тех пор, пока не будут построены главные индек сы трех уровней.
Итак, описанная структура индексно-последовательного набо ра данных (рис. 28) дает возможность свести поиск некоторой записи по ключу к поиску ее на одной дорожке тома прямого до ступа без просмотра всех записей набора, основываясь на просмот ре лишь индексов набора данных.
При добавлении записей в набор данных может понадобиться наличие областей переполнения.
Программист может предусмотреть на каждом цилиндре об ласть переполнения цилиндра, он может организовать независи мую область переполнения (путем задания поля DCBOPTCD блока управления данными). Память под независимую область переполнения может быть запрошена с помощью отдельного опе ратора DD.
Если память под индексно-последовательный набор данных запрашивается с помощью нескольких операторов DD, то только первый из них имеет имя, остальные не должны быть поименованы.
/ / V I V O D |
D D |
D S N = S A L U T ( I N D E X ) , . |
/ / |
D D |
D S N = S A L U T ( P R I M E ) , . |
II |
D D |
D S N = S A L U T ( O V F L O W ) |
Слово INDEX в скобках означает запрос памяти под индекс ную область, слово PRIME — под основную область, а слово OVFLOW — под независимую область переполнения.
Если сравнивать работу с областью переполнения цилиндра и работу с независимой областью переполнения, то можно заметить, что использование области переполнения цилиндра ведет к выиг рышу во времени поиска записи, но может привести к большим потерям внешней памяти, так как некоторые области переполне ния могут вообще не использоваться. Использование независимой области переполнения ведет к проигрышу во времени поиска за писи, который вызывается перемещением механизма доступа, но позволяет более экономно использовать внешнюю память. Целе сообразно сочетать использование областей переполнения обоих видов.
При работе с индексно-последовательным набором данных программист имеет возможность удалять некоторые записи из набора данных (задается поле DCBOPTCD блока управления данными). Чтобы управляющая программа знала, какие записи индексно-последовательного набора данных можно удалить, программист должен предусмотреть в своей программе возмож ность метить такие записи кодом FF в первом байте логической записи фиксированной длины или пятом байте записи переменной длины. Однако простановка указанного кода не означает, что
166
соответствующая запись сразу будет удалена из набора данных. Эта запись будет содержаться в наборе данных до тех пор, пока в результате добавления новых записей не сложится такая ситуация, что она должна быть перемещена в область переполнения. В этот момент запись физически удаляется из набора данных. Если про грамма выполняет последовательную обработку записей индексно последовательного набора данных, то для нее записи с кодом FF
не представляются. При выборочной обработке записей |
в про |
|
грамме нужен контроль для вылавливания таких записей. |
набо |
|
При интенсивной работе |
с индексно-последовательным |
|
ром данных через некоторое |
время области переполнения |
могут |
оказаться достаточно сильно заполненными, что приведет к пони жению скорости поиска в наборе данных, либо целиком заполнен ными, так что дальнейшее расширение набора данных станет не возможным. В каждом из этих случаев требуется реорганизация индексно-последовательного набора данных, которую можно вы полнить, используя утилиту IEBISAM.
Управляющая программа может регистрировать некоторые статистические данные по обслуживанию индексно-последователь ного набора данных и помещать их в блок управления данными (задается поле DCBOPTCD блока управления данными). При этом в распоряжение программиста предоставляются сведения о числе заполненных областей переполнения цилиндров, числе неис пользованных дорожек в независимой области переполнения,чис ле обращений к тем записям из областей переполнения, которые не являются первыми в цепочках.
Индексно-последовательный набор данных создается путем ис пользования режима загрузки индексно-последовательного метода доступа с очередями. Этот же режим может применяться для до
бавления записей в конец |
существующего |
индексно-последова |
|
тельного набора данных. Макрокоманда PUT, используемая в этом |
|||
случае для записи, может |
работать |
либо |
в режиме указания, |
либо в режиме пересылки. |
|
доступа с очередями имеет |
|
Индексно-последовательный метод |
еще один режим работы — режим сканирования. Этот режим может использоваться для последовательной обработки или обновления всего набора данных или его части. Макрокоманда GET, приме няемая в этом случае для считывания набора данных, может ра ботать либо в режиме указания, либо в режиме пересылки. Для задания начальной точки последовательной обработки набора данных предоставляется макрокоманда SETL. Если предпола гается последовательная обработка нескольких участков индекс но-последовательного набора данных, то между двумя соседними макрокомандами SETL нужно выдавать макрокоманду ESETL. В основных чертах индексно-последовательный метод доступа с очередями подобен последовательному методу доступа с очере
дями.
Базисный индексно-последовательный метод доступа может использоваться для занесения новых записей данных между запи
167
сями существующего индексно-последовательного набора данных, добавления записей в конец набора данных, а также для выбо рочной обработки или обновления записей.
С помощью макрокоманд READ или WRITE осуществляется поиск записи по указанному в ней ключу. В остальном базисный индексно-последовательный метод доступа подобен базисному последовательному методу доступа.
При добавлении записей переменной длины к индексно-после довательному набору данных с помощью базисного индекснопоследовательного метода доступа программист должен обеспе чить рабочую область. Размер этой области должен быть таков, чтобы она могла вместить данные с целой дорожки. Эта область описывается в полях DCBMSWA и DCBSMSW блока управления данными (адрес и размер). При работе с записями фиксированной длины такая область не требуется, однако выделение ее даст зна чительный выигрыш во времени обработки.
При использовании базисного индексно-последовательного ме тода доступа для ускорения поиска записи имеется возможность помещения главного индекса высшего уровня в оперативную память. Управляющая программа поместит главный индекс в опера тивную память, если в полях DCBMSHI и DCBSMSI блока управ ления данными определены адрес и размер соответствующей обла сти. Для существующего индексно-последовательного набора дан ных длина главного индекса высшего уровня может быть получе на из поля DCBNCRHI в подпрограмме модификации блока уп равления данными. Здесь же должна быть выделена область опе ративной памяти соответствующего размера.
Рассмотрим два примера работы с индексно-последователь ным набором данных. В первом примере выполняется создание ин дексно-последовательного набора данных путем использования в качестве входной информации последовательного набора данных на магнитной ленте. Последовательный набор данных состоит из записей фиксированной длины, расположенных в порядке возра стания ключей. Длина записи 80 байтов, ключи находятся в 10— 29 байтах. При записи в индексно-последовательный набор данных логические записи объединяются в блок по 5 записей. Запросим на каждом цилиндре область переполнения в одну дорожку; построе ние главных индексов, если индекс цилиндра превысит 4 дорожки; статистику о состоянии набора данных.
/ / V I V O D |
D D |
D S N = S H A R ( P R I M E ) , D C B * = ( D S 0 R G = 1S, |
/ / |
|
O P T C D - M Y R , C Y L O F L = 1, N T M = 4 , R K P = 9, K E Y L E N = 20, |
/ / |
|
R E C F M = F B , L R E C L = 8 0 , B L K S I Z E = 4 0 0 ) , U N I T = 5050, |
Ц |
|
S P A C E = (C Y L , 1 0 0 ,, C O N T I G ) , D I S P = (, K E E P ) |
Для входного последовательного набора данных открывается блок управления данными PDCB, для выходного индексно-после довательного набора — ISDCB. Ввод информации из последова тельного набора данных осуществляется с помощью последова тельного метода доступа с очередями. Макрокоманда GET, ис пользуемая для этой цели, работает в режиме указания. После ее
168