計算機操作系統——內存管理

Table of Contents

 

虛擬內存

分頁系統地址映射

頁面置換算法

1.最佳

2.最近最久未使用

3.最近未使用

4.先進先出

5.第二次機會算法

6.時鐘

分段

段頁式

分頁和分段的比較


虛擬內存

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

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

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

分頁系統地址映射

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

一個虛擬地址分爲兩部分,一部分存儲頁面號,一部分存儲偏移量。

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

頁面置換算法

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

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

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

1.最佳 Optital replacement algorithm, OPT

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

是一種理論上的算法,因爲無法指導一個頁面多長時間不再被訪問。

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

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

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

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

3.最近未使用 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.先進先出 First In First Out, FIFO

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

該算法會將那麼經常被訪問的頁面也被換出,從而使缺頁率升高。

5.第二次機會算法

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

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

6.時鐘 Clock

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

分段

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

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

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

段頁式

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

分頁和分段的比較

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章