Самодел 1 (1114716), страница 16
Текст из файла (страница 16)
Файловые системы
Файловая система (ФС) - часть операционной системы, представляющая собой совокупность организованных наборов данных, хранящихся на внешних запоминающих устройствах, и программных средств, гарантирующих именованный доступ к этим данным и их защиту
Возможности предоставляемые ФС определяют эксплутационные качества ФС. От оптимальности организации зависит область применимости ФС.
ФС – компонент ОС обеспечивающий именованный доступ к данным. Данные называются файлами, их имена - именами файлов.
Ранее работа с данными осуществлялась через координаты их на внешних носителях. Это было неудобно, т.к. надо было помнить о местонахождении данных, перемещение программы с одного носителя на другой тоже вызывало трудности. Если возникала потребность менять входные данные в программе, то это тоже было не легко.
ФС совершила революцию. Появилась возможность ассоциировать с совокупностью данных некоторое имя и осуществлять доступ к данным через указатель имени.
ОС брала на себя функции размещения данных, ассоциированных с именем, сохранение информации, соответствующей данному имени.
Структурная организация файлов
Существует множество разновидностей структурной организации файлов. Наиболее популярные:
1. Файл, как последовательность байтов (обмен от 1 до фиксированного числа байтов) Т.е. файл – это набор данных, практически не имеющих никакой структуры. Соответственно вопрос выделения логической структуры – это уже проблема пользователя. Пользователь записывает данные, как последовательность байтов, считывает их и сам уже интерпретирует. Как ни странно, на сегодняшний день – это одна из самых распространенных моделей структурной организации файлов. Таким образом организуются файловые системы Unix, Windows, т.е. файл там может быть представлен как просто последовательность байтов
2. Файл, как последовательность записей переменной длины (обмен в терминах записи, информация в виде последовательности записей, поле данных + символ конца записи, последовательный доступ) В этом случае каждая запись, кроме содержательной информации, должна была иметь некоторую специальную информацию. эта специальная информация могла быть либо полем, которому указывалась длина записи, либо специальная информация могла представляться в виде специального кода - маркера конца или начала записи. При такой организации внутренней фрагментации практически не было, за исключением тех потерь, которые приходились на разметку файла по записи, т.е. либо указатели длины, либо маркеры начала и конца. В этом плане эффективность организации хранения была относительно хорошей. С другой стороны такая организация исключала прямой доступ к записи. Т.е. для того, чтобы добраться до i-ой записи нужно было промотать все предыдущие: либо пересчитать маркеры начала и конца, либо пробежаться по списку через указатели длины. Файлы такой организации имели сложность с точки зрения редактирования, т.е. изменение длины существующей записи с большой вероятностью приводило к проблеме. Поскольку увеличение записи – это вообще затруднительная операция, а уменьшение – тоже есть некоторая проблема. Т.е. есть какая-то внутренняя проблема, которая приводила к неэффективности редактирования такого рода файлов. Записи постоянной длины организованы были так, что в пределах размера записи никаких проблем не возникало. Проблемы возникали только в том случае, если происходило либо удаление записи, либо вставка новой записи.
3. Файл, как последовательность записей постоянной длины (обмен в терминах записей постоянной длины) Исторически этот вариант структурной организации появился из-за использования такого носителя информации, как перфокарты. Т.е. было удобно делать файл, который был прямым аналогом колоды перфокарт. Соответственно это означает, что читать из файла или писать данные в этот файл система позволяла порциями размером в 80 байт. Понятно, что такая организации файла достаточно эффективна по скорости доступа, т.е. был прямой доступ к любой записи, потому что координаты записи внутри вычислялись всегда очень просто: (номер записи)*(размер записи). С другой стороны – внутренняя фрагментация. Один байт используется в записи и вся запись размером в 80 байтов становится занятой.
4. Иерархическая организация файла (дерево) (поиск, сортировка и т.д. осуществляется по ключам). Суть: структура файла представима в виде дерева. В каждом узле этого дерева находится информация о записи. Информация о записи – это два содержательных поля: поле ключа и поле данных. Соответственно дерево организовано таким образом, что в нем оптимизирован доступ к записям по указанию ключа, т.е. записи отсортированы по одинаковым ключам, и разные ключи отсортированы по возрастанию ключей. Поле данных может быть произвольного размера. Место расположения записи может быть в общем случае произвольно, т.е. ФС может разместить запись, где захочет, по своим каким-то критериям. имеются накладные расходы, связанные с древовидной организацией - с организацией ключей. Обычно, это достаточно специализированные ФС, которые используются или могут использоваться в высокопроизводительных, либо специальных ВС.
Дерево, в узлах записи
(возможно переменной длины)
Атрибуты файла
имя
права доступа
персонификация (создатель, владелец)
тип файла
размер записи
размер файла
указатель чтения / записи
время создания
время последней модификации
время последнего обращения
предельный размер файла
.....
Полный состав атрибутов файла и способ их представления определяется конкретной файловой системой.
Основные правила работы с файлами
Операционная система и файловая система обеспечивают регистрацию возможности того или иного процесса работать с содержимым файлов. «Сеанс работы» с содержимым файла:
Начало «открытие» файла (регистрация в системе возможности работы процесса с содержимым файла)
Открытие – создание внутрисистемной структуры данных, кот. описывает состояние этого файла, проверяет права доступа, объявляет операционной системе тот факт, что с данным файлом будет работать тот или иной процесс. При открытии файла система формирует внутренние наборы данных, необходимые для работы с содержимым файла.
Работа с содержимым файла, с атрибутами файла
Завершение «закрытие» файла – информация системе о завершении работы процесса с «открытым» файлом
Закрытие файла. Закрытие файла - информация операционной системе о том, что работа с файлом завершена.
Операция закрытия файла имеет 2 вида:
закрыть и сохранить текущее содержимое файла;
уничтожить файл.
Типовые программные интерфейсы работы с файлами
open – открытие / создание файла
«r» - на чтение
«w» - на запись
… и т.д.
close – закрытие
read / write – читать, писать (относительно положения указателя чтения / запись, read/write по дескриптору а не по имени)
delete – удалить файл из файловой системы (напрямую или дескриптор)
seek – позиционирование указателя чтение/запись
rename – переименование файла
read / write _attributes – чтение, модификация
атрибутов файла.
Файловый дескриптор – системная структура данных, содержащая информацию о актуальном состоянии «открытого» файла.
Файловый дескриптор содержит актуальную информацию о открытом файле. Через ФД можно получить информацию о значении указателей чтения\записи.
В некоторых ФС каталог – отдельное внутреннее образование, в UNIX каталог – файл специального типа. Если это файл, то для него можно использовать программные интерфейсы для работы с файлами.
Каталог – компонент файловой системы, содержащий информацию о содержащихся в файловой системе файлах.Специальные файлы – каталоги.
Модель одноуровневой файловой системы. Традиционно-простая организация каталога – одноуровневая модель ФС В ФС существует один каталог, в котором находятся все файлы находящиеся в системе.
1.Коллизия имен. Каждое имя должно быть единственно.
2. нагрузка на работу с системой, если много файлов.
3. неудобно структурировать.
Модель двухуровневой файловой системы.
Модель, которая появилась в реальных системах на начальных этапах после одноуровневой.
В системе существует объединение каталогов пользователей, для каждого пользователя реализована одноуровневая модель.
Проблемы 1 и 2 исчезают, а 3 остается.
Иерархические файловые системы
За основу логической организации такой файловой системы берется дерево. В корне дерева находится, так называемый, корень файловой системы - каталог нулевого уровня. В этом каталоге могут находиться либо файлы пользователей, либо каталоги первого уровня. Каталоги первого и следующих уровней организуются по аналогичному принципу. Файлы пользователя в этом дереве представляются листьями. Пустой каталог также может быть листом. Таким образом образуется древовидная структура файловой системы, где в узлах находятся каталоги, а листьями являются либо файлы, либо пустые каталоги.
Остановимся на правилах именования в иерархической файловой системе. В данном случае используется механизм, основанный на понятии имени файла (name) и полного имени файла (path_name). Полное имя файла – это путь от корневого каталога до листа (такой путь всегда будет уникальным). Существует также относительное именование, т.е. когда нет необходимости указания полного пути при работе с файлами. Это происходит в случае, когда программа вызывает файл и подразумевается, что он находится в том же каталоге, что и программа. В данном случае появляется понятие текущего каталога, т. е. каталога, на работу с которым настроена файловая система в данный момент времени. В рамках одного каталога имена файлов одного уровня должны быть разными.
Подходы в практической реализации файловой системы
Структура «системного» диска
Системное устройство может иметь следующую структуру. Начало - основной программный загрузчик (нулевой блок системного устройства). Аппаратный загрузчик сначала обращается в основной программный загрузчик. А основной программный загрузчик уже будет обращаться к соответствующему загрузчику ОС. Далее на системном блоке находится так называемая таблица разделов. Раздел – это есть виртуальный диск. Одно пространство дискового устройства можно разделить на некоторые порции в общем случае непересекающиеся, которые называются разделами, и каждый раздел представляется в системе как отдельное дисковое устройство. Соответственно структура раздела с ФС обычно следующая: в начале идет блок загрузчика ОС. Загрузчик ОС уже знает с какой ОС он будет работать, он знает где находится информация в разделе, которая необходима для загрузки ОС и соответственно выбирает ее при запуске. Далее за блоком загрузчика ОС обычно находится последовательность блоков или блок, который называется суперблок.
Суперблок – блок ФС, в котором находится информация о настройках ФС и актуальном состоянии ФС (информация о свободных блоках, данных, которые содержат каталоги.)
Блок – порция данных, фиксированного размера, в рамках которого идет обмен данными с устройством.
1ый уровень виртуальности - блок устройства HDD
2ой уровень виртуальности – блок ФС (блок виртуального диска) использует виртуальный размер блока. Размер можно варьировать.
3ий уровень виртуальности – блок файла
Модели реализации файлов
Непрерывные файлы
Файл может размещаться только в последовательных блоках ФС. Соответственно такая модель она абсолютно проста для реализации, она эффективна по доступу. Т.е. практически не нужно много дополнительной информации, которая будет описывать где и что храниться, только нужно выйти на начало файла. И практически нет необходимости для чтения любой порции данных из файла читать какую-то дополнительную системную информацию, т.е. накладные расходы по обмену (в этом случае) практически нулевые.
Достоинства:
Простота реализации