MMU段式對映(VA PA)過程分析

2021-07-08 08:58:37 字數 1377 閱讀 8624

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的居多 而如果是大程序...