tft每日頭條

 > 生活

 > 虛拟地址轉化為物理地址所需周期

虛拟地址轉化為物理地址所需周期

生活 更新时间:2024-07-20 05:05:39

現代的操作系統将可執行文件加載後,創建了進程,進程中每一條指令和數據都被分配了一個虛拟地址,CPU獲取到這個虛拟地址後,需要翻譯成内存的物理地址後,才能訪問指令和數據,本片文章闡述的重點就是虛拟地址翻譯物理地址的流程和實踐,因此分成2部分闡述

1.虛拟地址翻譯物理地址的流程?

2.舉一個例子實踐下?

虛拟地址翻譯物理地址的流程?

當CPU第一次訪問虛拟地址時,虛拟地址所在的虛拟頁不在内存中,虛拟頁表項(PTE)也不在TLB中,因此需要執行的步驟比較多,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)1

第一次訪問虛拟地址

1.處理器将虛拟地址(VA)送往MMU(内存管理單元)

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)2

虛拟地址格式

如上圖所示,虛拟地址長度為n,虛拟頁偏移量長度為p。

2.MMU獲取虛拟地址中的虛拟頁号(VPN),然後将虛拟頁号發送給TLB(翻譯後備緩沖器),TLB根據虛拟頁号從TLB映射表中查詢PTE(頁表項即Page Table Entry)。

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)3

PTE(頁表項)

3.TLB(翻譯後備緩沖器)将查詢結果返回給MMU(内存管理單元)

4.MMU(内存管理單元)分析查詢結果是否有PTE(頁表項),發現PTE為空,沒有命中,因此MMU根據頁表基址寄存器(PTBR)中的頁表起始地址加上虛拟頁号(VPN),得出虛拟頁頁表項的物理地址PTEA(即Page Table Entry Address),然後将這個物理地址送往高速緩沖(L1)

5.高速緩沖(L1)根據PTEA查詢内部的緩沖映射表,發現沒有找到PTEA映射的内容即PTE(頁表項),然後向内存請求PTEA下的内容。

6.内存将PTEA下的内容PTE,發送給高速緩沖(L1),高速緩沖(L1)建立了PTEA和PTE的映射關系。

7.高速緩沖(L1)再次根據PTEA查詢内部的緩沖映射表,這次找到了,然後将PTE發送給TLB

8~9.TLB收到了PTE後,建立了虛拟頁号(VPN)和PTE的映射(8),然後将PTE發送給MMU

10.MMU收到了PTE後,檢查PTE的有效位,看看虛拟頁是否在内存中。

11.MMU檢查PTE後,發現虛拟頁不在内存中,因此發送缺頁中斷給CPU,CPU開始執行缺頁中斷處理程序。

12.缺頁中斷處理程序根據頁面置換算法,選擇出一個已經緩沖的虛拟頁作為犧牲頁(如果這個虛拟頁發生了變化,則更新到磁盤中),将這個犧牲頁的PTE的有效位設置為0,表明這個犧牲頁不在内存了。

13.缺頁中斷處理程序将缺少的頁,從磁盤換入到空閑的物理内存中,設置缺少的虛拟頁的PTE的有效位為1,更新物理号。

14.缺頁中斷處理程序執行完畢,跳轉到發生缺頁的指令處,然後CPU重新執行該指令,重新發出虛拟地址到MMU,跳到了1,開啟下一個循環。

當CPU第二次訪問同一個虛拟地址時,虛拟地址所在的虛拟頁已經内存中,虛拟頁表項(PTE)也在TLB中了,因此需要執行的步驟少了很多,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)4

第二次訪問虛拟地址

1.處理器将虛拟地址(VA)送往MMU(内存管理單元)

2.MMU獲取虛拟地址中的虛拟頁号(VPN),然後将虛拟頁号發送給TLB(翻譯後備緩沖器),TLB根據虛拟頁号從TLB映射表中查詢PTE(頁表項即Page Table Entry)。

3.TLB(翻譯後備緩沖器)将查詢結果返回給MMU(内存管理單元)

4.MMU(内存管理單元)分析查詢結果是否有PTE(頁表項),發現PTE有值,命中了,然後檢查PTE的有效位,發現有效位是1,因此不缺頁,根據PTE中的物理号加上虛拟地址中的(VPO)計算出指令或者數據的物理地址PA,将PA發送到高速緩沖(L1)

5.高速緩沖(L1)根據PA查詢内部的緩沖映射表,發現沒有找到PA映射的内容即指令或者數據,然後向内存請求PA下的内容。

6.内存将PA下的内容,發送給高速緩沖(L1),高速緩沖(L1)建立了PA和内容的映射關系。

7.高速緩沖(L1)再次根據PA查詢内部的緩沖映射表,這次找到了,然後将代碼或者指令發送到數據總線,CPU收到數據總線的數據後,感歎道,終于拿到數據了。

當CPU第三次訪問同一個虛拟地址時,與第二次不同的是,因為虛拟地址對應的物理地址的數據,已經映射到高速緩沖(L1),所以不再從内存中查詢。

好了,虛拟地址翻譯物理地址的整個過程闡述完畢,下面來舉個具體的例子來實踐下!

舉一個例子實踐

上一節是虛拟地址翻譯物理地址的過程,現在實踐下,實踐前先普及兩個概念TLB和高速緩沖。

TLB

TLB全稱叫做翻譯後備緩沖器,這是一個映射表,它建立了虛拟頁号(VPN)和頁表項(PTE)的映射關系,每次訪問虛拟地址時,都需要找這個虛拟地址對應的頁表項,每次都去内存中查需要耗費幾十個甚至上百個的時鐘周期,雖然頁表項緩沖在高速緩沖後,耗費的周期可以降到1-2個周期,但是緩沖在TLB後,幾乎不用耗費時鐘周期,它跟CPU幾乎是同步的,類似于寄存器。

那麼,虛拟地址怎麼通過TLB映射頁表項(PTE)呢,先來看看TLB,我們說TLB就是一個映射表,先來看看這個映射表長什麼樣,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)5

如上圖所示,一個TLB由m個TLB組構成,每個TLB組下有個n個條目,每個條目裡有PTE和标記位構成。

标記位是一個數字,每個TLB組的标記位不能重複,所以一個TLB組裡,可以根據這個标記位定位到某個條目。

每個組都有一個唯一的編号叫做組号。

因此這麼看,TLB就是一個二維數組,知道了組号和标記位就可以定位到唯一的PTE(頁表項)。

虛拟地址中的虛拟頁号(VPN)可以拆分成兩部分即組号和标記位,假設一個n位長度的虛拟地址,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)6

虛拟地址中的TLB部分

由上圖得知,VPN由标記位(TLBT)和組号又叫标記索引(TLBI)構成,組号占t位,标記位占了虛拟頁号剩餘的位。

假如一個TLB有4組,總共有64個條目,每組就有16個條目,那麼VPN中的組号就占用2位(2的2次方=4),标記位就占用4位(2的4次方=16)。

高速緩沖

高速緩沖通常采用SRAM(靜态随機訪問存儲器)進行存儲,它比内存DRAM(動态随機訪問存儲器)快上幾十甚至上百倍,因此為了加速CPU獲取數據的速度,最近訪問的數據存儲在高速緩沖中。

高速緩沖内部有一張映射表,這張映射表建立内存物理地址PA和該内存物理地址下内容的映射關系,如下圖所示

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)7

高速緩沖映射表

如上圖所示,映射表分為m個組,每個組由标記位,有效位,和n個塊組成,有效位為1表示該緩沖沒過期,為0表示該緩沖過期了。

一個物理地址由組号 标記位 塊号構成,如下圖所示

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)8

物理地址的構成

由上圖得知,物理地址為m位,塊号占用p位,組号占用t為,剩下的位就是标記位占用的位數。

我們可以根據物理地址的組号定位到映射表的一個組,然後看看這個組下的有效位是不是為1,如果不為1,那麼表示這一組的内容都無效了,沒有必要比較下去了,因此緩沖沒有命中,如果為1呢,那麼比較這個組下的标記位和物理地址中标記位,如果不相等,那就是沒有命中,如果相等呢,則繼續根據物理地址中的塊号去這個組相應的塊号下找,如果找到數據,則表示命中了,否則緩沖沒有命中。

假設一個高速緩沖有16個組,每個組有4個塊,那麼物理地址當中組号占用的空間就是4位(2的4次方等于16),塊号占用的位數就是2位(2的2次方等于4),剩餘的位數就是标記位占用的位數。

好了,概念普及完了,下面正式開始舉例

先假設

1.内存是按字節尋址,每個字是一個字節(通常對于32位的系統一個字是4個字節)。

2.虛拟地址長度為14位,假設頁表有256個頁表項,因此虛拟頁号(VPN)占用位數為8,虛拟一偏移量(VPO)占用6位。

3.物理地址長度為12位。

4.頁面大小為64個字節(P=64)

5.TLB有4個組,每個組4個條目,總共16個條目組成

6.高速緩沖(L1)有16個組,每個組有4個塊。

7.采用一級頁表(多級頁表複雜些,但原理類似)。

先看看虛拟地址和物理地址的格式,如下圖:

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)9

虛拟地址

由上圖得知,組号(TLBI)占用2位,因為我們假設TLB有4個組,标記位占用6位。

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)10

物理地址

由上圖得知,組号(CI)占用4位,因為我們假設高速緩沖有16個組,每個組下有4個塊,因此塊号(CO)占用2位,剩下的6位就是标記位(CT)。

我們假定TLB,高速緩沖映射表如下圖:

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)11

TLB映射表

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)12

高速緩沖映射表

頁表總共有256項,我們把前16項列出,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)13

頁表前16項

好了,一切就緒,假設CPU訪問的虛拟地址是0x03d4,它的二進制是16位即00000011 11010100,而虛拟地址隻有14位,所以高2位被抛棄,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)14

0x03d4虛拟地址分布圖

由上圖得知,組号(TLBI)為11即0x03,标記位(TLBT)為000011即0x03,從TLB映射表查找,發現命中了,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)15

TLB命中

由上圖命中了紅色部分的标記位,PTE中的PPN=0x0D,有效位為1,我們根據PPN然後在加上虛拟頁偏移量,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)16

虛拟地址

由上圖,我們得知虛拟頁偏移量(VPO)為010100=0x14,虛拟頁偏移量(VPO)=物理頁偏移量(PPO),即PPO=0x14,PPN和PPO連接起來就是物理地址PA即001101010100=0x354,如下圖

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)17

物理地址

由上圖得知,組号是0101即0x05,塊号(CO)為00即0x00,标記位為001101即0x0D,通過組号 标記位 塊号,可以定位到高速緩沖的數據0x36,如下圖所示

虛拟地址轉化為物理地址所需周期(徹底搞懂虛拟地址翻譯為物理地址的過程)18

物理地址命中數據

物理地址對應的數據找到了,返回給了CPU,當然也可能發生其他的情況,如TLB未命中,高速緩沖未命中,缺頁等,這些讀者可以自行實踐。

好了,虛拟地址翻譯物理的過程和實踐,介紹完了,談下一個話題。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved