《Linux内存管理 Memory Manager.ppt》由会员分享,可在线阅读,更多相关《Linux内存管理 Memory Manager.ppt(24页珍藏版)》请在人人文库网上搜索。
1、柯锦玲2009-10-21柯锦玲2009-10-21柯锦玲, Linux向外部提供的内存管理接口Linux Image、蓝色字体部分的可用空间、Linux如何防止内存片段,内存片段:系统分配大区域的连续内存,以满足小内存区域(连续)的需要浪费空间的外部片断系统有足够的内存,但是分散的片断不能满足大块的Linux如何防止内存的片断,Linux减少外部的片断合作伙伴系统(buddy算法)以及内存块页帧的分配并非盲目,而是按大小顺序进行,但伙伴关系只是减轻了外部的碎片,而伙伴系统同时带来了许多内部碎片linux,减少了外部碎片SLAB、SLUB、SLOB分配器, 1页内的许多小块存储器可以独立分配使。
2、用,避免内部片段,节省空闲存储器,linux如何防止存储器片段,linux存储器管理层次图1,linux如何防止存储器片段,linux存储器管理层次函数linux内存管理算法介绍、Buddy System算法原理Buddy System是典型的内存管理算法。 同时在Unix和Linux操作系统中使用。 其作用是减少存储空间的空洞,减少碎片,提高利用率。 避免外部碎片化的一种方法是使用a .分页单元将一组不连续的空页框映射到连续的线性地址部分。 b .开发适当技术来记录现有的空闲的连续页帧块的情况,使得不分割大块的空闲块,以便满足对小块的要求。 内核在某些情况下可能需要连续的页框。 b .即使不。
3、需要连续页框的分配,也不能忽略内核页表在原样维持上的作用。 修改页面表会增加平均访问次数,并频繁更新TLB。 可以在c.4m的页面上访问大型连续的物理内存,对于4K页面的使用,TLB未命中率降低,平均访问速度变快。buddy算法将所有空闲页面框分组到11个块链接表中,并且每个块链接表分别对应于1、2、4、8、16、32、64、128、256、512、1024个连续页面页数例如,当要求128页框的块时,该算法首先检查128页框的链表是否有空块,否则检查256页框的链表,将256页框的块分割为2,使用1个、1个如果还没有,则检查512个页框的链接表,如果有的话分裂为128、128、256,在1个1。
4、28中使用,剩下的2个插入对应的链接表。 如果在512还没有找到,则返回错误信号。 反过来,回收流程是:staticinlinestructpage * alloc _ pages (GFP _ tgfp _ mask、unsignedintorder)void。 unsigned int order (未指定顺序)分配存储器的单位在分配时传递order值,order是0、1、2、n是分别由1、2、4、2n个页面合作伙伴系统(Buddy算法)分配的页面的物理量合作伙伴系统分配的内存大小最大为210 *页=4k *4k=4munsignedlong _ _ get _ free _ pages 。
5、(GFP _ tgfp _ mask ), unsigned int order算法可以很好地减少外部片段的发生,但是他可以引起很多内部片段,slab/slob/slub的作用是以:页为单位分配内存用于存储这些描述符的内存与页面相比,类似于面包屑和面包。这种小块存储器可以在整个页面上集中多个,并且这些小块的存储器块也和面包屑一样频繁地生成/丢弃。 为满足这种小内存块的内核需求,Linux系统采用了被称为slab分配器的技术。 Slab分配器的实现相当复杂,但原理并不难,其核心思想是“存储池”的运用。 内存片段(小块内存)被视为对象,并且在使用之后被缓存在“存储池”中,而不是直接释放,并且被保留。
6、以供下一次使用,从而避免了由于频繁创建或销毁对象而产生的额外负荷slab分配器的主要结构是SLUB,2.6.22的slab内存管理代码被SLUB取代。 SLAB是典型的管理内核内存的代码,而SLAB保留有大量的对象队列,这些队列可以立即被指派,但是由于过于复杂,导致系统节点的增加而花费大量的维护空间。 slub显示为slab的替代选项。 slub是不使用队列的分配器。 slub消除了大量的队列和相关维护费用,获得了显着的性能和可扩展性,整体上简化了slab结构,使用了每个CPU的缓存,保持了slab的用户界面,slub提供了强大的诊断和调试能力,slob、slob 如果选择主要使用的CONFI。
7、G_EMBEDDED,则可以通过选择CONFIG_SLOB选项来使用SLOB分配器。 其中,典型的k skbuff _ head _ cache=kmem _ cache _ create (卡片、结构) slab _ HW卡片_对齐3360与卡片对齐SLAB_PANIC:除非在创建失败时感觉到所分配的内存结构频繁生成/丢弃。 请按原样使用kmalloc分配空间,除非您觉得所分配的内存结构会频繁生成/销毁。 例如,分配3360 skb=释放kmem _ cache _分配节点(缓存,GFP _ mask ) : kmem _缓存_可用空间(缓存,skb )。Vmalloc:在中断过程中不能使用: void * vmalloc (无符号长大) void vree (const void * addr ) kmalloc 3360状态,actions。