ARM CP15 與 MMU

Ref: https://hackpad.com/ep/pad/static/S6pOQ13EmvT


ARM CP15 與MMU

探討context switch 成本問題,最明顯的先以針對有enable MMU跟  disable MMU來做比較。
簡說:
在ARM平台上,負責查表由虛擬記憶體對應到實體記憶體的動作是由硬體TLB機制來實現的,在單一ARM處理器的架構下,通常只有一個TLB分頁配置位址,也就是說目前Task Context-Switch到Task A就會把該Task的TLB 分頁配置位址載入,如果是又切換到Task B就會載入該Task的TLB 分頁配置位址.單核心的架構下,同一時間處理器只會處理一個Task。
為了加快減少轉換麻煩會有 Fast Context-Switch Extension (FCSE) 的出現,所以要了解ARM 的 MMU架構 。
  • 要在去確認查一下,是否被棄用或改用成什麼,查到囉,已改成FCSEIDR
ARM的架構是會轉變的,在查資料時,要從datasheet中找到屬於自己研究的架構,以這次而言就是要爭對micro architecture 是 ARM CortexA8 ,Instruction architecture set 是 ARMv7。
  • 譬如說以下內容就有爭對ARMv5 vs ARMv7的CP15( c0 , c1 , c13)的改變做介紹
      參考
並且不得不懂CP15,因為CP15能夠藉由read or write (注意有些register 有only read 的特性),來對一些MMU的內容做控制或者獲取資訊,譬如說MMU的enable就是在CP15理頭的c1 register就是用來enable/disable MMU、c2能save level one page directory 的base address 、c1還能夠清除I-cache or D-cahce。
且要不忘是針對micro architecture 是 ARM CortexA8 ,Instruction architecture set 是 ARMv7
且要看懂ARM Linux 內核源碼剖析的第五章~第七章的內容,得必須對ARM CP15與MMU的整體要有一定的認知才行。
書裡的(第一章):介紹Linux kernel簡單架構認知(process management 、device driver...)
  • (第二章):介紹Linux kernel 編譯過程前後以及Makefile 和 Kconfig 關鍵部分
  • (第三章):對ARM處理器基本架構+Register+exception handler+coprocessor的了解 
  • (第四章): 介紹分析核心的好用工具ctags + cscope +修改vim環境變成好用的IDE
  • (第五~七章):對解壓kernel的image 跟初始化以及一開始的start_kernel( ),但實際上大部分卻是對上述所提的MMU與CP15有關。

簡說:
CP15 又稱系統控制協處理器 (system control coprocessor),其中有16個32bits的register分別為 c0 到 c15 暫存器,暫存器中的位元可用來做不同的設置。透過指令 mrc 或是 mcr 讀寫 CP15 裡面的暫存器,mrc 是將 CP15 (c) 的暫存器讀至通用暫存器 (r); mcr 則反之。
Coprocessor (參考) :
The coprocessor space is divided logically into 16 coprocessors with numbers from 0 to 15, coprocessor 15 (cp15) being reserved for some typical control functions like managing the caches and MMU operation on processors that have one.參考維基 
與coprocessor有關的指令除了MCR、MRC之外,還有MSR 參考
CP15 基本概念:
CP15 的control register有哪些? 各有什麼用? 所搭配的常用指令(MCR、MRC)
ARM Linux內核源碼剖析書的P55底下的5-3圖那是c1而且是ARMv7-A的架構 參考2
MCR、MRC指令介紹:
MCR{<cond>} <p>,< opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}
舉例:
MCR{<cond>}  p15,<opcode1=0>,<Rd>,<CRn>,<CRm>{,<opcode2>}
MRC{<cond>}  p15,<opcode1=,0>,<Rd>,<CRn>,<CRm>{,<opcode2>}
對於CP15來說,opcode1恆為0,即0b000  (0b 表二進位)
注意:
  • r15不能作為ARM regist出現在MRC或MCR指令中,如果r15作為<Rd>出現在這裡,那麼指令的執行結果不可預知(R15 為PC)。
  • <CRm>是附加的coprocessor register,用於區分同一個編號的不同物理寄存器和訪問類型。當指令中不需要提供附加資訊時,將<CRm>指定為C0,否則指令的操作結果不可預知。
  • <opcode2>提供附加資訊,用於區分同一個編號的不同物理寄存器,當指令中沒有指定附加資訊時,省略<opcode2>或者將其指定為0,否則指令的操作結果不可預知。
c1 此register當中的最低位元的bit 是M,代表可以enable/disable MMU,C表示 Data cahe enable/disable ,B表示Little/Big-endian operation,I表示為instruction cache enable/disable。
BIC 為 Bit clear 可以爭對哪幾個bit去做給0 
@ Disable MMU
  • MRC p15, 0, r1, c1, c0, 0
  • BIC r1, r1, #0x1
  • MCR p15, 0 ,r1 ,c1 ,c0, 0
        
@ Enable MMU
  • MRC p15, 0, r1, c1, c0, 0
  • ORR r1, r1 ,#0x1
  • MCR p15, 0, r1, c1, c0, 0
ARM 的Memory types:
  • Normal: 存放instruction和data的memory space。
  • Device: 即 MMIO(Memory mapping I/O ),透過此塊memory space與periphery(外部週邊)溝通。
  • Strongly Ordered: 針對此塊memory space的存取,必須依照 program order 依次進行,不可被亂序(Out of order execution)。此塊memory 理所當然只能是共享。
ARM 教學網站: 參考
查詳細內容,配圖
ARM  Memory address的釐清:
ARM cortex-A8 memory access sequence
ARM 的位址轉換涉及底下三種位址:
  • 虛擬位址 (Virtual Address,VA): CPU 送出的位址。
  • 修改後的虛擬位址 (Modified Virtual Address,MVA): 快取和 MMU 看到的是 MVA
  • 物理位址 (Physical Address,PA): 內存看到的是 PA。
禁用 MMU 的情況下,VA 等同於 PA,不經過轉換直接以該位址存取內存。啟用 MMU 的情況下,視欲存取的 VA 是否超過 32M 而有所不同。公式如下:
  • if (address < 0x02000000)
  •         address += env->cp15.c13_fcse;
以ARMv7架構為例,要控制TLBTranslation Table,可以透過CP15的暫存器c2,其中c2主要提供以下Translationtable base registers 參考
  • MRC p15, 0, <Rd>, c2, c0, 0   #Read Translation Table Base Register 0
  • MCR p15, 0, <Rd>, c2, c0, 0   #Write Translation Table Base Register 0
  • MRC p15, 0, <Rd>, c2, c0, 1   #Read Translation Table Base Register 1
  • MCR p15, 0, <Rd>, c2, c0, 1   #Write Translation Table Base Register 1
  • MRC p15, 0, <Rd>, c2, c0, 2   #Read Translation Table Base Control Register
  • MCR p15, 0, <Rd>, c2, c0, 2   #Write Translation Table Base Control Register
  • Translation Table Base Register 0 (TTBR0):
  • 用來記錄User-Mode應用Task的記憶體分頁架構所在的BaseAddress,通常大小為128bytes到16kbytes(也就是說每個Task的1st LevelTable可以有32到4k筆Items(也就是1st LevelTable Index的最大長度),可透過TTBCR.N值決定),當作業系統進行ContextSwitch時,會把這個暫存器的值,指到新的Task的記憶體分頁架構的BaseAddress,並更新TTBCR與CONTEXTIDR暫存器.如果TTBCR設定為0,則以ARMv6以前的架構來操作TTBR0.(也就是說只有一個TTBR,User-Mode與Kernel-Mode的記憶體分頁都透過它描述,相對的當Context-Switch發生時,就缺少分出TTBR0與TTBR1的彈性).
  • Translation Table Base Register 1 (TTBR1):
  • 用來記錄作業系統特權等級與I/O空間的記憶體分頁架構所在的BaseAddress,屬於這類的記憶體規劃,並不會隨著應用TaskContext-Switch而改變.通常這Table大小都為16Kbytes.(就是說1stLevel Table可以有最多4k筆Items(=1st Level Table Index的最大長度)).
  • Translation Table Base Control Register (TTBCR):
  • 其中N[2:0]用以表示TTBR0的寬度,也就是說TTBR0的BaseAddressBits數為[31:14-N],如果N=0,表示TTBR0對應的Table大小為14bits=16kbytes,如果N=b111=7,表示TTBT0對應的Table大小為7bits=128bytes.
  • 要在查一下什麼時機會用到這些
找到更詳細的表了只是內容還是不懂(參考ARMv7" ARM® Architecture Reference Manual" 的data sheet p1473)
FCSE
ARM系統中,4GB的虛擬空間被分成了128個process space,每一個process space大小為32MB。每個process space中可以包含一個process,該process可以使用的virtual address space 為0x0~0x01FFFFFF,這個地址範圍也就是CPU看到的進程的虛擬空間。系統128個進程空間塊的編號為0〜127,標號為X的進程空間塊中的進程實際使用的虛擬地址空間為(X *0x02000000)到( X *0x02000000+0x01FFFFFF),這個地址空間是系統中除了CPU之外的其他部分看到的該進程所佔用的虛擬地址空間,亦即MVA。
系統中,每個process都使用虛擬地址空間為0x0〜0x01FFFFFF,當進程訪問本進程的指令和數據時,它產生虛擬地址(VA)的高7位為0;快速上下文切換機構用該進程的進程標示符(CP15:C13)代替VA的高7位,從而得到變換後的虛擬地址MVA,這個MVA在該進程對應的進程空間塊內。當 VA 的高 7 位不全是 0 時,MVA = VA。這種VA 是本進程用於訪問別的進程中的數據和指令的虛擬地址,注意這時被訪問的進程標識符不能為0。
  • if(VA[31:25]==0) then
  •     MVA= VA | (PID<<25)
  • else
  •     MVA= VA
ARM MMU超値得參考 : Search "記憶體管理系統"  與家冗傳的ARMv7" ARM® Architecture Reference Manual" 的data sheet的MMU圖以及內容做搭配: 參考
ARMv7-A and ARMv7-R edition
ARM MMU的2-level 架構: 參考 參考2
jserv的 ARMv7 slide share : 參考 、參考2
FCSE: 參考
CP15的c2 與 opc2(0,1,2)來控制TTBR0、TTBR1、TTBCR (就好像Intexl x86的cr3一樣:參考)
why?? 討論CP15 、FCSE的內容、對整個Virtual address 轉成physical address 還有TLB、cache、2-level paging( directory、page table的內容)
Oprofile 
Ubuntu 14.10 的基本套件需求並搭配oprofile-1.1.0 參考
ARM 的Memory protection unit(存取權限控制):
與CP15有關
其它關於ARM的重要內容
參考  了解什麼是Barrel shifter (參考1 、參考2參考3)、Register bank
FIQ與IRQ差在哪?(參考1
ARM整體內容包含想知道的FIQ、IRQ、ARM過去到現在的改變(參考jserv的slide1,slide2)

留言

熱門文章