Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


Пакет дискового адреса.

Пакет дискового адреса.

Для обеспечения поддержки новых возможностей в набор «классических» дисковых функций Int 13h фирмой Phoenix Technologies были введены дополнительные дисковые функции (BIOS Extensions). Дополнительные функции имеют номера 41h - 49h и 4Eh.

Дополнительные функции условно разделены на три подгруппы:

- функции для доступа к диску;

- функции для блокировки доступа и смены носителей;

- функции внутреннего назначения.

Функции первой группы применяются при работе с дисками всех типов, функции второй группы — при работе со сменными носителями информации, функции третьей группы используются для внутренних нужд BIOS.

Порядок работы с этими функциями существенно отличается от принятого для стандартных функций прерывания Int 13h:

- вся адресная информация передается через буфер в оперативной памяти, а не через регистры;

- соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);

- для определения дополнительных возможностей аппаратуры (параметров) используются флаги.

Как и «классические» дисковые функции BIOS, дополнительные функции допускают использование режима линейной адресации оперативной памяти. Фундаментальной структурой данных для дополнительных функций прерывания Int I3h является так называемый «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации. Формат пакета дискового адреса описан в табл. 1.

 Таблица 1. Формат пакета дискового адреса

Смещение

Размер поля

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

00h

BYTE

Размер пакета в байтах

01h

BYTE

Зарезервировано (имеет значение 0)

02h

BYTE

Число передаваемых блоков (0-7Fh) или признак передачи большого массива данных (FFh)

03h

BYTE

Зарезервировано (имеет значение 0)

04h

DWORD

Адрес буфера данных в оперативной памяти в режиме «сегмент:смещение» или признак линейной адресации памяти (FFFF: FFFFh)

08h

QWORD

Абсолютный номер начального блока (LBA-адрес) данных на диске

10h

QWORD

64-разрядный линейный адрес буфера передачи

18h

DWORD

Число передаваемых блоков при передаче большого массива данных

1Ch

DWORD

Зарезервировано (имеет значение 0)

 

Рассмотрим назначение отдельных полей пакета дискового адреса более подробно. Байт со смещением 00h содержит размер пакета дискового адреса в байтах. Размер должен составлять 16 и более байт: если значение данного поля меньше 16, то функция завершается аварийно (устанавливается CF = 1, АН = 01h). Байт со смещением 01h зарезервирован для последующих версий стандарта и должен содержать значение 0.

Байт со смещением 02h содержит число блоков (секторов) данных, подлежащих передаче. Значение числа передаваемых блоков не должно превышать 127 (7Fh), в противном случае функция завершается аварийно (устанавливается CF = 1, АН = 01h).

Если поле содержит значение 0, то при выполнении функции передача данных не производится. Если поле содержит значение FFh, то используется 64-разрядная адресация данных: адрес буфера задается не двойным словом со смещением 04h, а квадрасловом со смещением 10h; число передаваемых блоков задается двойным словом со смещением 18h. Байт со смещением 03h зарезервирован для последующих версий стандарта и должен содержать значение 0. Двойное слово со смещением 04h содержит адрес буфера в оперативной памяти, который используется при работе с диском. Адрес должен быть представлен в формате «сегмент/смещение», то есть буфер должен находиться в пределах первого мегабайта адресного пространства процессора. Если данное поле содержит значение FFFF: FFFFh, то для обращения к буферу применяется линейный адрес, который задается квадрасловом со смещением 10h. Квадраслово со смещением 08h содержит абсолютный 64-разрядный номер начального блока (LBA-адрес) данных на диске. Если устройство поддерживает режим LBA, то данный адрес передается ему непосредственно, без каких-либо модификаций. Если устройство не может работать в режиме LBA, то производится преобразование линейного адреса в формат CHS.

Все перечисленные поля пакета дискового адреса присутствуют в стандарте с момента появления его первой версии. В новых версиях размер пакета был увеличен вдвое (32 байта вместо 16), так как возникла необходимость в поддержке 64-разрядной адресации данных, которая будет применяться в компьютерах с новыми (64-разрядными) моделями процессоров. Квадраслово со смещением 10h содержит 64-разрядный линейный адрес буфера передачи, то есть буфера в оперативной памяти, который используется при выполнении операций записи и считывания. Данное поле имеет значение только в том случае, если байт со смещением 02h содержит значение FFh или двойное слово со смещением 04h содержит значение FFFF: FFFFh. Двойное слово со смещением 18h задает число передаваемых блоков, но используется только в том случае, если байт со смещением 02h содержит значение FFh. Двойное слово со смещением ICh зарезервировано для последующих версий стандарта (должно содержать значение 0).

Пример. Прерывание Int 13h, функция 42h: расширенное чтение.

Функция осуществляет передачу секторов с заданной области диска в буфер памяти (рис. 1).

Перед вызовом прерывания требуется записать в регистры процессора следующие значения:

- в АН — значение 42h;

- в DL — номер дисковода;

- в SI — адрес пакета дискового адреса.

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

QIP Shot - Image: 2017-04-21 14:56:42 

Рис. 1. Чтение BOOT-сектора (LBA = 3F)


Лицензия