ARM MMU/TLB的學習筆記和總結

2023-08-04 15:02:35 來源:Arm精選

思考:


(相關資料圖)

頁表最大支持幾級頁表查詢?虛擬地址的有效位一般是多少?最大是多少?虛擬地址的高16bit的用途?查詢到的頁面的大小,可以是多大?

Memory Management Unit (MMU)主要功能就是 能夠讓系統在執行多任務時,作為一個獨立的程序運行它自己的虛擬地址空間中,它們無需知道真正的物理地址是什么。開啟MMU的硬件框圖如下所示:

Virtual and physical memory的映射圖如下所示:

一、Translation Lookaside Buffer (TLB)

1.1 TLB entry里有什么?

TLB中不僅僅包含物理地址和虛擬地址,它還包含一些屬性,例如:memory type、cache policies、access permissions、ASID、VMID注:ASID - Address Space ID, VMID - Virtual Machine ID

1.2 contiguous block entries

TLB擁有固定數目的entries,所以你可以通過減少外部內存地址轉換的次數來提升TLB hit率.

ARMV8 architecture中有一個TLB中的feature叫contiguous block entries,它表示一個entry可以對應多個blocks.。一個entry找到多個blocks,再通過index來查找具體是哪個block。頁表的block entries中,也有一個contiguous bit。這個bit為1,則表示開啟了TLB的contiguous block entries feature。contiguous block entries feature要求alignment,例如:

16 × 4KB adjacent blocks giving a 64KB entry with 4KB granule. 緩存64kb blocks,只需16 enties32 × 32MB adjacent blocks giving a 1GB entry for L2 descriptors, 128 × 16KB giving a 2MB entry for L3 descriptors when using a 16KB granule.32 × 64Kb adjacent blocks giving a 2MB entry with a 64KB granule.

如果支持了contiguous bit,那么:TLB查詢后的PA = TLB entry中的PA + index。

1.3 TLB abort

如果開啟了contiguous bit,而要轉換的table entries卻不是連續的,或者entries的output在地址范圍之外或沒有對齊,那么將會產生TLB abort。

1.4 TLB一致性

如果os修改了頁表(entries),那么os需要告訴TLB,invalid這些TLB entries,這是需要軟件來做的. 指令如下:

TLBI < type >< level >{IS} {, < Xt >}

二、Translation table

2.1 TTBR0/TTBR1

ARM文檔說:因為應用程序切換時要切換頁表,頁表經常改變,而kernel切換時不需要切換頁表,頁表幾乎不改。所以ARM就提供了 a number of features,也就是TTBR0和TTBR1兩個頁表基地址。

TTBR0用于0x00000000_00000000 - 0x0000FFFF_FFFFFFFF虛擬地址空間的翻譯,TTBR1用于0xFFFF0000_00000000 - 0xFFFFFFFF_FFFFFFFF虛擬地址空間的翻譯。

EL2/EL3只有TTBR0,沒有TTBR1,所以EL2/EL3的虛擬地址空間是:0x0000FFFF_FFFFFFFF

2.2 頁表的entry中包含哪些信息

MMU除了完成地址的翻譯,還控制訪問權限、memory ordering、cache policies。

如圖所示,列出了三種類型的entry信息:

bits[1:0]表示該輸出是block address,還是next level table address,還是invalid entry

2.3 granule sizes

有三種granule sizes的頁表:4kb、16kb、64kb

2.4 Cache configuration

MMU使用translation tables 和 translation registers控制著cache policy、memory attributes、access permissions、va到pa的轉換

三、 ARM mmu三級頁表查詢的過程

(1)、在開啟MMU后,cpu發起的讀寫地址是一個64bit的虛擬地址,(2)、該虛擬地址的高16bit要么是全0,要么是全1. 如果是全0,則選擇TTBR0ELx作為L1頁表的基地址; 如果是全1,則選擇TTBR1ELx作為L1頁表的基地址;(3)、TTBRx_ELn作為L1頁表,它指向L2頁表,在根據bit[41:29]的index,查詢到L3頁表的基地址(4)(5)、有了L3頁表的基地址之后,在根據bit[28:16]的index,查詢到頁面的地址(6)、最后再根據bit[15:0]查找到最終的物理地址

標簽:

上一篇:步進電機的控制原理是什么?如何實現步進電機的控制?
下一篇:最后一頁