Получение навыков в работе с главной загрузочной записью жесткого диска
Автор: eldinisko • Март 26, 2024 • Лабораторная работа • 2,196 Слов (9 Страниц) • 100 Просмотры
Лабораторная работа № 15-16
«Получение навыков в работе с главной загрузочной записью жесткого диска»
Цель работы: получение практических навыков в работе с главной загрузочной записью жесткого диска.
Образовательные результаты, заявленные во ФГОС третьего поколения:
Студент должен
уметь:
- осуществлять разработку кода программного модуля на современных языках программирования;
- создавать программу по разработанному алгоритму как отдельный модуль;
- выполнять отладку и тестирование программы на уровне модуля
знать:
- основные этапы разработки программного обеспечения;
- основные принципы технологии структурного и объектно-ориентированного программирования;
- основные принципы отладки итестирования программных продуктов
Краткие теоретические и учебно-методические материалы
по теме лабораторной работы
Жесткий диск представляет собой два или более дисков, посаженных на одну ось. Все головки чтения/записи здесь, как и для дискеты образуют жесткий блок, то есть перемещаются все вместе. Для жесткого диска вполне органичным является понятие цилиндра - совокупности всех дорожек, расположенных на разных поверхностях и равноудаленных от оси вращения. С точки зрения адресации понятия "дорожка" и "цилиндр" являются синонимами. Сектор является минимальной адресуемой единицей при обращениях к внешней памяти. Адрес сектора на внешней памяти состоит из трех составляющих:
- номер дорожки (нумерация дорожек начинается с 0);
- номер головки (нумерация головок начинается с 0);
- номер сектора на дорожке (нумерация секторов начинается с 1).
В DOS для чтения/записи секторов служат прерывания (прерывания, а не функции DOS!) 0x25 (чтение) и 0x26 (запись). Обычный формат обращения к этим прерываниям следующий:
AL | - номер логического диска (0 - A, 1 - B, 2 - C, etc.); |
CX | - количество секторов, которое нужно прочитать /записать; DX - логический номер сектора; |
DS:BX | - адрес области оперативной памяти, с которой происходит обмен. |
На выходе, как и для прерывания 0x13, устанавливается флаг переноса, а регистр AH содержит код ошибки при наличии таковой. Заметим, что дисковый адрес задается здесь не физический, а логический - номер сектора относительно начала логического диска. Нумерация секторов внутри логического диска начинается с 0, и номер логического сектора может быть вычислен как:
logs = ( (t * ns) + h) * nh + s-1; (1),
где
- t, h, s - физический адрес (дорожка, головка, сектор);
- ns - количество секторов на дорожке,
- nh - количество головок чтения/записи.
Для получения абсолютного номера сектора надо к вычисленному значению прибавить еще некоторую величину s0 - абсолютный номер сектора начала логического диска.
Некоторые области диска содержат системную информацию, используемую DOS при работе с данным диском. К таким областям относятся:
- Главная Загрузочная Запись (MBR - Master Boot Record) - только для жесткого диска;
- Загрузочный Сектор логического диска (Boot-сектор);
- Таблица Размещения Файлов (FAT - File Allocation Table);
- Корневой Каталог (Root Directiry).
Пример:
Прочитать и выполнить форматный вывод на экран Главной Загрузочной Записи жесткого диска на своем рабочем месте.
Программа состоит из основной программы main(), которая реализует все действия для чтения главной загрузочной записи.
Переменные в основной программе:
x, y - экpанные кооpдинаты;
head - номеp головки (0);
Sect_Trk - номеp доpожки и сектоpа (0,1);
ndrive=0 - номеp логического диска;
EndList - указатель на подпись.
Кроме того, в программе есть такие структуры:
Структура элемента раздела:
struct Part {
byte ActFlag; /* признак активного раздела */
/* физический адрес начала раздела */
byte Begin_Hd; /* # головки */
word Begin_SecTrk; /* # сектора та дорожки */
byte SysCode; /* код системы */
...