進程是系統中運行的程序的一個實例,比如我們可以同時運行多個QQ程序,同時用Office打開多個文檔等等,而系統展現給我們的多進程界面其實是多個進程交替共享CPU和主存資源。但是,共享會帶來直接的問題,比如:如果有很多進程同時運行所要求的存儲容量可能會超過我們的物理存儲器,導致其中某些運行錯誤;或者進程修改了其他進程的存儲器,也會導致直接的運行錯誤。所以,為了更好地管理存儲器,現代系統引入了虛擬存儲器,以作為實際主存的上一層抽象,使得所有進程所占用的存儲空間獲得了一致的形式。這個方面主要有兩個主題:1.理解虛擬存儲器是如何工作的;2.應用程序如何使用和管理虛擬存儲器。今天我們先來理解一下虛擬存儲器的工作原理。
*******
物理和虛擬尋址
物理尋址——計算機系統的主存被組織成一個由M個連續字節組成的數組,可以記為0,1,2,3.。.M-1,每一個都有確定的物理地址(Physical Address,PA),早期的CPU直接發送物理地址給主存獲取數據和指令。
虛擬尋址——現代系統CPU中集成了地址翻譯硬件(MMU),可以將CPU識別的虛擬地址(VA)翻譯為主存對應的PA。
#引入虛擬存儲的一個好處就是,我們可以建立一個{VA}---》{PA}的映射,使得虛擬存儲地址空間可以大于實際的地址空間#
******
虛擬存儲器主要應用——緩存工具
如同我們在CPU和主存間加入高速緩存一樣,系統也在主存和硬盤間加入虛擬存儲來減少數據傳遞的時間。Windows下的虛擬內存就是一種虛擬存儲器。
&頁——虛擬存儲器(VM)與物理存儲器(PM)間數據交換的單位,虛擬頁存儲在磁盤上,物理頁緩存在DRAM(主存)中
&頁表——在物理存儲器中存儲著頁表(數據結構),這張頁表上記錄著虛擬頁到物理頁的映射,每條記錄稱之為頁表條目(Page Table Entry),基本格式為:有效位(1bit)+物理頁號或磁盤地址
系統運行時,CPU發送一個虛擬地址請求,在虛擬存儲器中的虛擬頁表上查找PTE,此時:
若匹配且有效位為“1”,則說明該數據已經緩存在主存中,直接讀取之后的物理頁號獲得數據;
若匹配但有效位為“0”,說明數據在VM上但沒有存到PM上,這時需要替換掉PM上的一個頁,來獲得所要求的頁;
實際中,所有現代系統都采用按需進行頁面調度的方式,即有請求才替換頁。
******
虛擬存儲器主要應用——存儲管理
直接的結果是,由于VM空間一般要大于PM空間,所以會出現共享PM空間地址的情況。比如進程需要使用相同的內核代碼,調用相同的系統函數,C標準庫中的函數。此時就可以多個進程共享一部分地址空間。節省了多進程的存儲空間要求。
******
虛擬存儲器的主要應用——存儲器保護
系統中有太多的數據不允許用戶隨便訪問和更改,比如進程的只讀文本段,比如內核中的代碼和數據,又比如其他進程的私有存儲器。所以現代系統不約而同地為OS提供手段來控制存儲器系統的訪問?,F實中可以在頁表中加入更多的有效位來控制對特殊頁面的讀寫操作,比如:
SUP位:是否只有超級用戶才有權限讀寫
READ:是否有讀權限
WRITE:是否有寫權限
******
地址翻譯
CPU向存儲器發送的是虛擬地址,這允許CPU直接面對的是抽象的一致的存儲器對象。但是這就需要MMU進行地址翻譯的工作。MMU會利用頁表基址寄存器來確定虛擬地址在虛擬頁表中的PTE,而后進行PA的轉換。主要步驟如下:
1.CPU生成一個虛擬地址發送給MMU
2.MMU生成PTE地址,并從高速緩存/主存請求得到它
3.高速緩存/主存向MMU返回PTE(記錄)
4.判斷:
若PTE有效位為真,則MMU讀取PTE中的物理地址,并發送給高速緩存/主存
5.高速緩存/主存返回所請求的數據給CPU
若判斷PTE有效位為假或失效,
6.MMU觸發一次異常,控制轉交給CPU異常控制處理程序
7.缺頁處理程序確定出PM中的犧牲頁,如果該頁已經被修改,則寫回磁盤
8.將缺頁處理程序調入新的頁面,并更新存儲器中的PTE
9.缺頁處理程序返回---》4
-
cpu
+關注
關注
68文章
10902瀏覽量
213006 -
計算機系統
+關注
關注
0文章
289瀏覽量
24211 -
虛擬存儲器
+關注
關注
0文章
12瀏覽量
8797 -
存儲管理
+關注
關注
0文章
31瀏覽量
9221 -
進程
+關注
關注
0文章
204瀏覽量
13995
發布評論請先 登錄
相關推薦
評論