Linux内存管理系列之三-slab缓存机制

在计算机体系结构中,读写速度排序如下:CPU>CPU缓存>物理内存>物理磁盘。因此在处理物理内存时,CPU缓存往往能够起到提高速度的作用。这部分我们重点研究伙伴系统与slab机制。
一  CPU三级缓存
为了解决CPU与物理内存速度不匹配的问题,计算机系统引入了缓存,它的读写速度介于CPU与物理内存之间。主要利用程序局部性原理,采用预先读与延迟写的策略,让CPU尽可能少地访问物理内存。

目前一般采用三级缓存机制,其逻辑图如下:


一级缓存的读写速度最快,它是放在CPU内部的,二三级缓存速度比较慢放在主板上。
一般情况下,缓存的命中率能达到90%以上,这样可以大大加快CPU的访问速度。
二  伙伴系统
内存管理的关键就是如何能够分配与释放内存,而且尽量避免内存碎片。通常情况下,对待内存分配有两种方式,大对象(大的连续空间分配)、小对象(小的空间分配)。
伙伴系统主要是针对大的连续空间分配。
在常用的内存管理技术中,往往存在内部碎片与外部碎片两种无法完全利用内存的情况,其总结如下图:


内核采用伙伴系统算法来解决内部碎片的问题,该算法将内存中所有的空闲页框组成11个块链表,每个块链表大小为:1,2,4…..1024个连续页框大小,且每个块的第一个页框的物理地址是该块大小的整数倍。假设以后每次请求的内存区大小为aKB,则分配x个连续页框,x满足4x<=a<=4(x+1),(x属于1,2,4…..1024)。伙伴系统解决了外部碎片的问题,不会存在程序无法加载到内存块的情况。
因为内存存在三种不同的分区,所以对应有三种不同的伙伴系统,在struct zone中存在一个free_area数值,它用来表示该区内所有的空闲块。该数值第k各元素代表该区内大小为2^k的空闲块,同时free_area[k]中同样包含字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值