外围设备的内存映射由芯片组定义。然而,像 linux 和 Windows 这样的现代操作系统几乎可以从每个芯片启动(如果编译为正确的架构)。据我所知,像 USB 主机这样的内存映射设备不包括在架构标准中。操作系统如何仍能启动、加载驱动程序和运行?我想必须有一些描述芯片组的规范。
表述有点不同:芯片组的识别是如何工作的,什么标准定义了芯片组和处理器之间的通信,以便它在不同的硬件上工作,内核如何知道不同外围设备的正确物理地址?
外围设备的内存映射由芯片组定义。然而,像 linux 和 Windows 这样的现代操作系统几乎可以从每个芯片启动(如果编译为正确的架构)。据我所知,像 USB 主机这样的内存映射设备不包括在架构标准中。操作系统如何仍能启动、加载驱动程序和运行?我想必须有一些描述芯片组的规范。
表述有点不同:芯片组的识别是如何工作的,什么标准定义了芯片组和处理器之间的通信,以便它在不同的硬件上工作,内核如何知道不同外围设备的正确物理地址?
开放系统通常使用设备树,它是附加硬件及其连接方式的规范。还有另一个系统,ACPI,它支持旧版 PC。任一系统都允许操作系统定位和配置所需的总线和相关外围设备。
它从来没有像那样容易 100%。例如,操作系统可以知道总线 1 上的地址 1000 上有一个 scsi 控制器;但是如果scsi驱动的代码不在加载的os镜像中,那么这个知识就没什么用了,因为它没有办法加载驱动。
ACPI 的英特尔规范试图通过将微型驱动程序实现嵌入到平台、设备本身或两者的固件中来解决此问题。由于设备不一定知道它将在哪种 cpu 上运行,因此这些迷你驱动程序是在主机操作系统需要解释器的虚拟指令集中编写的。
UEFI 提供了一种替代方法,通过更通用的机制来解决启动依赖关系,以将微型启动驱动程序用于相同目的。