
10.2. Типы файлов
И РЕЖИМЫ ИХ ОБРАБОТКИ
Существуют следующие типы файловых структур данных: последовательный, индексно-последовательный; прямой и библиотечный файлы (принципы организации их рассмотрены в п. 10.3-10.6).
Перечисленные типы файлов отличаются друг от друга способом размещения записей файлов на внешнем носителе: в одном случае при размещении записей может существовать взаимосвязь между ключом записи и ее местоположением (адресом хранения), в другом - этой связи не существует. Ключом записи, как и ранее, будем называть информацию, однозначно определяющую запись и позволяющую ее выделить среди других записей.
Наиболее простым подходом к хранению записей файла является их последовательное размещение. Именно так организуются последовательные файлы. Все другие методы организации файлов преследуют следую-126 щие основные цели: уменьшить просматриваемые фрагменты файлов или обеспечить прямой доступ к нужной записи. Поскольку файловые структуры, как и все прочие структуры данных, должны предоставлять возможность включения и удаления записей, их поиска и модификации, то любой из предлагаемых методов организации файлов не должен усложнять эти операции с данными.
Характер файловой структуры и эффективность возможных режимов обработки элементов структуры во многом зависят от типа ВЗУ, на котором этот файл предполагается размещать. Последовательные файлы могут создаваться на всех типах внешних носителей, остальные три типа файлов могут создаваться только на носителях с непосредственным доступом: МД, МБ.
Для всех типов файлов возможны три основных режима их обработки: последовательный, произвольный и режим корректировки.
При последовательном режиме обработки записи файла передаются из ВЗУ в ОП и обрабатываются там в той последовательности, в которой они размещены на носителе. Последовательность обработки при этом никак не зависит от прикладных программ.
В произвольном режиме записи передаются в ОП и там обрабатываются в том порядке, в котором этого требует прикладная программа. Например, пусть файл содержит сведения о сотрудниках учреждения. Требуется получить справки об отдельных сотрудниках. При последовательной обработке в ОП вводятся подряд все записи файла и затем последовательно просматриваются. В результате просмотра всего файла будут найдены нужные записи. При произвольной обработке порядок просмотра записей может определяться, например, табельным номером этих сотрудников и просмотра всего файла не требуется.
В режиме корректировки в файл добавляются новые записи, удаляются устаревшие и модифицируются уже имеющиеся. Для осуществления корректировки требуется предварительный поиск нужной записи. При поиске файл может обрабатываться как в последовательном, так и в произвольном режимах.
Эффективность каждого из режимов обработки зависит от типа файла.
10.3. Последовательный файл
При формировании последовательного файла записи располагаются на носителе в порядке их поступления. Каждая очередная запись размещается на свободном месте сразу же за последней записью файла. При размещении записей не существует никакой связи между ключом или идентификатором логической записи и ее местоположением на носителе.
Все типы устройства ВП обеспечивают возможность последовательной Организации файла. Отдельные устройства предназначены для хранения только последовательных файлов. В соответствии с принципом функционирования этих устройств для доступа к отдельным записям
требуется доступ ко всем предыдущим записям файла. К таким устройствам относятся НМЛ, устройства ввода с перфолент и перфокарт, устройства построчной печати. НМД и НМБ допускают использование наряду с последовательным файлом и других типов файлов.
К записям последовательного файла возможен только последовательный доступ, осуществляемый через указатель текущей записи, указывающий на ту запись файла, которая читалась или записывалась последней. Операционная система запоминает адрес, по которому была направлена последняя команда записи или чтения, и следующая команда направляется по следующему адресу. Момент завершения просмотра файла обнаруживается по специальному признаку конца файла. В пер-фокарточном файле, например, последняя перфокарта содержит символы / *. Файлы на МЛ и МД содержат концевые метки файла.
Обычно записи последовательного файла имеют фиксированную длину. Однако некоторые системы позволяют работать с записями переменной длины. При этом задается максимальная длина блока, в который система управления данными помещает столько записей, сколько может там уместиться. Каждый блок должен содержать спецификацию длины блока, а каждая запись - спецификацию длины записи.
Рассмотрим более подробно, как осуществляется передача информации из последовательного файла в программу пользователя и наоборот.
В предыдущих параграфах отмечалось, что логические записи при размещении на ВЗУ блокируются, а обмен между ВЗУ и ОП данными проходит через буфер, в котором размещается целиком блок логических записей. При первом выполнении READ-предложения блок записей пересылается из ВП в буфер. Затем первая запись блока пересылается в область данных программы. При каждом последующем выполнении операции READ следующая по порядку запись буфера пересылается в область данных. После того как все записи буфера окажутся исчерпаны, следующее READ-предложение вызывает пересылку нового блока из ВЗУ в буфер. Аналогичные процедуры, только в обратном порядке, производятся при выполнении операции WRITE. При пересылке блока возникает небольшая задержка (порядка нескольких миллисекунд) в выполнении программы. Поэтому в системах, работающих в реальном масштабе времени, используется очередь из нескольких буферов. Освободившийся буфер заполняется в то время, когда происходит обработка записей другого буфера. Затем буферы меняются ролями. При этом задержка в выполнении программ устраняется.
Последовательная обработка — наиболее естественный режим обработки файлов с последовательной организацией. В процессе последовательной обработки записи выбираются в порядке их физического размещения на носителе. Поскольку при последовательной обработке каждая запись обязательно просматривается, то удобно все операции, которые необходимо выполнять над записями, сгруппировать так, чтобы каждая читаемая запись обрабатывалась полностью и не требовалось ее повторного чтения из файла.
Последовательная обработка эффективна в тех случаях, когда для выполнения всех возможных задач обработки все записи файла обрабатываются в одной и той же последовательности. Например, при обработке файла "Абитуриенты" для каждого без исключения абитуриента надо иметь определенную совокупность начальных сведений и после каждого экзамена вносить соответствующие корректировки, подсчитывать средний балл и т.д.
Обычно записи последовательного файла упорядочиваются по значениям их ключа. Очень важно правильно выбрать атрибут записи, используемый в качестве ключа. Наилучшим является ключ, который используется в большинстве приложений и позволяет сохранять последовательность обработки записей. Если последовательность обработки записей различна в различных задачах, то возникает необходимость выполнять промежуточные операции сортировки, что приводит к большим затратам машинного времени. Можно создать несколько копий файла, отсортированных в соответствии с различными ключами, но это приводит к большим затратам памяти.
Произвольная обработка предусматривает передачу прикладной программе любой записи файла в соответствии с ее ключом. Так как в последовательном файле отсутствует связь между ключом записи и ее местоположением на носителе, то в ОП будут последовательно передаваться подряд все записи файла начиная с первой. Просмотр записей будет продолжаться до тех пор, пока не найдется запись с нужным значением ключа, т.е. фактически происходит последовательная обработка файла. Время поиска записи зависит от ее местоположения на носителе; следовательно, произвольная обработка последовательного файла неэффективна.
В режиме корректировки новые записи могут добавляться только в конец файла. При необходимости поддержания упорядоченности вновь созданный файл должен сортироваться.
Для корректировки последовательного упорядоченного файла (добавления новых записей или их модификации) можно создавать отдельный, состоящий из вводимых или модифицированных записей файл корректур, упорядоченный по их ключам. Вновь созданный и прежний файлы объединяются операцией слияния. В результате создается новая версия прежнего файла.
Для удаления записей из последовательного файла их можно метить знаком удаления. Но при этом неэффективно используется память, так как удаленные записи продолжают занимать место на носителе. Удаляемые записи физически исключаются путем создания нового файла.