內(nèi)核-內(nèi)存管理機(jī)制_第1頁(yè)
內(nèi)核-內(nèi)存管理機(jī)制_第2頁(yè)
內(nèi)核-內(nèi)存管理機(jī)制_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、UNIX內(nèi)核內(nèi)存管理機(jī)制 內(nèi)存管理UNIX內(nèi)存管理是內(nèi)核最復(fù)雜的任務(wù)之一。重要因?yàn)樗玫皆S多CPU提供的功能,而且和這些功能關(guān)系密切。因此,在我們討論內(nèi)存管理時(shí),先要討論CPU及其在內(nèi)存管理中的作用。1.受保護(hù)的編址方式CPU執(zhí)行的許多指令需要訪問(wèn)內(nèi)存,看起來(lái)很簡(jiǎn)單,在機(jī)器代碼指令中指定要提取或修改的內(nèi)存單元的地址就行了。其實(shí)沒(méi)有這么簡(jiǎn)單。當(dāng)需要在內(nèi)存中同時(shí)運(yùn)行許多進(jìn)程時(shí),使每個(gè)進(jìn)程都好像在它們自己的機(jī)器上運(yùn)行一樣就方便了。做到這一點(diǎn)的辦法是在CPU內(nèi)部完成不同形式的地址轉(zhuǎn)換,將指令指定的地址(稱為邏輯地址或有效地址)轉(zhuǎn)換為硬件對(duì)實(shí)際內(nèi)存的訪問(wèn)。進(jìn)程按指令、數(shù)據(jù)和堆棧分成若干段每一段

2、都有段描述符(segment descriptor)。每一段描述符包含8個(gè)字節(jié)。內(nèi)容包括段開(kāi)始的基地址、段的容量和段的訪問(wèn)權(quán)限。段的描述符集中放在段描述表中。一個(gè)CPU內(nèi)部寄存器保存訪問(wèn)段描述符表的基地址。除此之外,CPU還包含一組段寄存器。每個(gè)寄存器指向描述表中的一個(gè)段描述符項(xiàng)。如果發(fā)生了任何類型的內(nèi)存訪問(wèn),將選擇一個(gè)CPU段寄存器(或者由訪問(wèn)內(nèi)存的類型的隱含說(shuō)明,或者由訪問(wèn)內(nèi)存的指令的明確說(shuō)明)用來(lái)進(jìn)行地址計(jì)算。計(jì)算的結(jié)果得到線性地址。這里說(shuō)得是每一次的內(nèi)存訪問(wèn),CPU都用一個(gè)內(nèi)部寄存器的內(nèi)容找到描述表的基地址?;刂泛鸵粋€(gè)段寄存器的內(nèi)容(它的最低3位的值為0)相加。相加的結(jié)果是指向描述符

3、表的一個(gè)8字節(jié)的項(xiàng)的指針。注意:段的描述府項(xiàng)包含段在內(nèi)存中的基地址,段的容量和對(duì)本段的訪問(wèn)權(quán)限。訪問(wèn)內(nèi)存的指令本身也提供一個(gè)地址,這個(gè)地址是已取得段描述符的內(nèi)存段內(nèi)部的邏輯地址(或有效地址)。指令的邏輯地址和段的基地址相加得到線性地址。必須對(duì)線性地址進(jìn)行檢查,保證它落在段的范圍內(nèi)(不超過(guò)段的容量),并檢查是否允許在段內(nèi)進(jìn)行請(qǐng)求的訪問(wèn)類型(讀、寫(xiě)或執(zhí)行)。如果這些檢查被通過(guò),CPU現(xiàn)在有了用來(lái)訪問(wèn)內(nèi)存的地址。我們已經(jīng)看到的段描述符主表稱為全程段描述表或者GDT,而指向GDT起點(diǎn)的CPU寄存器稱為GDTR.在多任務(wù)環(huán)境中,可能愿意每個(gè)進(jìn)程訪問(wèn)它自己的內(nèi)存段。為滿足這一要求,CPU也為每個(gè)進(jìn)程提供另

4、外一個(gè)描述符表,稱為局部描述符表或者LDT,它通過(guò)GDT的項(xiàng)和處理機(jī)內(nèi)部寄存器LDTR進(jìn)行訪問(wèn)。如果每次內(nèi)存訪問(wèn)都要查找描述符表(它本身又在內(nèi)存中)的值,這將消耗大量的CPU時(shí)間。為了大大加速這一過(guò)程,CPU內(nèi)部有一些隱藏的,不能由程序直接訪問(wèn)的寄存器。這些寄存器用作快速緩存,保存當(dāng)前每個(gè)段寄存器所指的段描述符的值。只有有關(guān)的段寄存器的值改變時(shí),或者描述符表的GDTR或LDTR的基地址改變時(shí),才用相應(yīng)的段描述符值加載隱藏的寄存器。 2.分頁(yè)技術(shù)在前面討論的組織內(nèi)存訪問(wèn)的功能的基礎(chǔ)上,可以建立起一個(gè)完全切實(shí)可行的多任務(wù)系統(tǒng)。只要在開(kāi)始運(yùn)行時(shí)每個(gè)進(jìn)程知道它實(shí)際需要的內(nèi)存容量,一開(kāi)始就可以

5、為這一進(jìn)程在合適的位置分配它所需的內(nèi)存塊。在進(jìn)程存在期間也不用再改變內(nèi)存的分配。然而,有些UNIX版本要比上面的簡(jiǎn)單模型更為靈活。例如,它允許進(jìn)程不必考慮周圍實(shí)際上還有其他的 進(jìn)程存在的現(xiàn)實(shí)而增加它的內(nèi)存要求。有的UNIX系統(tǒng)還允許同時(shí)運(yùn)行比實(shí)際內(nèi)存所能容納的更多的進(jìn)程。之所以能這樣做,因?yàn)槔昧颂幚頇C(jī)提供的分頁(yè)(paging)功能。在CPU中是否進(jìn)行調(diào)頁(yè)由處理機(jī)控制寄存器中的1位來(lái)進(jìn)行控制。如果調(diào)頁(yè)位設(shè)置,32位的線性地址將一分為二。高20位用作頁(yè)號(hào),而低12位用作頁(yè)內(nèi)的位移地址。這表示32位的線性地址可以用來(lái)訪問(wèn)100萬(wàn)4KB頁(yè)。分頁(yè)所做的主要工作之一是將線性地址中提供的20位頁(yè)號(hào)轉(zhuǎn)換位對(duì)

6、應(yīng)于機(jī)器實(shí)際4KB內(nèi)存頁(yè)的另一個(gè)20位頁(yè)號(hào)。結(jié)果是,任何實(shí)際4KB內(nèi)存頁(yè)可以出現(xiàn)在處理機(jī)線性地址空間的100萬(wàn)4KB頁(yè)邊界內(nèi)的任何位置。地址變換用內(nèi)存中的對(duì)照表完成,其中線性地址的高20位用作大的32位元素的數(shù)組的索引。從數(shù)組取得的32位值提供所需的20位轉(zhuǎn)換值,其余12位則用來(lái)指定類似下面的一些事項(xiàng):· 本頁(yè)允許讀、寫(xiě)還是只允許讀訪問(wèn)? · 本頁(yè)是用戶進(jìn)程訪問(wèn)頁(yè),還是管理進(jìn)程訪問(wèn)頁(yè)? · 是否對(duì)任何頁(yè)內(nèi)地址進(jìn)行了讀或?qū)懺L問(wèn)? · 是否對(duì)任何頁(yè)內(nèi)地址進(jìn)行了寫(xiě)操作? · 本頁(yè)在內(nèi)存中還是在磁盤(pán)上? 用兩級(jí)頁(yè)表取代單個(gè)大的頁(yè)表可以不必用很大的連續(xù)線

7、性地址空間來(lái)保存頁(yè)表,兩級(jí)頁(yè)表將線性地址空間的高20位劃分為兩個(gè)獨(dú)立的10位值。CPU的3號(hào)控制寄存器包含內(nèi)存中用作第一級(jí)頁(yè)目錄表的4KB的地址。每一4KB頁(yè)分成1024項(xiàng),每項(xiàng)占32位。線性地址中頁(yè)號(hào)的前10位正好用來(lái)選擇頁(yè)表中的項(xiàng)。這樣選出的32位包含20位實(shí)際頁(yè)號(hào),以及前面討論過(guò)的12位。段的增長(zhǎng)當(dāng)你希望從包圍在中間的內(nèi)存段(segment)中提高內(nèi)存容量時(shí),分頁(yè)技術(shù)顯得特別重要。交換分頁(yè)的另一個(gè)主要用途稱為交換(swapping)。交換概念的實(shí)質(zhì)在于允許在系統(tǒng)中同時(shí)運(yùn)行比內(nèi)存實(shí)際能容納的更多的進(jìn)程。這包括另外設(shè)置交換區(qū)(通常在磁盤(pán)上)作為內(nèi)存的溢出區(qū)。當(dāng)需要啟動(dòng)一個(gè)新的進(jìn)程而內(nèi)存中由沒(méi)

8、有足夠的空間允許這樣做時(shí),將調(diào)用交換程序,它將選擇內(nèi)存中的一個(gè)或者幾個(gè)新進(jìn)程將它們寫(xiě)到交換區(qū)中,留出內(nèi)存空間供新的進(jìn)程裝入和運(yùn)行。當(dāng)進(jìn)程運(yùn)行一段時(shí)間后,一些進(jìn)程因等待輸入/輸出而掛起。另一些進(jìn)程將結(jié)束,這就給交換出去的進(jìn)程調(diào)回內(nèi)存的機(jī)會(huì)(也可能將其他進(jìn)程交換出去作為代價(jià),使它們能繼續(xù)執(zhí)行下去。利用分頁(yè)技術(shù)實(shí)現(xiàn)了交換功能,表示不需要將整個(gè)進(jìn)程交換到磁盤(pán)上,只要留出足夠的頁(yè)面供新的進(jìn)程運(yùn)行就行了。事實(shí)上,還有一種稱為按需調(diào)頁(yè)技術(shù)(demand paging)。為了實(shí)現(xiàn)按需調(diào)頁(yè)技術(shù),頁(yè)表中的描述符項(xiàng)需要提供說(shuō)明本頁(yè)的內(nèi)容是否實(shí)際裝入內(nèi)存的信息。由了這一信息,當(dāng)CPU試圖訪問(wèn)的頁(yè)不在內(nèi)存時(shí),將產(chǎn)生異常信息(或稱頁(yè)面故障)。這一異常信息將導(dǎo)致執(zhí)行異常處理程序,它將所需的頁(yè)面裝入實(shí)際內(nèi)存。導(dǎo)致頁(yè)面故障的指令將再次被執(zhí)行,這一次它的內(nèi)存訪問(wèn)將是成功的。利用分頁(yè)技術(shù)將新的進(jìn)程裝入內(nèi)存是好的設(shè)想。出現(xiàn)的情況是當(dāng)運(yùn)行的進(jìn)程試圖在沒(méi)有裝入內(nèi)存的地址上執(zhí)行指令時(shí),將出現(xiàn)頁(yè)面故障,對(duì)它進(jìn)行處理后,進(jìn)程又可以繼續(xù)執(zhí)行下去。對(duì)執(zhí)行中的程序進(jìn)行的研究發(fā)現(xiàn):對(duì)一個(gè)適度大小的程序來(lái)講,在任何特定的允許時(shí)刻,大部分代碼并未得到執(zhí)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論