Linux内存管理详解ppt课件_第1页
Linux内存管理详解ppt课件_第2页
Linux内存管理详解ppt课件_第3页
Linux内存管理详解ppt课件_第4页
Linux内存管理详解ppt课件_第5页
已阅读5页,还剩20页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux Memory ManagerActions Microelectronics Co., Ltd.柯锦玲2021-10-21AgendaLinux对外提供的内存管对外提供的内存管理接口理接口linux 内存镜像图内存镜像图3 13 23 4Linux 内存管内存管理算法引见理算法引见3 3Linux如何防止如何防止内存碎片内存碎片Linux Imagev蓝色字体部分v可用空间Linux 如何防止内存碎片v内存碎片内存碎片v内部碎片内部碎片: v系统为了满足一小段内存区延续的系统为了满足一小段内存区延续的需求,不得不分配了一大区域延续内存给需求,不得不分配了一大区域延续内存给它,从而呵

2、斥了空间浪费它,从而呵斥了空间浪费 v外部碎片外部碎片v系统虽有足够的内存,但却是分散的碎系统虽有足够的内存,但却是分散的碎片,无法满足对大块片,无法满足对大块“延续内存的需求延续内存的需求 Linux 如何防止内存碎片vlinux减少外部碎片减少外部碎片v同伴系统同伴系统(buddy算法算法)把内存块按大小分组把内存块按大小分组管理,一定程度上减轻了外部碎片的危害,管理,一定程度上减轻了外部碎片的危害,由于页框分由于页框分 配不在盲目,而是按照大小依配不在盲目,而是按照大小依次有序进展,不过同伴关系只是减轻了外次有序进展,不过同伴关系只是减轻了外部碎片,但并未彻底消除部碎片,但并未彻底消除

3、,但是同伴系统同但是同伴系统同时又带来很多的内部碎片时又带来很多的内部碎片vlinux减少外部碎片减少外部碎片vSLAB,SLUB,SLOB分配器使得一个页面内分配器使得一个页面内众多小块内存可独立被分配运用,防止了众多小块内存可独立被分配运用,防止了内部分片,节约了空闲内存内部分片,节约了空闲内存 Linux 如何防止内存碎片vlinux 内存管理层次关系图内存管理层次关系图1Linux 如何防止内存碎片vlinux 内存管理内存管理层次关系图层次关系图2Linux 内存管理算法引见内存管理算法引见v Buddy System算法原理算法原理v Buddy System是一种经典的内存管是一

4、种经典的内存管理算法。在理算法。在Unix和和Linux操作系统中操作系统中都有用到。其作用是减少存储空间中都有用到。其作用是减少存储空间中的空洞、减少碎片、添加利用率。防的空洞、减少碎片、添加利用率。防止外碎片的方法有两种:止外碎片的方法有两种:v a.利用分页单元把一组非延续的空闲利用分页单元把一组非延续的空闲页框映射到延续的线性地址区间。页框映射到延续的线性地址区间。v b.开发适当的技术来记录现存的空闲开发适当的技术来记录现存的空闲延续页框块的情况,以尽量防止为满延续页框块的情况,以尽量防止为满足对小块的恳求而把大块的空闲块进足对小块的恳求而把大块的空闲块进展分割。展分割。v 基于下面

5、三种缘由,内核选择第二种基于下面三种缘由,内核选择第二种防止方法:防止方法:v a.在某些情况下,延续的页框确实必在某些情况下,延续的页框确实必要。要。v b.即使延续页框的分配不是很必要,即使延续页框的分配不是很必要,它在坚持内核页表不变方面所起的作它在坚持内核页表不变方面所起的作用也是不容忽视的。假设修正页表,用也是不容忽视的。假设修正页表,那么导致平均访存次数添加,从而频那么导致平均访存次数添加,从而频繁刷新繁刷新TLB。v c.经过经过4M的页可以访问大块延续的物的页可以访问大块延续的物理内存,相对于理内存,相对于4K页的运用,页的运用,TLB未未命中率降低,加快平均访存速度。命中率降

6、低,加快平均访存速度。vv buddy算法将一切空闲页框分组为算法将一切空闲页框分组为11个块链表,每个块链个块链表,每个块链表分别包含表分别包含1,2,4,8,16,32,64,128,256,512,1024个延续的个延续的页框,每个块的第一个页框的物理地址是该块大小的整数页框,每个块的第一个页框的物理地址是该块大小的整数倍。如,大小为倍。如,大小为16个页框的块,其起始地址是个页框的块,其起始地址是16*212的的倍数。倍数。v 例,假设要恳求一个例,假设要恳求一个128个页框的块,算法先检查个页框的块,算法先检查128个个页框的链表能否有空闲块,假设没有那么查页框的链表能否有空闲块,假

7、设没有那么查256个页框的个页框的链链 表,有那么将表,有那么将256个页框的块分裂两份,一份运用,一个页框的块分裂两份,一份运用,一份插入份插入128个页框的链表。假设还没有,就查个页框的链表。假设还没有,就查512个页框个页框的链表,有的话就分裂为的链表,有的话就分裂为 128,128,256,一个,一个128运用,运用,剩余两个插入对应链表。假设在剩余两个插入对应链表。假设在512还没查到,那么前往还没查到,那么前往出错信号。出错信号。v 回收过程相反回收过程相反v static inline struct page *alloc_pages(gfp_t gfp_mask, unsign

8、ed int order)v void _free_pages(struct page *page, 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

9、(gfp_t gfp_mask, unsigned int order)v void free_pages(unsigned long addr, unsigned int order)v Buddy算法虽然能很好的减少外部碎片的产生算法虽然能很好的减少外部碎片的产生,但是他却可用导致很但是他却可用导致很多的内部碎片多的内部碎片slab/slob/slub的作用的作用:以页为最小单位分配内存对于内核管理系以页为最小单位分配内存对于内核管理系统物理内存来说确实比较方便,但内核统物理内存来说确实比较方便,但内核本身最常运用本身最常运用 的内存却往往是很小远的内存却往往是很小远远小于一页的内存块远小

10、于一页的内存块比如存放文比如存放文件描画符、进程描画符、虚拟内存区域件描画符、进程描画符、虚拟内存区域描画符等行为所需的内存都缺乏一页。描画符等行为所需的内存都缺乏一页。这些用来存放描画符的这些用来存放描画符的 内存相比页面而内存相比页面而言,就好比是面包屑与面包。一个整页言,就好比是面包屑与面包。一个整页中可以聚集多个这种这些小块内存;而中可以聚集多个这种这些小块内存;而且这些小块内存块也和面包屑一样频繁且这些小块内存块也和面包屑一样频繁地生成地生成/销毁。销毁。为了满足内核对这种小内存块的需求,为了满足内核对这种小内存块的需求,Linux系统采用了一种被称为系统采用了一种被称为slab分配

11、器分配器的技术。的技术。Slab分配器的实现分配器的实现 相当复杂,相当复杂,但原理不难,其中心思想就是但原理不难,其中心思想就是“存储池存储池的运用。内存片段的运用。内存片段(小块内存小块内存)被看作对象,被看作对象,当被运用完后,并不直接释放而是被缓当被运用完后,并不直接释放而是被缓存到存到“存储池里,留做下存储池里,留做下 次运用,这无次运用,这无疑防止了频繁创建与销毁对象所带来的疑防止了频繁创建与销毁对象所带来的额外负载。额外负载。slab 分配器的主要构造分配器的主要构造 SLUBv2.6.22中的中的SLAB内存管理代码将被内存管理代码将被SLUB替代。替代。SLAB是经典的管理内

12、核的内存的代码是经典的管理内核的内存的代码,但是但是slab维维护了大量的对象队列,这些队列虽然可以很快地护了大量的对象队列,这些队列虽然可以很快地被分被分 配,但是过于复杂,而且维护所占用的空间配,但是过于复杂,而且维护所占用的空间会随着系统节点的添加而急剧增长。会随着系统节点的添加而急剧增长。vslub就是作为就是作为slab的可替代选项出现的。的可替代选项出现的。slub是是一种不运用队列的分配器。一种不运用队列的分配器。slub取消了大量的队取消了大量的队列和相列和相 关维护费用,获得了极大的性能和伸缩性关维护费用,获得了极大的性能和伸缩性提高,并在总体上简化了提高,并在总体上简化了s

13、lab构造,运用了基于构造,运用了基于每每CPU的缓存,同时保管了的缓存,同时保管了slab的用户接口,而的用户接口,而且且slub还提还提 供了强大的诊断和调试才干供了强大的诊断和调试才干 slobslob是一个相对简单一些的分配器,主要运用在小型的是一个相对简单一些的分配器,主要运用在小型的嵌入式系统。在选择了嵌入式系统。在选择了CONFIG_EMBEDDED后,就后,就可以选用可以选用CONFIG_SLOB选项,运用选项,运用SLOB 分配器中。分配器中。slob是一个经典的是一个经典的K&R/UNIX堆分配器堆分配器(想我们目前想我们目前ucos上面的上面的malloc),其具

14、有一个,其具有一个slab模拟层,和被模拟层,和被slab替替代的代的linux原来的原来的kmalloc分配器比较类似,比分配器比较类似,比slab更更有空间效率,尺寸更小,但是依然存在碎片和难于扩有空间效率,尺寸更小,但是依然存在碎片和难于扩展展(对一切操作都简单地上锁对一切操作都简单地上锁)的问题,只适用于小系统。的问题,只适用于小系统。slob获得的是曾经对齐的对象。获得的是曾经对齐的对象。slob在在MIPS上的粒度是上的粒度是4字节。字节。slob堆是一个单向列表,衔接了从堆是一个单向列表,衔接了从get_free_page获得的页面,从堆上按照获得的页面,从堆上按照first-f

15、it的原的原那么按照需求增长和分配。那么按照需求增长和分配。 l vmallocl 防止外部分片的最终思绪还是落到了如何利用不延续防止外部分片的最终思绪还是落到了如何利用不延续的内存块组合成的内存块组合成“看起来很大的内存块看起来很大的内存块这里的这里的情况很类似情况很类似 于用户空间分配虚拟内存,内存逻辑上延于用户空间分配虚拟内存,内存逻辑上延续,其实影射到并不一定延续的物理内存上。续,其实影射到并不一定延续的物理内存上。Linux内内核借用了这个技术,允许内核程序在内核地址空间中核借用了这个技术,允许内核程序在内核地址空间中分配虚拟地分配虚拟地 址,同样也利用页表内核页表将虚拟址,同样也利

16、用页表内核页表将虚拟地址影射到分散的内存页上。以此完美地处理了内核地址影射到分散的内存页上。以此完美地处理了内核内存运用中的外部分片问题。内核提供内存运用中的外部分片问题。内核提供vmalloc函数分函数分配内核虚拟内存,该函数不同于配内核虚拟内存,该函数不同于kmalloc,它可以分配,它可以分配较较Kmalloc大得多的内存空间可远大于大得多的内存空间可远大于128K,但必,但必需是页大小的倍数,但相比需是页大小的倍数,但相比Kmalloc来来 说说Vmalloc需求对内核虚拟地址进展重影射,必需更新内核页表,需求对内核虚拟地址进展重影射,必需更新内核页表,因此分配效率上要低一些用空间换时

17、间因此分配效率上要低一些用空间换时间) l Mips 32bit 存储器映射图存储器映射图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字节字节,所以页表目录大小为所以页表目录大小

18、为4KB ,正好一正好一页页v PTE(page table entry),页面目录入口表页面目录入口表,占用占用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 用来从中断

19、处置和进程上下文用来从中断处置和进程上下文,软中断软中断,持有自旋锁以及其持有自旋锁以及其他不能睡眠他不能睡眠(阻塞阻塞)的地方分配内存的地方分配内存. 从不睡眠从不睡眠.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_ALI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论