Прерывание BIOS¶
Прерывание BIOS — это механизм программного обеспечения базовой системы ввода-вывода (BIOS), позволяющий операционной системе и прикладным программам обращаться к аппаратным ресурсам компьютера через стандартизированный интерфейс. Прерывания BIOS представляют собой набор сервисных функций, реализованных в микрокоде ПЗУ BIOS, которые вызываются с помощью специальных инструкций процессора (преимущественно INT). Каждое прерывание имеет свой номер (от 0 до 255) и может включать множество подфункций, определяемых значениями регистров процессора на момент вызова.
¶История и развитие
Механизм прерываний BIOS возник на заре развития IBM PC-совместимых компьютеров в начале 1980-х годов. Первоначальная спецификация была разработана компанией IBM для компьютера IBM PC 5150 (1981 год). Основной целью было создание универсального интерфейса между операционной системой (прежде всего MS-DOS) и разнородным аппаратным обеспечением, таким как дисководы, клавиатура, дисплей и таймер.
В ранних версиях BIOS прерывания были жёстко привязаны к конкретным адресам в памяти (вектора прерываний располагались в диапазоне 0x0000:0x0000 — 0x0000:0x03FF). С развитием архитектуры, появлением расширенных стандартов (например, VESA BIOS Extensions для видеокарт) и внедрением защищённого режима работы процессора, роль прямых прерываний BIOS снизилась. В современных операционных системах (Windows, Linux) прямой вызов прерываний BIOS используется редко, в основном на этапе начальной загрузки (bootstrapping) или в среде DOS. В UEFI (Unified Extensible Firmware Interface), пришедшем на смену традиционному BIOS, механизм прерываний заменён более сложными протоколами и интерфейсами.
¶Классификация прерываний BIOS
Прерывания BIOS делятся на несколько категорий в зависимости от обслуживаемого аппаратного компонента или функции. Наиболее распространённые номера прерываний:
¶Прерывания для работы с дисплеем
- INT 10h — основное прерывание для управления видеоподсистемой. Включает подфункции для установки видеорежима (текстового или графического), вывода символов на экран, изменения цвета, перемещения курсора, скроллинга и работы с видеопамятью. В современных системах частично эмулируется для совместимости с DOS-приложениями.
¶Прерывания для работы с дисками
- INT 13h — прерывание для доступа к жёстким дискам, гибким дискам и другим блочным устройствам. Поддерживает операции чтения, записи, верификации секторов, а также функции определения геометрии диска и управления контроллером. В UEFI заменено протоколом
Block I/O. - INT 40h — прерывание для работы с флоппи-дисководом (устаревшее, редко используется).
¶Прерывания для работы с клавиатурой
- INT 16h — прерывание для обслуживания клавиатуры. Позволяет считывать нажатия клавиш, проверять буфер клавиатуры, определять состояние клавиш-модификаторов (Shift, Ctrl, Alt). В современных системах заменено драйверами USB HID.
¶Прерывания для работы с таймером и временем
- INT 1Ah — прерывание для работы с системными часами реального времени (RTC) и таймером. Позволяет считывать и устанавливать время, дату, а также управлять будильником. Используется для синхронизации времени в системе.
¶Прерывания для работы с последовательными и параллельными портами
- INT 14h — прерывание для управления последовательными портами (COM-порты). Включает функции инициализации, отправки и приёма данных.
- INT 17h — прерывание для управления параллельными портами (LPT-порты). Используется в основном для работы с принтерами.
¶Прочие прерывания
- INT 11h — прерывание для определения конфигурации оборудования (списка установленных устройств).
- INT 12h — прерывание для определения объёма оперативной памяти (в килобайтах).
- INT 15h — многофункциональное прерывание, используемое для управления питанием (APM), доступа к расширенной памяти, а также для работы с мышами и джойстиками (через подфункции).
- INT 18h — прерывание, вызываемое при ошибке загрузки (например, отсутствие загрузочного устройства). Обычно выводит сообщение «No bootable device» и переходит в интерпретатор BASIC (в старых системах).
- INT 19h — прерывание для перезагрузки системы (boot strap loader). Инициирует повторную загрузку с загрузочного устройства.
¶Устройство и механизм вызова
Каждое прерывание BIOS имеет свой вектор — адрес в таблице векторов прерываний, расположенной в начале оперативной памяти (первые 1024 байта). При вызове инструкции INT n процессор сохраняет текущее состояние (регистры CS, IP, флаги) и передаёт управление по адресу, хранящемуся в соответствующем векторе. Код обработчика прерывания (написанный на ассемблере и хранящийся в ПЗУ BIOS) выполняет необходимые действия с аппаратурой, после чего возвращает управление вызывающей программе с помощью инструкции IRET.
Для вызова конкретной подфункции внутри прерывания используются регистры процессора:
- AH — номер подфункции (часто);
- AL, BX, CX, DX — параметры подфункции (например, номер диска, номер сектора, координаты курсора);
- Результаты возвращаются в регистрах (например, в
AXилиCFдля индикации ошибки).
Пример вызова прерывания для чтения сектора с диска (на ассемблере): ``asm mov ah, 02h ; подфункция чтения mov al, 01h ; количество секторов mov ch, 00h ; номер цилиндра mov cl, 02h ; номер сектора mov dh, 00h ; номер головки mov dl, 80h ; номер диска (80h = первый жёсткий диск) mov bx, 0x7C00 ; адрес буфера в памяти int 13h ; вызов прерывания ``
¶Применение
¶В операционных системах
В классических операционных системах (MS-DOS, DR-DOS, FreeDOS) прерывания BIOS были основным способом взаимодействия с оборудованием. Загрузчик операционной системы (например, IO.SYS в MS-DOS) использовал INT 13h для чтения ядра с диска, а INT 10h — для вывода сообщений на экран. В современных ОС (Windows, Linux) прерывания BIOS используются только на этапе начальной загрузки (до загрузки драйверов), после чего управление переходит к драйверам устройств, работающим напрямую с аппаратурой.
¶В загрузчиках
Загрузчики (например, GRUB, LILO, NTLDR) активно используют INT 13h для загрузки ядра операционной системы с диска. Также INT 10h применяется для вывода текстовых сообщений в процессе загрузки (например, меню выбора операционной системы).
¶В эмуляторах и виртуализации
Эмуляторы (DOSBox, Bochs, QEMU) эмулируют прерывания BIOS для обеспечения совместимости с программами, написанными для DOS. В виртуальных машинах (VMware, VirtualBox) прерывания BIOS могут быть реализованы как программные обработчики, передающие вызовы к гипервизору.
¶В диагностике и восстановлении
Прерывания BIOS используются в утилитах для низкоуровневой диагностики оборудования (например, Victoria, MHDD) для прямого доступа к дискам в обход операционной системы. Также они применяются в загрузочных дисках (Live CD) для восстановления системы.
¶Критика и ограничения
Основные недостатки прерываний BIOS:
- Ограниченная производительность — работа через BIOS медленнее, чем прямой доступ к аппаратуре, из-за дополнительных накладных расходов на вызов и обработку.
- Отсутствие поддержки современных устройств — прерывания BIOS не поддерживают USB 3.0, NVMe, SATA AHCI (в полном объёме), графические режимы высокого разрешения (без расширений VBE).
- Ограничения по адресации — традиционные прерывания (например,
INT 13h) работают в режиме реальных адресов (Real Mode), что ограничивает доступ к памяти до 1 МБ и дискам до 8,4 ГБ (без расширений). - Несовместимость с защищённым режимом — в 32-битном и 64-битном режимах процессора (Protected Mode, Long Mode) прямой вызов прерываний BIOS невозможен без специальных механизмов (например, Virtual 8086 Mode).
¶Интересные факты
- В ранних версиях BIOS для IBM PC прерывание
INT 18hпри ошибке загрузки запускало встроенный интерпретатор языка BASIC, который был записан в ПЗУ. Это позволяло пользователю писать и запускать простые программы без загрузки операционной системы. - Прерывание
INT 13hс подфункцией08h(чтение параметров диска) использовалось для определения геометрии диска (цилиндры, головки, секторы), что было необходимо для работы с жёсткими дисками в DOS. - В некоторых BIOS (например, от Award и Phoenix) были реализованы расширения прерываний для работы с мышами (через
INT 15h), что позволяло использовать мышь в текстовом режиме без установки драйвера. - Механизм прерываний BIOS лёг в основу стандарта VESA BIOS Extensions (VBE), который позволял переключать видеорежимы с высоким разрешением и глубиной цвета в DOS-приложениях.
¶Источники
- IBM PC Technical Reference Manual, 1981.
- Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 3: System Programming Guide.
- Ralf Brown's Interrupt List (RBIL) — обширная база данных прерываний BIOS и DOS.
- «The BIOS Companion» by Phil Croucher, 2005.
- «Protected Mode Software Architecture» by Tom Shanley, 1996.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


