【问题标题】:What happens when the kernel memory required exceeds 1 GB当需要的内核内存超过 1 GB 时会发生什么
【发布时间】:2012-09-06 02:56:00
【问题描述】:

作为 Daniel 和 Marco 的“理解 Linux 内核”课程的一部分,我试图了解 Linux 中的“内存管理”。下面是我对内核空间的理解

  1. 在 32 位机器上,每个进程都有 4GB 的虚拟地址空间。 3GB - 用户和 1GB - 内核空间。
  2. 1 GB 在进程之间共享并直接映射到 1 GB RAM。该空间用于存储内核代码、页表等。
  3. 1 GB 无法换出。虽然,它可以被释放。

我的问题是,如果进程所需的总内核空间超过 1 GB 怎么办?

【问题讨论】:

    标签: memory-management linux-kernel


    【解决方案1】:

    首先,更正一下 - 内核以 1:1 映射的(几乎)1Gb 并非由内核独占使用。只是内核最容易访问该内存。它确实保存了内核代码和静态数据。

    内核虚拟空间实际上在虚拟地址空间的顶部(内核使用的 1Gb 的顶部)有 256 Mb(这个数字是动态的),它不像内核的其余部分那样按 1:1 映射地址,而是动态映射到各个页面——要么通过vmalloc从非连续物理内存中获取虚拟连续区域,要么通过ioremap映射内存映射IO,或者通过kmap访问高于1Gb的页面。

    总结一下——当内核需要访问更多内存时(几乎)1Gb,它总是以 1:1 设置映射,它使用动态内存,就像用户空间一样。

    【讨论】:

    • 谢谢! Linux Kernel 开发人员是否有任何关于在内核用完直接映射的内核空间时切换到动态内存的文档?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2012-01-05
    • 2011-09-03
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多