如何在 Windows 系统信息 Msinfo32 中解释 I/O 和内存?I/O 地址是否表示映射 I/O 设备寄存器的内存位置,内存中的地址又如何?如果有物理内存地址,那么它们每次都应该不同,对吗?
答案1
您在“I/O”下看到的是“地址”,但它们既不是虚拟地址也不是物理内存地址。它们位于 I/O 端口空间中。它们仅对 IN 和 OUT 等特殊指令有意义。
“内存”页面显示物理地址空间内的地址。这与 RAM 所在的地址空间相同。这些是“寄存器”和缓冲区空间的地址,它们由各种 I/O 设备和主板上的某些其他设备定义。驱动程序通过引用操作系统与这些物理地址关联的虚拟地址与这些设备通信。
符合总线地址寄存器 PCI 标准的设备的端口和内存地址均可由操作系统配置。但是,所有这些配置都是在启动时完成的,并且大多数设备在每次启动时都会使用相同的地址。由于遗留原因,一些设备被分配到众所周知的地址。一些其他设备(例如,如果您有遗留的串行和并行端口)位于 LPC 总线上。从编程上看,这看起来像 ISA,但从电气上看,它是串行总线,并且像 ISA 一样无法通过软件配置;这些设备硬连线到它们的地址。
顺便说一句,I/O 端口空间是古代架构的遗物,或者至少是具有古老根源的架构(如 x86)。大多数现代架构都没有实现任何此类东西;一切都在物理内存空间中。