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

下載本文檔

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

文檔簡介

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í)行的許多指令需要訪問內(nèi)存,看起來很簡單,在機(jī)器代碼指令中指定要提取或修改的內(nèi)存單元的地址就行了。其實(shí)沒有這么簡單。當(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)換為硬件對實(shí)際內(nèi)存的訪問。進(jìn)程按指令、數(shù)據(jù)和堆棧分成若干段每一段

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

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

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

5、為這一進(jìn)程在合適的位置分配它所需的內(nèi)存塊。在進(jìn)程存在期間也不用再改變內(nèi)存的分配。然而,有些UNIX版本要比上面的簡單模型更為靈活。例如,它允許進(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ī)提供的分頁(paging)功能。在CPU中是否進(jìn)行調(diào)頁由處理機(jī)控制寄存器中的1位來進(jìn)行控制。如果調(diào)頁位設(shè)置,32位的線性地址將一分為二。高20位用作頁號(hào),而低12位用作頁內(nèi)的位移地址。這表示32位的線性地址可以用來訪問100萬4KB頁。分頁所做的主要工作之一是將線性地址中提供的20位頁號(hào)轉(zhuǎn)換位對

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

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

8、有足夠的空間允許這樣做時(shí),將調(diào)用交換程序,它將選擇內(nèi)存中的一個(gè)或者幾個(gè)新進(jìn)程將它們寫到交換區(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í)行下去。利用分頁技術(shù)實(shí)現(xiàn)了交換功能,表示不需要將整個(gè)進(jìn)程交換到磁盤上,只要留出足夠的頁面供新的進(jìn)程運(yùn)行就行了。事實(shí)上,還有一種稱為按需調(diào)頁技術(shù)(demand paging)。為了實(shí)現(xiàn)按需調(diào)頁技術(shù),頁表中的描述符項(xiàng)需要提供說明本頁的內(nèi)容是否實(shí)際裝入內(nèi)存的信息。由了這一信息,當(dāng)CPU試圖訪問的頁不在內(nèi)存時(shí),將產(chǎn)生異常信息(或稱頁面故障)。這一異常信息將導(dǎo)致執(zhí)行異常處理程序,它將所需的頁面裝入實(shí)際內(nèi)存。導(dǎo)致頁面故障的指令將再次被執(zhí)行,這一次它的內(nèi)存訪問將是成功的。利用分頁技術(shù)將新的進(jìn)程裝入內(nèi)存是好的設(shè)想。出現(xiàn)的情況是當(dāng)運(yùn)行的進(jìn)程試圖在沒有裝入內(nèi)存的地址上執(zhí)行指令時(shí),將出現(xiàn)頁面故障,對它進(jìn)行處理后,進(jìn)程又可以繼續(xù)執(zhí)行下去。對執(zhí)行中的程序進(jìn)行的研究發(fā)現(xiàn):對一個(gè)適度大小的程序來講,在任何特定的允許時(shí)刻,大部分代碼并未得到執(zhí)行

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論