計算機操作系統--內存管理(四)


 

1.虛擬內存

虛擬內存的目的是為了讓物理內存擴充成更大的邏輯內存,從而讓程序獲得更多的可用內存。

為了更好的管理內存,操作系統將內存抽象成地址空間。每個程序擁有自己的地址空間,這個地址空間被分割成多個塊,每一塊稱為一頁。這些頁被映射到物理內存,但不需要映射到連續的物理內存,也不需要所有頁都必須在物理內存中。當程序引用到不再物理內存中的頁時,由硬件執行必要的映射,將缺失的部分裝入物理內存並重新執行失敗的指令。

從上面的描述可以看出,虛擬內存允許程序不用將地址空間的每一頁都映射到物理內存,也就是說,一份程序不需要全部調入內存就可以運行,這使得有限的內存運行大程序成為可能。例如,有一台計算機可以產生16位地址,那么一個程序的地址空間范圍是0 ~ 64k。該計算機只有32KB的物理內存,虛擬內存技術允許該計算機運行一個64k大小的程序。

 

 

2.分頁系統地址映射

  內存管理單元(MMU)管理着地址空間和物理內存的轉換,其中的頁表(page table)存儲着頁(程序地址空間)和頁框(物理內存空間)的映射表。

  一個虛擬地址分成兩個部分,一部分存儲頁面號,一部分存儲偏移量。物理地址 = 頁面始址 + 頁內偏移量

  下圖的頁表存放着16個頁,這16個頁需要用4個比特來索引定位。例如對於虛擬地址(0010 000000000100),前4位是存儲頁面號2的,讀取表項內容為(1101),頁表項最后一位表示是否存在於內存中,1表示存在。后12位存儲偏移量。這個頁對應的頁框的地址為(1100 00000000100)

 

3.頁面置換算法

在程序運行過程中,如果要訪問的頁面不在內存中,就發生缺頁中斷,從而將該頁調入內存。此時,如果內存已無空閑空間,則系統必須從內存中調出一個頁面到磁盤對換區中來騰空間。

頁面置換算法和緩存淘汰策略類似,可以將內存看成磁盤的緩存。在緩存系統中,緩存的大小有限,當有新的緩存到達時,需要淘汰一部分已經存在的緩存,這樣才有空間存放新的緩存數據。

頁面置換算法的主要目標是使頁面置換頻率最低(或者說是缺頁率最低)。

1.最佳替換算法 OPT, Optimal replacement algorithm

所選擇的被換出的頁面將是最長時間內不再被訪問的,通常可以保證獲得最低的缺頁率。

是一種理論中的算法,因為無法知道一個頁面多長時間不再被訪問。

2.最近最久未使用 LRU, Least Recemtly Used

 雖然無法知道將來要使用的頁面的情況,但是可以知道過去使用頁面的情況。LRU將最近最久未使用的頁面換出。

為了實現LRU,需要在內存中維護一個所有頁面的鏈表。當一個頁面被訪問時,將這個頁面移到鏈表表頭。這樣就能保證鏈表表尾的頁面是最近最久未訪問的。

因為每次訪問都需要更新鏈表,因此這種方式實現的LRU代價很高。

3.最近未使用 NRU,Not Recently Used

每個頁面有兩個狀態位:R 與 M ,當頁面被訪問時設置頁面的R = 1,當頁面被修改時設置M = 1。其中R位會定時被清零。可以將頁面分為以下四類:

  • R= 0, M= 0
  • R= 0, M= 1
  • R= 1, M= 0
  • R= 1, M= 1

當發生缺頁中斷時,NRU算法隨機地從類編號最小的非空類中挑選一個頁面將他換出。

NRU優先換出已經被修改過的臟頁面(R= 0, M= 1),而不是頻繁使用的干凈頁面(R= 1, M= 0)

4.先進先出 FIFO,First In First Out

選擇換出的頁面是最先進入的頁面。

該算法會將那些經常被訪問的頁面換出,導致缺頁率升高。

5.第二次機會算法

FIFO算法可能會把經常使用的頁面置換出去,為了避免這一問題,對該算法做一個簡單的修改:

當頁面被訪問的時候設置該頁面的R位為1。需要替換的時候,檢查最老頁面的R位。如果R位是0,那么這個頁面既老又沒有被使用,可以立即置換掉;如果是1,就將R位清零;並把該頁面放到鏈表的尾端,修改它的裝入時間使它就像剛裝入的一樣,然后繼續從鏈表的頭部開始搜索。

 

6.時鍾 Clock

第二次機會算法需要在鏈表中移動頁面,降低了效率。時鍾算法使用環形鏈表將頁面連接起來,再使用一個指針指向最老的頁面。

 

4.分段

虛擬內存采用的是分頁技術,也就是將地址空間划分成固定大小的頁,每一頁再與內存進行映射。

段表可以理解為長度不固定的頁表。

下圖位一個編譯器在編譯過程中建立的多個表,有4個表是動態增長的,如果使用分頁系統的一維地址空間,動態增長的特點會導致覆蓋問題的出現。

 

分段的做法是把每個表分成段,一個段構成一個獨立的地址空間。每個段的長度可以不同,並且可以動態增長。

 

5.段頁式

一個進程對應一個段表,每個段對應一個頁表。所以,一個程序可以對應多個頁表。

程序的地址空間划分為多個擁有獨立地址空間的段,每個段上的地址空間划分為大小相同的頁。這樣既擁有分段系統的共享和保護,又擁有分頁系統的虛擬內存功能。

6.分頁與分段的比較

  • 對程序員的透明性:分頁透明,但是分段需要程序員顯式划分每個段;
  • 地址空間的維度:分頁是一維地址空間(頁內地址),分段是二維的(段名 + 段內地址);
  • 大小是否可以改變:頁的大小不可變,段的大小可以動態改變;
  • 出現的原因:分頁主要用於實現虛擬內存,從而獲得更大的地址空間;分段主要是為了使程序和數據可以被划分為邏輯上獨立的地址空間並且有助於共享和保護。


免責聲明!

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



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