Linux内核可以使用虚拟内存吗?

4

我想问一下Linux内核是否可以使用虚拟内存,还是一直使用固定内存?另外一个问题是,如果由于某些软件错误,内核内存被损坏,那么会发生什么情况?Linux有没有机制来保护自己免受这些故障的影响?

1个回答

3
内核使用虚拟地址。已分配的内存、函数指针等都是虚拟地址。只有在与某些设备通信或进行某些类型的DMA时,您才会操作物理地址。
“Linux”或“Linux内核”在许多体系结构上运行。其中一些体系结构可以具有内存错误检测或纠正硬件。我不知道这些设备如何受支持。但在大多数体系结构上,没有保护措施防止内存损坏。
但是,您正在谈论软件错误。内核代码随机写入地址时没有保护措施。一些功能测试其接收到的参数以捕获错误,但如果在内核模式下溢出缓冲区或堆栈,则可能发生各种奇怪的事情。
常量数据和代码通常放置在只读页面中,以便可以检测写入。因此,内核的内存保护仅限于:
- 某些地方的参数检查。 - 一些结构中的魔术值。 - 代码和常量部分的只读属性。
只读属性仅适用于内核使用虚拟内存的情况。

“某些结构中的魔法值”是什么意思? - MetallicPriest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接