MMU理解的高手来帮帮小弟啊,别人看到后也会有所帮助
在软件设计与优化一书中,发现有两处疑问。。
疑问一:我怀疑是编书错误。
“一个L2粗页表有256个页表项,占用1KB的主存空间”
“一个L2细页表有1024个页表项,占用4KB的主存空间”
这有问题吧,第一句应该是占用4KB,后者应该是占用1KB吧
疑问二:不太理解的地方
“传递给函数的唯一参数是转换表的基地址,TTB地址必须与存储器的16KB边界对齐”
这个16KB边界对齐从而算来的???我隐约知道,但不太会清楚语言表达出来。呵呵
MS在看ARM的内存管理?
1、对32位系统而言,每个表项4字节,256项自然是1024字节,1024项自然是4096字节,不知道你怎么算的。
2、如果真的说得是ARM,我这样理解16K的来源:arm采用的是段式页表,按照VMSA规定,每个表项描述1MB空间,16KB可存放4K个表项,覆盖4GB虚拟地址空间。
非常谢谢 ls
对于第一点,我确实理解有错误
我之前竟然只这样理解的:
ARM MMU那章里有个LEVEL ONE FETCH框图
我看到Section 大小为1MB,我理所当然的认为对于Coarse page 肯定也是1MB,而corse page分为256个入口,我就当每个页表项占用4KB, 正好4KB * 256 = 1MB嘛
而对于您说的第二点,我不太了解了。
首先“按照VMSA规定,每个表项描述1MB空间,16KB可存放4K个表项,覆盖4GB虚拟地址空间。”
哪里规定有必须要4K个表项呢?
兄弟,参阅下下面两个博客:
http://hi.baidu.com/percy_place/blog/item/28d27ede970d3151cdbf1a11.html
http://hi.baidu.com/haijie0707/blog/item/e959058233b4f8dd9123d9a5.html
也许会对你有所帮助。
引用: 引用 3 楼 ialwaysgo 的回复:
而对于您说的第二点,我不太了解了。
首先“按照VMSA规定,每个表项描述1MB空间,16KB可存放4K个表项,覆盖4GB虚拟地址空间。”
哪里规定有必须要4K个表项呢?
没有人规定要有4K个表项,而是32位系统寻址空间是4GB,每个表项寻址1M,那就需要4K个表项,才能完整覆盖4GB寻址空间。
继续研究
现在是知道了MMU结构,但是对其还是不够了解。
呵呵,知道是这样,不知道为什么?
比如如何在嵌入式系统搭建中如何合理的使用MMU映射,如何管理各个任务区权限,
大侠们能再指点指点吗?
结合你的一些例子就更好啦。啊门