linux内核研究-7-内存管理
来源:互联网 发布:人工智能给企业的影响 编辑:程序博客网 时间:2024/05/05 21:48
linux内核研究-7-内存管理
1,说在前面:
1》内存分成一定大小的‘页’
2》内核以‘页’为最小单位进行管理。也就是说内核管理内存的最小单位是‘页’
3》每个物理页对应一个页结构体 struct page
2,内存管理函数->kmalloc函数:
Void *kmalloc(size_t size,int flags)
1》 内存申请的内核函数之一
2》 分配的内存的物理地址是连续的
3》 分配的内存的虚拟地址也是连续的
4》一般用来申请以‘字节’为单位的内存
5》 flags一般是GFP_KERNEL,和GFP_ATOMIC
6》 GFP_ATOMIC不能休眠,一般用在中断处理函数里。
3,内存管理函数->vmalloc函数:
1》 内存申请的内核函数之一
2》 分配的内存的物理地址可能不是连续的
3》分配的内存的虚拟地址是连续的
4》一般用来申请比较大的内存
5》kmalloc的效率比vmalloc高,所以一般用kmalloc,除非你打算要很多的内存时。这时用kmalloc可能会失败,因为很可能没有连续这么大的物理内存块。
4,页管理函数
1》 页分配函数簇
Alloc_page(gfp_mask)
Alloc_pages(gfp_mask,order)
_get_free_page(gfp_mask)
_get_free_pages(gfp_mask,order)
Get_zeroed_page(gfp_mask)
2》 页释放函数簇
_free_pages()
Free_pages()
Free_page()
5,slab分配器
1》为了尽量避免频繁的内存分配和释放造成很多了内存碎片而引入
2》咱们自己也可创建空闲列表来优化,但是自己的没有全局控制,最好用slab
3》 slab函数簇
kmem_cache_alloc()
kmem_cache_free()
4》 在使用slab之前应首先分配高速缓存
Kmem_cache_create()
Kmem_cache_destroy()
- linux内核研究-7-内存管理
- linux内核内存管理
- linux内核内存管理
- Linux内核--内存管理
- linux 内核 内存管理
- linux内核-内存管理
- Linux内核--内存管理
- linux内核内存管理
- PHP内核研究(内存管理1)
- linux内存管理--linux内核高端内存
- linux内存管理--linux内核高端内存
- linux内存管理--linux内核高端内存
- linux内核:内存管理一
- Linux内核高端内存管理
- Linux内核高端内存管理
- Linux内核高端内存管理
- Linux内核高端内存管理
- linux内核如何管理内存
- beagleboard 启动 android 内核
- 基于RSA算法实现软件注册码原理初讨
- java 内存中 栈 和 堆的区别
- 函数内临时变量的释放时刻
- App inventor(android开发工具)中文入门使用手册
- linux内核研究-7-内存管理
- PL/SQL中操作符、条件和循环控制
- Linux学习基础文章2:Linux必学的60个命令
- 什么是“广告代理商”
- alsa----流程
- TabActivity中tab的数据刷新
- android各种适配器的用法
- 三段式搜索引擎工作流程总结
- AppInventor让不会编程的小白也能制作app