操作系統3-內存管理(請求分頁內存管理)

操作系統3-內存管理(請求分頁內存管理)

6. 請求分頁內存管理方式

6.1 請求分頁的實現

請求分頁是常用的實現虛擬存儲器的方式,其實現需要頁表機制、缺頁中斷機制和地址變換機構的支持。

  1. 頁表機制

    分頁系統中地址映像是用過頁表實現的。在請求分頁的系統中,頁表項包括:邏輯頁號、物理塊號、狀態位P、訪問字段A、修改位M和外存地址。

    1. 狀態位P用於指示該頁是否已經調入內存。
    2. 訪問字段A,用於記錄本頁在一段時間內被訪問的次數,或最近多長時間沒被訪問,供置換算法換出頁面時參考。
    3. 修改位M,表示該頁在調出內存後是否被修改過。由於內存的每一頁在外存中都有備份,所以在該頁被換出時,系統會查詢該頁的修改位,若被修改過,則將該頁再寫入內存;若調入內存後未被修改過,則直接進行覆蓋。
    4. 外存地址,表示該頁在外存中的地址,若外存採用磁盤,則是磁盤塊號。
  2. 缺頁中斷機構

    在請求分頁中,若訪問的頁不在主存,便產生一個缺頁中斷。(這個缺頁中斷與前面的缺頁中斷並不是一回事。前面的缺頁中斷找不到頁面說明頁面已經丟失了,這個找不到頁面說明頁面還在外存中,沒有換入主存。)缺頁中斷與一般的中斷相比有明顯的區別:

    1. 在指令執行期間產生和處理中斷信號。
    2. 一條指令在執行期間可能產生多次中斷。系統中的硬件應能保存多次中斷時的狀態,保證能夠返回到中斷前的狀態。
  3. 地址變換機構

    地址變換過程如圖所示

    graph TD A[程序請求訪問一頁] --> B{頁號>頁表中頁號} B --> |Yes|C[越界中斷] B --> |No|D[CPU檢索快表] D --> E{頁表項在快表中} E --> |No|F[訪問頁表] E --> |Yes|G[修改訪問位和修改位] F --> I{頁在內存} I --> |No|J[缺頁中斷] I --> |Yes|K[修改快表] K --> G G --> L[形成物理地址] L --> M(地址變換結束)

6.2 內存分配策略

在為進程分配內存時,主要涉及三個問題:最小物理塊數的確定;物理塊的分配策略;物理塊的分配算法。

  1. 最小物理塊數的確定

    最小物理塊數,即能保證程序能正常運行的最小物理塊數。

  2. 物理塊的分配策略

    在請求分頁系統中,可採用兩種內存分配策略:固定分配策略和可變分配策略。在進行置換時,也可採取兩種策略:全局置換和局部置換。

    1. 固定分配局部置換

      基於進程的類型或程序管理員的建議,為每個進程分配一定數目的物理塊,整個運行期間都不再改變。如果程序在運行時發現缺頁,必須先從內存中換出一個頁面才能換入新的頁面,這樣才能整體內存不變。

      這種方式的缺點在難以確定物理塊的數目,分配過多或過少都會造成系統整體效率的下降。

    2. 可變分配全局置換

      採用這種策略時,系統會先為每個進程都分配一定數目的物理塊,而OS自身也會保持一定數目的空閒物理塊。當進程發生缺頁中斷時,系統會分配一個空閒的物理塊給該進程以調入新的頁面。這樣每個進程都能獲得新的物理塊,直到系統的空閒物理塊用完。這時候再發送缺頁中斷時,OS就從內存中調出一頁,該頁可能是任一進程的頁。具體的調換算法在後面會講到。

    3. 可變分配局部變換

      同樣是系統在一開始為每個進程分配一定數目的物理塊,但是進程在發生缺頁中斷時,只能從自己進程中調出一頁。這樣就不會影響其他進程。但是系統會時刻觀察所有進程的缺頁中斷發生的頻率,缺頁中斷發生非常頻繁的進程會分配若干物理塊,直到中斷頻率降低到一定程度。同樣,缺頁中斷發生頻率過低的進程就會抽走若干物理塊,使得整體的缺頁中斷發生的頻率都控制在一定範圍。

  3. 物理塊的分配算法

    物理塊的分配應該綜合考慮到進程的優先級和進程的大小,在重要的實時控制系統中,優先級高的進程就能分配到更多的物理塊。

猜你喜欢

转载自www.cnblogs.com/lunar-ubuntu/p/12290716.html