关于kmalloc vmalloc 和malloc
2015-07-24 00:00
399 查看
用户态的malloc是申请堆空间的用户态函数。可网上不少人以为malloc在内核态的调用函数是kmalloc或vmalloc,这是不对的 kmalloc是基于slab的,它在通用缓存区申请分配内存(这些缓存用于分配和释放不是很频繁的请求),通用缓存区一共26块缓存块,使用DMA和常规分配各占有13个。
当调用vmalloc时,先调用kmalloc分配一块可以存放申请的全部物理页框描述符的空间,最后直接调用alloc_page每次申请一个物理页框(实际上vmalloc调用的是每cpu高速缓存中的页框)。
言归正传:
malloc首先获得的是线性区间,并没有获得物理内存,因为内核就是这么强硬,爱咋咋滴^^。当用户向这个线性区间写入时必定产生缺页,进入缺页处理程序,经判断,这是一个匿名映射(当内存不足时可以将这个区间的数据交换的swap中),然后在高端内存直接调用__alloc_pages(本来高端内存就是给用户使用的)。因
当调用vmalloc时,先调用kmalloc分配一块可以存放申请的全部物理页框描述符的空间,最后直接调用alloc_page每次申请一个物理页框(实际上vmalloc调用的是每cpu高速缓存中的页框)。
言归正传:
malloc首先获得的是线性区间,并没有获得物理内存,因为内核就是这么强硬,爱咋咋滴^^。当用户向这个线性区间写入时必定产生缺页,进入缺页处理程序,经判断,这是一个匿名映射(当内存不足时可以将这个区间的数据交换的swap中),然后在高端内存直接调用__alloc_pages(本来高端内存就是给用户使用的)。因
相关文章推荐
- FirePrime功能介绍——10.1寸显示模组,操作感十足
- 正确去除BarTender只打印口令密码
- 梦幻西游推出的暑期档优惠活动有哪些
- 基于window下的jenkins php集成环境搭建分享(1)
- NASA发现新地球:几何画板中看地球
- 使用vimdiff作为svn diff的查看代码工具
- shell脚本-----按行读取文件
- linux shell 数组建立及使用技巧
- Java数据结构-线性表之双向链表
- Java数据结构-线性表之栈(顺序栈和链栈)
- Java数据结构-树及树的存储结构
- Java数据结构-线性表之单链表应用-重复节点的删除
- Java数据结构-线性表之静态链表
- Java数据结构-线性表之链表应用-检测链表是否有环
- Java数据结构-二叉树及其遍历
- Java数据结构-线性表之单链表应用-单链表的逆置
- Java数据结构-线性表之循环链表
- Java数据结构-线性表之队列
- Java数据结构-线性表之单链表应用-单链表合并
- Java数据结构-线性表之单链表LinkedList