請求分頁虛擬存儲管理及頁面置換算法

請求分頁存儲管理

硬件支持

請求分頁系統的數據換入和換出的基本單位都是長度固定的頁面,具有實現簡單的優勢需要請求分頁頁表機制、缺頁中斷機構和地址變換機構的支持

頁表機制

與基本分頁管理相比,請求分頁管理中,爲了實現“請求調頁”,操作系統需要
知道每個頁面是否已經調入內存;如果還沒調入,那麼也需要知道該頁面在外存中存放的位置。
當內存空間不夠時,要實現“頁面置換”,操作系統需要通過某些指標來決定到
底換出哪個頁面;有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中的舊數據覆蓋,因此,操作系統也需要記錄各個頁面是否被修改的信息。

與基本分頁系統的頁表相比,需要增加支持頁面換入、換出的數據結構,其頁表項如下

頁號 物理幀號 狀態位P 訪問字段A 修改位M 外存地址
狀態位:指示該頁是否已被調入內存
訪問字段:紀錄本頁在--段時間內被訪問的次數或上次訪問時間等信息
修改位:該頁調入內存後是否被修改過,置換頁面時若該位表示曾修改過,需要覆蓋外存中的副本,以保證外存中的頁面始終爲最新
外存地址:指出該頁對應外存物理幀號

缺頁中斷機構

必當所要訪問的頁面不在內存時,啓動缺頁中斷,請求OS在程序中斷期間將需要的頁面調入內存
缺頁中斷處理過程:保護現場、分析中斷原因、轉入缺頁中斷處理程序、恢復現場
特點(與普通中斷相比):
指令執行期間產生和處理中斷信號
指令執行時可能會產生多次缺頁中斷
在這裏插入圖片描述
在這裏插入圖片描述

地址變換機構

和基本分頁存儲管理的地址變換相比,區別在於:

(1) 查到頁表項時需要進行判斷,判斷頁面是否在內存中。
(2) 當需要調入頁面時,但有沒有空閒內存時,需要進行頁面置換。
(3) 當頁面需要調入或調出,需要修改請求頁表中新增的表項。

在這裏插入圖片描述
(1) 根據邏輯地址得到頁號和頁內偏移量。
(2) 對頁號進行越界判斷。
(3) 訪問頁表判斷頁是否在內存中,如果在繼續執行程序。
(4) 如果訪問的頁不在內存中,產生缺頁中斷請求,當前進程阻塞,缺頁中斷程序從根據頁表從外存找到缺失的頁。
(5) 判斷內存空間是否已滿,未滿,將缺頁調入內存,修改頁表。如果已滿,從內存中選擇一個頁面置換,如果頁面發生修改,需要將修改寫回外存,然後再將缺頁調入內存,並修改頁表。
(6) 頁面調入後,阻塞的進程會處於就緒態等待處理機調度。
經典圖示:
在這裏插入圖片描述
幾個細節問題

(1) 只有“寫指令”頁表才需要修改“修改位”。並且如果有快表機構,一般來說只需要修改快表中的數據,只有要將快表項刪除時才需要寫回內存中的慢表。這樣可以減少訪問內存次數。
這也就是說,如果存在快表機構,當修改了一個頁面時,只需要修改快表中的相應的頁表項,而不需要修改內存中的頁表,一方面快表操作更快,另一方面還減少了訪問內存次數,否則一次修改要修改兩個表。
(2) 和普通中斷一樣,缺頁中斷也需要保留CPU現場,以便進程再次運行時能從中斷的狀態繼續運行。
(3) 這裏換成那個頁面是通過頁面置換算法決定的,頁面置換算法見下一節頁面置換算法。
(4) 換入/換成頁面都需要啓動慢速的I/O操作,可見,如果換入/換成過於頻繁,會有很大的開銷。
(5) 頁表調入內存後需要修改慢表和快表兩個表,但是這和(1) 並不衝突。

內存分配策略和分配算法

在這裏插入圖片描述
內存物理幀分配策略要考慮三方面問題

最小(最少)物理塊數如何確定
物理塊的分配策略
物理塊的分配算法

最小物理塊數
必保證進程運行所需的最小物理幀數與其所在硬件結構相關,不同的指令格式、功能和尋址坊式對物理幀數的要求不同

C3單字節指令、直接尋址方式: 2個幀
C3單字節指令、間接尋址方式: 3個幀
C3多字節指令: 6個以上的幀

物理幀分配策略
內存可採用固定和可變兩種策略進行分配,置換時有全局和局部置換,因此物理幀的分配策略可分爲:

  1. 固定分配局部置換
    根據進程類型或程序員要求,爲進程分配固定數目的物理幀,進程運行期間不再新增空間,換出時從本進程佔有的頁面中選擇一頁;難度在於物理幀數目難以確定,過多或過少都有不良影響
  2. 可變分配全局置換
    進程獲取的物理幀數在運行過程中可以變化,換出時的頁面可以是內存中的任意進程的頁面,該方法會增加其他進程的缺頁率
  3. 可變分配局部置換
    根據進程類型或程序員要求分配初始數量的物理幀,換出時只從本進程佔有頁面中選擇,但若缺頁中斷經常產生,則爲該進程新增部分頁面,以使缺頁中斷髮生頻度下降,即利用增減幀數量的方法來控制缺頁率

物理幀分配算法
必採用固定分配策略時,可以使用下述算法

  1. 平均分配算法
    物理塊平均分配給各進程,小進程浪費空間,大進程缺 頁率高
  2. 根據進程大小按比例分配
    根據本進程頁面數與系統中各進程頁面數總和之比分配幀,但至少要滿足最小物理塊要求
  3. 按優先權分配
    直高優先權的進程獲得的物理幀多
    將幀分類,一類按比例分,一類專用來滿足高優先權進程的額外需求

調頁策略

調入過程

頁面不在內存時,進程向cpu發送缺頁中斷
中斷處理程序保存現場,轉入缺頁中斷處理過程
若內存未滿,則換入並修改頁表
若內存已滿,選頁換出:換出頁未修改者可直接覆蓋,已修改者需要保存
到磁盤,新頁入內存後修改頁表,置存在位爲1,同時將其寫入快表
形成物理地址,訪問數據

缺頁率

設進程邏輯空間爲頁, OS分配給它的物理塊數爲m (m<=n) , 該進程運行過程中,所訪問頁面在內存(訪問成功,即命中)中的次數爲S,訪問失敗的次數爲F,則總頁面訪問次數爲A=S+F,而該進程的缺頁率爲f=F/A
影響缺頁率的因素

頁面大小:頁面大缺頁車低
物理塊數:塊數多缺頁率低
頁面置換算法
程序固有特性:程序的局部化程度越高,缺頁率越低

分頁置換算法

請求調頁系統中,換出頁面時需要根據一定算法選擇

  • 最佳置換算法(OPT)
  • 先進先出算法(FIFO)
  • 最近最久未使用置換算法(LRU)
  • Clock置換算法
  • 最少使用置換算法
  • 頁面緩衝算法

最佳置換算法(OPT)

在這裏插入圖片描述
最佳置換算法(OPT, Optimal) :每次選擇淘汰的頁面將是以後永不使用,或者在最長時間內不再被訪問的頁面,這樣可以保證最低的缺頁率。
最佳置換算法可以保證最低的缺頁率,但實際上,只有在進程執行的過程中才能知道接下來會訪問到的是哪個頁面。操作系統無法提前預判頁面訪問序列。因此,最佳置換算法是無法實現的。

先進先出算法(FIFO)

在這裏插入圖片描述
在這裏插入圖片描述

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

在這裏插入圖片描述

LRU算法的硬件支持

LRU算法性能較優,其面臨的主要問題是如何確定一個按照上次使用時間定義的排序序列,可選擇如下兩種方式

  • 計數器:每個位於內存中的頁面都要配置一個計數器用來標識進入內存的時間
  • 頁碼堆棧:每當引用-一個已在堆棧的頁時,都將該頁從堆棧中刪除並壓入頂部

計數器方式
移位寄存器
每個頁面配置一個n位移位寄存器,當進程訪問某頁面時,將其最高位設置爲1,每過一個時鐘週期將其右移一位,換出時選擇移位寄存器值最小的頁面
邏輯時鐘
每個頁面項中設置一個使用時間域,每次內存引用時,時鐘寄存器的內容會複製到相應頁的使用時間域中換出時選擇該域中值最小的頁面
該算法需要搜索頁表以查找計數值最小的頁面,系統的時空開銷需要考慮
在這裏插入圖片描述
頁碼堆棧
堆棧使用雙向鏈表實現
進程訪問某頁面時,若該頁在棧內,則從中刪除並壓入棧項;若該頁不在棧內,則從棧底刪除最近最久未使用的頁面,並將新頁面壓入棧頂
該算法中,棧項總是最近訪問的頁面,棧底總是最近最久未使用的頁面
在這裏插入圖片描述

Clock置換算法

在這裏插入圖片描述
在這裏插入圖片描述

最少使用置換算法(LFU)

通過在各頁表項中設置-一個紀錄訪問次數的計數器,可以形成LFU算法,由於活躍頁應該有較大的訪問次數紀錄值,因此可以將該計數器值最小的頁面換出
每次訪問某頁時,將移位寄存器的最高位置位,每隔一定時間右移一 次, 則最近一段時間內使用最少的頁面其按位相加之和最小
在這裏插入圖片描述

頁面緩衝算法

採用可變分配和局部置換方式,以及FIFO算法
該算法中要求設置兩個鏈表_空閒幀 (頁面)鏈表和已修改幀(頁面)鏈表,被選中的頁面若未被修改就插入前一鏈表,否則插入後一鏈表
被插入空閒幀鏈表的頁面並不換出內存,將來直接被覆蓋;被插入已修改鏈表的頁面暫時不寫入磁盤,待累積達到一定數量時才調出內存
當進程缺頁率低時,新調入的頁面在本進程中局部置換;
當進程缺頁率高時,新調入的頁面直接使用空閒頁面鏈表的第一個元素
這種方法可以顯著減少I/O次數,且能以較小系統開銷將這些頁面再次分配給原進程使用

以下皆爲一些小知識點:
在這裏插入圖片描述
在這裏插入圖片描述

顛簸(抖動)

某進程由於缺頁而產生置換,但在不久又請求新的頁面甚至是剛換出的頁面,需要再次置換,這種頻繁的頁調度行爲稱爲顛簸或抖動
若一個進程在換頁上使用的時間多於執行時間,稱這個進程在抖動
系統顛簸原因
採用全局置換算法可能導致系統顛簸
實例
早期調頁系統中使用全局置換算法, OS發現CPU利用率降低,則向系統引入新進程以增加多道程序度。
問題:某進程需要更多幀保證運行時,需要換頁設備爲其搶佔他人空間,導致被搶佔空間的進程需要等待換頁設備,隨着等待換頁設備進程的增加,就緒隊列逐漸縮短,CPU利用率隨之降低,OS檢測到該情況後會主動增加多道程序度,新進程的加入會需求新幀,進一步增加了等待換頁設備的隊列,上述過程的不斷出現導致了系統顛簸的產生,系統吞吐量陡降,缺頁率顯著增加,有效訪存時間增加,系統忙於調頁而不能完成一樣工作
工作集理論
定義.
最近n次內存訪問的頁面集合,數字n被稱爲工作集窗口,也就是工作集的大小
經常被使用的頁面會在工作集中,而若一個頁面不再被使用,將會被從工作集中丟棄。當一個進程尋址一個不在工作集內的頁面時,會產生一個缺頁中斷。在處理缺頁中斷時,更新工作集並在需要時從磁盤中讀入此頁面

工作集模型的原理
讓操作系統監視各個進程的工作集,主要是監視各個工作集的大小(窗口大小)。
若有空閒的物理塊,則可以再調-一個進程到內存以增加多道程序度
若工作集的大小總和超過了所有可用物理塊的數量總和,那麼OS可以選擇一個內存中的進程對換到磁盤中去,以減少內存中的進程數量來防止抖動的發生
正確選擇工作集窗口大小,對存儲器的有效利用率和系統吞吐量的提高都將產生重要影響。如果窗口選的很大,進程雖不易產生缺頁,但存儲器也得
不到充分利用,如果窗口過小,則會使進程在運行過程中頻繁產生缺頁中
斷,反而降低了系統吞吐量。
在這裏插入圖片描述

請求分段存儲管理方式

在基本段式管理基礎上增加請求調段功能和段置換功能,運行時先調入若干分段,需要新段時置換暫時不用的段

硬件支持

段表機制
缺段中斷機構
地址變換機構

段表機制

段名 段長 段基址 存取方式 訪問字段A 修改位M 狀態位P 增補位 外存地址
存取方式:標識存取屬性爲讀、寫、執行的組合
增補位:請求分段存儲管理的特有字段,表示本段運行過程中是否有動態增長
訪問字段A、修改位M、狀態位P、外存基址的定義同頁式管理

缺段中斷機制
缺段中斷要求在一條指令執行期間產生和處理中斷,和處理多次缺段中斷。
在這裏插入圖片描述
地址變化機構
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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