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

Memory management 当所需的内核内存超过1 GB时会发生什么情况,memory-management,linux-kernel,Memory Management,Linux Kernel,我试图理解Linux中的“内存管理”,这是Daniel和Marco的“理解Linux内核”课程的一部分。下面是我对内核空间的理解 在32位机器上,每个进程都有4GB的虚拟地址空间。3GB—用户空间和1GB—内核空间 1GB在进程之间共享,并直接映射到1GB的RAM。该空间用于存储内核代码、页表等 无法调出1 GB。虽然,它可以被释放 我的问题是,如果进程所需的总内核空间超过1Gb怎么办?首先,一个修正-内核以1:1的比例映射的(几乎)1Gb不是内核独占使用的。只是内核最容易访问内存。它确实保存内

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

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

    首先,一个修正-内核以1:1的比例映射的(几乎)1Gb不是内核独占使用的。只是内核最容易访问内存。它确实保存内核代码和静态数据

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


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

    谢谢!Linux内核开发人员有没有关于在内核耗尽直接映射的内核空间时切换到动态内存的文档?