1

我正在設計一個內存芯片,因爲這似乎是要求相關係統軟件問題的最佳場所...響0程序使用物理內存地址嗎?

在現代x86處理器上運行系統級代碼(保護環0)物理內存地址? 對於64位規範它是一樣的嗎?

(我需要知道,所以我知道了系統代碼的地址是否經過虛擬/分段存儲器子系統或沒有。)

回答

3

它們運行的​​任何其他代碼。 Ring 0和其他Ring之間的唯一區別是Ring 0可以執行特權指令,從而修改內存地址空間和結構。然而,這個特權並不意味着Ring 0不能像其他任何代碼一樣使用虛擬內存。在技​​術上可以運行Ring 0中的所有進程並保持相同的虛擬內存行爲,假設進程不嘗試修改它。也可以運行沒有虛擬內存地址空間的權限較低的環進程。

+0

啊,好吧。有一個優化...謝謝。 – root

1

不,它仍然是一個平坦的虛擬內存模型。除非採取特定對策來鎖定頁面,否則驅動程序代碼和數據可以正常分頁。例如,常見的藍屏停止代碼是KERNEL_DATA_INPAGE_ERROR。

一個典型的映射物理內存的調用是MmAllocatePagesForMdl()