Физическая организация файлв – это способ размещения файла на диске.
Основные критерии физической организации файла:
· Скорость доступа к данным
· Объем адресной информации файла
· Степень фрагментированности дискового пространства
· Максимально возможный размер файла.
Варианты физической организации файла:
1) Непрерывное размещение – файлу предоставляется последовательность кластеров, которая образует непрерывный участок дисковой памяти.
Плюсы:
· Высокая скорость доступа (минимальны затраты на поиск)
· Минимальный объем адресной инфы (достаточно хранить адрес первого кластера и объем файла)
· Не ограничен максимальный размер файла.
Минусы:
· Файлы могут менять свой размер. И что делать?
· Фрагментация – диск превращается в лоскутное одеяло.
Связанный спискок кластеров дисковой памяти
В начале каждого кластера – указатель на следующий.
Плюсы:
· Адресная инфа минимальна (расположение файла задается номером первого кластера)
· Нет фрагментации на уровне кластеров
· Можно менять размер файла, наращивая число кластеров
Минусы:
· Сложно добраться до произвольного места файла (надо последовательно читать все кластеры)
· Количество данных в кластера не равно степени двойки (одно слово – на номер следующего кластера), а это неудобно для многих программ
Связанный список индексов – ФС ФАТ.
Это по сути модификация предыдущего способа:
- У каждого кластера есть свой ИНДЕКС.
- Все индексы располагаются в особой области памяти – в МСДОС – это таблица ФАТ, которая занимает один кластер.
- Номер первого кластера файла хранится в записи каталога файлов, с другими его характеристиками
- Остальная адресная инфа хранится не в кластерах, а в индексах ФАТ.
- Когда все кластеры свободны, все индексы = 0;
- При заполнении диска файлами, индексы принимают значение номера следующего индекса файла либо специального значения – указателя на конец файла.
Плюсы:
· Минимальность адресной инфы
· Нет фрагметрации на уровне кластеров (только неиспользованные области в конце кластеров)
· Нет проблем с изменением размера файла
· Не надо последовательно считывать кластеры для доступа к произвольному участку файла.
· Данные файла заполняют кластер целиком – размер равен степени двойки.
4) Перечисление кластеров, занимаемых файлов – этот перечень служит и адресом файла (используется в OS UNIX s5 & ufs)
Минусы:
· Длина адреса зависит от размера файла и может быть слишком большой.
Плюсы:
· Прямая адресация – высокая скорость доступа к произвольному месту файла.
В сочетании прямой и косвенной адресации последний метод используется в ФС ufs: картинка для кластера размером в 8 кбайт
Также он используется в NTFS – только здесь адресуются не кластеры, а смежные непрерывные области кластеров – отрезки или экстенты. ОС всегда старается размещать инфу рядом, это здорово сокращает размер адресной информации.
Файловые операции.
ФС предоставляет пользователям набор операций, для работы с файлами, оформленный в виде системных вызовов.
Набор состоит из вызовов create, read, write и других.
Чаще всего с открытым файлом пользователь выполняет не одну операцию, а несколько операций (копирует фрагмент, потом другой фрагмент, что-то пишет, что-то удаляет и т.д.)
Для всех этих операций ОС нужно сделать:
1) Универсальные действия:
· По символьному имени найти характеристики файла
· Скопировать их в отдельную область оперативной памяти
· Проверить права пользователя для операции
· Очистить область памяти после завершения операции.
2) Уникальные действия – собственно то, что требуется для данной операции.
Есть 2 способа выполнения действий над файлами:
- stateless– для каждой операции выполняются как универсальные, так и уникальные действия
- все универсальные действия выполняются только в начале и в конце работы в файлом, в промежуточной стадии – только уникальные действия.
Большинство ФС юзают второй способ, хотя первый обладает одним плюсом: надежностью и устойчивостью к системным сбоям. Поэтому он используется в некоторых распределенных сетевых системах, где сбои изза отказа пакетов или сетевых узлов более вероятны.
При втором способе в ФС вводятся два специальных системных вызова:
Open
· Преобразует символьное имя в числовое
· Копирует характеристики
· Проверяет права пользователя
Close
· Освобождает буфер памяти