Как ОС определяет оборудование?

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

Я бы подумал, что в современных ОС он будет игнорировать BIOS и делать это сам.

Любая помощь будет оценена по достоинству.

Спасибо.


person RJSmith92    schedule 17.09.2013    source источник
comment
Во-первых, вам нужно указать оборудование, о котором вы говорите? BIOS, по крайней мере, как известно большинству людей, теперь скрипучий феномен x86, и даже тогда это далеко не единственная игра в городе.   -  person marko    schedule 18.09.2013
comment
@Marko Спасибо, я просто имею в виду 32-битный процессор на материнской плате, использующий старомодный BIOS, а не UEFI. Если кто-то пошел в магазин и купил обычный ПК с Windows, как Windows узнает об оборудовании этого ПК.   -  person RJSmith92    schedule 18.09.2013
comment
Я понимаю, что до Vista Windows использовала NTDETECT для поиска оборудования, но я изо всех сил пытаюсь найти то, что используется для Vista и более поздних ОС, это BCD?   -  person RJSmith92    schedule 19.09.2013


Ответы (2)


Вообще говоря, большинство современных операционных систем (Windows и Linux) повторно сканируют обнаруженное оборудование как часть последовательности загрузки. Надеяться, что BIOS все обнаружит и правильно настроит, оказалось ненадежным.

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

Шины PCI и PCI Express имеют стандартный механизм под названием пространство конфигурации, которое можно просмотреть, чтобы получить список подключенные устройства. Сюда входят устройства, установленные в разъем PCI/PCIe, а также контроллер(ы) в наборе микросхем (видеоконтроллер, SATA и т. д.).

Если обнаружен контроллер IDE или SATA, ОС/BIOS должна обратиться к контроллеру, чтобы получить список подключенных дисков.

Если USB-контроллер обнаружен, ОС/BIOS загружает стек протоколов USB, а затем перечисляет подключенные концентраторы и устройства.

Для «устаревших» ISA-устройств все немного сложнее. Даже если на вашей материнской плате нет слота ISA, обычно в системе все еще есть несколько устройств «ISA» (последовательные порты, параллельные порты и т. д.). Этим устройствам обычно не хватает действительно стандартизированного метода автоматического обнаружения. Для обнаружения этих устройств есть 2 варианта:

  1. Проверьте известные адреса. Последовательные порты обычно имеют адреса 0x3F8, 0x2F8, 0x3E8, 0x2E8, поэтому прочитайте эти адреса и посмотрите, есть ли там что-то похожее на последовательный порт UART. Это далеко не идеально. У вас может быть последовательный порт с нестандартным адресом, который не сканируется. У вас также может быть устройство с непоследовательным портом по одному из этих адресов, которое плохо реагирует на зондирование. Помните, как Windows 95 и 98 часто зависали при обнаружении оборудования во время установки?

  2. ISA Plug-n-Play. Этот стандарт был популярен в течение горячей минуты, когда в пользу PCI. Вы, вероятно, не встретите много устройств, поддерживающих это. Я считаю, что ISA PnP отключен по умолчанию в Windows Vista и более поздних версиях, но я изо всех сил пытаюсь найти источник для этого прямо сейчас.

  3. Перечисление ACPI — ОС может полагаться на BIOS для описания этих устройств в коде ASL. (Смотри ниже.)

Кроме того, в системе может быть несколько устройств, не поддерживающих PnP, с полуфиксированными адресами, такими как TPM. чип, HPET или "специальные" кнопки на клавиатуре ноутбука. Для объяснения этих устройств ОС стандартным методом является использование ACPI.

Таблицы BIOS ACPI должны предоставить ОС список устройств на материнской плате. Эти таблицы написаны на языке под названием ASL (или AML для скомпилированной формы). Во время загрузки ОС считывает таблицы ACPI и перечисляет все описанные устройства. Обратите внимание, что для того, чтобы это работало, производитель материнской платы должен правильно написать свой код ASL. Это не всегда так.

И, конечно же, если все методы автоопределения вас не устраивают, вам, возможно, придется установить драйвер вручную. Вы делаете это с помощью мастера добавления нового оборудования в Windows. (Точная процедура зависит от установленной версии Windows.)

person myron-semack    schedule 18.03.2014

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

Для памяти на платформах x86/64 вам нужно будет запросить карту памяти в BIOS или EFI. для BIOS это дескриптор int 0x15 0xe820. EFI имеет собственный механизм, предоставляющий аналогичную информацию.

Это покажет вам, какие диапазоны памяти зарезервированы аппаратным обеспечением и т. Д., Чтобы ваша ОС знала, что их нужно оставить в покое. (хорошо, вы должны построить и эту часть, конечно; D)

Для других платформ часто ОС будет настроена на фиксированный размер памяти, как на встроенных платформах. Для вас нет BIOS, и выполнение своего рода перебора памяти в лучшем случае ненадежно. (насколько я знаю! - не так много опыта за пределами x86/64!!!)

Что касается ЦП, вам обязательно нужно изучить MSR, управляющие регистры и функции CPUID, чтобы перечислить ЦП и посмотреть, на что он способен. вы можете запросить, например, поддерживается ли 64-битный режим и некоторые другие функции, которые могут отсутствовать на всех процессорах.

Для другого оборудования, такого как pci и т. д., я бы порекомендовал, как сказал myron-semack, изучить спецификацию PCI, pci-express и, что важно, ACPI в качестве реализации, которая заставит вас обращаться с оборудованием и управлением питанием . немного более обобщенно / в соответствии с более новыми стандартами.

person Seb    schedule 06.11.2018