Вызов прерывания BIOS

Интерфейс прошивки низкого уровня к оборудованию

Реализации BIOS предоставляют прерывания , которые могут вызываться операционными системами и прикладными программами для использования возможностей прошивки на IBM PC-совместимых [a] компьютерах. Традиционно вызовы BIOS в основном используются программами DOS и некоторым другим программным обеспечением, таким как загрузчики (включая, в основном исторически, относительно простое прикладное программное обеспечение, которое загружается напрямую и работает без операционной системы, особенно игровое программное обеспечение). BIOS работает в режиме реального адреса (Real Mode) процессора x86, поэтому программы, которые вызывают BIOS, либо должны также работать в реальном режиме, либо должны переключаться из защищенного режима в реальный режим перед вызовом BIOS, а затем снова переключаться обратно. По этой причине современные операционные системы , которые используют процессор в защищенном режиме или режиме Long, обычно не используют вызовы прерываний BIOS для поддержки системных функций, хотя они используют вызовы прерываний BIOS для проверки и инициализации оборудования во время загрузки . [1] Реальный режим имеет ограничение памяти в 1 МБ, современные загрузчики (например, GRUB2 , Windows Boot Manager ) используют нереальный режим или защищенный режим (и выполняют вызовы прерываний BIOS в режиме Virtual 8086 , но только для загрузки ОС) для доступа к памяти объемом до 4 ГБ. [2]

Во всех компьютерах программные инструкции управляют физическим оборудованием (экраном, диском, клавиатурой и т. д.) с момента включения питания. В ПК BIOS, предварительно загруженный в ПЗУ на материнской плате, берет на себя управление сразу после сброса ЦП, в том числе во время включения питания, при нажатии кнопки сброса оборудования или когда критический сбой программного обеспечения (тройной сбой ) заставляет схему материнской платы автоматически запускать сброс оборудования. BIOS тестирует оборудование и инициализирует его состояние; находит, загружает и запускает программу загрузки (обычно загрузчик ОС и исторический ПЗУ BASIC ); и обеспечивает базовое управление оборудованием для программного обеспечения, работающего на машине, которое обычно является операционной системой (с прикладными программами), но может быть и напрямую загружаемым отдельным программным приложением.

Со своей стороны, IBM предоставила всю информацию, необходимую для полного использования BIOS или для прямого использования оборудования и полного обхода BIOS при программировании ранних моделей IBM PC (до PS/2). С самого начала программисты могли выбирать, использовать BIOS или нет, в зависимости от оборудования и периферии. IBM настоятельно рекомендовала создание «хорошо себя ведущих» программ, которые обращались к оборудованию только через вызовы BIOS INT (и вызовы служб DOS), для поддержки совместимости программного обеспечения с текущими и будущими моделями ПК, имеющими разное периферийное оборудование, но IBM понимала, что для некоторых разработчиков программного обеспечения и клиентов оборудования возможность пользовательского программного обеспечения напрямую управлять оборудованием является обязательным требованием. Отчасти это было связано с тем, что значительная часть всех аппаратных возможностей и функций не была представлена ​​службами BIOS. В двух примерах (из многих) адаптеры MDA и CGA способны выполнять аппаратную прокрутку, а последовательный адаптер ПК способен осуществлять передачу данных с прерываниями, но IBM BIOS не поддерживает ни одну из этих полезных технических возможностей.

Сегодня BIOS в новом ПК по-прежнему поддерживает большинство, если не все, вызовы функций прерывания BIOS, определенные IBM для IBM AT (представленной в 1984 году), а также многие более новые, а также расширения некоторых оригиналов (например, расширенные диапазоны параметров), обнародованные различными другими организациями и совместными промышленными группами. Это, в сочетании с аналогичной степенью аппаратной совместимости, означает, что большинство программ, написанных для IBM AT, могут по-прежнему корректно работать на новом ПК сегодня, предполагая, что более высокая скорость выполнения приемлема (что обычно приемлемо для всех игр, использующих синхронизацию на основе ЦП). Несмотря на значительные ограничения служб, доступных через прерывания BIOS, они оказались чрезвычайно полезными и устойчивыми к технологическим изменениям.

Цель вызовов BIOS

Вызовы прерываний BIOS выполняют функции управления оборудованием или ввода-вывода, запрошенные программой, возвращают системную информацию программе или делают и то, и другое. Ключевым элементом цели вызовов BIOS является абстракция — вызовы BIOS выполняют общие определенные функции, а конкретные детали того, как эти функции выполняются на конкретном оборудовании системы, инкапсулированы в BIOS и скрыты от программы. Так, например, программе, которая хочет прочитать с жесткого диска, не нужно знать, является ли жесткий диск диском ATA , SCSI или SATA (или в более ранние времена диском ESDI или диском MFM или RLL с, возможно, контроллером Seagate ST-506 , возможно, одним из нескольких типов контроллеров Western Digital или с другим фирменным контроллером другой марки). Программе нужно только определить определенный BIOS номер диска, к которому она хочет получить доступ, и адрес сектора, который ей нужно прочитать или записать, и BIOS позаботится о переводе этого общего запроса в определенную последовательность элементарных операций, необходимых для выполнения задачи через конкретное оборудование контроллера диска, подключенное к этому диску. Программа освобождается от необходимости знать, как управлять на низком уровне каждым типом жесткого диска (или адаптером дисплея, или интерфейсом порта, или периферийным устройством часов реального времени), к которому ей может потребоваться доступ. Это одновременно упрощает программирование операционных систем и приложений и делает программы меньше, уменьшая дублирование программного кода, поскольку функциональность, включенная в BIOS, не обязательно должна быть включена в каждую программу, которая в ней нуждается; вместо этого в программы включаются относительно короткие вызовы BIOS. (В операционных системах, где BIOS не используется, вызовы служб, предоставляемые самой операционной системой, как правило, выполняют ту же функцию и цель.)

BIOS также освобождает разработчиков компьютерного оборудования (в той мере, в какой программы пишутся для использования исключительно BIOS) от необходимости поддерживать точную совместимость оборудования со старыми системами при проектировании новых систем, чтобы поддерживать совместимость с существующим программным обеспечением. Например, аппаратное обеспечение клавиатуры на IBM PCjr работает совсем не так, как аппаратное обеспечение клавиатуры на более ранних моделях IBM PC, но для программ, которые используют клавиатуру только через BIOS, эта разница почти незаметна. (В качестве хорошего примера другой стороны этой проблемы, значительная часть программ для ПК, используемых во время появления PCjr, не использовала клавиатуру исключительно через BIOS, поэтому IBM также включила аппаратные функции в PCjr, чтобы эмулировать способ работы оригинального аппаратного обеспечения клавиатуры IBM PC и IBM PC XT . Аппаратная эмуляция не является точной, поэтому не все программы, которые пытаются использовать аппаратное обеспечение клавиатуры напрямую, будут работать правильно на PCjr, но все программы, которые используют только службы клавиатуры BIOS, будут работать правильно.)

Помимо предоставления доступа к аппаратным средствам, BIOS предоставляет дополнительные возможности, которые реализованы в программном обеспечении BIOS. Например, BIOS поддерживает отдельные позиции курсора для восьми страниц текстового дисплея и обеспечивает вывод в стиле TTY с автоматическим переносом строк и интерпретацией основных управляющих символов, таких как возврат каретки и перевод строки, тогда как оборудование текстового дисплея, совместимое с CGA, имеет только один глобальный курсор дисплея и не может автоматически перемещать курсор, использовать позицию курсора для обращения к памяти дисплея (чтобы определить, какая ячейка символа будет изменена или проверена) или интерпретировать управляющие символы. В качестве другого примера интерфейс клавиатуры BIOS интерпретирует множество нажатий клавиш и комбинаций клавиш для отслеживания различных состояний shift (левый и правый Shift , Ctrl и Alt ), вызова службы печати экрана при нажатии Shift + PrtScrn , перезагрузки системы при нажатии Ctrl + Alt + Del , отслеживания состояний блокировки (Caps Lock, Num Lock и Scroll Lock) и, в машинах класса AT, управления соответствующими индикаторами состояния блокировки на клавиатуре, а также выполнения других аналогичных функций интерпретации и управления для клавиатуры. Напротив, обычные возможности стандартного оборудования клавиатуры ПК и ПК-AT ограничиваются сообщением системе каждого примитивного события нажатия или отпускания отдельной клавиши (т. е. переходом из состояния «отпущено» в состояние «нажато» или наоборот), выполнением командного сброса и самотестирования блока клавиатуры, а для клавиатур класса AT — выполнением команды от хост-системы для установки абсолютных состояний индикаторов состояния блокировки (светодиодов).

Вызов BIOS: программные прерывания BIOS

Операционные системы и другое программное обеспечение взаимодействуют с программным обеспечением BIOS для управления установленным оборудованием с помощью программных прерываний. Программное прерывание — это особая разновидность общей концепции прерывания. Прерывание — это механизм, с помощью которого ЦП может быть направлен на остановку выполнения основной программы и немедленное выполнение специальной программы, называемой процедурой обработки прерываний (ISR). После завершения ISR ЦП продолжает основную программу. На процессорах x86 при возникновении прерывания вызываемая ISR находится путем поиска ее в таблице адресов начальных точек ISR (называемых «векторами прерываний») в памяти: таблице векторов прерываний (IVT). Прерывание вызывается его номером типа от 0 до 255, а номер типа используется в качестве индекса в таблице векторов прерываний, и по этому индексу в таблице находится адрес ISR, который будет запущен в ответ на прерывание. Программное прерывание — это просто прерывание, которое вызывается программной командой; поэтому программные прерывания функционируют как подпрограммы, с тем главным отличием, что программе, которая вызывает программное прерывание, не нужно знать адрес ISR, а только его номер прерывания. Это имеет преимущества для модульности, совместимости и гибкости в конфигурации системы.

Вызовы прерываний BIOS можно рассматривать как механизм передачи сообщений между BIOS и клиентским программным обеспечением BIOS, таким как операционная система. Сообщения запрашивают данные или действие из BIOS и возвращают запрошенные данные, информацию о состоянии и/или результат запрошенного действия вызывающей стороне. Сообщения разбиты на категории, каждая из которых имеет свой собственный номер прерывания, и большинство категорий содержат подкатегории, называемые «функциями» и идентифицируемые «номерами функций». Клиент BIOS передает большую часть информации в BIOS в регистрах ЦП и получает большую часть информации обратно тем же способом, но данные, слишком большие для размещения в регистрах, такие как таблицы параметров управления или данные сектора диска для передачи на диск, передаются путем выделения буфера (т. е. некоторого пространства) в памяти и передачи адреса буфера в регистрах. (Иногда несколько адресов элементов данных в памяти могут передаваться в структуре данных в памяти, при этом адрес этой структуры передается в BIOS в регистрах.) Номер прерывания указывается как параметр инструкции программного прерывания (на языке ассемблера Intel, инструкция «INT»), а номер функции указывается в регистре AH; то есть вызывающий устанавливает регистр AH на номер желаемой функции. В общем случае службы BIOS, соответствующие каждому номеру прерывания, работают независимо друг от друга, но функции внутри одной службы прерывания обрабатываются одной и той же программой BIOS и не являются независимыми. (Этот последний пункт имеет отношение к повторному входу .)

Программное обеспечение BIOS обычно возвращает вызывающей стороне код ошибки, если не удалось, или код состояния и/или запрошенные данные, если удалось. Сами данные могут быть размером от одного бита до 65 536 байт целых секторов необработанного диска (максимум, который поместится в один сегмент памяти реального режима). BIOS расширялся и улучшался на протяжении многих лет множеством различных корпоративных структур, и, к сожалению, результатом этой эволюции стало то, что не все вызываемые функции BIOS используют согласованные соглашения для форматирования и передачи данных или для сообщения результатов. Некоторые функции BIOS сообщают подробную информацию о состоянии, в то время как другие могут даже не сообщать об успехе или неудаче, а просто молча возвращаться, оставляя вызывающую сторону предполагать успех (или проверять результат каким-либо другим способом). Иногда также может быть сложно определить, поддерживается ли определенный вызов функции BIOS BIOS на определенном компьютере или каковы ограничения параметров вызова на этом компьютере. (Для некоторых недопустимых номеров функций или допустимых номеров функций с недопустимыми значениями ключевых параметров — особенно в ранней версии BIOS IBM — BIOS может ничего не сделать и вернуться без кода ошибки; тогда [неудобная, но неизбежная] ответственность вызывающей стороны заключается либо в том, чтобы избежать этого случая, не выполняя такие вызовы, либо в том, чтобы положительно проверить ожидаемый эффект вызова, а не предполагать, что вызов был эффективным. Поскольку BIOS значительно эволюционировал на протяжении своей истории, функция, которая допустима в одной версии BIOS от определенного поставщика, может быть недопустимой в более ранней или отличающейся версии BIOS от того же поставщика или в версии BIOS — любого относительного возраста — от другого поставщика.)

Поскольку вызовы прерываний BIOS используют передачу параметров на основе регистров ЦП, вызовы ориентированы на выполнение из языка ассемблера и не могут быть выполнены напрямую из большинства языков высокого уровня (HLL). Однако язык высокого уровня может предоставлять библиотеку процедур-оболочек, которые транслируют параметры из формы (обычно стековой), используемой языком высокого уровня, в форму на основе регистров, требуемую BIOS, а затем обратно в соглашение о вызовах HLL после возврата BIOS. В некоторых вариантах C вызовы BIOS могут выполняться с использованием встроенного языка ассемблера в модуле C. (Поддержка встроенного языка ассемблера не является частью стандарта ANSI C, но является расширением языка; поэтому модули C, использующие встроенный язык ассемблера, менее переносимы, чем чистые модули стандарта ANSI C.)

Вызов прерывания

Вызов прерывания может быть выполнен с помощью инструкции языка ассемблера INT x86 . Например, чтобы вывести символ на экран с помощью прерывания BIOS 0x10, можно выполнить следующие инструкции языка ассемблера x86:

 mov ah , 0x0e ; номер функции = 0Eh : Отображение символа mov al , '!' ; AL = код символа для отображения int 0x10 ; вызов INT 10h, видеослужба BIOS          

Таблица прерываний

Список общих классов прерываний BIOS можно найти ниже. Некоторые BIOS (особенно старые) не реализуют все эти классы прерываний.

BIOS также использует некоторые прерывания для передачи прерываний аппаратных событий программам, которые решают получать их или направлять сообщения для собственного использования.

Вектор прерыванияОписание
05hВыполняется при нажатии Shift- Print screenBOUND , а также при обнаружении инструкцией связанного сбоя.
08hЭто прерывание часов реального времени. Оно срабатывает 18,2 раза в секунду. BIOS увеличивает счетчик времени суток во время этого прерывания.
09hЭто прерывание клавиатуры. Обычно оно срабатывает при нажатии клавиши на клавиатуре.
10hВидео услуги
AHОписание
00hУстановить видеорежим
01hУстановить форму курсора
02hУстановить позицию курсора
03hПолучить позицию и форму курсора
04hПолучить положение светового пера
05hУстановить отображаемую страницу
06hОчистить/прокрутить экран вверх
07hОчистить/прокрутить экран вниз
08hПрочитать символ и атрибут под курсором
09hЗапись символа и атрибута в позиции курсора
0AhНаписать символ под курсором
0BhУстановить цвет границы
0ChНаписать графический пиксель
0DhЧтение графических пикселей
0EhНаписать символ в режиме TTY
0FhПолучить видеорежим
10hУстановить регистры палитры (EGA, VGA, SVGA)
11hГенератор символов (EGA, VGA, SVGA)
12hАльтернативные функции выбора (EGA, VGA, SVGA)
13hНаписать строку
1AhПолучить или установить код комбинации дисплея (VGA, SVGA)
1BhПолучить информацию о функциональности (VGA, SVGA)
1ChСохранение или восстановление состояния видео (VGA, SVGA)
4FhФункции расширения VESA BIOS (SVGA)
11hВозвращает список оборудования
12hВернуть обычный размер памяти
13hНизкоуровневые дисковые службы
AHОписание
00hСброс настроек дисков
01hПроверить состояние диска
02hЧитать секторы
03hЗапись секторов
04hПроверить секторы
05hФорматировать трек
08hПолучить параметры привода
09hИнициализация фиксированных параметров привода
0ChПерейти к указанному треку
0DhСброс контроллера фиксированного диска
15hПолучить тип привода
16hПолучить статус изменения носителя на дискете
17hУстановить тип диска
18hУстановить тип носителя для дисковода
41hПроверка установки расширенного диска (EDD)
42hРасширенные сектора чтения
43hРасширенные секторы записи
44hРасширенная проверка секторов
45hБлокировка/разблокировка привода
46hИзвлечь носитель
47hРасширенный поиск
48hРасширенные параметры получения диска
49hРасширенный Получить Статус Изменения Медиа
4EhРасширенная конфигурация оборудования
14hСлужбы последовательного порта
AHОписание
00hИнициализация последовательного порта
01hПередача символа
02hПолучить символ
03hСтатус
15hРазличные системные услуги
AHALОписание
00hВключите двигатель кассетного привода (только IBM PC/PCjr)
01hВыключите двигатель кассетного привода (только IBM PC/PCjr)
02hЧтение блоков данных с кассеты (только IBM PC/PCjr)
03hЗапись блоков данных на кассету (только IBM PC/PCjr)
4FhПерехват клавиатуры
83hОжидание события
84hЧтение джойстика (BIOS с 1986 года и далее)
85hВызов клавиши Sysreq
86hЖдать
87hПереместить блок
88hПолучить расширенный размер памяти
89hПереключиться в защищенный режим
C0hПолучить параметры системы
C1hПолучить расширенный сегмент области данных BIOS
C2hФункции указательного устройства
C3hФункции сторожевого таймера — только для систем PS/2
C4hВыбор программируемой опции — только для систем PS/2 шины MCA
D8hФункции системы EISA — только для шинных систем EISA
E8h01hПолучить расширенный размер памяти (более новая функция, с 1994 года). Выдает результаты для размера памяти более 64 Мб.
E8h20hЗапросить карту адресов системы. Информация, возвращаемая E820, заменяет то, что возвращается из старых интерфейсов AX=E801hи AH=88h.
16hКлавиатурные услуги
AHОписание
00hПрочитать Характер
01hСтатус чтения ввода
02hПрочитать статус переключения клавиатуры
05hСохранение нажатия клавиши в буфере клавиатуры
10hПрочитать расширенный символ
11hСтатус ввода чтения расширен
12hПрочитать расширенный статус переключения клавиатуры
17hУслуги печати
AHОписание
00hПечать символа на принтере
01hИнициализировать принтер
02hПроверить статус принтера
18hExecute Cassette BASIC : на машинах IBM до ранней линии PS/2 это прерывание запускало ROM Cassette BASIC. Клоны не имели этой функции, и разные машины/BIOS выполняли различные действия, если выполнялся INT 18h, чаще всего сообщение об ошибке, указывающее на отсутствие загрузочного диска. Современные машины пытались загрузиться из сети через это прерывание. На современных машинах это прерывание будет рассматриваться BIOS как сигнал от загрузчика о том, что он не смог выполнить свою задачу. Затем BIOS может предпринять соответствующие дальнейшие действия. [3]
19hПосле POST это прерывание используется BIOS для загрузки операционной системы. Программа может вызвать это прерывание для перезагрузки компьютера (но должна гарантировать, что аппаратные прерывания или операции DMA не приведут к зависанию или сбою системы во время повторной инициализации системы BIOS или процесса загрузки).
1AhСлужбы часов реального времени (RTC)
AHОписание
00hЧитать RTC
01hУстановить часы реального времени
02hЧтение времени RTC
03hУстановить время RTC
04hПрочитать дату RTC
05hУстановить дату RTC
06hУстановить будильник RTC
07hСброс тревоги RTC
1AhPCI Services — реализованы BIOS, поддерживающими PCI 2.0 или более позднюю версию
AXОписание
B101hПроверка установки PCI
B102hНайти PCI-устройство
B103hНайти код класса PCI
B106hОперации, специфичные для шины PCI
B108hПрочитать байт конфигурации
B109hПрочитать Конфигурацию Word
B10AhЧтение конфигурации Dword
B10BhЗапись конфигурационного байта
B10ChНаписать слово конфигурации
B10DhЗапись конфигурации Dword
B10EhПолучить информацию о процедуре IRQ
B10FhУстановить PCI IRQ
1BhОбработчик Ctrl-Break — вызывается при нажатии INT 09Ctrl- Break
1ChОбработчик тика таймера - вызываетсяINT 08
1DhНе вызывается; просто указатель на VPT (таблицу видеопараметров), содержащую данные о видеорежимах
1EhНе вызывается; просто указатель на DPT (таблицу параметров дискеты), содержащую разнообразную информацию о дисководах.
1FhНе вызывается; просто указатель на VGCT (таблицу символов видеографики), которая содержит данные для символов 80hASCIIFFh
41hУказатель адреса: FDPT = Таблица параметров фиксированного диска (1-й жесткий диск)
46hУказатель адреса: FDPT = Таблица параметров фиксированного диска (2-й жесткий диск)
4AhВызывается часами реального времени для будильника

INT 18h: выполнить BASIC

INT 18hтрадиционно переходил к реализации Cassette BASIC (предоставленной Microsoft), хранящейся в Option ROM . Этот вызов обычно вызывался, если BIOS не мог идентифицировать какие-либо загрузочные тома диска при запуске.

В то время, когда в 1981 году был выпущен оригинальный IBM PC (машина IBM типа 5150), BASIC в ПЗУ был ключевой особенностью. Современные популярные персональные компьютеры, такие как Commodore 64 и линейка Apple II, также имели Microsoft Cassette BASIC в ПЗУ (хотя Commodore переименовал свою лицензионную версию в Commodore BASIC), поэтому на значительной части своего предполагаемого рынка IBM PC нуждался в BASIC, чтобы конкурировать. Как и в этих других системах, ROM BASIC IBM PC служил примитивной бездисковой операционной системой, позволяя пользователю загружать, сохранять и запускать программы, а также писать и совершенствовать их. (Оригинальный IBM PC был также единственной моделью ПК от IBM, которая, как и два вышеупомянутых конкурента, включала аппаратное обеспечение интерфейса кассеты. Базовая модель IBM PC имела только 16 КБ ОЗУ и не имела никаких дисководов, поэтому интерфейс кассеты и BASIC в ПЗУ были необходимы для того, чтобы сделать базовую модель пригодной к использованию. IBM PC с менее чем 32 КБ ОЗУ не способен загружаться с диска. Из пяти микросхем ПЗУ по 8 КБ в оригинальном IBM PC, что в общей сложности составляет 40 КБ, четыре содержат BASIC и только одна содержит BIOS; когда установлено только 16 КБ ОЗУ, на ROM BASIC приходится 4/7 всей системной памяти.)

Со временем, когда BASIC перестал поставляться на всех ПК, это прерывание просто отображало сообщение об ошибке, указывающее на то, что загрузочный том не найден (например, «No ROM BASIC» или более пояснительные сообщения в более поздних версиях BIOS); в других версиях BIOS оно предлагало пользователю вставить загрузочный том и нажать клавишу, а затем, после того как пользователь нажимал клавишу, оно возвращалось к загрузчику (INT 19h) для повторной попытки загрузки.

Digital Rainbow 100 B использовала INT 18hсвой BIOS, который был несовместим с IBM BIOS. Turbo Pascal , Turbo C и Turbo C++ повторно использовали INT 18 для выделения памяти и подкачки. Другие программы также повторно использовали этот вектор для своих собственных целей.

BIOS-хуки

ДОС

В системах DOS IO.SYS или IBMBIO.COM перехватывают INT 13 для обнаружения смены дискеты, отслеживания вызовов форматирования, исправления ошибок границ DMA и обхода проблем в ROM BIOS IBM «01/10/84» с кодом модели 0xFC перед первым вызовом.

Обход BIOS

Многие современные операционные системы (такие как Linux и Windows ) вообще не используют вызовы прерываний BIOS после запуска, выбирая вместо этого прямое взаимодействие с оборудованием. Для этого они используют драйверы , которые либо являются частью ядра ОС , либо поставляются вместе с ОС, либо предоставляются поставщиками оборудования.

Существует несколько причин для такой практики. Наиболее существенным является то, что современные операционные системы работают с процессором в защищенном (или длинном ) режиме, тогда как код BIOS будет выполняться только в реальном режиме . Это означает, что если ОС, работающая в защищенном режиме, захочет сделать вызов BIOS, ей придется сначала переключиться в реальный режим, затем выполнить вызов и дождаться его возврата, а затем снова переключиться в защищенный режим. Это было бы ужасно медленно и неэффективно. Код, работающий в реальном режиме (включая BIOS), ограничен доступом к чуть более 1 МБ памяти из-за использования 16-битной сегментированной адресации памяти . Кроме того, BIOS, как правило, не является самым быстрым способом выполнения какой-либо конкретной задачи. Фактически, ограничения скорости BIOS сделали обычным делом даже в эпоху DOS для программ, чтобы обойти его, чтобы избежать ограничений его производительности, особенно для отображения видеографики и быстрой последовательной связи.

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

Таким образом, должно быть очевидно, что компактные операционные системы, разработанные с небольшим бюджетом, будут, как правило, активно использовать BIOS, в то время как крупные операционные системы, созданные огромными группами инженеров-программистов с большим бюджетом, чаще будут предпочитать писать собственные драйверы вместо использования BIOS — и это даже без учета проблем совместимости BIOS и защищенного режима.

Смотрите также

Примечания

  1. ^ Не все компьютеры с BIOS совместимы с IBM PC.

Ссылки

  1. ^ "Загрузка · Linux Inside". 0xax.gitbooks.io . Получено 10.11.2020 .
  2. ^ "Процесс загрузки Grub2". 21 июня 2016 г.
  3. ^ * Спецификация загрузки BIOS версии 1.01 от 11 января 1996 г. Приложение D
  • Список прерываний x86 (он же RBIL, список прерываний Ральфа Брауна)
  • Руководство пользователя встроенного BIOS
  • Руководство пользователя PhoenixBIOS 4.0
  • Технический справочник по интерфейсу IBM Personal System/2 и BIOS персонального компьютера , IBM, 1988, OCLC  20737442
  • Системный BIOS для IBM PC, совместимых и EISA компьютеров , Phoenix Technologies , 1991, ISBN 0201577607 
  • Руководство программиста по AMIBIOS , American Megatrends , 1993, ISBN 0070015619 
  • «The Programmer's PC Sourcebook» Тома Хогана, Microsoft Press, 1991 ISBN 155615321X 
Retrieved from "https://en.wikipedia.org/w/index.php?title=BIOS_interrupt_call&oldid=1236621426#INT_18h"