ARM的学习笔记—MMU

MMU(Memory Management Unit,内存管理单元)

ARM CPU上的地址转换过程设计3个概念:虚拟地址(VA,Virtual Address)、变换后的虚拟地址(MVA,Modified Virtual Address)、物理地址(PA,Physical Address)。

虚拟地址(VA):逻辑地址0x0000_0000 –0xFFFF_FFFF;

变换后的虚拟地址(MVA):这是由ARM的硬件自动将VA转换为MVA的;

         如果VA<32M,通过读CP15(ARM的协处理器)的C13获得进程的标识号PID,(硬件自动完成)

if(VA < 32M)

    MVA = VA | (PID<<25);

else

    MVA = VA;

 物理地址(PA):设备对应的实际地址。


CPU没有MMU或者有MMU但是没有启动时,CPU在访问内存时发出的地址将直接传送到地址总线上;

CPU有MMU并且启动MMU后,CPU对外发出虚拟地址VA;VA被转换为MVA供cache、MMU使用,再这里MVA被转换为PA;最后PA传送到地址总线上,读取地址相应的值。

虚拟地址转物理地址的转换过程有两种:



图1.1 使用页表的地址转换图

        32位的CPU的虚拟地址空间有2^32=4GB。虚拟地址转物理地址的方法是通过建立页表,然后读取相应的值进行转化最终得到物理地址值。协处理器CP15的寄存器C2(称为页表基址寄存器)保存了一级页表的地址(TTB)。


图1.2 页表基址寄存器

        在一级页表中使用4096个描述符来表示这4GB的空间,则一个描述符代表1MB的虚拟地址。一级页表的描述符可以表示存储了它对应的1MB物理空间的起始地址,也可以表示下一级页表的地址。

        MVA的位[31:20]用来索引一级页表,用来表示一级页表的偏移量,因此一级页表可以存储2^12 =4096个描述符。 

        一级页表的地址 = TTB(即页表基址寄存器的位[31:14])+MVA的位[31:20]+0b00。

        通过求得的地址值,找到对应的存储在页表内的描述符。

一级页表的描述符占据4个字节,有四种格式: 

                                          

图1.3 一级页表的描述符格式

对于位[1:0]等于:
0b00:无效;
0b01:表示是指向粗页表(Coarse page table)的描述符.
0b10:表示指向段(Section)的描述符.
0b11:表示指向细页表(Fine page table)的描述符.

由图1.4可知,当一级页表的描述符的位[1:0]为0b10时表示此MVA地址是读取段的地址。此时MVA的地址组成为:

图1.4 MVA的地址组成格式

段的地址段转换过程,如图1.5所示:

 

图1.5 段的地址段转换过程

        从协处理器CP15寄存器C2中取出TTB base(位[31:14])和MVA中的位[31:20]加上低两位为0,组成一级页表的地址值。找到存储在一级页表内的描述符。分析低两位为0b10,可知表示的是此MVA是查找段的地址,取出描述符的位[31:20]和MVA地址位[19:0]组成实际的物理地址。

举个例子:

图1.6 段地址的转换过程

二级页表

图1.7 二级页表的描述符格式

对于位[1:0]等于:

0b00:无效;

0b01:表示是指向大页表(Large page table)的描述符.

0b10:表示指向小页表(Small page table)的描述符.

0b11:表示指向极小页表(Tiny page table)的描述符.

图1.8 大页的地址转换过程(大页描述符保存在粗页表中)


图1.9 小页的地址转换过程(小页描述符保存在粗页表中)


图1.10 极小页的地址转换过程(极小页描述符保存在粗页表中)


图1.11 页表的种类

MVA的位[31:20]表示一级页表的基于首地址的偏移量,因此一级页表共有2^12=4096项描述符。而ARM的逻辑地址总共4GB,所以每项描述符对应1MB的虚拟地址,要么存储了它对应的1MB物理空间的起始地址。

如果使用了二级页表:

    粗页表:MVA的位[19:12]表示粗页表的偏移量,因此粗页表共有2^8=256项描述符。由于一级页表的描述符对应1MB的虚拟地址,所以粗页表的描述符只能表示1MB/256=4KB的地址空间的起始地址。

    细页表:MVA的位[19:10]表示细页表的偏移量,因此细页表共有2^10=1024项描述符。由于一级页表的描述符对应的1MB的虚拟地址,所以细页表的描述符值只能表示1MB/1024=1KB的地址空间的起始地址。

    大页表:MVA的位[15:0]表示大页表的偏移量,因此大页表共有2^16=64KB的物理空间地址。

    小页表:MVA的位[11:0]表示小页表的偏移量,因此小页表共有2^12=4KB的物理空间地址。

    极小页表:(细页表):MVA的位[9:0]表示细页表的偏移量,因此细页表共有2^10=1KB的物理地址。

 

参考文献:《嵌入式Linux应用开发完全手册》韦东山编著;

                     http://blog.csdn.net/hevake_lcj/article/details/7400751




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值