linux物理内存管理.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Linux物理内存管理linux解决物理内存问题的方法外部碎片——伙伴算法内部碎片——slab缓存非连续内存区内存的分配——vmalloc()一、伙伴算法在linux中,频繁地请求和释放不同大小的一组连续页框,必然导致在已分配页框的块内分散了许多小块的空闲页框,即所谓的外部碎片。为此linux建立了一种健壮、高效的分配策略——伙伴算法,来解决外部碎片问题。伙伴算法:1、它把物理内存中的所有页面按照2的整数次幂(2n)进行划分,linux对物理内存进行11次划分,也就是有11个块链表每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续的页框这样划分后形成大小不同的存储块,称为页面块(页块)。包含一个页面的块称为1页块,包含两个页面的块称为2页块,依次类推。2、将每种页块按照它们的先后顺序两两结合成一对对的buddy“伙伴”,如:1页块中:0和1、2和3、4和5、…….;就是一对对的1页块buddy“伙伴”2页块中:0~1和2~3、4~5和6~7、8~9和10~11、…….就是一对对的2页块buddy“伙伴”3、对空闲区域的管理按照页块大小分组进行管理。系统设置了一个静态数组free_area[]来管理各个空闲页块组。在/mm/page_alloc.c中。伙伴系统(Buddysystem)特点:(1)分配块的大小均是2k;(2)分配和回收简单可利用空间表结构:伙伴算法思想:一、内存分配1、当收到内存分配请求时,系统照buddy算法,根据请求的页面数在空闲块数组对应的空闲页面组中有哪些信誉好的足球投注网站。2、若请求的页面不是2的整数次幂,则按照稍大于请求数的2的整数次幂的值有哪些信誉好的足球投注网站对应的页面块组。例如请求2个页面时,则有哪些信誉好的足球投注网站2页面块组,请求3个页面时,就有哪些信誉好的足球投注网站4页面块组。3、当有哪些信誉好的足球投注网站对应的页块组,而没有可利用的空闲页块时,再有哪些信誉好的足球投注网站更大一些的页块组,例如当查找4页块组没有可利用的空闲页块时,就再有哪些信誉好的足球投注网站8页块组。4、在找到可利用的空闲页块后,就按照请求的页面块数分配所需的页面。5、当某一空闲页面块被分配后,若仍有剩余的空闲页面,则根据剩余页面的大小把它们加入相应的空闲页块组中。初始状态伙伴算法中数据结构的定义数组的元素是一个个page结构体,每一个page结构对应一个物理页面,定义如下:typedefstructpage{structlist_headlist;/*指向页面所在链表中的下一页*/structaddress_space*mapping; /*指向正在映射的inode*/unsignedlongindex;//如果页面属于某个文件,代表页面在文件中的序号structpage*next_hash;/*指向页高速缓存哈希表中下一项*/atomic_tcount;/*共享该物理页面的进程计数*/unsignedlongflags;/*页面各种不同的属性*/structlist_headlru;/*lru链表指针,指向activelist*/wait_queue_head_twait;/*指向等待该页面的进程等待队列*/structpage**pprev_hash; /*与next_hash相对应*/structbuffer_head*buffers;/*当该页被用作磁盘块缓存时,指向缓存头部*/void*virtual;/*页面对应的虚地址*/structzone_struct*zone; /*页所在的内存管理区zone*/}mem_map_t;二、内存释放(其实内存分配算法的逆过程就是页框块的释放程,也是该算法名字的由来)1、当释放内存页面时,系统将这些页面回收并作为空闲页面看待。2、然后检查是否存在与这些页面相邻的其它空闲页块,若存在,则把它们合并为一个连续的空闲区。3、再按照buddy算法划分不同的页面块,并加到相应的页面块组中。二、slablinux经常出现内存分配并释放的对象,如进程描述符等,这些对象的大小一般比较小,如果直接采用伙伴系统来进行分配和释放,不仅会造成大量的内存碎片,而且处理速度也太慢,从而引入了slab机制slab工作原理:slab分配器是基于对象进行管理的,相同类型的对象归为一类(如进程描述符就是一类),每当要申请这样一个对象,slab分

您可能关注的文档

文档评论(0)

优美的文学 + 关注
实名认证
内容提供者

优美的文学优美的文学优美的文学优美的文学优美的文学

1亿VIP精品文档

相关文档