Файл – абстракция, которая используется для того, чтобы в рамках управления данными не зависеть от того, где именно и на каких носителях находятся данные, как они структурно устроены и взаимосвязаны. Традиционно файлом называют именованную область на носителе данных. Впервые понятие файл было введено в языке COBOL в 1961г. Затем в ОС Unix стали трактовать все внешние устройства как виртуальные файлы.
Файловая система в целом предназначена для обеспечения длительного хранения данных, доступа к данным и выполнения операций над объектом «файл» и содержащимися в них данными.
Файловой системой (ФС) является подсистема ОС, поддерживающая такую функциональность и обеспечивающая перевод представления виртуального файла в физическое представление. Обычно выделяют логический уровень ФС и физический уровень ФС.
ФС логического уровня предоставляет интерфейс программирования в соответствии с той логической структурой, которую имеет виртуальный файл. ФС физического уровня выполняет перевод виртуальных файловых адресов в реальные адреса, соответствующие физическим адресам на носителях. Этот уровень отслеживает размещение файлов на внешней памяти и управляет распределением пространства внешней памяти.
На логическом уровне обеспечивается системные вызовы и API в соответствии с логической организацией файла.
По внутренней структуре различают файлы:
· байториентированные, абстрактным представлением которых служит линейная последовательность байтов;
· состоящие из записей фиксированной или переменной длины. В этом случае либо длина входит в состав записи, как одно из ее полей, либо запись содержит специальный признак конца записи.
По организации доступа к содержимому различают файлы:
· с последовательным доступом;
· с доступом по ключу.
Например, файл-последовательность байтов может иметь свойства: «начало файла», «конец файла», текущая позиция, доступная в данный момент для считывания/записи:
BOF | байт | байт | байт | байт | байт | байт | байт | байт | байт | байт | байт | байт | байт | EOF |
← | ← | ↑ | → | → | ||||||||||
count | Move Prev | Current Pos | Move Next | count | offset |
Файл с последовательным доступом логически устроен подобным образом. Отличие заключается в том, единицей информации является не байт, а запись. Доступ к содержимому в этом случае осуществляется по логическому адресу (номеру) записи в файле, т.е. по относительной позиции записи в файле.
Файлы с ключами или с доступом по ключу предполагают наличие для каждой записи файла ее идентификатора, или ключа (key). Доступ к произвольной записи файла производится по значению ключа. Для реализации этого используется специальная структура, называемая индексом, в рамках которой устанавливаются соответствия ключей и физического местоположения соответствующих им записей файла.
На логическом уровне файловая система использует файловые каталоги (справочники), или оглавления (directory). Файловые каталоги находятся на тех же носителях, что и файлы данных.
Элемент каталога содержит, как минимум, символьное имя файла и адрес его дескриптора. Дескриптор файла может непосредственно входить в элемент каталога.
Простейшей структурой каталога является плоский (flat) каталог. Информация обо всех файлах находится в одной таблицу, и поиск файла сводится к поиску в этой таблице. В современных системах каталоги имеют иерархическую структуру. Каждый элемент каталога описывает файл или подкаталог (subdirectory). С точки зрения ниже лежащих уровней ФС подкаталог является таким же файлом, как и файлы пользователей