内存管理

整个系统的性能取决于如何有效地管理动态内存。
一、页框管理
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()函数给内核分配一个非连续内存区。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值