Как базовая ОС узнает адрес памяти каждого устройства? Как ОС работает "из коробки" на любом компьютере.
CPU знает только первый адрес для выполнения. BIOS / прошивка должна «ответить» на этот адрес для загрузки процессора.
Что касается памяти и ввода / вывода (надеюсь, вы знаете, что в x86 есть 2 пробела: память и ввод / вывод, верно?), Было много стандартов.
Первая эра ПК
В памяти была полуофициальная область, называемая BIOS DATA AREA. Он имел некоторую информацию о количестве портов COM и LPT, контроллерах дисковода, их базовых адресах ввода-вывода и так далее. ОС также использовала вызовы BIOS ( документированные прерывания) для доступа к оборудованию. Материнская плата производителя жестко закодирована, что обращается к BIOS. Некоторые устройства имели официально задокументированные адреса ввода / вывода.
Карты расширения, такие как ISA, не имели каких-либо инструментов для обнаружения, кроме BIOS плат расширения: системный биос сканировал память на наличие специальных шаблонов, чтобы найти BIOS карты расширения и запустить его. BIOS карты может быть установлен как прерыватель для «теневых» функций BIOS для загрузки по сети и т. Д.
Во многих случаях пользователь отвечал за настройку карты с помощью перемычек и предоставление информации программному обеспечению (например, BLASTER
переменная env для параметров звукового бластера и т. Д.).
Эра PnP
PnP - это пакет спецификаций по обнаружению оборудования. Были ISA PNP, COM PORT PNP, LPT PNP и т. Д. В спецификациях описывается, какое программное обеспечение следует делать, чтобы проверить, какое устройство подключено и как оно должно работать. Некоторые шины, такие как PCI, имеют встроенную функцию PNP. Программное обеспечение может перечислять все карты на PCI и запрашивать у них необходимые ресурсы, их поставщика и класс (чтобы найти драйвер) и т. Д., А затем конфигурировать их. Перечисление также возможно для USB.
«Программное обеспечение» в этом случае может быть ОС с поддержкой PNPBIOS или PNP. Таким образом, BIOS использовал эти спецификации для поиска загрузочного устройства и моста PCI Host («корень» шины PCI) и сохранил эту информацию в специальных таблицах в памяти (согласно спецификации PNPBIOS), а ОС считала их и использовала возможности PCI и USB для перечисления и включить устройства (протоколы PCI и USB задокументированы).
Эра ACPI
Таблицы ACPI заполняются производителем материнской платы и хранятся в прошивке (современная прошивка - это не « BIOS», но она может эмулировать ее).
Специальная таблица DSDT описывает любое системное устройство, включая специальные кнопки ноутбука, батарею ноутбука, вентиляторы, корневой комплекс PCI-Express и так далее.
Устройства описаны на языке AML, и у ОС должен быть свой интерпретатор. DSDT может описывать память, ввод-вывод и «методы» (также написанные на AML) для выполнения некоторых вещей, таких как «изменение яркости».
ACPI это огромная спецификация. ОС использует DSDT для заполнения своего внутреннего «дерева устройств» и, как только она получает доступ к «корневому комплексу PCI-Express» или корневому USB, она использует протоколы PCI-Express и USB для дальнейшего перечисления и настройки: карта может сообщить, что она поддерживает память диапазон A и B, и ОС настраивает его для использования «B».