MMU及地址映射

这里写自定义目录标题

MMU及地址映射

为了解决上述问题,于是就引入了虚拟地址。
也就是说虽然这些应用程序它们保存在内存中的位置各不一样,但对于CPU,它们运行时,都在同一个虚拟地址上。
举个例子,如视频中的两个hello应用程序,编译后查看反汇编代码,可以看到这两个程序的起始地址都是0x80A4。于是CPU运行两个APP时,都会去0x80A4读指令,然后经过MMU转换成Addr1、Addr2。这样,不同的APP可以在任意地址,经过MMU地址转换后,在内存上是不同的地址,互不干扰。
在这里插入图片描述

这里说的同时运行,并不是真正的同时运行,CPU是分时操作,APP1先工作很短一段时间,再APP2工作很短的一段时间,宏观的来看就是两个在同时工作。
因此,引入虚拟机地址的原因之一:让APP可以以同样的链接地址来编译;
在电子系统里面,内存都是有限的,无论是嵌入式系统还是电脑,比如我们的JZ2440内存就只有64M,这时假如有一个APP,需要1G的内存。应用程序执行时,不是一次性将所有代码都放入内存,而是将要运行的部分依次放入,当放入的代码指令大于64M后,会先将SDRAM里暂时用不到代码指令先置换出来,再放入需要运行的代码指令。这样尽管SDRAM很小,也可以运行内存需要很大的应用程序,而这个置换管理的工作,就是由MMU完成的。
在这里插入图片描述

因此,引入虚拟机地址的原因之二:让大容量APP可以在资源少的系统上运行;
此外,不同的APP之间应该相互独立,避免APP1能直接访问到APP2,以防止APP1影响APP2。
因此,引入虚拟机地址的原因之三:权限管理,禁止访问其它空间;
CPU发出虚拟地址(VA)到达MMU,MMU转换成物理地址(PA)发给硬件,那么MMU怎么根据什么将一个虚拟地址转换成物理地址?
a.表格
最简单的方法就是弄一个表格,将VA和PA对应起来,根据VA就能找到PA。这种方法优点是简单,缺点是有点浪费空间,需要同时记录VA和PA的地址。
b.改进
在表格里面,我们只保存PA,PA1对应的VA是01M-1,PA2对应的VA是1M2M-1,以此类推。这样改进后,只需要原来表格容量的一半即可。最后还需要把基地址告诉MMU,启动MMU。
在这里插入图片描述

怎么使用MMU?
1.在内存中创建这些表格(页表);
2.把页表基地址告诉MMU;
3.设置CP15,启动MMU;
前面图中的是一级页表,对于一级页表,条目/描述符对应的大小是1M,条目/描述符的格式可以参考S3C2410的芯片手册,MMU章节。
在这里插入图片描述

对于一级页表,我们只需要关注“Section”这一行,里面的PA是物理地址,剩下的AP、Domain、C、B用来进行权限管理。
简单插讲一下概念。
• 权限管理:
权限管理就是是否允许程序访问某块内存,有以下几种情况:
a.完全不允许访问;
b.允许系统模式访问,不允许用户模式访问;
c.用户模式下,根据描述符中的AP决定怎么访问;
• 域:
在CP15寄存器有个C3,用来进行域控制。
ARM9中,有16个域,每个域用2位来表示4种权限。
在这里插入图片描述

• 条目/描述符(AP):
①设置domain;查看CP15 C3,确定域权限;
②如果域权限是01,使用AP来决定;
AP来自页表中的描述符,S、R来自CP15中的C1;
在这里插入图片描述

最后再来补充一个概念,前面我们运行多个APP,切换进程时,需要重新把0x80B4地址对应到不同的物理地址上,也就是说,每切换一个进程,你都需要重新修改下页表,这个开销非常的大,那有什么办法优化呢?
引入MVA,也就是修改后的虚拟地址。
if (VA<32M)
MVA=VA|(pid<<25);
else
MVA=VA;
当虚拟地址小于32M时,MVA和进程的PID有关,否则等于VA,这就可以解决切换进程,频繁构造页表的问题。 假设现在有两个APP,分别是APP1和APP2,链接地址都是0x80b4,PID分别是1和2。
①当CPU运行APP1时,发出VA,MVA=VA(1<<25),对应的页表是PA=APP1所在的内存;
②当CPU运行APP2时,发出VA,MVA=VA(2<<25),对应的页表是PA=APP2所在的内存;
虽然我们发出的都是同一个VA,但因为PID不一样,所对应的页表项也就不一样,也就不需要重新去构造页表,这样进程从APP1切换到APP2时,只需要修改PID即可,不需要去重新创建页表,这样就可以提高切换效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值