Особенности структуры жесткого диска
Жесткий диск может быть разделен на несколько логических дисков (разделов, томов). Каждый из них рассматривается как автономный диск. Каждый логический диск имеет собственную системную и рабочую области. Любой логический диск может выступать в качестве загрузочного (системного) диска. Для обеспечения процесса начальной загрузки операционной системы, а также для хранения данных о физическом расположении логических дисков, в первом секторе жесткого диска (0-й цилиндр, 0-я сторона, 1-й сектор) создается специальная информационная структура - главная загрузочная запись (Master Boot Record, сокращенно MBR). MBR содержит код программы начальной загрузки и таблицу разделов диска (Partition Table). Каждый раздел в таблице представлен одним 16-байтовым элементом, содержимое которого формируется программой форматирования жесткого диска (например, FDISK). Для просмотра разделов можно использовать утилиту DiskEdit. Хотя работать с ней нужно очень осторожно. Здесь как у сапера - ошибаться нельзя - можно потерять всю информацию. Таблица 4. Структура таблицы разделов диска.
Смещение |
Длина, байт |
Содержимое |
1-й элемент (для первого раздела диска) |
||
+00 |
1 |
Флаг загрузки: 0 - не загружаемый 80h - загружаемый (BootAble) |
+01 |
1 |
Начало раздела: Hds (№ головки) |
+02 |
2 |
Начало раздела: Sec (№ сектора - 6 младших битов) Cyl (№ цилиндра - 10 старших битов) |
+04 |
1 |
Код системы: 0 - неизвестна 1 - DOS (FAT-12) 4 - DOS (FAT-16) |
+05 |
1 |
Конец раздела: HdE (№ головки) |
+06 |
2 |
Конец раздела: Sec (№ сектора - 6 младших битов) Cyl (№ цилиндра - 10 старших битов) |
+08 |
4 |
Абсолютный номер начального сектора раздела (соответствует номерам сектора, головки и цилиндра начала раздела): Cyl*сект./дор.*дор./цил.+Hds*сект./дор.+(Sec-1) |
+0Ch |
4 |
Число секторов раздела |
2-й элемент (для второго раздела диска) |
||
+10h |
1 |
Флаг загрузки |
... |
... |
... |
... |
... |
... |
Последний элемент (после описания последнего раздела диска) |
||
|
|
0AA55h |
Процесс загрузки системы с жесткого диска начинается со считывания MBR в ОЗУ и передачи управления на код находящейся в MBR программы. Эта программа читает таблицу разделов диска и определяет первый из разделов, помеченный как BootAble. Затем в память считывается boot-сектор этого раздела и ему передается управление. Далее работает программа начальной загрузки, находящаяся в boot-секторе раздела, которая загружает все необходимые системные файлы. Алгоритмы выполнения типовых файловых операций
Чтение файла
Чтение файла с диска (например, при выполнении команды TYPE D:\TEXT\name.txt) реализуется следующей процедурой:
В корневом каталоге логического диска D находится регистрационная запись, у которой:
поле "Имя" = ТЕХТ
поле "Расширение" = пусто
атрибут Dir = 1
В этой записи читается значение поля "Номер начального кластера" (N)
Читается первая копия FAT логического диска D и определяется цепочка номеров кластеров (которая начинается с N и оканчивается EOF), выделенных каталогу ТЕХТ.
Читается каталог ТЕХТ:
последовательно считываются все кластеры этой цепочки, начиная с N-го
находится регистрационная запись, у которой:
поле "Имя" = name
поле "Расширение" = txt
атрибут Dir = 0
В этой записи читается значение поля "Номер начального кластера" (N1).
Читается первая копия FAT диска D и определяется цепочка номеров кластеров (которая начинается с N1 и оканчивается EOF), выделенных файлу name.
Читается файл name: последовательно считываются все кластеры этой "цепочки", начиная с N1-го.
