免费注册 查看新帖 |

Chinaunix

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

[内存管理] 内存分配的伙伴算法一点未能理解,求助前辈 [复制链接]

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-14 12:50 |只看该作者 |倒序浏览
  1. static inline void expand(struct zone *zone, struct page *page,
  2.         int low, int high, struct free_area *area,
  3.         int migratetype)
  4. {
  5.         unsigned long size = 1 << high;

  6.         while (high > low) {
  7.                 area--;
  8.                 high--;
  9.                 size >>= 1;
  10.                 VM_BUG_ON(bad_range(zone, &page[size]));
  11.                 list_add(&page[size].lru, &area->free_list[migratetype]);
  12.                 area->nr_free++;
  13.                 set_page_order(&page[size], high);
  14.         }
  15. }
复制代码
这个函数是内存分配的后半部分,如果分配的页框大于要分配的页框,多出来的页框分配给较小的页框链表中。
但是我不理解        list_add(&page[size].lru, &area->free_list[migratetype]);这一句中&page[size].lru是先将page[size]这个东东是什么?有类型为list_head的lru这一项?

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
2 [报告]
发表于 2015-06-14 13:09 |只看该作者
我已经明白了。谢谢

论坛徽章:
0
3 [报告]
发表于 2015-06-16 15:39 |只看该作者
九阳神功爱喝茶 发表于 2015-06-14 13:09
我已经明白了。谢谢

可以分享给大家,这样比单纯说“我知道了”会更有意义:)

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
4 [报告]
发表于 2015-06-25 10:35 |只看该作者
嗯嗯,我又想了下,其实很简单的,就在这个附件中,大家看看

论坛徽章:
0
5 [报告]
发表于 2015-08-02 20:14 |只看该作者
page是整个块的首指针,size 就是索引。也就是要拿出多少个页框去合并
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP