linux 内存管理 --- kmalloc 和 vmalloc

发布时间 2023-07-19 22:31:09作者: 流水灯

kmalloc

kmalloc会根据申请的内存大小来决定来决定使用块分配器(slab/slub/slob)或页分配器进行内存分配(buddy),只能分配几个固定大小的内存,申请值不在这些固定值之内时,会按向上对齐的原则,分配最接近申请值的内存块。

static __always_inline void *kmalloc(size_t size, gfp_t flags)

 

flags 可以指定从哪个物理内存区域申请内存,不指定就是低端内存,也可以指定高端内存等

kmalloc最大可分配内存大小:等于伙伴系统最大能申请的单块最大内存

kmalloc申请的物理地址是连续的

kmalloc如果申请高端物理内存,使用的虚拟地址是 PKMAP_BASE ~ PAGE_OFFSET-1

 

vmalloc

vmalloc申请的物理地址不一定是连续的,所以可以申请非常大的物理内存