Но какие именно 6 кластеров? На этот вопрос может ответить FAT. Она представляет собой таблицу чисел, определяющих, каким именно файлам принадлежат кластеры. Существуют две разновидности FAT:V 12-битная FAT, с максимальным числом вхождений, достаточным для 4096 кластеров, используемая на дискетах и жестких дисках объемом до 15 М. Жесткий диск с 12-битной FAT имеет кластеры длиной по 4 К;V 16-битная FAT, с максимальным числом вхождений, достаточным для 65536 кластеров, используемая на жестких дисках объемом более 15 M. (Она доступна только в DOS 3.x и в последующих версиях). На дисках объемом до 128 M кластер будет иметь размер 2 К, от 128 до 256 М - 4 К, от 256 М до 512 М - 8 К.Каждый кластер на диске имеет соответствующее вхождение в FAT. Для некоего кластера X вхождение должно быть одним из следующих:V 0, индицирующий, что кластер свободен (не занят);...
V EOF (в действительности любая величина от FFF8 до FFFF) обозначающая последний кластер файла;V BAD (FFF7), индицирующая, что кластер содержит плохой сектор или сектора, и поэтому не должен использоваться;V ненулевой номер кластера, который является указателем на следующий кластер в файле, частью которого является X.На картинке приведен пример каталога, содержащего ORDERS.DAT и выборки из FAT, имеющей отношение к ORDERS.DAT.Пример каталога и FATDirectory entry:ORDERSDATno attnbs10/28/9211:23.44011,120File Allocation Table (FAT)Entry #Value39EOF40414142424443Bad44102102103103EOF...
Глядя на эту выборку из FAT, мы видим, что кластер 39 является концом некоего файла -но мы не знаем, какого именно файла. Мы начинаем просматривать ORDERS.DAT из кластера 40, потому что вхождение каталога говорит нам: вхождение 40 содержит 41, что означает, что 41 следует за 40, поскольку это следующий кластер в ORDERS.DAT. Вхождение 41 содержит 42, означающее, что 42 следующий кластер в ORDERS.DAT. Вхождение 42 содержит 44, предлагающее нам пропустить 43, которое мы пропускаем, потому что это кластер, в котором есть неиспользуемые области - плохой кластер. Вхождение 44 предписывает нам пропустить все, вплоть до кластера 102, который является следующим кластером, а 102 в свою очередь указывает на 103, который является концом файла.Заметьте, что каждое вхождение кластера в FAT связывает один кластер файла с другим. Это называется прямым списком связей, прямым, потому что вы можете следовать по нему только в одном направлении....
Добавим к рассмотренному примеру подкаталоги.Структура подкаталогов в DOS выполнена с незначительными отличиями, о которых мы скажем. Подкаталоги выглядят так же, как и файлы, за исключением того, что (1) их размер равен нулю, и (2) их атрибут каталога установлен. Подкаталог полностью находится в кластере или кластерах и размещен идентично корневому каталогу за исключением первых двух вхождений. Вы наверняка знаете файлы . и .. , которые вы видите, когда набираете команду TYPE в подкаталоге. В действительности это вхождения файлов. "." и заимствованы из старой UNIX терминологии "." относится собственно к подкаталогу, а относится к владельцу подкаталога.Эти вхождения, подобно другим вхождениям подкаталогов, не имеют размеров. Вхождение для "." для ссылки на себя сообщает о начальном кластере, равном кластеру, в котором полностью находится подкаталог. Вхождение для сообщает о начальном кластере каталога (родительского по отношению к подкаталогу), в котором находится подкаталог. Если родительский каталог является корневым, то значение кластера равно 0. Я догадываюсь, что это звучит несколько сложно, но давайте рассмотрим некоторые примеры....
Предположим, что у нас есть подкаталог C:JUNK, и этот подкаталог был создан 31 декабря 1990. Далее предположим, что подкаталог полностью находится в кластере 5000. Это не значит, что файлы в подкаталоге находятся в кластере 5000 это значит что реальная информация об именах файлов, содержащихся в подкаталоге C:JUNK может быть помещена в кластер 5000. Корневое вхождение для JUNK в корневом каталоге выглядит примерно так:NameExt SizeDate TimeClusterAttribsJUNK012/31/908:035000directoryДалее предположим, что JUNK содержит только один файл, A.TXT, созданный 1 января 1991 г., который начинается с 6000 кластера и имеет длину 100 байт. Если мы заглянем в содержимое кластера 5000, чтобы увидеть подлинное содержимое структуры подкаталога JUNK, мы увидим следующее:...
NameExtSizeDateTimeClusterAttribs.012/31/908:03 p5000directory..012/31/908:03 p0directoryATXT10001/01/917:00 p6000no attribsВозможно это покажется глупым, но эти два вхождения должны быть первыми вхождениями в подкаталоге, в противном случае CHKDSK скажет, что это недопустимый каталог. (CHKDSK попытается исправить это безобразие, поэтому, когда он предложит вам преобразовать такой подкаталог в файл, отправьте его подальше. Далее в этой статье мы расскажем об ошибках CHKDSK)....
A.TXT был очень простым примером, поскольку он имеет только один кластер. (Почему? Потому, что он имеет длину 100 байт). Если бы файл был длиннее одного кластера, DOS выполнила бы точно такую же процедуру, как и с ORDERS.DAT заглянула бы в 6000, прочитала бы то, что там находится и последовала бы по цепочке FAT к концу файла.Давайте подытожим теперь, как файл, находящийся в подкаталоге, прочитывается DOS. Допустим, мы хотим прочитать файл ORDERS.DAT из упомянутого каталога C:JUNK.1. DOS просматривает корневой каталог, пытаясь найти там вхождение с именем JUNK, у которого установлен атрибут каталога. Она отмечает начальный кластер как INVOICES предположим, что он равен 5000 (в нашем примере).2. DOS отправляется в FAT и просматривает вхождение 5000, чтобы увидеть, охватывает ли информация о подкаталоге несколько кластеров. Большинство подкаталогов могут легко поместиться в один кластер, так что, скорее всего, DOS увидит EOF во вхождении 5000. (Почему большинство подкаталогов умещаются в один кластер? Размер кластера в большинстве жестких дисков равен 2048 байт, и каждое вхождение каталога имеет длину 32 байта. Поэтому вполне достаточно пространства для 2048/32=64 каталогов. А большинство подкаталогов не имеют в своем составе более 64 файлов)....
3. DOS читает кластер 5000 и предполагает, что данные сформатированы так же, как и в корневом каталоге. Она просматривает вхождение каталога, называемое ORDERS.DAT и отмечает начальный кластер. Предположим, что начальный кластер имеет номер 40.4. DOS возвращается к FAT и проверяет вхождение 40. Предположим 40 содержит 41; это значит, что файл находится не только в кластере 40, но также и в кластере 41.5. После этого DOS продолжает проверять FAT, просматривая вхождение 41. Предположим, что 41 содержит 42; значит файл продолжается в кластере 42.6. Предположим, что остаток файла отыскивается так же, как и в примере для ORDERS.DAT. Задача DOS выполнена.Заметьте, что поиск ORDERS.DAT в подкаталоге происходил точно так же, как и поиск его в корневом каталоге за исключением первых двух шагов....
Комментариев нет:
Отправить комментарий