06内存管理.ppt

06内存管理.ppt

ID:48717313

大小:752.50 KB

页数:76页

时间:2020-01-20

06内存管理.ppt_第1页
06内存管理.ppt_第2页
06内存管理.ppt_第3页
06内存管理.ppt_第4页
06内存管理.ppt_第5页
资源描述:

《06内存管理.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux内核分析韩晓峰内存管理主要内容页区获得、释放页kmalloc()、kfree()vmalloc()slab分配器内核与用户空间不同,它不具备像用户空间那样设置的使用内存的能力,不支持简单便捷的内存分配方式。页内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字(甚至字节),但内存管理单元(MMU)通常以页为单位进行处理。从虚拟内存的角度来看,页就是最小单位。体系结构不同,支持的页大小也不同。大多数32位体系结构支持4KB的页,而64位体系结构一般会支持8KB的页。在支持4KB页大小并有1GB物理内存

2、的机器上,物理内存会被划分为262144个页。内核用structpage结构表示系统中的每个物理页,该结构位于linux/mm.h中:structpage{page_flags_tflags;atomic_t_count;atomic_t_mapcount;unsignedlongprivate;statctaddress_space*mapping;pgoff_tindex;structlist_headlru;void*virtual;}较重要的域:flag存放页的状态_count存放页的引用计数virtual是页的虚拟地

3、址。系统中的每个物理页都要分配一个这样的结构体假设structpage占用40字节的内存,系统的物理页为4KB大小,系统有128MB物理内存。那么系统中又有page结构消耗的内存只不过是1MB多些。区由于硬件限制,有些页位于内存中特定的物理地址上,所以不能将其用于一些特定的任务。内核把页划分为不同的区(zone)。ZHONE_DMA——这个区包含的页用来执行DMA操作ZONE_NORMAL——这个区包含的都是正常映射的页ZONE_HIGHMEMM——这个区包含“高端内存”,其中的页并不能永久的映射到内核地址空间三种区的定义在l

4、inux/mmzone.h中区的实际使用和分布式与体系结构相关的。ZONE_HIGHMEM所在的内存是高端内存,其余的内存就是所谓的地段内存。在x86上ZONE_DMA为小于16MB的物理内存ZONE_NORMAL为16~896MB之间的物理内存ZONE_HIGHMEM为高于896MB的所有物理内存。Linux把系统的页划分为区,形成不同的内存池,可以根据用途进行分配。区的划分没有物理意义,只是为了内核管理页的一种逻辑上的分组。每个区都用structzone表示,定义在linux/mmzone.h文件中。结构体中lock域是一

5、个自旋锁,防止该结构被并发访问name域是一个以NULL结束的字符串,表示这个区的名字。内核启动期间初始化这个值,代码位于mm/page_alloc.c中名字分别为“DMA”,“Normal”,“HighMem”获得页、释放页获得页内核提供了一种请求内存的底层机制,并提供了对它进行访问的几个接口,所有接口都以页尾单位分配内存,定义在linux/gfp.h中structpage*alloc_pages(unsignedintgfp_mas,unsignedintorder)该函数分配2的order次方个连续的无力也,并返回一个指

6、针,指向第一个页的page结构体。void*page_address(structpage*page)函数返回一个指针,指向给定物理页当前所在的逻辑地址。unsignedlong__get_free_pages(unsignedintgfp_mask,unsignedintorder)这个函数与alloc_page()作用相同,直接返回所请求的第一个页的逻辑地址。如果只需要一个页,这可使用封装好的函数:structpage*alloc_page(unsignedintgfp_mask)unsignedlong__get_fre

7、e_page(unsignedintgfp_mask)获得填充为0的页unsignedlongget_zeroed_page(unsignedintgfp_mask)该函数把分配好的页都填充为0,这样可以清除随机的垃圾数据。释放页void__free_pages(structpage*page,unsignedintorder)voidfree_pages(unsignedlongaddr,unsignedintorder)voidfree_page(unsignedlongaddr)释放页时需要谨慎,传递了错误的struct

8、page或地址,用了错误的order值,都可能导致系统崩溃。内核是不会检查这些参数指定的范围是否正确。获得8个页的例子unsignedlongpage;page=__get_free_pages(GFP_KERNEL,3);if(!page){return-BNOMEM;}f

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。