历史上的今天
今天是:2025年07月11日(星期五)
2018年07月11日 | 为什么中断向量表重映射到高地址
2018-07-11 来源:eefocus
MMU给我感觉是个很复杂的东西,网上看了一些资料,勉强知道了一些表面的东西。它有两个作用:1、把虚拟地址映射到物理地址;2、对内存访问提供控制机制。
我主要记录下我对映射表变换的理解。
在ARM中,MMU另外提供了一张映射表(MVA),用于程序虚拟地址(VA)到物理地址(PA)的映射。MVA称为变换后的VA。在程序运行时,CPU只看到VA,而MMU和cache们只看到PA和MVA。应该说,在进程运行切换过程中,映射关系是动态变化的,因为不同进程和内存之间需要不同的映射关系,就需要不断的重做映射表,这个代价是很大的。所以,有必要让映射表中需要更新的内容很少,以减少性能开支,这就出现了“变换后的”VA,即MVA,如果VA<32M,需要使用进程标识号PID(通过读CP15的C13获得)来转换为MVA。
VA与MVA的转换方法如下(这是硬件自动完成的):
if(VA < 32M)
MVA = VA | (PID<<25); //VA<32M,即PID*0x02000000作为该进程起始地址
else
MVA = VA; //VA>=32M
如:假设两个进程1、2运行时的VA都是0-32M,则他们的MVA分别是0x02000000-0x03ffffff、0x04000000-0x05ffffff,这样进程切换就省事多了,不必进行重建页表等工作。
但是,这同时带来了中断跳转的问题。当发生异常时,需要跳到0x0位置的异常向量表,这个0x0应该是VA,且小于32M,如果开启了MMU,就会被转换为MVA,而不同的PID产生不同的MVA,这就导致异常向量表的地址不统一了。所以,Linux采取了将0x0位置的向量表映射到高地址0xffff0000处,就没有上述的问题了,看了半天原来是这么回事。。。
接下来,就是MVA如何映射PA的工作。s3c2410的datasheet中说到4中映射方案,其中最方便的是段(section)操作,具体见《s3c2410 MMU》的后半文。
史海拾趣
|
1. 前言 硬件平台: marvel 310 软件平台: maemo4 内核: 2.6.28 (经过 marvel 的移植) 2. 移植思想 1, WIFI 模块本身和 cpu 之间的接口; 我们的模块和 cpu 之间的接口是 sdio 的,也就是说必须要先保证 SDIO 本身 ...… 查看全部问答> |
|
我想进入IC设计这方面的领域。以前学习软件开发,伴随着软件开发经验越多,感觉硬件太差,这时想搞清楚计算机电路设计构造,尤其是芯片设计。在网上查找了些资料,才发现这时有关IC设计领域的事情。 或许是软件经验太 ...… 查看全部问答> |
|
我象把美光360(MT9V011)作为我ipcamera的接口,而dsp只支持656接口,而MI360没有说是否支持656接口。360应该输出的就是数字RGB接口,CCIR656接口不知道能否支持RGB的格式。 … 查看全部问答> |
|
网上看到一个老外做的有趣的小工具,bus pirate,就是利用PC做控制台,通过一个PIC单片机板子,模拟输出各种常用的单片机总线信号,比如I2C,SPI,1WIRE等等,这样就可以对常用的各种总线接口的芯片进行直接操作,不需要利用单片机编程序的麻 ...… 查看全部问答> |
|
写了一个状态机,从RAM里读读写写了64次,综合以后报警,说读写的地址端口有锁存器(12位地址,所以一共有24个). 上网查了一下,锁存器是只有if没有else时出现的,但修改以后锁存器一个没少。 下面是我程序的一部分, w_add ...… 查看全部问答> |




