从图中可以看出,内核采取了三种机制将高端内存映射到内核空间:永恒内核映射,流动映射和vmalloc机制。
起首,让咱们看下实拟内存:
1.物理内存的内核映射
3.物理内存的分配
内核收回内存申请的请供时,依据内核函数挪用接心将启用不同的内存分配器。
3.1 分区页框分配器
分区页框分配器 (zoned page frame allocator) ,处置对连续页框的内存分配请求。分区页框管理器分为两大局部:前真个管理区分配器和伙伴系统,如下图:
2).内核地址空间的后128MB专门用于映射高端内存,否则,没有线性地址的高端内存不能被内核所访问。这些高端内存的内核映射明显是临时映射的,可则也只能映射128MB的高端内存。当内核须要访问高端内存时就常设在这个地区进止地址映射,使用结束以后再用来进行其余高端内存的映射。
因为要停止高端内存的内核映射,果此曲接可能映射的物理内存大小只有896MB,该值保留在high_memory中 广州从化搬家。内核地址空间的线性地址区间如下图所示:
1).高端内存不能全体映射到内核空间,也就是道这些物理内存不对应的线性地址。不外,内核为每一个物理页框都分配了对应的页框描述符,全部的页框描述符都保留在mem_map数组中,因此每一个页框描述符的线性地址都是牢固存在的。内核此时可使用alloc_pages()和alloc_page()来分配高端内存,由于这些函数返回页框描述符的线性地址。
2.物理内存治理机造
基于物理内存在内核空间中的映射道理,物理内存的经管方法也有所分歧。内核中物理内存的办理机制重要有伙陪算法,slab高速缓存和vmalloc机制。此中搭档算法和slab高速缓存皆在物理内存映射辨别配物理内存,而vmalloc机制则在高端内存映射分辨配物理内存。
伙伴算法
伙伴算法卖力大块连续物理内存的分配和释放,以页框为基础单元。该机制可以免内部碎片。
per-CPU页框下速缓存
内核常常请乞降释放单个页框,该缓存包括预先分配的页框,用于谦足当地CPU收出的单一页框请求。
slab缓存
slab缓存负责小块物理内存的分配,并且它也作为高速缓存,主要针对内核中时常分配并释放的对象。
vmalloc机制
vmalloc机制使得内核通过连续的线性地址来拜访非连续的物理页框,如许可以最大限度的应用高端物理内存。