Из Википедии, бесплатной энциклопедии
  (Перенаправлено из INT 13h )
Перейти к навигации Перейти к поиску

INT 13h - это сокращение для вызова прерывания BIOS 13 в шестнадцатеричном формате , 20-го вектора прерывания в компьютерной системе на базе x86 (потомки IBM PC). BIOS , как правило , устанавливает реальный режим прерывания обработчика в этом векторе , который обеспечивает посекторное жесткий диск и флоппи - диск сервисы чтения и записи с помощью головки блока цилиндров-сектор (CHS) адресацию. BIOS современных ПК также включает функции расширения INT 13h, разработанные IBM и Microsoft в 1992 году, которые предоставляют те же услуги доступа к диску с использованием 64-битной адресации LBA ; с небольшими дополнениями, они были квазистандартизированы Phoenix Technologies и другими как EDD (Enhanced Disk Drive ) расширения BIOS.

INT - это инструкция x86, которая запускает программное прерывание , а 13 hex - это номер вызываемого прерывания (в виде шестнадцатеричного значения).

Современные компьютеры поставляются с функциями BIOS INT 13h и UEFI, которые предоставляют те же услуги и многое другое, за исключением UEFI Class 3, который полностью удаляет CSM, поэтому в нем отсутствуют INT 13h и другие прерывания. Обычно драйверы UEFI используют LBA -адресацию вместо CHS-адресации.

Обзор [ править ]

В операционных системах реального режима , таких как DOS , вызов INT 13h будет переходить в код ROM-BIOS компьютера для низкоуровневых дисковых служб , которые будут выполнять операции чтения или записи диска на основе физических секторов для программы. В DOS он служит низкоуровневым интерфейсом для встроенных драйверов блочных устройств для жестких дисков и гибких дисков . Это позволяет INT 25h и INT 26h предоставлять функции абсолютного чтения / записи на диск для логических секторов драйверу файловой системы FAT в ядре DOS, который обрабатывает запросы, связанные с файлами, через функции DOS API ( INT 21h ).

В операционных системах с защищенным режимом , таких как производные от Microsoft Windows NT (например, NT4, 2000, XP и Server 2003) и Linux с функцией dosmu , ОС перехватывает вызов и передает его встроенному механизму дискового ввода-вывода операционной системы. Windows 9x и Windows для рабочих групп 3.11 также обходят процедуры BIOS при использовании 32-разрядного доступа к диску . Помимо выполнения низкоуровневого доступа к диску, вызовы INT 13h и связанные структуры данных BIOS также предоставляют информацию о типах и емкости дисков (или других DASDустройства), подключенные к системе; при загрузке ОС в защищенном режиме она может использовать эту информацию из BIOS для перечисления дискового оборудования, чтобы оно (ОС) могло загрузить и настроить соответствующие драйверы дискового ввода-вывода.

Оригинальный интерфейс BIOS INT 13h в реальном режиме поддерживает диски размером до 8 ГБ с использованием того, что обычно называется физической адресацией CHS . Это ограничение связано с аппаратным интерфейсом дискового оборудования IBM PC / XT . BIOS использовал адрес сектора головки цилиндра (CHS), указанный в вызове INT 13h, и передавал его непосредственно на аппаратный интерфейс. Меньший предел, около 504 МБ, был наложен комбинацией ограничений адресации CHS, используемых BIOS, и жестких дисков ATA, которые не похожи друг на друга. Когда пределы адресации CHS как BIOS, так и ATA объединяются (т. Е. Когда они применяются одновременно), количество 512-байтовых секторов, которые могут быть адресованы, составляет в общей сложности около 504 МБ.

Ограничение в 504 МБ было преодолено с помощью трансляции CHS , метода, с помощью которого BIOS имитировал фиктивную геометрию CHS на интерфейсе INT 13h, при этом взаимодействуя с диском ATA, используя собственную логическую геометрию CHS. (К тому времени, когда приблизился барьер в 504 МБ, диски ATA задолго до этого перестали отображать свои реальные параметры физической геометрии на внешнем интерфейсе ATA.) Трансляция позволяет BIOS, все еще использующему адресацию CHS, эффективно адресовать диски ATA большего размера. ровно до 8064 МБ, что является естественной емкостью только интерфейса BIOS CHS. (Интерфейс ATA имеет гораздо большую емкость адресации CHS, поэтому, как только "вмешательство" ограничений CHS BIOS и ATA было устранено путем адресации, значительным было только меньшее ограничение BIOS.) Трансляция CHS иногда называется логической адресацией CHS., но на самом деле это неправильное название, поскольку ко времени разработки этой BIOS адреса ATA CHS уже были логическими, а не физическими. Предел 8064 МБ возникает из-за комбинации соглашения о вызовах на основе значения регистра, используемого в интерфейсе INT 13h, и цели поддержания обратной совместимости - диктуя, что формат или размер адресов CHS, передаваемых в INT 13h, не может быть изменен для добавления дополнительных битов. в одно из полей, например, в поле Номер цилиндра. Этот предел использует 1024 цилиндра, 256 головок, 63 сектора и 512 байтовых блоков, что позволяет адресовать ровно 7,875 ГиБ (1024 * 256 * 63 * 512 байтов). Вкратце было несколько BIOS, которые предлагали несовместимые версии этого интерфейса - например,AWARD AT BIOS и AMI 386sx BIOS были расширены для обработки до 4096 цилиндров путем помещения битов 10 и 11 номера цилиндра в биты 6 и 7 регистра DH, но в конечном итоге компьютерная промышленность стандартизировала интерфейс, разработанный в Microid Research ( «MR BIOS») в 1989 году.[ необходима цитата ]

Во всех версиях MS-DOS (включая MS-DOS 7 и Windows 95 ) есть ошибка, препятствующая загрузке дисков с 256 головками (значение регистра 0xFF), поэтому многие современные BIOS предоставляют сопоставления трансляции CHS с максимум 255 (0xFE) головками. , [1] [2], таким образом уменьшая общее адресное пространство точно до 8032,5 МиБ (примерно 7,844 ГиБ). [3]

Для поддержки адресации даже больших дисков IBM и Microsoft представили интерфейс, известный как INT 13h Extensions , который позже был переиздан и немного расширен Phoenix Technologies как часть BIOS Enhanced Disk Drive Services (EDD). [4] [5] Он определяет новые функции в службе INT 13h, все из которых имеют номера функций больше 40h, которые используют 64-битную адресацию логических блоков (LBA), что позволяет адресовать до 8 ЗиБ . (Диск ATA также может поддерживать 28-битный или 48-битный LBA, что позволяет использовать до 128 ГиБ или 128 ПиБсоответственно, при условии, что размер сектора / блока составляет 512 байт). Это «пакетный» интерфейс, потому что он использует указатель на пакет информации, а не соглашение о вызовах на основе регистров исходного интерфейса INT 13h. Этот пакет представляет собой очень простую структуру данных, которая содержит версию интерфейса, размер данных и LBA. Для обеспечения обратной совместимости программного обеспечения расширенные функции реализуются вместе с исходными функциями CHS, и вызовы функций из обоих наборов могут быть смешаны, даже для одного и того же диска, с оговоркой, что функции CHS не могут достигнуть более первых 8064 МБ диск.

Некоторые драйверы кэша сбрасывают свои буферы при обнаружении обхода DOS путем прямого ввода INT 13h из приложений. Фиктивное чтение через INT 13h может использоваться как один из нескольких методов принудительной очистки кеша для неизвестных кешей (например, перед перезагрузкой). [1] [2]

BIOS AMI примерно 1990–1991 годов удаляют невыровненные буферы слов. Некоторые программы DOS и TSR блокируют включение прерывания и регистрируют, поэтому PC DOS и MS-DOS устанавливают свои собственные фильтры для предотвращения этого. [6]

Список служб INT 13h [ править ]

Если второй столбец пуст, функция может использоваться как для гибкого, так и для жесткого диска.

  • FD: только для гибких дисков.
  • HD: только для жесткого диска.
  • PS / 2: только для жесткого диска в системе PS / 2.
  • EXT: часть расширений INT 13h, которые были написаны в 1990-х годах для поддержки жестких дисков с объемом более 8 ГБ .

INT 13h AH = 00h : Сброс дисковой системы [ править ]

INT 13h AH = 01h : получить статус последней операции привода [ редактировать ]

Бит 7 = 0 для дисковода гибких дисков, бит 7 = 1 для фиксированного дисковода

INT 13h AH = 02h : чтение секторов с диска [ править ]

Замечания [ править ]

Регистр CX содержит как номер цилиндра (10 битов , возможные значения от 0 до 1023), так и номер сектора (6 битов, возможные значения от 1 до 63). Биты цилиндра и сектора пронумерованы ниже:

CX = --- CH --- --- CL ---цилиндр: 76543210 98сектор: 543210

Примеры перевода:

CX: = ((цилиндр и 255) shl 8) или ((цилиндр и 768) shr 2) или сектор;цилиндр: = ((CX и 0xFF00) shr 8) или ((CX и 0xC0) shl 2)сектор: = CX и 63;

Адресация буфера должно гарантировать , что полный буфер находится внутри данного сегмента , то есть ( BX + size_of_buffer ) <= 10000h. В противном случае прерывание может завершиться ошибкой с некоторыми версиями BIOS или оборудования.

Пример [ править ]

Предположим, вы хотите прочитать 16 секторов (= 2000h байтов ), а ваш буфер начинается с адреса памяти 4FF00h. Используя сегментацию памяти , есть разные способы вычисления значений регистров, например:

ES = сегмент = 4F00hBX = смещение = 0F00hсумма = адрес памяти = 4FF00hбыло бы хорошим выбором, потому что 0F00h + 2000h = 2F00h <= 10000hES = сегмент = 4000 чBX = смещение = FF00hсумма = адрес памяти = 4FF00hбы не быть выбор хорошо , потому что FF00H + 2000h = 11F00h> 10000h

Функция 02h прерывания 13h может читать только секторы первых 16 450 560 секторов вашего жесткого диска, для чтения секторов, превышающих предел в 8 ГБ, вы должны использовать функцию 42h из INT 13h Extensions. Другой альтернативой может быть прерывание DOS 25h, которое читает секторы внутри раздела.

INT 13h AH = 03h : Запись секторов на диск [ править ]

INT 13h AH = 04h : Проверить сектора с диска [ править ]

INT 13h AH = 05h : Форматировать дорожку [ редактировать ]

INT 13h AH = 06h : Format Track Set Bad Sector Flags [ править ]

INT 13h AH = 07h : Форматирование диска, начиная с дорожки [ редактировать ]

INT 13h AH = 08h : чтение параметров привода [ редактировать ]

Замечания [ править ]

  • Логические значения функции 08h могут / должны отличаться от физических значений CHS функции 48h.
  • Регистр результатов CX содержит значения как для цилиндров, так и для секторов / дорожек, см. Примечание к функции 02h.

INT 13h AH = 09h : Инициализация характеристик пары приводов [ редактировать ]

INT 13h AH = 0Ah: чтение длинных секторов с диска [ править ]

Единственная разница между этой функцией и функцией 02h (см. Выше) заключается в том, что функция 0Ah считывает 516 байт на сектор вместо 512. Последние 4 байта содержат код коррекции ошибок (ECC), контрольную сумму данных сектора.

INT 13h AH = 41h : Проверить наличие расширений [ править ]

INT 13h AH = 42h : расширенное чтение секторов с диска [ править ]

Как уже говорилось с int 13h AH = 02h, необходимо позаботиться о том, чтобы весь буфер находился внутри данного сегмента , т.е. (BX + size_of_buffer) <= 10000h

INT 13h AH = 43h : Расширенные секторы записи на диск [ править ]

INT 13h AH = 48h : расширенное чтение параметров привода [ редактировать ]

Замечание [ править ]

Физические значения CHS функции 48h могут / должны отличаться от логических значений функции 08h.

INT 13h AH = 4Bh: Получить тип эмуляции накопителя [ править ]

См. Также [ править ]

  • ИНТ 10H
  • Вызов прерывания BIOS
  • Сектор головки цилиндров
  • INT (инструкция x86)
  • DPMI (интерфейс защищенного режима DOS)
  • Список прерываний Ральфа Брауна
  • Спецификация расширенного диска BIOS

Ссылки [ править ]

  1. ^ a b Браун, Ральф Д. (2000-07-16). "Список прерываний Ральфа Брауна (v61 html)" . Проверено 3 ноября 2016 .
  2. ^ a b Браун, Ральф Д. (2000-07-16). «Архив списка прерываний x86 (исходный текст v61):« inter61a.zip », субфайл:« INTERRUP.B », заголовок:« B-1302 »(INT13, 02 Чтение), примечания» . Проверено 3 ноября 2016 .
  3. ^ Ограничения размера диска, ограничение 8,4 ГБ (и другие)
  4. ^ Стивенс, Кертис (1995-01-26). «Enhanced Disk Drive Specification 1.1 -DRAFT- Phoenix Technologies, см. 3.0 BIOS Extensions (требуется регистрация)» (PDF) . Проверено 3 ноября 2016 .
  5. ^ Landis, Hale (1995-02-11). «Типы BIOS, трансляция CHS, LBA и другие полезные сведения, см. BIOS Type 6, спецификация расширенного диска Phoenix. (Требуется регистрация)» (PDF) . Проверено 3 ноября 2016 .
  6. ^ ctyme.com - Список прерываний Ральфа Брауна, индексированный HTML, ДИСК - ПРОЧИТАЙТЕ СЕКТОРЫ В ПАМЯТЬ
  7. ^ a b c d e f ctyme.com - ДИСК - ПОЛУЧИТЬ ПАРАМЕТРЫ ДИСКА (ПК, XT286, CONV, PS, ESDI, SCSI)
  8. ^ ctyme.com - Расширения IBM / MS INT 13 - ПРОВЕРКА УСТАНОВКИ
  9. ^ - LBA в расширенном режиме

Внешние ссылки [ править ]

  • BIOS Interrupt 13h Расширения
  • Полный список прерываний Ральфа Брауна
  • Руководство Norton о int 13h, ah = 00h .. 1ah