kmalloc()和vmalloc()介绍

转载 2012年03月25日 19:13:27

kmalloc()

用于申请较小的、连续的物理内存

1. 以字节为单位进行分配,在<linux/slab.h>中

2. void *kmalloc(size_t size, int flags) 分配的内存物理地址上连续,虚拟地址上自然连续

3. gfp_mask标志:什么时候使用哪种标志?如下:

———————————————————————————————-
情形 相应标志
———————————————————————————————-
进程上下文,可以睡眠 GFP_KERNEL
进程上下文,不可以睡眠 GFP_ATOMIC
中断处理程序 GFP_ATOMIC
软中断 GFP_ATOMIC
Tasklet GFP_ATOMIC
用于DMA的内存,可以睡眠 GFP_DMA | GFP_KERNEL
用于DMA的内存,不可以睡眠 GFP_DMA | GFP_ATOMIC
———————————————————————————————-

4. void kfree(const void *ptr)

释放由kmalloc()分配出来的内存块

vmalloc()

用于申请较大的内存空间,虚拟内存是连续的

1. 以字节为单位进行分配,在<linux/vmalloc.h>中

2. void *vmalloc(unsigned long size) 分配的内存虚拟地址上连续,物理地址不连续

3. 一般情况下,只有硬件设备才需要物理地址连续的内存,因为硬件设备往往存在于MMU之外,根本不了解虚拟地址;但为了性能上的考虑,内核中一般使用 kmalloc(),而只有在需要获得大块内存时才使用vmalloc(),例如当模块被动态加载到内核当中时,就把模块装载到由vmalloc()分配的内存上。

4.void vfree(void *addr),这个函数可以睡眠,因此不能从中断上下文调用。

malloc(), vmalloc()和kmalloc()区别

[*]kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存

[*]kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保证任何东西(这点是自己猜测的,不一定正确)

[*]kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大

[*]内存只有在要被DMA访问的时候才需要物理上连续

[*]vmalloc比kmalloc要慢

相关文章推荐

kmalloc()和vmalloc()的区别

  • 2012年09月11日 19:19
  • 54KB
  • 下载

linux内核__get_free_page,kmalloc,vmalloc的区别,内核对内存的管理

对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。   进程的4GB内存空间...
  • yhc1991
  • yhc1991
  • 2015年07月28日 09:52
  • 256

malloc kmalloc vmalloc的区别

简单的说:kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保...

Linux内存管理 -- malloc,kmalloc,vmalloc区别

Linux内存管理 用户空间内存动态申请 内核空间内存动态申请

kmalloc、get_free_page、vmalloc的区别(根据自己的理解总结了一下)

对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。   进程的4GB内存空间...

kmalloc, vmalloc分配的内存结构

From: http://linux.chinaunix.net/techdoc/system/2008/06/16/1011365.shtml 对于提供了MMU(存储管理器,辅助操作系统进行内...

linux内存管理之malloc、vmalloc、kmalloc的区别

linux内存管理之malloc、vmalloc、kmalloc的区别 malloc的实现原理

kmalloc/kfree,vmalloc/vfree函数用法和区别

1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. tiger说明:在用kmalloc申请函数后,要对起清零 用mem...

linux 共享内存映射原理 vmalloc kmalloc getfreepage

Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:kmalloc()和vmalloc()介绍
举报原因:
原因补充:

(最多只允许输入30个字)