【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)
生活随笔
收集整理的這篇文章主要介紹了
【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一. 分頁存儲概念
- 二. 地址轉換
- 1)為什么頁面大小為2的次冪?
- 三. 頁表
- 1)頁表項長度、頁號"隱含"
- 四. 局部性原理與快表
- 五. 二級頁表
- 1)單級頁表存在的問題
- 2)兩級頁表
- 3)如何解決單級頁表的問題
一. 分頁存儲概念
- 內存分成等大區域(頁框),頁框號從0開始
- 進程也分成和頁框等大的區域(頁),頁號也從0開始
- 頁框不能太大,可能產生過大內部碎片(進程的最后一個頁面不一定撐滿頁框)
- 進程頁面 - 內存頁框一一對應。
二. 地址轉換
- 找邏輯地址對應頁號
- 找頁號對應內存的起始地址①
- 計算邏輯地址在頁面內的偏移量②
- 物理地址 = 頁面起始① + 頁內偏移量②
1)為什么頁面大小為2的次冪?
- 方便計算
- 偏移量最大值 - 對應一個頁面持有內存單元個數(k 位 - 2k2^k2k個)
- 頁號 - 對應一個進程最多允許持有頁面個數(m 位 - 2m2^m2m個)
三. 頁表
- 記錄每個頁面在內存中的位置
- 頁表項 = 頁號 + 塊號(由塊號獲取內存地址)
1)頁表項長度、頁號"隱含"
- 因為頁表項按序連續存于內存,且頁號長度相同,因此頁號無需明確表示。
- 延申:理論上 3B 就夠,但是為了方便頁表的查詢,常常會讓一個頁表項占有更多字節,使得每個頁面恰好裝得下整數個頁表項(也就沒有內存碎片,比如此處 4KB % 3B = 1B 的內存碎片,但是 4KB % 4B = 0B)
四. 局部性原理與快表
- 時間局部性:指令一段時間內可能多次執行(由于程序存在循環)
- 空間局部性:存儲單元附近的存儲單元可能被訪問(由于很多數據在內存中連續存放)
- 快表:高速緩沖寄存器,比內存塊。用來存放當前訪問的若干頁表項,達到加速地址變換的效果。
- 慢表:內存中的頁表
- 快表使用:
- 快表:命中率高、一次訪問內存。滿則置換
- 慢表:兩次訪存
五. 二級頁表
1)單級頁表存在的問題
- 單級頁表太大,又由局部性原理知道一段時間內只需訪問幾個頁面即可,沒必要讓整個頁表常駐內存
- 解決方法:對頁表分組,分組與內存塊等大。可以離散存放頁表分組了,也因此,需要再給離散的頁表建一個頁表——頂層頁表。
2)兩級頁表
- 32位、頁 4KB、頁表項 4B 的情況下,可知頁表需要占用 2^10 = 1024 個頁框。
- 那么,我們可以使用離散的1024個頁框,然后用一個頂級頁表來記錄這些頁框的塊號
- 也就可以推出:一級頁號用 10B,二級頁號用 10B(二級頁表的排法)
3)如何解決單級頁表的問題
- 需要記錄某一頁表是否在內存中
- 兩級頁表不夠,就用更多級
- 多級頁表的訪存次數 = N級頁表用 N + 1 次(沒有快表的情況)
總結
以上是生活随笔為你收集整理的【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux3.x内核实时性改进,linu
- 下一篇: 【LeetCode笔记】剑指 Offer