日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

arm el2与el3_armv8 memory translation

發(fā)布時(shí)間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arm el2与el3_armv8 memory translation 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AArch32,arm的32bit架構(gòu);

AArch64,arm的64bit架構(gòu);

ARMv8.2-LPA,是armv8.2中的新feature,擴(kuò)大了IPA和PA的支持范圍,從48bit擴(kuò)展到52bit。

armv8-a core內(nèi)部使用virtual memory,內(nèi)部通過(guò)mmu轉(zhuǎn)換為physical address。

mmu的好處:

1)允許system同時(shí)運(yùn)行多個(gè)task,各個(gè)task之間完全是地址透明的。

2)同一個(gè)task,code在編寫的時(shí)候,也完全不需要了解processor內(nèi)部的地址分配。

3)mmu還可以實(shí)現(xiàn)memory access permission的控制,memory attribute的控制,cache policy的控制。

這樣app的編寫,編譯,鏈接都是在virtual memory space中進(jìn)行的。

arm提出trustzone之后,定義了兩種physical address space,在理論上,secure和non-secure的physical address

應(yīng)該是完全分開(kāi)的兩個(gè)地址空間,甚至存儲(chǔ)器,但是在實(shí)現(xiàn)中,多通過(guò)bus attribute來(lái)進(jìn)行控制。表示的是

同一塊地址,在進(jìn)行secure和non-secure切換的時(shí)候,需要自己保存上下文。

arm規(guī)定,non-secure不能訪問(wèn)secure空間,但是secure是可以訪問(wèn)secure和non-secure的,這樣的化,在應(yīng)用中

如果一個(gè)secure的master,讀了兩次同一個(gè)地址,一次是secure bus讀,一次是non-secure bus讀,這樣在cache

中會(huì)出錯(cuò),所以一般要求,secure在讀取non-secure的時(shí)候,要求使用non-secure bus attr。

mmu內(nèi)部的translation table根據(jù)exception level分為四級(jí):

1) EL0------app

2) EL1------kernel

3) EL2------hypervisor,armv7加入的一個(gè)arm core mode,主要為了virtualization。

4) EL3------secure monitor,在trustzone切換過(guò)程中的mode。

一般情況下EL0是執(zhí)行在unprivilege mode下的,其他三種都是執(zhí)行在privilege mode下的。需要配置自己的TCR寄存器

EL0和EL1都可以執(zhí)行在non-secure或secure mode下,但是EL2只能執(zhí)行在non-secure mode下,EL3只能執(zhí)行在secure mode下。

EL0和EL1的translation table base address是指定在寄存器中,Translation Table Base Registers(TTBR0_EL1)和(TTBR1_EL1)

EL0和EL1的區(qū)分是通過(guò)VA的高位地址來(lái)區(qū)分的,OS的地址都在高位,高位都為1;

APP的地址都在低位,高位都為0;

一般是16bit的高位,這樣和32bit級(jí)聯(lián)起來(lái),剛好48bits

EL2和EL3都只有TTBR0,寄存器分別為TTBR0_EL2和(TTBR0_EL3)

除了base address,還有一個(gè)Translation control register(TCR_EL1),其中控制

1)IPA size,最終的PA的范圍大小,3bits,000---32bitsPA,101---48bitsPA

2)TG0/TG1,translation table的size大小,2bits,00---4KB,01---16KB,11---64KB? (Translation Granule)

3)T0SZ/T1SZ,高bits的位數(shù),來(lái)區(qū)分EL0/EL1的高位,5bits

VA到PA的translation:

對(duì)于一個(gè)nbits的VA空間的應(yīng)用,高位64-n必須是全零或者全1,否則mmu會(huì)報(bào)event error。

VA的低位地址,或直接作為PA中的offset,具體bit是按design而定的。

一個(gè)轉(zhuǎn)換的流程圖,多級(jí)轉(zhuǎn)換:

TTBR0_EL1,TTBR1_EL1以及TCR_EL1都是不區(qū)分secure和non-secure的寄存器,所以在secure切換的時(shí)候,

必須自己做context的保存。

VMSAv8-64的translation table format descripter:

主要有以下幾個(gè)方面,

1) invalid或者valid; bit[0]

2) table entry或者block entry;? bit[1]

descripter與granule的顆粒有關(guān)系,

4k granule      16granule        64granule

level0  block entry不支持  block entry不支持    block entry不支持

level1            block entry不支持    block entry不支持(主要看ARMv8.2-LPA是否支持)

level2

對(duì)于level3的table,都是支持block entry的,不支持table entry

對(duì)于不支持ARMv8.2-LPA的level0-level3的descripter的各種格式,

level3的descripter格式:

amrv8.2中的多級(jí)地址映射:

兩級(jí)的translations,主要引入了hypervisor的控制,stage1由guest os控制,stage2由hypervisor控制。

1) 主要在level0和level1進(jìn)行了擴(kuò)展,可能會(huì)有stage2。對(duì)于secure的操作,系統(tǒng)中是不允許在做stage2的。

對(duì)于non-secure操作,需要配置Hypervisor Configuration Register(HCR_EL2)來(lái)進(jìn)行stage2。

2) EL2和EL3都是只有stage1的,Translation base table,分別有自己的TTBR0_EL2/EL3,secure world是不允許有virtualization的。

3) stage2的 Translation base table寄存器是單獨(dú)的VTTBR0_EL2,并且有自己?jiǎn)为?dú)的control寄存器VTCR_EL2

另一類的access的控制,是對(duì)執(zhí)行attr的控制,反應(yīng)到bus上就是某些instruction的prefetch不能再一些地址上進(jìn)行。

block/page可以被標(biāo)識(shí)為Execute Never(XN),Unprivilege Execute Never(UXN),Privilege Execute Never(PXN),

通過(guò)配置每個(gè)level的SCTLR_ELn寄存器來(lái)實(shí)現(xiàn)。

AF(access flag),是軟件的應(yīng)用,表明目前該page是否被訪問(wèn)過(guò),優(yōu)化在OS memory control中的實(shí)現(xiàn)。

Bit[58:55],不論是block descripter還是table descripter,中都會(huì)預(yù)留,為OS使用??梢源娣舙age是否dirty等信息。

mmu中還包括secure ctrl register(SCR)寄存器,可以定義secure是否可以訪問(wèn)non-secure的空間,

arm中還定義了指令LDTR和STTR,可以允許在EL1中執(zhí)行數(shù)據(jù)的加載和寫入,權(quán)限等是按照EL0的配置來(lái)執(zhí)行。

在其他的except level中,LDTR和STTR指令與普通的LDR和STR相同。

TLB(Translation Lookaside Buffer),MMU中訪問(wèn)page translation的cache,每個(gè)TLB的entry,都包括memory type,

cache policy,access permission,ASID,VMID等信息。

如果memory中的translation entry已經(jīng)更新,但是TLB中的未更新,這時(shí)需要OS進(jìn)行invalidation stale TLB entry。

指令TLBI ,可以指定stage-level,specify-attr等。

ALL,VMALL,VMALLSI2,ASID,VA,VAA

TLB中的entry是區(qū)分secure和non-secure的,所以在secure切換的時(shí)候,是不需要context-switch的。

總結(jié)

以上是生活随笔為你收集整理的arm el2与el3_armv8 memory translation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。