на главную add bookmark :: set homepage
MENU
Главная
Каталог статей
Софт насущный
Книжная полочка
Wall'ный креатив
Гостевая книга
Форум сайта
Обмен ссылками
Поиск на сайте
UNDERWORD
Слово об удовольстиях
NEW
VISITS
Rambler's Top100
CONTENTS: главная » статьи » софт » книги » обои » ссылки » поиск

Организация хранения файлов в Windows 9x/Me

 Автор: Алексей Егоров

Данная статья, я надеюсь, поможет вам справиться со всякого рода неприятностями, связанными с хранением информации, а также послужит руководством для дальнейшего исследования работы ОС Windows. Обычно, мы не задумываемся, как хранятся на диске документы, рисунки, игровое ПО, но иногда возникают ситуации (неудачный «разгон» ЦП, вирусная атака, физическое повреждение носителя и т. п.), когда необходимо знать, где и как располагаются данные.


Загрузочная запись:

Одна из наиболее значимых информационных структур логического диска — его загрузочная запись. Она располагается в первом секторе диска (с появлением Windows 95 OSR2 при использовании FAT32 загрузочная запись размещается в нескольких секторах). Формат загрузочной записи в статье не приводится, но любой пользователь может его получить с помощью программы DiskEdit.

Назначение данной записи — загрузка ОС и организация хранения данных. Если логический диск является системным, то в его первом секторе имеется код загрузки ОС, управляющийся от MBR (Master boot record). Его задача — загрузка основных файлов ОС и передача им управления; в Windows 9х такими файлами будут io.sys и msdos.sys.

Если не существует загрузочной записи, то она создается и заполняется программой FORMAT. Но если она уже есть, то утилита FORMAT будет использовать ее информацию.

С загрузочной записью вручную обычно работать не приходится, хотя бывают и исключения. Рекомендуется сохранить и скопировать сектор загрузочной записи на дискету. В случае краха системы организации хранения информации на диске этот файл поможет сохранить данные.

Еще один совет: если нужно провести полное форматирование диска, то сначала с помощью утилиты DiskEdit обнулите сектор загрузочной записи, а уже затем запускайте программу FORMAT.


Таблица размещения файлов:

Следующая ступень организации хранения данных на жестком диске — FAT (File Allocation Table — таблица размещения файлов). Она, как правило, представлена в двух экземплярах, следующих друг за другом и содержащих одинаковую информацию (при условии, что все в порядке). Нужно помнить, что операционные системы DOS и Windows не различают цилиндры, головки и физические секторы диска, который для этих ОС предстает в виде непрерывной последовательности логических секторов или кластеров (группы смежных секторов). Система MS-DOS до версии 7.0 включительно и система Windows могли распознать 65 536 логических блоков на диске. Начиная с Windows 95 OSR2, появилась возможность использовать для нумерации логических элементов на диске 32-разрядные данные, а значит, число адресуемых элементов теоретически возросло до 4 294 967 295. Для DOS до версии 3.х включительно размер логического блока равнялся 512 байтам, т. е. размеру физического сектора. Видимо, поэтому появилось понятие «логический сектор», используемое и поныне. Наибольшая емкость диска, с которым могла работать DOS, составляла 32 Мбайт. Но был найден выход: объединять логические секторы в группы — так называемые кластеры. Под этим термином понимается группа таких смежных секторов, которым соответствует одно значение адреса. Если увеличить размер кластера, то можно будет работать с большими разделами, оставаясь в рамках 16-разрядной адресации. После перехода к 32-разрядной адресации стало возможным (правда, лишь теоретически) применять кластеры любого размера на любых разделах.

На рисунке представлена схема работы и организации FAT, а также фрагментация, когда части файла разбросаны по всему диску.


Идея FAT очень проста. Все пространство логического диска разбивается на кластеры, размер которых зависит от емкости диска. Затем составляется таблица, каждому элементу которой соответствует элемент дискового пространства — кластер. Эта таблица линейная: индекс ячейки соответствует номеру кластера (значения ячеек приведены в таблице 1).

Таблица 1. Возможные значения в записях FAT

FAT16FAT32Значение
0000000000Неиспользуемый
F0FF - F6FFF0FF0000 - F6FFFF0FЗарезервированный
F7FFF7FF0000Дефектный
F8FF - FFFFF8FF0000 - FFFFFF0FПоследний кластер файла
Любые другиеЛюбые другие значенияСледующий кластер файла

Если исключить резервирование кластеров, то максимальное число адресуемых кластеров в FAT16 — 65 526, в FAT32 — 4 294 377 472. FAT32 работает иначе, чем FAT16, и значения в таблице 1 обрабатываются иначе. Последние четыре разряда каждой записи FAT32 пока зарезервированы.


Расчет размера FAT:

Размер FAT зависит от числа и объема кластеров. Рассчитать число секторов, занимаемых FAT, можно преобразовав формулу

N=[(Q – 2хN)/k]х(s/512),

где N — размер FAT в секторах в первом приближении; Q — общее число секторов на логическом диске (можно взять из загрузочной записи или таблицы разделов); k — размер кластера в секторах (для FAT32 мы сами задаем размер кластера, выбирая его кратным степени числа 2; по умолчанию он составляет 8 секторов, или 4 Кбайт); s — размер записи FAT в байтах (для FAT16 s=2, а для FAT32 s=4).

Итак, округлив до ближайшего целого числа

N=[Q/(kх128+2)] – R

рассчитывается размер для FAT32, а по

N=[Q/(kх256+2)] – R

— для FAT16. В этих формулах параметр R — число зарезервированных секторов между началом логического диска и FAT, оно берется из загрузочной записи.

Размер кластера в FAT32 можно задать с помощью команды FORMAT /z:n, где n=kх512 — размер кластера в байтах. (Допустимо с помощью утилиты DiskEdit внести изменения в поле «Размер кластера» загрузочной записи, а затем запустить команду FORMAT уже без параметров.) Кроме того, размер кластера изменяется с помощью программы Partition Magic (причем трансформацию можно произвести и на логическом диске с данными).

В FAT16 для определения размера кластера нужно сделать следующее. Выяснить число секторов, приходящихся на один адресуемый элемент (FAT16 может адресовать 65 526 элементов) Q/65526. Полученное значение нужно привести к виду 512х2t байт (округлив в большую сторону).

В заключение разговора о FAT нужно отметить, что первые два кластера резервируются. Что же касается скорости работы и «потерь» дискового пространства на незаполненных кластерах, то здесь действует принцип: выигрываешь в скорости — проигрываешь на неполностью занятых кластерах, т. е. чем больше размер кластера, тем меньше величина FAT и выше скорость работы с ней.


Корневой каталог:

Логически корневой каталог служит оглавлением — это следующая за второй FAT область на логическом диске, являющаяся последовательностью 32-байтовых записей. Каждая из последних может быть каталогом, именем файла (в том числе и длинным), а также меткой тома. Нужно сразу отметить, что, в отличие от FAT32, в FAT16 размер корневого каталога зафиксирован.

В FAT16 таких записей 512. Легко подсчитать: 512х32 = 16 384 байта, или 32 сектора. При использовании FAT32 корневой каталог рассматривается как обычный каталог и его размер растет по мере необходимости.

Прежде чем идти дальше, нужно условиться, что под файлом данных понимается поименованная последовательность байтов. Причем ИМЯ хранится отдельно от этой последовательности. Теперь обратимся вместе с операционной системой к данным и будем работать с ними через ИМЯ, которое и есть 32-байтовая запись, упоминавшаяся выше. Но обычно при словосочетании «имя файла» нам представляется что-то вроде Program Files, io.sys и т. д. В чем же дело? Да в том, что привычные имя, размер, дата, время, атрибуты и номер первого кластера закодированы в 32-байтовой записи, а программы, работающие с файлом, раскодируют и показывают имя, дату и т. д. Формат записи каталога приведен в таблице 2.

Таблица 2. Формат записи каталога

СмещениеЗначениеРазмер, байтыФормат
0Имя файла8Символы в кодах ASCII
8Расширение3Символы в кодах ASCII
11Атрибут1Код, бит
12Для NT1Только для NT, для остального - 0
13К времени создания1Назначение неясно
14Время создания2Кодируемое слово
16Дата создания2Кодируемое слово
18Дата последнего обращения2Кодируемое слово
20Расширенный атрибут2Кодируемое слово
22Время изменения2Кодируемое слово
24Дата изменения2Кодируемое слово
26Начальный номер кластера2Слово
28Размер файла4Двойное слово

«Время изменения» и «Дата изменения» кодируются по следующим формулам:

Время=(часых2048)+(минутых32)+(секунды+2);
Дата=((год–1980)х512)+(месяц х 32)+день.

Несколько слов об атрибутах файлов. Вот основные из них: «только чтение», «скрытый», «системный», «метка тома», «подкаталог», «архивный». Атрибут «подкаталог» сообщает ОС, что данная запись относится к подкаталогу, атрибут «метка тома» — к метке тома. Остальные атрибуты относятся к файлам данных и указывают, как система должна с ними работать.

Здесь есть один нюанс. Если указать недопустимую комбинацию атрибутов, например «метка тома»+«каталог»+«скрытый», то DOS перестанет видеть данную запись, а вместе с ней и тот объект, на который она указывала. Это свойство и используется в Windows 9x для хранения длинных имен файлов.


Длинное имя (ДИФ):

Все встречались, наверное, с сообщением об ошибке «Обнаружено длинное имя, не связанное больше с файлом». Подобное положение возникает тогда, когда файл удален, а длинное имя осталось. Интересная ситуация имеет место и в случае, если присвоить недопустимую комбинацию атрибутов файлу. Тогда этот файл исчезает из поля зрения системы, а дисковые утилиты Scandisk и NDD сообщают об обнаружении длинного имени, не связанного более с файлом. Если мы ответим согласием на предложение удалить его, то появится сообщение о наличии потерянных кластеров. Удаление этой цепочки приведет к безвозвратной потере файла, а сохранение ее в виде файла в корневом каталоге ставит вопрос о распознавании характера данных. И только Disk Minder из Nuts&Bolts смог корректно справиться с поставленной задачей. Он сообщил о неверной комбинации атрибутов файла и устранил ошибку. Так что будьте внимательны при работе с дисковыми утилитами, попытайтесь выявить причину каждой конкретной погрешности.

В заключение разговора о длинных именах остановлюсь на моментах, касающихся природы и способов хранения длинных имен на диске — в таблице 3 приводится формат записи длинного имени. Первый момент — особая комбинация атрибутов, прячущая запись ДИФ от DOS, второй — длинное имя файла, хранится в кодировке Unicode, третий — одно ДИФ разбивается на несколько мелких элементов (максимум до 20), длина каждого с учетом ряда характеристик, равна по-прежнему 32 байт.

Таблица 3. Формат ДИФ

СмещениеЗначениеРазмер, байтыФормат
0Первый байт содержит номер части ДИФ и признак его завершения. Следующие 10 байт - часть имени1+10Байт + Последовательность символов Unicode
11Атрибуты1Коды, как правило, 0F hex
12Тип1Значение 0
13Контрольная сумма1Байт
14Продолжение имени12Последовательность символов Unicode
26Номер кластера2Всегда значение 0
28Продолжение имени4Последовательность символов Unicode

В заключение разговора о длинных именах остановлюсь на моментах, касающихся природы и способов хранения длинных имен на диске — в таблице 3 приводится формат записи длинного имени. Первый момент — особая комбинация атрибутов, прячущая запись ДИФ от DOS, второй — длинное имя файла, хранится в кодировке Unicode, третий — одно ДИФ разбивается на несколько мелких элементов (максимум до 20), длина каждого с учетом ряда характеристик, равна по-прежнему 32 байт.

Таблица 4 иллюстрирует вышесказанное.

Таблица 4. Фрагмент корневого каталога

ИмяТипРазмер, байтыДатаВремя, мин:сКластерARSHDV
Сектор 513
IO SYSФайл2231482.10.959:50905- R S H - -
MSDOS SYSФайл179324.09.0119:39990- - - - -
SYSTEMVol027.01.9917:540A - - - - V
SERVDir027.01.9917:5434- - - - D
WINDOWSDir027.01.9917:545- - S - D -
Program FilesLFN---0- R S H - V
PROGRA~1Dir027.01.9917:54401- R - - D -

:: на начало ::
Windows Info Edition
 Поиск:     
Original idea, design: Daemon © 2003-2005 «Windows Info Edition»
Сайт создан в системе uCoz