虛擬存儲器


  一個系統中的進程是與其它進程共享CPU和主存資源的。

一、概述

1. 虛擬存儲器的概念

  現代計算機系統提供了一種對主存的抽象概念,叫做虛擬存儲器(VM)。

2. 虛擬存儲器的定義

  虛擬存儲器是硬件異常、硬件地址翻譯、主存、磁盤文件和內核軟件的完美交互,它為每個進程提供了一個大的、一致的和私有的地址空間。

3. 虛擬存儲器的功能

  (1)它將主存看成一個存儲在磁盤上的地址空間的高速緩存,在主存中只保留活動區域,並根據需要在磁盤和主存之間來回傳送數據;

  (2)他為每個進程提供了一致的地址空間,從而簡化了存儲器管理;

  (3)它保護了每個進程的地址空間不被其它進程破壞;

4. 虛擬存儲器的特點

  虛擬存儲器是中心的。虛擬存儲器遍及計算機系統的所有層面,在硬件異常、匯編器、鏈接器、加載器、共享對象、文件和進程的設計中扮演者重要角色。

  虛擬存儲器是強大的。虛擬存儲器給予應用程序強大的能力,可以創建和銷毀存儲器片(chunk)、將存儲器片映射到磁盤文件的某個部分,以及與其它進程共享存儲器。

  虛擬存儲器是危險的。應用程序每引用一個變量、間接引用一個指針,或者調用一個動態分配程序時,他就會和虛擬存儲器發生交互。

二、物理和虛擬尋址

  計算機系統的主存被組織成一個由M個連續的字節大小的單元組成的數組,每個字節都有一個唯一的物理地址(PA)。第一個字節的地址為0,依次類推,最后一個為M-1。

1. 什么是物理尋址?

  CPU訪問存儲器的最自然的方式就是使用物理地址。我們把這種方式稱為物理尋址。

2. 物理尋址的方式

  CPU執行指令時,會生成一個有效的物理地址,通過存儲器總線,把他傳遞給主存。主存從給定的地址進行讀數,並將它返回給CPU,CPU會把它存放在一個寄存器里。如下圖所示:

 3. 什么是虛擬尋址?

  虛擬尋址是現代計算機常用的一種尋址方式。其運行原理如下圖所示:

 

   使用虛擬尋址時,CPU通過生成一個虛擬地址(VA)來訪問主存,這個虛擬地址在被送到存儲器之前先轉換成適當的物理地址。將一個虛擬地址轉換為物理地址的任務叫做地址翻譯。就像異常處理一樣,地址翻譯需要CPU硬件和OS之間的緊密合作。

  CPU芯片上叫做存儲器管理單元(MMU)的專用硬件利用存放在主存中的查詢表來動態翻譯虛擬地址,該表的內容是由OS管理的。

三、地址空間

  地址空間是一個非負整數地址的有序集合。{ 0, 1, 2, ... }

1. 基本概念

  如果地址空間中的整體是連續的,那么我們說它是一個線性地址空間。

1.1 什么是虛擬地址空間?

  在一個帶有虛擬存儲器的系統中,CPU從一個有N=2n 個地址的地址空間中生成虛擬地址,這個地址空間稱之為虛擬地址空間。

1.2 什么是物理地址空間?

  一個系統還有一個物理地址空間,它與系統中地物理存儲器地M個字節相對應。例如:{ 0, 1, 2, ... , M - 1 }

2. 地址空間的大小

  一個地址空間的大小是由表示最大地址所需要的位數來描述的。例如:一個包含N=2n 個地址的虛擬地址空間,就叫做一個n位地址空間。現代系統典型地支持32位或者84位虛擬地址空間。

3. 地址空間的意義’

  地址空間這一概念,清晰的區分了數據對象(字節)和他們的屬性(地址)。將其推廣,則允許每個對象有多個獨立的地址,其中每個地址都選自一個不同的地址空間,這就是虛擬存儲器的基本思想。

  主存中的每個字節都有一個選自虛擬地址空間的虛擬地址和一個選自物理地址空間的物理地址。

四、虛擬存儲器作為緩存的工具

  概念上,VM被組織為一個由存放在磁盤上的N個連續的字節大小的單元組成的數組。每個字節都有一個唯一的虛擬地址。這個唯一的虛擬地址是作為到數組的索引的。磁盤上數組的內容都被緩存在主存中。

  和其它存儲器層次結構中其它緩存一樣,較低層(磁盤)上的數據被分割成塊,這些塊作為較低層和較高層(主存)之間的傳輸單元。

  VM系統通過虛擬存儲器分割稱為虛擬頁(VP)的大小固定的塊來處理這個問題。每個虛擬頁的大小為P = 2p 字節。類似的,物理存儲器被分割為物理頁(PP),大小也為P字節。(物理頁也稱之為頁幀)。

  在任意時刻,虛擬頁面的集合都分為三個不相交的子集:

    未分配的:VM系統還未分配(或創建)的頁。未分配的塊沒有任何數據和他們相關聯;

    緩存的:當前緩存在物理存儲器中的已分配頁;

    未緩存的:沒有緩存在物理存儲器中的已分配頁。

示例,如下圖所示:

 

 1.1 . DRAM緩存的組織結構

  SRAM緩存表示CPU與主存之間的高速緩存;DRAM緩存表示VM系統的緩存,他在主存中緩存虛擬頁。

  DRAM緩存不命中要由磁盤來服務,二SRAM緩存不命中通常是基於DRAM的主存來服務的。

  DRAM緩存是全相聯的,也就是說任何虛擬也都可以放置在任何的物理頁中。不命中的替換策略由操作系統負責。

1.2 頁表

  通任何緩存一樣,虛擬存儲器系統必須有某種方法來判定一個虛擬也是否存放在DRAM中的某個地方。如果是,系統還必須確定這個虛擬頁存放在那個物理頁中。如果不命中,系統必須判斷這個虛擬頁存放在磁盤的哪個位置,在物理存儲器中選擇一個犧牲頁,並將虛擬頁從磁盤拷貝到DRAM中,替換這個犧牲頁。

  這些功能是由許多軟硬件聯合提供的,包括操作系統軟件、MMU中的地址翻譯硬件和一個存放在物理存儲器中的叫做頁表的數據結構,頁表將虛擬頁映射到物理頁。每次地址翻譯硬件將一個虛擬地址轉換為物理地址時都會讀取頁表。操作系統負責維護頁表的內容,以及在磁盤與DRAM之間來回傳送頁。

  頁表就是要給頁表條目(PTE)的數組。虛擬地址空間中的每個頁在頁表中一個固定偏移量處都有一個PTE。為了我們的目的,我們將假設么個PTE是由一個有效位和一個n位地址字段組成的。其中,有效位表明了該虛擬也當前是否被緩存在DRAM中。如果設置了有效位,那么地址字段就表示DRAM中相應的物理頁的起始位置,這個物理頁中緩存了該虛擬頁。如果沒有設置有效位,那么一個空地址表示這個虛擬頁還未被分配。否則,這個地址就指向該虛擬頁在磁盤上的起始位置。

1.3 頁命中

  地址翻譯硬件將虛擬地址作為一個索引來定位pte2,並從存儲器中讀取它。因為設置了有效位,那么地址翻譯硬件就知道vp2時緩存在存儲器中的了。所以它使用pte中物理存儲器地址,構造出這個字的物理地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM