Board logo

标题: ARM CPU上的地址转换过程 [打印本页]

作者: yuyang911220    时间: 2015-10-22 19:58     标题: ARM CPU上的地址转换过程

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


没启动MMU是,CPU,cache,mmu,外设等所有部件使用的都是物理地址。
启动MMu后,CPU 对外发出虚拟地址 VA : VA 被转换为 MVA 供 cache ,mmu使用,在这里MVA被转换为PA;
    最后使用PA读写时间设备。


(1) CPU 看到的,用到的只是虚拟地址VA。
(2)cache,mmu是不知道 VA的,它们使用的是 MVA。
(3)实际设备是不知道 VA和MVA的,读写它们时使用的是由 MVA 转换得到的 PA。





    如果 VA < 32M,需要使用进程标识号PID(通过读CP15的C13获取)来转换为MVA。
VA 和 MVA 的转换方法如下(这时由硬件自动完成的):
        if( VA < 32M) then
            MVA    = VA | ( PID << 25 )         //VA < 32M
        else
            MVA    = VA                                //VA >= 32M


    利用 PID 生成MVA的目的是为了减少切换进程时的代价:不使用 MVA 而直接使用VA的话,
当两个进程所用的虚拟地址空间(VA)有重叠时,在切换进程时为了把重叠的VA映射到不同的PA上去,
需要重建页表,使无效caches 和 TLBS 等,代价非常大。
    使用 MVA 后,进程切换就省事多了:假设两个进程1,2运行时的VA都是0~(32M-1),
但是它们的MVA并不重叠,分别为0x0200 0000 ~ 0x03ff ffff,0x0400 0000 ~ 0x05ff ffff,
这样就不必进行重建页表等工作了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0