Смекни!
smekni.com

Система разделов дисковой подсистемы

Система разделов - одна из наиболее важных элементов в дисковой подсистеме. Ее стандарт не зависит от Файловых и Операционных систем. Структура разделов выглядит очень похоже на структуру каталога DOS.

Корневому каталогу (ROOT) в структуре разделов соответствует первый (корневой) сектор диска. Это сектор загрузочной области (BA - boot area ). Когда компьютер загружается, BIOS загружает этот сектор в адрес 7C00:0000, и передает туда управление. В начале этого сектора записан код начальной загрузки. Этот код просматривает таблицу первичных разделов (PT - Partition Table ), определяет раздел, который является активным (самозагружаемым), затем загружает его первый сектор (загрузочный сектор) в тот же самый адрес (7C00:0000), и вновь передает туда управление. После этого дальнейшее управление загрузкой берет на себя операционная система (ОС).

Жесткий диск может содержать до четырех первичных разделов.

Таблица разделов, расположена так же в самом первом секторе (MBR) жесткого диска. Она описывает тип, активность (самозагружаемость) разделов и начальный / конечный номер цилиндра раздела.

В активных (самозагружаемых) разделах, первый сектор - всегда так называемый Узагрузочный секторФ, который содержит небольшой ОС загрузчик. Теоретически в эти разделы Вы можете установить любую операционную систему.

Рассмотрим подробнее. Ниже приведена детальная таблица корневого сектора диска (цилиндр 0, головка 0, сектор 1). Очень часто эту область загрузки BA (boot area), обозначают как блок начальной загрузки (Master Boot Record):

Смещение Описание
0000h-01BDh Код начальной загрузки MBR
01BEh-01CDh Описатель 1-го основного раздела PartitionTable
01CEh-01DDh Описатель 2-го основного раздела
01DEh-01EDh Описатель 3-го основного раздела
01EEh-01FDh Описатель 4-го основного раздела
­01FEh-01FFh Сигнатура системного байта (0xAA55)
Код начальной загрузки (Boot Code) - исполняемый код, который был описан выше. Описатели разделов имеют следующую форму:
Смещение Описание
0000h Маркер начальной загрузки
0001h Головка Начало размещения
0002h Сектор и Цилиндр (биты 8-9)
0003h Цилиндр (биты 0-7)
0004h Системное Описание
0005h Головка Конец размещения
0006h Сектор и Цилиндр (биты 8-9)
0007h Цилиндр (биты 0-7)
0008h-000Bh Смещение секторов
000Ch-000Fh Количество секторов в разделе

Маркер начальной загрузки Ц байт, значение которого может быть или 0 или номер диска (80h). Если 80h, тогда раздел является активным разделом диска (разделом начальной загрузки), с которого будет осуществляться загрузка операционной системы.

Следующие 3 байта содержат информацию о начале размещения раздела (номера головки, цилиндра и сектора). Номера сектора и цилиндра хранятся в двух байтах. Биты 0-7 номера цилиндра сохранены во втором байте, в то время как биты 8-9 сохранены в старших разрядах первого байта. Значение сектора сохранено в битах 0-5 первого байта. Бинарную карту байтов можно представить в виде таблицы:

2-й байт 1-й байт
F E D C B A 9 8 7 6 5 4 3 2 1 0
C C C C C C C C C C S S S S S S
7 6 5 4 3 2 1 0 9 8 5 4 3 2 1 0

Далее расположен системный байт, который является идентифицирующим байтом раздела. Значение 0, для разделов не используется, в то время как другие значения зависят от файловой системы. DOS использует значения 1,4 и 6 соответственно для FAT12, FAT16 и раздела BigDOS. Значение 5 обозначает Расширенный раздел, которое объясняется позже.

Затем, идут байты с информацией о размещении конечного сектора раздела (номера головки, цилиндра и сектора).

За ними - значение смещения сектора. Это - число, которое показывает позицию раздела относительно существующего сектора. Так, для основных разделов, это - стартовый сектор раздела. Основные разделы - разделы, которые описаны в корневой структуре разделения. Несколько позже мы увидим, что имеются описатели разделов также в других местах на диске, которые называются логическими дисками.

В последнем элементе описателя, находиться информация о длине раздела (в секторах).

Когда диск работает в режиме LBA (логической адресации блоков), значения CHS (цилиндр Ц головка Ц сектор) для начала и конца размещения игнорируются. Отображение диска выполняется с абсолютным номером сектора, а не в терминах CHS (cylinder-head-sector). Таким образом, относительное значение сектора и длина раздела используются для идентификации объема раздела на диске. CHS значения вообще недопустимы для дисков объемом более чем 8.4GB.

В корневом секторе выделены адреса для 4 описателей. Сразу после них, расположена сигнатура (два байта) AA55h, которая метит сектор как системный сектор. Это значение существует в каждом секторе структуры разделов (включая загрузочные секторы) и его отсутствие может свидетельствовать о вероятном повреждении структуры разделов.

Теперь, относительно дополнительных разделов. Они описаны, как и любой другой раздел в корневом секторе, но их обработка Операционными системами несколько иная. Они указывают на сектор, который содержит описатели разделов для других разделов и дополнительные разделы, и так далее. Именно поэтому мы можем иметь более чем 4 раздела на диске. Рассмотрим как пример небольшую таблицу:

MBR 1st Ext 2nd Ext 3rd Ext
1 : P 1 : L 1 : L 1 : L
2 : P 2 : E ----- 2 : E ----- 2 : -
3 : E ----- 3 : - 3 : - 3 : -
4 : P 4 : - 4 : - 4 : -

В этом примере, показана карта структуры разделов. MBR обозначает блок начальной загрузки (корневой сектор) и 1st, 2nd и 3rd Ext - позиции 1-го, 2-го и 3-го описателей дополнительных разделов. \'P\' обозначает основной (Primary) раздел, \'E\' обозначает дополнительный (Extended) раздел, и \'L\' обозначает (Logical) логический диск. Раздел \'E\' в MBR, называется главным (корневым или основным) дополнительным разделом. Это Ц потому, что он включает в себя все остальные дополнительные разделы. Начало расположения основного дополнительного раздела указывает на 1-й дополнительный раздел. Объем, который занимает основной дополнительный раздел, зарезервирован для логических дисков. Все дополнительные разделы содержат информацию относительно соответствующих им логических дисков, аналогично MBR (описанному выше), но без части кода начальной загрузки. Каждый дополнительный раздел также имеет 4 описателя (но используются только первые два). Первый описатель идентифицирует соответствующий логический диск, а второй является описателем, указывающим на следующий логический диск в цепочке разделов. Т.о. структура разделов - структура списка связей, которая может быть такой длины, какой необходимо. (Каждый дополнительный сектор описания раздела имеет в конце сигнатуру 0xAA55, идентифицирующую его как системный сектор).

Для разделов существуют некоторые общепринятые ограничения геометрии. Разделы должны начинаться в начале цилиндра, и заканчиваться в конце цилиндра (хотя это иногда нарушается).

Начало должно всегда быть - Цилиндр: XXXX Головка: 0 (или 1) Сектор: 1

Окончание должно быть - Цилиндр: YYYY Головка: m-1 Сектор n

, где m - число головок физического диска, и n - число секторов на дорожку физического диска.

При чем, если Вы удаляете один из средних логических дисков (например, 2-ой), предыдущий дополнительный раздел будет связан непосредственно со следующим, изменяя параметры связи. Ограничения геометрия распространяются также и на диски, которые работают с LBA трансляцией.