版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Linux Memory ManagerActions Microelectronics Co., Ltd.柯錦玲2021-10-21AgendaLinux對外提供的內存管對外提供的內存管理接口理接口linux 內存鏡像圖內存鏡像圖3 13 23 4Linux 內存管內存管理算法引見理算法引見3 3Linux如何防止如何防止內存碎片內存碎片Linux Imagev藍色字體部分v可用空間Linux 如何防止內存碎片v內存碎片內存碎片v內部碎片內部碎片: v系統為了滿足一小段內存區(qū)延續(xù)的系統為了滿足一小段內存區(qū)延續(xù)的需求,不得不分配了一大區(qū)域延續(xù)內存給需求,不得不分配了一大區(qū)域延續(xù)內存給它,從而呵
2、斥了空間浪費它,從而呵斥了空間浪費 v外部碎片外部碎片v系統雖有足夠的內存,但卻是分散的碎系統雖有足夠的內存,但卻是分散的碎片,無法滿足對大塊片,無法滿足對大塊“延續(xù)內存的需求延續(xù)內存的需求 Linux 如何防止內存碎片vlinux減少外部碎片減少外部碎片v同伴系統同伴系統(buddy算法算法)把內存塊按大小分組把內存塊按大小分組管理,一定程度上減輕了外部碎片的危害,管理,一定程度上減輕了外部碎片的危害,由于頁框分由于頁框分 配不在盲目,而是按照大小依配不在盲目,而是按照大小依次有序進展,不過同伴關系只是減輕了外次有序進展,不過同伴關系只是減輕了外部碎片,但并未徹底消除部碎片,但并未徹底消除
3、,但是同伴系統同但是同伴系統同時又帶來很多的內部碎片時又帶來很多的內部碎片vlinux減少外部碎片減少外部碎片vSLAB,SLUB,SLOB分配器使得一個頁面內分配器使得一個頁面內眾多小塊內存可獨立被分配運用,防止了眾多小塊內存可獨立被分配運用,防止了內部分片,節(jié)約了空閑內存內部分片,節(jié)約了空閑內存 Linux 如何防止內存碎片vlinux 內存管理層次關系圖內存管理層次關系圖1Linux 如何防止內存碎片vlinux 內存管理內存管理層次關系圖層次關系圖2Linux 內存管理算法引見內存管理算法引見v Buddy System算法原理算法原理v Buddy System是一種經典的內存管是一
4、種經典的內存管理算法。在理算法。在Unix和和Linux操作系統中操作系統中都有用到。其作用是減少存儲空間中都有用到。其作用是減少存儲空間中的空洞、減少碎片、添加利用率。防的空洞、減少碎片、添加利用率。防止外碎片的方法有兩種:止外碎片的方法有兩種:v a.利用分頁單元把一組非延續(xù)的空閑利用分頁單元把一組非延續(xù)的空閑頁框映射到延續(xù)的線性地址區(qū)間。頁框映射到延續(xù)的線性地址區(qū)間。v b.開發(fā)適當的技術來記錄現存的空閑開發(fā)適當的技術來記錄現存的空閑延續(xù)頁框塊的情況,以盡量防止為滿延續(xù)頁框塊的情況,以盡量防止為滿足對小塊的懇求而把大塊的空閑塊進足對小塊的懇求而把大塊的空閑塊進展分割。展分割。v 基于下面
5、三種緣由,內核選擇第二種基于下面三種緣由,內核選擇第二種防止方法:防止方法:v a.在某些情況下,延續(xù)的頁框確實必在某些情況下,延續(xù)的頁框確實必要。要。v b.即使延續(xù)頁框的分配不是很必要,即使延續(xù)頁框的分配不是很必要,它在堅持內核頁表不變方面所起的作它在堅持內核頁表不變方面所起的作用也是不容忽視的。假設修正頁表,用也是不容忽視的。假設修正頁表,那么導致平均訪存次數添加,從而頻那么導致平均訪存次數添加,從而頻繁刷新繁刷新TLB。v c.經過經過4M的頁可以訪問大塊延續(xù)的物的頁可以訪問大塊延續(xù)的物理內存,相對于理內存,相對于4K頁的運用,頁的運用,TLB未未命中率降低,加快平均訪存速度。命中率降
6、低,加快平均訪存速度。vv buddy算法將一切空閑頁框分組為算法將一切空閑頁框分組為11個塊鏈表,每個塊鏈個塊鏈表,每個塊鏈表分別包含表分別包含1,2,4,8,16,32,64,128,256,512,1024個延續(xù)的個延續(xù)的頁框,每個塊的第一個頁框的物理地址是該塊大小的整數頁框,每個塊的第一個頁框的物理地址是該塊大小的整數倍。如,大小為倍。如,大小為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個頁面?zhèn)€頁面v 同伴系統同伴系統(Buddy算法算法)分配的頁面物理上是延續(xù)的分配的頁面物理上是延續(xù)的,因此運用同伴系統因此運用同伴系統分配的內存大小最大為分配的內存大小最大為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、于一頁的內存塊比如存放文比如存放文件描畫符、進程描畫符、虛擬內存區(qū)域件描畫符、進程描畫符、虛擬內存區(qū)域描畫符等行為所需的內存都缺乏一頁。描畫符等行為所需的內存都缺乏一頁。這些用來存放描畫符的這些用來存放描畫符的 內存相比頁面而內存相比頁面而言,就好比是面包屑與面包。一個整頁言,就好比是面包屑與面包。一個整頁中可以聚集多個這種這些小塊內存;而中可以聚集多個這種這些小塊內存;而且這些小塊內存塊也和面包屑一樣頻繁且這些小塊內存塊也和面包屑一樣頻繁地生成地生成/銷毀。銷毀。為了滿足內核對這種小內存塊的需求,為了滿足內核對這種小內存塊的需求,Linux系統采用了一種被稱為系統采用了一種被稱為slab分配
11、器分配器的技術。的技術。Slab分配器的實現分配器的實現 相當復雜,相當復雜,但原理不難,其中心思想就是但原理不難,其中心思想就是“存儲池存儲池的運用。內存片段的運用。內存片段(小塊內存小塊內存)被看作對象,被看作對象,當被運用完后,并不直接釋放而是被緩當被運用完后,并不直接釋放而是被緩存到存到“存儲池里,留做下存儲池里,留做下 次運用,這無次運用,這無疑防止了頻繁創(chuàng)建與銷毀對象所帶來的疑防止了頻繁創(chuàng)建與銷毀對象所帶來的額外負載。額外負載。slab 分配器的主要構造分配器的主要構造 SLUBv2.6.22中的中的SLAB內存管理代碼將被內存管理代碼將被SLUB替代。替代。SLAB是經典的管理內
12、核的內存的代碼是經典的管理內核的內存的代碼,但是但是slab維維護了大量的對象隊列,這些隊列雖然可以很快地護了大量的對象隊列,這些隊列雖然可以很快地被分被分 配,但是過于復雜,而且維護所占用的空間配,但是過于復雜,而且維護所占用的空間會隨著系統節(jié)點的添加而急劇增長。會隨著系統節(jié)點的添加而急劇增長。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字節(jié)。字節(jié)。slob堆是一個單向列表,銜接了從堆是一個單向列表,銜接了從get_free_page獲得的頁面,從堆上按照獲得的頁面,從堆上按照first-f
15、it的原的原那么按照需求增長和分配。那么按照需求增長和分配。 l vmallocl 防止外部分片的最終思緒還是落到了如何利用不延續(xù)防止外部分片的最終思緒還是落到了如何利用不延續(xù)的內存塊組合成的內存塊組合成“看起來很大的內存塊看起來很大的內存塊這里的這里的情況很類似情況很類似 于用戶空間分配虛擬內存,內存邏輯上延于用戶空間分配虛擬內存,內存邏輯上延續(xù),其實影射到并不一定延續(xù)的物理內存上。續(xù),其實影射到并不一定延續(xù)的物理內存上。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字節(jié)字節(jié),所以頁表目錄大小為所以頁表目錄大小
18、為4KB ,正好一正好一頁頁v PTE(page table entry),頁面目錄入口表頁面目錄入口表,占用占用10bitv 每一每一PTE項占用項占用4字節(jié)字節(jié),所以頁表所以頁表(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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 檢察文檔管理數字化資料
- 第二屆全國小動物臨床技能大賽參考試題庫(含答案)
- 《網絡安全法》知識考試題庫300題(含答案)
- 2025年新疆交通職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 專題06 語法填空 解題技巧
- 2025年春季學期學校德育工作計劃安排表(完整版)
- 實驗室的租賃合同
- 范文汽車場地租賃合同
- 搭建冷庫及對設備的銷售安裝合同
- 建筑服務勞務合同范本
- 2025年有機肥行業(yè)發(fā)展趨勢分析報告
- 2023-2024年員工三級安全培訓考試題及參考答案(綜合題)
- 對口升學語文模擬試卷(6)-江西?。ń馕霭妫?/a>
- 2025保安部年度工作計劃
- 2024年江蘇經貿職業(yè)技術學院單招職業(yè)適應性測試題庫
- 招標采購基礎知識培訓
- 電力系統分布式模型預測控制方法綜述與展望
- 2024年注冊建筑師-二級注冊建筑師考試近5年真題附答案
- 五年級口算題卡每天100題帶答案
- 2024年貴州省中考理科綜合試卷(含答案)
- 無人機技術與遙感
評論
0/150
提交評論