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