mmu:記憶體管理單元。
cpu定址的方式:
變成實際的實體地址去定址。
那麼是mmu是如何實現va到pa的轉化的呢?
建立va與pa的對應關係:
mmu有段描述符(1m)(還有頁描述符大頁(64kb)小頁(4kb)和極小頁(1kb))
我們這裡說段頁表的建立。
比如32位cpu,4g的定址空間可分為4094個段(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,轉化過程如下圖:
ok,到此,便得到了實際的實體地址!
mini2440裸機之MMU(二 mmu
mini2440裸機之mmu 二 mmu.c 智在天涯 include def.h include option.h include 2440addr.h include 2440lib.h include 2440slib.h include mmu.h 段 section 是大小為1mb的儲存塊...
MMU工作原理
部分 一 mmu的產生 許多年以前,當人們還在使用dos或是更古老的作業系統的時候,計算機的記憶體還非常小,一般都是以k為單位進行計算,相應的,當時的程式規模也不大,所以記憶體容量雖然小,但還是可以容納當時的程式。但隨著圖形介面的興起還用使用者需求的不斷增大,應用程式的規模也隨之膨脹起來,終於乙個難...
MMU要點記錄
下面這個轉換是使用硬體自動完成的 if va 32m then mva va pid 25 else mva va 利用pid將va轉換成不同va,那麼多個程序的mva就能存在於同乙個頁表中,那麼在進行程序轉換時,只需要取不同的頁表就可以了 在實際使用中,程序也確實是小於32m的居多 而如果是大程序...