在内核模式下运行的代码是使用物理地址还是虚拟地址?
如果它是虚拟的,它使用哪些转换表?与用户模式表相比,它们的更新方式是否不同?
谢谢
在内核模式下运行的代码是使用物理地址还是虚拟地址?
如果它是虚拟的,它使用哪些转换表?与用户模式表相比,它们的更新方式是否不同?
谢谢
答案是内核模式代码混合使用了虚拟、逻辑和物理寻址。每种使用多少取决于底层硬件和操作系统。
内核中必须有一些物理寻址。否则,将存在先有鸡还是先有蛋的问题,即如何在不知道要映射到的物理地址的情况下设置逻辑寻址。
理想的情况是系统只使用系统寄存器的物理地址。
逻辑/虚拟地址的区别也很重要。内核地址空间的某些部分可能是可分页的(虚拟内存)。其他部分可能是不可分页的(仅限逻辑内存)。
内核模式地址转换非常依赖于硬件。一些系统使用户模式页表本身可分页。在这样的系统中,有两个级别的地址转换(页表的虚拟地址和使用页表的虚拟地址)。底层硬件将特定地址范围定义为内核地址。其他系统允许系统(内核)地址空间完全在软件中定义。在这样的系统中,内核和用户地址转换几乎是相同的。