当所需的内核内存超过1 GB时会发生什么

Che*_*ath 2 memory-management linux-kernel

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

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

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

gby*_*gby 5

首先,更正-内核仅以1:1映射内核的(几乎)1Gb。只是内核最容易访问该内存。它确实包含内核代码和静态数据。

内核虚拟空间实际上在虚拟地址空间的顶部(内核使用的1Gb的顶部)有大约256 Mb(数字是动态的),它没有像其他内核线性地址一样以1:1的比例映射,但是而是动态地映射到各个页面-通过vmalloc从非连续物理内存中获取虚拟连续区域,或者通过ioremap映射内存映射的IO或通过kmap访问大于1Gb的页面。

综上所述-当内核需要访问更多的内存时,(几乎)1Gb总是以1:1设置映射,它像用户空间一样使用动态内存。