【问题标题】:Can Kernel use virtual memory In Linux [duplicate]内核可以在Linux中使用虚拟内存[重复]
【发布时间】:2023-03-28 02:43:01
【问题描述】:

我的问题是linux内核是否可以使用虚拟内存还是总是使用固定内存?另一个问题是,如果由于一些软错误,内核内存被破坏了,那会发生什么? Linux 是否有任何机制来保护自己免受此类故障的影响?

【问题讨论】:

    标签: c linux operating-system


    【解决方案1】:

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

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

    但是你说的是软错误。在随机地址写入内核代码没有任何保护措施。有些函数会测试它们获取的参数以捕获错误,但如果您在内核模式下溢出缓冲区或堆栈,则可能会发生各种有趣的事情。

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

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

    只读属性只有在内核使用虚拟内存时才有可能

    【讨论】:

    • “某种结构中的神奇价值”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 2015-01-26
    • 2020-02-19
    • 2020-05-21
    • 1970-01-01
    • 2016-07-24
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多