免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3309 | 回复: 4
打印 上一主题 下一主题

请教ARM中关于MMU的几个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-20 21:10 |只看该作者 |倒序浏览
本人基于s3c2410开发板学习MMU部分,遇到几个问题想不明白:
1、板载SDRAM是64M,物理地址是0x30000000 - 0x33f00000,在初始化MMU页表时,把SDRAM的虚拟地址也映射到这个范围,是为什么?是不是为了跟没有MMU下的地址操作变得一样,也就是方便移植?
2、每个进程都有自己的运行空间,意思是不是指有各自的页表?即MVA?
3、我试着在x86上反复运行同一个程序读同一个地址的值,发现读出来的值会不同,是不是因为每次运行,都建立了不同的内存映射关系,导致读取的物理地址有可能不同?
在这里还没混多久,没分,没办法,还望不吝赐教。。。

论坛徽章:
0
2 [报告]
发表于 2008-01-21 09:42 |只看该作者
1 应该和X86相似吧,内核使用虚拟地址时,由于在使用分页前后引用一个地址都要是在物理内存中的同一个地址,因为连接的时候都是相对一个PAGE_OFFSET,而你的PAGE_OFFSET和PHYS_OFFSET都是0x3000000;所以物理地址和虚拟地址就是同样的了
在x86上,PAGE_OFFSET是0xC0000000,所以在没有分页的使用引用变量需要使用变量的值-0XC0000000,而你的系统上则不需要
就是个映射,能简单就简单
2. 如果只能用半句话说,我觉得就应该是你说的这样了,页表不一样,所以进程之间就不会相互影响了,如果是内存共享,那么页表也是不一样的,但是都是映射到同一物理地址
3. 读出来的都是虚拟地址,看不到物理地址,你读的是栈上的地址吧,全局的就是绝对虚拟地址了

论坛徽章:
0
3 [报告]
发表于 2008-01-21 10:11 |只看该作者
感谢楼上兄弟的回答,我读的的确是栈上的地址。我还有疑问:初始化的MMU页表和进程的虚拟地址MVA是什么关系啊?是一个表吗?我感觉我真的糊涂了。。。ARM里根据不同进程的PID,会重建MVA,会不会把原来初始化的对应好的那部分页表内容给覆盖掉啊?请帮帮我吧,这方面有什么资料可查么

论坛徽章:
0
4 [报告]
发表于 2008-01-21 10:44 |只看该作者
你说的初始化的页表是内核自己使用的,进程的页表会在执行进程时(execve)建立,根据可执行文件的内容,分配相应的物理内存(不说延迟分配),然后把进程的页表更改相应的项,这样进程就有自己的页表了
请问MVA是什么的简称?
ULK吧,你可以浏览一下第2,8,9章,特别是第二章,虽然各体系结构有差别,细节上可能相差很大,但是总的来说是相似的,书上说的是X87的

论坛徽章:
0
5 [报告]
发表于 2008-01-21 12:59 |只看该作者
原来是内核和进程两套页表,感谢。。。
MVA是ARM中的,叫“转换后的虚拟地址”,是根据进程的PID将虚拟地址VA转换成MVA的,我理解是为了减少进程切换时更新页表的开支的:

if(VA < 32M)
    MVA = VA | (PID<<25);   //VA<32M,即PID*0x02000000作为该进程起始地址
else
    MVA = VA;               //VA>=32M

我的基础不好,以后多向你学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP