深度理解TLB機制
TLB:Translation Lookaside Buffer.
根據功能可以譯為快表,直譯可以翻譯為旁路轉換緩衝,也可以把它理解成頁表緩衝。裡面存放的是一些頁表文件(虛擬地址到實體地址的轉換表)。當處理 器要在主記憶體定址時,不是直接在記憶體的實體地址裡查詢的,而是通過一組虛擬地址轉換到主記憶體的實體地址,TLB就是負責將虛擬記憶體地址翻譯成實際的物理內 存地址,而CPU定址時會優先在TLB中進行定址。處理器的效能就和定址的命中率有很大的關係。
對映機制必須使一個程式能斷言某個地址在其自己的程序空間或地址空間內,並且能夠高效的將其轉換為真實的實體地址以訪問記憶體。一個方法是使用一個含 有整個空間內所有頁的入口(entry)的表(即頁表),每個入口包含這個頁的正確實體地址。這很明顯是個相當大的資料結構,因而不得不存放於主存之中。
由於CPU首先接到的是由程式傳來的虛擬記憶體地址,所以CPU必須先到實體記憶體中取頁表,然後對應程式傳來的虛擬頁面號,在表裡找到對應的物理頁面 號,最後才能訪問實際的實體記憶體地址,也就是說整個過程中CPU必須訪問兩次實體記憶體(實際上訪問的次數更多)。因此,為了減少CPU訪問實體記憶體的次 數,引入TLB。
====================================================
cpu 記憶體
TLB <============================> 記憶體頁表
L1 Cache <=====>L2 Cache<=========> 記憶體資料
====================================================
TLB種類
TLB在X86體系的CPU裡的實際應用最早是從Intel的486CPU開始的,在X86體系的CPU裡邊,一般都設有如下4組TLB:
第一組:快取一般頁表(4K位元組頁面)的指令頁表快取(Instruction-TLB);
第二組:快取一般頁表(4K位元組頁面)的資料頁表快取(Data-TLB);
第三組:快取大尺寸頁表(2M/4M位元組頁面)的指令頁表快取(Instruction-TLB);
第四組:快取大尺寸頁表(2M/4M位元組頁面)的資料頁表快取(Instruction-TLB);
圖中可見,當CPU執行機構收到應用程式發來的虛擬地址後,首先到TLB中查詢相應的頁表資料,如果TLB中正好存放著所需的頁表,則稱為TLB命中(TLB Hit),接下來CPU再依次看TLB中頁表所對應的實體記憶體地址中的資料是不是已經在一級、二級快取裡了,若沒有則到記憶體中取相應地址所存放的資料。如果TLB中沒有所需的頁表,則稱為TLB失敗(TLB Miss),接下來就必須訪問實體記憶體中存放的頁表,同時更新TLB的頁表資料。
既然說TLB是記憶體裡存放的頁表的快取,那麼它裡邊存放的資料實際上和記憶體頁表區的資料是一致的,在記憶體的頁表區裡,每一條記錄虛擬頁面和物理頁框對應關係的記錄稱之為一個頁表條目(Entry),同樣地,在TLB裡邊也快取了同樣大小的頁表條目(Entry)。由於頁表條目的大小總是固定不變的,所以TLB的容量越大,則它所能存放的頁表條目數越多(類似於增大CPU一級、二級快取容量的作用),這就意味著快取命中率的增加,這樣,就能大大減少CPU直接訪問記憶體的次數,實現了效能提升。
4. TLB的聯合方式:
TLB內部儲存空間被劃分為大小相同的塊(即TLB頁表條目),這些塊的大小=記憶體的頁表區裡頁表條目的大小.
所以,就可以在TLB頁表條目和記憶體頁表條目間建立一定的相互對應關係。當CPU需要頁表資料時,它必須迅速做出如下的2個判斷:一個是所需要的頁表是否已快取在TLB內部(即判斷TLB命中或是失敗),另一個是所需要的頁表在TLB內的哪個條目內。為了儘量減少CPU做出這些判斷所需的時間,就必須在TLB頁表條目和記憶體頁表條目之間的對應方式上動點腦筋。
最後附上一張在維基百科找到的更加符合真實地址翻譯的流程供大家參考,這張圖加入了TLB和缺頁異常的流程(圖片來源頁)。
相關推薦
深度理解TLB機制
TLB:Translation Lookaside Buffer. 根據功能可以譯為快表,直譯可以翻譯為旁路轉換緩衝,也可以把它理解成頁表緩衝。裡面存放的是一些頁表文件(虛擬地址到實體地址的轉換表)。當處理 器要在主記憶體定址時,不是直接在記憶體的實體地址裡查詢的,而是
深度理解nodejs[1]-node底層機制
nodejs作為javascript在後端執行的環境,原始碼由js與C完成。本質上,nodejs是藉助於谷歌V8引擎來執行javascript程式碼。使用了C的libuv庫來處理網路,訪問檔案系統等操作。 nodejs的作用 1、提供一種介面,僅僅書寫javascript的程式碼,就可以讓他
深度理解鏈式前向星——轉載自ACdreamer
show padding dream idt 特殊 邊集數組 == 影響 mbo // ‘ + obj.name + " "; html += ‘ ‘; html
深度理解div+css布局嵌套盒子
裝飾 每一個 是否 col 深度 外部 str 依然 單元 1. 網頁布局概述 網頁布局的概念是把即將出現在網頁中的所有元素進行定位,而CSS網頁排版技術有別於傳統的網頁排版方法,它將頁面首先在整體上使用<div>標記進行分塊,然後對每個快進行CSS定位以
深度理解CSS中塊級元素與行內元素的區別(個人易錯點)
水平 切換 otto display pad 情況 易錯點 寬度 塊級元素 區別一: 塊級:塊級元素會獨占一行,默認情況下寬度自動填滿其父元素寬度 行內:行內元素不會獨占一行,相鄰的行內元素會排在同一行。其寬度隨內容的變化而變化。 區別二: 塊級:塊級元素可以設置寬高 行內
圖說Java —— 理解Java機制最受歡迎的8幅圖
middle jvm equals() blank 數據區 ofo 程序員 error com 世間總是一圖勝過千萬言! 下面的8幅圖來自於 Program Creek 的 Java教程 ,目前這是該網站最受歡迎的文章.希望本文能幫你回顧你已經知道的那些知識。如果圖片講解的
深度理解DOM拷貝clone()
處理 點擊 css doctype blog aar con left 函數 克隆節點是DOM的常見操作,jQuery提供一個clone方法,專門用於處理dom的克隆: .clone()方法深度 復制所有匹配的元素集合,包括所有匹配元素、匹配元素的下級元素、文字節點。
PHP循環語句深度理解分析——while, for, foreach, do while
color 比較 foreach循環 循環 運行 do-while 運算符 結果 ech 循環結構 一、while循環 while(表達式) { 循環體;//反復執行,直到表達式為假 } 代碼: $index = 1; while ($index<5)
深度理解平均負載
平均負載為了進一步理解系統負載,需要做一些假設。假設系統負載如下:23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35在單核系統中意味著:CPU 被充分利用(100%);最近的 1 分鐘有 1 個進程在運行。CPU 有 60% 處於空閑狀態;
深度理解鏈式前向星
簡單 清晰 怎麽 圖片 details 個數 一個 一道 後來 我們首先來看一下什麽是前向星. 前向星是一種特殊的邊集數組,我們把邊集數組中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序, 並記錄下以某個點為起點的所有邊在數組中的起始位置和存儲長度,那麽
DNS深度理解
0x01 首先,我們先來簡單回顧下DNS的基本解析流程, 比較簡單,如下 -> 以客戶端瀏覽器訪問 www.rootkit.org 域名為例,首先,它會去檢查當前瀏覽器快取,如果有,就直接響應,如果沒有,就繼續往下找 -> 接著,作業系統會去檢
Java多執行緒深度理解
深入理解多執行緒
對博弈的深度理解之為什麼異或【轉】
曉神對博弈的理解已經超出了我的理解了,超強! 昨晚上一道博弈題讓我又理解了一下博弈,趕緊掏出我的小本子; 1 尼姆博弈我們都是知道的如果是每一個狀態的sg值異或完後如果是非零先手必有勝的策略否則沒有, 這裡再說一下是為什麼
存圖-深度理解鏈式前向星
前向星 在接觸鏈式前向星之前,先了解一下什麼是前向星。 前向星就是一種邊集陣列。我們先把每條邊的起點按照從小到大的順序排序如果起點一樣,那麼就按照終點從小到達來排 序。並記錄下以某個點為起點的所有邊在陣列中的起始位置和邊的數量,那麼前向星就構造好了。 head[i]表示以i為起點
python:深度理解元類
提出問題: 如何在一個類建立一個類呢? 首先我們的實現方式是這樣的, 看下以下程式碼: class A : def create_class(self,user): if user=="company": class Company
深度理解C# 的執行原理
歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由鵝廠優文發表於雲+社群專欄 從編譯原理說起 虛擬機器是什麼 C# 是什麼,IL 又是什麼 .Net Framework vs Mono Unity3D 中的 C# 小結 作者:易立 | 騰訊I
DNS 深度理解
0x01 首先,我們先來簡單回顧下DNS的基本解析流程, 比較簡單,如下 1 2 3 4 5 6 7 8 9 10 -> 以客戶端瀏覽器訪問 www.rootkit.org 域名為例,首先,它會去檢查當前瀏覽器快取,如
深入理解springioc機制,以下為例子做理解
通過java反射機制來讀取applicationContext.xml的內容 該xml檔案內容如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org
深度理解 HashMap 和 Hashtable 的區別
這只是基礎: HashMap 和 Hashtable 都實現了 Map 介面,因此很多特性非常相似。但是,他們有以下不同點: HashMap 允許鍵和值是 null,而 Hashtable 不允許鍵或者值是 null。 Hashtable 是同步的,而 HashMap 不是。因此, Hash
對於linux下system 函式的深度理解 整理
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!