举例说明段寻址方式VA到PA的转换过程

首先,须明确几个重要概念:1 虚拟地址映射到哪个物理地址是由程序员决定的,如果程序不指定映射到哪里去,是没有意义的,所以这是一个设计输入。2 待映射的虚拟地址可以随意选择,转换到哪个物理地址也可以随意选择,但是一旦选择了一个待转换的虚拟地址时,从该虚拟地址开始的1M空间都会被一一映射到被选择的物理地址开始的1M空间。要特别注意随意选择和一一对应的理解。3 一级页表中存放了4096个描述符,...
摘要由CSDN通过智能技术生成

首先,须明确几个重要概念:
1 虚拟地址映射到哪个物理地址是由程序员决定的,如果程序不指定映射到哪里去,是没有意义的,所以这是一个设计输入。
2 待映射的虚拟地址可以随意选择,转换到哪个物理地址也可以随意选择,但是一旦选择了一个待转换的虚拟地址
时,从该虚拟地址开始的1M空间都会被一一映射到被选择的物理地址开始的1M空间。要特别注意随意选择和一一对应的理解。
3 一级页表中存放了4096个描述符,每个描述符对应1M的虚拟地址。描述符中存放了它对应的1MB物理地址空间的起始地址。注意这里是起始地址,还要注意的是描述符中存放的是物理地址的起始地址。编程时,是将待映射的物理地址的高12位取出来并加上一些控制(如AP C B 等控制方式)后,再存放到页表中的相应地址。
4MVA到PA的转换过程之前,需要先建立页表与物理地址的映射关系,即先要编程把被映射的物理地址起始地址写入到相应的页表地址中。这一步做了cpu访问地址的时候才能在页表中查表,才有那些取高位和取低位再形成物理地址的复杂转换过程。当然也有在表中找不到该地址的时候(做了个实验,如果找不到时看结果是什么)

针对第2条,做了一个实验,将待映射的物理地址改成任意的看有没有问题。这是在韦东山老师mmu源程序上进行修改的。原程序是将0xA000000的虚拟地址映射到0x56000000上,其程序如下:
*(mmu_tlb_base + (virtuladdr >>20))= (physicaladdr & 0xFFF00000)| mmu_secdesc_wb
现在将物理地址改为0x56000010,编译后烧写,程序还是能循环点灯。根据其程序,只有修改了物理地

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值