虛擬存儲器--虛擬地址與物理地址

計算機在運行程序時,需將代碼加載入內存中,CPU讀取內存中的代碼並執行。

早期的計算機在沒有引入 虛擬存儲器之前,需將整個待運行的程序加載到內存中,因爲內存空間有限,當待加載的程序過大時就會出現問題(多進程,則需要佔用更多的內存空間)。

現代計算機引入虛擬存儲器的概念,通過將對內存進行抽象,將其作爲存儲在硬盤上數據的高速緩存,只將當前進程部分代碼緩存到主存中(當前進程的程序較少時,可以全部緩存在主存中),從而提高了主存的利用率,使其同時可以容納更多的進程同時運行。

簡述
虛擬存儲器是一個抽象概念,它爲每個進程提供一個假象,即每個進程都在獨立的使用主存。
每個進程看到的是一致的存儲器,稱爲虛擬地址空間。
地址空間最上面的區域是爲操作系統中的代碼和數據保留的,對所有的進程一樣。底部存放用戶進程定義的代碼和數據。
進程的虛擬地址空間如下圖:


虛擬存儲器是對主存的的一種抽象,基本思想:把一個進程虛擬存儲器的數據存儲在磁盤中,用主存作磁盤的緩存。即虛擬地址空間維護的是 磁盤中的數據,通過將要使用的數據緩存在主存中,使操作系統誤以爲數據一直在主存中(其實,只是在需要是在被緩存在主存中,如果長時間不需要則可能被swap出主存,存在磁盤中。ps:沒有VM概念之前,運行的程序必須全部存儲在主存中,引入之後,只需保證此時正被執行的代碼在主存中即可。VM大大提高了,主存的利用率,是同時可以有更多的進程可以運行)。




尋址方式:物理和虛擬尋址
早期通過 物理尋址的方式訪問主存,即主存中每個字節有一個唯一的物理地址,通過該物理地址,尋找該字節。
現在操作系統,通過虛擬尋址。CPU通過一個 虛擬地址來訪問主存,該地址在訪問主存之前被轉換爲一個物理地址。其中,轉換過程由 位於CPU中的MMU單元,通過訪問存儲在主存中的頁表完成。


地址空間的概念
線性地址空間:地址空間的數據是連續的
物理地址空間
虛擬地址空間
主存中每一個字節都有一個選自物理地址空間的物理地址和一個選自虛擬地址空間的虛擬地址。


數據映射:虛擬存儲器與物理存儲器中間的數據傳輸
虛擬存儲器 (VM) 被組織爲一個由存在在磁盤上的N個連續的字節大小單元組成的數組。每個字節都有一個唯一的虛擬地址作爲到數組的索引。
磁盤上的內容被緩存在主存中。通過將地址空間的數據進行分塊,利用塊大小作爲磁盤和主存之間的傳輸單元。其中,VM系統將VM(指被虛擬化的磁盤)分割爲稱爲虛擬頁(virtual page )大小的塊,物理存儲器(指主存)被分割爲稱爲物理頁(也成爲頁幀)大小的塊。物理頁與虛擬頁等大,通常爲4k, 從而完成數據映射。
虛擬存儲器將主存作爲緩存:


VM需要判斷一個虛擬頁是否被緩存在DRAM中;如果是,需確定存在哪個物理頁中。
如果不命中,需判斷這個虛擬頁存在磁盤的哪個位置,在物理存儲器中選擇一個犧牲頁,將虛擬頁從磁盤拷貝到DRAM中,並替換該犧牲頁,如果該犧牲頁數據發生了改變,則需要將該犧牲頁寫回磁盤。 該過程稱爲swap。


上述功能有操作系統,MMU,以及存放在物理存儲器中的頁表(每一個進程都有一個頁表,用於完成 虛擬地址到物理地址的映射)來完成。


頁命中與缺頁
即物理地址指數據在主存中的真實地址,虛擬地址是對主存的一種抽象,將存儲在磁盤的數據,緩存在主存上。


頁命中
CPU通過虛擬地址讀取在VP2中的虛擬存儲器中的數據(通過地址翻譯將虛擬地址作爲一個索引定位到PTE2,讀取VP2相關信息),VP2被緩存在DRAM中,使用PTE中的物理存儲器地址(該地址指向PP1緩存頁的起始地址),構造這個字的物理地址。


缺頁
DRAM緩存不命中稱爲缺頁,觸發缺頁異常,調用內核中的缺頁異常處理程序。在磁盤和存儲器之間傳送頁的活動稱之爲交換(swapping)或頁面調度.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章