zone_watermark_ok()的理解

来源:互联网 发布:java种方法覆盖super 编辑:程序博客网 时间:2024/06/05 17:38
/* * Return 1 if free pages are above 'mark'. This takes into account the order * of the allocation. */int zone_watermark_ok(struct zone *z, int order, unsigned long mark,      int classzone_idx, int alloc_flags){/* free_pages my go negative - that's OK */long min = mark;   //zone结构体里定义
<span style="white-space:pre"></span>/* <span style="font-family: Arial, Helvetica, sans-serif;">zone_nr_free_pages获取剩余页帧数 减去需要分配的页帧数 </span><span style="font-family: Arial, Helvetica, sans-serif;">*/</span>long free_pages = zone_nr_free_pages(z) - (1 << order) + 1;int o;if (alloc_flags & ALLOC_HIGH)min -= min / 2;if (alloc_flags & ALLOC_HARDER)min -= min / 4;if (free_pages <= min + z->lowmem_reserve[classzone_idx])return 0;for (o = 0; o < order; o++) {/* At the next order, this order's pages become unavailable */
<span style="white-space:pre"></span>/* 将<order 比如order = 3, 则 0 1 2的buddy算法里的都不符合,减掉 */free_pages -= z->free_area[o].nr_free << o;/* Require fewer higher order pages to be free */min >>= 1;if (free_pages <= min)return 0;}return 1;}


                                             
0 0
原创粉丝点击