1、页、页面、页框这三个要先搞清楚
这个图里面的小框框
虚拟地址的叫页,页面
物理地址的叫做框 页框 块。
虚拟地址(页面) -------------------- 页表 ------------------- 物理地址(页框)
页和页面是一个东西(一般是4K)
一个4G的虚拟地址空间,每个页大小4K,1M个页,也就是10^6个页,10^3*10^3,1024*1024
2、伙伴算法解决的是频繁的请求和释放不同大小的一组连续页框,就会导致连续的页框中间分散了许多空闲页框。导致我们无法分配连续的页框。
伙伴算法:把所有空闲的页框分为11个块链表,每块链表中包含特定的连续页框地址空间。
第0个块链表包含大小为2^0个连续的页框 2^0*4K = 4K
第1个块链表包含大小为2^1个连续的页框 2^1*4K = 8K
第2个块链表包含大小为2^2个连续的页框
。
。
。
第10个块链表包含大小为2^10个连续的页框 2^10*4k = 4M 伙伴算法最多一次能够分配4M的内存空间
3、两个连续的内存块 01 12算是一个伙伴,12不算,(伙伴算法的缺点,slab分配器解决这个问题)
4、伙伴位图
用一位描述伙伴块的状态位码,称为状态位码,bit0代表第0块和第1块的伙伴为嘛,bit0 = 1代表伙伴不是全部空闲,bit0 = 1代表全部空闲。
linux2.6为每个管理区使用不同的伙伴系统,内核空间分为三种区,DMA,NORMAL,HIGHMEM,对于每一种区,都有对应的伙伴算法。