1

我正在设计一个内存芯片,因为这似乎是询问相关系统软件问题的最佳场所......

在现代 x86 处理器上,系统级代码(保护环 0)是否在物理内存地址上运行?64 位规格是否也一样?

(我需要知道,所以我知道系统代码的地址是否通过虚拟/分段内存子系统。)

4

2 回答 2

3

它们像任何其他代码一样运行。Ring 0 与其他 Ring 的唯一区别是 Ring 0 可以执行特权指令,从而修改内存地址空间和结构。然而,这个特权并不意味着 Ring 0 不能像任何其他代码一样使用虚拟内存。技术上可以运行 Ring 0 中的所有进程并保持相同的虚拟内存行为,假设进程不尝试修改它。也可以在没有虚拟内存地址空间的情况下运行特权较低的环进程。

于 2012-11-07T20:31:00.303 回答
1

不,它仍然是一个平面虚拟内存模型。驱动程序代码和数据可以正常调出,除非采取特定对策来锁定页面。例如,常见的蓝屏停止代码是 KERNEL_DATA_INPAGE_ERROR。

映射物理内存的典型调用是 MmAllocatePagesForMdl()

于 2012-11-07T20:35:48.810 回答