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

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

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

從內(nèi)存中讀取translation tables的邏輯介紹

麥辣雞腿堡 ? 來源:TrustZone ? 作者:Hcoco ? 2023-11-26 16:04 ? 次閱讀

TWU

table walk unit:包含從內(nèi)存中讀取translation tables的邏輯

一個(gè)完整的頁表翻譯和查找的過程叫作頁表查詢(Translation Table Walk),頁表查詢的過程由硬件自動(dòng)完成,但是頁表的維護(hù)需要軟件來完成。

頁表查詢是一個(gè)相對(duì)耗時(shí)的過程,理想的狀態(tài)是TLB里緩存有頁表轉(zhuǎn)換的相關(guān)信息。當(dāng)TLB未命中時(shí),才會(huì)去查詢頁表,并且開始讀入頁表的內(nèi)容。

page table

page table是每個(gè)進(jìn)程獨(dú)有的,是軟件實(shí)現(xiàn)的,是存儲(chǔ)在main memory(比如DDR)中的

Address Translation

因?yàn)樵L問內(nèi)存中的頁表相對(duì)耗時(shí),尤其是在現(xiàn)在普遍使用多級(jí)頁表的情況下,需要多次的內(nèi)存訪問,為了加快訪問速度,系統(tǒng)設(shè)計(jì)人員為page table設(shè)計(jì)了一個(gè)硬件緩存 - TLB,CPU會(huì)首先在TLB中查找,因?yàn)樵赥LB中找起來很快。TLB之所以快,一是因?yàn)樗械膃ntries的數(shù)目較少,二是TLB是集成進(jìn)CPU的,它幾乎可以按照CPU的速度運(yùn)行。

如果在TLB中找到了含有該虛擬地址的entry(TLB hit),則可從該entry中直接獲取對(duì)應(yīng)的物理地址,否則就不幸地TLB miss了,就得去查找當(dāng)前進(jìn)程的page table。這個(gè)時(shí)候,組成MMU的另一個(gè)部分table walk unit就被召喚出來了,這里面的table就是page table。

使用table walk unit硬件單元來查找page table的方式被稱為hardware TLB miss handling,通常被CISC架構(gòu)的處理器(比如IA-32)所采用。它要在page table中查找不到,出現(xiàn)page fault的時(shí)候才會(huì)交由軟件(操作系統(tǒng))處理。

與之相對(duì)的通常被RISC架構(gòu)的處理器(比如Alpha)采用的software TLB miss handling,TLB miss后CPU就不再參與了,由操作系統(tǒng)通過軟件的方式來查找page table。使用硬件的方式更快,而使用軟件的方式靈活性更強(qiáng)。IA-64提供了一種混合模式,可以兼顧兩者的優(yōu)點(diǎn)。

如果在page table中找到了該虛擬地址對(duì)應(yīng)的entry的p(present)位是1,說明該虛擬地址對(duì)應(yīng)的物理頁面當(dāng)前駐留在內(nèi)存中,也就是page table hit。找到了還沒完,接下來還有兩件事要做:

? 既然是因?yàn)樵赥LB里找不到才找到這兒來的,自然要更新TLB。

? 進(jìn)行權(quán)限檢測(cè),包括可讀/可寫/可執(zhí)行權(quán)限,user/supervisor模式權(quán)限等。如果沒有正確的權(quán)限,將觸發(fā)SIGSEGV(Segmantation Fault)。

如果該虛擬地址對(duì)應(yīng)的entry的p位是0,就會(huì)觸發(fā)page fault,可能有這幾種情況:

? 這個(gè)虛擬地址被分配后還從來沒有被access過(比如malloc之后還沒有操作分配到的空間,則不會(huì)真正分配物理內(nèi)存)。觸發(fā)page fault后分配物理內(nèi)存,也就是demand paging,有了確定的demand了之后才分,然后將p位置1。

? 對(duì)應(yīng)的這個(gè)物理頁面的內(nèi)容被換出到外部的disk/flash了,這個(gè)時(shí)候page table entry里存的是換出頁面在外部swap area里暫存的位置,可以將其換回物理內(nèi)存,再次建立映射,然后將p位置1。

后面再進(jìn)一步就是看看這個(gè)TLB中具體是怎么找的,在page table中又是怎么“walk”,這部分就是具體的地址是怎么轉(zhuǎn)換的,翻譯的。

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

    關(guān)注

    68

    文章

    19103

    瀏覽量

    228833
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2978

    瀏覽量

    73818
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6689

    瀏覽量

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

    關(guān)注

    0

    文章

    91

    瀏覽量

    18251
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何可編程邏輯訪問處理器內(nèi)存?

    在存儲(chǔ)在由指針尋址的內(nèi)存的巨大稀疏矩陣上運(yùn)行因子分解。有沒有辦法給PL創(chuàng)建的RTL提供相同的內(nèi)存訪問權(quán)限,或者我必須將整個(gè)矩陣存儲(chǔ)在本地RAM
    發(fā)表于 04-28 10:26

    CPU怎樣通過控制器將待運(yùn)行的程序FLASH讀入內(nèi)存

    程序以機(jī)器碼的形式,即二進(jìn)制碼的形式存在FLASH;上電后,CPU通過控制器將待運(yùn)行的程序FLASH讀入內(nèi)存;代碼在
    發(fā)表于 12-15 08:08

    CXL內(nèi)存協(xié)議介紹

    Subordinate到Master的完成和指示,不帶數(shù)據(jù)。3.3.6 S2M數(shù)據(jù)響應(yīng)(DRS)DRS消息類包含Subordinate到Master讀取內(nèi)存數(shù)據(jù)。3.3.7 轉(zhuǎn)發(fā)和排序規(guī)則在多跳互連網(wǎng)絡(luò)
    發(fā)表于 11-01 15:08

    如何mifare和/或Felica讀取內(nèi)存內(nèi)容?

    我希望能夠 mifare 和/或 Felica 標(biāo)簽讀取內(nèi)存內(nèi)容,類似于 Android 上的 NXP 標(biāo)簽檢測(cè)器應(yīng)用程序。我該怎么做呢?我已經(jīng)使用 nfc03a1 和 SPI 上
    發(fā)表于 12-07 06:16

    GIC ITS的ITS tables和Command Queue訪問簡(jiǎn)析

    ,Interrupt Translation Tables和Collection Table.而這些Device Table,Interrupt Translation Tables
    發(fā)表于 12-20 14:35

    ARMv8 MMU translation stages與相關(guān)寄存器介紹

    當(dāng)EL3使用AArch64時(shí),ARMv8 architecture定義了如下translation stages和translation regimes:上圖是在implementation包含
    發(fā)表于 12-30 16:35

    DMA_讀取GPIO電平到內(nèi)存

    DMA_讀取GPIO電平到內(nèi)存,單片機(jī)程序
    發(fā)表于 01-12 18:19 ?10次下載

    windows應(yīng)用程序讀取進(jìn)程的內(nèi)存工具免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是windows應(yīng)用程序讀取進(jìn)程的內(nèi)存工具免費(fèi)下載。
    發(fā)表于 05-27 08:00 ?1次下載

    FPGA邏輯關(guān)于地址映射說明

    背景與問題 CPU+FPGA架構(gòu),CPU做RC、FPGA做EP; FPGA邏輯(Vivado -BD - Address Editor)如何設(shè)置PCIe to AXI Translation
    的頭像 發(fā)表于 11-20 15:28 ?6488次閱讀
    FPGA<b class='flag-5'>邏輯</b><b class='flag-5'>中</b>關(guān)于地址映射說明

    內(nèi)存是怎么讀取數(shù)據(jù)的

    你知道內(nèi)存是怎么讀取數(shù)據(jù)的嗎?知道數(shù)據(jù)是怎么一個(gè)一個(gè)字節(jié)發(fā)送的嗎?
    的頭像 發(fā)表于 03-30 13:52 ?5319次閱讀

    如何有效地內(nèi)核訪問設(shè)備的全局內(nèi)存

    個(gè)用途是將多維數(shù)組的 2D 塊以合并的方式全局內(nèi)存提取到共享內(nèi)存,然后讓連續(xù)的線程跨過共享內(nèi)存塊。與全局
    的頭像 發(fā)表于 04-11 10:07 ?1163次閱讀
    如何有效地<b class='flag-5'>從</b>內(nèi)核<b class='flag-5'>中</b>訪問設(shè)備的全局<b class='flag-5'>內(nèi)存</b>

    ARM SMMU Data structure之Context Descriptors

    是否進(jìn)行stage 1 translation,獲取stage 1 translation tables的配置。
    的頭像 發(fā)表于 05-11 09:10 ?917次閱讀
    ARM SMMU Data structure之Context Descriptors

    為什么不能直接使用PLC讀取到的模擬量信號(hào)?

    為什么不能直接使用PLC讀取到的模擬量信號(hào)? PLC(可編程邏輯控制器)被廣泛用于實(shí)現(xiàn)自動(dòng)化控制,可以讀取各種現(xiàn)場(chǎng)設(shè)備的模擬量信號(hào)。模擬量信號(hào)是實(shí)時(shí)反映被測(cè)量參數(shù)(如溫度、壓力、流量
    的頭像 發(fā)表于 10-23 09:30 ?920次閱讀

    怎么讀取plc已存在的程序呢?

    怎么讀取plc已存在的程序呢? PLC(可編程邏輯控制器)是一種重要的自動(dòng)化設(shè)備,用于控制和監(jiān)控各種工業(yè)過程。PLC的程序是由用戶編寫的,它們定義了PLC在操作
    的頭像 發(fā)表于 11-21 16:10 ?8493次閱讀

    邏輯內(nèi)存和物理內(nèi)存的區(qū)別

    邏輯內(nèi)存和物理內(nèi)存是計(jì)算機(jī)系統(tǒng)兩個(gè)重要的概念,它們?cè)谟?jì)算機(jī)的運(yùn)行和數(shù)據(jù)處理起著至關(guān)重要的作用。 1. 物理
    的頭像 發(fā)表于 09-27 15:38 ?353次閱讀