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