Казалось бы — а в чем проблема? Пишем файлы на диск друг за другом, записываем в особую область на диске информацию о номерах секторов с началами файлов и размер каждого файла — и нет проблем. Чтобы прочесть нужный файл, надо лишь перейти к его началу и считать столько секторов, сколько файл занимает. Но дело в том, что файлы с жесткого диска иногда надо не только читать, но и удалять, а на их место записывать новые. И что же получится? Файл удален, после него осталось свободное место, а другой файл, который предполагается записать на место старого, отличается по размерам и либо не влезает целиком туда, либо меньше и не заполняет все освободившеся место! В первом случае придется либо искать достаточно большой кусок свободного места, либо записывать новый файл в конец диска, а во втором — пытаться заполнить оставшееся свободным место более мелкими файлами. Все очень неудобно, и к тому же в результате может получиться диск, на котором полно свободных секторов, а новый файл записать некуда.
Чтобы решить эту проблему, был придуман принцип кластерной структуры жесткого диска и использования специальной таблицы размещения файлов. При использовании этого принципа весь жесткий диск как бы делится на множество кусочков равного обьема — кластеров, каждый из которых содержит одинаковое число секторов. В начале диска размещается особая область с данными — FAT-таблица (от File Allocation Table — таблица размещения файлов), в которой записывается, в каких кластерах находится содержимое каждого находящегося на жестком диске файла. Например, примерно так: "файл записан в 121, 122 и 123 кластерах".
С первого взгляда может показаться, что это — такая же ситуация, как и ранее. Но все дело в том, что один файл может располагаться не в последовательно расположенных кластерах, а в множестве отдельных кластеров, разбросанных по всему диску. Достаточно лишь перечислить номера этих кластеров и указать их последовательность друг за другом. То есть в FAT может появиться такая информация: "файл расположен в кластерах 120, 124 и 137". Операционная система, получив запрос на чтение этого файла, смотрит в FAT, в каких кластерах он записан, а потом последовательно их считывает, переписывая содержимое этих кластеров в оперативную память и соединяя его в ней в один неразрывный файл.
Когда же операционной системе надо записать данные на жесткий диск, то она смотрит по таблице размещения файлов, где находится первый свободный кластер (то есть кластер, который не принадлежит какому-либо файлу), и пишет данные в него и последующие кластеры, указывая их номера в той же таблице. Но как только процесс записи файла на диск натыкается на занятый кластер, то система вновь ищет ближайший свободный кластер, следующий за занятыми, и продолжает запись данных на диск с него. [20] Точно так происходит только в MS-DOS. Операционные системы Windows 9x ищут первый участок размером в 500 кб и больше, состоящий из пустых кластеров.
Если файл удаляется, то соответствующие ему кластеры освобождаются (точнее, просто их номера помечаются в таблице размещения файлов как свободные), и в эти кластеры снова возможна запись других данных.
Таблица FAT
Таблица FAT — это как бы уменьшенное изображение строения всего жесткого диска (рис. 8.2). Она состоит из отдельных записей-"строчек" с информацией о последовательности кластеров в файлах.
Рис. 8.2. Если вы хотите наглядно представить себе, что такое FAT, то запустите программу дефрагментации диска из Windows95/98 и отобразите сведения о диске. Вот FAT — это примерно то же самое, только там вместо цветных квадратиков — отдельные записи, описывающие состояние каждого кластера диска.
В каждой записи FAT содержится информация следующих видов:
1. Если кластер, к которому относится данная запись FAT, не является последним в файле, то в данной записи будет указан номер следующего кластера, в котором записан данный файл.
2. Если кластер, к которому относится данная запись FAT, является последним в файле, то в данной записи будет стоять специальная метка конца файла.
3. Если кластер, к которому относится данная запись FAT, не относится ни к какому файлу, то в данной записи будет находится информация, указывающая, что этот кластер свободный.
4. Если кластер, к которому относится данная запись FAT, расположен на поврежденной области диска, то в данной записи будет находится информация, указывающая, что этот кластер повреждени не должен использоваться.
Читать дальше