码迷,mamicode.com
首页 > 其他好文 > 详细

Mini2440内存管理单元MMU

时间:2015-11-08 15:14:42      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

一级页表:

TTB base代表一级页表的地址,将它写入协处理器CP15的寄存器C2(称为页表基址寄存器)即可,一级页表的地址是16K对齐,使用[31:14]存储页表基址,[13:0]为0。一级页表使用4096个描述符来表示4GB空间,每个描述符对应1MB的虚拟地址,要么存储它对应的1MB物理空间的起始地址,要么存储下一级页表的地址。使用MVA[31:20]来索引一级页表(2^12=4096个描述符),得到一个描述符,每个描述符占4个字节。

技术分享

一级描述符低两位:
00:无效(Fault)
01:粗页表(Coarse page table)
  [31:10]为粗页表基址,此描述符低10位填充0后就是一个二级页表的物理地址,二级页表含256个条目([9:2]),
  每个条目表示4KB大小的物理地址,一个粗页表表示1MB物理地址。
10:段(Section)
  [31:20]为段基址,此描述符低20位填充0后就是一块1MB物理地址空间的起始地址。MVA[19:0]用来在这1MB空间中寻址。 
  以段的方式进行映射时,虚拟地址MVA到物理地址PA的转换过程如下:
  ①页表基址寄存器位[31:14]和MVA[31:20]组成一个低两位为0的32位地址,MMU利用这个地址找到段描述符
  ②取出段描述符的位[31:20](段基址),它和MVA[19:0]组成一个32位的物理地址(这就是MVA对应的PA)
 

 技术分享

11:细页表(Fine page table)

  [31:12]为细页表基址(Fine page table base address),此描述符的低12位填充0后,就是一个二级页表的物理地址。

  此二级页表含1024个条目([11:2]),其中每个条目表示大小1kb的物理地址空间,一个细页表表示1MB物理地址空间。

 

二级页表:

以大页(64KB),小页(4KB)或极小页(1KB)进行地址映射时,需要用到二级页表,二级页表有粗页表、细页表两种,二级页表描述符格式如下:

技术分享

 

 

 

由于本次程序只使用一级页表,以段的方式进行地址映射。所以二级页表的4种情况就不总结了,看书。

 

内存的访问权限检查:

它决定一块内存是否允许读、是否允许写。这由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位共同决定。

“域”决定是否对某块内存进行权限检查,“AP”决定如何对某块内容进行权限检查。

S3C2440有16个域,CP15寄存器C3中每两位对应一个域(一共32位)。

00:无访问权限(任何访问都将导致“Domain fault”异常)

01:客户模式(使用段描述符、页描述符进行权限检查)

10:保留(保留,目前相当于“无访问权限”)

11:管理模式(不进行权限检查,允许任何访问)

Domain占用4位,用来表示内存属于0-15,哪一个域,例如:

粗页表中的“Domain”为0b1010,表示1MB内存属于域10,如果域访问控制寄存器的[21:20]等于0b01,则使用描述符中的"AP"位进行权限检查,如果等于0b11,则不进行权限检查,允许任何访问。

AP、ap3、ap2、ap1、ap0结合CP15寄存器C1的R/S位,决定如何进行访问检查。

下表为AP、S、R的对照表

 

AP S R 特权模式 用户模式 说明
00 0 0 无访问权限 无访问权限 任何访问将产生“Permission fault”异常
00 1 0 只读 无访问权限 在超级权限下可以进行读操作
00 0 1 只读 只读 任何写操作将产生”Permission fault“异常
00 1 1 保留 - -
01 x x 读/写 无访问权限 只允许在超级模式下访问
10 x x 读/写 只读 在用户模式下进行写操作将产生"Permission fault"异常
11 x x 读/写 读/写 在所有模式下允许任何访问
xx 1 1 保留 - -

 

转译查找缓存(Translation Lookaside Buffers, TLB)

Cache:

S2C2440内置了指令Cache(ICaches)、数据Cache(DCaches)、写缓存(Write buffer),需要用到描述符中的C位(Ctt)和B位(Btt)。

S3C2440 MMU、TLB、Cache的控制指令:

S3C2440除了ARM920T的CPU核心外,还有若干个协处理器,用来帮助主CPU完成一些特殊功能。对MMU、TLB、Cache等的操作涉及到协处理器。

<MCR|MRC> {cond} p#,<expression1>,Rd,cn,cm{,<expression2>}

MRC            //从协处理器获得数据,传给ARM920T CPU核心寄存器

MCR            //数据从ARM920T CPU核心寄存器传给协处理器

{cond}           //执行条件,省略时表示无条件执行

p#              //协处理器序号

<expression1>    //一个常数

Rd             //ARM920T CPU核心的寄存器

cn和cm               //协处理器中的寄存器

<expression2>   //一个常数

其中,<expression1>、cn、cm、<expression2>仅供协处理器使用,它们的作用如何取决于具体的协处理器。

 

Mini2440内存管理单元MMU

标签:

原文地址:http://www.cnblogs.com/ht-beyond/p/4947220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!