學習交流加緩存
- 我的qq: 1126137994
- 我的微信: liu1126137994
- 學習交流資源分享qq羣: 962535112
上一篇文章學習了(點擊連接查看上一篇文章上一篇文章):微信
虛擬內存的概念與交換區的概念工具
MMU的做用學習
虛擬內存機制的意義操作系統
頁表的概念.net
頁命中與缺頁翻譯
程序的局部性在虛擬內存中的做用3d
MMU的地址翻譯過程cdn
回顧上一篇文章,這裏再補充一下:blog
註釋:VA:虛擬地址 PTEA:頁表條目地址 PTE:頁表條目 PA物理內存地址
如上圖,CPU的執行步驟以下:
註釋:VA:虛擬地址 PTEA:頁表條目地址 PTE:頁表條目
如上圖,CPU的執行步驟以下:
能夠看到,頁命中與缺頁的前三步,都是同樣的。咱們還能夠總結出一個重要的結論: 頁命中徹底是由硬件來處理的,而缺頁,倒是由硬件和操做系統內核共同完成的。
看看上面分析頁命中與缺頁的過程當中,出現了高速緩存,若是隻有物理內存很好理解,如今出現高速緩存是啥意思?
學習過上一篇文章,咱們應該能夠理解頁命中,缺頁這些簡單的概念以及虛擬地址的尋址過程(若是不明白,建議先學習上一篇文章)。
咱們知道,CPU尋址時,從內存中獲取指令與數據的時間仍是至關大的(CPU的速度遠遠大於內存的速度)。因此高速緩存(Cache)就出現了。
以下圖,咱們先來看一個高速緩存與虛擬內存結合的例子,看看此時CPU的訪問過程:
這個圖,其實很好理解!!!當MMU要查詢PTEA以及PA時,都先去高速緩存中先查一下,看看有沒有,若是高速緩存中有PTEA與PA,直接從高速緩存中獲取數相應的PTE與數據。
若是高速緩存中沒有相應的PTEA或者PA時,就去物理內存中獲取,而後從物理內存中獲取以後,將獲取到的PTE或者數據再緩存到高速緩存中,而後高速緩存將獲取到的數據返回給CPU執行。
注意:由於Cache是放在MMU與物理內存之間的,因此高速緩存無需處理保護問題,由於訪問權限的檢查是MMU地址翻譯過程的一部分。
學到了這裏,咱們應該很清楚地址翻譯的過程了。若是不清楚,就須要看上一篇文章或者深刻理解計算機系統第九章。
在地址翻譯的過程當中,CPU每產生一個虛擬地址(VP),MMU都要去別的地方查詢一個PTE。這個別的地方指:高速緩存或者物理內存。
在最壞的狀況下(缺頁),須要訪問兩次物理內存。這種開銷是極其昂貴的。
在最好的狀況下,MMU也須要去高速緩存中獲取PTE對應的值。雖然高速緩存已經很快了,可是相對於CPU內部來講,仍是有點慢。
那麼能不能MMU不去別的地方獲取PTE?能不能在MMU內部也搞一個相似於高速緩存的東西,來存儲一部分常常被訪問的PTE?答案是能夠的!!!
在MMU中,有一個小的緩存,稱爲翻譯後備緩衝器(TLB)
以下圖示來看看帶有TLB的 MMU,且TLB命中時,是如何執行的
咱們能夠看到,TLB是虛擬尋址的緩存。
下面再來看看TLB不命中時,是如何執行的
當TLB不命中時,關鍵點在於,MMU必須從L1高速緩存中獲取到相應的PTE,新取出的PTE再放到TLB中,此時可能會覆蓋一個已經存在的條目。那麼當TLB中有了相應的PTE,MMU再去TLB中查找......
這裏咱們只學習一下直接映射法:
將cache和物理內存分紅固定大小的塊(如512byte/塊)
物理內存中的每一塊在cache中都有固定的映射位置
對應的映射公式爲:
如圖:
注意:任意一個物理內存塊均可以映射到惟一固定的cache塊(物理內存不一樣的塊,能夠映射到同一個cache塊)。
好比咱們想要訪問某一個物理地址,咱們如何知道這個地址是否在cache中?或者如何知道它在cache中的位置?
首先,如今只有一個物理地址,須要根據這個物理地址進行判斷。
看下面,對物理地址有一個劃分:
咱們利用如下規則來判斷;
根據物理地址的中間的c位,找到cache中對應的塊
比較物理地址的高t位,讓它與cache中的flag比較,看是否相同
好比下面這個例子:
咱們已經知道,直接映射法,頗有可能不一樣的物理內存塊映射到相同的cache塊。因此直接映射法這樣會致使緩存失效。可是直接映射法過程簡單,所需耗時短!!
下面籠統的用流程圖歸納一下處理器的數據訪問過程:
本篇文章學會了如下內容;