Функции дискового сервиса вызываются программным прерыванием 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, ради совместимости
возможность использования прерывания 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.7, подробнее они описаны в [4, 9]. Устройства могут не поддерживать некоторые функции, о чем драйверы должны «честно сообщить» кодом возврата Olh.
Таблица 12.7. Функции традиционного дискового сервиса
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 Зная устройство современных винчестеров, здесь и далее не будем добираться до истинно физических параметров - реального номера цилиндра, головки и сектора.
- поддержка расширенных дисков (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 байт), когда для данного привода включена эмуляция.
Int 13h — поддержка дисков
Функции дискового сервиса вызываются программным прерыванием Int 13h.Функции дискового сервиса вызываются программным прерыванием Int 13h. Традиционно дисковый сервис подразделяет физическиеТакже по теме: