Сделай Сам Свою Работу на 5

Int 13h — поддержка дисков





Функции дискового сервиса вызываются программным прерыванием Int 13h.

Традиционно дисковый сервис подразделяет физические диски на дискеты (diskette) и фиксированные диски (fixed disk). Набор функций (табл. 7.8) для этих классов устройств несколько различается как по составу, так и по реализации. Классы различаются по диапазонам номеров физических устройств: для дискет отводят­ся номера 0-7Fh (реально только 0-3), а для фиксированных дисков — 80h-FFh.

Контроллеры дисковых интерфейсов, имеющие в своем составе дополнительные модули BIOS, перехватывают вектор Int 13h, беря на себя обслуживание своих устройств. Когда в IBM PC/XT появились жесткие диски со своим контроллером, модуль BIOS этого контроллера, инициализирующийся во время теста POST, вставал на место Int 13 h, а указатель на исходный обработчик дискового сервиса (драйвер НГМД из системной BIOS) сохранялся на месте Int 40h. Хотя поддерж­ка жестких дисков давно уже включена в системную BIOS, ради совместимости


12.8. Сервисы и прерывания BIOS______________________________________ 487

возможность использования прерывания Int 40h для вызова драйвера гибких дисков сохраняется. Интерфейс этого вызова совпадает clnt 13h,но номер устрой­ства (в регистре DL) не должен превышать 7Fh.



Кроме функций дискового сервиса (Int 13h)c дисковыми устройствами связа­ны еще и векторы, обслуживающие аппаратные прерывания от контроллера НГМД — Int 0Eh (линия IRQ 6) и от контроллера жестких дисков — Int 76h (линия IRQ 14). При наличии двухканального порта АТА второй канал обычно за­действует линию IRQ 15 (вектор 77h). В XT контроллер жестких дисков занимал линию IRQ 5 (вектор ODh). Дополнительные контроллеры дисков могут исполь­зовать и другие прерывания. Аппаратные прерывания вырабатываются контрол­лерами по завершении (нормальному и аварийному) внутренних операций. На эти прерывания BIOS не реагирует, а при инициализации их векторы направляются на программную заглушку (инструкцию IRET).

Стандартные драйверы дисковых функций BIOS (включая и расширенный сер­вис) имеют однозадачное происхождение. Во время выполнения функции значи­тельное процессорное время может затрачиваться на ожидание завершения опе­рации устройством. Драйверы многозадачного режима построены иначе: у них есть вызывающая часть, инициализирующая начало операции, и обработчик аппа­ратного прерывания от контроллера, сообщающий операционной системе о вы­полнении операции и результате.



Традиционный сервис BIOS

Традиционный дисковый сервис работает в 16-разрядном режиме процессора, все параметры вызова передаются через регистры процессора. Адрес сектора задается в системе CHS и размещен весьма специфично. Сервис вызывается программным прерыванием Int 13h, при вызове принимаются следующие соглашения:

номер функции задается в регистре АН и не должен превышать 3Fh;

логический номер диска задается в регистре DL (бит 7 = 0 — признак обращения к НГМД);

номер цилиндра (О-1023) задается в регистре СН (младшие8бит)иСЦ7:6] (стар­
шие 2 бита);

номер головки (0-255) задается в регистре DH;

номер начального сектора (1-63) задается в регистре CL [ 5 :0];

количество секторов, участвующих в операции, 8 бит — в регистре AL (0-255);

♦ указатель на начало буфера оперативной памяти для считываемых и записы­
ваемых данных (address of buffer) — в регистрах Е S: ВХ;

результат выполнения операции определяется по флагу переноса: С F = 0 —успешное выполнение операции, CF = 1 — обнаружены ошибки (код состояния возвращается в регистре АН, код завершения последней операции с дискетами хранится по адресу 40:4lh, с жесткими дисками — 40:74h);

таблица параметров диска для дискет (DPT) задана указателем в памяти по
адресу 0:78h, для жестких дисков (HDPT) — 0:104h или 0:118h.



Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера


Список функций традиционного сервиса приведен в табл. 12.7, подробнее они описаны в [4, 9]. Устройства могут не поддерживать некоторые функции, о чем драйверы должны «честно сообщить» кодом возврата Olh.



Таблица 12.7.Функции традиционного дискового сервиса



12.8. Сервисы и прерывания BIOS

1 Только для фиксированных дисков.

2 Только для дискет и других сменных носителей.

3 Назначение отличается от обычного.

Формально традиционный сервис позволяет работать с дисками, имеющими до 1024 х 256 х 63 = 16 515 072 секторов (около 8,4 Гбайт). Ряд операционных сис­тем имеет ошибку, не позволяющую использовать полный объем, допустимый дан­ным сервисом. Для дисков объемом более 15 481 935 секторов следует пользо­ваться только функциями расширенного сервиса (см. ниже). Однако при работе с устройствами АТА имеется еще и барьер в 528 Мбайт. Дело в том, что контрол­лер жесткого диска АТА, на который ориентированы драйверы Int 13h, имеет только 4-битный регистр номера головки (а в BIOS — 6 бит). Правда, этот же кон­троллер способен принимать 16-битный номер цилиндра (в BIOS — 10 бит). По­нятно, что непосредственно без искажений через эти два фильтра (формат вызова и формат регистров контроллера) может пройти только вызов с самыми жестки­ми ограничениями по каждой координате. Тогда ограничение, полученное тем же перемножением диапазонов координат, получается около 528 миллионов байт:


(210 = 1024 цилиндра) х (24 - 528 482 304 байт.


16 головок) х (26 - 1 = 63 сектора) х 512 байт =


Для преодоления 528-мегабайтного барьера дисков АТА, не трогая программного интерфейса, в BIOS ввели расширение традиционного дискового сервиса. Интер-


490______ Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

фейс АТА в трехмерной геометрии позволяет реализовать довольно большой (но уже не запредельный) объем диска:

(216 = 65 536 цилиндров) х (24 = 16 головок) х (28 - 1 = 255 сектора) х 512 байт = - 136,9 Гбайт.

Чтобы достичь хотя бы интерфейсного ограничения BIOS (8,4 Гбайт), стали при­менять трансляцию параметров вызова функций Int 13h, которые будем теперь называть логическими, в физические* параметры, передаваемые контроллерам АТА-дисков. В функции, которая сообщает параметры диска (функция 8), производит­ся обратная трансляция, так что на стороне вызова программного интерфейса Int 13h присутствуют только логические параметры. Естественно, логический объем диска не может превышать физического: (С х Н х S)ЛОГ ≤(С х Н х 8)ФИЗ-

Подробнее о преодолении барьеров и способах трансляции (LBA, Large Disk, ЕСН5)см.в[1,4,9]

Расширенный сервис BIOS

Чтобы получить возможность работы через BIOS с дисками объема более 8,4 Гбайт, потребовалось ввести новые функции дискового сервиса.

Расширенный дисковый сервис BIOS, Enhanced Disk Drive Services (EDD), продви­гаемый фирмой Phoenix Technologies LTD, реализуется многими разработчиками BIOS и устройств массовой памяти. Он позволяет работать с устройствами, име­ющими объем до 264 секторов, эффективно используя архитектуру процессоров IA-32 и IA-64. Сервис оперирует линейным логическим адресом сектора (LBA). Вместо традиционных таблиц параметров дисков в нем используются новые, да­ющие исчерпывающую информацию об устройствах, их физической организации и интерфейсе. Устройства могут иметь сменные носители и сами быть съемны­ми в процессе работы компьютера (например, подключенные к шине USB или IEEE1394), так что понятие «сменяемость носителя» несколько размывается. Такие устройства должны поддерживать механизм уведомления о смене носите­ля и программное блокирование смены носителя. По прогнозам емкости данного интерфейса должно хватить на 15-20 лет.

Расширения BIOS Int 13h используют ОС Windows 95, Windows 98, Windows 2000. Правда, это использование ограничено лишь начальной загрузкой и процессом установки (FDISK, FORMAT), поскольку в регулярной работе применяются соб­ственные 32-разрядные драйверы. Расширения BIOS Int 13h не используют DOS (все версии), Windows 3. lx, Windows NT, Novell NetWare, OS/2 Warp, Linux, Unix. В настоящее время определены три набора функций:

♦ доступ к фиксированным дискам (fixed disk access subset) — функции 41-44h,47h и 48h;

♦ блокировка и смена носителя (device locking and ej ecting subset) — функции 41 h,45h, 46h, 48h и 49h;

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


12.8. Сервисы и прерывания BIOS ___________________________ 491

♦ поддержка расширенных дисков (enhanced disk drive (EDD) support subset) —функции 41h и 48h.

Расширенный сервис, как и традиционный, вызывается программным прерыванием I n t 13 h с номерами функций свыше 3Fh (регистр АН); номер устройства (регистр DL) допустим в диапазоне 80h-FFh. Основные параметры вызова — начальный адрес блока, число секторов для передачи и адрес буфера — передаются через адресный пакет (device address packet). Формат пакета в сравнении с передачей параметров традиционного сервиса через регистры процессора довольно просторный.

Поскольку расширение BIOS может и отсутствовать, имеется функция проверки его наличия (номер 41h). Расширение может действовать избирательно (не для всех устройств), так что проверку надо производить для конкретного устройства, интересующего программу. Проверка дает номер версии расширения и карту под­держиваемых наборов функций. Функции расширенного чтения, записи, верифи­кации и поиска (42h, 43h, 44h и 47h) по смыслу не отличаются от их аналогов из традиционного сервиса. Для работы со сменными носителями введены функции отпирания/запирания, извлечения и проверки факта смены носителя (45h, 46h и 49h). От идеологии традиционного сервиса сильно отличается функция получе­ния параметров устройства (48h). Она возвращает в ОЗУ буфер с набором пара­метров и детальным описанием устройства, позволяющим ОС и приложениям работать с ним, минуя BIOS. Функция установка аппаратной конфигурации (4Eh) позволяет управлять режимом передачи (РЮ, DMA), а также предварительной выборкой (поиском).

Для эмуляции дисков на загружаемых CD-ROM к сервисам BIOS Int 13h добав­ляется несколько новых функций:

начать/завершить эмуляцию диска (4Ah/4Bh), начать эмуляцию диска и вы­
полнить загрузку
(4Ch);

прочитать секторы загрузочного каталога (4Dh); функции 41-48h позволяют обращаться к любым логическим секторам CD-ROM (в режиме LBA с разме­ром сектора 2048 байт), когда для данного привода включена эмуляция.

Подробнее расширенный сервис рассмотрен в [4].

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.