資源描述:
《Linux內(nèi)核分析.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Linux內(nèi)核分析Linux引導(dǎo)和初始化Linux引導(dǎo)簡述Linux初始化(head.S)0~0xfff0x1000~0x9ffff0xa0000~0xbffff0xc0000~0xc7fff0xf0000~0xfffff0xc8000~0xdffffLinux引導(dǎo)和初始化0~0x1000:BIOS0xa0000~0xbffff:VideoRAM0xc0000~0xc7fff:VideoROM0xc8000~0xdffff:ExtensionROM0xf0000~0xfffff:SystemROM內(nèi)核映像駐存在:0x100000~Linux引
2、導(dǎo)和初始化段寄存器初始化CS,DS,ES,SS保護模式初始化EnableMMU映射0x0~0x800000?0xc0000000~0xc0800000.根據(jù)ABI386標準,系統(tǒng)空間從0xc0000000開始。內(nèi)存管理Linux虛擬空間結(jié)構(gòu)0xc0000000~0xf7ffffff(系統(tǒng)空間)用戶空間(低3G空間)用戶空間(低3G空間)用戶空間(低3G空間)內(nèi)存管理0xc0000000~0xf7ffffff:系統(tǒng)空間,896M0xf7ffffff~0xffffffff:用于vmalloc,128M內(nèi)存管理系統(tǒng)空間初始化E820中斷獲取RAM資
3、源系統(tǒng)初始化物理空間0~896M構(gòu)造內(nèi)存頁面位圖,用于初始階段的內(nèi)存分配。內(nèi)存管理MMU0x0~0x38000000?0xc0000000~0xf8000000頁面大?。?K32位地址:22bit~31bit:頁目錄索引12bit~21bit:頁面索引0bit~11bit:頁內(nèi)位移內(nèi)存管理MMU01….1023….….01…..102301….1023內(nèi)存管理分配頁結(jié)構(gòu)系統(tǒng)中每個物理頁面相應(yīng)有一個物理頁結(jié)構(gòu)。每個頁結(jié)構(gòu)對應(yīng)物理的一個頁面。內(nèi)存管理Zone管理系統(tǒng)空間被分為3個zone.DMA:0~16M(0xc0000000~0
4、xc0100000)NORMAL:16M~896M(0xc0100000~0xf8000000)HIGHMEMORY:896M以上內(nèi)存管理Zone頁面管理zone中的頁面是按著buddy算法管理。什么是buddy算法?Buddy算法管理的頁面:從1個至512個連續(xù)頁面。內(nèi)存管理系統(tǒng)空間DMA區(qū)(按buddy算法管理1~512個連續(xù)頁面)NORMAL區(qū)(按buddy算法管理1~512個連續(xù)頁面)HIGHMEM區(qū)(按buddy算法管理1~512個連續(xù)頁面)內(nèi)存管理Slab高速緩存什么是slab?Slab和高速緩存關(guān)系。如何利用高速緩
5、存。(染色算法)什么是染色算法。內(nèi)存管理通用slab32字節(jié)~128k字節(jié)專用slabprocslabcache.Vfsslabcache.……內(nèi)存管理系統(tǒng)內(nèi)存管理結(jié)構(gòu)DMAZONEBuddy結(jié)構(gòu)slabNORMALZONEBuddy結(jié)構(gòu)slabHIGHMEMZONEBuddy結(jié)構(gòu)內(nèi)存管理建立私有slabcachekmem_cache_create功能:建立slabcache參數(shù):name:slabcache名字。Size:slab對象大小,對象大小小于32個頁面(128k)Offset:頁面偏移量。Flags:對齊屬性Ctor:對
6、象創(chuàng)建函數(shù)Dtor:對象釋放函數(shù),為空返回值:slabcache管理區(qū),即kmem_cache_s結(jié)構(gòu)。內(nèi)存管理從私有slab管理區(qū)中分配slab對象kmem_cache_alloc功能:從slab中分配一個對象參數(shù):cachep:slabcache管理結(jié)構(gòu),即mem_cache_s.flag:建立slabflag返回值:slab中的對象。內(nèi)存管理釋放私有slab對象__kmem_cache_free功能:釋放slab隊列中對象。參數(shù):cachep:slabcache管理區(qū)objp:釋放對象。內(nèi)存管理從通用slabcache中分配對象
7、Kmalloc功能:從通用SLAB隊列中分配空間參數(shù):size:空間大小(32~128K)flag:分配flag,如果為DMA,從通用SLAB的DMA隊列中分配。內(nèi)存管理釋放通用slabcache對象Kfree功能:釋放通用slab對象參數(shù):objp:釋放的對象。內(nèi)存管理從buddy管理區(qū)中分配頁面__get_free_pages功能:分配頁面參數(shù):gfp_mask:分配策略,即從DMA,NORMAL,或HIGHzone分配頁面。Order:分配頁面的大小,2的冪,小于10。內(nèi)存管理釋放分配的頁面__free_pages功能:釋放頁面
8、參數(shù):page:釋放的頁面。Order:頁面大小,2的冪。內(nèi)存管理虛擬地址轉(zhuǎn)換為物理地址__pa(addr)addr–0xc0000000物理地址轉(zhuǎn)換為虛擬地址_