首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM CPU上的地址转换过程

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,
这样就不必进行重建页表等工作了。
继承事业,薪火相传
返回列表