Методы реализации
В системе информация о файле собрана в дескрипторе файла. В различных системах объем этой информации разный. Минимальная информация включает идентификатор файла и его физическое размещение. Ниже перечисляются элементы, которые можно порекомендовать для включения в дескриптор.
1. Информация, идентифицирующая файл. Дескриптор включает как символическое имя (такое как имя пути по дереву), так и некоторое внутреннее имя для облегчения доступа к файлу.
2. Физическое размещение. Если весь файл целиком занимает один последовательный участок внешней памяти, то достаточно указать его начало и длину. Если же записи файла рассредоточены, то дескриптор содержит либо непосредственно полную информацию о размещении, либо указатель на некоторую таблицу, где находится по крайней мере начало этой информации.
3. Физическая организация. Относясь к физическому размещению, этот элемент описывает организацию, используемую для реализации файла. Различные организации рассматриваются в следующем разделе.
4. Дескриптор устройства. Здесь содержится информация о физическом устройстве, на котором размещается файл, она может использоваться при составлении канальной программы для работы с файлом. Чтобы устранить копирование этой информации в дескрипторе каждого файла, расположенного нa данном устройстве, можно вместо дескриптора устройства хранить указатель на нeгo.
5. Информация о правах доступа. Эта информация включает идентификацию владельца, средства распознавания партнеров, список назначенных пользователей и права доступа, установленные для каждого класса пользователей. Частью этой информации являются пароли, если они используются.
6. Тип. Этот элемент, иногда являющийся частью имени файла, может включать в себя такую информацию, как назначение файла (например, данные, исходная программа на Паскале) и его представление (например, двоичное, в коде ASCII, в коде EBCDIC).
7. Статус. Он указывает, является ли файл временным, подлежащим уничтожению по окончании использующего его процесса, или постоянным. Для постоянных файлов статус может указывать, должны ли автоматически создаваться поколения файла или другие копии.
8. Административная информация. Этот элемент включает дату создания файла, дату последнего изменения, число обращений, идентификацию использующих его процессов и срок хранения файла.
Дескриптор файла можно было бы хранить в элементе справочника, однако тогда доступ к файлу был бы возможен только через справочник. Более того, это привело бы к увеличению объема справочника и тем самым замедлило бы поиск файла. На практике дескриптор файла обычно хранится вместе с описываемым им файлом, а в элемент справочника для данного файла помещается указатель на этот дескриптор.
Во время работы с файлом удобно держать копию его дескриптора в оперативной памяти, чтобы сократить количество обменов при обращении к файлу. Считывание дескриптора в память обычно производится во время выполнения команды ОТКРЫТЬ файл. Так как процесс не имеет права читать и тем более изменять дескриптор, то копия дескриптора обычно хранится в памяти операционной системы. Этот подход применим и в том случае, когда к файлу совместно обращаются несколько процессов.
Как нужно выделять внешнюю память под файлы? Так как размер файла может меняться со временем и его максимальный размер заранее неизвестен, то внешняя память, как правило, выделяется динамически. Хотя свободные блоки можно было бы связать в один список, их число обычно настолько велико, что обработка этого списка выполнялась бы медленно. Вместо этого используются таблицы ссылок на свободные блоки, чаще всего по одной таблице на устройство или носитель, внешняя память, выделяемая файлу, не обязательно должна быть единой связной областью. Экономится много времени, если файл не переписывается на новое место, даже при увеличении его объема. Такая экономия достигается хранением файла частями и установлением между ними связей. Ниже рассматриваются три наиболее часто используемые для этого структуры. Чтобы избежать внешней фрагментации и эффективно использовать память устройства, в большинстве систем для всех файлов принимается один и тот же размер блока.
Список блоков. Одной из структур является простое связывание блоков файла в единый список блоков. Этот способ эффективен, если файл должен обрабатываться последовательно. Конец файла можно определить двумя способами: по специальному слову, записанному в конец файла, или на основании длины файла, хранящейся в дескрипторе файла. Дополнительные расходы на память состоят из слов, отводимых в каждом блоке под указатель. Включение или исключение блока из файла требует изменения только в предшествующем блоке. Однако время доступа к произвольной записи может оказаться неприемлемым.
Блок индексов. Чтобы повысить скорость доступа к файлу, указатели на блоки могут быть собраны в одну таблицу, называемую блоком индексов. Порядок указателей в этом блоке отражает порядок блоков в файле. Если количество блоков файла превышает число ячеек в блоке индексов, то используются несколько блоков индексов, связанных в список. Ссылка на следующий блок индексов отличается от указателя на блок файла либо своим положением, либо специальным битом признака. Доступ к файлу осуществляется непосредственно по имени файла и смещению в блоке индексов. Этот метод требует дополнительную память под блоки индексов, и при этом часть последнего блока может не использоваться. Для доступа к блоку индексов требуется дополнительное время, однако его не нужно повторять при многократных обращениях к файлу. Недостаток такой организации состоит в том, что добавление и удаление блока файла вызывает изменение всего блока индексов.