为什么要用VMALLOC
用伙伴系统,slab分配器分配的内存在物理地址上都是连续的。然而,有些时候,每次请求内存时,系统都分配物理地址连续的内存块是不合适的,可以运用小块内存“连接”成大块可运用的内存。
这在操作系统设计中也被称为 “内存拼接”,显然,内存拼接在须要较大内存,而内存访问相比之下不是很频繁的情况下是比较有效的.
在linux内核中用来管理内存拼接的接口是vmalloc/vfree.用vmalloc分配得到的内存在线性地址是平滑的,但是物理地址上是非连续的.
VMALLOC的虚拟地址范围:
图片来自:ULK
注1:虽然Vmalloc有如此优点,但应该尽量减少使用,因为,如果这些非连续物理内存被vmalloc使用后,即使与这些非连续物理内存相邻的伙伴区域被释放,也无法再组成大的区域了,这不利于伙伴管理系统组合成更大的连续物理页框。注2:VMALLOC除了上述用途外,Machine specific static mappings are also located here through iotable_init().
Note:
1. 内容来自:http://ericxiao.cublog.cn/
2. 2012.8.30添加了vmalloc的使用弊端。
3. 2013.9.13添加了注2.注二引用自:Documentation/arm/memory.txt
评论
发表评论