您的位置:首页 > Web前端

内存管理API之nr_free_buffer_pages

2018-02-03 08:12 471 查看
unsigned long nr_free_buffer_pages(void)函数用于计算在ZONE_DMA和ZONE_NORMAL 可以申请
到的空闲page,也就是除去高端内存外可以申请到空闲page

其源码分析如下:
unsigned long nr_free_buffer_pages(void)
{
#这里的GFP_USER 表示可以给用户使用的页,包含空闲和可以回收的页
return nr_free_zone_pages(gfp_zone(GFP_USER));
}
static unsigned long nr_free_zone_pages(int offset)
{
struct zoneref *z;
struct zone *zone;

/* Just pick one node, since fallback list is circular */
unsigned long sum = 0;
#根据当前cpu的numa id 得到系统中整个zonelist
struct zonelist *zonelist = node_zonelist(numa_node_id(), GFP_KERNEL);
#遍历zonelist
for_each_zone_zonelist(zone, z, zonelist, offset) {
#这个zone 所有可以申请到的页
unsigned long size = zone->managed_pages;
#这里表示预留给系统最多的页
unsigned long high = high_wmark_pages(zone);
#可以申请到的页减去系统预留的页,就表示用户可以申请到的总共的页
if (size > high)
sum += size - high;
}

return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: