【軟件開發底層知識修煉】四 深刻淺出處理器之四 結合高速緩存以及TLB與虛擬內存

學習交流加緩存

  • 我的qq: 1126137994
  • 我的微信: liu1126137994
  • 學習交流資源分享qq羣: 962535112

上一篇文章學習了(點擊連接查看上一篇文章上一篇文章):微信

  • 虛擬內存的概念與交換區的概念工具

  • MMU的做用學習

  • 虛擬內存機制的意義操作系統

    • 虛擬內存做爲內存管理工具
    • 虛擬內存做爲內存保護工具
  • 頁表的概念.net

  • 頁命中與缺頁翻譯

  • 程序的局部性在虛擬內存中的做用3d

  • MMU的地址翻譯過程cdn

0、回顧

回顧上一篇文章,這裏再補充一下:blog

  • 當頁命中時,CPU硬件執行的步驟

在這裏插入圖片描述

註釋:VA:虛擬地址 PTEA:頁表條目地址 PTE:頁表條目 PA物理內存地址

如上圖,CPU的執行步驟以下:

  1. 處理器生成一個虛擬地址,並把它傳送給MMU
  2. MMU生成PTE地址,並從高速緩存/物理內存請求獲得它
  3. 高速緩存/物理內存向MMU返回PTE
  4. MMU根據獲得的PTE索引頁表,從而構造物理地址,並把物理地址傳送給高速緩存/物理內存
  5. 高速緩存/物理內存返回請求的數據或者指令給CPU
  • 當缺頁時,CPU的硬件執行過程

在這裏插入圖片描述

註釋:VA:虛擬地址 PTEA:頁表條目地址 PTE:頁表條目

如上圖,CPU的執行步驟以下:

  1. 處理器生成一個虛擬地址,並把它傳送給MMU
  2. MMU生成PTE地址,並從高速緩存/物理內存請求獲得它
  3. 高速緩存/物理內存向MMU返回PTE
  4. PTE中的有效位是0,因此MMU觸發了一次異常,傳遞CPU中的控制到操做系統內核中的缺頁異常處理程序
  5. 缺頁異常處理程序肯定出物理內存中的犧牲頁,若是這個頁面被修改了,就將它換出道磁盤
  6. 缺頁異常處理程序將須要的頁面調入到高速緩存/物理內存,並更新內存中的PTE
  7. 缺頁異常處理程序返回到原來的進程,再次執行致使缺頁的指令。CPU將引發缺頁的地址再次發送給MMU。由於虛擬頁面如今緩存在物理內存中了,因此這次就會命中,物理內存就會將所請求的數據或者指令返回給CPU

能夠看到,頁命中與缺頁的前三步,都是同樣的。咱們還能夠總結出一個重要的結論: 頁命中徹底是由硬件來處理的,而缺頁,倒是由硬件和操做系統內核共同完成的。

一、高速緩存(Cache)的引入

看看上面分析頁命中與缺頁的過程當中,出現了高速緩存,若是隻有物理內存很好理解,如今出現高速緩存是啥意思?

學習過上一篇文章,咱們應該能夠理解頁命中,缺頁這些簡單的概念以及虛擬地址的尋址過程(若是不明白,建議先學習上一篇文章)。

咱們知道,CPU尋址時,從內存中獲取指令與數據的時間仍是至關大的(CPU的速度遠遠大於內存的速度)。因此高速緩存(Cache)就出現了。

  • Cache是一種小容量高速存儲器
  • Cache的存取速度與CPU的運算速度幾乎同量級
  • Cache在現代計算機系統中直接內置於處理器芯片中
  • 在處理器和內存之間設置cache(精確來說是將Cache放在MMU與物理內存之間)
  • 把內存中被頻繁訪問的數據和指令複製到cache中
  • 頁表也在內存中,將被頻繁訪問的PTE,複製到Cache中
  • 大多數狀況下,CPU能夠直接從cache中取指令與數據

以下圖,咱們先來看一個高速緩存與虛擬內存結合的例子,看看此時CPU的訪問過程:

在這裏插入圖片描述

這個圖,其實很好理解!!!當MMU要查詢PTEA以及PA時,都先去高速緩存中先查一下,看看有沒有,若是高速緩存中有PTEA與PA,直接從高速緩存中獲取數相應的PTE與數據。

若是高速緩存中沒有相應的PTEA或者PA時,就去物理內存中獲取,而後從物理內存中獲取以後,將獲取到的PTE或者數據再緩存到高速緩存中,而後高速緩存將獲取到的數據返回給CPU執行。

注意:由於Cache是放在MMU與物理內存之間的,因此高速緩存無需處理保護問題,由於訪問權限的檢查是MMU地址翻譯過程的一部分。

二、利用TLB加速地址翻譯

學到了這裏,咱們應該很清楚地址翻譯的過程了。若是不清楚,就須要看上一篇文章或者深刻理解計算機系統第九章。

在地址翻譯的過程當中,CPU每產生一個虛擬地址(VP),MMU都要去別的地方查詢一個PTE。這個別的地方指:高速緩存或者物理內存。

在最壞的狀況下(缺頁),須要訪問兩次物理內存。這種開銷是極其昂貴的。

在最好的狀況下,MMU也須要去高速緩存中獲取PTE對應的值。雖然高速緩存已經很快了,可是相對於CPU內部來講,仍是有點慢。

那麼能不能MMU不去別的地方獲取PTE?能不能在MMU內部也搞一個相似於高速緩存的東西,來存儲一部分常常被訪問的PTE?答案是能夠的!!!

在MMU中,有一個小的緩存,稱爲翻譯後備緩衝器(TLB)

以下圖示來看看帶有TLB的 MMU,且TLB命中時,是如何執行的

在這裏插入圖片描述

  1. CPU產生一個虛擬地址
  2. 第二部和第三部是MMU從TLB中取出相應的PTE
  3. MMU將這個虛擬地址翻譯成一個物理地址,並將它發送到高速緩存/物理內存。
  4. 高速緩存/物理內存將所請求的數據字返回給CPU

咱們能夠看到,TLB是虛擬尋址的緩存。

下面再來看看TLB不命中時,是如何執行的

在這裏插入圖片描述

當TLB不命中時,關鍵點在於,MMU必須從L1高速緩存中獲取到相應的PTE,新取出的PTE再放到TLB中,此時可能會覆蓋一個已經存在的條目。那麼當TLB中有了相應的PTE,MMU再去TLB中查找......

三、Cache與物理內存是如何映射的

這裏咱們只學習一下直接映射法:

3.一、直接映射法:

  • 將cache和物理內存分紅固定大小的塊(如512byte/塊)

  • 物理內存中的每一塊在cache中都有固定的映射位置

  • 對應的映射公式爲:

    • Pos(cache) = 內存塊號 % cache總塊數

如圖:

在這裏插入圖片描述

注意:任意一個物理內存塊均可以映射到惟一固定的cache塊(物理內存不一樣的塊,能夠映射到同一個cache塊)。

3.二、直接映射原理

好比咱們想要訪問某一個物理地址,咱們如何知道這個地址是否在cache中?或者如何知道它在cache中的位置?

首先,如今只有一個物理地址,須要根據這個物理地址進行判斷。

看下面,對物理地址有一個劃分:

在這裏插入圖片描述
以上的物理地址分爲3部分,都是什麼意思呢?

咱們利用如下規則來判斷;

  • 根據物理地址的中間的c位,找到cache中對應的塊

  • 比較物理地址的高t位,讓它與cache中的flag比較,看是否相同

    • 若是相同:說明數據在高速緩存中有緩存,那麼此時根據物理內存的b位找到cache對應的塊中的偏移
    • 若是不一樣:說明數據在緩存中沒有緩存,此時就將物理內存中對應的數據複製到cache中

好比下面這個例子:

在這裏插入圖片描述

3.三、直接映射法的特色

咱們已經知道,直接映射法,頗有可能不一樣的物理內存塊映射到相同的cache塊。因此直接映射法這樣會致使緩存失效。可是直接映射法過程簡單,所需耗時短!!

四、總結

下面籠統的用流程圖歸納一下處理器的數據訪問過程:

在這裏插入圖片描述

本篇文章學會了如下內容;

  • 高速緩存的做用
  • TLB的做用
  • 物理內存與cache之間的映射原理
相關文章
相關標籤/搜索