Системное программное обеспечение персональных ЭВМ

Логическая структура диска


10.3. Логическая структура диска

Некоторые области диска содержат системную информацию, используемую DOS при работе с данным диском. К таким областям относятся:

  • Главная Загрузочная Запись (MBR - Master Boot Record) - только для жесткого диска;
  • Загрузочный Сектор логического диска (Boot-сектор);
  • Таблица Размещения Файлов (FAT - File Allocation Table);
  • Корневой Каталог (Root Directiry).

10.3.1. MBR занимает самый первый сектор жесткого диска (дорожка 0, головка 0, сектор 1). Причины введения MBR в логическую структуру диска следующие. Формат некоторых системных данных и обращений к прерываниям 0x25, 0x26 в ранних версиях DOS не предусматривал возможности работы с жестким диском объемом более 32 Мбайт. Начиная с версии DOS 3.30, это ограничение обходится путем разбиения жесткого диска на два или более логических дисков, объем каждого из которых менее 32 Мбайт. И хотя уже в версии 4.0 снято ограничение на объем логического диска, возможность разбиения диска остается, так как обеспечивает целый ряд дополнительных удобств (например, разделение внешней памяти между пользователями).

Формат MBR следующий (в программе примера 10.2 он описан структурой struct MBR):

  • первые 466 (0x1BE) байт занимает программа начальной загрузки;
  • далее следует таблица разделов, состоящая из четырех элементов;
  • последние два байта - признак конца таблицы - код 0xAA55.

Программа начальной загрузки, содержащаяся в MBR, выполняет поиск по таблице активного раздела (логического диска, с которого должна происходить загрузка DOS), чтение в память Boot-сектора этого раздела и передачу управления на него.

Элемент таблицы разделов описан в программе примера 10.2 структурой struct Part. Добавим некоторые комментарии к этому описанию.

Поле ActFlag принимает значение 0x80 для активного раздела или 0 - для неактивного.

В физических адресах начала и конца раздела дорожка и сектор задаются в формате регистра CX прерывания 0x13. Раздел, как правило, начинается и заканчивается на границе цилиндра. Если первый сектор цилиндра занимает MBR (или ее продолжение в расширенном разделе DOS), то остальные сектора этой дорожки не используются, и раздел начинается с сектора 1, головки 1 этой дорожки.
Неиспользуемые сектора называются скрытыми.

Поле SysCode для MS-DOS может принимать значения: 1 - логический диск объема менее 32 Мбайт, 12-битная FAT; 4 - логический диск объема менее 32 Мбайт, 16-битная FAT; 6 - логический диск объема более 32 Мбайт; 5 - расширенный раздел DOS.

Последнее значение SysCode означает, что сектор, задаваемый адресом начала раздела в свою очередь содержит MBR (без программы загрузки, но с таблицей разделов по смещению 446), в этой таблице в свою очередь может содержаться описатель расширенного раздела и т.д. Системная утилита FDISK, производящая разбиение физического диска на логические, использует только два элемента в каждой таблице разделов, позволяя создать один первичный (соответствующий логическому диску) и один расширенный раздел DOS.

Поле RelSect содержит номер начального сектора (логический адрес) относительно начала раздела внешнего по отношению к данному.
Программист не может прочитать MBR средствами DOS. Для прерывания 0x25 задается логический адрес - номер сектора внутри данного логического диска, а сама MBR не принадлежит никакому логическому диску.
Пример 10.2 демонстрирует разбиение логического диска. Начальный адрес для чтения задается : 0,0,1. При помощи прерывания 0x13 программа считывает сектор по заданному адресу, далее происходит поэлементный анализ таблицы разделов - пока не встретится признак конца таблицы или раздел нулевого размера. Значения полей элемента таблицы выводятся на экран. Манипуляции, описываемые макросами TRK и SECT, опеспечивают распаковку номера дорожки и сектора. Если поле SysCode содержит признак расширенного раздела, то устанавливается новый дисковый адрес, считывается новый сектор и анализируется новая таблица.

Содержание раздела