• 操作系統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. 物理塊的分配算法

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

    我愿潇洒如鹰,远离地上宿命
  • 相关阅读:
    图解SSH隧道功能
    su和sudo命令的用法
    Linux下下载百度网盘资料
    WPS Office 2019 for Linux来了
    Linux下的录屏软件Kazam
    用hdparm获取硬盘参数
    百度,你能不能有点节操?
    locate的基本用法
    Java class不分32位和64位
    Web站点抓取工具webhttrack
  • 原文地址:https://www.cnblogs.com/lunar-ubuntu/p/12290716.html
Copyright © 2020-2023  润新知