内核模式——物理地址还是虚拟地址?

Kernel Mode - Physical Addresses or Virtual Addresses?

在内核模式下运行的代码使用物理地址还是虚拟地址?

如果是虚拟的,它使用了哪些转换表?与用户模式表相比,它们的更新方式是否不同?

谢谢

答案是内核模式代码混合使用虚拟、逻辑和物理寻址。每个使用多少取决于底层硬件和操作系统。

内核中必须有一些物理寻址。否则,在不知道要映射到的物理地址的情况下,如何设置逻辑寻址将是先有鸡还是先有蛋的问题。

理想的情况是系统只使用物理地址作为系统寄存器。

logical/virtual 地址区分也很重要。内核地址 space 的某些部分可能是可分页的(虚拟内存)。其他部分可能是不可分页的(仅限逻辑内存)。

内核模式地址转换非常依赖于硬件。一些系统使用户模式页面 tables 自己可以分页。在这样的系统中,有两个级别的地址转换(页面 table 的虚拟地址和使用页面 table 的虚拟地址)。底层硬件将特定地址范围定义为内核地址。其他系统允许系统(内核)地址 space 完全在软件中定义。在这样的系统中,内核和用户地址转换几乎是一样的。