【发布时间】:2023-03-28 02:43:01
【问题描述】:
我的问题是linux内核是否可以使用虚拟内存还是总是使用固定内存?另一个问题是,如果由于一些软错误,内核内存被破坏了,那会发生什么? Linux 是否有任何机制来保护自己免受此类故障的影响?
【问题讨论】:
标签: c linux operating-system
我的问题是linux内核是否可以使用虚拟内存还是总是使用固定内存?另一个问题是,如果由于一些软错误,内核内存被破坏了,那会发生什么? Linux 是否有任何机制来保护自己免受此类故障的影响?
【问题讨论】:
标签: c linux operating-system
内核使用虚拟地址。分配的内存,函数指针等......都是虚拟地址。只有在与某些设备通话或进行某种 DMA 时,您才可以操纵物理地址。
“Linux”或“Linux 内核”在许多架构上运行。其中一些架构可以具有内存错误检测或纠正硬件。我不知道如何支持这些设备。 但在大多数架构上,没有针对内存损坏的保护。
但是你说的是软错误。在随机地址写入内核代码没有任何保护措施。有些函数会测试它们获取的参数以捕获错误,但如果您在内核模式下溢出缓冲区或堆栈,则可能会发生各种有趣的事情。
常量数据和代码通常放在只读页面中,以便可以检测到写入。 因此内核的内存保护仅限于:
只读属性只有在内核使用虚拟内存时才有可能
【讨论】: