内核中与驱动相关的内存操作之六(vmalloc)
2014-03-18 16:00
260 查看
vmalloc是在整个虚拟空间分配出一段内存,它所面向的处理对象是CPU整个虚拟内存空间,而kmalloc是CPU的逻辑地址空间.逻辑地址空间也是"虚拟"的,只不过它和物理地址空间保持着线性关系的一种"虚拟地址空间",可以说,逻辑地址是虚拟地址的一个子集.
1.原型:
2.参数说明:
目标分配内存的大小.
3.返回值:
成功返回分配内存的地址,失败返回NULL.
4.应用场景:
4-1.vmalloc面向的内存分配是整个虚拟空间的,即不一定是逻辑地址空间;
4-2.vmalloc分配出来的内存空间在物理内存空间上不一定是连续的;
4-3.vmalloc分配的内存空间投影到物理内存空间是非线性的;
4-4.vmalloc分配内存后会引起内核对页表的修改,这是因为它和物理内存空间是非线性的;
4-5.开销比较大,因为它有个页表重新修改的过程;
4-6.效率不高,因为它有个页表重新修改的过程;
4-7.基于上述两点,不推荐使用vmalloc来分配内存;
4-8.用vmalloc分配出来的内存需要用vfree来释放.
5.实例:
和kmalloc使用场合一样,只不过考虑到其效率问题,不建议使用.
1.原型:
void *vmalloc(unsigned long size)
2.参数说明:
size:
目标分配内存的大小.
3.返回值:
成功返回分配内存的地址,失败返回NULL.
4.应用场景:
4-1.vmalloc面向的内存分配是整个虚拟空间的,即不一定是逻辑地址空间;
4-2.vmalloc分配出来的内存空间在物理内存空间上不一定是连续的;
4-3.vmalloc分配的内存空间投影到物理内存空间是非线性的;
4-4.vmalloc分配内存后会引起内核对页表的修改,这是因为它和物理内存空间是非线性的;
4-5.开销比较大,因为它有个页表重新修改的过程;
4-6.效率不高,因为它有个页表重新修改的过程;
4-7.基于上述两点,不推荐使用vmalloc来分配内存;
4-8.用vmalloc分配出来的内存需要用vfree来释放.
5.实例:
和kmalloc使用场合一样,只不过考虑到其效率问题,不建议使用.
相关文章推荐
- 内核中与驱动相关的内存操作之九(重映射)
- 内核中与驱动相关的内存操作之十(内存屏障)
- 内核中与驱动相关的内存操作之一(MMU)
- 内核中与驱动相关的内存操作之十一(IO内存)
- 内核中与驱动相关的内存操作之二(cache)
- 内核中与驱动相关的内存操作之十二(mmap)
- 内核中与驱动相关的内存操作之十三(/dev/mem)
- 内核中与驱动相关的内存操作之四(常用结构体)
- 内核中与驱动相关的内存操作之五(kmalloc)
- 内核中与驱动相关的内存操作之十四(直接I/O)
- 内核中与驱动相关的内存操作之三(内存模型)
- 内核中与驱动相关的内存操作之十五(标准I/O)
- 内核中与驱动相关的内存操作之十六(异步I/O)
- 内核中与驱动相关的内存操作之七(slab)
- 内核中与驱动相关的内存操作之十七(DMA)
- 内核中与驱动相关的内存操作之八(面向页的内存分配)
- 驱动移植过程中DMA内存相关接口替换
- 转:内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages
- C++0x 内存模型和原子操作 (std:::atomic memory order等相关资料)
- LINUX内存相关的内核参数