作業系統03-記憶體管理
作業系統
第三章: 記憶體管理
儲存器的層次結構
CPU暫存器
- 暫存器
主存
快取記憶體
主儲存器
磁碟快取
輔存
- 固定磁碟
- 可移動儲存介質
裝入和連結
-
裝入
-
絕對裝入
- 目標模組採用絕對地址
- 邏輯地址和實際地址完全相同
- 適用於單道環境
- 目標模組採用絕對地址
-
可重定位裝入
- 在程式裝入的時候裝入
- 存在地址變換,但是是直接找的當前合適的記憶體位置
- 程式需要連續空間
- 不存在在程式執行的過程中在記憶體移動
- 在程式裝入的時候裝入
-
動態執行時裝入
- 地址轉換在程式需要真正執行時才進行
- 可以在記憶體之中移動
- 可以實現虛擬儲存
- 地址轉換在程式需要真正執行時才進行
-
連結
-
靜態連結
- 在程式執行之前,將各目標模組以及它們需要的庫函式連結成一個完整的轉入模組
-
裝入時動態連結
- 在裝入的時候邊裝入邊連結
- 便於修改和更新
- 便於實現目標模組的共享
- 在裝入的時候邊裝入邊連結
-
執行時動態連結
- 當程式需要的時候採取連結
- 節約記憶體空間、加快裝入過程
- 當程式需要的時候採取連結
連續分配方式
-
單一連續分配
-
固定分割槽分配
-
分割槽使用表
-
記憶體利用與回收
-
缺點
- 規定了分割槽大小,大程式無法裝入
- 限制了活躍程序的最大數
- 碎片過多
- 擴充和貢獻困難
-
-
動態分割槽分配
-
演算法
- 首次適應演算法
-
-
每一次從頭開始 導致空閒區間分配不均
-
迴圈首次適應演算法
- 從上次找到的空閒分割槽的下一個空閒分割槽開始查詢-
可能會有小的程式佔據大的空閒分割槽,會缺乏大的空閒分割槽
- 最佳適應演算法
-
-
以分割槽的容量大小 尋找第一個符合要求的
- 會導致更多的小空間- **最壞適應演算法** - 和上面的演算法讓容量遞減
- 會導致大的空閒空間不足
-
管理空閒分割槽
- 空閒分割槽表
- 空閒分割槽鏈
-
分割槽回收
- 要回收的分割槽上或下存在空閒分割槽,則合併
-
上下都有是則分割槽數減一,將下面的空閒分割槽從空閒表或連結串列中刪掉
- 上或者下有(只有一個)則不變
-
不存在則自己新建為新 空閒分割槽數加一
-
分割槽分配
- 存在一個最小不可再分割的大小
-
沒有程式數目和大小的限制但是會產生過多的碎片
-
-
動態重定位分配
- 重定位暫存器
- 地址變換機構
- 目標程式
-
夥伴系統
- 夥伴演算法
- 記憶體分配
- 記憶體回收
- 在程序釋放儲存空間時,尋找夥伴合併,
可以做到類似遞迴進行,知道找不到可以合併的夥伴為止
-
交換
- 以程序為單位
- 以頁或段為單位
基本分頁儲存管理方式
-
儲存空間
- 主存中為塊
- 程序的邏輯結構中為頁
-
頁面與頁表
-
頁表存放
- 頁表
- 為記錄頁面在記憶體中對應的物理塊
-
頁表
-
邏輯地址構成
-
頁號
- 即在第幾頁
-
頁內位移
- 即距離頁面裡面第一個地址的距離
- 總的大小為頁面大小,如1KB的頁面,會有2的10次方的地址
-
邏輯地址從0開始
-
-
-
為解決連續分配方式存在的碎片
-
地址變換機構
-
分頁邏輯地址
- 頁號和頁內位移
二進位制:
邏輯地址大小2m 頁面大小2
n
則前m-n位表示頁號 後n位表示頁內位移
十進位制:
記A為邏輯地址,L為頁面大小,則:
頁號:P=int(A/L); 頁內地址:d=A mod L
- 頁號和頁內位移
-
對映
-
頁號得到實體地址的基地址
- 基地址:頁號對應的物理塊號乘以頁面大小即(塊大小)
-
基地址加上頁內位移即實際實體地址
-
-
快表
-
設定的一個認為常用的頁面集合
- 因為:訪問頁表要訪問2次以上主存
-
區域性性原理:所有的儲存單元都趨於聚集在一個較小的連續區域
-
增設一個具有並行查詢能力的高速緩衝儲存器
-
儲存頻繁訪問的頁表項
-
-
兩級和多級頁表
-
每多一次頁表會多一次對主存的訪問
-
將原來一張大的頁表分為多個頁表
-
將地址組成部分的頁表號分為多個部分
- 每多一個部分表示多出一個頁表對其進行記錄,
就相當於形成了多表結構
- 每多一個部分表示多出一個頁表對其進行記錄,
-
實現可非連續儲存頁表
-
級別增多會導致訪問次數的增多
-
-
-
資訊共享
-
可重入程式碼
基本分段儲存管理方式
-
邏輯地址結構
-
段表
-
與分頁的區別
-
資訊共享
-
大小
-
邏輯地址結構
-
段號
- 通過段號可以知道最多允許有多少分段
-
段內地址
- 可以知道每段的最大長度
- 不定
-
-
段頁式儲存管理方式
-
邏輯地址結構
-
先分段再分段
- 所以會先訪問段表再訪問頁表
- 最後訪問資訊
-
段表和頁表
程式區域性性原理
區域性性原理是指CPU訪問儲存器時,無論是存取指令還是存取資料,所訪問的儲存單元都趨於聚集在一個較小的連續區域中。
- 程式執行時,無需全部裝入記憶體,裝載部分即可
- 如果訪問頁不在記憶體,則發出缺頁中斷,發起頁面置換
- 從使用者層面看,程式擁有很大的空間,即是虛擬記憶體
虛擬儲存器
-
原理
-
概念
- 在一開始放入部分記憶體就開始執行
- 請求調入和置換
- 時間上表現為一個物件會在一個較短時間內執行
- 空間上表現為當前執行的指令在一個較小的範圍
-
請求調入
- 所訪問的資訊不在記憶體的時候
-
置換
- 作業系統將記憶體中暫時不使用的內容換出到外存
-
區域性性原理
-
概念
- 區域性性原理是指程式在執行過程中一個較短時間內
,程式所執行的指令地址和運算元地址分別侷限於一定區域內
- 區域性性原理是指程式在執行過程中一個較短時間內
-
程式中少量分支和過程呼叫大都是順序執行
-
過程呼叫深度有限,
-
存在著許多迴圈
-
陣列等資料結構
-
體現
- 時間區域性性
- 空間區域性性
-
-
-
物質基礎
- 相當數量的外存
- 一定容量的記憶體
- 地址變換機構
-
記憶體分配和分配演算法
-
程序需要的最小物理塊數
-
執行一條指令所涉及的頁面數確定
-
單地址指令
- 直接定址
- 間接定址
- 功能較強時
-
-
程序的物理塊數是固定還是可變
- 固定分配區域性置換
- 可變分配全域性置換
- 可變分配區域性置換
-
按什麼原則為程序分配物理塊數
- 平均分配演算法
- 按比例分配演算法
- 按優先順序分配演算法
- 實現方案
-
區域性範圍內
-
頁面置換演算法
-
最佳置換演算法
-
將來最長時間不會使用
-
僅具有理論意義
-
-
-
先進先出演算法
- 選擇調入主存時間最長的頁面予以淘汰
-
最近最久未使用置換演算法
-
選擇最近一段時間內最長時間沒有被訪問過的頁面予以淘汰
-
實現
-
基於暫存器的方法
- 配置一個n位暫存器,在程序訪問頁面的時候最左置1
- 每過一段時間則計數器右移1位
- 最小數值的暫存器即最近最久未使用的頁面
- 配置一個n位暫存器,在程序訪問頁面的時候最左置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則需要系統回收共享段的實體記憶體及有關表項
-
-
分段保護
-
越界保護
- 用段表長度與邏輯地址中的段號比較
- 段長與邏輯地址中的段內位移比較
-
存取方式檢查
- 本段的訪問方式
-
環保護結構
- 低編號環具有高優先權
-
原則
- 一個程式可以訪問在相同的環或者較低環中的資料 - 一個程式可以呼叫駐留在相同環或較高環中的服務
-
-
-
-
特徵
- 多次性
- 對換性
- 虛擬性