【问题标题】:Do ring 0 programs use physical memory addresses?ring 0 程序是否使用物理内存地址?
【发布时间】:2012-10-27 23:06:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: operating-system x86 x86-64 virtual-memory computer-architecture


    【解决方案1】:

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

    【讨论】:

    • 啊,好吧。有一个优化...谢谢。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 2014-12-31
      • 2021-10-28
      • 1970-01-01
      • 2018-12-22
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多