★★★ 個人部落格導讀首頁—點選此處 ★★★
思考:
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的硬體框圖如下所示:
Virtual and physical memory的映射圖如下所示:
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資訊:
bits[1:0]表示該輸出是block address,還是next level table address,還是invalid entry
(3)、granule sizes
有三種granule sizes的頁表:4kb、16kb、64kb
(4)、Cache configuration
MMU使用translation tables 和 translation registers控制着cache policy、memory attributes、access permissions、va到pa的轉換
3、 ARM mmu三級頁表查詢的過程
- (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]查找到最終的實體位址