日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--4.內(nèi)存管理( 三 )



3.1.2 交換
如果進(jìn)程需要把一個(gè)虛擬頁(yè)面調(diào)入物理內(nèi)存而正好系統(tǒng)中沒(méi)有空閑的物理頁(yè)面,操作系統(tǒng)必須丟棄位于物理內(nèi)存中的某些頁(yè)面來(lái)為之騰出空間 。

如果那些從物理內(nèi)存中丟棄出來(lái)的頁(yè)面來(lái)自于磁盤(pán)上的可執(zhí)行文件或者數(shù)據(jù)文件,并且沒(méi)有修改過(guò)則不需要保存那些頁(yè)面 。當(dāng)進(jìn)程再次需要此頁(yè)面時(shí),直接從可執(zhí)行文件或者數(shù)據(jù)文件中讀出 。

但是如果頁(yè)面被修改過(guò),則操作系統(tǒng)必須保留頁(yè)面的內(nèi)容以備再次訪問(wèn) 。這種頁(yè)面被稱(chēng)為dirty頁(yè)面,當(dāng)從內(nèi)存中移出來(lái)時(shí),它們必須保存在叫做交換文件的特殊文件中 。相對(duì)于處理器和物理內(nèi)存的速度,訪問(wèn)交換文件的速度是非常緩慢的,操作系統(tǒng)必須在將這些dirty頁(yè)面寫(xiě)入磁盤(pán)和將其繼續(xù)保留在內(nèi)存中做出選擇 。

選擇丟棄頁(yè)面的算法經(jīng)常需要判斷哪些頁(yè)面要丟棄或者交換,如果交換算法效率很低,則會(huì)發(fā)生"顛簸"現(xiàn)象 。在這種情況下,頁(yè)面不斷的被寫(xiě)入磁盤(pán)又從磁盤(pán)中讀回來(lái),這樣一來(lái)操作系統(tǒng)就無(wú)法進(jìn)行其他任何工作 。以圖3.1為例,如果物理頁(yè)面框號(hào)1被頻繁使用,則頁(yè)面丟棄算法將其作為交換到硬盤(pán)的侯選者是不恰當(dāng)?shù)?。一個(gè)進(jìn)程當(dāng)前經(jīng)常使用的頁(yè)面集合叫做工作集 。高效的交換策略能夠確保所有進(jìn)程的工作集保存在物理內(nèi)存中 。

Linux使用最近最少使用(LRU)頁(yè)面衰老算法來(lái)公平地選擇將要從系統(tǒng)中拋棄的頁(yè)面 。這種策略為系統(tǒng)中的每個(gè)頁(yè)面設(shè)置一個(gè)年齡,它隨頁(yè)面訪問(wèn)次數(shù)而變化 。頁(yè)面被訪問(wèn)的次數(shù)越多則頁(yè)面年齡越年輕;相反則越衰老 。年齡較老的頁(yè)面是待交換頁(yè)面的最佳侯選者 。



3.1.3共享虛擬內(nèi)存
虛擬內(nèi)存讓多個(gè)進(jìn)程之間可以方便地共享內(nèi)存 。所有的內(nèi)存訪問(wèn)都是通過(guò)每個(gè)進(jìn)程自身的頁(yè)表進(jìn)行 。對(duì)于兩個(gè)共享同一物理頁(yè)面的進(jìn)程,在各自的頁(yè)表中必須包含有指向這一物理頁(yè)面框號(hào)的頁(yè)表入口 。

圖3.1中兩個(gè)進(jìn)程共享物理頁(yè)面框號(hào)4 。對(duì)進(jìn)程X來(lái)說(shuō)其對(duì)應(yīng)的虛擬頁(yè)面框號(hào)為4而進(jìn)程Y的為6 。這個(gè)有趣的現(xiàn)象說(shuō)明:共享物理頁(yè)面的進(jìn)程對(duì)應(yīng)此頁(yè)面的虛擬內(nèi)存位置可以不同 。



3.1.4物理與虛擬尋址模式
操作系統(tǒng)自身也運(yùn)行在虛擬內(nèi)存中的意義不大 。如果操作系統(tǒng)被迫維護(hù)自身的頁(yè)表那將是一個(gè)令人惡心的方案 。多數(shù)通用處理器同時(shí)支持物理尋址和虛擬尋址模式 。物理尋址模式無(wú)需頁(yè)表的參與且處理器不會(huì)進(jìn)行任何地址轉(zhuǎn)換 。Linux核心直接運(yùn)行在物理地址空間上 。

Alpha AXP處理器沒(méi)有特殊的物理尋址模式 。它將內(nèi)存空間劃分為幾個(gè)區(qū)域并將其中兩個(gè)指定為物理映射地址 。核心地址空間被稱(chēng)為KSEG地址空間,它位于地址0xfffffc0000000000以上區(qū)域 。為了執(zhí)行位于KSEG的核心代碼或訪問(wèn)那里的數(shù)據(jù),代碼必須在核心模式下執(zhí)行 。Alpha上的Linux核心從地址0xfffffc0000310000開(kāi)始執(zhí)行.



3.1.5訪問(wèn)控制
頁(yè)表入口包含了訪問(wèn)控制信息 。由于處理器已經(jīng)將頁(yè)表入口作為虛擬地址到物理地址的映射,那么可以很方便地使用訪問(wèn)控制信息來(lái)判斷處理器是否在以其應(yīng)有的方式來(lái)訪問(wèn)內(nèi)存 。

諸多因素使得有必要嚴(yán)格控制對(duì)內(nèi)存區(qū)域的訪問(wèn) 。有些內(nèi)存,如包含執(zhí)行代碼的部分,顯然應(yīng)該是只讀的,操作系統(tǒng)決不能允許進(jìn)程對(duì)此區(qū)域的寫(xiě)操作 。相反包含數(shù)據(jù)的頁(yè)面應(yīng)該是可寫(xiě)的,但是去執(zhí)行這段數(shù)據(jù)肯定將導(dǎo)致錯(cuò)誤發(fā)生 。多數(shù)處理器至少有兩種執(zhí)行方式:核心態(tài)與用戶態(tài) 。任何人都不會(huì)允許在用戶態(tài)下執(zhí)行核心代碼或者在用戶態(tài)下修改核心數(shù)據(jù)結(jié)構(gòu) 。





圖3.2 Alpha AXP頁(yè)表入口


頁(yè)表入口中的訪問(wèn)控制信息是處理器相關(guān)的;圖3.2是Alpha AXP處理器的PTE(Page Table Entry) 。這些位域的含義如下:

推薦閱讀