Немного о физической организации
Жесткий диск состоит из нескольких металлических пластин, головок
чтения-записи и механизма их позиционирования, помещенных в герметичную
коробку (банку). К нему прикреплена печатная плата с контроллером и
буферной памятью (кэшем), которая посредством шлейфа (40 или 80 жил)
соединяется с материнской платой или отдельным контроллером. Так вот,
металлические пластины условно разбиты на концентрические дорожки, а
дорожки разделены на секторы. Дорожки на равном расстоянии от центра на
всех поверхностях пластин объединяются в цилиндры. Таким образом, для
чтения определенного сектора данных (его емкость принята равной 512 байт)
нужно: 1) отвести головки на нужное расстояние от центра, то есть
позиционировать на определенный цилиндр; 2) начать просмотр дорожки на
нужной пластине, активировав соответствующую головку; 3) производить
чтение всей информации до появления заголовка сектора, номер которого
(содержится в этом заголовке) совпадает с нужным нам для операции чтения
или записи. В соответствии с такой схемой метод нахождения необходимой
информации на жестком диске называется CHS-адресацией
(Cylinder-Head-Sector).
BIOS (базовая система ввода-вывода) является набором системных
подпрограмм (функций), среди которых есть и программа чтения-записи данных
на жестком диске. Для получения содержимого одного сектора требуется
указать его CHS-адрес. Число секторов, цилиндров и головок BIOS'у должно
быть известно, для этого и существует автодетект в Setup. Впрочем,
информация о геометрии, используемая для работы функций доступа к диску,
даже близко не соответствует реальной геометрии современного жесткого
диска. У него 1-3 пластины, одна из которых может использоваться только с
одной стороны, и 1-6 головок. Поэтому контроллер жесткого диска производит
трансляцию поступающих адресов, такую же трансляцию производит и BIOS,
работая по механизму LBA (Logical Block Addressing). Но это уже другая
история.
В соответствии с идеологией MS-DOS жесткий диск может состоять из так
называемых "разделов" - независимых областей диска, которые могут быть
построены по схеме любой операционной системы, то есть использовать любую
файловую систему. Таких разделов должно быть два - основной (Primary), с
которого обычно осуществляется загрузка, и расширенный (Extended), который
может быть разделен на несколько частей-подразделов (логических дисков).
Таким образом, первый раздел диска самостоятелен, остальные объединяются в
группу. Каждый раздел имеет принадлежность к той или иной файловой
системе.
В рамках DOS (и основанных на этой же операционной системе
Windows3.x/95/98/ME) существуют три файловых системы - FAT12, FAT16 и
FAT32. Об их отличиях я упомяну ниже.
Системные секторы
Самый первый сектор любого жесткого диска имеет название Master Boot
Record, MBR. Он состоит из двух частей - программы начального загрузчика и
таблицы разделов (Disk Partition Table, DPT). DPT состоит из четырех
записей, обозначающих адрес начала раздела, его размер в секторах, адрес
конца и тип файловой системы. Конечно, используются только две записи -
для основного и расширенного раздела, потому что каждый подраздел
(логический диск) имеет такую же DPT с указанием адреса следующего
подраздела. Задача загрузчика в MBR - дать возможность загрузки с нужного
раздела (т.е. использовать несколько операционных систем). Стандартный
загрузчик DOS предоставляет весьма ограниченный механизм выбора - загрузка
возможна с того раздела, у которого установлен флаг активности таблице
DPT.
Самый первый сектор раздела называется Boot Sector. В его составе также
есть загрузочная программа и таблица BIOS Parameter Block, BPB. В этой
таблице содержится информация о местонахождении и размере другой важной
области - таблицы размещения файлов, FAT. По своей сути FAT - это большой
массив элементов, каждый элемент соответствует каждому кластеру. Кластер -
блок секторов (от 8 до 128), элемент распределения всего дискового
пространства раздела. Каждому файлу при его создании выделяется нужное
число кластеров. Номер первого кластера заносится в каталог (директорий,
папку), а соответствующий этому кластеру элемент FAT содержит номер
второго кластера. Элемент FAT, соответствующий второму кластеру, содержит
номер третьего кластера и т.д. Весь FAT состоит из таких цепочек
(Chains).
Если элемент FAT не связан ни в одну цепочку и при этом не равен 0, он
называется "потерянным" (Lost Cluster). "Потеря" кластеров происходит при
перезагрузке в момент записи цепочки в FAT, например, при
создании/изменении файла, когда операция записи прерывается. Конечно, это
не самые страшные последствия неожиданной перезагрузки, но все же терять
место на диске не очень хочется. Программисты из Microsoft хорошо знали о
"стабильности" своей Windows, поэтому и запускается Scandisk
автоматически.
Если файл впоследствии увеличивается в размерах, ему назначаются новые
кластеры из числа свободных, причем чаще всего они находятся в другом
месте диска. Цепочка "перепрыгивает" другие цепочки - вот вам и
фрагментация, которую устраняют программы-дефрагментаторы, переносящие
файлы так, чтобы их кластеры шли друг за другом по порядку.
Хотя система цепочек и является достаточно эффективной и простой, у нее
есть недостатки. Во-первых, низкая надежность - при исчезновении одного
элемента весь файл будет нечитаемым, а порча FAT означает потерю большого
количества (если не всех) файлов. Для устранения этого недостатка
существуют две одинаковых копии FAT. Второе - если размер файла не кратен
размеру кластера, образуется слек (Slack) - часть кластера, не занятая
полезной информацией. Чем больше размер кластера, тем большая часть диска
занята слеком. Для файла длиной 1 байт вы теряете весь кластер, а если он
имеет большой размер (32 Кбайта, например), то потери на слек могут
составлять 30-50% от общей емкости диска (кстати, проверить их можно
программой Sandra - модуль Drive Information).
Размер элемента FAT дает название самой файловой системе. FAT12 имеет
12-битные элементы, которые позволяют организовать на диске около 4-х
тысяч кластеров. FAT16 имеет 16-битные элементы, число кластеров - 65530.
FAT32 - 32-битные элементы, около 4 млрд. кластеров. Чем больше на диске
будет кластеров, тем меньше можно сделать размер самого кластера и тем
самым меньше потерять места. Поэтому FAT12 используется только для гибких
дисков, FAT16 - для дисков емкостью до 500 Мб (в принципе, можно и до 2
Гб).
|