您尚未登录。

楼主 #1 2018-06-05 18:09:29

xinxiaoci
会员
注册时间: 2018-04-18
已发帖子: 71
积分: 71

MMU 的概念及原理

《单片机小白转嵌入式Linux学习记录,基于S3C2440----目录》

地址映射 MMU

当N个应用APP运行时
1. 它们同时保存在SDRAM 中
2. 它们的地址各不行同

链接地址 = 程序运行时所处的地址

所以在编写某个APP时要需要单独的指定他的链接地址,对于一两个应用,我们还可以手动去指定链接地址,但是对于一个开放的操作系统,有成百上千的应用,由不同的开发者编写,我们是不可能预测和重定位所有的APP位置,所以要引入虚拟地址,让所有的APP都位于相同的虚拟地址来执行。

MMU负责虚拟地址与物理地址之间的转换

CPU -> MMU -> 地址总线 -> SDRAM/GPIO

MMU 的作用:

1. 让不同的APP以相同的链接地址进行编译和运行
2. 让大于SDRAM容量的APP可以运行,根据APP运行的局部性分段执行
3. 权限管理,APP1 只能访问APP1 对应的地址,保证应用程序不越界,及整个系统给的正常运行。

MMU 的使用:

1. 在内存中创建页表
2. 把页表基址告诉MMU
3. 设置CP15 启动 MMU

以一级也表为例

一级页表的中的每个条目对应 1M 的内存空间,这个条目称之为描述符(段描述符、粗页表描述符、细页表描述符)。
一级页表描述详见 s3c2410 P560

段描述符为例:
base address AP Domain C B
base address: 对应物理地址
AP 和 Domain: 对应权限管理
C 和 B        : 对应CACHE 和 write buffer

权限管理:
a. 完全不允许访问
b. 允许系统模式访问,不允许用户模式访问
c. 用户模式下根据描述符的AP值决定怎么访问

域 的概念:

CP15 -> C3 32bit 每两位控制一个域 共 0-15 16个域

表示4中权限:

00 无访问权限 如果想让一段内存无法访问,将页表描述符中domain 设置为对应的域号 0-15 然后将对应的域设置为00
01 客户模式 使用页表描述符中的 AP + S + R 来确定权限,具体见韦老师书本7.1.3 最后一个表格。
10 保留
11 管理模式 可以访问,不进行 AP S R 权限检查
注:AP来自描述符 S R 来自 CP15 -> C1

进程切换时需要切换到对应的虚拟地址,由于系统有众多APP进程,所以这个切换开销非常大,由硬件来实现 CP15 -> C13

CPU -> 虚拟地址(VA) -> CP15 : C13 -> 变换后的虚拟地址(MVA) -> MMU -> 得到物理地址(PA)

我们常说的虚拟地址一般都是指CP15:C13进程变换后的虚拟地址 MVA

CP15:C13 的变换关系:

if(VA<32M)
    MVA = VA|(PID<<25) ;
else
    MVA = VA ;
解决了频繁构造页表的问题。

假如有两个进程 APP1 APP2 链接地址都是 0x80b4 (链接地址即运行时地址 0x80b4 是虚拟地址VA),PID 分别为 1 和 2;运行地址一般都小于32M。

1. 当CPU运行APP1时,发出VA 0x80b4

MVA = VA|(1<<25) 对应的页表指向 APP1所在的实际物理地址。

2. 当CPU运行APP2时,发出VA 0x80b4

MVA = VA|(2<<25) 对应的页表指向 APP2所在的实际物理地址。

这样进程1 切换到进程2 只需要切换PID即可,不需要重新创建页表,从而提升切换效率。

MMU、CACHE等看到的都是MVA(变换后的虚拟地址),而不是编译链接地址(或运行时地址) VA(链接虚拟地址),我们提到的虚拟地址默认都是MVA 变换后的虚拟地址。

离线

#2 2019-01-19 21:00:57

jw__liu
会员
注册时间: 2019-01-18
已发帖子: 40
积分: 40

Re: MMU 的概念及原理

看不懂也mark一下

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn