MMU段式映射(VA -> PA)過程分析


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,轉化過程如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM