кластерах. Ну а где же хранятся имена файлов, их даты создания, атрибуты? И где находится информация о первом кластере каждого файла? Если в FAT информации о них нет, то где же она?
А хранится она в каталогах.
Каталог — это попросту файл, почти такой же, как и все остальные, занимающий место на диске, только содержащий данные о других файлах (и каталогах), которые в нем находятся.
В файле каталога записана информация о находящихся в нем файлах (и вложенных других каталогах): их имена, обьем, даты изменения и создания, атрибуты, а также указывается номер самого первого кластера, занимаемого каждым файлом (и файлом-каталогом!). Каждая запись о файле называется дескриптором файла, запомните это слово — оно еще пригодится вам при чтении программистской литературы. Кроме того, во всех файлах каталогов, кроме корневого, имеется ссылка на первый кластер «родительского» каталога — то есть того каталога, который содержит этот самый каталог.
В файлах каталогов, созданных в Windows95 и более старших версиях этой операционной системы, в каждом дескрипторе хранится как длинное имя файла, так и короткое — вида progra~1.exe, которое находится в том же месте дескриптора, что и в каталогах, созданных в MS-DOS. Таким образом обеспечивается возможность работы с созданными в Windows каталогами в старых операционных системах — эти системы смотрят в файл каталога и считывают оттуда лишь короткие имена файлов, а системы Windows умеют считывать из дескрипторов еще и длинные имена. Естественно, что при копировании или перемещении средствами MS-DOS файлов, созданных в Windows, длинные имена теряются, так как в этом случае операционная система MS-DOS копирует данные о файлах из одного файла каталога в другой, а так как она не умеет читать ту часть дескрипторов этих файлов, в которой записаны их длинные имена, то она их и игнорирует.
Файл корневого каталога диска физически всегда расположен в одном и том же месте на диске — сразу после таблицы FAT, присутствующей на диске в виде двух копий, идущих друг за другом — для повышения надежности.
Так как каталог — это обычный файл, то пустой каталог все равно будет занимать место на диске. К примеру, создайте на пустой дискете пустую папку и посмотрите обьем дискеты. На ней будет занято 512 байт (рис. 8.3).
Рис. 8.3.
Это и есть обьем файла, являющегося этим каталогом. Или, если у вас установлен пакет программ Norton Utilities для Windows, посмотрите на отчет программы Norton Speed Disk (рис. 8.4), — в нем показывается покластерная структура жесткого диска и указываются, какие файлы расположены в каждом кластере. В отчете вы увидите, что некоторые кластеры содержат файлы с именами каталогов — то есть файлы самих этих каталогов.
Рис. 8.4.
Кэширование
Операционная система, желая считать что-нибудь из какого-либо каталога, читает файл этого каталога, смотрит, в каком кластере записан первый фрагмент этого файла, а затем идет в FAT и смотрит, в каких кластерах записаны остальные его фрагменты (как бы «проходя» по всей цепочке ссылок в FAT на остальные кластеры файла). После этого, когда у операционной системы тем самым появляется информация обо всех кластерах, в которых записан данный файл, и об их последовательности, файл собственно читается с диска.
Но сам файл каталога тоже еще нужно считать. Для этого, вообще говоря, всегда должен быть выполнен весьма сложный алгоритм: считать файл корневого каталога диска, располагающийся всегда в одном и том же известном месте — сразу после FAT, найти в нем информацию о первом кластере того каталога, в котором содержится файл, который в конце концов должен быть считан, перейти к записи FAT, соответствующей найденному номеру первого кластера этого каталога, узнать из FAT, в каких кластерах содержится файл каталога, считать его, а потом повторить этот алгоритм сначала, до тех пор, пока не доберешься до каталога, непосредственно содержащего файл… Ясно, что весь этот процесс — «поход» в корневой каталог и затем по дереву каталогов, постоянное обращение то к файлам-каталогам, то к FAT, а лишь затем считывание самого файла — занимает немало времени. Поэтому операционные системы используют специальные методики для упрощения и ускорения работы с файлами. Самая простая и распространенная — это кэширование, то есть помещение часто используемых данных в оперативную память. Так, всегда кэшируется FAT, а также информация о структуре каталогов и располагающихся в них файлах. В операционных системах Windows95/98 задать количество кэшируемого материала можно в окне 'Файловая система' вкладки «Быстродействие» пункта «Система» Панели управления (рис. 8.5).
Рис. 8.5.
Если установить в этом окне параметр 'Настольный компьютер', то операционной системой будет запоминаться информация о местоположении первых кластеров 32 каталогов и 677 файлов, к которым в последнее время происходило обращение, а если 'Сервер сети' — то о первых кластерах 64 каталогов и 2729 файлов. Эта информация располагается в оперативной памяти и тем самым сокращает в какой-то степени ее обьем, доступный другим приложениям, но в любом случае выигрыш во времени и сбережении головок жесткого диска от износа при кэшировании очевиден.
То есть — казалось бы: если для каждой операции с файлами, даже самого элементарного считывания файла из корневого каталога, нужно посмотреть минимум в три места на жестком диске, — в файл этого корневого каталога, затем в FAT, и лишь потом в кластеры, содержащие данные файла (а если файл фрагментирован, то еще и пройти по ним по отдельности), — то почему же эти операции происходят все же достаточно быстро? А потому, что на самом деле система смотрит в FAT и в каталоги не всегда — она сначала копирует их в оперативную память, а затем, при необходимости считывания файла, берет нужные данные именно из оперативной памяти, а не с диска. Этот процесс именуется кэшированием.
Разделы
В начале жесткого диска, в его самом первом секторе самой первой дорожки располагается небольшая программа — так называемая 'главная загрузочная запись' Master Boot Record. В том же секторе помещается Корневая Таблица Разделов ('Root Partition Table'), в которой располагаются сведения о разбиении всего физического пространства жесткого диска на разделы — участки диска с определенной файловой системой на них.
Раздел — это кольцевидная зона поверхности жесткого диска, находящаяся между двумя определенными цилиндрами. В Корневой Таблице Разделов указывается для каждого раздела, с какого сектора какой дорожки какого цилиндра он начинается и на каких заканчивается, сколько в нем всего секторов, какой тип файловой системы на нем установлен и является ли данный логический диск в данный