1. 程式人生 > >虛擬儲存器--虛擬地址與實體地址

虛擬儲存器--虛擬地址與實體地址

計算機在執行程式時,需將程式碼載入入記憶體中,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)或頁面排程.