Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

САОД / Прямой и библиотечный файлы

.doc
Скачиваний:
15
Добавлен:
26.04.2015
Размер:
37.38 Кб
Скачать

ПРЯМОЙ ФАЙЛ

В прямых файлах (иногда их называют файлами прямого доступа) существует непосредственная связь между ключом записи и ее местопо­ложением на носителе. При занесении логической записи в файл выпол­няется преобразование или отображение ключа записи в адрес памяти, по которому запись будет размещена. Методы преобразования ключа записи в ее адрес подробно рассмотрены в п. 9.6.

Записи, размещаемые на ВЗУ, блокируются и прямой доступ обеспе­чивается не к одной записи, а к блоку логических записей. Здесь разме­щаются записи, получившие один и тот же адрес, являющийся адресом блока. При обращении к логической записи рандомизирующая процеду­ра по ключу записи генерирует адрес блока, в пределах которого должна храниться искомая запись. Содержимое блока переносится в буферную область ОП, где из блока извлекается нужная логическая запись. Для устройств дисковой памяти, в которых минимальной адресуемой еди­ницей является сектор, размер блока выбирается равным сектору.

Поскольку размер блока ограничен, то назначение многим логичес­ким записям адреса, соответствующего адресу одного и того же блока, приводит к переполнению последнего. Поэтому проблема разрешения коллизий для прямого файла сводится к проблеме размещения записей переполнения. Для этого обычно используются средства, применяемые при страничной организации памяти. Для записей переполнения выделя­ются специальные блоки памяти (области переполнения), связанные ука­зателем с соответствующим блоком основной области. В блоке перепол­нения записи располагаются последовательно друг за другом. Каждая очередная запись, оказавшаяся в состоянии коллизии, размещается на первом же свободном участке памяти. При обращении к нужной логи­ческой записи по ее ключу вычисляется адрес основного блока, где долж­на быть размещена эта запись. Блок перемещается в буфер, где выясня­ется, найдена ли запись. Если запись отсутствует в основном блоке, то в буфер переносится содержимое блока переполнения. Поиск заканчива­ется успешно, если нужная запись находится. Поиск считается неудач­ным, если обнаружится свободный участок памяти или если поиск воз­вращается к первоначально просмотренному блоку.

Блоки переполнения желательно размещать в той же адресуемой единице памяти, что и основная область, например в пределах одного и того же цилиндра. Это позволяет избежать перемещения головок за­писи - воспроизведения. Однако возникающее чередование блоков переполнения и основных блоков в пределах одной и той же адресуемой единицы памяти приводит к нарушению линейной схемы адресации, что является существенным недостатком такого способа размещения записей переполнения.

При другом способе разрешения коллизий, получившие один и тот же адрес записи размещаются в любых свободных блоках основной области и связываются указателями в цепочку. Такой способ приводит, однако, к увеличению длины записей за счет указателей. Это обстоятельство может оказаться существенным, если файл состоит из множества неболь­ших записей. Обращение к записям переполнения в этом случае чаще всего приводит к перемещениям механизма доступа.

Если число записей в файле мало, а размер записей достаточно велик, то для организации прямого файла можно использовать схему прямой адресации. При этом соответствие между ключами записей и их адресами устанавливается так называемой таблицей перекрестных ссылок. В этой таблице, состоящей из адресов и ключей, каждому ключу назначен уникальный адрес внешней памяти. Для осуществления доступа к логической записи нужно по заданному значению ключа найти в таблице внешний адрес и извлечь командой ввода - вывода по этому адресу требуемую запись. Таблица может быть организована как после­довательный неупорядоченный список. В этом случае в нее легко добав­лять новые записи, но поиск можно вести только последовательным про­смотром (перебором). Таблица может быть упорядочена по значению ключа, и тогда для ускорения поиска в ней удобно применять двоичный поиск. Однако добавление и удаление записи в упорядоченную таблицу связано с ее перестройкой.

Адресами записей прямого файла могут быть абсолютные (адреса конкретных физических устройств) или относительные адреса. В послед­нем случае адрес представляет собой номер блока или дорожки, отсчи­танный от начала участка памяти, занимаемого файлом. Преобразование относительных адресов в абсолютные осуществляют в этом случае про­граммы ввода - вывода. При использовании относительной адресации прикладные программы становятся независимыми от типа НМД, от местоположения файла на пакете, от количества дорожек на цилиндре.

Эффективность прямого доступа в прямом файле достигается за счет устранения требования такой организации файла, при которой допускался бы как прямой, так и последовательный доступ к записям. Поэтому прямой файл в явном виде не ориентирован на последователь­ную обработку, хотя, в общем случае, записи прямого файла могут обра­батываться последовательно.

При последовательной обработке прикладная программа может за­дать адрес какой-либо записи, а затем при каждом обращении к файлу увеличивать этот адрес на единицу. При этом будут последовательно чи­таться записи в том порядке, в котором они физически размещены на диске. Никакой логики следования записей при этом не обеспечивается. Этот режим необходим при возникновении задачи обработки всех без исключения записей файла или его фрагмента.

В произвольном режиме обработки, естественном для прямого файла, ключ обрабатываемой записи преобразуется в адрес и в зависи­мости от характера обработки запись создается, удаляется, модифициру­ется, извлекается по этому адресу. Модифицируемая запись может воз­вращаться в память по прежнему адресу, если модификации не подвер­гался ее ключ.

В режиме корректировки файла новые записи добавляются в основ­ную область или в область переполнения в соответствии со значениями их ключей и назначенными адресами. Удаленные записи обычно поме­чаются символом удаления. Пространство памяти, занятое удаленной записью, может использоваться под новую запись, получившую этот же адрес. Физическое существование в файле удаленных записей требует лишнего анализа при поиске, поэтому динамичные прямые файлы необ­ходимо периодически реорганизовывать. Реорганизация выполняется последовательным чтением файла и последующим созданием прямого файла, состоящего из активных записей.

БИБЛИОТЕЧНЫЙ ФАЙЛ

Файл с библиотечной организацией состоит из последовательно организованных разделов, каждый из которых имеет свое имя и содержит одну или несколько логических записей. В начале файла размещается специальный служебный раздел, называемый справочником или оглавлением файла. Оглавление состоит из элементов, относящихся к отдельным разделам. Каждый элемент содержит имя раздела и его адрес (адрес первой записи раздела).

К каждому разделу библиотечного файла осуществляется прямой доступ через оглавление. Записи разделов просматриваются последовательно в порядке их физического размещения на носителе.

Характерным примером использования файла с библиотечной организацией является библиотека программ. В этом случае каждый раздел представляет собой отдельную программу или подпрограмму, вызов которых осуществляется по имени раздела. Обслуживание библиотек, т.е. помещение в них новых программ, удаление ранее записанных, переименование программ, их копирование и т.п., производится специальным комплексом системных программ под общим названием "Библиотекарь".

Произвольная обработка библиотечного файла заключается в прямом обращении к требуемому разделу и в обработке отдельных разделов файла в произвольной последовательности.

При последовательной обработке последовательно читаются и обрабатываются записи, относящиеся к одному разделу. Такая обработка в ряде задач является эффективной из-за простоты и удобства написания прикладных программ.

Корректировка библиотечного файла заключается в добавлении и удалении разделов. Новые разделы размещаются в конце файла на свободном участке памяти, и сведения о них заносятся в оглавление. При удалении раздела удаляется соответствующий элемент оглавления, так что доступ к записям раздела становится невозможным. Однако участок памяти, занимаемый удаленным разделом, не может быть использован до тех пор, пока не будет выполнено уплотнение файла, в процессе которого все разделы файла сдвигаются (перезаписываются), а оглавление корректируется. При этом исключаются неиспользуемые участки между разделами, и увеличивается свободный участок в конце области памяти, выделенной для файла. На этом участке размещаются вновь создаваемые разделы.