MyException - 我的异常网
当前位置:我的异常网» WinCE » 2008年最后一帖——了结MMU和cache(顺便纠正以前的

2008年最后一帖——了结MMU和cache(顺便纠正以前的异常)(2)

www.myexceptions.net  网友分享于:2013-03-12  浏览:42次


但是在eboot中使用 的映射就是使用OEMAddresstable来初始化页表,这是wince真正的虚实映射
说道这里OEMAddresstable的虚拟起始地址0x80000000是wince规定的还是本来ARM决定的?
我觉得这个虚拟地址是可以改变的,所以才会可以把物理地址和虚拟地址映射成相等的?
各位有什么看法,多多交流啊。








------解决方案--------------------
个人认为,虚拟内存和物理内存是否相等完全没有关系,ADS下没有操作系统,不需要那么复杂的保护操作,映射成相等可以方便使用,开启了MMU后的cache对系统性能提高不止一点,为的就在开启了MMU的情况下还能向使用物理地址一样使用寄存器地址。
------解决方案--------------------
The kernel creates two ranges of virtual addresses from this table: 

One region, from 0x80000000 to 0x9FFFFFFF, will have caching and buffering enabled. 
The other region, from 0xA0000000 to 0xBFFFFFFF, will have caching and buffering disabled. 

帮助文档中ARM Microprocessor这一章有说明,这个地址应该是ARM决定的,似乎是不可以随便改!
------解决方案--------------------
我还没看到,分还没回来都成乞丐了。
------解决方案--------------------
探讨
还有就是EBoot中的MMU 映射表的问题,我觉得跟ADS也没有什么本质上的差别,只是保障了不和 WinCE 操作系统冲突,关键的是 WinCE 的MMU,WinCE需要进行任务切换和设备访问保护,所以必须对设备的访问权限进行完全的管理,最明显的就是 WinCE 下面通常会使用 CACHE 地址和 非CACHE 地址。

------解决方案--------------------
0x80000000当然是CE的设计要求的,ARM架构没理由做这个限制。CE这样设计的目的是简化底层代码的开发。如果你仔细看wince设置页表的代码(在startup.s中),可以发现OEMAddresstable中相同的物理地址被映射了两遍,第一遍是cached address,第二遍是uncached address。
在一个有操作系统的平台上,使用虚拟地址有很多好处:一个是通过限制进程的可以访问地址空间把不同的进程隔离开,防止它们互相影响;另外一个是可以捕捉程序错误,比如说C/C++程序中很常见的一个错误是访问空指针的内容。访问空指针其实是访问地址零里的内容,在ARM架构中物理地址零是一个有效地址(否则系统无法启动),访问地址零不会引发错误;另一方面一般在C/C++应用程序中访问空指针基本上肯定是程序员的错误,这种错误使用物理地址无法捕捉。启用虚拟地址后,一般进程空间的虚拟地址零不会映射到任何物理页面,程序对空指针地址的访问就会触发Page Fault异常,导致操作系统把它终结。当然启用cache也是另外一个好处。

------解决方案--------------------
http://topic.csdn.net/u/20081217/11/f15fa8e3-6215-4f92-b294-17af5b9b38cb.html
上面这个帖已经结了。
这个帖也相关。都一样。
上次我说我的mboot,boot.bib里0x0开始的。(帮助回忆)
这几天调试新的板子,顺便输出一些函数的地址,发现它的值是0x0开头的,虽然开着MMU,也用地址映射表做了映射0x8开头。
所以 hhyh612 说的看起来是对的?!
如果这个值是boot.bib里影响的。那么你们的代码,在需要调用函数的时候得到一个虚地址,要转换(MMU干的)成物理地址,把代码加载。当关闭MMU前,需要代码做转换,把虚地址转成物理地址。
但是我的代码,在MMU打开的时候,本身函数值就是个物理地址,MMU要做转换吗?感觉就没必要了吧。
------解决方案--------------------
这个问题也一直弄的不是很清楚,趁着这个机会学习下.据我的理解,OEMAddresstable并不是一个完整的页表,它只把虚拟地址的一部分映射到物理地址.
系统为每一个进程都会维护一份页表,在进程切换的时候把不同的页表基地址传MMU.OEMAddresstable的作用是系统在想访问某个确认的物理地址的时候,可以很容易的找到它的虚拟地址,而不需要关心mmu里现在放的是哪个页表.
------解决方案--------------------
总结:填写好二级页表,把二级页表的首地址存放到一级页表的表项最后最后;根据OEMAddresstable初始化L1页表;把L1的转换表的基地址放到协处理器的c1的寄存器。启动MMU等功能即可。 
------
那本《Windows CE工程实践完全解析》中有讲到"二级页表的首地址存放到一级页表的表项最后"!
在第32、第61~第62页

文章评论

程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
每天工作4小时的程序员
每天工作4小时的程序员
我是如何打败拖延症的
我是如何打败拖延症的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
10个调试和排错的小建议
10个调试和排错的小建议
为什么程序员都是夜猫子
为什么程序员都是夜猫子
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
 程序员的样子
程序员的样子
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
一个程序员的时间管理
一个程序员的时间管理
那些争议最大的编程观点
那些争议最大的编程观点
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
代码女神横空出世
代码女神横空出世
旅行,写作,编程
旅行,写作,编程
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
鲜为人知的编程真相
鲜为人知的编程真相
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员和编码员之间的区别
程序员和编码员之间的区别
Java程序员必看电影
Java程序员必看电影
程序员必看的十大电影
程序员必看的十大电影
程序员的鄙视链
程序员的鄙视链
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
漫画:程序员的工作
漫画:程序员的工作
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
编程语言是女人
编程语言是女人
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员都该阅读的书
程序员都该阅读的书
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
中美印日四国程序员比较
中美印日四国程序员比较
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
我的丈夫是个程序员
我的丈夫是个程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
如何成为一名黑客
如何成为一名黑客
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有