免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1907 | 回复: 0
打印 上一主题 下一主题

[内存管理] 请教个_zone_watermark_ok的问题 [复制链接]

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-21 12:47 |只看该作者 |倒序浏览
本帖最后由 firkraag 于 2012-11-21 12:47 编辑

在_zone_watermark_ok中:
static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark,
1599                      int classzone_idx, int alloc_flags, long free_pages)
1600{
1601        /* free_pages my go negative - that's OK */
1602        long min = mark;
1603        long lowmem_reserve = z->lowmem_reserve[classzone_idx];
1604        int o;
1605
1606        free_pages -= (1 << order)- 1;///??????
1607        if (alloc_flags & ALLOC_HIGH)
1608                min -= min / 2;
1609        if (alloc_flags & ALLOC_HARDER)
1610                min -= min / 4;
1611
1612        if (free_pages <= min + lowmem_reserve)
1613                return false;
1614        for (o = 0; o < order; o++) {
1615                /* At the next order, this order's pages become unavailable */
1616                free_pages -= z->free_area[o].nr_free << o;
1617
1618                /* Require fewer higher order pages to be free */
1619                min >>= 1;
1620
1621                if (free_pages <= min)
1622                        return false;
1623        }
1624        return true;
1625}


计算free_pages时,相当于free_pages=free_pages-(1<<order)+1;多的那个"+1"(就是程序中的那个"-1")起什么作用呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP