我的问题是Linux内核是否可以使用虚拟内存,还是总是使用固定内存?另一个问题是,如果由于某些软错误,内核内存已损坏,会发生什么呢? Linux是否有任何机制来保护自己免受此类错误的侵害?
答案 0 :(得分:3)
内核使用虚拟地址。分配的内存,函数指针等...都是虚拟地址。您只能在与某些设备通话或进行某种DMA时操纵物理地址。
“Linux”或“Linux内核”在许多架构上运行。这些架构中的一些可以具有存储器错误检测或校正硬件。我不知道这些设备是如何支持的。 但在大多数架构中,没有针对内存损坏的保护。
但你说的是软错误。在随机地址中没有内核代码写入的保护。有些函数会测试它们捕获bug的参数,但如果你在内核模式下溢出缓冲区或堆栈,那么就会发生各种有趣的事情。
Const数据和代码通常放在只读页面中,以便可以检测到写入。 因此内核的内存保护仅限于:
只读属性是可能的,因为内核使用虚拟内存