Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314742
  • 博文数量: 208
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 286
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-20 11:39
文章分类

全部博文(208)

文章存档

2014年(208)

我的朋友

分类: 嵌入式

2014-05-20 12:29:09

原文地址:**ARM CPU上的地址转换过程 作者:andyhzw

开发板:arm9

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,
这样就不必进行重建页表等工作了。


阅读(415) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~