Chinaunix首页 | 论坛 | 博客
  • 博客访问: 519796
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-21 13:40
个人简介

技术改变命运

文章分类

全部博文(184)

文章存档

2020年(16)

2017年(12)

2016年(156)

我的朋友

分类: LINUX

2016-06-03 19:12:31

    频繁的请求和释放不同大小的一组连续页框,必然导致在已分配的块内分散了许多小块的空闲页框。由此带来的问题是,即使有足够的页框可以满足要求,但要分配一个大块的连续页框无法满足。(内存外碎片问题)   
    linux的伙伴算法把所以的空闲页面分为10个块链表,每个链表中的一个块含有2的幂次方个页面,我们把这种快叫做“页块”或简称“块”。例如:第0个链表中快的大小都是2^0(1个页面),第一个链表中块的大小都为2^1(2个页面), 第9个链表中块的大小都为2^9(512个页面)。
        伙伴系统所采用的数据结构是一个叫做free_area的数组,其示意图如图所示:
            
        struct free_area_struct{
                        struct page *next;
                        struct page *prev;    
                        struct int *map; 
        }free_arean[10];
          数组free_area的每项包含3个域:next,prev和map。指针next,prev用于将物理页面结构struct page链接成一个双向链表,其中的数字表示内存块的其实页面号。例如:图中大小为4的页块有俩块,一块从第4页开始,一块从第56页开始。nr_free表示2^k的空闲页块的个数。例如图中大小为1(2^0)的页块有1个,为4的页块有两个。其中的map域指向一个位图。
阅读(1489) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~