Что касается команд INTh, на которые вы ссылаетесь (см. « Прерывания BIOS» ), вы правы, что это использовалось для того, чтобы ОС получала доступ к низкоуровневому оборудованию. На современном компьютере эти вызовы (если они выполняются) часто оказываются в CSM (модуль поддержки совместимости, по крайней мере, на языке AMI), который может обрабатывать эти запросы. В случае, скажем, вызова видео BIOS, который будет выполнять код в видео BIOS, если он присутствует. Я работал с Intel IGP в качестве разработчика BIOS, и как часть окончательного образа у нас был инструмент от Intel, в котором мы выпекаем их видео BIOS в виде большого двоичного объекта.
Аналогично, BIOS может реализовывать «эмулированные» версии вызовов для чтения / установки RTC. Современная ОС просто не будет выполнять все эти устаревшие обработчики, поскольку ей не нужно полагаться на BIOS для такой поддержки - например, может существовать драйвер ядра, который знает, как напрямую общаться с вашим PCH, чтобы связываться с Настройки RTC.
Как вы можете себе представить, это очень, очень медленно и больше не используется современным программным обеспечением. Вместо этого ОС владеет оборудованием, необходимым для обеспечения уровня абстракции, который позволяет графическим приложениям использовать драйверы графического процессора для выполнения этих задач; это устройство, конечно, обычно PCIe от ПО POV и отображается в памяти.
Аналогично, если вы посмотрите на стек хранения Linux ниже, то увидите, что базовые диски ядра заботятся об аппаратном взаимодействии без использования BIOS - весь исполняемый код взят из вашего ядра.
Теперь, что касается разных карт адресов ввода-вывода и тому подобного, напомним, что x86 имеет как адресное пространство ввода-вывода, так и адресное пространство памяти. Если вы вспомните Plug-and-Play, при загрузке ваш BIOS будет проходить и перечислять дерево PCI-устройств, которое для современных систем в основном охватывает все ваши периферийные устройства, по крайней мере, из POV SW (т.е. контроллер DRAM находится на Шина PCIe 0, ваши USB-контроллеры являются устройствами PCI от SW POV и т. Д.). Используя BAR (регистры базовых адресов), BIOS знает, сколько памяти и какого типа требуется целевому устройству, и сделает все возможное, чтобы удовлетворить запрос.
Окончательное сопоставление передается операционной системе на хранение, и она может принять это во внимание или выполнить свою собственную фазу перечисления. Например, в Linux есть «причуды», которые вы можете применить к данным идентификаторам устройств PCI до загрузки ОС, и вы можете вспомнить параметры загрузки ядра, которые могут влиять на то, сколько памяти они выделяют, какие IRQ они заканчивают и т. Д. ,