内核可以使用虚拟内存在Linux中

时间:2011-08-26 11:17:56

标签: c linux operating-system

我的问题是Linux内核是否可以使用虚拟内存,还是总是使用固定内存?另一个问题是,如果由于某些软错误,内核内存已损坏,会发生什么呢? Linux是否有任何机制来保护自己免受此类错误的侵害?

1 个答案:

答案 0 :(得分:3)

内核使用虚拟地址。分配的内存,函数指针等...都是虚拟地址。您只能在与某些设备通话或进行某种DMA时操纵物理地址。

“Linux”或“Linux内核”在许多架构上运行。这些架构中的一些可以具有存储器错误检测或校正硬件。我不知道这些设备是如何支持的。 但在大多数架构中,没有针对内存损坏的保护。

但你说的是软错误。在随机地址中没有内核代码写入的保护。有些函数会测试它们捕获bug的参数,但如果你在内核模式下溢出缓冲区或堆栈,那么就会发生各种有趣的事情。

Const数据和代码通常放在只读页面中,以便可以检测到写入。 因此内核的内存保护仅限于:

  • 在某些地方进行参数检查。
  • 某种结构中的神奇价值。
  • 只读代码和常量部分的属性。

只读属性是可能的,因为内核使用虚拟内存