关于ARM9的MMU重要理解
原文地址:
http://blog.chinaunix.net/u1/58780/showart_468065.html
在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 |
如:假设两个进程1、2运行时的VA都是0-32M,则他们的MVA分别是0x02000000-0x03ffffff、0x04000000-0x05ffffff,这样进程切换就省事多了,不必进行重建页表等工作。
而VA和MVA的转换公式为:
if(VA < 32M) then
else
这样,只要每个进程的VA都在32M之内,就可以保证每个进程的MVA不会发生重叠。
2^25 = 32M。另外,可以计算出进程最多为2^(32-25) = 128个
如果说这个是规定来的,你信不信?呵呵
那么PID就只有6位了,linux操作系统能够支持的进程最多只有2^6=64个了,这样不划算
B指令的的机器代码结构为 |
你可以试下如下代码: |
恩,最低24位是0xffffff,偏移量就是 -1
|
恩,是这样的
ARM9MM 相关文章:
- ARM9 MMU映射问题三(11-28)
- ARM9学习笔记之——MMU(11-20)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)