資源描述:
《linux內(nèi)核源碼學(xué)習(xí)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Linux內(nèi)核源碼學(xué)習(xí)--淺談內(nèi)存管理郭帆學(xué)習(xí)步驟?理論調(diào)研?Linux內(nèi)核的整體結(jié)構(gòu)?每個(gè)子系統(tǒng)的功能及子系統(tǒng)之間的聯(lián)系?子系統(tǒng)的組成模塊及對(duì)應(yīng)的詳細(xì)功能和基本原理?源碼閱讀(針對(duì)特定子系統(tǒng))?模塊分解(找到相應(yīng)的源文件)?熟悉主要數(shù)據(jù)結(jié)構(gòu)?閱讀源碼第一階段:理論調(diào)研?目標(biāo)?熟悉Linux內(nèi)核的整體架構(gòu)?熟悉各個(gè)子系統(tǒng)的功能及相互之間的聯(lián)系?熟悉子系統(tǒng)內(nèi)部的模塊組成及功能?方法?閱讀經(jīng)典書籍:《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》、《深入理解Linux內(nèi)核》等?博客、論壇等.1.1Linux內(nèi)核架構(gòu)?Linux內(nèi)核特點(diǎn):模塊化、分層、耦合度高1.2Linux內(nèi)存管理--機(jī)制?Linux采
2、用頁式內(nèi)存管理?應(yīng)用給出的地址是虛擬地址,需要通過查詢頁表轉(zhuǎn)換成物理內(nèi)存地址1.2內(nèi)存管理子系統(tǒng)--功能?功能:提供對(duì)虛擬內(nèi)存空間和物理內(nèi)存的管理0GB3GB4GBKernel虛擬內(nèi)存VirtualAddressSpaceUserSpace(Stack,Heap...)Space管理LinearMappedPageMapped物理內(nèi)存PhysicalMemory管理0GB1GB4GB1.2內(nèi)存管理子系統(tǒng)--架構(gòu)1.3內(nèi)存管理子系統(tǒng)--子模塊?物理內(nèi)存管理?物理內(nèi)存頁分配、回收、遷移、交換?虛擬內(nèi)存管理?虛擬內(nèi)存分配、內(nèi)存映射、頁表管理、虛擬空間管理?頁緩存管理?頁緩存的分配、管理
3、、預(yù)取、訪問?異常管理?內(nèi)存相關(guān)的異常管理機(jī)制1.3子模塊分析--分配與映射?C語言中的malloc在內(nèi)核中包含兩步?分配虛擬地址區(qū)間?訪問虛擬地址時(shí)分配物理頁,建立頁表映射?malloc(<128KB)操作的執(zhí)行流程?用戶態(tài)?應(yīng)用調(diào)用malloc申請(qǐng)內(nèi)存->malloc從空閑堆空間緩沖區(qū)鏈表申請(qǐng)內(nèi)存,若有內(nèi)存則返回,若不足則調(diào)用sys_brk()擴(kuò)充進(jìn)程的堆空間?內(nèi)核態(tài)1.在mm_struct中的堆上界brk延伸到newbrk:即申請(qǐng)一塊vma,vma.start=brkvma.end=newbrk2.當(dāng)進(jìn)程訪問其中某個(gè)虛擬地址,觸發(fā)缺頁中斷再申請(qǐng)物理頁并進(jìn)行映射第二階段:源碼
4、閱讀?目標(biāo)?熟悉每個(gè)源文件的功能?熟悉主要數(shù)據(jù)結(jié)構(gòu)?詳細(xì)分析特定模塊的源碼?方法:?從點(diǎn)切入,追蹤調(diào)用路徑?用調(diào)試手段分析源碼(printk、kgdb、dump_stack)?仔細(xì)閱讀注釋,參考源碼解讀2.1源文件分類?物理內(nèi)存管理?內(nèi)存分配?page_alloc:伙伴分配系統(tǒng)?debug-pagealloc:伙伴分配系統(tǒng)輔助函數(shù)?slab、slub、slob:基于伙伴系統(tǒng)之上的內(nèi)存分配算法?huge_memory、hugetlb:大頁模式的支持(分配)?slob:用于嵌入式的簡(jiǎn)單內(nèi)存分配器?slab_common:slab和slub共用的功能函數(shù)?bootmem:?jiǎn)?dòng)期間的內(nèi)存
5、分配器?memblock:初始化期間物理內(nèi)存塊的管理,是對(duì)bootmem的改進(jìn)替代?mmzone:managementcodesforpgdats,zonesandpageflags?mempool:內(nèi)存池,內(nèi)存資源極度緊張情況下使用,可保證無死鎖、內(nèi)存分配不會(huì)失敗?...2.1源文件分類?物理內(nèi)存管理?內(nèi)存回收與遷移?vmscan:內(nèi)存回收算法?compaction:內(nèi)存碎片整理(調(diào)用migrate)?migrate:MemoryMigrationfunctionality?內(nèi)存交換?swapfile:內(nèi)存頁交換到硬盤空間?swap:對(duì)物理頁換入換出的支持函數(shù)2.1源文件分類?
6、虛擬內(nèi)存管理?頁表(映射)建立與管理?memory:頁表映射管理(MMU)?huge_memory、hugetlb:大頁模式的支持(映射)?rmap:physicaltovirtualreversemappings?mmap:虛擬空間內(nèi)存管理(structmm_struct/structvm_area_struct)?mempolicy:內(nèi)存映射策略?vmalloc:虛擬內(nèi)存分配?bounce:高端內(nèi)存的臨時(shí)映射訪問機(jī)制?highmem:Highmemoryhandlingcommoncodeandvariables?pagewalk:頁表遍歷函數(shù)?pgtable-generic
7、:頁表幫助函數(shù)?mmu_context:任務(wù)的內(nèi)存地址空間切換?init-mm:初始化進(jìn)程的內(nèi)存地址空間2.2主要數(shù)據(jù)結(jié)構(gòu)分析?與物理內(nèi)存管理相關(guān)的數(shù)據(jù)結(jié)構(gòu)?內(nèi)存節(jié)點(diǎn)描述符:structpglist_data?記錄每個(gè)內(nèi)存(CPU)節(jié)點(diǎn)的內(nèi)存情況,例如包含幾個(gè)內(nèi)存區(qū)域(zone),以及node內(nèi)的頁框數(shù)?內(nèi)存區(qū)域描述符:structzone?記錄單個(gè)內(nèi)存節(jié)點(diǎn)內(nèi)部不同用途的內(nèi)存區(qū)域,例如ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM?頁描述符:structpag