![內(nèi)核-內(nèi)存管理機(jī)制_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/14/2e58765f-f8f0-4651-bd77-830aee811910/2e58765f-f8f0-4651-bd77-830aee8119101.gif)
![內(nèi)核-內(nèi)存管理機(jī)制_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/14/2e58765f-f8f0-4651-bd77-830aee811910/2e58765f-f8f0-4651-bd77-830aee8119102.gif)
![內(nèi)核-內(nèi)存管理機(jī)制_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/14/2e58765f-f8f0-4651-bd77-830aee811910/2e58765f-f8f0-4651-bd77-830aee8119103.gif)
下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年超低頻傳感器標(biāo)定系統(tǒng)合作協(xié)議書
- 八年級(jí)上冊第一章復(fù)習(xí)導(dǎo)學(xué)案
- 新華東師大版七年級(jí)數(shù)學(xué)下冊《10章-軸對稱、平移與旋轉(zhuǎn)-10.5-圖形的全等》教案-162
- 2025年代理合同解除協(xié)議常用版(2篇)
- 2025年代合同標(biāo)準(zhǔn)樣本(2篇)
- 2025年五年級(jí)作文工作總結(jié)范例(二篇)
- 2025年五星級(jí)酒店保潔勞務(wù)合同協(xié)議(2篇)
- 2025年二年級(jí)老師個(gè)人教學(xué)工作總結(jié)模版(四篇)
- 熱點(diǎn)1-1 集合與復(fù)數(shù)(8題型+滿分技巧+限時(shí)檢測)(解析版)
- 2025年產(chǎn)品買賣協(xié)議燈具(2篇)
- 學(xué)校物業(yè)服務(wù)合同范本專業(yè)版
- SL 288-2014 水利工程施工監(jiān)理規(guī)范
- 部編版八年級(jí)語文上冊期末考試卷
- 2024年02月中央軍委后勤保障部2024年公開招考專業(yè)技能崗位文職人員筆試參考題庫附帶答案詳解
- (2024年)肺栓塞的護(hù)理課件
- 小學(xué)數(shù)學(xué)三年級(jí)下冊第八單元《數(shù)學(xué)廣角-搭配(二)》大單元集體備課整體設(shè)計(jì)
- (高清版)TDT 1031.6-2011 土地復(fù)墾方案編制規(guī)程 第6部分:建設(shè)項(xiàng)目
- 2024年江蘇省高中學(xué)業(yè)水平測試生物試卷
- 露天采場危險(xiǎn)有害因素辨識(shí)
- 蘇教版一年級(jí)上、下冊勞動(dòng)與技術(shù)教案
- 七上-動(dòng)點(diǎn)、動(dòng)角問題12道好題-解析
評(píng)論
0/150
提交評(píng)論