考虑一下马克·鲁西诺维奇在Windows内核方面的著作中的这段话。这是关于大页面分配机制的内容,旨在为物理内存中分配大型非换页内存块。
如果我理解正确,他的意思是分散的4K页面产生的碎片化可能会防止在物理内存中成功分配大型2M页面。但为什么呢?普通的4K物理页面很容易被重新定位,并且也可以很容易地被交换出去。换句话说,如果我们有一个物理内存区域没有被其他2M页面占用,我们总是可以“清理它”:通过将任何干扰该物理内存区域的4K页面从该物理内存区域重定位到其他位置来使其可用。也就是说,从“天真”的观点来看,只要我们有足够的空闲物理RAM,2M分配应该“总是成功”的。
http://books.google.com/books?id=CdxMRjJksScC&pg=PA194&lpg=PA194#v=onepage
操作系统长时间运行后,尝试分配大页面可能会失败,因为每个大页面所需的物理内存必须占用显著数量(参见表10-1)的物理连续小页面,并且这种物理页面范围还必须从大页面边界开始。随着系统运行,可用的物理内存可能会变得碎片化。这对于使用小页面进行分配不是问题,但可能会导致大页面分配失败。如果我理解正确,他的意思是分散的4K页面产生的碎片化可能会防止在物理内存中成功分配大型2M页面。但为什么呢?普通的4K物理页面很容易被重新定位,并且也可以很容易地被交换出去。换句话说,如果我们有一个物理内存区域没有被其他2M页面占用,我们总是可以“清理它”:通过将任何干扰该物理内存区域的4K页面从该物理内存区域重定位到其他位置来使其可用。也就是说,从“天真”的观点来看,只要我们有足够的空闲物理RAM,2M分配应该“总是成功”的。
我的逻辑有什么问题?当马克说由4K页面引起的物理内存碎片化可能会防止成功分配大页面时,他到底在说什么?
AllocateUserPhysicalPages
,它是一个不同的故事。而且这是非常奇特的一件事情,我相信如果那是他的意思,马克会提到它的。对我来说,马克谈论的是“常规”的4K页面。 - AnT stands with Russia