版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第第頁一文詳解Linux虛擬內(nèi)存技術(shù)
接上文:(Linux)虛擬內(nèi)存基礎(chǔ)。
以存儲(chǔ)單元為單位來管理顯然不現(xiàn)實(shí),因此Linux把虛存空間分成若干個(gè)大小相等的存儲(chǔ)分區(qū),Linux把這樣的分區(qū)叫做頁。為了換入、換出的方便,物理內(nèi)存也就按頁的大小分成若干個(gè)塊。由于物理內(nèi)存中的塊空間是用來容納虛存頁的容器,所以物理內(nèi)存中的塊叫做頁框。頁與頁框是Linux實(shí)現(xiàn)虛擬內(nèi)存技術(shù)的基礎(chǔ)。
虛擬內(nèi)存的頁、物理內(nèi)存的頁框及頁表
在Linux中,頁與頁框的大小一般為4KB。當(dāng)然,根據(jù)系統(tǒng)和應(yīng)用的不同,頁與頁框的大小也可有所變化。
物理內(nèi)存和虛擬內(nèi)存被分成了頁框與頁之后,其存儲(chǔ)單元原來的地址都被自然地分成了兩段,并且這兩段各自代表著不同的意義:高位段分別叫做頁框碼和頁碼,它們是識(shí)別頁框和頁的編碼;低位段分別叫做頁框偏移量和頁內(nèi)偏移量,它們是存儲(chǔ)單元在頁框和頁內(nèi)的地址編碼。下圖就是兩段虛擬內(nèi)存和物理內(nèi)存分頁之后的情況:
為了使系統(tǒng)可以正確的訪問虛存頁在對應(yīng)頁框中的映像,在把一個(gè)頁映射到某個(gè)頁框上的同時(shí),就必須把頁碼和存放該頁映像的頁框碼填入一個(gè)叫做頁表的表項(xiàng)中。這個(gè)頁表就是之前提到的映射記錄表。一個(gè)頁表的示意圖如下所示:
頁模式下,虛擬地址、物理地址轉(zhuǎn)換關(guān)系的示意圖如下所示:
也就是說:(處理器)遇到的地址都是虛擬地址。虛擬地址和物理地址都分成頁碼(頁框碼)和偏移值兩部分。在由虛擬地址轉(zhuǎn)化成物理地址的過程中,偏移值不變。而頁碼和頁框碼之間的映射就在一個(gè)映射記錄表——頁表中。
請頁與交換
虛存頁面到物理頁框的映射叫做頁面的加載。
當(dāng)處理器試圖訪問一個(gè)虛存頁面時(shí),首先到頁表中去查詢該頁是否已映射到物理頁框中,并記錄在頁表中。如果在,則MMU會(huì)把頁碼轉(zhuǎn)換成頁框碼,并加上虛擬地址提供的頁內(nèi)偏移量形成物理地址后去訪問物理內(nèi)存;如果不在,則意味著該虛存頁面還沒有被載入內(nèi)存,這時(shí)MMU就會(huì)通知(操作系統(tǒng)):發(fā)生了一個(gè)頁面訪問錯(cuò)誤(頁面錯(cuò)誤),接下來系統(tǒng)會(huì)啟動(dòng)所謂的“請頁”機(jī)制,即調(diào)用相應(yīng)的系統(tǒng)操作函數(shù),判斷該虛擬地址是否為有效地址。
如果是有效的地址,就從虛擬內(nèi)存中將該地址指向的頁面讀入到內(nèi)存中的一個(gè)空閑頁框中,并在頁表中添加上相對應(yīng)的表項(xiàng),最后處理器將從發(fā)生頁面錯(cuò)誤的地方重新開始運(yùn)行;如果是無效的地址,則表明進(jìn)程在試圖訪問一個(gè)不存在的虛擬地址,此時(shí)操作系統(tǒng)將終止此次訪問。
當(dāng)然,也存在這樣的情況:在請頁成功之后,內(nèi)存中已沒有空閑物理頁框了。這是,系統(tǒng)必須啟動(dòng)所謂地(交換機(jī))制,即調(diào)用相應(yīng)的內(nèi)核操作函數(shù),在物理頁框中尋找一個(gè)當(dāng)前不再使用或者近期可能不會(huì)用到的頁面所占據(jù)的頁框。找到后,就把其中的頁移出,以裝載新的頁面。對移出頁面根據(jù)兩種情況來處理:如果該頁未被修改過,則刪除它;如果該頁曾經(jīng)被修改過,則系統(tǒng)必須將該頁寫回輔存。
系統(tǒng)請頁的處理過程如下所示:
為了公平地選擇將要從系統(tǒng)中拋棄的頁面,Linux系統(tǒng)使用
最近最少使用(LRU)頁面的衰老(算法)。這種策略根據(jù)系統(tǒng)中每個(gè)頁面被訪問的頻率,為物理頁框中的頁面設(shè)置了一個(gè)叫做年齡的屬性。頁面被訪問的次數(shù)越多,則頁面的年齡最小;相反,則越大。而年齡較大的頁面就是待換出頁面的最佳候選者。
快表
在系統(tǒng)每次訪問虛存頁時(shí),都要在內(nèi)存的所有頁表中尋找該頁的頁框,這是一個(gè)很費(fèi)時(shí)間的工作。但是,人們發(fā)現(xiàn),系統(tǒng)一旦訪問了某一個(gè)頁,那么系統(tǒng)就會(huì)在一段時(shí)間內(nèi)穩(wěn)定地工作在這個(gè)頁上。所以,為了提高訪問頁表的速度,系統(tǒng)還配備了一組正好能容納一個(gè)頁表的(硬件)(寄存器),這樣當(dāng)系統(tǒng)再訪問虛存時(shí),就首先到這組硬件寄存器中去訪問,系統(tǒng)速度就快多了。這組存放當(dāng)前頁表的寄存器叫做快表。
總之,使用虛擬存儲(chǔ)技術(shù)時(shí),處理器必須配備一些硬件來承擔(dān)內(nèi)存管理的一部分任務(wù)。承擔(dān)內(nèi)存管理任務(wù)的硬件部分叫做存儲(chǔ)管理單元MMU。存儲(chǔ)管理單元MMU的工作過程如下圖所示:
頁的共享
在多程序系統(tǒng)中,常常有多個(gè)程序需要共享同一段代碼或數(shù)據(jù)的情況。在分頁管理的存儲(chǔ)器中,這個(gè)事情很好辦:讓多個(gè)程序共享同一個(gè)頁面即可。
具體的方法是:使這些相關(guān)程序的虛擬空間的頁面在頁表中指向內(nèi)存中的同一個(gè)頁框。這樣,當(dāng)程序運(yùn)行并訪問這些相關(guān)頁面時(shí),就都是對同一個(gè)頁框中的頁面進(jìn)行訪問,而該頁框中的頁就被這些程序所共享。下圖是3個(gè)程序共享一個(gè)頁面的例子:
頁的保護(hù)
由上可知,頁表實(shí)際上是由虛擬空間轉(zhuǎn)到物理空間的入口。因此,為了保護(hù)頁面內(nèi)容不被沒有該頁面訪問權(quán)限的程序所破壞,就應(yīng)在頁表的表項(xiàng)中設(shè)置一些訪問控制字段,用于指明對應(yīng)頁面中的內(nèi)容允許何種操作,從而禁止非法訪問。
下圖是頁表項(xiàng)中存放控制信息的一種可能的形式:
注意:其中的PCD位表示著是否允許高速緩存(cache)。
如果程序?qū)σ粋€(gè)頁試圖進(jìn)行一個(gè)該頁控制字段所不允許的操作,則會(huì)引起操作系統(tǒng)的一次中斷——非法訪問中斷,并拒絕這種操作,從而保護(hù)該頁的內(nèi)容不被破壞。
多級頁表
需要注意的是,頁表是操作系統(tǒng)創(chuàng)建的用于內(nèi)存管理的表格。因此,一個(gè)程序在運(yùn)行時(shí),其頁表也要存放到內(nèi)存空間。如果一個(gè)程序只需要一個(gè)頁表,則不會(huì)有什么問題。但如果,程序的虛擬空間很大的話,就會(huì)出現(xiàn)一個(gè)比較大的問題。
比如:一個(gè)程序的虛擬空間為(4G)B,頁表以4KB為一頁,那么這個(gè)程序空間就是1M頁。為了存儲(chǔ)這1M頁的頁指針,那么這個(gè)頁表的長度就相當(dāng)大了,對內(nèi)存的負(fù)擔(dān)也很大了。所以,最好對頁表也進(jìn)行分頁存儲(chǔ),在程序運(yùn)行時(shí)只把需要的頁復(fù)制到內(nèi)存,而暫時(shí)不需要的頁就讓它留在輔存中。為了管理這些頁表頁,還要建立一個(gè)記錄頁表頁首地址的頁目錄表,于是單級頁表就變成了二級頁表。二級頁表的地址轉(zhuǎn)換如下圖所示:
當(dāng)然,如果程序的虛擬空間更大,那么也可以用三級頁表來管理。為了具有通用性,Linux系統(tǒng)使用了三級頁表結(jié)構(gòu):頁目錄(PageDirectory,PGD)、中間頁目錄(PageMiddleDirectory,PMD)、頁表(PageTable,PTE)。
Linux的頁表結(jié)構(gòu)
為了通用,Linux系統(tǒng)使用了三級頁表結(jié)構(gòu):頁目錄、中間頁目錄和頁表。PGD為頂級頁表,是一個(gè)p(gdt)數(shù)據(jù)類型的數(shù)組,每個(gè)數(shù)組元素指向一個(gè)中間頁目錄;PMD為二級頁表,是一個(gè)pmdt數(shù)據(jù)結(jié)構(gòu)的數(shù)組,每個(gè)數(shù)組元素指向一個(gè)頁表;PTE則是頁表,是一個(gè)pte_t數(shù)據(jù)類型的數(shù)組,每個(gè)元素中含有物理地址。
為了應(yīng)用上的靈活,Linux使用一系列的宏來掩蓋各種平臺(tái)的細(xì)節(jié)。用戶可以在配置文件config中根據(jù)自己的需要對頁表進(jìn)行配置,以決定是使用三級頁表還是使用二級頁表。
在系統(tǒng)編譯時(shí),會(huì)根據(jù)配置文件config中的配置,把目錄include/asm符號(hào)連接到具體(CPU)專用的文件目錄中。例如,對于i386CPU,該目錄符號(hào)會(huì)連接到include/asm-i386,并在文件pgable-2level-defs.h中定義了二級頁表的基本結(jié)構(gòu),如下圖:
其中還定義了:
#definePGDIR_SHIFT22//PGD在線性地址中的起始地址為bit22#definePT(RS)_PER_PGD1024//PGD共有1024個(gè)表項(xiàng)#definePTRS_PER_PTE1024//PTE共有1024個(gè)表項(xiàng)#endif在文件include/asm-i386/pgtable.h中定義了頁目錄和頁表項(xiàng)的數(shù)據(jù)結(jié)構(gòu),如下:
typedofstruct{unsignedlongpte_low;}pte_t;//頁表中的物理地址,頁框碼typedofstruct{unsignedlongpgd;}pgd_t;//指向一個(gè)頁表typedofstruct{unsignedlongpgprot;}pgprot_t;//頁表中的各個(gè)狀態(tài)信息和訪問權(quán)限從定義可知,它們都是只有一個(gè)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信鴻產(chǎn)業(yè)協(xié)議書
- 伊頓戰(zhàn)略協(xié)議書
- 2025年汽車金融貸款服務(wù)合同協(xié)議
- 《旅行社定制旅游產(chǎn)品開發(fā)與消費(fèi)者滿意度提升策略研究》教學(xué)研究課題報(bào)告
- 企業(yè)培訓(xùn)需求分析模板深度挖掘
- 跨學(xué)科融合視角下數(shù)字教育資源在高校圖書館數(shù)字資源評估中的應(yīng)用研究教學(xué)研究課題報(bào)告
- 秋天的楓葉讀后感(10篇)
- 企業(yè)法務(wù)合同審核標(biāo)準(zhǔn)流程模板
- 品質(zhì)貫穿一生教育承諾書5篇范文
- 2026年中國數(shù)控刀具市場運(yùn)行格局及投資戰(zhàn)略研究報(bào)告
- 2025年上海市辦公室租賃合同示范文本
- 2025年新疆第師圖木舒克市公安招聘警務(wù)輔助人員公共基礎(chǔ)知識(shí)+寫作自測試題及答案解析
- 物業(yè)巡檢標(biāo)準(zhǔn)課件
- 羽絨服美術(shù)課件
- 堤防工程施工規(guī)范(2025版)
- 2025天津宏達(dá)投資控股有限公司及所屬企業(yè)招聘工作人員筆試備考試題及答案解析
- 統(tǒng)編版高中語文選擇性必修中冊《為了忘卻的記念》課件
- 含微生物有機(jī)無機(jī)復(fù)合肥料編制說明
- 溝通的藝術(shù)(湖南師范大學(xué))學(xué)習(xí)通網(wǎng)課章節(jié)測試答案
- 煤礦下井車司機(jī)培訓(xùn)課件
- 強(qiáng)夯機(jī)安全操作知識(shí)培訓(xùn)課件
評論
0/150
提交評論