天天看點

OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

非連續記憶體配置設定的需求

  • 有可能找不到連續的一塊記憶體空間滿足程序需求
  • 連續配置設定存在内碎片,外碎片,記憶體使用率比較低
  • 非連續記憶體配置設定目标:提高記憶體利用效率以及管理靈活性
  • 于是由于非連續記憶體塊的大小分成了:段式,頁式,頁表,段頁式
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

段式存儲管理

  • 實作更靈活的分離與共享
  • 程序分成多個段後映射到實體位址空間就是不連續的了,其中每個段的邏輯位址都由段号s和段内偏移addr構成
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
  • 段内要求連續,段間不一定連續,故整個程序的位址空間是二維的
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
  • 首先用段号查段表,裡面有它的起始位址和長度,由作業系統控制
  • MMU檢查addr偏移是否大于段的長度,合法就用段基址+偏移得到實際的實體位址
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

頁式存儲管理

頁幀(Page Frame,頁框)

  • 針對實體空間的劃分,分成2的n次幂大小的基本機關
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

頁面

  • 針對邏輯位址空間的劃分,大小和頁幀一樣
  • 頁内偏移W=幀内偏移
  • 通過記憶體中的頁表将頁号轉換成頁幀
  • 頁表裡存儲了每個頁号P對應的幀号,找到後通過左移頁幀大小的2進制的位數得到
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

頁表

  • 每個程序都有一個頁表
  • 頁表裡面的内容是動态變化的
  • 要實作動态變化故加入存在位(檢查頁号對應的頁幀是否存在)、引用位、修改位
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

頁表中存在的問題

  • 找特定頁幀号,記憶體需要兩次通路
  • 頁表可能會特别大
  • 處理方式使用緩存:快表;間接通路:多級頁表
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

快表+多級頁表

  • 快表放在高速緩存裡,快表滿時會根據一定的算法對舊頁表項做替換
  • 快表命中率可達90%,這是基于著名的局部性原理的原因
  • cpu會緩存近期通路的頁表項作為快表(又稱,相聯存儲器)
  • 多級頁表後一級頁表大小對應前一級需要存儲的位址大小
  • 由于程序不會使用到所有的頁表,故可以減小頁表大小
  • 後一級的頁表号會作為頁内偏移加上前一級的頁表号構成實際實體位址
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理

段頁式存儲管理

  • 系統會給每個程序建立一個段表,每個分段有一張頁表,故每個程序隻有一個段表,可能有多個頁表
  • 分成段号S,頁号P,頁内偏移W
  • 利用段号S找到該段對應的頁表号,将該頁表号加頁号P作為頁内偏移得到真正頁号,再加頁内偏移W得到實體位址
OS學習筆記-6(清華大學慕課) 非連續記憶體配置設定管理
  • 将共享段使用同一個頁表

繼續閱讀