1. 程式人生 > >如何將計算機有限的記憶體分配給多個程式使用

如何將計算機有限的記憶體分配給多個程式使用

如何將計算機有限的記憶體分配給多個程式使用

需要解決下列問題:

  1. 地址空間不隔離
  2. 記憶體使用效率低
  3. 程式執行的地址不確定

增加中間層,使用間接的地址訪問方法。我們將程式給出的地址看成一種虛擬地址(Virtual Address),然後通過某種對映的方法,將虛擬地址轉換成實際的實體地址。

分段(Segmentation)

比如程式A需要10MB記憶體,我們假設有一個地址從0x00000000到0x00A00000的10MB大小的一個虛擬空間,然後由作業系統對映到實際的實體記憶體如0x00100000到0x00B00000,實際的地址轉換由硬體完成,當程式A訪問地址0x00001000,CPU會將這個地址轉換成實際的實體地址0x00101000。

分段可以解決上述問題1和問題3。首先它做到了地址隔離,不同的程式會被對映到不同的實體地址,如果程式訪問被分配的物理空間外面,硬體將會判斷這是一個非法地址,並將請求報給作業系統或監控程式,由它處理。另外,對於程式來說,它被分配到哪個地址段是透明的,它無需關心地址的變化。

但是分段依然沒有解決記憶體使用效率低的問題,如果記憶體不足,換入換出的是整個程式,從而影響速度,分頁(Paging)可以較好地解決這個問題。

分頁(Paging)

  • 虛擬頁:虛擬空間的頁(VP,Virtual Page)
  • 物理頁:實體記憶體中的頁(PP,Physical Page)
  • 磁碟頁:磁碟中的頁(DP,Disk Page)

分頁的基本方法是把地址空間人為地劃分成固定大小的頁,記憶體中放置需要使用的頁,部分沒有用到的頁可能在磁碟中,當程式執行時,根據虛擬地址計算出實際的實體記憶體地址,當需要的頁不在記憶體中時,即引發頁錯誤(Page Fault),此時將由作業系統接管,將相應的頁裝入記憶體。不同程式的虛擬頁可以對映到同一物理頁,實現記憶體共享。

  • MMU(Memory Management Unit):進行頁對映的硬體,一般整合在CPU中