Главная > Методическое пособие


Таблица 2.2.7 – структура расширенного блока параметров BIOS для томов NTFS.

Смещение поля
(в байтах)

Размер поля
(в байтах)

Назначение поля

0x24

4

Не используется NTFS.

0x28

8

Общее количество секторов в разделе NTFS.

0x30

8

Логический номер кластера для файла MFT$.

0x38

8

Логический номер кластера для файла MFT$Mirr.

0x40

4

Количество кластеров в сегменте записи файла.

0x44

4

Количество кластеров в индексном блоке.

0x48

8

Серийный номер тома.

0x50

4

Контрольная сумма.

2.2.2. Структура главной загрузочной записи жёстких дисков

Жёсткие диски могут содержать несколько разделов, на каждом из которых может быть установлена ОС. В этом случае каждый раздел имеет свой собственный загрузочный сектор. Информация о разделах хранится в так называемой главной загрузочной записи (Master Boot Record – MBR) жёсткого диска. Помимо информации о разделах в MBR также хранится загрузочный код, который определяет, какой из разделов является активным, считывает его загрузочный сектор в память и передаёт ему управление. Главная загрузочная запись имеет размер 512 байт и занимает сектор 1 дорожки 0 стороны 0 жёсткого диска. Загрузочные сектора разделов размещаются в самых первых секторах соответствующих разделов.

MBR является основной структурой данных жёсткого диска. Существуют вирусы, которые модифицируют MBR, делая невозможным загрузку ОС. Рекомендуется устанавливать в BIOS опцию проверки MBR на вирусы. Эта опция доступна практически во всех современных BIOS.

Структура главной загрузочной записи жёсткого диска представлена в таблице 2.2.8.

Таблица 2.2.8 – структура главной загрузочной записи жёсткого диска.

Смещение поля
(в байтах)

Размер поля
(в байтах)

Назначение поля

0x0000

440

Загрузочный код. Данный код запускается BIOS при загрузке с жёсткого диска. Если на жёстком диске присутствуют разделы с установленной ОС, то загрузочный код определяет, какой из этих разделов является активным, считывает соответствующий загрузочный сектор и передаёт ему управление.

0x01B8

6

Сигнатура диска. Это уникальное число, которое используется Windows NT для хранения в реестре информации о диске (ветвь HKEY_LOCAL_MACHINE\SYSTEM\DISK).

0x1BE

64

Таблица разделов. Содержит всю необходимую информацию о разделах жёсткого диска (начало, конец, размер, тип и т. д.)

0x01FE

2

Маркер конца сектора

2.2.3. Типы разделов и таблица разделов

Всего жёсткий диск может содержать до 4 разделов. Поэтому таблица разделов хранит в себе 4 записи – по одной для каждого раздела. Разделы бывают основными и дополнительными. Дополнительный раздел может быть только один. Таким образом, на жёстком диске можно разместить максимум либо 3 основных и один дополнительный раздел, либо 4 основных раздела.

Каждый раздел может иметь свою индивидуальную файловую систему. Например, можно выделить раздел с файловой системой NTFS для Windows NT и раздел с файловой системой FAT32 для Windows 98.

Основной раздел – это тот раздел, на котором установлены загрузочные файлы ОС. Сама ОС (её системные файлы) может располагаться на любом другом разделе. С основного раздела происходит загрузка ОС, поэтому основной раздел включает в себя загрузочный сектор.

Основной раздел может быть активным или неактивным, причём активным может быть только один основной раздел, если их несколько. Загрузочный код MBR выбирает для загрузки именно активный раздел и считывает его загрузочный сектор с последующей передачей ему управления.

Дополнительный раздел предназначен для организации логических дисков. С этого раздела не может осуществляться загрузка ОС. Сам по себе дополнительный раздел не добавляет логических дисков – они должны быть созданы в нём. Например, если жёсткий диск не является системным и содержит только один дополнительный раздел, то в этом дополнительном разделе можно разместить до 23 дисков (D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z). Здесь предполагается, что буква C зарезервирована для системного диска.

Жёсткий диск не обязательно полностью заполнять разделами. Какая-то часть жёсткого диска может оставаться не разбитой на разделы. Это справедливо и для дополнительного раздела, часть которого также может оставаться не разбитой.

Структура таблицы разделов представлена в таблице 2.2.9.

Таблица 2.2.9 – структура таблицы разделов.

Смещение поля в байтах

Название поля

0x01BE

Раздел 1

0x01CE

Раздел 2

0x01DE

Раздел 3

0x01EE

Раздел 4

Общий размер таблицы разделов составляет 64 байта. Каждая запись в таблице занимает 16 байт и определяет характеристики одного из 4-х разделов жёсткого диска. Структура записей таблицы разделов представлена в таблице 2.2.10.

Таблица 2.2.10 – структура записей таблицы разделов.

Смещение поля
(в байтах)*

Размер поля
(в байтах)

Назначение поля

0x00

1

Индикатор загрузки. Определяет, является ли данный раздел активным (значение 0x80) или неактивным (значение 0x00).

0x01

1

Начальная головка (сторона). Принимает значения от 0 до 255.

0x02

1

Начальный сектор (биты 0-5). Это поле также содержит старшие 2 бита номера цилиндра (биты 6-7). Номер сектора может быть в пределах от 1 до 63.

0x03

1

Начальный цилиндр. В данном поле содержатся младшие 8 бит номера цилиндра. Используя 2 бита из поля начального сектора, номер цилиндра занимает 10 бит и таки образом может быть в пределах от 0 до 1023.

0x04

1

Системный идентификатор.

0x05

1

Конечная головка.

0x06

1

Конечный сектор (биты 0-5) и старшие 2 бита номера конечного цилиндра (биты 6-7).

0x07

1

Младшие 8 бит номера конечного цилиндра.

0x08

4

Относительный номер сектора. Показывает количество секторов от начала диска до начала раздела.

0x12

4

Общее количество секторов в разделе.

* - смещения приведены относительно начала таблицы разделов.

Поле системного идентификатора определяет тип используемой файловой системы. Для Windows NT/2000 это поле также определяет то, какой драйвер файловой системы использовать при загрузке. Значение этого поля также может определять дополнительный раздел.

В таблице 2.2.11 представлены возможные значения поля системного идентификатора.

Таблица 2.2.11 – значения поля системного идентификатора.

Значение поля

Описание

0x01

Раздел или логический диск FAT12. Общее количество секторов в разделе не превышает 32679.

0x04

Раздел или логический диск FAT16. Общее количество секторов в разделе находится в пределах от 32680 до 65535.

0x05

Расширенный раздел.

0x06

Раздел или логический диск BIGDOS FAT.

0x07

Раздел или логический диск NTFS.

MS-DOS распознаёт только разделы с системным идентификатором 1, 4, 5 или 6.

Windows 9x также определяет и другие значения для поля системного идентификатора (см. табл. 2.2.12). Разделы с этими значениями не распознаются Windows NT, но распознаются Windows 2000/XP.

Таблица 2.2.12 – значения системного идентификатора, определяемые Windows 9x.

Значение поля

Описание

0x0B

Основной раздел FAT32 с использованием расширений прерывания Int 13h.

0x0C

Дополнительный раздел FAT32 с использованием расширений прерывания Int 13h.

0x0E

Основной раздел FAT16 с использованием расширений прерывания Int 13h.

0x0F

Дополнительный раздел FAT16 с использованием расширений прерывания Int 13h.

Поля начальной стороны, сектора и цилиндра используются MBR для считывания загрузочного сектора активного раздела в память.

Максимальный объём жёсткого диска, разделы которого могут быть описаны в таблице разделов зависит от максимального количества секторов, сторон и цилиндров. Поскольку современные жёсткие диски форматируются с использованием 512 байт на сектор, максимальный объём жёсткого диска для таблицы разделов можно вычислить по формуле:

MaxCapacity = sectors * cylinders * heads * 512 или

MaxCapacity = 63 * 1024 * 256 * 512 = 8455716864 байта (7,875 Гб).

Поскольку максимальный размер кластера для файловых систем FAT составляет 65536 байт, максимальный объём тома FAT составляет 4 Гб. Максимальный размер тома NTFS гораздо больше и составляет более 32 Гб.

Для жёстких дисков объёмом более 7,875 Гб доступ к разделом с использованием начальных сектора, стороны и цилиндра невозможен. Windows NT/2000 в этом случае используют относительный номер сектора, который показывает смещение (в секторах) раздела от начала жёсткого диска. Для таких жёстких дисков в BIOS Setup должен быть включён режим LBA, который вместо трёхмерной геометрии диска (цилиндр-головка-сектор) использует линейную адресацию по логическим номерам секторов.

Если требуется создание более 4-х логических дисков, то их можно сформировать в расширенном разделе. Основная таблица разделов указывает на первый сектор первого логического диска расширенного раздела, в которомхранится расширенная таблица разделов. Расширенная таблица разделов имеет такой же формат, что и таблица разделов в MBR. Записи расширенной таблицы разделов содержат следующую информацию:

Первая запись указывает на текущий логический диск (на себя) в расширенном разделе.

Вторая запись указывает на следующий логический диск в расширенном разделе.

Третья и четвёртая записи заполнены нулями и не ссылаются ни на один логический диск.

Первый сектор каждого логического диска в расширенном разделе имеет подобный формат и таким образом организуется цепочка логических дисков, каждый из которых указывает на последующий логический диск.

Использование полей относительного номера сектора и общего количества секторов в расширенной таблице разделов отличается от основной таблицы разделов.

Для записи 1 относительный номер сектора – это смещение (в секторах) от начала логического диска до загрузочного сектора раздела. Общее количество секторов показывает размер текущего раздела за вычетом загрузочного сектора.

Для записи 2 относительный номер сектора – это смещение от начала дополнительного раздела до первого сектора следующего логического диска, содержащего расширенную таблицу разделов. Общее количество секторов показывает объём следующего логического диска.

2.3. Задания и методические указания
к выполнению работы

2.3.1. Задание на лабораторную работу

  1. Написать программу на языке C, позволяющую записывать загрузочный сектор дискет данными, взятыми из файла. Программа должна перезаписывать только загрузочный код. Размер файла с загрузочным кодом фиксированный – 448 байт.

  2. Написать программу на ассемблере, выполняющую заданные действия при загрузке компьютера и поместить данную программу в загрузочный сектор дискеты.

  3. Выполнить перезагрузку компьютера с дискеты и проверить правильность работы программы.

2.3.2. Методические указания к выполнению работы

Для чтения физических секторов предназначена функция 02h прерывания BIOS INT 13h. Для записи физических секторов служит функция 03h прерывания BIOS INT 13h. Для работы с секторами также могут быть использованы функции 25h и 26h прерывания DOS INT 21h. Описание и примеры использования функций можно посмотреть в курсе «Программно-аппаратная организация ЭВМ».

Чтобы записать в загрузочный сектор дискеты только загрузочный код, необходимо:

  1. считать загрузочный сектор с дискеты;

  2. записать в считанный сектор (в памяти) загрузочный код;

  3. записать модифицированный загрузочный сектор на дискету.

Для вызова прерываний в библиотеке DOS.H языка C имеется функция:

void intr(int __intno, struct REGPACK _FAR *__preg);

Данная функция позволяет вызвать программное прерывание с номером __intno, предварительно записав в регистры процессора значения, взятые из структуры REGPACK. Функция принимает указатель на данную структуру (параметр __preg). Структура REGPACK имеет следующий вид:

struct REGPACK

{

unsigned r_ax, r_bx, r_cx, r_dx;

unsigned r_bp, r_si, r_di, r_ds, r_es, r_flags;

};

Как видно из названий элементов структуры, она может быть использована для передачи программному прерыванию значений регистров общего назначения, индексных регистров, некоторых сегментных регистров и регистра флагов. После вызова функции intr поля структуры REGPACK заполняются значениями, которые имели регистры после вызова команды INT.

Ниже представлен пример программы, которая выводит на экран текстовое сообщение с использованием функции DOS 09h и функции языка C intr.

#include <dos.h>

void main()

{

REGPACK regs;

char Message[] = "Hello, World!\n$";

regs.r_ax = 0x0900;

regs.r_dx = (unsigned int)&Message;

regs.r_ds = _DS;

intr(0x21, &regs);

}

При написании загрузочного кода следует учитывать, что операционная система к этому моменту еще не загружена, и можно пользоваться только функциями BIOS.

Загрузочный код представляет собой аналог COM файла, в котором отсутствуют различные заголовки и структуры данных, необходимые для загрузки программы. В начале загрузочного кода необходимо настроить стек, если программа предполагает использование команд PUSH и POP. Также необходимо настроить регистр DS на сегмент данных, который совпадает с сегментом команд. Все переменные программы должны располагаться в сегменте команд.

Загрузочный код начинается по смещению 0x003E в загрузочном секторе. Поэтому при написании программы нужно вместо директивы ORG 100h использовать директиву ORG 03Eh. К сожалению, компоновщик TLINK фирмы Borland не позволяет генерировать COM-файлы с точкой входа по смещению, отличному от 100h. В этом случае можно воспользоваться другими трансляторами и компоновщиками ассемблера для процессора Intel 8086. Поскольку загрузочный сектор считывается в память по адресу 07C00h, ссылки к переменным в программе должны учитывать это смещение. Можно было бы использовать директиву ORG 7C00h, одныко не все компоновщики ассемблера корректно обрабатывают аргументы директивы ORG большие 100h.

Ниже приведен шаблон программы на ассемблере, который может использоваться для выполнения лабораторной работы.

.186

code segment

org 03Eh

assume cs:code, ds:code

Start:

cli

xor ax, ax ; настройка стекового

mov ss, ax ; сегмента на начало памяти

mov sp, 07C00h ; установка вершины стека

mov ds, ax ; настройка сегмента данных на начало памяти

mov si, offset msg ; в SI - смещение текстового сообщения

add si, 07C00h

call OutStr ; вызов функции вывода строки

xor ax, ax

int 16h ; ожидание нажатия клавиши

int 19h ; перезагрузка компьютера

msg db 'Press any key to reboot, please!',0Dh,0Ah,0

; функция вывода текстовой ASCIIZ-строки

; SI - адрес строки

OutStr proc

cld

pusha ; сохранение значений регистров

next: lodsb ; загрузка очередного байта сообщения

or al, al ; если он равен нулю,

je short exit ; переход на возврат из процедуры

mov ah, 0Eh ; в AH - номер функции 0Eh

mov bx, 07h ; в BX - атрибут выводимого символа

; INT 10h, функция 0Eh - вывод символа в режиме телетайпа

int 10h

jmp next ; цикл по строке сообщения

exit: popa ; восстановление значений регистров

ret

OutStr endp

code ends

end Start

Для отладки программы можно сначала использовать директиву ORG 100h и отключить настройку стекового сегмента и сегмента данных. В этом случае программа отлаживается как обычно, при помощи отладчика Turbo Debugger. Не стоит, однако, вызывать в отладчике команду INT 19h, которая приведет к перезагрузке компьютера.

2.4. Контрольные вопросы

  1. Для чего служит загрузочный сектор?

  2. Какие данные хранятся в блоках параметров BIOS?

  3. Для чего служит главная загрузочная запись?

  4. Какая информация содержится в таблице разделов?

  5. Поясните, каким образом организуются логические диски в расширенном разделе.

2.5. Варианты заданий на лабораторную работу

  1. Написать программу, выводящую на экран текущее время и дату с обновлением через каждую секунду. Вывод должен осуществляться в одну и ту же позицию экрана.

  2. Написать программу, выводящую на экран следующие параметры блока параметров BIOS: количество секторов на дорожке, количество сторон (головок) и количество байт в секторе.

  3. Написать программу, выполняющую сложение двух целых чисел. Числа вводятся с клавиатуры.

  4. Написать программу, выполняющую поиск подстроки в строке. Строка и данные для поиска вводятся с клавиатуры.

  5. Написать программу, выводящую на экран содержимое загрузочного сектора в виде шестнадцатеричного дампа памяти.

  6. Написать программу, устанавливающую новое время. Время вводится с клавиатуры в формате чч:мм:сс. Предусмотреть проверку корректности входных данных.

  7. Написать программу, выводящую на экран имена файлов корневого каталога.

  8. Написать программу, рисующую на экране прямоугольник 100x100.

  9. Написать программу, выводящую на экран содержимое элементов таблицы векторов прерываний в формате сегмент:смещение.

  10. Написать программу, определяющую, является ли введенная строка палиндромом. Ввод строки осуществляется с клавиатуры.

  11. Написать программу, генерирующую звуковые сигналы различной тональности при нажатии различных клавиш.

  12. Написать программу, вычисляющую и выводящую на экран первые 10 простых чисел.

  13. Написать программу, переставляющую в обратном порядке слова введенной строки. Строка должна вводиться с клавиатуры.

  14. Написать программу, выводящую на экран двоичное представление введенного десятичного числа. Число должно вводиться с клавиатуры.

  15. Написать программу, выполняющую обработку команд, вводимых оператором. Команда ‘time’ – вывод текущего времени. Команда ‘reboot’ – перезагрузка компьютера. Команды вводятся с клавиатуры.



Скачать документ

Похожие документы:

  1. Том 2 документации об аукционе для проведения открытого аукциона для субъектов малого предпринимательства

    Инструкция
    ... с некоторыми операционными системами) - Вес ... Методическое пособие по ... пособием и предназначена для использования на учебных занятиях по химии, и другим общеобразовательным дисциплинам ... выполнения лабораторных работ по биологии» ... (лота), указанным в томе ...
  2. Ищите тесты не только по названиям

    Тесты
    ... методического) уровня системы ... работой всех устройств ПК и процессом выполнения прикладных программ, называется 3. Операционные системы ... дисциплины ... , лабораторное оборудование ... пособия по ... по достижении: 108. Выполнение налогоплательщиком письменных указаний ...
  3. Постановление исполнительного комитета г казани 30 06 2009 №5258 об утверждении стандарта муниципальной услуги «предоставление общедоступного бесплатного начального общего основного общего среднего (полного) общего образования по основным

    Программа
    ... Д Д - 1.4 Методическое пособие для учителя К К - 1.5 Рабочие тетради по физике Д Д - 1.6 Хрестоматия по физике К** К** По возможности 1.7 Комплекты пособий для выполнения лабораторных ...
  4. III ПРИРОДНЫЙ ЗАКОН ПИТАНИЯ ЧЕЛОВЕКА

    Закон
    ... операционный ... указанный срок подлежат увольнению по профессиональной непригодности. Обязательно выполнение ... системы и системы обмена веществ, нарушается работа всей пищеварительной системы ... наглядные пособия, ... “Дисциплина” ... методически ... У лабораторных мышей ...
  5. Методическое пособие по по дисциплине «теоретические основы автоматизированного управления» и указания к выполнению лабораторных работ

    Методическое пособие
    ... Методическое пособие по по дисциплине «Теоретические основы автоматизированного управления» и указания к выполнению лабораторных работ Номер специальности – 230102 «Автоматизированные системы ... и под различными операционными системами. При этом ...

Другие похожие документы..