老狗——虛擬存儲管理

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

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

  • 一次性:作業在運行前一次性地全部裝入內存
  • 駐留性:作業裝入內存後,便一直駐留在內存中,直至作業運行結束。

2. 程序執行的局部性:

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

3. 虛擬存儲器的定義

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

虛擬存儲管理下

  • 內存邏輯容量由內存容量和外存容量之和所決定
  • 運行速度接近於內存速度
  • 每位的成本卻接近於外存。

4. 虛擬存儲管理

允許將一個作業分多次調入內存。

  • 若採用連續分配方式,需申請足夠空間,再分多次裝入,造成內存資源浪費,並不能從邏輯上擴大內存容量。
  • 虛擬的實現建立在離散分配存儲管理基礎上
    方式:請求分頁/請求分段系統
    細節:分頁/段機構、中斷機構、地址變換機構、軟件支持

5. 虛擬存儲器的特徵

離散分配方式是基礎

  • 多次性:一個作業被分成多次調入內存運行
  • 對換性:允許在作業的運行過程中進行換進、換出。(進程整體對換不算虛擬)
  • 虛擬性:能夠從邏輯上擴充內存容量,使用戶所看到的內存容量遠大於實際內存容量。

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

  • 基本分頁 + “請求調頁”和“頁面置換”功能。
  • 換入和換出基本單位都是長度固定的頁面

1. 硬件支持

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

2. 頁表的基本功能不變:邏輯地址映射爲物理地址

頁號 物理塊號 狀態位P 訪問字段A 修改位M 外存地址

狀態位P:指示該頁面是否已調入內存 (調入內存1,否則0)

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

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

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

3.缺頁中斷機構:

每當要訪問的頁面不在內存時,便產生一缺頁中斷通知OS,OS則將所缺之頁調入內存。

作爲中斷,需經歷幾個步驟:

  1. “保護CPU環境”
  2. “分析中斷原因”
  3. “轉入缺頁中斷處理程序”
  4. “恢復CPU環境”等。

4.地址變換機構

分頁系統地址變換機構的基礎上增加:

  • 產生和處理缺頁中斷(請求調入)
  • 從內存中換出一頁的功能(置換)

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

5.內存分配

① 物理塊的分配策略

  • 固定分配、局部置換

    爲每個進程分配一定數目的物理塊,在整個運行期間不再改變(基於進程的類型,或根據程序員、程序管理員的建議)

    運行中缺頁時,只能從該進程內存中n個頁面中選出一頁換出,然後再調入一頁。

  • 可變分配、全局置換

    先爲每個進程分配一定數目的物理塊

    OS管理一個空閒物理塊隊列,發生缺頁時,系統從隊列中取出一塊分配給該進程,將欲調入的頁裝入(動態增長型,全局空閒空間都可分配使用)

    空閒空間不足時,可與其他任何進程頁面置換。

    會使其他進程缺頁率提高,影響運行

  • 可變分配、局部置換

    爲每個進程分配一定數目的物理塊

    缺頁時,只允許換出該進程在內存的頁面,不影響其他進程執行。

    根據缺頁率增減進程的物理塊數:若頻繁缺頁中斷,則系統再爲進程分配若干物理快;若缺頁率特別低,則適當減少分配給該進程的物理塊。

② 物理塊的分配算法

固定分配策略時,分配物理塊可採用以下幾種算法:

  • 平均分配算法
    將所有可供分配的物理塊平均分配給各進程。
    缺點:未考慮各進程本身的大小,利用率不均。
  • 按比例分配算法
    根據進程的大小按比例分配物理塊。
  • 考慮優先權的分配算法
    實際應用中,要照顧重要、急迫的作業儘快完成,爲它分配較多的內存空間。
    所有可用物理塊分兩部分: 一部分按比例分配給各進程;另一部分根據各進程優先權,適當地爲其增加份額,分配給各進程。

三.頁面置換算法

1. 缺頁率=頁面調入次數(缺頁次數)/總的頁面使用次數

2. 最佳Optimal置換算法

換出以後永不再用的,或在最長(未來)時間內不再被訪問的頁面。作爲參照標準,評價其他算法。

3. 先進先出置換算法(FIFO)

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

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

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

Belady現象:出現分配的頁面數增多,缺頁率反而提高的異常現象。
Belady現象的原因:FIFO算法的置換特徵與進程訪問內存的動態特徵矛盾,即被置換的頁面並不是進程不會訪問的。

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

LRU置換算法選擇最近最久未使用(least recently used)的頁面予以淘汰。

不足:

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

① 寄存器記錄時間的原理

  • 頁面被訪問後的操作:將該頁對應的寄存器的Rn-1位置爲1
  • 如何記時:
    由系統發出定時信號,每隔一定時間將所有寄存器右移1位。
    某一時刻,比較各寄存器的值,被用到的標誌1逐漸往低位上積累,若高位上沒有1,就說明最近沒用過。所以最近最久未使用的就是寄存器值最小的那個頁。

② 棧記錄時間的原理
某頁面被訪問,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此:棧頂始終是最新被訪問頁面的編號,越久未使用,頁面越被壓在棧底。

5. 輪轉算法(clock)

又稱 —— 最近未使用算法(NRU, Not Recently Used)

  • 每個頁設一個使用標誌位(use bit),若該頁被訪問則將其置爲1。
  • 設置一個指針,從當前指針位置開始按地址先後檢查各頁,尋找use bit=0的頁面作爲被置換頁。
  • 若指針經過的頁use bit=1,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會 ),指針繼續向下。到所有頁面末尾後再返回隊首檢查。

改進

  • 主要考慮對沒訪問過的頁面再細分是否修改過的不同情況,減少因修改造成的頻繁I/O操作。
  • 每頁除記錄是否用過A,還記錄是否修改的標誌M。置換時根據兩個標誌的值有4種不同情況的處理。

6. 其他置換算法

最少使用 (LFU, Least Frequently Used)

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

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

  • 仍用FIFO算法選擇被置換頁但並不將其馬上換入外存。
  • 系統將頁面放入兩個鏈表之一:如果頁面未被修改,就將其歸入到空閒頁面鏈表的末尾;否則將其歸入到已修改頁面鏈表。
    需要調入新的物理頁面時,將新頁面內容讀入到空閒頁面鏈表的第一項所指的頁面,然後將第一項刪除(從空閒鏈表摘下)。
  • 空閒頁面和已修改頁面,仍停留在內存中一段時間,如果這些頁面被再次訪問,只需較小開銷,而被訪問的頁面可以返還作爲進程的內存頁。
  • 當已修改頁面達到一定數目後,再將它們一起調出到外存,然後將它們歸入空閒頁面鏈表,這樣能大大減少I/O操作的次數。

7. 虛擬存儲管理下訪問內存的有效時間

請求分頁管理方式下,存在三種方式的內存訪問

  • 頁在內存,且快表檢索命中
    EAT= λ + t
  • 頁在內存,但快表檢索沒有命中
    EAT= 快表檢索時間+訪問頁表時間+修改更新快表時間+訪問頁面物理內存時間
    = λ +t+ λ +t
    =2*(λ+t)
  • 頁面不在內存
    EAT=快表檢索時間+訪問頁表時間+缺頁中斷處理時間+修改更新快表時間+訪問頁面物理內存時間
    = λ+ t + ε + λ + t
  • 加入概率的綜合公式(a是快表命中率,f是缺頁率)
    EAT= λ + at +(1-a){ }
    = λ +at +(1-a){t + f*(ε+λ+t) +(1-f)*(λ+ t) }

8. 影響缺頁率的主要因素

  • 分配給作業的主存塊數:多則缺頁率低,反之則高。
  • 頁面大小:大則缺頁率低;反之則高。
  • 頁面調度算法:對缺頁中斷率影響很大,但不可能找到一種最佳算法。
  • 程序編制方法:
    以數組運算爲例,如果每一行元素存放在一頁中,則按行處理各元素缺頁中斷率低;反之,按列處理各元素,則缺頁中斷率高。
    在這裏插入圖片描述

9. 抖動

系統抖動:

  • 爲了提高處理機利用率,可增加多道程序併發度;
  • 但進程數目增加過多,每個進程分配得到的物理塊太少,在某個臨界點上,會出現剛被淘汰的頁很快又需重新調入;而調入不久又被淘汰出去;出現頻繁缺頁
  • 大部分處理器時間都用在來回的頁面調度上,這種局面稱爲系統抖動或顛簸(thrashing)

抖動的後果:

  • 缺頁率急劇增加
  • 內存有效存取時間加長,
  • 系統吞吐量驟減;系統已基本不能完成什麼任務,而是忙於頁面對換操作,cpu雖然忙,但效率急劇下降。

根本原因:

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

常用防抖動方法:

  • 局部置換策略;
  • 頁面調入內存前檢查各進程工作集,爲缺頁率高的增加有限物理塊;
  • L缺頁間的平均時間=S置換一個頁面所需時間,可使磁盤和cpu達到最大利用率;
  • 抖動發生時選擇暫停一些進程,調節多道程序度。

工作集: 某段時間間隔中,進程實際要訪問的頁面的集合。

駐留集 > 工作集 可使進程順利的運行。

駐留集

  • 駐留(常駐)集是指在當前時刻,進程實際駐留在內存當中的頁面集合。
  • 工作集是進程在運行過程中固有的性質,而駐留集取決於系統分配給進程的物理頁面數目,以及所採用的頁面置換算法;
  • 如果一個進程的整個工作集都在內存當中,即駐留集 ⊇ 工作集,那麼進程將很順利地運行,而不會造成太多的缺頁中斷(直到工作集發生劇烈變動,從而過渡到另一個狀態);
  • 當駐留集達到某個數目之後,再給它分配更多的物理頁面,缺頁率也不會明顯下降。

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

1. 硬件支持

① 段表機制

段名 段長 段的基址 存取方式 訪問字段A 修改位M 存在位P 增補位 外存始址

存取方式 :用於標識本分段的存取屬性。R,R/W,W

訪問字段A :用於記錄本段被訪問的頻繁程度

修改位M :表示該段在調入內存後是否被修改過

存在狀態位P :指示該段是否已調入內存

增補位 :特有字段,表示該段運行中是否做過動態增長

外存地址:用於指出該段在外存上的起始地址(盤塊號)

② 缺段中斷機構

發現運行進程所訪問段尚未調入內存

  • 由缺段中斷機構產生一缺段中斷信號
  • 進入OS,由缺段中斷處理程序將所需的段調入內存。
  • 缺段中斷同樣在一條指令的執行期間產生和處理中斷,一條指令執行可能產生多次缺段中斷。但不會出現一條指令被分割在兩個分段中或一組信息被分割在兩個分段中的情況。

③ 地址變換機構

基於分段系統地址變換機構的基礎

  • 段調入內存
  • 修改段表
  • 再利用段表進行地址變換。

總之:就是增加了缺段中斷的請求及處理等功能

2. 分段的共享和保護

  • 實現共享:共享段表
  • 共享段如何分享與回收
  • 分段保護
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章