MMU:內存管理單元。
CPU尋址的方式:
未使用MMU:CPU發出地址(PA) 直接內存尋址(SDRAM or DDRx)。
使用MMU :CPU發出地址(VA) MMU接收CPU發來的地址 經過某種轉換
變成實際的物理地址去尋址。
那么是MMU是如何實現VA到PA的轉化的呢?
建立VA與PA的對應關系:
MMU有段描述符(1M)(還有頁描述符大頁(64KB)小頁(4KB)和極小頁(1KB))
我們這里說段頁表的建立。
比如32位CPU,4G的尋址空間可分為4096個段(4G/1MB)
所以可以建立4096個對應的關系而實際的內存肯定沒到4G(VA-PA 可多對一)
所以首先要在內存中指定存放該對應表的實際位置(可通過CP15協處理器指定)
映射表的大概示意圖如下
VA(0-4095) PA(高12位)
0 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
1 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
2 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
···
···
4094 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
4095 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
AP:AP權限為所有用戶可讀寫 在多進程時使用 用來保護進程
DOMAIN:配合AP使用 權限管理
cacheable :C位 使能MMU緩存
bufferable :B位 使能MMU緩沖區
描述符:MMU使用段描述符(還有頁描述符大頁(64KB)小頁(4KB)和極小頁(1KB))
以下是建立1MB映射的C語言描述:
phyaddr = 0x30000000;
viraddr = 0xa0000000;
*(mmu_ttb_base + (viraddr >> 20)) = ((phyaddr & 0xfff00000) | 低20位的屬性描述);
VA到PA轉化過程:
CPU發出VA:比如0xa0000123,轉化過程如下圖:
