版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux Memory ManagerActions Microelectronics Co., Ltd. AgendaLinux对外提供的内存管对外提供的内存管理接口理接口linux 内存镜像图内存镜像图3 13 23 4Linux 内存管内存管理算法介绍理算法介绍3 3Linux如何防止如何防止内存碎片内存碎片Linux Imagev蓝色字体部分v可用空间Linux 如何防止内存碎片v内存碎片内存碎片内部碎片内部碎片: 系统为了满足一小段内存区(连续)的需要,不系统为了满足一小段内存区(连续)的需要,不得不分配了一大区域连续内存给它,从而造成了得不分配了一大区域连续内存给它,从而造成了空
2、间浪费空间浪费 外部碎片外部碎片系统虽有足够的内存,但却是分散的碎片,无法系统虽有足够的内存,但却是分散的碎片,无法满足对大块满足对大块“连续内存连续内存”的需求的需求 Linux 如何防止内存碎片vlinux减少外部碎片减少外部碎片伙伴系统伙伴系统(buddy算法算法)把内存块按大小分组管理,把内存块按大小分组管理,一定程度上减轻了外部碎片的危害,因为页框分一定程度上减轻了外部碎片的危害,因为页框分 配不在盲目,而是按照大小依次有序进行,不过配不在盲目,而是按照大小依次有序进行,不过伙伴关系只是减轻了外部碎片,但并未彻底消除伙伴关系只是减轻了外部碎片,但并未彻底消除 ,但是伙伴系统同时又带来
3、很多的内部碎片伙伴系统同时又带来很多的内部碎片vlinux减少外部碎片减少外部碎片SLAB,SLUB,SLOB分配器分配器使得一个页面内众多使得一个页面内众多小块内存可独立被分配使用,避免了内部分片,小块内存可独立被分配使用,避免了内部分片,节约了空闲内存节约了空闲内存 Linux 如何防止内存碎片linux 内存管理层次关系图1Linux 如何防止内存碎片linux 内存管理层次关系图2Linux 内存管理算法介绍内存管理算法介绍v Buddy System算法原理算法原理vBuddy System是一种经典的内存管理算法。在是一种经典的内存管理算法。在Unix和和Linux操作系统中都有用
4、到。其作用是减少存储空间中的空操作系统中都有用到。其作用是减少存储空间中的空洞、减少碎片、增加利用率。避免外碎片的方法有两种:洞、减少碎片、增加利用率。避免外碎片的方法有两种:va.利用分页单元把一组非连续的空闲页框映射到连续的线性利用分页单元把一组非连续的空闲页框映射到连续的线性地址区间。地址区间。vb.开发适当的技术来记录现存的空闲连续页框块的情况,以开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的请求而把大块的空闲块进行分割。尽量避免为满足对小块的请求而把大块的空闲块进行分割。v基于下面三种原因,内核选择第二种避免方法:基于下面三种原因,内核选择第二种避免方法:v
5、a.在某些情况下,连续的页框确实必要。在某些情况下,连续的页框确实必要。vb.即使连续页框的分配不是很必要,它在保持内核页表不变即使连续页框的分配不是很必要,它在保持内核页表不变方面所起的作用也是不容忽视的。假如修改页表,则导致平方面所起的作用也是不容忽视的。假如修改页表,则导致平均访存次数增加,从而频繁刷新均访存次数增加,从而频繁刷新TLB。vc.通过通过4M的页可以访问大块连续的物理内存,相对于的页可以访问大块连续的物理内存,相对于4K页的页的使用,使用,TLB未命中率降低,加快平均访存速度。未命中率降低,加快平均访存速度。v buddy算法将所有空闲页框分组为算法将所有空闲页框分组为11
6、个块链表,每个块链个块链表,每个块链表分别包含表分别包含1,2,4,8,16,32,64,128,256,512,1024个连续的个连续的页框,每个块的第一个页框的物理地址是该块大小的整数页框,每个块的第一个页框的物理地址是该块大小的整数倍。如,大小为倍。如,大小为16个页框的块,其起始地址是个页框的块,其起始地址是16*212的的倍数。倍数。v 例,假设要请求一个例,假设要请求一个128个页框的块,算法先检查个页框的块,算法先检查128个个页框的链表是否有空闲块,如果没有则查页框的链表是否有空闲块,如果没有则查256个页框的链个页框的链 表,有则将表,有则将256个页框的块分裂两份,一份使用
7、,一份插个页框的块分裂两份,一份使用,一份插入入128个页框的链表。如果还没有,就查个页框的链表。如果还没有,就查512个页框的链个页框的链表,有的话就分裂为表,有的话就分裂为 128,128,256,一个,一个128使用,剩使用,剩余两个插入对应链表。如果在余两个插入对应链表。如果在512还没查到,则返回出错还没查到,则返回出错信号。信号。v 回收过程相反回收过程相反v static inline struct page *alloc_pages(gfp_t gfp_mask, unsigned int order)v void _free_pages(struct page *page,
8、unsigned int order)v 分配内存的单位为页面数分配内存的单位为页面数,分配时候传入分配时候传入order值值, order 为为0 ,1,2,.,nv 分别分配分别分配1,2,4,2n个页面个页面v 伙伴系统伙伴系统(Buddy算法算法)分配的页面物理上是连续的分配的页面物理上是连续的,因此使用伙伴系统因此使用伙伴系统分配的内存大小最大为分配的内存大小最大为210 * PAGESIZE = 4K * 4K = 4Mv unsigned long _get_free_pages(gfp_t gfp_mask, unsigned int order)v void free_pag
9、es(unsigned long addr, unsigned int order)Buddy算法虽然能很好的减少外部碎片的产生算法虽然能很好的减少外部碎片的产生,但是他却可用导致很多的但是他却可用导致很多的内部碎片内部碎片slab/slob/slub的作用的作用: 以页为最小单位分配内存对于内核管理系统物理内存以页为最小单位分配内存对于内核管理系统物理内存来说的确比较方便,但内核自身最常使用来说的确比较方便,但内核自身最常使用 的内存却往的内存却往往是很小(远远小于一页)的内存块往是很小(远远小于一页)的内存块比如比如存放文存放文件描述符、进程描述符、虚拟内存区域描述符等行为件描述符、进程描
10、述符、虚拟内存区域描述符等行为所需的内存都不足一页所需的内存都不足一页。这些用来存放描述符的。这些用来存放描述符的 内存内存相比页面而言,就好比是面包屑与面包。一个整页中相比页面而言,就好比是面包屑与面包。一个整页中可以聚集多个这种这些小块内存;而且这些小块内存可以聚集多个这种这些小块内存;而且这些小块内存块也和面包屑一样频繁地生成块也和面包屑一样频繁地生成/销毁。销毁。 为了满足内核对这种小内存块的需要,为了满足内核对这种小内存块的需要,Linux系统采用系统采用了一种被称为了一种被称为slab分配器的技术。分配器的技术。Slab分配器的实现分配器的实现 相当复杂,但原理不难,其核心思想就是
11、相当复杂,但原理不难,其核心思想就是“存储池存储池”的运用。内存片段的运用。内存片段(小块内存小块内存)被看作对象,当被使用完被看作对象,当被使用完后,并不直接释放而是被缓存到后,并不直接释放而是被缓存到“存储池存储池”里,留做里,留做下下 次使用,这无疑次使用,这无疑避免了频繁创建与销毁对象所带来避免了频繁创建与销毁对象所带来的额外负载的额外负载。slab 分配器的主要结构分配器的主要结构 SLUBv中的中的SLAB内存管理代码将被内存管理代码将被SLUB代替。代替。SLAB是经典的管理内核的内存的代码是经典的管理内核的内存的代码,但是但是slab维护了维护了大量的对象队列,这些队列虽然可以
12、很快地被分大量的对象队列,这些队列虽然可以很快地被分 配,但是过于复杂,而且维护所占用的空间会随着配,但是过于复杂,而且维护所占用的空间会随着系统节点的增加而急剧增长。系统节点的增加而急剧增长。vslub就是作为就是作为slab的可替代选项出现的。的可替代选项出现的。slub是是一种不使用队列的分配器。一种不使用队列的分配器。slub取消了大量的队列取消了大量的队列和相和相 关维护费用,获得了极大的性能和伸缩性提关维护费用,获得了极大的性能和伸缩性提高,并在总体上简化了高,并在总体上简化了slab结构,使用了基于每结构,使用了基于每CPU的缓存,同时保留了的缓存,同时保留了slab的用户接口,
13、而且的用户接口,而且slub还提还提 供了强大的诊断和调试能力供了强大的诊断和调试能力 slob slob是一个相对简单一些的分配器,是一个相对简单一些的分配器,主要使用在小型主要使用在小型的嵌入式系统的嵌入式系统。在选择了。在选择了CONFIG_EMBEDDED后,后,就可以选用就可以选用CONFIG_SLOB选项,使用选项,使用SLOB 分配器分配器中。中。 slob是一个是一个经典的经典的K&R/UNIX堆分配器堆分配器(想我们目前想我们目前ucos上面的上面的malloc),其具有一个,其具有一个slab模拟层,和被模拟层,和被slab替代的替代的linux原来的原来的kmal
14、loc分配器比较相似,分配器比较相似,比比slab更有空间效率,尺寸更小更有空间效率,尺寸更小,但是依然存在碎片和,但是依然存在碎片和难于扩展难于扩展(对所有操作都简单地上锁对所有操作都简单地上锁)的问题,只适用于的问题,只适用于小系统。小系统。 slob获得的是已经对齐的对象。获得的是已经对齐的对象。slob在在MIPS上的粒度上的粒度是是4字节。字节。slob堆是一个单向列表,连接了从堆是一个单向列表,连接了从get_free_page获得的页面,从堆上按照获得的页面,从堆上按照first-fit的原的原则依照需求增长和分配。则依照需求增长和分配。 l vmallocl 避免外部分片的最终
15、思路还是落到了避免外部分片的最终思路还是落到了如何利用不连续如何利用不连续的内存块组合成的内存块组合成“看起来很大的内存块看起来很大的内存块”这里的这里的情况很类似情况很类似 于用户空间分配虚拟内存于用户空间分配虚拟内存,内存逻辑上连,内存逻辑上连续,其实影射到并不一定连续的物理内存上。续,其实影射到并不一定连续的物理内存上。Linux内内核借用了这个技术,允许内核程序在内核地址空间中核借用了这个技术,允许内核程序在内核地址空间中分配虚拟地分配虚拟地 址,同样也利用页表(内核页表)将虚拟址,同样也利用页表(内核页表)将虚拟地址影射到分散的内存页上。以此完美地解决了内核地址影射到分散的内存页上。
16、以此完美地解决了内核内存使用中的外部分片问题。内存使用中的外部分片问题。内核提供内核提供vmalloc函数分函数分配内核虚拟内存配内核虚拟内存,该函数不同于,该函数不同于kmalloc,它可以分配,它可以分配较较Kmalloc大得多的内存空间(可远大于大得多的内存空间(可远大于128K,但必,但必须是页大小的倍数),但相比须是页大小的倍数),但相比Kmalloc来来 说说Vmalloc需要对内核虚拟地址进行重影射,必须更新内核页表,需要对内核虚拟地址进行重影射,必须更新内核页表,因此分配效率上要低一些(用空间换时间因此分配效率上要低一些(用空间换时间)) l Mips 32bit 存储器映射图
17、存储器映射图l在在mips底下使用底下使用,kseg2 1G大小大小空间空间,从从 0 xC000 0000 0 xFFFF FFFF,也就是说也就是说vmalloc返回的地返回的地址值址值,会落在会落在0 xC000 0000 0 xFFFF FFFF上上v Mips linux使用的是二级映射将线性地址转换为物理地址使用的是二级映射将线性地址转换为物理地址v PGD(page direcory),页面目录表页面目录表,占用占用10bitv 每一每一PGD项占用项占用4字节字节,所以页表目录大小为所以页表目录大小为4KB ,正好一页正好一页v PTE(page table entry),页面
18、目录入口表页面目录入口表,占用占用10bitv 每一每一PTE项占用项占用4字节字节,所以页表所以页表(PTE)大小为大小为4KB ,正好一页正好一页v 每一每一PGD项项,(需要有一个页表需要有一个页表(PTE)可以映射可以映射 222 = 4MB 的空间的空间v 每一每一PGD项项,对应一个对应一个PTE(page table entry),页面目录入口表页面目录入口表Vmalloc:调用图调用图v 内核提供内存管理接口接口内核提供内存管理接口接口:v gfp_mask:v GFP_ATOMIC v 用来从中断处理和进程上下文,软中断,持有自旋锁以及其他不能睡眠(阻塞)的地方分配内存. 从不睡眠.v GFP_KERNEL v 内核内存的正常分配. 可能睡眠.v Slob/slab/slub提供接口提供接口:v static struct kmem_cache *skbuff_head_cache _read_mostly;vskbuff_head_cache = kmem_cache_create(skbuff_head_cache, sizeof(struct sk_buff), 0, SLAB_HWCACHE_ALIGN|SL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水冷却器的课程设计
- 安卓课程设计致谢
- 烟头回收课程设计
- 药事管理课程设计
- 电桥课程设计总结
- 运动健身业务员服务协助总结
- 聊天应用开发课程设计
- 小区消防安全检查培训
- IT行业美工工作总结
- 饮料行业技术工作分析
- 我的家乡武汉
- 眼镜制造业灌胶机市场前景与机遇分析
- 智慧审计平台项目汇报
- 湖北省天门市2022-2023学年三年级上学期语文期末试卷(含答案)
- 《建筑赋比兴》一些笔记和摘录(上)
- 【服装企业比音勒芬服饰的财务问题分析(基于杜邦分析)9700字论文】
- 电气工程及其自动化低压电器中继电器应用
- 实验九(b)液体表面张力系数的测定(用毛细管法)
- 全球机场三字码、四字码
- 2023-2024学年重庆市两江新区四上数学期末质量检测试题含答案
- 泌尿外科内镜诊疗技术质量保障措施及应急预案
评论
0/150
提交评论