1. 程式人生 > 實用技巧 >作業系統03-記憶體管理

作業系統03-記憶體管理

作業系統

第三章: 記憶體管理

儲存器的層次結構

CPU暫存器

  • 暫存器

主存

  • 快取記憶體

  • 主儲存器

  • 磁碟快取

輔存

  • 固定磁碟
  • 可移動儲存介質

裝入和連結

  • 裝入

  • 絕對裝入

    • 目標模組採用絕對地址
      • 邏輯地址和實際地址完全相同
      • 適用於單道環境
  • 可重定位裝入

    • 在程式裝入的時候裝入
      • 存在地址變換,但是是直接找的當前合適的記憶體位置
      • 程式需要連續空間
      • 不存在在程式執行的過程中在記憶體移動
  • 動態執行時裝入

    • 地址轉換在程式需要真正執行時才進行
      • 可以在記憶體之中移動
      • 可以實現虛擬儲存
  • 連結

  • 靜態連結

    • 在程式執行之前,將各目標模組以及它們需要的庫函式連結成一個完整的轉入模組
  • 裝入時動態連結

    • 在裝入的時候邊裝入邊連結
      • 便於修改和更新
      • 便於實現目標模組的共享
  • 執行時動態連結

    • 當程式需要的時候採取連結
      • 節約記憶體空間、加快裝入過程

連續分配方式

  • 單一連續分配

  • 固定分割槽分配

    • 分割槽使用表

    • 記憶體利用與回收

    • 缺點

      • 規定了分割槽大小,大程式無法裝入
      • 限制了活躍程序的最大數
      • 碎片過多
      • 擴充和貢獻困難
  • 動態分割槽分配

    • 演算法

      • 首次適應演算法
  • 每一次從頭開始 導致空閒區間分配不均

  • 迴圈首次適應演算法
    - 從上次找到的空閒分割槽的下一個空閒分割槽開始查詢

    • 可能會有小的程式佔據大的空閒分割槽,會缺乏大的空閒分割槽

      • 最佳適應演算法
  • 以分割槽的容量大小 尋找第一個符合要求的
    - 會導致更多的小空間

      - **最壞適應演算法**
      - 和上面的演算法讓容量遞減
    
    • 會導致大的空閒空間不足
  • 管理空閒分割槽

      - 空閒分割槽表
    
    • 空閒分割槽鏈
  • 分割槽回收

      - 要回收的分割槽上或下存在空閒分割槽,則合併
    
    • 上下都有是則分割槽數減一,將下面的空閒分割槽從空閒表或連結串列中刪掉

      • 上或者下有(只有一個)則不變
    • 不存在則自己新建為新 空閒分割槽數加一

    • 分割槽分配

      • 存在一個最小不可再分割的大小
    • 沒有程式數目和大小的限制但是會產生過多的碎片

  • 動態重定位分配

    • 重定位暫存器
    • 地址變換機構
    • 目標程式
  • 夥伴系統

    • 夥伴演算法
    • 記憶體分配
    • 記憶體回收
    • 在程序釋放儲存空間時,尋找夥伴合併,
      可以做到類似遞迴進行,知道找不到可以合併的夥伴為止
  • 交換

    • 以程序為單位
    • 以頁或段為單位

基本分頁儲存管理方式

  • 儲存空間

    • 主存中為塊
    • 程序的邏輯結構中為頁
  • 頁面與頁表

    • 頁表存放

      • 頁表
      • 為記錄頁面在記憶體中對應的物理塊
    • 頁表

    • 邏輯地址構成

      • 頁號

        • 即在第幾頁
      • 頁內位移

        • 即距離頁面裡面第一個地址的距離
        • 總的大小為頁面大小,如1KB的頁面,會有2的10次方的地址
      • 邏輯地址從0開始

  • 為解決連續分配方式存在的碎片

  • 地址變換機構

    • 分頁邏輯地址

      • 頁號和頁內位移
        二進位制:
        邏輯地址大小2m 頁面大小2n
        則前m-n位表示頁號 後n位表示頁內位移
        十進位制:
        記A為邏輯地址,L為頁面大小,則:
        頁號:P=int(A/L); 頁內地址:d=A mod L
    • 對映

      • 頁號得到實體地址的基地址

        • 基地址:頁號對應的物理塊號乘以頁面大小即(塊大小)
      • 基地址加上頁內位移即實際實體地址

    • 快表

      • 設定的一個認為常用的頁面集合

        • 因為:訪問頁表要訪問2次以上主存
      • 區域性性原理:所有的儲存單元都趨於聚集在一個較小的連續區域

      • 增設一個具有並行查詢能力的高速緩衝儲存器

      • 儲存頻繁訪問的頁表項

    • 兩級和多級頁表

      • 每多一次頁表會多一次對主存的訪問

      • 將原來一張大的頁表分為多個頁表

      • 將地址組成部分的頁表號分為多個部分

        • 每多一個部分表示多出一個頁表對其進行記錄,
          就相當於形成了多表結構
      • 實現可非連續儲存頁表

      • 級別增多會導致訪問次數的增多

  • 資訊共享

  • 可重入程式碼

基本分段儲存管理方式

  • 邏輯地址結構

  • 段表

  • 與分頁的區別

  • 資訊共享

  • 大小

    • 邏輯地址結構

      • 段號

        • 通過段號可以知道最多允許有多少分段
      • 段內地址

        • 可以知道每段的最大長度
        • 不定

段頁式儲存管理方式

  • 邏輯地址結構

  • 先分段再分段

    • 所以會先訪問段表再訪問頁表
    • 最後訪問資訊
  • 段表和頁表

程式區域性性原理

區域性性原理是指CPU訪問儲存器時,無論是存取指令還是存取資料,所訪問的儲存單元都趨於聚集在一個較小的連續區域中。

  • 程式執行時,無需全部裝入記憶體,裝載部分即可
  • 如果訪問頁不在記憶體,則發出缺頁中斷,發起頁面置換
  • 從使用者層面看,程式擁有很大的空間,即是虛擬記憶體

虛擬儲存器

  • 原理

    • 概念

      • 在一開始放入部分記憶體就開始執行
      • 請求調入和置換
      • 時間上表現為一個物件會在一個較短時間內執行
      • 空間上表現為當前執行的指令在一個較小的範圍
    • 請求調入

      • 所訪問的資訊不在記憶體的時候
    • 置換

      • 作業系統將記憶體中暫時不使用的內容換出到外存
    • 區域性性原理

      • 概念

        • 區域性性原理是指程式在執行過程中一個較短時間內
          ,程式所執行的指令地址和運算元地址分別侷限於一定區域內
      • 程式中少量分支和過程呼叫大都是順序執行

      • 過程呼叫深度有限,

      • 存在著許多迴圈

      • 陣列等資料結構

      • 體現

        • 時間區域性性
        • 空間區域性性
  • 物質基礎

    • 相當數量的外存
    • 一定容量的記憶體
    • 地址變換機構
  • 記憶體分配和分配演算法

    • 程序需要的最小物理塊數

      • 執行一條指令所涉及的頁面數確定

      • 單地址指令

        • 直接定址
        • 間接定址
        • 功能較強時
    • 程序的物理塊數是固定還是可變

      • 固定分配區域性置換
      • 可變分配全域性置換
      • 可變分配區域性置換
    • 按什麼原則為程序分配物理塊數

      • 平均分配演算法
      • 按比例分配演算法
      • 按優先順序分配演算法
      • 實現方案
    • 區域性範圍內

      • 頁面置換演算法

        • 最佳置換演算法

          • 將來最長時間不會使用

          • 僅具有理論意義

      • 先進先出演算法

          - 選擇調入主存時間最長的頁面予以淘汰
        
      • 最近最久未使用置換演算法

        • 選擇最近一段時間內最長時間沒有被訪問過的頁面予以淘汰

          • 實現

          • 基於暫存器的方法

            • 配置一個n位暫存器,在程序訪問頁面的時候最左置1
              • 每過一段時間則計數器右移1位
            • 最小數值的暫存器即最近最久未使用的頁面
          • 基於棧的方法

              - 棧頂存放最近使用過的頁面
            
        • 時鐘置換演算法

        • 將頁面設定成迴圈佇列

          • 首次調入記憶體,置訪問位置1
          • 被訪問置訪問位置1
        • 缺頁中斷的時候

          • 訪問為0則淘汰

            • 不為0則置為0
            • 接上次判定介面位置
          • 改進:訪問位和修改位分開考慮

          • 有四種情況

            • 先尋找訪問位和修改位都為0的頁面淘汰
            • 沒有則再尋找訪問頁為0,修改位為1的淘汰,並將訪問位設定為0
            • 沒有重複一操作
        • 其他置換演算法

  • 效能分析

    • 有效訪問時間

      • 訪問儲存器所需時間的平均值
      • 在快表中,則需要訪問一次主存
    • 不在記憶體,則要缺頁中斷時間

      • 缺頁中斷時間

        • 缺頁中斷時間
        • 介面傳送時間
        • 程序重新執行時間
        • 僅考慮頁面傳送時間
      • 影響缺頁率的因素

        • 分配給程序的物理塊數
        • 頁面本身大小
        • 程式編制方法
        • 頁面置換演算法
    • 抖動現象

      - 全域性抖動
      - 區域性抖動
      
      • 產生原因

          - 程序分配物理塊太少
          - 置換演算法選擇不當
        
        • 全域性置換使抖動傳播
      • 預防與解除

          - 採用區域性置換策略
          - 增加分配給相應程序的物理塊
        
        • 掛起程序
    • 頁面大小的選擇

      - 有個最佳介面大小可以選擇
      - 每個頁表項需e個位元組
      - 記憶體大小為m
      - 程序的平均長度為s
      - 計算開銷  碎片項和頁表項的總和(pm/2s + me/p)求最小值
      - p=2es的算術平方根
      
  • 實現方法

    • 請求分頁儲存管理方式

      • 調頁策略

        • 何時

          • 預調頁策略
          • 請求調頁策略
        • 何處

          • 檔案區

            • 存放檔案
            • 離散分配
          • 對換區

            • 存放對換頁面
            • 連續分配
            • 磁碟I/O較高
        • 情況

          • 對換區空間足夠

          • 對換區空間不夠

            • 將程序中可能被修改的調入對換區
          • UNIX方式

            • 全部存放在檔案區
            • 執行過調出的放於對換區
            • 存在頁面共享
      • 支援機構

        • 頁表

          • 擴充的頁表
        • 缺頁中斷機構

          • 缺頁中斷
          • 中斷過程
        • 地址變換機構

          • 類似於分頁儲存管理
          • 進行缺頁中斷處理
    • 請求分段儲存管理方式

      • 請求調段

      • 分段置換

      • 支援結構

        • 段表

        • 缺段中斷機構

          • 類似缺頁中斷

          • 記憶體管理

          • 段的置換

            • 有空間則直接調入
            • 沒有就檢查空閒區之後是否滿足
            • 再不符合則淘汰若干段
        • 地址變換機構

          • 動態地址變換
      • 分段共享

        • 實現

          • 為了實現分段共享,可在系統中設定一張共享段表,所有共享分段都在其中佔有一表項
          • 增加共享程序計數
          • 存取控制欄位
          • 共享段在不同程序中有不同的段號
      • 分配

        • 對於第一個請求使用該段的程序,系統為該共享段分配一個記憶體區,在將共享段調入
        • 同時將該區的始地址填入請求程序的段表
        • 在共享段表中增加一項,填寫有關資料將count置1
        • 填入相關的資料結構
      • 回收

        • 釋放該程序段,將count減一
        • 如果變為0則需要系統回收共享段的實體記憶體及有關表項
    • 分段保護

      • 越界保護

          - 用段表長度與邏輯地址中的段號比較
        
        • 段長與邏輯地址中的段內位移比較
      • 存取方式檢查

        • 本段的訪問方式
      • 環保護結構

          - 低編號環具有高優先權
        
        • 原則

            - 一個程式可以訪問在相同的環或者較低環中的資料
            - 一個程式可以呼叫駐留在相同環或較高環中的服務
          
  • 特徵

    • 多次性
    • 對換性
    • 虛擬性