ARMv8百日談(記憶體管理系統)

2021-07-24 05:21:20 字數 1640 閱讀 7040

1、mmu的作用是啥:進行位址轉換,位址許可權控制,位址屬性定義,以及對pe發起的訪問進行check

2、在不同的el下以及不同的安全狀態下,va到pa的過程是不一樣的,經過的stage轉換階段,如下:

a、在轉換系統使能以後,判斷位址會不會因為超出範圍而導致 translation fault

b、位址會不會導致 由於超出範圍的address size錯誤,在轉換系統未使能的情況下(這裡不太明白,轉換系統未使能,怎麼判斷轉換的位址數目多少呢?)

c、位址是不是需要無效(invld),當執行乙個按位址進行 tlb invld的指令(難道b說的是在55bit的乙個邊界位址,增加後的size,比如1個4k的尾位址導致的位址超過range?)

4、當使用aarch64 el1&el0轉換體制的時候:

va的bit 55決定了控制address tag使用的暫存器bit(address tag是什麼玩意?是儲存在cache中用來進行匹配的玩意嗎?)

5、當使用aarch64 el2的轉換機制的時候,其實就是在el2下進行頁表轉換:

tcr_el2.tbi決定address tag是否被使用,ttbr0_el2裡儲存了頁表所在的記憶體基位址(這裡有個疑問,頁表所在位址應該是不需要轉換的吧,該暫存器中儲存的應該就是實體地址,不然mmu是怎麼工作的,他肯定要有一段直接找實體地址,然後控制其他的虛擬位址到實體地址吧,ttbr暫存器的意義應該是這樣的)

6、當使用aarch64 el3下的轉換機制,其實就是在el3下進行頁表轉換:

tcr_el3.tbi決定address tag是否被使用,ttbr0_el3裡儲存了頁表所在的記憶體基位址

7、tcr_elx.tbi決定了address tag是否被使用,與相應階段stage是否被使能是無關的(notice)

8、這裡加一條( 這個裡面的鏈結說address tag其實就是位址的高8bit是否被作為tag,那麼把位址的高8bit拿去到底做什麼啊,這個很費解)

9、由於pc暫存器是64bit的,那麼使能這個address tag功能後,因為高8bit被忽視了,是不是這8個bit直接更新到pc中呢?有下列場景,address tag功能對pc值有影響

a、在所有的可控el下,所有branch和函式返回

b、在陷入乙個異常的時候,並不關心陷入異常時候進入的el是不是產生異常的el

c、在異常返回的時候,並不關心返回的這個el是不是執行了return返回的el 

d、從debug狀態返回el狀態(arm core的debug狀態是什麼狀態)

這裡給出了乙個el2的例子來對應9的描述:

10、乙個具體的tbi bit是決定address tag是否使能,它對於pc值的具體操作是這樣的,9描述的是場景,10描述的是具體怎麼影響pc

a、當在el1&el0的時候,控制已經load到pc位址的tbi 對應bit使能了,那麼pc中的63-56都是55bit的有符號擴充套件,意思就是複製55bit到56-63的8個bit(這裡進行擴充套件的值是pc暫存器中的值)

b、當在el2和el3的時候,控制已經load到pc中位址的tbi bit使能的話,那麼pc中的63-56bit就必須強制使用0x00這個值

11、當address tag使能的時候,導致data abort異常的時候,far裡面的值是包含了位址標籤的

10點半了,今天先到這裡,女朋友回來了。

c/djaskfjd

ARMv7與ARMv8的區別

參考連線 區別 1.指令集 armv8使用64位及32位的指令集,armv7使用32位及16位的指令集。2.通用暫存器 v8包含32個暫存器其中前32個位64位暫存器,後32個位32位暫存器,v7只包含16個32位暫存器。3.simd暫存器 v8包含32個128位暫存器,v7是32個64位暫存器。目...

ARMv8 中斷處理介面

不考慮el2和el3,irq處理分兩種情況 使用者態發生的中斷和核心態發生的中斷,相應的中斷處理介面分別為 el1 irq el0 irq 以核心態el1發生的irq為例 358 align 6 359 el1 irq 360 kernel entry 1 壓棧,儲存上下文 361 enable d...

Armv8上不棄不離的NEON FPU

熟悉arm processor的朋友應該知道arm的cortex a是帶有fpu和neon的,fpu用來做浮點數運算的,而neon是simd指令做並行運算的。在現有cortex a的設計裡,neon和fpu是不可分的,也就是不能單獨只有neon或是fpu。在比較高效能的cortex a cpu 比如...