TLBs,頁結構cache和無效協議 閱讀總結

2021-08-23 15:54:13 字數 2387 閱讀 8376

tlbs, paging-structure caches, and their invalidation

1 處理器是通過「分頁機制」實現的線性位址到實體地址的轉換,這些轉換主要包括:

(1)指令的獲取和普通資料的訪問

(2)推測執行的預取和記憶體訪問(這部分並不在**的執行路徑中,也不會引起缺頁異常)

」分頁機制「的執行主要由分頁模型決定,下面我們就來看一下主要的分頁模型:

(1)cr4.pae = 0,此時將32位的線性位址轉換為32的實體地址,當開啟大頁模式時,也可以把32位線性位址轉換成36位的實體地址

(2)cr4.pae = 1 and ia32_efer msr.lma =0,此時將32位的線性位址轉換成36位的實體地址

(3)cr4.pae = 1 and ia32_efer msr.lma =1,此時將48位的線性位址轉換成52位的實體地址

2 paging in ia-32e mode

圖中63-48位是第47位的符號擴充套件,cr3中儲存的是pml4 table的實體地址,那麼整個定址的過程如下:

cr3 + pml4 確定pml4 table中的某一項,512=2^9,所以只有乙個pml4 table

cr3 + pml4 + directory ptr 確定頁目錄項中的某一項,同理,也只有乙個頁目錄項表

cr3 + pml4 + directory ptr + directory 確定某乙個頁表項,也只有乙個頁表項表

cr3 + pml4 + directory ptr + directory + table 確定某乙個也表,也只有乙個也表

最後加上便宜就可以得到相應的實體地址。

注意:每一級的表中都是512項,每一項是乙個64位的入口

(1)present: 標識包含訪問實體地址的頁框是否在記憶體中

(2)read/write: 讀寫許可權位

(3)user/supervisor: 使用者/核心訪問許可權位

(4)access:是否被訪問,1表示被訪問過

(5)dirty:是否被寫過, 1 表示被寫過

(6)resevred:這些位必須被設為0,否則將產生page fault

(7)execute-disable:1 正常 0產生page fault

3 translation lookaside buffers (tlbs)

先給出自己理解的tlbs,如果有錯,敬請斧正。

每次定址時,首先比較線性位址的也號是否在tlbs中,如果在直接取其實體地址,否則,進行其他的位址轉換步驟。對於tlbs感覺從這個表中就可以理解了,這裡就不在羅嗦了!

4 paging-structure caches

pml4 cache,pde cache和pte cache.

顧名思義,上面這些cache就是用來快取以前相應的級別的線性位址轉換的結果的,這沒有什麼好講的,另一方面,採用這種機制無非也是想加快線性位址到實體地址的轉換,使得以前的轉換結果可以得到最大可能的利用。那麼,定址的過程就變成了這麼乙個順序:

如果在tlbs中沒有命中,就到pte cache中查詢,找到,直接就取得相應頁表的實體地址,如果不命中,就到上一級的pde cache中查詢,一次類推,直到到達pml4 cache,如果還沒有找到,就要從頭開始進行分頁機制的位址轉換了,具體的轉換過程上面已經講到過。

5 multiple cached entries for a single paging-structure entry

按照題目翻譯,這部分的意思就是可能存在這麼一種情況:

對於某一級的乙個頁結構的入口位址,可能有多個快取入口的情況,下面我們來考慮一下,在什麼情況下會出現這種情況。

這種情況下到底有什麼優缺點我還怎麼看明白,以後補充!

6 tlbs 和各級頁結構cache的無效

這部分就是講無何保證tlbs和各級頁結構cache的內容是最新的,即是修改過的。

下面講了使cache無效的方法:

頁結構cache而不管是否是不是與所指的線性位址相對應。

(2) mov to cr3:無效所有的tlbs,除了那些g=1的tlbs入口。同時無效所有的

頁結構cache

(3)mov to cr4:如果這條指令修改了cr4的pge位,將會無效所有的tlbs入口,包括那些g=1的入口,同時,無效所有的

頁結構cache

除了上面提到的無效的情況,page fault也會使tlbs和各級cache中相同的線性位址的的入口無效。

這本intel手冊後面還講到了一些優化的使無效方法,帶有擴充套件的32位的頁模式,以及多處理器上頁結構變化的傳播。總體來說對我們使用者級的程式設計沒有什麼太大關係,個人感覺僅僅是講了一種原理,而且,我是本著了解l2cache的替換策略來閱讀這本手冊的,讀完後,感覺對我的目的沒有什麼太大的幫助,就當是增加一點intel體系結構的常識吧!

最後,希望有興趣的朋友能和我多家討論關於cache的相關知識。

mysql 頁 MySQL資料結構 頁結構

innodb設計了多種頁結構用於存放不同型別的資料,我們現在主要研究存放資料的頁,稱為索引頁或資料頁。每個頁由七部分組成,大致功能如下 fileheader 檔案頭 記錄頁的通用資訊,比如上下頁的頁號,頁型別,所有的資料頁其實是乙個雙鏈表 pageheader 頁頭 記錄本頁儲存記錄的狀態資訊,比如...

儲存層次結構 cache 編譯

先給出計算機儲存層次結構一組資料 儲存層級 1 2 34 名稱 暫存器快取記憶體 cache 主存 硬碟一般容量 1kb 16m 512gb 1tb 實現技術 cmos,cmos sram cmos dram 磁碟 訪問時間 ns 0.25 0.5 5 25 50 250 5000000 頻寬 50...

利用 cache 做對比靜態頁的網頁技術

一直想寫一套生成靜態頁面的文章系統 但面對生成靜態後的一些複雜資料庫互動問題。又望而卻步!於是就想 有沒有 在不耽誤資料互動的情況下,而又能降低伺服器負擔的方法呢!乙個 訪問量最大的莫過於 首頁 和主欄目頁了。其他的頁面 我可以不去想,首頁和主欄目頁 在大流量下伺服器改如何承擔呢。根據我程式設計2年...