Открыть сервис

Прерывание 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 →