2011. Машбук (1114722), страница 53
Текст из файла (страница 53)
В общем случае с каждым файлом ассоциируются двауказателя (и на чтение, и на запись), хотя бывают файловые системы, в которыхиспользуется единый указатель чтения/записи. Соответственно, операции чтения/записиоперируют данными, следующими за указателями.Среди прочих атрибутов файла возможны атрибуты, отражающие системную истатистическую информацию о файле: например, время последней модификации, времяпоследнего обращения, предельный размер файла и т.д. Еще одной важной группойатрибутов являются атрибуты, хранящие информацию о размещении содержимого файла,т.е. где в файловой системе организовано хранение данных файла, и как оно организовано.4.1.3 Основные правила работы с файлами.
Типовые программныеинтерфейсыПрактически все файловые системы при организации работы с файлами действуютпо схожим сценариям, которые в общем случае состоят из трех основных блоковдействий.Первый этап – это начало работы с файлом (или открытие файла). Вбольшинстве систем для процессов, желающих работать с файлом, имеются операцииоткрытия файла. Посредством данной операции процесс передает файловой системезапрос на работу с конкретным файлом.
Получив запрос, файловая система производитсоответствующие проверки возможности (в т.ч. на наличие полномочий) работы сфайлом; в случае успеха выделяет внутри себя необходимые ресурсы для работы процессас указанным файлом. В частности, для каждого открытого файла создается т.н. файловыйдескриптор – системная структура данных, содержащая информацию об актуальномсостоянии открытого файла (режимы, позиции указателей и т.п.).
Файловый дескриптор,как системная структура данных, может размещаться как в адресном пространствепроцесса, так и в пространстве памяти операционной системы. Соответственно, приоткрытии файла процесс получает либо номер файлового дескриптора, либо указатель наначало данной структуры. Все последующие операции с содержимым файла происходят суказанием именно файлового дескриптора, и эти операции образуют следующий блокдействий.Второй блок действий образуют операции по работе с содержимым файла(чтение и запись), также операции, изменяющие атрибуты файла (режимы доступа,изменение указателей чтения/записи и т.п.).Последний этап — это закрытие файла: уведомление системе о закрытиипроцессом файлового дескриптора (а не файла).
Подчеркнем, что процесс прекращаетработу не с файлом, а с конкретным файловым дескриптором, поскольку даже в рамкаходного процесса можно открыть один и тот же файл два и более раза, и на каждоеоткрытие будет предоставлен новый файловый дескриптор.
После операции закрытияоперационная система выполняет необходимые действия по корректному завершениюработы с файловым дескриптором, а если закрывается последний открытый дескриптор —то осуществляет корректное завершение работы с файлом: в частности, по необходимостиосвобождаются системные ресурсы, в т.ч. выполняется разгрузка кэш-буферов файловыхобменов и т.д.201Структурно каждая операционная система предлагает унифицированный наборинтерфейсов, посредством которых можно обращаться к системным вызовам работы сфайлами.
Обычно этот набор содержит следующие основные функции:open — открытие/создание файла;close — закрытие;read/write — чтение/запись (относительно положения указателя чтения/записисоответственно);delete — удаление файла из файловой системы;seek — позиционирование указателя чтения/записи;read_attributes/write_attributes — чтение/модификация некоторых атрибутов файла(в файловых системах, рассматривающих имя файла не как атрибут, возможнадополнительная функция переименования файла — rename).Практически все файловые системы включают в свой состав некоторыйспециальный компонент, посредством которого можно установить соответствие междуименем файла и его атрибутами. Используя это соответствие, можно получитьинформацию о размещении данных в файловой системе и организовать доступ к данным.И этим компонентом является каталог.
Итак, каталог — это системная структураданных файловой системы, в которой находится информация об именах файлов, а такжеинформация, обеспечивающая доступ к атрибутам и содержимому файлов. Каталогиявляются специальным видом файлов.Рассмотрим типовые модели организации каталогов (в соответствии схронологическим порядком их появления).Первой исторической моделью является одноуровневая файловая система(система с одноуровневым каталогом). В файловой системе данного типа (Рис. 103)присутствует единственный каталог, в котором перечислены всевозможные имена файлов,находящихся в данной системе. Этот каталог устроен простым способом: для каждогофайла хранится информация об его имени, расположении первого блока и размере файла.Эта простота влечет за собой и простоту доступа к информации файлов, но эта модель непредполагает многопользовательской работы.
В данном случае возможны коллизии имен(когда возникают попытки создания файлов с одним именем). Данная модель в настоящеевремя используется в бытовой технике, которая выполняет фиксированный набордействий.Каталог(корневой каталог)NAME1/NAME2NAME3…Рис. 103. Модель одноуровневой файловой системы.Следующей моделью является двухуровневая файловая система (Рис. 104).Данная модель предполагает работу нескольких пользователей: файловая система этоготипа позволяет группировать файлы по принадлежности тому или иному пользователю.Эта модель лучше одноуровневой (в частности, не возникают коллизии имен файловразных пользователей), но и она обладает недостатками: зачастую неудобно и даженежелательно расположение всех файлов одного пользователя в одном месте (в одномкаталоге).
В частности, остается проблема коллизии имен для файлов одногопользователя.Отметим, что двух-, трех- и вообще N-уровневые (N – фиксированное) моделиостаются актуальными и по сей день. Объясняется это тем, что они, в первую очередь,достаточно просты по своей структуре и организации работы с ними. Если мы посмотрим202на простейший мобильный телефон, имеющий несколько уровней меню, в них обычнореализованы именно подобные файловые системы.Корневой каталог/КаталогипользователейN11…USR1USR1N21 … Nk1N12N22 … Nl2USR1N1M N2M … NnMРис.
104. Модель двухуровневой файловой системы.И, наконец, последняя модель, которую мы рассмотрим, — иерархическаяфайловая система (Рис. 105). Современные многопользовательские файловые системыосновываются на использовании иерархических структур данных, в частности, наиспользовании деревьев.Вся информация в иерархической файловой системе представляется в виде дерева,имеющего корень. Это т.н. корневая файловая система.
В узлах дерева, отличных отлистьев, находятся каталоги, которые содержат информацию о размещенных в нихфайлах. Иерархические файловые системы обычно имеют специальный тип файловкаталогов. Т.е. каталог представляется не как отдельная выделенная структура данных, акак файл особого типа. Листом дерева может быть либо файл-каталог, либо любой файлфайловой системы./…AA…BBC… F…D…BРис. 105.
Модель иерархической файловой системы.Иерархическая (или древообразная) организация файловой системы предоставляетвозможность использования уникального именования файлов. Оно основывается на том,что в дереве существует единственный путь от корня до любого узла. Приведенная схемаименования (от корня до конкретного узла дерева) является принципиальной схемойименования файлов в иерархических файловых системах. При этом обычно используютсяследующие характеристики. Текущий каталог — это каталог, на работу с которым вданный момент настроена файловая система. Текущим каталогом может стать любойкаталог файловой системы, и обозревание файлов в файловой системе происходит203относительно этого каталога. Файлы, находящиеся непосредственно в текущем каталоге,доступны «просто» по имени.
Таким образом, имя файла — это имя файла оносительнотекущего каталога, а полное имя файла — это перечень всех имен файлов от корня доузла с данным файлом. Признаком полного имени обычно является присутствиеспециального префиксного символа, обозначающего корневой каталог (например, в ОСUnix в качестве корневого каталога выступает символ “/”).Иерархическая файловая система позволяет использовать т.н.
относительныеимена файлов — это путь от некоторого каталога до данного файла. Для данного способаименования необходимо указать явно или неявно каталог, относительно которогостроится это именование. Например, если существует файл с полным именем /A/B/С/D, тоотносительно каталога B файл будет иметь имя C/D. Чтобы использовать этоотносительное имя, необходимо либо явно задать каталог B (по сути это означает заданиеполного имени), либо сделать каталог B текущим.Иерархическиефайловыесистемыобычноиспользуютещеоднухарактеристику — т.н. домашний каталог. Суть его заключается в том, что для каждогозарегистрированного в системе пользователя (или для всех пользователей) задаетсяполное имя каталога, который должен стать текущим каталогом при входе пользователя всистему.4.1.4 Подходы в практической реализации файловой системыРассмотрим некоторые подходы в практической реализации файловой системы.Снова вернемся к понятию системного устройства — устройства, на котором, каксчитается аппаратурой компьютера, должна присутствовать операционная система.
Почтив любом компьютере можно определить некоторую цепочку внешних устройств, которыепри загрузке компьютера могут рассматриваться как системные устройства. В этойцепочке имеется определенный приоритет. Во время старта вычислительная система(компьютер) перебирает данную цепочку в порядке убывания приоритета до тех пор, покане обнаружит готовое к работе устройство. Система предполагает, что на этом устройствеимеется необходимая системная информация и пытается загрузить с него операционнуюсистему. Например, допустим, что компьютер сконфигурирован таким образом, чтопервым системным устройством является флоппи-дисковод, вторым — дисководоптических дисков (CDROM), а третьим — жесткий диск.