MMU中关于VA和MVA的疑惑??

  VA转换成MVA 供cache、MMU使用


  VA->MVA的方法(硬件自动完成):
  if(VA<32M)
   MVA=VA|(PID<<25) //PID通过读CP15的C13获得
  else
 MVA=PA

为什么要这样转换?

MVA=VA|(PID<<25) 是因为VA|(PID<<25)就等相当于VA|32M*PID(假设移位不溢出,那么就是VA+32M*PID)。可是,为什么32M以下的VA就要转换而32M以上的VA却不用转换呢?


另外,假如两进程各自的VA1=VA2>32M,那么将会怎么办呢?

这个是因为在快速上下文切换中进程只有32M虚拟空间。从0到32M-1。这个是基本条件。
所有的进程虚拟空间都是一样的,这样是为了物理空间可以不重合,方便调度,所以低位相同,传给mmu的时候只要va的高7位为pid就能自动区分了。就是mva=va+pid<<25. 当va大于32M的话,那就不一定是本进程的空间了,也没法转化成mva了。所以当va大于32M的时候可能是访问了别的进程空间了。只要不是访问0进程就可以了。

利用PID生成MVA的目的是为了减少切换进程时的代价:如果不使用MVA,当两个进程的VA有重叠时,在切换进程时为了把重叠的VA映射到不同的PA上,需要重建页表、等等,代价非常大。如果使用MVA:假设进程1,2运行时的VA都是0~(32M-1),但它们的MVA并不重叠,分别为:0x0200 0000~0x03ff ffff、0x0400 0000~0x05ff ffff,这样就不用重建页表、等等....

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值