OS學習筆記五:儲存模型

衣舞晨風發表於2017-10-07

一、地址重定位

1、已知內容

  • 程式裝載到記憶體才可以執行

    • 通常,程式以可執行檔案格式儲存在磁碟上
  • 多道程式設計模型

    • 允許多個程式同時進入記憶體
  • 每個程式有自己的地址空間

    • 一個程式執行時不能訪問另一個程式的地址空間

    • 程式對於記憶體空間不能執行不適合的操作

  • 程式中 的地址 不是 最終的物理 地址

  • 在程式執行 前無法計算出實體地址

    • 因為:不能確定程式被 載入到記憶體什麼 地方

    • →→ 需要 地址重定位 的支援

    • 地址轉換、地址變換、地址翻譯、地址對映Translation 、Mapping

2、地址重定位RELOCATION(地址翻譯、地址轉換、地址對映)

  • 邏輯地址(相對地址,虛擬地址)

    使用者 程式經過 編譯、彙編後形成目的碼,目的碼通常採用相對地址的形式,其首地址為0 ,其餘地址都相對於首地址而編址不能用邏輯地址在記憶體中讀取資訊

  • 實體地址(絕對地址,實地址)

    記憶體中儲存單元的 地址 可直接定址

為了保證CPU 執行指令時可正確 訪問記憶體單 元, 需要將 使用者程式中的邏輯地址轉換為執行 時可由 機器直接定址的實體地址,這一過程稱為 地址重定位

3、靜態重定位與動態重定位

  • 靜態重定位:

    當 使用者程式載入到記憶體時,一次性實現邏輯地址到實體地址的 轉換

    一般 可以由軟體完成

  • 動態重定位:

    在 程式執行過程中進行地址變換,即 逐條指令執行時 完成地址轉換

    需要硬體部件支援

這裡寫圖片描述

4、記憶體回收問題

記憶體回收演算法

  • 當某一塊歸還後,前後空閒空間合併,修改記憶體空閒區表

  • 四種情況

    • 上相鄰、 下相鄰、上下都相鄰、上下都不相鄰

5、夥伴系統(BUDDY SYSTEM)

Linux 低層記憶體管理採用,一種特殊的“分離適配”演算法

  • 一種經典的記憶體分配方案

  • 主要思想:將記憶體按2 的冪進行劃分,組成若干空閒塊連結串列;查詢該連結串列找到能滿足程式需求的最佳匹配塊

  • 演算法:

    • 首先將整個可用空間看作一塊: 2^U

    • 假設程式申請的空間大小為 s ,如果 滿足2^(U-1) < s <= 2^U ,則分配整個塊;

    • 否則,將塊劃分為兩個大小相等的夥伴,大小為2^(U-1)
    • 一直劃分下去直到產生 大於或等於 s

這裡寫圖片描述

6、頁式儲存管理方案

  • 設計思想

    • 使用者 程式地址空間被劃分 為大小 相等的 部分,稱為 頁(page )或頁面 ,從0 開始編號

    • 記憶體 空間按同樣大小 劃分為大小相等的區域,稱為 頁 框(page frame ) ,從0 開始編號;也稱為物理 頁面 ,頁 幀,記憶體 塊

    • 記憶體 分配(規則)

    以 頁為單位進行分配,並按 程式需要的頁數來分配;邏輯 上相鄰的頁,物理上不一定 相鄰

    • 典型頁面尺寸:4K 或 4M

7、頁式儲存相關資料結構及地址轉換

  • 頁表

    • 頁表項: 記錄了邏輯頁號與頁框號的對應關係

    • 每個程式一個頁表,存放 在 記憶體

    • 頁表起始地址儲存在何處?

  • 空閒記憶體管理

  • 地址轉換(硬體 支援 )

    CPU 取到邏輯地址,自動劃分為頁號和頁內地址;用頁號查頁表,得到頁框號,再與頁內偏移拼接成為實體地址

8、段式儲存管理

具體內容參考講義

9、段頁式儲存管理

具體內容參考講義

10、交換技術(SWAPPING)

  • 設計思想

    記憶體 空間緊張時,系統將記憶體中某些程式暫時移到外存,把外存中某些程式換進記憶體,佔據前者所佔用的 區域(程式 在記憶體 與磁碟之間 的 動態排程)

  • 討論:實現時遇到的問題

    • 程式的哪些內容要交換到磁碟?會遇到什麼困難?

    • 在磁碟的什麼位置儲存被換出的程式?

    • 交換 時機?

    • 如何選擇被換出的程式?

    • 如何處理程式空間增長?

  • 關於討論的問題

    • 執行時建立或修改的內容:棧和堆

    • 交換區: 一般系統會指定一塊特殊的磁碟區域作為交換空間(swap space ),包含連續的磁軌,
      作業系統可以使用底層的磁碟讀寫操作(不經過檔案系統)對其高效訪問

    • 何時 需發生交換?

    只要 不用就換出(很少再用 );記憶體 空間不夠或有不夠的危險時換 出
    與排程器結合使用

    • 考慮程式的各種屬性;不應換 出處於等待I/O 狀態的

12、虛擬儲存技術

  • 所謂虛擬儲存技術是指:當程式 執行時,先將其一部分裝入記憶體,另一部分暫留在磁碟,當要執行的指令或訪問的資料不在記憶體時,由作業系統自動完成將它們從磁碟調入記憶體的 工作

  • 虛擬地址空間 即為 分 配給程式的虛擬 內 存

  • 虛擬地址 是 在 虛擬記憶體 中 指令或資料的 位置 ,該 位置可以被訪問,彷彿它是記憶體的 一部分

  • 虛存提供了一 個比實體記憶體空間大得多的地址空間

  • 虛存的上限主要由:CPU的定址空間及磁碟可用空間決定

13、地址保護

  • 確保每個程式有獨立的地址空間

  • 確 保 程式訪問合法 的地址範圍

  • 確保程式的操作是合法的

這裡寫圖片描述

14、虛擬頁式(PAGING)

  • 虛擬儲存技術 + 頁式儲存管理方案

    → 虛擬頁式儲存管理系統

  • 基本思想

    • 程式開始執行之前,不是裝入全部頁面,而是裝入一個或零個頁面

    • 之後,根據程式執行的需要,動態裝入 其他頁面

    • 當記憶體空間已滿,而又需要裝入新的頁面時,則根據某種演算法置換記憶體中的某個頁面,以便裝入新的 頁面

  • 具體有兩種 方式

    1 、請求調頁 (demandpaging )

    2 、預先調頁(prepaging )

  • 以CPU 時間 和磁碟空間換取昂貴記憶體空間,這是作業系統中的資源轉換技術

二、頁框及頁表項的設計

這裡寫圖片描述

1、頁表表項設計

  • 頁表由頁表項組成

  • 頁 框號、有效 位、訪問位、修改 位、保護 位

    • 頁框號(記憶體塊號、物理頁面號、頁幀號)

    • 有效位(駐留位、中斷位):表示該頁是在記憶體還是在磁碟

    • 訪問位:引用位

    • 修改位:此頁在記憶體 中是否被 修改過

    • 保護位:讀/ 可讀寫

通常,頁表項是硬體設計的

2、引入反轉(倒排)頁表

  • 地址轉換

    • 從虛擬地址空間出發:虛擬地址 → 查頁表 → 得到頁框號 → 形成實體地址

    • 每個程式一張頁表

  • 解決思路

    • 從實體地址空間出發,系統建立一張頁表

    • 頁表項記錄程式i 的某虛擬地址( 虛頁號) 與頁框號的對映關係

3、反轉(倒排)頁表設計

這裡寫圖片描述

4、快表的引入

問題

  • 頁表 → 兩次或兩次以上的記憶體訪問

  • CPU 的指令處理速度與記憶體指令的訪問速度差異大,CPU 的速度得不到充分利用

  • 如何加快地址對映速度,以改善系統效能?

  • 程式訪問的區域性性原理 → 引入快表(TLB)

5、快表

  • TLB — Translation Look-aside Buffers

    在CPU 中 引入的快取記憶體 (Cache ),可以 匹配CPU 的處理速率和記憶體的訪問 速度

    一種隨機存取型儲存器,除連線定址機制外,還有接線邏輯,能按特定的匹配標誌在一個儲存週期內對所有的字同時進行

  • 相聯儲存器(associative memory )

    特點:按內容並行查詢

  • 儲存 正在執行程式的頁表的子集( 部分頁表項)

這裡寫圖片描述

6、頁錯誤PAGE FAULT

  • 又稱 頁面錯誤、頁故障、頁面失效

  • 地址轉換過程中硬體產生的異常

  • 具體原因

    • 所 訪問 的 虛擬 頁面沒有 調入實體記憶體
      → 缺頁異常

    • 頁面訪問 違反許可權(讀/ 寫、使用者/ 核心)

    • 錯誤的訪問地址

    • … …

7、缺頁異常處理

  • 是 一種Page Fault

  • 在地址對映過程中,硬體檢查頁表時發現所要訪問的頁面不在記憶體,則產生該異常—— 缺頁異常

  • 作業系統執行 缺頁異常處理程式:獲得磁碟地址,啟動磁碟,將該頁調入記憶體

    • 如果記憶體中有空閒頁框,則分配一 個 頁框,將新調入頁裝入,並修改頁表中相應頁表項的 有效 位及相應的頁框號

    • 若記憶體中沒有空閒頁框,則要置換記憶體中某一頁框;若該頁框內容被修改過,則要將其寫回磁碟

8、駐留集

  • 駐留集大小

    給每個程式分配多少頁框?

9、置換策略

  • 決定置換當前記憶體中的哪 一個 頁 框

  • 所有策略的目標

    → 置換 最近最不可能訪問的頁

  • 根據 區域性性原理,最近的訪問歷史和最近將要訪問的模式間 存在 相關性 , 因此,大多數策略都 基於過去的行為來預測將來的行為

  • 注意: 置換策略設計得越精緻、越複雜,實現的軟硬體開銷就越大

  • 約束:不能置換被鎖定的頁框

10、頁框鎖定

為什麼要鎖定頁面?

  • 採用虛存技術後

    開銷 → 使程式執行時間變得不確定

  • 給每一頁框增加一個鎖定位

  • 通過設定相應的鎖定位,不讓作業系統將程式使用的頁面換出記憶體,避免產生由交換過程帶來的不確定的延遲

  • 例如:作業系統核心程式碼、關鍵資料結構、I/O緩衝區

Windows 中的VirtualLock 和VirtualUnLock

11、清除策略

  • 清除:從程式的駐留集中收回頁框

  • 虛擬 頁 式 系統工作 的 最佳狀態 : 發生缺頁 異常 時 ,系統中有大量的空閒頁框

  • 結論:在系統中 儲存一定數目的 空閒 頁框供給比使用所有記憶體並在需要時搜尋一個頁框有更好的效能

1、設計一個分頁守護程式(paging daemon ),多數時間睡眠著,可定期喚醒以檢查記憶體的狀態
2、如果空閒頁框過少,分頁守護程式通過預定的頁面置換演算法選擇頁面換出記憶體
3、如果頁面裝入記憶體後被修改過,則將它們寫回磁碟分 頁守護程式可保證所有的空閒頁框是“乾淨”的

  • 當 程式 需要使用一個已 置換出 的頁 框 時,如果該頁框還沒有被 新的內容 覆蓋,將 它 從空閒頁框 集合

  • 頁緩衝技術:

    • 不 丟棄 置換出的頁, 將它們放入 兩個表之一:如果未被修改,則 放 到空閒頁 鏈 表 中 ,如果修改了,則 放 到修改頁 鏈 表 中

    • 被修改的 頁 定期 寫 回 磁碟( 不是一次只寫一個,大大減少I/O 操作的數 量 ,從而減少了磁碟訪問時間)

    • 被置換的頁仍然保留在記憶體中, 一旦 程式 又要 訪問該頁,可以迅速 將它加入 該程式的駐留集合( 代價很小)

12、影響缺頁次數的因素

  • 頁面置換演算法

  • 頁面本身的大小 √

  • 程式的編制方法 √

  • 分配給程式的頁框數量 √

顛簸 (Thrashing ,抖動 )

虛 存中,頁面在記憶體 與磁碟之間 頻繁排程 ,使得排程 頁面所 需的時間 比程式實際執行的時間還多 ,這樣導致系統 效率急劇下降,這種現象稱為顛簸或抖動

13、頁面淘汰(替換)演算法

  1. 最佳頁面置換演算法(OPT)
  2. 先進先出演算法(FIFO)
  3. 第二次機會演算法(SCR)
  4. 時鐘演算法(CLOCK)
  5. 最近未使用演算法(NRU)
  6. 最近最少使用演算法(LRU)
  7. 最不經常使用演算法(NFU)
  8. 老化演算法(AGING)
    這裡寫圖片描述
  9. 工作集
  10. 工作集時鐘

1、2、3、4、5、6、7、9、10具體內容參考講義

14、記憶體對映檔案

  • 基本 思想

    程式通過一個系統 呼叫(mmap) 將 一個 檔案( 或部分) 對映 到其虛擬地址空間的一部分 , 訪問這個檔案就象訪問記憶體中的一個大陣列,而不是對檔案進行讀寫

  • 在多數實現中,在對映共享的頁面時不會實際讀入頁面的內容,而是在訪問頁面時,頁面才會被每次一頁的讀入,磁碟檔案則被當作後備儲存

  • 當程式退出或顯式地解除檔案對映時,所有被修改

本文整理自:《作業系統原理》北京大學_陳向群 講義

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章