《掌控记忆体》PPT课件(I)

《掌控记忆体》PPT课件(I)

ID:39526070

大小:249.50 KB

页数:22页

时间:2019-07-05

《掌控记忆体》PPT课件(I)_第1页
《掌控记忆体》PPT课件(I)_第2页
《掌控记忆体》PPT课件(I)_第3页
《掌控记忆体》PPT课件(I)_第4页
《掌控记忆体》PPT课件(I)_第5页
资源描述:

《《掌控记忆体》PPT课件(I)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Chapter7掌控記憶體7.1kmalloc的來龍去脈(1/3)kmalloc()定義在,其函式的速度很快,因為它不會清理所配置到的記憶體,記憶體仍保留先前留下的內容,且利用它所得到的記憶體空間在實際記憶體是連續的。void*kmalloc(size_tsize,intflags);kmalloc()的第一個引數為配置區塊之容量,第二個引數(allocationflags)為控制kmalloc()的行為。size引數介紹:核心只能以頁為單位來整塊配置,並且採用一種特殊的分頁配

2、置技術(page-orientedallocation),以充分利用系統的RAM.Linux處理記憶體配置的方法,是製作一組記憶體物件集散區(poolsofmemoryobjects),同一集散區的記憶物件都有固定容量.核心只能配置幾種預定容量的位元組陣列,如果沒有剛好你要的容量,你就必須選擇大一級的容量.在Linux2.0實際可用的用量稍微少於2的整數次方,因為管裡系統將控制旗標留在配置給你的記憶體上。如你要配置一個2000bytes的緩衝區,最好選擇2000而不要選擇2048.kmalloc()一次可配置

3、的容量上限是128KBytes.7.1kmalloc的來龍去脈(2/3)flags引數介紹:GFP_KERNEL平常的核心記憶體配置,配置到的記憶體空間屬於current行程.有可能休眠.GFP_BUFFER用於管理快取暫存區,容許配置者可以休眠.不同於GFP_KERNEL之處,在於它是藉由出清髒頁(dirtypage)到磁碟,以換取可用的記憶空間,此旗標的用意是避免I/O子系統本身有需要記憶體時引發了死結。GFP_ATOMIC供interrupthandler以及任何在行程外部的程式來配置記憶體.絕不會休眠

4、.7.1kmalloc的來龍去脈(3/3)GFP_USER代替user-process配置記憶體,有可能休眠,而且是屬於低優先度的要求。GFP_HIGHUSER類似GFP_USER,但是從高址劃分區取得可用空間。__GFP_DMA配置可供DMA傳輸使用的記憶體.可搭配(使用or運算)GFP_KERNEL或GFP_ATOMIC的其中之一。__GFP_HIGHMEM要求配置高址劃分區.在沒有高址劃分區的平台上,此旗標沒有作用.它是GFP_HIGHUSER遮罩的一部分,除此之外幾乎沒有作用。7.1.記憶體劃分區(m

5、emoryzone)Linux2.4認識三種記憶體劃分區:正常、DMA-capable、高址(highmemory).一般的配置動作都是從正常劃分區找空間.DMA劃分區是唯一可搭配週邊裝置進行DMA傳輸的位址段.並非所有實體記憶體都可以配合DMA操作,因為CPU-Device之間的位址匯流排,與Device-RAM之間的位址匯流排,只有部分是重疊的.高址劃分區是需要特別處理才能存取的位址段.在2.3版研發期間,為了支援PentiumIIVirtualMemoryExtension(VME)以存取高達64GB-

6、實體記憶體時,才將它納入核心記憶體管理.如沒指定特殊旗標,則正常劃分和DMA劃分區都會被搜尋.如果設立了__GFP_HIGHMEM,則三種劃分區都會被搜尋.對於沒有highmemory的平台,或是核心組態刻意關掉highmemory的支援,則__GFP_HIGHMEM會被定義為0,而且沒有效用.7.2前瞻快取(LookasideCaches)驅動程式經常需要一次又一次配置許多同樣大小的物件,為此核心提供一些特殊的集散區,稱之為前瞻快取.Linux記憶快取的型別為kmem_cache_t,可藉由呼叫kmem_c

7、ache_create()來產生:kmem_cache_t*kmem_cache_create(constchar*name,size_tsize,size_toffset,unsignedlongflags,void(*constructor)(void*,kmem_cache_t*,unsignedlongflags),void(*destructor)(void*,kmem_cache_t*,unsignedlongflags));name:同時代表函式與快取的符號,名稱最長不得超過19個字元(包含

8、’’在內).offset:第一個物件在記憶頁裡的起始位置,用來確保配置到的物件一定放在特定的對齊位置上,使用0來要求核心幫你完成.7.2前瞻快取(LookasideCaches)flags:SLAB_NO_REAP:保護快取不因系統記憶不足而縮減容量.通常不需要設立此旗標.SLAB_HWCACHE_ALIGN:要求每個資料物件都要對齊一條快取線.SLAB_CACHE_DMA:要求每個資料物件都

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。