Operating system 操作系统如何检测硬件?
操作系统是从BIOS获取此信息,还是自己扫描总线以检测系统上安装了哪些硬件。在网上到处看看,不同的消息来源说了不同的事情。一些人说BIOS检测硬件,然后将其存储在内存中,然后由操作系统读取,另一些人说操作系统扫描总线(如pci)以了解硬件 我原以为现代OSs会忽略BIOS而自己做 任何帮助都将不胜感激Operating system 操作系统如何检测硬件?,operating-system,kernel,hardware,bios,Operating System,Kernel,Hardware,Bios,操作系统是从BIOS获取此信息,还是自己扫描总线以检测系统上安装了哪些硬件。在网上到处看看,不同的消息来源说了不同的事情。一些人说BIOS检测硬件,然后将其存储在内存中,然后由操作系统读取,另一些人说操作系统扫描总线(如pci)以了解硬件 我原以为现代OSs会忽略BIOS而自己做 任何帮助都将不胜感激 谢谢。一般来说,大多数现代操作系统(Windows和Linux)将在启动序列中重新扫描检测到的硬件。事实证明,相信BIOS能够检测一切并正确设置是不可靠的 在典型的x86 PC中,有多种技术可用于
谢谢。一般来说,大多数现代操作系统(Windows和Linux)将在启动序列中重新扫描检测到的硬件。事实证明,相信BIOS能够检测一切并正确设置是不可靠的 在典型的x86 PC中,有多种技术可用于检测连接的硬件 PCI和PCI Express总线有一种称为的标准机制,您可以扫描以获取连接设备的列表。这包括安装在PCI/PCIe插槽中的设备,以及芯片组中的控制器(视频控制器、SATA等) 如果检测到IDE或SATA控制器,则OS/BIOS必须与控制器对话以获取连接的驱动器列表 如果检测到USB控制器,操作系统/BIOS将加载USB协议堆栈,然后加载连接的集线器和设备 对于“遗留”ISA设备,事情要复杂一些。即使主板上没有ISA插槽,系统中通常仍有许多“ISA”设备(串行端口、并行端口等)。这些设备通常缺乏真正标准化的自动检测方法。要检测这些设备,有两个选项:
当然,如果所有的自动检测方法都失败了,您可能会被迫手动安装驱动程序。您可以通过Windows中的“添加新硬件向导”执行此操作。(具体的过程取决于您安装的Windows版本。)我看到了很多关于系统硬件的信息,除了内存,它是cpu之外最重要的部分之一,有趣的是,它并没有真正提到。 这是公平的,因为也许有太多的事情要列举,你有点看不见森林透过树木 对于x86/64平台上的内存,您需要查询BIOS或EFI以获得内存映射。对于BIOS,这是int 0x15句柄0xe820。EFI有自己的机制提供类似的信息 这将向您显示哪些内存范围是由硬件等保留的,以便让您的操作系统知道不要使用它们。(好的,你当然也要建造那部分;D) 对于其他平台,操作系统通常会配置为固定的内存大小,就像在嵌入式平台中一样。没有BIOS供您使用,在内存上执行某种蛮力最多也不可靠。(据我所知!-在x86/64之外没有多少经验!!!) 对于CPU,您肯定希望查看MSR、控制寄存器和CPUID函数,以枚举CPU并查看其功能。例如,您可以查询是否支持64位模式,以及并非所有CPU上都支持的一些其他功能
对于其他硬件,如pci等,我建议像myron semack所说的那样,研究pci规范、pci express,以及重要的ACPI实现,这将使您能够处理硬件和电源管理。更一般一点/根据较新的标准。首先,您需要指定您正在谈论的硬件?
BIOS
至少大多数人都知道,它现在是一种吱吱作响的x86现象,即使在那时,它也远远不是唯一的游戏。@Marko谢谢,我指的是主板上使用老式BIOS的32位cpu,而不是UEFI。如果有人走进商店,买了一台装有Windows的普通PC,Windows是如何了解该PC中的硬件的。我知道,在Vista Windows使用NTDETECT查找硬件之前,我很难找到Vista和更高版本OSs的硬件,是BCD吗?