作業系統 - 虛擬記憶體



計算機可以定址的記憶體量超過系統上實際安裝的物理記憶體量。這部分額外的記憶體實際上稱為**虛擬記憶體**,它是硬碟上的一個分割槽,用於模擬計算機的 RAM。

此方案的主要可見優勢在於程式可以大於物理記憶體。虛擬記憶體有兩個用途。首先,它允許我們透過使用磁碟來擴充套件物理記憶體的使用。其次,它允許我們擁有記憶體保護,因為每個虛擬地址都被轉換為物理地址。

以下是整個程式不需要完全載入到主記憶體的情況。

  • 使用者編寫的錯誤處理例程僅在資料或計算中發生錯誤時使用。

  • 程式的某些選項和功能可能很少使用。

  • 許多表被分配了固定數量的地址空間,即使實際上只使用了該表的一小部分。

  • 能夠執行僅部分載入到記憶體中的程式將抵消許多好處。

  • 載入或交換每個使用者程式到記憶體所需的 I/O 次數將減少。

  • 程式將不再受可用物理記憶體量的限制。

  • 每個使用者程式都可以佔用更少的物理記憶體,可以同時執行更多程式,從而相應地提高 CPU 利用率和吞吐量。

用於通用用途的現代微處理器,記憶體管理單元或 MMU,內置於硬體中。MMU 的工作是將虛擬地址轉換為物理地址。下面給出一個基本示例:

Virtual Memory

虛擬記憶體通常透過按需分頁來實現。它也可以在分段系統中實現。按需分段也可用於提供虛擬記憶體。

按需分頁

按需分頁系統與帶交換的分頁系統非常相似,其中程序駐留在輔助儲存器中,並且頁面僅在需要時載入,而不是預先載入。當發生上下文切換時,作業系統不會將任何舊程式的頁面複製到磁碟或將任何新程式的頁面複製到主記憶體中。相反,它在載入第一個頁面後立即開始執行新程式,並在引用時獲取該程式的頁面。

Demand Paging

在執行程式期間,如果程式引用一個在主記憶體中不可用的頁面,因為該頁面不久前被交換出去了,則處理器將此無效記憶體引用視為**頁面錯誤**,並將控制權從程式轉移到作業系統以請求將頁面調回到記憶體中。

優點

以下是按需分頁的優點:

  • 大型虛擬記憶體。
  • 更有效地利用記憶體。
  • 多道程式設計的程度沒有限制。

缺點

  • 與簡單的分頁管理技術相比,處理頁面中斷的表數量和處理器開銷更大。

頁面置換演算法

頁面置換演算法是作業系統用來決定何時將哪些記憶體頁面交換出去、寫入磁碟的技術,當需要分配記憶體頁面時。當發生頁面錯誤並且無法使用空閒頁面進行分配時,就會發生分頁,原因是頁面不可用或空閒頁面數量低於所需頁面數量。

當選擇的要替換的頁面被換出時,如果再次引用該頁面,則必須從磁碟讀取它,這需要 I/O 完成。此過程決定了頁面置換演算法的質量:等待頁面調入的時間越短,演算法越好。

頁面置換演算法檢視硬體提供的關於訪問頁面的有限資訊,並嘗試選擇哪些頁面應該被替換以最大程度地減少頁面錯誤的總數,同時平衡演算法本身的主儲存器和處理器時間的成本。存在許多不同的頁面置換演算法。我們透過在特定的記憶體引用字串上執行演算法並計算頁面錯誤的數量來評估演算法。

引用字串

記憶體引用的字串稱為引用字串。引用字串是人工生成的,或者透過跟蹤給定系統並記錄每個記憶體引用的地址來生成的。後者會產生大量資料,我們注意到兩件事。

  • 對於給定的頁面大小,我們只需要考慮頁號,而不是整個地址。

  • 如果我們對頁面**p**有一個引用,那麼任何緊隨其後的對頁面**p**的引用都不會導致頁面錯誤。頁面 p 將在第一次引用後駐留在記憶體中;緊隨其後的引用不會出錯。

  • 例如,考慮以下地址序列:123、215、600、1234、76、96

  • 如果頁面大小為 100,則引用字串為 1、2、6、12、0、0

先進先出 (FIFO) 演算法

  • 主存中最舊的頁面將被選中以進行替換。

  • 易於實現,保持列表,從尾部替換頁面並在頭部新增新頁面。

First In First Out

最佳頁面演算法

  • 最佳頁面替換演算法具有所有演算法中最低的頁面錯誤率。存在最佳頁面替換演算法,稱為 OPT 或 MIN。

  • 替換最長時間內不會使用的頁面。使用頁面將要使用的時間。

Optimal page replacement

最近最少使用 (LRU) 演算法

  • 主存中最長時間未使用的頁面將被選中以進行替換。

  • 易於實現,保持列表,透過回顧時間替換頁面。

Least Recently Used

頁面緩衝演算法

  • 為了使程序快速啟動,請保留一個空閒幀池。
  • 發生頁面錯誤時,選擇一個頁面進行替換。
  • 將新頁面寫入空閒池的幀中,標記頁面表並重新啟動程序。
  • 現在將髒頁面寫入磁碟並將儲存替換頁面的幀放入空閒池中。

最不常用 (LFU) 演算法

  • 計數最小的頁面將被選中以進行替換。

  • 此演算法存在一個問題,即頁面在程序的初始階段被大量使用,但之後再也不會被使用。

最常用 (MFU) 演算法

  • 此演算法基於以下論點:計數最小的頁面可能剛剛被調入並且尚未被使用。

廣告