标签:内存分配器 展开 zone区域 完成 页面 img page cpu 关联
本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理。
本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础、虚拟地址空间的管理、物理地址空间的管理.
本文将主要以X86架构为例来介绍伙伴算法和slab分配
Linux的伙伴算法将所有的空闲页面分成MAX_ORDER+1(MAX_ORDER默认大小为11)个块链表
每个链表中的一个节点指向一个含有2的幂次个页面的块,即页块或简称块
大小相同、物理地址连续的两个页块称为伙伴
首先在大小满足要求的块链表中查找是否有空闲块,若有则直接分配,否则在更大的块的块链表中查找;
逆过程是块的释放,此时会把满足伙伴关系的块合并,组成一个更大的块,并插入到相应的块链表中
每个页框对应一个struct page实例
每个内存区关联一个struct zone区域,该结构中用free_area数组对空闲页框进行管理
图 伙伴算法结构实例图
基于伙伴算法、每CPU高速缓存和slab高速缓存形成两种内存分配器
处理对连续页框的内存分配请求。分区页框分配器分为两大部分:前端的管理区分配器和伙伴系统
管理区分配器负责搜索一个能满足请求页框大小的管理区;
在每个管理区中,具体的页框分配工作由伙伴系统负责,为了达到更好的性能,单个页框的申请直接由每cpu页框高速缓存完成
图 分区页框分配器示例图
将各种分配对象分区放进高速缓存,即每个高速缓存都对同类型分配对象的一种“储备”
标签:内存分配器 展开 zone区域 完成 页面 img page cpu 关联
原文地址:http://www.cnblogs.com/smartjourneys/p/7208894.html