初学ARM,对页表的概念理解不好,想请教下:
页表的作用是将MVA转换成Physical Address。
我的疑问是:
1. MVA是在程序中所用到的地址么?如标号。
这样编程时就不用关心具体的Physical Address,只要在初始化时,编制好页表,解释出一定的映射关系就可以了吧?
2. 一级页表的基地址是Physical Address还是MVA?
3. 对于一级页表的建立:
比如我想把MVA的0x0映射到Physical Address的0x2400 0000,映射空间大小为1MB,如下操作正确么?
LDR $desc,=(MMU_STD_ACCESS + MMU_C + MMU_B)LDR $indx,=0x2400 0000
AND $indx,$indx,$desc
LDR $base,=(一级页表基地址)
STR $indx,[$base],#4
Yaoming Qin:
这东西我搞过一点点,写过一些汇编,不过一般没有这个需求,对于Linux,wince,这部分都在kernel里面做好了,一般客户是不用动的,请问你做这个的目的是什么
Denny%20Yang99373:
页表主要是操作系统用的,内存管理的一部分,要是不用OS,完全可以不管
就是用OS也不用自己创建,接口都是实现好的
我记得一级页表地址好像是物理地址,写在CP15某个寄存器里的
至于怎么建立页表可以看看LINUX下ioremap的底层实现
Yaoming Qin:
回复 Denny%20Yang99373:
如果不用OS,页表也是要设置的,因为MMU会根据页表来设置相应内存的cache和write buffer的属性,只是对于非OS或者具体点非高级OS的系统,一般MMU只会有一类映射,而不会像Linux那样,每个进程都有自己的虚拟内存空间。