为什么要用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

评论

此博客中的热门博文

Linux/ARM Page Table Entry 属性设置分析

由RFE指令引发的一串故事

提交了30次才AC ---【附】POJ 2488解题报告