内存管理课件.pptVIP

内存管理课件.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

4.1.4連續物理區域管理1.Linux的Slab分配器單單分配頁面的分配器是不能滿足要求的。內核中大量使用各種數據結構,大小從幾個位元組到幾十上百K不等,都取整到2的冪次個頁面那是完全不現實的。2.0的內核的解決方法是提供大小為2、4、8、16、...、131056位元組的記憶體區域。需要新的記憶體區域時,內核從夥伴系統申請頁面,把它們劃分成一個個區域,取一個來滿足需求;如果某個頁面中的記憶體區域都釋放了,頁面就交回到夥伴系統。這樣做的效率不高。有許多地方可以改進:不同的數據類型用不同的方法分配記憶體可能提高效率。比如需要初始化的數據結構,釋放後可以暫存著,再分配時就不必初始化了。內核的函數常常重複地使用同一類型的記憶體區,緩存最近釋放的對象可以加速分配和釋放。對內存的請求可以按照請求頻率來分類,頻繁使用的類型使用專門的緩存,很少使用的可以使用類似2.0中的取整到2的冪次的通用緩存。使用2的冪次大小的記憶體區域時高速緩存衝突的概率較大,有可能通過仔細安排記憶體區域的起始地址來減少高速緩存衝突。緩存一定數量的對象可以減少對buddy系統的調用,從而節省時間並減少由此引起的高速緩存污染。Linux2.2內核實現的slab分配器體現了這些改進思想。主要數據結構有:kmem_cache_create/kmem_cache_destorykmem_cache_grow/kmem_cache_reap//增長/縮減某類緩存的大小kmem_cache_alloc/kmem_cache_free//從某類緩存分配/釋放一個對象kmalloc/kfree//通用緩存的分配、釋放函數。相關代碼見slab.c。vmalloc/vfree主要進行物理地址不連續,虛地址連續的記憶體管理。它使用kernel頁表。位於檔vmalloc.c,相對來說比較簡單。2.基於區的夥伴系統的設計和物理頁面的管理Linux2.4中的記憶體管理有很大的變化。在物理頁面管理上實現了基於區的夥伴系統(zonebasedbuddysystem)。區(zone)的是根據記憶體的不同使用類型劃分的。對不同區的記憶體使用單獨的夥伴系統(buddysystem)管理,而且獨立地監控空閒頁等。記憶體分配的兩大問題是:分配效率及碎片問題。一個好的分配器應該能夠快速的滿足各種大小的分配要求,同時不能產生大量的碎片浪費空間。夥伴系統是一個常用的比較好的演算法。引入區的概念是為了區分記憶體的不同使用類型(方法),以便更有效地利用。Linux2.4有三個區:DMA、Normal和HighMem。前兩個在Linux2.2中實際上也是由獨立的buddysystem管理的,但Linux2.2中還沒有明確的zone的概念。DMA區在x86體系結構中通常是小於16兆的物理記憶體區,因為DMA控制器只能使用這一段的記憶體。而HighMem是物理地址超過某個值(通常是約900M)的高端記憶體。其他的是Normal區內存。在Linux實現中,高地址的記憶體不能直接被內核使用。內核使用一種特殊的辦法,即使用CONFIG_HIGHMEM選項,來使用高地址的記憶體。HighMem只用於頁面高速緩衝和用戶進程。這樣分開的結果,是可以更有針對性地使用記憶體,不至於出現把DMA可用的記憶體大量給無關的用戶進程使用,導致驅動程式沒法得到足夠的DMA記憶體等情況。此外,每個區都獨立地監控本區記憶體的使用情況。在分配時,系統綜合考慮用戶的要求和系統現狀,判斷從哪個區分配比較合適。2.4裏分配頁面時可能會和高層的VM代碼交互(分配時根據空閒頁面的情況,內核可能從夥伴系統裏分配頁面,也可能直接把已經分配的頁收回(reclaim)等。實際上,在更高一層還有NUMA(NoneUniformedMemoryAccess)的支持。在一般的機器中,CPU對每個記憶體單元(動態隨機存取記憶體DRAM)的存取速度是一樣的。而NUMA是一種體系結構,對系統裏的每個處理器來說,不同的記憶體區域可能有不同的存取時間(一般是由記憶體和處理器的距離決定)。NUMA中訪問速度相同的一個記憶體區域稱為一個節點(node),NUMA的主要任務就是要儘量減少node之間的通信,使得每個處理器要用到的數據盡可能放在對它來說最快的node中。2.4內核中node的相應數據結構是pg_data_t,每個node擁有自己的memmap數組,把自己的記憶體分成幾個zone,每個zone再用獨立的夥伴系統管理物理頁面。整個分配器的主要介面是下麵的函數(參看mm.h及page_alloc.c):structpa

文档评论(0)

子不语 + 关注
官方认证
服务提供商

平安喜乐网络服务,专业制作各类课件,总结,范文等文档,在能力范围内尽量做到有求必应,感谢

认证主体 菏泽喜乐网络科技有限公司
IP属地未知
统一社会信用代码/组织机构代码
91371726MA7HJ4DL48

1亿VIP精品文档

相关文档