




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.8實(shí)例研究:Linux虛擬存儲(chǔ)管理4.8.1Linux存儲(chǔ)管理概述4.8.2進(jìn)程的虛擬地址空間4.8.3Linux物理內(nèi)存空間的管理4.8.4用戶態(tài)內(nèi)存的申請(qǐng)與釋放4.8.5內(nèi)存的共享和保護(hù)4.8.6交換空間、頁面的換出和調(diào)入4.8.7緩沖機(jī)制4.8.1Linux虛擬存儲(chǔ)管理概述(1)
Linux用戶進(jìn)程可訪問4GB線性地址空間。從0從3GB的虛擬內(nèi)存地址是用戶空間。3GB到4GB的虛擬內(nèi)存地址是內(nèi)核態(tài)空間,存放僅供內(nèi)核態(tài)訪問的代碼和數(shù)據(jù)。Linux虛擬存儲(chǔ)管理概述(2)
頁表分為三層:?頁目錄PGD、中間頁目錄PMD和頁表PTE。?Pentium計(jì)算機(jī)上被簡(jiǎn)化成兩層,PGD和PMD合二為一。?每個(gè)進(jìn)程有一個(gè)頁目錄,存儲(chǔ)該進(jìn)程所使用的內(nèi)存頁面情況Linux虛擬存儲(chǔ)管理概述(3)使用fork()創(chuàng)建進(jìn)程時(shí),分配內(nèi)存頁面的情況:進(jìn)程控制塊1頁;內(nèi)核態(tài)堆棧1頁;頁目錄1頁;頁表若干頁。使用exec()系統(tǒng)調(diào)用時(shí),分配內(nèi)存頁面的情況:可執(zhí)行文件的第1頁;用戶堆棧的1頁或幾頁。4.8.2Linux進(jìn)程的虛擬地址空間
進(jìn)程虛擬地址空間由許多個(gè)連續(xù)虛地址區(qū)域構(gòu)成,采用虛存段vma及其鏈表來表示。一個(gè)vma是某個(gè)進(jìn)程的一段連續(xù)虛存空間,這段虛存里的所有單元擁有相同特征,如屬于同一進(jìn)程、相同的訪問權(quán)限、同時(shí)被鎖定、同時(shí)受保護(hù)。數(shù)據(jù)結(jié)構(gòu)vm_area_struct描述(1)
structvm_area_struct{structmm-struct*vm_mm;/*虛存段參數(shù)*/unsignedlongvm_start;/*虛存段始址*/unsignedlongvm_end;/*虛存段末址*/pgprot_tvm_page_prot;unsignedshortvm_flags;
/*按地址分叉的vma的AVL樹*/shrotvm_avl_height;structvm_area_struct*vm_avl_left;structvm_area_struct*vm_avl_right;/*按地址分叉的vma鏈接指針*/structvm_area_struct*vm_next;/*或是在一個(gè)結(jié)點(diǎn)區(qū)雙向環(huán)鏈表中,或在共享內(nèi)存區(qū)映射表中,或未用*/structvm_area_struct*vm_next_share;structvm_area_struct*vm_prev_share;/*用于共享內(nèi)存*/數(shù)據(jù)結(jié)構(gòu)vm_area_struct描述(2)
數(shù)據(jù)結(jié)構(gòu)vm_area_struct描述(3)
structvm_operations_structvm_ops;/*封裝的操作如open,close*/unsignedlongvm_offset;/*相對(duì)文件中共享內(nèi)存起點(diǎn)的位移*/structinode*vm_inode;/*指向文件inode或NULL*/unsignedlongvm_pte;};
進(jìn)程任務(wù)結(jié)構(gòu)task_structmm內(nèi)存管理結(jié)構(gòu)mm_structmmappgd虛存段結(jié)構(gòu)vm_area_structvm_structvm_nextvm_op頁目錄表pgd頁表PTE頁表PTE頁框PF頁框PFvm_area_structvm_nextvm_area_struct*open*close*swapout..進(jìn)程虛存管理數(shù)據(jù)結(jié)構(gòu)4.8.3Linux物理內(nèi)存空間的管理物理內(nèi)存以頁框?yàn)閱挝?,長(zhǎng)度為4KB。對(duì)物理內(nèi)存的管理通過mem_map表描述,men-map是由men-map-t組成的數(shù)組,每個(gè)men-map-t描述一個(gè)物理頁框。
typedefstructpage主要內(nèi)容
page前后向鏈接指針
page頁cache和ha指針
page訪問進(jìn)程的計(jì)數(shù)
page狀態(tài)位和修改標(biāo)記頁幀內(nèi)存放代碼或數(shù)據(jù)所屬文件的inode
頁幀年齡,越小越先換出頁幀作為緩沖區(qū),則指示地址頁幀在mem_map表中的下標(biāo)
next0
ptev
mapnext1ptevmapnext2ptevmap...free_areabitmap每位對(duì)應(yīng)20頁每位對(duì)應(yīng)21頁每位對(duì)應(yīng)22頁。。1頁1頁2頁2頁4頁4頁mem_map_tbitmap與free-area的關(guān)系頁面分配和回收(1)所有的空閑物理頁幀組織成NR_MEM_LISTS的雙向鏈表,存儲(chǔ)在free_area數(shù)組中。每個(gè)鏈表節(jié)點(diǎn)的包括三個(gè)數(shù)據(jù)向:next和prev是鏈表指針,map指向bitmap表。頁面分配和回收(2)采用buddy算法分配空閑塊。當(dāng)請(qǐng)求分配長(zhǎng)度為2i個(gè)頁幀的塊時(shí),從free_area數(shù)組的第i條鏈表開始受搜索,如找不到,搜索第i+1條鏈表,以此類推。如果找到的空閑塊正好等于需求,直接把它從來鏈表中刪除,返回首地址。如果找到的空閑塊大于需求,則需要把它一分為二,前半部分插入前一條鏈表,取后半部分。如果還大,則繼續(xù)對(duì)分,取一半留一半,直至相等。同時(shí),bitmap表頁必須相應(yīng)調(diào)整頁面分配和回收(3)回收空閑塊時(shí),根據(jù)bitmap表中的對(duì)應(yīng)組,判斷回收塊的前后是否為空閑塊。若是則合并,并調(diào)整bitmap表對(duì)應(yīng)位,從free_area的相應(yīng)空閑鏈表中取下該空閑塊并歸還。這是一個(gè)遞歸過程,直到找不到空閑塊鄰居,將最大的空閑塊插入free_area的相應(yīng)空閑鏈表。4.8.4用戶態(tài)內(nèi)存的申請(qǐng)與釋放(1)
用戶進(jìn)程使用vmalloc()和vfree()函數(shù)申請(qǐng)和釋放大塊存儲(chǔ)空間,分配的存儲(chǔ)空間在進(jìn)程的虛地址空間中是連續(xù)的,但它對(duì)應(yīng)的物理頁框仍需缺頁中斷后,由缺頁中斷處理例程分配,所分配的頁框也不是連續(xù)的。用戶態(tài)內(nèi)存的申請(qǐng)與釋放(2)
vmalloc()和vfree()函數(shù),其執(zhí)行如下:申請(qǐng)時(shí)需給出申請(qǐng)的長(zhǎng)度,調(diào)用set-vm-area內(nèi)部函數(shù)向vmlist索取虛存空間。如果申請(qǐng)成功,將會(huì)在vmlist中插入一個(gè)vm-struct結(jié)構(gòu),并返回首地址,當(dāng)申請(qǐng)到虛地址空間后更改頁目錄和頁表。用戶態(tài)內(nèi)存的申請(qǐng)與釋放(3)
釋放時(shí)需給出虛擬空間首地址,沿著vmlist搜索要釋放的區(qū)域,找到表示該虛擬內(nèi)存塊的vm-struct結(jié)構(gòu),并從vmlist表中刪除,同時(shí)清除與釋放虛存空間有關(guān)的目錄項(xiàng)和頁表項(xiàng)。4.8.5內(nèi)存的共享和保護(hù)(1)
內(nèi)存共享以頁共享的方式實(shí)現(xiàn),共享該頁的各個(gè)進(jìn)程的頁表項(xiàng)直接指向共享頁,這種共享不需建立共享頁表,節(jié)省內(nèi)存,但效率較低。當(dāng)共享頁狀態(tài)發(fā)生變化時(shí),共享該頁的各進(jìn)程頁表均需修改,要多次訪問頁表。內(nèi)存的共享和保護(hù)(2)對(duì)進(jìn)程的虛擬地址加鎖或保護(hù),實(shí)質(zhì)是對(duì)vma段的vm_flags屬性與VM_LOCKED進(jìn)行或操作。虛存加鎖后,對(duì)應(yīng)的物理頁框駐留內(nèi)存,不再被頁面置換程序換出。加鎖操作有4種:對(duì)指定的一段虛擬空間加鎖或解鎖;對(duì)進(jìn)程所有的虛擬空間加鎖或解鎖。內(nèi)存的共享和保護(hù)(3)對(duì)進(jìn)程的虛擬地址空間實(shí)施保護(hù)操作是對(duì)vma段的vm_flags重置PROT_READ、PROT_WRITE和PROT_EXEC參數(shù),并重新設(shè)定vm_page_prot屬性。同時(shí),對(duì)虛擬地址范圍內(nèi)所有頁表項(xiàng)的訪問權(quán)限也做調(diào)整,保護(hù)操作由系統(tǒng)調(diào)用mprotect實(shí)施。4.8.6交換空間、頁面換出和調(diào)入
1、交換空間Linux采用兩種方式保存換出頁面。一是使用塊設(shè)備,如硬盤的一個(gè)分區(qū),稱作交換設(shè)備另一種是使用文件系統(tǒng)的一個(gè)文件,稱作交換文件。兩者統(tǒng)稱為交換空間。交換設(shè)備和交換文件的內(nèi)部格式(1)前4096個(gè)字節(jié)是以字符串“SWAP_SPACE”結(jié)尾的位圖。位圖的每位對(duì)應(yīng)一個(gè)交換空間的頁面,置位表示對(duì)應(yīng)的頁面可用于換頁操作。第4096字節(jié)后是存放換出頁面的空間。每個(gè)交換空間最多可以容納(4096-10)*8-1=32687個(gè)頁面,最多允許管理MAX_SWAPFILES(缺省值為8)個(gè)交換空間。交換設(shè)備和交換文件的內(nèi)部格式(2)交換設(shè)備中,屬于同一頁面的數(shù)據(jù)總是連續(xù)存放的,第一個(gè)數(shù)據(jù)塊地址一經(jīng)確定,后續(xù)的數(shù)據(jù)塊可按順序讀出或?qū)懭搿=粨Q文件中,同一頁面的數(shù)據(jù)雖然邏輯上是連續(xù)的,但實(shí)際的物理存儲(chǔ)是零散的,交換這樣的頁面,必須多次訪問磁盤扇區(qū),意味著磁頭的反復(fù)移動(dòng)、尋道時(shí)間的增加和效率的降低。
2頁交換進(jìn)程和頁面換出(1)
當(dāng)物理頁面不夠用時(shí),存儲(chǔ)管理必須釋放部分物理頁面,把它們的內(nèi)容寫到交換空間。內(nèi)核態(tài)交換線程kswapd完成這項(xiàng)功能。Kswapd不僅能夠把頁面換出到交換空間,也能保證系統(tǒng)中有足夠的空閑頁面以保持存儲(chǔ)管理系統(tǒng)高效的運(yùn)行。頁交換進(jìn)程和頁面換出(2)Kswapd在系統(tǒng)初啟時(shí)由init創(chuàng)建,調(diào)用init_swap_timer()函數(shù)設(shè)定,并轉(zhuǎn)入睡眠。每隔10ms響應(yīng)函數(shù)swap_tick()被周期性激活,它察看系統(tǒng)中空閑頁面是否太少,依次從三條途徑縮減物理頁面:(1)縮減pagecache和buffercache;(2)換出SYSTEMV共享內(nèi)存占用頁面;(3)換出或丟棄進(jìn)程占用頁面。3缺頁中斷和頁面換入(1)
當(dāng)進(jìn)程訪問了一個(gè)還沒有有效頁表項(xiàng)的虛擬地址時(shí),處理器將產(chǎn)生缺頁中斷,通知操作系統(tǒng),并把缺頁的虛擬地址(保存在CR2寄存器中)和缺頁時(shí)訪問虛存的模式一并傳給缺頁中斷處理程序。缺頁中斷和頁面換入(2)
根據(jù)控制寄存器CR2傳遞的缺頁地址,必須找到表示出現(xiàn)缺頁的虛擬存儲(chǔ)區(qū)的vm_area_struct結(jié)構(gòu),如果沒有找到,說明進(jìn)程訪問了非法存儲(chǔ)區(qū),系統(tǒng)發(fā)出信號(hào)告知進(jìn)程出錯(cuò)。系統(tǒng)檢測(cè)缺頁時(shí)訪問模式是否合法,如果進(jìn)程對(duì)該頁的訪問超越權(quán)限,系統(tǒng)也將發(fā)出信號(hào),通知進(jìn)程的存儲(chǔ)訪問出錯(cuò)。缺頁中斷和頁面換入(3)
通過以上兩步檢查,可以確定缺頁中斷是否合法,進(jìn)而進(jìn)程進(jìn)一步通過頁表項(xiàng)中的位P來區(qū)分缺頁對(duì)應(yīng)的頁面是在交換空間(P=0且頁表項(xiàng)非空)還是在磁盤中某一執(zhí)行文件映像的一部分。最后進(jìn)行頁面調(diào)入操作。4.8.7緩沖機(jī)制
虛存管理的緩沖機(jī)制主要包括:kmalloccacheswapcachepagecache1swapcache(1)如果被調(diào)出到交換空間的頁面由于進(jìn)程再次訪問而調(diào)入物理內(nèi)存,只要該頁面調(diào)入后未被修改過,它的內(nèi)容與交換空間中內(nèi)容是一樣的,交換空間中的備份是有效的。該頁再度換出時(shí),就不要執(zhí)行寫操作。采用swap-cache表描述的swapcache來實(shí)現(xiàn)這種思想。swapcache實(shí)質(zhì)上是關(guān)于頁表項(xiàng)的一個(gè)列表。
每一物理頁框都在swap-cache中占有一個(gè)表項(xiàng),表項(xiàng)的總數(shù)就是物理頁框總數(shù)。若該頁框內(nèi)容是新創(chuàng)建的;或雖曾換出過;但換出后,該頁框已被修改過時(shí),則該表項(xiàng)清0。內(nèi)容非0的表項(xiàng),正好是某個(gè)進(jìn)程的頁表項(xiàng),描述了頁面在交換空間中的位置。當(dāng)一個(gè)物理頁框調(diào)出到交換空間時(shí),它先查swapcache。如果其中有與該面對(duì)應(yīng)有效的頁表項(xiàng),那就不需要將該頁寫出,因?yàn)樵锌臻g中內(nèi)容與待換出的頁面是一致的。swapcache(2)2pagecache(1)
頁緩沖的作用是加快對(duì)磁盤文件的訪問速度。文件被映射到內(nèi)存中,每次讀取一頁,而這些頁就保存到pagecache中,用hash表h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度礦山事故水池建設(shè)與安全生產(chǎn)保障合同
- 二零二五年度城市別墅購房定金合同
- 2025年度景觀施工項(xiàng)目安全監(jiān)理合同
- 2025年度電視劇劇本編排與制作合同
- 二零二五年度廣告?zhèn)髅絼趧?wù)派遣員工服務(wù)合同
- 酒店住宿意外事故責(zé)任免除與2025年度安全保障協(xié)議
- 二零二五年度老年贍養(yǎng)贍養(yǎng)金及醫(yī)療救助合同
- 辦公區(qū)域搬遷安排及流程梳理通知
- 關(guān)于銷售團(tuán)隊(duì)建設(shè)與管理的年度工作總結(jié)報(bào)告
- 美發(fā)店勞動(dòng)合同協(xié)議書
- 2024解析:第十二章機(jī)械效率-基礎(chǔ)練(解析版)
- 建筑工程項(xiàng)目合作備忘錄
- 靈活用工管理
- 全媒體運(yùn)營(yíng)師試題庫(含答案)
- 2024至2030年中國(guó)礦用隔爆型監(jiān)控?cái)z像儀行業(yè)投資前景及策略咨詢研究報(bào)告
- 大學(xué)生職業(yè)素養(yǎng)訓(xùn)練(第六版)課件 第二單元學(xué)習(xí)職業(yè)禮儀
- 北京市燕山區(qū)中考一模英語試題及答案
- 腦卒中-腦卒中的康復(fù)治療
- 2024至2030年中國(guó)超聲波加工機(jī)床行業(yè)深度調(diào)研及發(fā)展預(yù)測(cè)報(bào)告
- 十七個(gè)崗位安全操作規(guī)程手冊(cè)
- 疫情統(tǒng)計(jì)學(xué)智慧樹知到答案2024年浙江大學(xué)
評(píng)論
0/150
提交評(píng)論