如何解讀windows系統訊息Msinfo32中的I/O和Memory? I/O 位址是否代表映射 I/O 裝置暫存器的記憶體位置?如果有實體記憶體位址,那麼它們每次都應該不同,對嗎?
答案1
您在“I/O”下看到的是“位址”,但它們既不是虛擬位址,也不是實體記憶體位址。它們位於 I/O 連接埠空間。它們僅對 IN 和 OUT 等特殊指令有意義。
「記憶體」頁面顯示實體位址空間內的位址。這與 RAM 所在的位址空間相同。這些是由主機板上的各種 I/O 裝置和某些其他裝置定義的「暫存器」和緩衝區空間的位址。驅動程式透過引用作業系統與這些實體位址關聯的虛擬位址來與這些裝置進行通訊。
符合匯流排位址暫存器 PCI 標準的裝置的連接埠和記憶體位址均可由作業系統進行設定。然而,所有這些配置都是在啟動時完成的,大多數設備從一次啟動到下一次啟動最終都會處於相同的位址。由於遺留原因,一些設備被分配給眾所周知的地址。還有一些其他設備(例如傳統串行和並行端口,如果有的話)位於 LPC 總線上。從程式設計上來說,這看起來像 ISA,但從電氣角度來說,它是串行總線,並且像 ISA 一樣不能進行軟體配置;這些設備硬連線到它們的位址。
順便說一句,I/O 端口空間是古代架構的遺跡,或至少是具有古老根源的架構(如 x86)。大多數現代架構並沒有實現任何這樣的東西;一切都在實體記憶體空間。