码迷,mamicode.com
首页 > 其他好文 > 详细

内存管理

时间:2015-05-11 10:55:53      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:内存管理   内核   vmalloc   malloc   

整个系统的性能取决于如何有效地管理动态内存。
一、页框管理
1、页描述符
2、非一致内存访问(NUMA)
3、内存区(Memory Zone)
  • ISA总心啊的直接内存存取(DMA)处理器有一个严格的限制:它们只能对RAM的前16MB寻址。
  • 在具有大容量RAM的现在32位计算机中,CPU不能直接访问所有的物理内存,因为线性地址空间太小。
     Linux把内存节点的物理内存划分为3个区:
     ZONE_DMA
          包含低于16MB的内存页框
     ZONE_NORMAL
          包含高于16MB且低于896MB的内存页框
     ZONE_HIGHMEM
          包含从896MB开始高于896MB的内存页框
4、保留的页框池
     内核为原子内存分配请求保留了一个页框池,只有在内存不足时才使用。
技术分享
5、分区页框分配器
     请求和释放页框
6、高端内存页框的内核映射
(1)永久内核映射kmap() →kmap_high()→map_new_virtual()
     要想释放永久内核映射kunmap()释放由kmap()建立的永久内核映射,kunmap_2、high()释放高端内存中的映射。
(2)临时内核映射
7、伙伴系统算法
     把所有的空闲页框分组成为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512,1024个连续的页框。
(1)数据结构
(2)分配块
     __rmqueue()
(3)释放块
     __free_page_bulk()
8、每CPU页框高速缓存
     内存区为每个CPU提供了两个高速缓存:热高速缓存和冷高速缓存。
(1)通过每CPU页框高速缓存分配页框:bufferd_rmqueue()
(2)释放页框到每个CPU页框高速缓存:free_hot_page()、free_cold_page()——free_hot_cold_page()
9、管理区分配器
     释放一组页框
二、内存区管理
1、slab分配器
2、高速缓存描述符
3、slab描述符
     slab描述符可以存放在两个可能的地方:
     外部slab描述符:存放在slab外部,位于cache_sizes指向的一个不适合ISA DMA的普通高速缓存中
     内部slab描述符:存放在slab内部,或者非配给slab的第一个页框的起始位置。
4、普通和专用高速缓存
5、slab分配器与分区页框分配器的接口
6、给高速缓存分配slab
7、从高速缓存释放slab
8、对象描述符
     外部对象描述符
     内部对象描述符
9、对其内存中的对象
     对于80x86处理器,BYRES_PER_WORD宏所产生的字节为4,即以4字节大小对齐。
10、slab着色
     slab的长度=(num*osize)+ dsize + free
11、空闲Slab对象的本地高速缓存
12、分配slab对象
13、释放slab对象
14、通用对象
15、内存池
三、非连续内存区管理
1、非连续内存区的线性地址
技术分享
2、非连续内存区的描述符
3、分配非连续内存区
     vmalloc()函数给内核分配一个非连续内存区。


内存管理

标签:内存管理   内核   vmalloc   malloc   

原文地址:http://blog.csdn.net/ucan23/article/details/45640241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!