Page table, TLB, Cache簡介(x86),tlbx86

來源:互聯網
上載者:User

Page table, TLB, Cache簡介(x86),tlbx86


分頁模型

以x86為例, intel的處理器的分頁單元處理4kB的頁, 32位的線性地址(虛擬位址)被分為3個域:     -Directory, 目錄, 最高10位     -Table, 頁表, 中間10位     -Offset, 位移, 低12位     -正在使用的頁目錄的地址放在控制寄存器CR3中, directory欄位決定頁目錄中的目錄項, 而table則指向適當的頁表項, 該頁表項包含有所指向頁框的物理地址,
       而offset則決定頁框內的具體地址.

     -地址位(31-12)。指向頁目錄項/頁表項/頁的基地址。     -P(0)——存在位(Present)。表示該頁表或頁目錄在、或不在實體儲存體器中。為0表示不再主存中。
      如果對某個虛擬位址執行轉換是所需要的頁目錄項或者頁表項中的P位為0,則分頁單元就將該虛擬位址放入到控制寄存器CR2中那個,併產生缺頁異常。     -R/W(1)——讀/寫位(Read/Write)。指明頁面是可讀可寫,還是唯讀。但是,R/W位對頁的防寫保護只在處理器處於使用者特權級時發揮作用。
       當處理器處於系統特權級時,R/W位被忽略,即總可以讀、寫或執行。     -U/S(2)——使用者/管理員位(User/Supervisor)。指明頁面為使用者層(特權層3)和管理員層的程式均能使用,僅還是能由管理員層(特權層0~2)的程式使用。     -PWT(3)——頁直寫位(Page-level Write Through)。控制使用直寫還是回寫的快取寫入策略。     -PCD(4)——頁快取禁止位(Page-level Cache Disable)。控制禁止還是使用快取。     -A(5)——訪問位(Accessed)。當頁表或頁面進行讀或寫操作後,處理器將該位置位。處理器一旦置位該位不再清除它,只有軟體可以得其複位。     -D(6)——髒位。只用於頁表項,當對所涉及的頁面進行寫操作時,頁表項的D位被置位。類似訪問位,只有軟體可以複位。     -PS(7)——只用於頁目錄項,如果為1,表示頁目錄項指向的是2MB/4MB的頁框。     -PAT(7)——(Pentium III processor) 選擇一個PAT(page attribue table) 項,和PCD PWT 一起選擇一個PAT表項,進而選擇這個page的記憶體類型。     -G(8)——(Pentium Pro開始引入)置1代表是一個全域頁。可以防止常用頁從TLB中重新整理出去。只有在CR4中的page global entry(PGE)標誌置位時才起作用。     -AVL(D9~D11)——作業系統專用位(Available for system’s programmer use)。

     -分頁單元首先將線性地址的高20位與TLB中所有的32項相比較。
             •如果有一個地址匹配(即TLB命中),就直接得到了頁面的基地址,只要加上線性地址的低12位位移量,就計算出32位物理地址。
             •如果沒有地址匹配,處理器將進行2級查表過程。同時,從頁表中讀到的高20位線性地址被存入TLB中。

TLB
     -TLB (translation look-aside buffer), 其實就是一塊buffer, 緩衝了記憶體中的頁表項, 以加快虛擬位址到物理地址的轉換速度.
       如果沒有TLB, 則每次取資料都需要兩次訪存(查頁表獲得物理地址+取資料) .


32位地址劃分及cache
Memory address被劃分為3部分: tag, index和block offset.
     -Index對應cache row, tag對應記憶體位址的最高位, block offset表示需要的資料在某個cache row中的data block中的位置.     -Index的長度=log2(cache rows)     -Block offset的長度=log2(bytes_per_data_block), 4K為頁的話就是12
     -Tag的長度=32 – index – block offset     -以 32KB ,4 路組相聯,行大小為 16Bytes 的 Cache 為例,正常工作時其對地址的劃分如下所示:     -Cache 以行大小(Line size)為單位分成若干個行。行 (Line) 是 Cache 的資料存放區和嵌入式管理單元。一個典型的 Cache 行結構為:
     -其由 Tag 域、Status 域和資料域組成,     -Tag 域存放該行資料對應地址的高位。CPU 在索引後,用相應地址與組內所有行的Tag 相比較,以之區分具體的行。     -資料域能容納的位元組數是為行大小 (Line Size),其為 Cache 與記憶體之間資料交換的單位。     -Status 域則為一些控制位資訊(如Valid, Lock 以及Parity check位等等),不同的Cache 類型,不同的Cache實現Status域稍有不同。     -以32KB 的4路組相聯,行大小為 16Bytes的Cache為例的話,有 32*1024/(16 * 4)= 512 組     -CPU 訪問組相聯 Cache 時,就先用index索引到組,然後組內同時匹配 Tag,進行路選。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.