虛擬記憶體:詳細情形

发表于:2007-06-08来源:作者:点击数: 标签:
4.4. 虛擬記憶體:詳細情形 首先我們要先介紹一個新概念: 虛擬定址空間(virtual address space) 。虛擬定址空間指的是應用程式會用到的最大定址空間。虛擬定址空間與系統架構有關,因為虛擬定址空間能用到幾個位元,是由架構所定義的。虛擬定址空間也與作

4.4. 虛擬記憶體:詳細情形

首先我們要先介紹一個新概念:虛擬定址空間(virtual address space)。虛擬定址空間指的是應用程式會用到的最大定址空間。虛擬定址空間與系統架構有關,因為虛擬定址空間能用到幾個位元,是由架構所定義的。虛擬定址空間也與作業系統有關,因為它可能會在系統架構之上,加入額外的限制。

虛擬定址空間中的「虛擬」指的是可能會分給這應用程式的總空間,但「不是」安裝在系統中的實體記憶體,或應用程式任何時候可能用到的空間。

以我們剛剛的例子來說,虛擬定址空間為 15,000 位元組。

要製作虛擬記憶體,電腦系統需要有特別的記憶體管理硬體。這硬體通常被稱為記憶體管理單元(MMU,Memory Management Unit)。沒有 MMU 的話,當 CPU 存取記憶體時,實際的記憶體位址永遠不變 — 記憶體位址 123 永遠會在 RAM 的相同位置。

4.4. 虛擬記憶體:詳細情形

首先我們要先介紹一個新概念:虛擬定址空間(virtual address space)。虛擬定址空間指的是應用程式會用到的最大定址空間。虛擬定址空間與系統架構有關,因為虛擬定址空間能用到幾個位元,是由架構所定義的。虛擬定址空間也與作業系統有關,因為它可能會在系統架構之上,加入額外的限制。

虛擬定址空間中的「虛擬」指的是可能會分給這應用程式的總空間,但「不是」安裝在系統中的實體記憶體,或應用程式任何時候可能用到的空間。

以我們剛剛的例子來說,虛擬定址空間為 15,000 位元組。

要製作虛擬記憶體,電腦系統需要有特別的記憶體管理硬體。這硬體通常被稱為記憶體管理單元(MMU,Memory Management Unit)。沒有 MMU 的話,當 CPU 存取記憶體時,實際的記憶體位址永遠不變 — 記憶體位址 123 永遠會在 RAM 的相同位置。

不 過有了 MMU 之後,記憶體位址每次存取前,都會先轉譯過。這表示記憶體位址 123 可能一下會被轉到實際位址 82034,之後又被轉到 20468 去。這樣一來,為了追蹤虛擬到實體位置的轉譯過程,就必須監控成千上萬個記憶體位元組,造成極大的效能負荷。所以,MMU 會將記憶體切割成許多分頁(pages) — 連續的記憶體區段,每段的大小相同,並由 MMU 視為一個個獨立的個體。

紀錄這些分頁及分頁的位址轉譯過程聽起來像是多此一舉。但是,虛擬記憶體卻是非用不可的東西。基於這些原因,請想想以下一點。

還是以剛剛擁有 15,000 位元組虛擬定址空間的應用程式來看,假設應用程式的第一道指令就是存取位於位址 12374 的資料;但電腦所擁有的記憶體位址最多只到 12288,那會發生什麼事呢?

這種情況就叫做分頁錯誤(page fault)

4.4.1. 分頁錯誤

分頁錯誤指的是當程式試圖存取定址空間中的資料(或程式碼)時,這資料(或程式碼)卻不在系統記憶體裡的一連串情形。作業系統必須把資料放到該在的地方,以處理分頁錯誤的問題;同時也讓程式覺得好像分頁錯誤從來沒有發生過一樣。

以我們剛剛的例子來說,CPU 會把想找的資料位址(12374)傳給 MMU;然而 MMU 卻還未轉譯這個位址,只好向處理器發出中斷訊號,以執行稱為分頁錯誤處理程式(page fault handler)的軟體。這軟體會決定如何處理這分頁錯誤的問題。它會:

  • 找出欲存取的分頁在硬碟的哪個地方,將之讀入(在這情況下,讀入的通常會是程式碼)

  • 確定這分頁已經在主記憶體中(但尚未分配給目前的程序),並設定 MMU 指向這分頁

  • 指向一個完全空白(數值為零)的特殊分頁,如果程序試著寫入該分頁,那就分配一個新的分頁給這程序(這稱為「寫入即複製(copy on write)」分頁,通常給初始值全部為零的分頁使用)

  • 從其他地方取得需要的分頁(我們將在稍待一會兒,為您詳細探討)

前面三項都非常的乾脆直接;但最後一項則否。也因此,我們必須為您多做說明。

原文转自:http://www.ltesting.net