操作系統---內存管理(中) 分頁存儲


內存管理學習筆記 :

操作系統---內存管理(上) 概念 覆蓋交換技術 連續分配管理方式

操作系統---內存管理(中) 分頁存儲

操作系統---內存管理(下) 分段存儲 段頁式存儲 虛擬內存 請求分頁管理方式

本節筆記對應的課件下載地址

上一節 : 操作系統---內存管理(上)
大綱 :

1591601944218

基本分頁存儲管理

頁框和頁面

思想 : 把內存分為一個個相等的小分區, 再按照分區大小把進程拆分成一個個小部分.

  • 頁框 : 1591602434057

  • 頁面 : 1591602463134

注意區分頁框和頁面的概念, 頁框是針對內存的, 頁面是針對進程的

1591602527452

地址轉換的實現

  • 特點 : 頁面離散存放, 但是頁面內部連續存放
  • 訪問邏輯地址A : ( 重點 )
    • 確定邏輯地址A的 " 頁號 " P
    • 找到P號頁面在內存中的起始地址 ( 需要查找頁表 )
    • 確定邏輯地址A的 " 頁內偏移 " W
    • 邏輯地址 A的物理地址 = P號頁面在內存中的起始地址 + 頁內偏移量W

頁號和頁內偏移量

e.g.

1591603568989

為了方便計算頁號和頁內偏移量, 頁面大小一般設置為2的整數冪( why ? ) :

1591603831001

( 妙啊 )

1591604146456

頁表

1591604318480

tips : 頁表中的頁號是"隱含"的, 可以不占用存儲空間

e.g.

假設某系統物理內存大小為 4GB, 頁面大小為 4KB, 則
每個頁表項至少應該為多少字節?

  1. 內存塊大小=頁面大小=4KB= $ 2^{12} $B
  2. 4GB 的內存總共會被分為$ \frac{ 2^{32} }{ 2^{12} } = 2^{20} $個內存塊
  3. 內存塊號的范圍應該是 0 ~ $ 2^{20} -1 $
  4. 內存塊號至少要用 20 bit 來表示
  5. 至少要用3B來表示塊號(3*8=24bit)

(但是, 為了方便頁表的查詢, 常常會讓一個頁表項占更多的字節, 使得每個頁面恰好可以裝得下整數個頁表項)

  1. 如何理解 "頁號是隱含的" : 1591605407429

基本地址變換機構

框圖 : ( 重點 ! )

1591606164609

步驟總結 :

  1. 根據邏輯地址計算出頁號和頁內偏移量

  2. 判斷頁號是否越界

  3. 查詢頁表, 找到頁號對應的頁表項, 確定頁面存放的內存塊號

  4. 用內存塊號和頁內偏移量得到物理地址 ( 頁表長度*物理塊號 + 頁內偏移 = 物理地址 ( 計算機直接采用拼接物理塊號和頁內偏移的方式得到物理地址 ) )

  5. 訪問目標單元

( 一共需要訪問兩次內存 : 第一次用來查頁表, 第二次用於訪問目標內存單元 )

具有快表的地址變換機構

局部性原理
  • 時間局部性

    如果執行了程序中的某條指令, 那么不久之后這條指令很有可能再次執行; 如果某個數據被訪問過, 不久之后該數據很可能再次被訪問

    ( 程序中存在大量的循環 )

  • 空間局部性

    一旦程序訪問了某個存儲單元, 在不久之后, 其附近的存儲單元也很有可能被訪問到

    ( 很多數據在內存中連續存放 )

快表(TLB)

快表又成為聯想寄存器(TLB), 是一種訪問速度比內存塊很多的高速緩沖存儲器, 用來存放當前訪問的若干頁表項, 以加速地址變換的過程. 與此對應的, 內存中的頁表常稱為慢表.

1591608265060

1591608283095

步驟總結 :

1591608390963

快表與基本地址變換機構的比較 :

1591608671153

tips : TLB 和 普通 Cache 的區別——TLB 中只有頁表項的副本, 而普通 Cache 中可能會有其他各種數據的副本

兩級頁表

單級頁表存在的問題 :

  1. 由於頁號隱式表示, 所以要根據頁號查詢頁表需要 :

K 號頁對應的頁表項存放位置 = 頁表始址 + K * 4
要在所有的頁表項都連續存放的基礎上才能用這種方法找到頁表項

  1. 同時, 由局部性原理可知, 很多時候, 進程在一段時間內只需要訪問某幾個頁面就可以正常運行了, 因此沒有必要讓整個頁表都常駐內存

1591610693746

解決 : 把頁表再分頁並離散存儲, 然后再建立一張頁表記錄頁表各個部分的存放位置, 稱為頁目錄表, 或稱外層頁表, 或稱頂層頁表.

1591611068777

e.g.

1591611089621

關於頁表常駐內存的解決 -- ( 虛擬存儲技術 ) , 在頁表項中增加一個標志位, 用於表示該頁面是否已經調入內存

1591611260519

注意:

  • 如果采用多級頁表機制, 各級頁表不能超過一個頁面

  • 兩級頁表的訪存次數分析 :

    n級頁表訪存次數為n+1次: ( 以2級頁表為例 )

    1. 訪問內存中的頁目錄表 ( 頂級頁表 )
    2. 訪問內存中的二級頁表
    3. 訪問目標內存單元

ref : https://www.bilibili.com/video/BV1YE411D7nH?p=41


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM