Драйвер жесткого диска

Страница 6

СМЕЩЕНИЕ СОДЕРЖАНИЕ РАЗМЕР

(hex)

┌───────────────────────────────────────╖

+00 │ Команда перехода на код загрузчика ║ 3 байта

├───────────────────────────────────────╢

+03 │ Имя и версия изготовителя ║ 8 байт

╓─ ├───────────────────────────────────────╢

║ +0B │ Размер сектора в байтах ║ Слово

║ ├───────────────────────────────────────╢

║ +0D │ Количество секторов в кластере ║ Байт

║ ├───────────────────────────────────────╢

║ +0E │ Количество зарезервированных секторов ║ Слово

БЛОК ║ ├───────────────────────────────────────╢

║ +10 │ Количество таблиц FAT ║ Байт

ПАРАМЕТРОВ ─╢ ├───────────────────────────────────────╢

║ +11 │ Количество элементов директория ║ Слово

BIOS ║ ├───────────────────────────────────────╢

║ +13 │ Количество логических секторов ║ Слово

║ ├───────────────────────────────────────╢

║ +15 │ Описатель носителя ║ Байт

║ ├───────────────────────────────────────╢

║ +16 │ Количество секторов в одной FAT ║ Слово

╙─ ├───────────────────────────────────────╢

+18 │ Количество секторов на дорожке ║ Слово

├───────────────────────────────────────╢

+1A │ Количество головок чтения/записи ║ Слово

├───────────────────────────────────────╢

+1C │ Количество скрытых секторов ║ Слово

╘═══════════════════════════════════════╝

Рисунок 6-7. Содержимое первых 30 байт блока начальной загрузки

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

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

Вкратце, последовательность обработки команды BUILD BPB следующая :

1. Драйвер должен прочитать блок начальной загрузки (обычно на-

ходящийся в первом логическом секторе диска - сектор #0) и

проверить его на наличие блока параметров BIOS. Если BPB об-

наружен, то переход к шагу 3, иначе переход к шагу 2.

2. Драйвер должен прочитать первый сектор FAT для того, чтобы

получить байт описателя носителя. Полагаясь на этот MDB,

драйвер должен сконструировать соответствующий BPB.

3. Если устройство поддерживает замену носителя (установлен бит

11 слова атрибутов), драйвер должен получить из корневого

директория идентификатор тома и сохранить его.

Для выполнения этого алгоритма, драйвер должен иметь буфера

для хранения копии BPB и имени тома, а также буфер, предназначен-

ный для считывания туда сектора с диска.

Мы опустили из рассмотрения параметры, которые передаются драйверу при обращении к нему с командой BUILD BPB. Игнорируйте их. Один из этих параметров - это описанный ранее описатель носителя, который в данной ситуации не имеет никакого значения, так как данная команда возвращает MS-DOS новое его значение. Второй параметр - это адрес буфера, который либо не содержит ничего су- щественного (если бит 13, NONIBM атрибут, равен 1), либо содержит копию первого сектора FAT (если бит 13 сброшен). В последнем слу- чае, т.е. если там содержится FAT, этот буфер никоим образом не должен быть модифицирован, а так как драйвер обязан иметь свой буфер, куда будет считываться блок начальной загрузки, то на бу- фер, передаваемый при вызове команды BUILD BPB можно не обращать внимания.

Напоследок представляется важным отметить, что в отличие от BPB описатель носителя не обеспечивает однозначного определения формата диска. Однако, MS-DOS версии 3.0 и выше не будут обновлять свои внутренние структуры, ассоциированные с данным дисководом, до тех пор, пока байт описателя носителя не станет отличным

от предыдущего MDB. Даже несмотря на то, что MS-DOS версии 3.0 и выше не обращают внимание на действительное значение MDB, драйвер должен вернуть новый MDB при смене формата дискеты.

Подключение драйвера

Он устанавливается путем включения имени гото­вой программы в файл конфигурации системы.