2.3 内存篇-物理内存管理

1:内核空间划分

低端内存:
如图所示,将物理内存0-896M和kernel space线性映射
内核空间虚拟内存和物理内存间的地址转化函数
__pa(addr),返回addr的物理地址,addr-PAGE_OFFSET
__va(addr),返回addr的虚拟地址,addr+PAGE_OFFSET
2.3 内存篇-物理内存管理
高端内存:
高于896M的内存,和虚拟内存的映射关系如下所示
1)vmalloc
2)持久映射
3)固定映射
2.3 内存篇-物理内存管理

2:物理内存管理机制

2.3 内存篇-物理内存管理
1)伙伴算法
负责大块连续物理内存的分配和释放,以页框为单位。该机制可以有效避免内存碎片化
2)per-cpu页框高速缓存
请求和释放单个页框
3)slab请求
小块物理内存的申请和释放,并且也作为高速缓存,主要用于内核中经常申请和释放的对象
slab通用缓存:
针对一般情况,适合分配任意大小的物理内存,kmalloc
slab专用缓存:
特定的对象,比如进程控制块,task-struct-cache
4)vmalloc机制
内核通过连续的线性地址访问非连续的物理地址,这样可以最大程度的使用高端内存