日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--4.內(nèi)存管理

第三章 存儲管理

存儲管理子系統(tǒng)時(shí)操作系統(tǒng)中最重要的組成部分之一 。在早期計(jì)算時(shí)代,由于人們所需要的內(nèi)存數(shù)目遠(yuǎn)遠(yuǎn)大于物理內(nèi)存,人們設(shè)計(jì)出了各種各樣的策略來解決此問題,其中最成功的是虛擬內(nèi)存技術(shù) 。它使得系統(tǒng)中為有限物理內(nèi)存競爭的進(jìn)程所需內(nèi)存空間得到滿足 。

虛擬內(nèi)存技術(shù)不僅僅可讓我們可以使用更多的內(nèi)存,它還提供了以下功能:

巨大的尋址空間

操作系統(tǒng)讓系統(tǒng)看上去有比實(shí)際內(nèi)存大得多的內(nèi)存空間 。虛擬內(nèi)存可以是系統(tǒng)中實(shí)際物理空間的許多倍 。每個(gè)進(jìn)程運(yùn)行在其獨(dú)立的虛擬地址空間中 。這些虛擬空間相互之間都完全隔離開來,所以進(jìn)程間不會互相影響 。同時(shí),硬件虛擬內(nèi)存機(jī)構(gòu)可以將內(nèi)存的某些區(qū)域設(shè)置成不可寫 。這樣可以保護(hù)代碼與數(shù)據(jù)不會受惡意程序的干擾 。

內(nèi)存映射

內(nèi)存映射技術(shù)可以將映象文件和數(shù)據(jù)文件直接映射到進(jìn)程的地址空間 。在內(nèi)存映射中,文件的內(nèi)容被直接連接到進(jìn)程虛擬地址空間上 。

公平的物理內(nèi)存分配

內(nèi)存管理子系統(tǒng)允許系統(tǒng)中每個(gè)運(yùn)行的進(jìn)程公平地共享系統(tǒng)中的物理內(nèi)存 。

共享虛擬內(nèi)存

盡管虛擬內(nèi)存允許進(jìn)程有其獨(dú)立的虛擬地址空間,但有時(shí)也需要在進(jìn)程之間共享內(nèi)存 。例如有可能系統(tǒng)中有幾個(gè)進(jìn)程同時(shí)運(yùn)行BASH命令外殼程序 。為了避免在每個(gè)進(jìn)程的虛擬內(nèi)存空間內(nèi)都存在BASH程序的拷貝,較好的解決辦法是系統(tǒng)物理內(nèi)存中只存在一份BASH的拷貝并在多個(gè)進(jìn)程間共享 。動態(tài)庫則是另外一種進(jìn)程間共享執(zhí)行代碼的方式 。共享內(nèi)存可用來作為進(jìn)程間通訊(IPC)的手段,多個(gè)進(jìn)程通過共享內(nèi)存來交換信息 。Linux支持SYSTEM V的共享內(nèi)存IPC機(jī)制 。

3.1 虛擬內(nèi)存的抽象模型



圖3.1 虛擬地址到物理地址映射的抽象模型


在討論Linux是如何具體實(shí)現(xiàn)對虛擬內(nèi)存的支持前,有必要看一下更簡單的抽象模型 。

在處理器執(zhí)行程序時(shí)需要將其從內(nèi)存中讀出再進(jìn)行指令解碼 。在指令解碼之前它必須向內(nèi)存中某個(gè)位置取出或者存入某個(gè)值 。然后執(zhí)行此指令并指向程序中下一條指令 。在此過程中處理器必須頻繁訪問內(nèi)存,要么取指取數(shù),要么存儲數(shù)據(jù) 。

虛擬內(nèi)存系統(tǒng)中的所有地址都是虛擬地址而不是物理地址 。通過操作系統(tǒng)所維護(hù)的一系列表格由處理器實(shí)現(xiàn)由虛擬地址到物理地址的轉(zhuǎn)換 。

為了使轉(zhuǎn)換更加簡單,虛擬內(nèi)存與物理內(nèi)存都以頁面來組織 。不同系統(tǒng)中頁面的大小可以相同,也可以不同,這樣將帶來管理的不便 。Alpha AXP處理器上運(yùn)行的Linux頁面大小為8KB,而Intel X86系統(tǒng)上使用4KB頁面 。每個(gè)頁面通過一個(gè)叫頁面框號的數(shù)字來標(biāo)示(PFN)。

頁面模式下的虛擬地址由兩部分構(gòu)成:頁面框號和頁面內(nèi)偏移值 。如果頁面大小為4KB,則虛擬地址的 11:0位表示虛擬地址偏移值,12位以上表示虛擬頁面框號 。處理器處理虛擬地址時(shí)必須完成地址分離工作 。在頁表的幫助下,它將虛擬頁面框號轉(zhuǎn)換成物理頁面框號,然后訪問物理頁面中相應(yīng)偏移處 。

圖3.1給出了兩個(gè)進(jìn)程X和Y的虛擬地址空間,它們擁有各自的頁表 。這些頁表將各個(gè)進(jìn)程的虛擬頁面映射到內(nèi)存中的物理頁面 。在圖中,進(jìn)程X的虛擬頁面框號0被映射到了物理頁面框號4 。理論上每個(gè)頁表入口應(yīng)包含以下內(nèi)容:


有效標(biāo)記,表示此頁表入口是有效的
頁表入口描敘的物理頁面框號
訪問控制信息 。用來描敘此頁可以進(jìn)行哪些操作,是否可寫?是否包含執(zhí)行代碼?
虛擬頁面框號是為頁表中的偏移 。虛擬頁面框號5對應(yīng)表中的第6個(gè)單元(0是第一個(gè)) 。

推薦閱讀