保留的页框池

来源:互联网 发布:声音训练教程软件 编辑:程序博客网 时间:2024/04/29 02:07

Motivation:有两种方法来满足内存分配请求:

  • 当有足够的空闲内存可用时,请求会被立刻满足
  • 否则,内核会回收一些内存,并将发出请求的内核控制路径阻塞,直到有内存被释放

但是当请求内存时,一些内核控制路径不能被阻塞。比如在处理中断或执行临界区的代码时的原子请求。原子请求从来不会被阻塞:如果没有足够的空闲页,则仅仅是分配失败而已。

尽管内核无法保证一个原子内存分配请求绝不失败,但是内核会采取一些措施尽量减少这种不幸事件的发生。为此,内核为原子内存分配请求引入了保留页框池,保留页框池只在内存不足的时候才使用(具体的使用方式请参见__alloc_pages_internel中的restart段的分析)。

保留内存的数量(以KB为单位)存放在min_free_kbytes变量中。它的初始值在内核初始化时设置,并取决于直接映射到内核线性地址空间的第4个GB的物理内存的数量---也就是说,取决于包含在ZONE_DMA和ZONE_NORMAL内存管理区内的页框数目:

保留池的大小 = [sqrt(16*直接映射内存)](KB) (下取整)

但是:128 <= min_free_kbytes <= 65536

ZONE_DMA和ZONE_NORMAL内存管理区将一定数量的页框贡献给保留内存,这个数目与两个管理区的相对大小成比例。

0 0
原创粉丝点击