虚拟存储器--虚拟地址与物理地址
計算機在執行程序時。需將代碼載入入內存中。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)或頁面調度.
總結
以上是生活随笔為你收集整理的虚拟存储器--虚拟地址与物理地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集合习题
- 下一篇: ruby 作为嵌入脚本时使用的注意事项