Linux kernel memory management buddy system (linux内核内存管理的伙伴算法)

注:原创作品,转载请注明。1.     Linux 内核对各个zone都有一个buddy system.2.     数据结构:mem_map:一个Struct page数组,对应系统中所有的物理内存页。而每一个zone结构里都有一个zone_mem_map域指向这个zone的第一个page 在mem_map的位置,还有一个域size代表这个区的大小,即总共有多少页。每一个zo
摘要由CSDN通过智能技术生成

注:原创作品,转载请注明。

1.     Linux 内核对各个zone都有一个buddy system.

2.     数据结构:

mem_map:一个Struct page数组,对应系统中所有的物理内存页。

而每一个zone结构里都有一个zone_mem_map域指向这个zone的第一个page mem_map的位置,还有一个域size代表这个区的大小,即总共有多少页。

每一个zone都有自己的buddy system,由下面的zone结构就可以看出。

空闲块是根据其大小做的保存,特别强调的是struct free_area  free_area[MAX_ORDER];

保存着zone中的空闲块。数组中的每一个元素都有个双链表结构。比如说     free_area中第K个元素保存着大小为2k次方大小的块的链表结构。数组中保存的是表头结构,即指向第一个2k次方大小块的第一个页面。那块的剩余的页面怎么办?不用管,因为都是按块来操作的,只需要知道块的第一个页面即可,最后一个页面就是第一个页面加上2k次方。同属于一个链表的块与块之间由每一个块的第一个页面的struct page 中的list_head lru来相互链接。

#ifndef CONFIG_FORCE_MAX_ZONEORDER

#define MAX_ORDER 11

#else

#define MAX_ORDER CONFIG_FORCE_MAX_ZONEORDER

#endif

#define MAX_ORDER_NR_PAGES (1 << (MAX_ORDER - 1))

struct free_area {

       struct list_head  free_list;

       unsigned long            nr_free;

};

struct zone {

       /* Fields commonly accessed by the page allocator */

       unsigned long            free_pages;

       unsigned long             pages_min, pages_low, pages_high;

       /*

        * We don't know if the memory that we're going to allocate will be freeable

        * or/and it will be released eventually, so to avoid totally wasting several

        * GB of ram we must reserve some of the lower zone memory (otherwise we risk

        * to run OOM on the lower zones despite there's tons of freeable ram

        * on the higher zones). This array is recalculated at runtime if the

        * sysctl_lowmem_reserve_ratio sysctl changes.

        */

       unsigned long             lowmem_reserve[MAX_NR_ZONES];

 

#ifdef CONFIG_NUMA

       struct per_cpu_pageset     *pageset[NR_CPUS];

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值