buddy system

分配

释放

  • __find_buddy_pfn,去寻找page对应的buddy pfn;
    • 寻找的逻辑是 异或 (1 << order); 也就是对 (1 << order) 这一个bit做取反操作(和1异或相当于是取反),其余的bit(和0异或保持原值) 不变化;
  • 由于互为buddy的page,必定是连续的,所以加上 pfn之间的偏移 就可以找到buddy page;
  • 判断page是否符合要求
    • order是否想等;
    • 对应的zone是否相同;
    • 不符合要求,直接反汇;符合要求则继续;
  • 现在符合要求:将buddy page从链表删除,
  • 计算起始pfn,起始page,order++ 继续寻找;
  • 合并完之后,走到done_merging 将page的lru插入对应order的free_list中;
posted @ 2024-11-21 10:52  _xingxing  阅读(1)  评论(0编辑  收藏  举报