Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6380958
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16634
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: 嵌入式

2013-06-08 12:31:10

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


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