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

时间:2012-09-13 03:50:17

标签: memory-management linux-kernel

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

  1. 在32位计算机上,每个进程都有4GB的虚拟地址空间。 3GB - 用户和1GB - 内核空间。
  2. 1 GB在进程间共享,并直接映射到1 GB的RAM。该空间用于存储内核代码,页表等。
  3. 1 GB无法换出。虽然,它可以被释放。
  4. 我的问题是,如果进程所需的总内核空间超过1 GB怎么办?

1 个答案:

答案 0 :(得分:4)

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

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

总而言之 - 当内核需要访问更多内存时,它(几乎)1Gb总是以1:1的方式映射,它就像用户空间一样使用动态内存。