天天看點

[mmu/cache]-ARM MMU/TLB的學習筆記和總結

★★★ 個人部落格導讀首頁—點選此處 ★★★

思考:

1、頁表最大支援幾級頁表查詢?

2、虛拟位址的有效位一般是多少?最大是多少?

3、虛拟位址的高16bit的用途?

4、查詢到的頁面的大小,可以是多大?

文章目錄

        • 1、Translation Lookaside Buffer (TLB)
          • (1)、TLB entry裡有什麼?
          • (2)、contiguous block entries
          • (3)、TLB abort
          • (4)、TLB一緻性
        • 2、Translation table
          • (1)、TTBR0/TTBR1
          • (2)、頁表的entry中包含哪些資訊
          • (3)、granule sizes
          • (4)、Cache configuration
        • 3、 ARM mmu三級頁表查詢的過程

Memory Management Unit (MMU)的主要功能就是能夠讓系統在執行多任務時,做為一個獨立的程式運作它自己的虛拟位址空間中,它們無需知道真正的實體位址是什麼. 開啟MMU的硬體框圖如下所示:

[mmu/cache]-ARM MMU/TLB的學習筆記和總結

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

[mmu/cache]-ARM MMU/TLB的學習筆記和總結

1、Translation Lookaside Buffer (TLB)

(1)、TLB entry裡有什麼?

TLB中不僅僅包含實體位址和虛拟位址,它還包含一些屬性,例如:memory type、cache policies、access permissions、ASID、VMID

注:ASID - Address Space ID, VMID - Virtual Machine ID

(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 enties

• 32 × 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。

(3)、TLB abort

如果開啟了contiguous bit,而要轉換的table entries确不是連續的,或者entries的output在位址範圍之外或沒有對齊,那麼将會産生TLB abort

(4)、TLB一緻性

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

2、Translation table

(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)、頁表的entry中包含哪些資訊

MMU除了完成位址的翻譯,還控制的通路權限、memory ordering、cache policies.

如圖所示,列出了三種類型的entry資訊:

[mmu/cache]-ARM MMU/TLB的學習筆記和總結

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

(3)、granule sizes

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

[mmu/cache]-ARM MMU/TLB的學習筆記和總結
(4)、Cache configuration

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

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

[mmu/cache]-ARM MMU/TLB的學習筆記和總結
  • (1)、在開啟MMU後,cpu發起的讀寫位址是一個64bit的虛拟位址,
  • (2)、該虛拟位址的高16bit要麼是全0,要麼是全1. 如果是全0,則選擇TTBR0_ELx做為L1頁表的基位址; 如果是全1,則選擇TTBR1_ELx做為L1頁表的基位址;
  • (3)、TTBRx_ELn做為L1頁表,它指向L2頁表,在根據bit[41:29]的index,查詢到L3頁表的基位址
  • (4)(5)、有了L3頁表的基位址之後,在根據bit[28:16]的index,查詢到頁面的位址
  • (6)、最後再根據bit[15:0]查找到最終的實體位址

繼續閱讀