操作系統之虛擬存儲器

操作系統之虛擬存儲器

1.虛擬存儲器的基本概念

1)常規存儲器管理不足的原因:

常規存儲器管理方式的特徵:

一次性:作業在運行前一次性地全部裝入內存

駐留性:作業裝入內存後,便一直駐留在內存中,直至作業運行結束

2)局部性原理

時間局部性:被引用過一次的存儲器位置很可能在不遠的將來再被多次引用

空間局部性:如果一個存儲器位置被引用了一次,那麼程序很可能在不遠的將來引用附近的一個存儲器功能。

基於局部性原理

程序運行前,不需全部裝入內存(打破一次性)

僅裝入當前要運行的部分頁面或段即可運行

,其餘部分暫留在外存上。

缺頁/段的情況:要訪問的頁(段) 尚未調入內存程序應利用OS所提供的請求調頁(段)功能, 將它們調入內存,使程序繼續執行。

調入需要的頁/段時,如果內存已滿,無法再裝入新頁(段),通過置換功能將內存中暫時不用的頁(段)調至外存,騰出足夠的內存空間。(不總駐留)

3)虛擬存儲器的定義:

所謂“虛擬存儲器”,是指具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲器系統。

虛擬存儲管理下

內存邏輯容量由內存容量和外存容量之和所決定

運行速度接近於內存速度

每位的成本卻接近於外存。

4)虛擬存儲器的實現

採用連續分配方式,需申請足夠空間,再分多次裝入,造成內存資源浪費,並不能從邏輯上擴大內存容量。

虛擬的實現建立在離散分配存儲管理基礎上

方式:請求分頁/請求分段系統

細節:分頁/段機構、中斷機構、地址變換機構、軟件支持

5)虛擬存儲器的特徵

離散分配方式是基礎

多次性:一個作業被分成多次調入內存運行

對換性:允許在作業的運行過程中進行換進、換出。(進程整體對換不算虛擬)

最終體現虛擬性:能夠從邏輯上擴充內存容量,使用戶所看到的內存容量遠大於實際內存容量。

2.請求分頁存儲管理方式

基本分頁 + “請求調頁”和“頁面置換”功能。

換入和換出基本單位都是長度固定的頁面

1)硬件支持

一臺具有一定容量的內/外存的計算機+ 頁表機制+ 缺頁中斷機構+ 地址轉換機構

(1)頁表基本功能不變:邏輯地址映射為物理地址

操作系統之虛擬存儲器

① 狀態位P :指示該頁是否已調入內存。

② 訪問字段A :用於記錄本頁在一段時間內被訪問的次數,或記錄本頁最近已有多長時間未被訪問。(置換時考量的參數)

③修改位M :該頁在調入內存後是否被修改過。(關係到置換時調出的具體操作)

④ 外存地址:用於指出該頁在外存上的地址。

(2)缺頁中斷機構

每當要訪問的頁面不在內存時,便產生一缺頁中斷通知OS,OS則將所缺之頁調入內存。作為中斷,需經歷幾個步驟:

“保護CPU環境”

“分析中斷原因”

“轉入缺頁中斷處理程序”

“恢復CPU環境”等。

作為一種特殊中斷,與一般中斷有明顯區別:

①在指令執行期間產生和處理中斷信號。

② 一條指令在執行期間,可能產生多次缺頁中斷。

(3)地址變換機構

操作系統之虛擬存儲器

操作系統之虛擬存儲器

2)內存分配

(1)最小物理塊數的確定

少於此數量進程將不能運行

與計算機的硬件結構有關,取決於指令的格式、功能和尋址方式

(2)物理塊的分配策略

固定分配、局部置換

可變分配、全局置換

可變分配、局部置換

(3)物理塊的分配算法

①平均分配算法

將所有可供分配的物理塊平均分配給各進程。

缺點:未考慮各進程本身的大小,利用率不均。

②按比例分配算法

根據進程的大小按比例分配物理塊。

設系統中共有n個進程

則,每個進程能分到的物理塊數:

操作系統之虛擬存儲器

Si:進程i頁面數為;S:n個進程頁面數總和;m:可用物理塊總數

操作系統之虛擬存儲器

③考慮優先權的分配算法

所有可用物理塊分兩部分:

一部分按比例分配給各進程;

另一部分根據各進程優先權,適當地為其增加份額,分配給各進程。

3)調頁策略

(1)何時調入頁面

預調頁策略

請求調頁策略

(2)從何處調入頁面

在請求分頁系統中的外存分為:

對換區:連續存放數據,讀寫速度較快

文件區:離散分配方式,I/O速度相對慢

發生缺頁時,系統應從何處將缺頁調入內存,分成三種情況:

①系統擁有足夠的對換區空間:

進程運行前所有頁面由文件區拷貝到對換區;

運行需要的頁面全部從對換區調入內存,提高調頁速度。

②系統缺少足夠的對換區空間:

不會被修改的部分,在文件區操作(即:直接從文件區調入,換出時不用寫入文件,再調入時仍從文件區調入)

可能被修改的部分,在對換區操作。

③UNIX方式:(隨運行數據逐漸從文件區轉到對換區)

未運行的頁面從文件區調入;

曾經運行,但又被換出的頁面放在對換區,下次調入應從對換區調入。

進程請求的共享頁面可能已被其他進程調入,無需再從對換區調入。

(3)頁面調入過程

程序運行前需要裝入內存:上述的②步策略處理何處調入;

開始運行:先預調入一部分頁面;

運行中:需要的頁面不在內存時,

向CPU發出一缺頁中斷,“中斷處理程序”開始工作:

①首先保留CPU環境

②分析中斷原因後,轉入缺頁中斷處理程序。

③處理:判斷是否置換、頁表信息更新

④恢復現場,重新操作頁面。

3.頁面置換算法

1)最佳Optimal置換算法

優點:保證獲得最低的缺頁率

不足:無法實現,因為無法預知一進程將來的運行情況

作用:作為參照標準,評價其他算法。

2)先進先出FIFO置換算法

先進入的先淘汰,即選擇內存中駐留時間最久的頁面予以淘汰。

優點:實現簡單,把一進程已調入內存的頁面按先後次序組織成一個隊列,並設置一個指針(替換指針),使它總是指向隊首最老的頁面。

不足:與進程實際運行規律不相適應(較早調入的頁往往是經常被訪問的頁,頻繁被對換造成運行性能降低)

3)最近最久未使用(LRU)置換算法

不足:有時頁面過去和未來的走向之間並無必然的聯繫。

相應的需較多的硬件支持:記錄每個頁面自上次被訪問以來所經歷的時間t,淘汰時選擇頁面t值最大的;以及需要快速地知道哪一頁是最近最久未使用的頁面,用寄存器或棧。

4)CLOCK置換算法

每個頁設一個使用標誌位(use bit),若該頁被訪問則將其置為1。

設置一個指針,從當前指針位置開始按地址先後檢查各頁,尋找use bit=0的頁面作為被置換頁。

若指針經過的頁use bit=1,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會 ),指針繼續向下。到所有頁面末尾後再返回隊首檢查。

操作系統之虛擬存儲器

說明:

增加了一個使用位

當一頁首次加載入內存時,該位為1,當該頁被訪問時,使用位也置1

當需要進行頁替換時

第一個使用位為0的幀被替換,指針指向緩衝區的下一幀

循環掃描,遇到使用位為1的,變成0

改進CLOCK:

改進:主要考慮對沒訪問過的頁面再細分是否修改過的不同情況,減少因修改造成的頻繁I/O操作。

每頁除記錄是否用過A,還記錄是否修改的標誌M。置換時根據兩個標誌的值有4種不同情況的處理。

5)其他

(1)最少使用 (LFU, Least Frequently Used)

關鍵在次數記錄上

每頁設置訪問計數器,每當頁面被訪問時,該頁面的訪問計數器加1;缺頁中斷時,淘汰計數值最小的頁面,並將所有計數清零;

計數的實現類似LRU,用移位寄存器,但比較時不是簡單比較寄存器的值,而是比較寄存器每位的和∑Ri。

(2)頁面緩衝算法PBA(page buffering algorithm)

對FIFO算法的發展,彌補了FIFO可能造成的I/O開銷,又不需要LRU等算法的硬件支持。

仍用FIFO算法選擇被置換頁

但並不將其馬上換入外存。

系統將頁面放入兩個鏈表之一:如果頁面未被修改,就將其歸入到空閒頁面鏈表的末尾;否則將其歸入到已修改頁面鏈表。

需要調入新的物理頁面時,將新頁面內容讀入到空閒頁面鏈表的第一項所指的頁面,然後將第一項刪除(從空閒鏈表摘下)。

空閒頁面和已修改頁面,仍停留在內存中一段時間,如果這些頁面被再次訪問,只需較小開銷,而被訪問的頁面可以返還作為進程的內存頁。

當已修改頁面達到一定數目後,再將它們一起調出到外存,然後將它們歸入空閒頁面鏈表,這樣能大大減少I/O操作的次數。

6)虛擬存儲管理下訪問內存的有效時間

操作系統之虛擬存儲器

7)影響缺頁率的主要因素

(1)分配給作業的主存塊數:

多則缺頁率低,反之則高。

(2)頁面大小:

大則缺頁率低;反之則高。

(3)頁面調度算法:

對缺頁中斷率影響很大,但不可能找到一種最佳算法。

(4)程序編制方法:

以數組運算為例,如果每一行元素存放在一頁中,則按行處理各元素缺頁中斷率低;反之,按列處理各元素,則缺頁中斷率高。

8)抖動

(1)系統抖動:

為了提高處理機利用率,可增加多道程序併發度;

但進程數目增加過多,每個進程分配得到的物理塊太少,在某個臨界點上,會出現剛被淘汰的頁很快又需重新調入;而調入不久又被淘汰出去;出現頻繁缺頁

大部分處理器時間都用在來回的頁面調度上,這種局面稱為系統抖動或顛簸(thrashing)

(2)抖動的後果:

缺頁率急劇增加

內存有效存取時間加長,

系統吞吐量驟減;系統已基本不能完成什麼任務,而是忙於頁面對換操作,cpu雖然忙,但效率急劇下降。

(3)根本原因:

頁面淘汰算法不合理;分配給進程的物理頁面數(駐留集)太少。

(4)常用防抖動方法:

局部置換策略;

頁面調入內存前檢查各進程工作集,為缺頁率高的增加有限物理塊;

L缺頁間的平均時間=S置換一個頁面所需時間,可使磁盤和cpu達到最大利用率;

抖動發生時選擇暫停一些進程,調節多道程序度。

(5)工作集模型的原理:

操作系統跟蹤每個進程的工作集,併為進程分配大於其工作集的物理塊。

如果還有空閒物理塊,則可以再調一個進程到內存以增加多道程序數。

如果所有工作集之和增加以至於超過了可用物理塊的總數,那麼操作系統會暫停一個進程,將其頁面調出並且將其物理塊分配給其他進程,防止出現抖動現象。

(6)駐留集

駐留(常駐)集是指在當前時刻,進程實際駐留在內存當中的頁面集合。

工作集是進程在運行過程中固有的性質,而駐留集取決於系統分配給進程的物理頁面數目,以及所採用的頁面置換算法;

如果一個進程的整個工作集都在內存當中,即駐留集 <=工作集,那麼進程將很順利地運行,而不會造成太多的缺頁中斷(直到工作集發生劇烈變動,從而過渡到另一個狀態);

當駐留集達到某個數目之後,再給它分配更多的物理頁面,缺頁率也不會明顯下降。

4.請求分段存儲管理方式

1)請求分段中的硬件支持

(1)段表機制

操作系統之虛擬存儲器

(2)缺段中斷機構

(3)地址變換機構

2)分段的共享和保護

(1)實現共享:共享段表

(2)共享段如何分享與回收

①共享段的分配

②共享段的回收

③分段保護

a.越界檢查

b.存取控制檢查

c.環保護機構

操作系統之虛擬存儲器


分享到:


相關文章: