Cтраница 2
Размер области должен быть достаточным для размещения поля счета, ключа и данных, для всех несблокированных записей, содержащихся на дорожке. Для сблокированных записей эта область должна включать все поля счета и данных, содержащиеся на дорожке, и одну логическую запись. Для записей переменной длины в том случае, если этот операнд опущен, выделяется область минимального размера. [16]
При использовании несблокированных записей мы получаем 119 записей на цилиндр. Если же используются сблокированные записи, то можно получить 200 записей на цилиндр. Если мы решили бы выделить две дорожки для записей переполнения ( в связи с увеличением общего числа записей на цилиндре за счет блокирования), все равно мы получили бы лишь 180 записей на цилиндр. [17]
При использовании несблокированных записей мы получаем 119 записей на цилиндр. Если же используются сблокированные записи, то можно получить 200 записей на цилиндр. Если мы решили бы выделить две дорожки для записей переполнения ( в связи с увеличением общего числа записей на цилиндре за счет блокирования), все равно мы получили бы лишь 180 записей на цилиндр. [18]
Вспомним, что для сблокированных записей фиксированной длины ключ каждой логической записи помещается в область данных, а ключ последней записи блока - в область ключа блока. Если RKP 0 для сблокированных записей фиксированной длины, то ключ начинается с первого байта каждой записи, и поэтому средство удаления записей ( OPTCD L) не может быть использовано. [19]
Последний способ называется блокированием или образованием сблокированных записей. Для устройства, содержащего данные, нет никакой разницы между одиночной записью и блоком записей - одна запись обрабатывается аппаратурой так же, как и блок данных. Программы некоторых методов доступа определяют, как производится выполнение чтения или записи - по одной записи или группами записей. [20]
В таких файлах поля ключей, как правило, не используются. Допускаются несблокированные записи в формах F, U или V и сблокированные записи в форматах V и F. При организации файла задается экстент на диске, по меньшей мере достаточный для хранения всех необходимых записей. Конечно, последний блок может содержать меньшее, а не максимальное количество записей, однако во всех остальных блоках число хранящихся в них записей должно быть максимальным. Иногда последний блок каждой дорожки делается укороченным в такой мере, чтобы обеспечить максимальное использование объема дисковой памяти. В случае записей в формате V указывается максимальная длина записей и максимальный размер блока. В случае записей в формате U указывается максимальный размер записей. Записи размещаются последовательно, начиная с записи RI на первой дорожке экстента и до тех пор, пока все записи на окажутся записанными. Наборы данных, записанные с помощью программ стандартного последовательного метода доступа, не могут читаться путем использования программ индексного метода. Применение программ прямого метода позволяет прочитать любой набор данных. Поскольку диск по сравнению с лентой характеризуется более высоким быстродействием, то для хранения стандартных файлов с последовательной выборкой вместо лент часто используются диски. [21]
После выполнения четвертого шага сегменты сблокированной выходной записи оказываются в исходном входном буфере и выводятся на внешний носитель информации. Роль сегментов входного буфера играют исходная рабочая область и первый сегмент выходного буфера, которые и заполняются следующей сблокированной записью входного набора данных. В качестве рабочей области выступает теперь второй сегмент исходного выходного буфера. [22]
Когда обращение к записям осуществляется последовательно, следует задать операнд IOAREAS. В определяемой им области должно быть обеспечено место для ключа и данных в случае несблокированных записей; в случае сблокированных записей место нужно только для записей. Следовательно, длина области IOAREAS, определяется как KL RL для несблокированных файлов и RL NRECDS для сблокированных файлов. [23]
Наборы данных, организованные индексно-последовательным способом, должны записываться с ключами, при этом возможно использование записей типа F или V, но не типа U. Записи могут быть сблокированными или несблокированными, чаще бывают сблокированными. Для сблокированных записей поле ключа должно повторяться как часть поля данных. В случае несблокированных записей это не требуется. [24]
Для описываемых файлов применение ключей является необязательным, однако они все же чаще используются. Набор данных с прямым доступом позволяет осуществить почти полное управление форматом и размещением записей в этом наборе. Поскольку каждая запись размещается индивидуально, сблокированных записей не бывает. [25]
Затраты процессорного времени, необходимого для выполнения программы, пропорциональны величине ( NRD 1) - NWB-NF-NWC. Как видно из приведенного ниже примера, эти затраты могут быть весьма значительны, поэтому, если есть возможность, для трансляции программы следует использовать оптимизирующие компиляторы, особенно в тех случаях, когда оптимизатор передает в область ввода-вывода целые блоки, а не отдельные слова. Применение хорошо оптимизирующего компилятора, организующего ввод-вывод сблокированных записей, позволяет уменьшить затраты процессорного времени почти в 10 раз. [26]
Буква К в операнде тип означает, что будет осуществляться корректирование, буквы KN означают добавление. Если в соответствующей макрокоманде READ в качестве операнда область было взято S, то и в WRITE в качестве этого операнда можно тоже взять S; это вызовет автоматическое освобождение буфера по окончанию процесса записи. В тех случаях, когда работа идет со сблокированными записями или когда к набору данных добавляются новые записи, операнд длина может и не задаваться. Когда же длина указывается, следует позаботиться о том, чтобы не возникали какие-нибудь нежелательные ситуации. [27]
Макрокоманда CNTRL предназначена только для записей фиксированной длины. По этой команде выбирается указанный в макрокоманде приемный ( первый или второй) карман. Для набора данных с несблокированными записями макрокоманда CNTRL выдается после каждой макрокоманды GET, за исключением последней. Для сблокированных записей макрокоманду CNTRL нужно выдавать после получения по макрокоманде GET последней логической записи блока, за исключением последнего блока. [28]
Одна запись может состоять из нескольких блоков или даже томов. Расширенные записи переменной длины могут быть сблокированными и несблокированными. Если обрабатываются несблокированные записи, то в каждый блок помещается только один сегмент или одна логическая запись, при этом некоторые блоки могут оказаться заполненными не до конца. Если обрабатываются сблокированные записи, то в один блок может быть помещена одна запись или один сегмент, а в случае, если после занесения записи или последнего сегмента записи в блоке остается свободное место, то туда заносятся следующие записи или первый сегмент следующей записи, пока не заполнится весь блок. Один блок не может содержать двух сегментов одной и той же записи. [29]
Источники получения информации блоком управления данными. [30] |