【问题标题】:Kernel Mode - Physical Addresses or Virtual Addresses?内核模式 - 物理地址还是虚拟地址?
【发布时间】:2016-02-09 12:01:57
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 第一个问题在这里回答:stackoverflow.com/questions/15851225/…。至于翻译表,机制是由架构决定的,所以对于用户和内核内存来说是一样的。但是,用户空间和内核空间表的 content 当然是不同的。

标签: linux linux-kernel virtual-memory kernel-mode


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 还有总线地址。
猜你喜欢
  • 2020-10-15
  • 1970-01-01
  • 2015-05-04
  • 2013-05-05
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 2019-12-06
相关资源
最近更新 更多