資源描述:
《內(nèi)存管理之linux內(nèi)存管理》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、張惠娟副教授hjzhang@sei.ecnu.edu.cnLinux內(nèi)存管理1內(nèi)容i386存儲管理單元Linux存儲管理思想物理內(nèi)存空間管理進(jìn)程虛擬空間管理請頁機(jī)制交換空間管理緩沖機(jī)制2MMU分段機(jī)制i386的存儲管理單元3i386的存儲管理單元MMUMMU由一個或一組芯片組成,其功能是把虛地址映射為物理地址,即地址轉(zhuǎn)換。80386以兩級方式實(shí)現(xiàn)地址轉(zhuǎn)換:第一級使用段機(jī)制,第二級使用分頁機(jī)制。在80386上,分頁機(jī)制是支持虛擬存儲器的最佳選擇。段機(jī)制使用可變大小的塊,使段機(jī)制較適合處理復(fù)雜系統(tǒng)的邏輯分區(qū)。4i386的存儲管理單元5分段機(jī)制段描
2、述符描述了段的基地址、界限及保護(hù)屬性,是一個8字節(jié)的數(shù)據(jù)結(jié)構(gòu),存放在段描述符表中。i386的存儲管理單元67上圖說明從圖中可以看出,一個段描述符指出了段的32位基地址和20位段界限(即段長)。第6個字節(jié)的G位是粒度位,當(dāng)G=0時,段長的表示格式為字節(jié)長度,即一個段最長可達(dá)1M字節(jié)。當(dāng)G=1時,段長表示段以4K字節(jié)為一頁的頁數(shù)目,即一個段最長可達(dá)1M*4K=4G字節(jié)。D表示缺省操作數(shù)大小,D=0,操作數(shù)為16位,如果D=1,操作數(shù)為32位。i386的存儲管理單元8描述符表在分段機(jī)制中,系統(tǒng)維護(hù)三種段表,稱為描述符表,即全局描述符表、局部描述符表
3、和中斷描述符表。描述符表本身占據(jù)的字節(jié)數(shù)為8的倍數(shù),空間大小在8個字節(jié)(至少含一個描述符)到64K字節(jié)(至多含8K個描述符)之間。i386的存儲管理單元9全局描述符表(GDT)全局描述符表包含著系統(tǒng)中所有任務(wù)都可用的那些描述符。局部描述符表(LDT)局部描述符表LDT包含了與一個給定任務(wù)有關(guān)的描述符,每一個任務(wù)都有一個各自LDT。i386的存儲管理單元10選擇器實(shí)模式下,段寄存器存儲的是真實(shí)段地址保護(hù)模式下,16位段寄存器無法訪問32位段地址,因此,被稱為選擇器,即段寄存器是用來選擇描述符的。i386的存儲管理單元11索引TI特權(quán)級別1532
4、1013位索引段選擇器結(jié)構(gòu)12上圖說明:TI是選擇域,TI=1,從局部描述符表中選擇相應(yīng)描述符,TI=0,從全局描述符表中選擇描述符。索引域給出該選擇符在GDT或LDT中的入口偏移量,選擇符高14位將虛擬地址空間分為16K個獨(dú)立段,其中8K個全局段和8K個局部段。第1、0位是特權(quán)級,表示選擇器特權(quán)級,稱為請求者特權(quán)級RPL。只有請求者特權(quán)級RPL高于或等于相應(yīng)描述符特權(quán)級DPL,描述符才能被存取,可以實(shí)現(xiàn)一定程度的保護(hù)。i386的存儲管理單元13描述符寄存器全局描述符表寄存器GDTR是一個48位的寄存器。低16位保持全局描述符表GDT大小,最
5、大為64K字節(jié),高32位保持GDT的段基地址。局部描述符表寄存器LDTR可見部分(即程序員可以操作的部分)只有16位,不可見部分有48位,放置局部描述符表的段基地址和界限。i386的存儲管理單元14分段方式下,尋址過程如下:在段選擇器中裝入16位數(shù),同時給出32位地址偏移量(比如在ESI、EDI中等等)。根據(jù)段選擇器中的索引值、TI及RPL值,再根據(jù)相應(yīng)描述符表寄存器中的段基地址和段界限,進(jìn)行一系列合法性檢查(如特權(quán)級檢查、界限檢查)若無異常,取出相應(yīng)描述符放入段描述符高速緩沖寄存器中。將描述符中的32位段基地址和放在ESI、EDI等中的32
6、位有效地址相加,就形成了32位物理地址。i386的存儲管理單元15i386的存儲管理單元16linux分段機(jī)制linux分頁機(jī)制Linux內(nèi)存管理實(shí)現(xiàn)Linux的存儲管理思想17Linux分段機(jī)制linux只定義了四種段寄存器的取值內(nèi)核代碼段0x10內(nèi)核數(shù)據(jù)段0x18用戶代碼段0x23用戶數(shù)據(jù)段0x28Linux的存儲管理思想18Linux的存儲管理思想19將上表和段選擇寄存器對比可知:表明:使用的都是GDT表運(yùn)行級別分為兩級:0和3Linux的存儲管理思想20GDT初始化信息在arch/i386/kernel/head.S中Linux的存儲
7、管理思想21對照段描述符的含義,可以得出結(jié)論:四個段描述符內(nèi)容下列內(nèi)容基本相同結(jié)論:所有段都是從0地址開始的4G虛空間,虛擬地址到線性地址的映射是取值不變。Linux的存儲管理思想22有區(qū)別的地方僅僅是下列部分結(jié)論:經(jīng)過如上段映射,之后需要開始進(jìn)行線性地址映射。Linux的存儲管理思想23Linux分頁機(jī)制控制寄存器CR0、CR3用CR0的PG位用來控制分頁機(jī)制:1,啟用分頁;0,禁止分頁。CR3用于指示頁目錄表的起始物理地址。Linux的存儲管理思想24兩級頁表結(jié)構(gòu)Linux的存儲管理思想25頁目錄項(xiàng)頁目錄項(xiàng)表最多可包含1024個頁目錄項(xiàng),
8、每個頁目錄項(xiàng)為4字節(jié),結(jié)構(gòu)如圖所示。Linux的存儲管理思想26Linux的存儲管理思想上圖說明:第0位是存在位,P=1,表示頁表地址指向的頁在內(nèi)存中,如果P=0,