0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

虛擬地址翻譯物理地址的流程有哪些呢?

嵌入式情報局 ? 來源:大話IT ? 2023-08-14 10:30 ? 次閱讀

現(xiàn)代的操作系統(tǒng)將可執(zhí)行文件加載后,創(chuàng)建了進(jìn)程,進(jìn)程中每一條指令和數(shù)據(jù)都被分配了一個虛擬地址,CPU獲取到這個虛擬地址后,需要翻譯成內(nèi)存的物理地址后,才能訪問指令和數(shù)據(jù),本片文章闡述的重點就是虛擬地址翻譯物理地址的流程和實踐,因此分成2部分闡述

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

2.舉一個例子實踐下?

1、虛擬地址翻譯物理地址的流程?

當(dāng)CPU第一次訪問虛擬地址時,虛擬地址所在的虛擬頁不在內(nèi)存中,虛擬頁表項(PTE)也不在TLB中,因此需要執(zhí)行的步驟比較多,如下圖

f43179c0-39da-11ee-9e74-dac502259ad0.png

第一次訪問虛擬地址

1.處理器將虛擬地址(VA)送往MMU(內(nèi)存管理單元)

f45713b0-39da-11ee-9e74-dac502259ad0.png

虛擬地址格式

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

2.MMU獲取虛擬地址中的虛擬頁號(VPN),然后將虛擬頁號發(fā)送給TLB(翻譯后備緩沖器),TLB根據(jù)虛擬頁號從TLB映射表中查詢PTE(頁表項即Page Table Entry)。

f47407c2-39da-11ee-9e74-dac502259ad0.png

PTE(頁表項)

3.TLB(翻譯后備緩沖器)將查詢結(jié)果返回給MMU(內(nèi)存管理單元)

4.MMU(內(nèi)存管理單元)分析查詢結(jié)果是否有PTE(頁表項),發(fā)現(xiàn)PTE為空,沒有命中,因此MMU根據(jù)頁表基址寄存器(PTBR)中的頁表起始地址加上虛擬頁號(VPN),得出虛擬頁頁表項的物理地址PTEA(即Page Table Entry Address),然后將這個物理地址送往高速緩沖(L1)。

5.高速緩沖(L1)根據(jù)PTEA查詢內(nèi)部的緩沖映射表,發(fā)現(xiàn)沒有找到PTEA映射的內(nèi)容即PTE(頁表項),然后向內(nèi)存請求PTEA下的內(nèi)容。

6.內(nèi)存將PTEA下的內(nèi)容PTE,發(fā)送給高速緩沖(L1),高速緩沖(L1)建立了PTEA和PTE的映射關(guān)系。

7.高速緩沖(L1)再次根據(jù)PTEA查詢內(nèi)部的緩沖映射表,這次找到了,然后將PTE發(fā)送給TLB。

8~9.TLB收到了PTE后,建立了虛擬頁號(VPN)和PTE的映射(8),然后將PTE發(fā)送給MMU。

10.MMU收到了PTE后,檢查PTE的有效位,看看虛擬頁是否在內(nèi)存中。

11.MMU檢查PTE后,發(fā)現(xiàn)虛擬頁不在內(nèi)存中,因此發(fā)送缺頁中斷給CPU,CPU開始執(zhí)行缺頁中斷處理程序。

12.缺頁中斷處理程序根據(jù)頁面置換算法,選擇出一個已經(jīng)緩沖的虛擬頁作為犧牲頁(如果這個虛擬頁發(fā)生了變化,則更新到磁盤中),將這個犧牲頁的PTE的有效位設(shè)置為0,表明這個犧牲頁不在內(nèi)存了。

13.缺頁中斷處理程序?qū)⑷鄙俚捻?,從磁盤換入到空閑的物理內(nèi)存中,設(shè)置缺少的虛擬頁的PTE的有效位為1,更新物理號。

14.缺頁中斷處理程序執(zhí)行完畢,跳轉(zhuǎn)到發(fā)生缺頁的指令處,然后CPU重新執(zhí)行該指令,重新發(fā)出虛擬地址到MMU,跳到了1,開啟下一個循環(huán)。

當(dāng)CPU第二次訪問同一個虛擬地址時,虛擬地址所在的虛擬頁已經(jīng)內(nèi)存中,虛擬頁表項(PTE)也在TLB中了,因此需要執(zhí)行的步驟少了很多,如下圖

f48e0514-39da-11ee-9e74-dac502259ad0.png

第二次訪問虛擬地址

1.處理器將虛擬地址(VA)送往MMU(內(nèi)存管理單元)

2.MMU獲取虛擬地址中的虛擬頁號(VPN),然后將虛擬頁號發(fā)送給TLB(翻譯后備緩沖器),TLB根據(jù)虛擬頁號從TLB映射表中查詢PTE(頁表項即Page Table Entry)。

3.TLB(翻譯后備緩沖器)將查詢結(jié)果返回給MMU(內(nèi)存管理單元)

4.MMU(內(nèi)存管理單元)分析查詢結(jié)果是否有PTE(頁表項),發(fā)現(xiàn)PTE有值,命中了,然后檢查PTE的有效位,發(fā)現(xiàn)有效位是1,因此不缺頁,根據(jù)PTE中的物理號加上虛擬地址中的(VPO)計算出指令或者數(shù)據(jù)的物理地址PA,將PA發(fā)送到高速緩沖(L1)

5.高速緩沖(L1)根據(jù)PA查詢內(nèi)部的緩沖映射表,發(fā)現(xiàn)沒有找到PA映射的內(nèi)容即指令或者數(shù)據(jù),然后向內(nèi)存請求PA下的內(nèi)容。

6.內(nèi)存將PA下的內(nèi)容,發(fā)送給高速緩沖(L1),高速緩沖(L1)建立了PA和內(nèi)容的映射關(guān)系。

7.高速緩沖(L1)再次根據(jù)PA查詢內(nèi)部的緩沖映射表,這次找到了,然后將代碼或者指令發(fā)送到數(shù)據(jù)總線,CPU收到數(shù)據(jù)總線的數(shù)據(jù)后,感嘆道,終于拿到數(shù)據(jù)了。

當(dāng)CPU第三次訪問同一個虛擬地址時,與第二次不同的是,因為虛擬地址對應(yīng)的物理地址的數(shù)據(jù),已經(jīng)映射到高速緩沖(L1),所以不再從內(nèi)存中查詢。

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

2、舉一個例子實踐

上一節(jié)是虛擬地址翻譯物理地址的過程,現(xiàn)在實踐下,實踐前先普及兩個概念TLB和高速緩沖。

TLB

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

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

f49ef0a4-39da-11ee-9e74-dac502259ad0.png

如上圖所示,一個TLB由m個TLB組構(gòu)成,每個TLB組下有個n個條目,每個條目里有PTE和標(biāo)記位構(gòu)成。

標(biāo)記位是一個數(shù)字,每個TLB組的標(biāo)記位不能重復(fù),所以一個TLB組里,可以根據(jù)這個標(biāo)記位定位到某個條目。

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

因此這么看,TLB就是一個二維數(shù)組,知道了組號和標(biāo)記位就可以定位到唯一的PTE(頁表項)。

虛擬地址中的虛擬頁號(VPN)可以拆分成兩部分即組號和標(biāo)記位,假設(shè)一個n位長度的虛擬地址,如下圖

f4e14594-39da-11ee-9e74-dac502259ad0.png

虛擬地址中的TLB部分

由上圖得知,VPN由標(biāo)記位(TLBT)和組號又叫標(biāo)記索引(TLBI)構(gòu)成,組號占t位,標(biāo)記位占了虛擬頁號剩余的位。

假如一個TLB有4組,總共有64個條目,每組就有16個條目,那么VPN中的組號就占用2位(2的2次方=4),標(biāo)記位就占用4位(2的4次方=16)。

高速緩沖

高速緩沖通常采用SRAM(靜態(tài)隨機訪問存儲器)進(jìn)行存儲,它比內(nèi)存DRAM(動態(tài)隨機訪問存儲器)快上幾十甚至上百倍,因此為了加速CPU獲取數(shù)據(jù)的速度,最近訪問的數(shù)據(jù)存儲在高速緩沖中。

高速緩沖內(nèi)部有一張映射表,這張映射表建立內(nèi)存物理地址PA和該內(nèi)存物理地址下內(nèi)容的映射關(guān)系,如下圖所示

f5015050-39da-11ee-9e74-dac502259ad0.png

高速緩沖映射表

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

一個物理地址由組號+標(biāo)記位+塊號構(gòu)成,如下圖所示

f51cecfc-39da-11ee-9e74-dac502259ad0.png

物理地址的構(gòu)成

由上圖得知,物理地址為m位,塊號占用p位,組號占用t為,剩下的位就是標(biāo)記位占用的位數(shù)。

我們可以根據(jù)物理地址的組號定位到映射表的一個組,然后看看這個組下的有效位是不是為1,如果不為1,那么表示這一組的內(nèi)容都無效了,沒有必要比較下去了,因此緩沖沒有命中,如果為1呢,那么比較這個組下的標(biāo)記位和物理地址中標(biāo)記位,如果不相等,那就是沒有命中,如果相等呢,則繼續(xù)根據(jù)物理地址中的塊號去這個組相應(yīng)的塊號下找,如果找到數(shù)據(jù),則表示命中了,否則緩沖沒有命中。

假設(shè)一個高速緩沖有16個組,每個組有4個塊,那么物理地址當(dāng)中組號占用的空間就是4位(2的4次方等于16),塊號占用的位數(shù)就是2位(2的2次方等于4),剩余的位數(shù)就是標(biāo)記位占用的位數(shù)。

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

先假設(shè)

1.內(nèi)存是按字節(jié)尋址,每個字是一個字節(jié)(通常對于32位的系統(tǒng)一個字是4個字節(jié))。

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

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

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

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

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

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

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

f54a9954-39da-11ee-9e74-dac502259ad0.png

虛擬地址

由上圖得知,組號(TLBI)占用2位,因為我們假設(shè)TLB有4個組,標(biāo)記位占用6位。

f5881d74-39da-11ee-9e74-dac502259ad0.png

物理地址

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

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

f59b033a-39da-11ee-9e74-dac502259ad0.png

TLB映射表

f5bcecd4-39da-11ee-9e74-dac502259ad0.png

高速緩沖映射表

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

f5ef1042-39da-11ee-9e74-dac502259ad0.png

頁表前16項

好了,一切就緒,假設(shè)CPU訪問的虛擬地址是0x03d4,它的二進(jìn)制是16位即00000011 11010100,而虛擬地址只有14位,所以高2位被拋棄,如下圖

f62241f6-39da-11ee-9e74-dac502259ad0.png

0x03d4虛擬地址分布圖

由上圖得知,組號(TLBI)為11即0x03,標(biāo)記位(TLBT)為000011即0x03,從TLB映射表查找,發(fā)現(xiàn)命中了,如下圖

f6795d74-39da-11ee-9e74-dac502259ad0.png

TLB命中

由上圖命中了紅色部分的標(biāo)記位,PTE中的PPN=0x0D,有效位為1,我們根據(jù)PPN然后在加上虛擬頁偏移量,如下圖

f6a42072-39da-11ee-9e74-dac502259ad0.png

虛擬地址

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

f6cf777c-39da-11ee-9e74-dac502259ad0.png

物理地址

由上圖得知,組號是0101即0x05,塊號(CO)為00即0x00,標(biāo)記位為001101即0x0D,通過組號+標(biāo)記位+塊號,可以定位到高速緩沖的數(shù)據(jù)0x36,如下圖所示

f6ecca5c-39da-11ee-9e74-dac502259ad0.png

物理地址命中數(shù)據(jù)

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






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227224
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    1903

    瀏覽量

    45327
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    888

    瀏覽量

    27811
  • TLB電路
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    5245
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    18167

原文標(biāo)題:虛擬地址翻譯物理地址的流程終于搞懂了~

文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    操作系統(tǒng)中的邏輯地址物理地址

    本文是關(guān)于操作系統(tǒng)中邏輯地址物理地址之間的區(qū)別。計算機操作系統(tǒng)中的內(nèi)存使用兩種不同類型的地址;物理地址是內(nèi)存的實際地址,如RAM,
    發(fā)表于 09-14 14:26 ?3741次閱讀

    請問ARM虛擬地址 物理地址 加載地址 運行地址的聯(lián)系是什么?

    簡單的理解:ARM的加載地址即程序在Flash的存儲位置。運行地址即內(nèi)存中運行時的位置。虛擬地址物理地址在MMU中映射,那么這四者之間的聯(lián)系是什么?
    發(fā)表于 04-25 03:16

    為什么MMU的地址映射中物理地址會跳變?

    關(guān)于MMU的地址映射,32位的cpu4G的虛擬地址空間,將它分為4096個小塊,每個小塊是1M,用描述符進(jìn)行虛擬地址物理地址之間關(guān)系的建
    發(fā)表于 08-22 05:45

    linux虛擬地址如何轉(zhuǎn)物理地址

    linux虛擬地址轉(zhuǎn)物理地址
    發(fā)表于 05-13 09:31

    【HarmonyOS】虛擬地址<->物理地址是如何映射的

    到不同的實際物理內(nèi)存空間上。CPU只知道虛擬地址,向虛擬地址要數(shù)據(jù),但在其保護(hù)模式下很悲催地址信號在路上被MMU攔截了,MMU把虛擬地址換成
    發(fā)表于 11-03 16:20

    物理地址虛擬地址的轉(zhuǎn)換步驟

    上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址轉(zhuǎn)換成虛擬地址,因為Linux使能了MMU,所以我們在Linux上不能直接操作物理地址。MMU使能了...
    發(fā)表于 12-24 07:42

    請問大佬rt_malloc申請的動態(tài)內(nèi)存返回的是虛擬地址還是物理地址

    請問各位大佬:如題,rt_malloc申請的動態(tài)內(nèi)存返回的是虛擬地址還是物理地址?為什么感覺直接就是返回了物理地址?如果返回的是物理地址,
    發(fā)表于 07-07 14:40

    RT-Thread smart內(nèi)存虛擬地址物理地址的轉(zhuǎn)換是一個什么樣的流程

    ,rt_system_heap_init(RT_HW_HEAP_BEGIN,RT_HW_HEAP_END);RT_HW_HEAP_BEGIN RT_HW_HEAP_END 兩個是物理地址。所以我實在理解不了虛擬地址物理地址的轉(zhuǎn)
    發(fā)表于 10-19 10:41

    用戶態(tài)得到虛擬地址對應(yīng)的物理地址

    一般我們不需要從用戶態(tài)得到進(jìn)程虛擬地址對應(yīng)的物理地址,因為一般來說用戶進(jìn)程是完全不關(guān)心物理地址的。
    的頭像 發(fā)表于 10-10 14:10 ?2394次閱讀
    用戶態(tài)得到<b class='flag-5'>虛擬地址</b>對應(yīng)的<b class='flag-5'>物理地址</b>

    鴻蒙內(nèi)核中虛擬地址物理地址之間是如何映射的

    內(nèi)存空間上。CPU只知道虛擬地址,向虛擬地址要數(shù)據(jù),但在其保護(hù)模式下很悲催地址信號在路上被MMU攔截了,MMU把虛擬地址換成了物理地址,從而
    發(fā)表于 11-19 14:45 ?9次下載
    鴻蒙內(nèi)核中<b class='flag-5'>虛擬地址</b>與<b class='flag-5'>物理地址</b>之間是如何映射的

    虛擬地址物理地址等眾多地址及MMU相關(guān)知識

    虛擬地址物理地址等眾多地址及MMU相關(guān)知識先聊聊存儲器STM32單片機存儲器關(guān)于編譯器生成的文件數(shù)據(jù)在存儲器上的存儲結(jié)構(gòu)物理地址、虛擬地址、
    發(fā)表于 12-08 12:36 ?12次下載
    <b class='flag-5'>虛擬地址</b><b class='flag-5'>物理地址</b>等眾多<b class='flag-5'>地址</b>及MMU相關(guān)知識

    為什么要用MMU?為什么要用虛擬地址?

    既然MMU開啟后,硬件會自動的將虛擬地址轉(zhuǎn)換成物理地址,那么還需要我們軟件做什么事情?即創(chuàng)建一個頁表翻譯都需要做哪些事情?或者說啟用一個
    的頭像 發(fā)表于 04-26 14:37 ?4572次閱讀

    Linux虛擬地址空間和物理地址空間的關(guān)系

    過程,這其實也是MMU的工作原理。 我們知道,在Linux中,每個進(jìn)程都有自己獨立的地址空間,且互不干擾。每個進(jìn)程的地址空間又分為用戶空間和內(nèi)核空間,但這些地址空間使用的都是虛擬地址,
    的頭像 發(fā)表于 10-08 11:40 ?913次閱讀
    Linux<b class='flag-5'>虛擬地址</b>空間和<b class='flag-5'>物理地址</b>空間的關(guān)系

    Linux虛擬地址物理地址轉(zhuǎn)換過程

    虛擬地址物理地址轉(zhuǎn)換過程 虛擬地址物理地址都被劃分了兩部分: 虛擬地址虛擬頁面號VPN和
    的頭像 發(fā)表于 10-08 11:45 ?1630次閱讀
    Linux<b class='flag-5'>虛擬地址</b>到<b class='flag-5'>物理地址</b>轉(zhuǎn)換過程

    如何綁定ip地址與mac物理地址?

    如何綁定ip地址與mac物理地址? 綁定IP地址與MAC物理地址是一種網(wǎng)絡(luò)管理和安全措施,可以幫助確保網(wǎng)絡(luò)設(shè)備的身份驗證和安全性。在這篇文
    的頭像 發(fā)表于 12-07 09:33 ?5697次閱讀