【补充】 关于*(mmu_tlb_base + (virtuladdr >> 20))的理解
来源:互联网 发布:数据线测试软件 编辑:程序博客网 时间:2024/06/03 22:40
转载地址 http://blog.csdn.net/czg13548930186
对于MVA到PA转换过程,以及描述符所扮演的角色,请看下图:
来看代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
我们根据上面可以得到:段描述符的地址=Translation base(高18位)-TTB bit[31-14]+Table index(低12位)-MVA bit[31-20]+00(低两位)不少人会以为*(mmu_tlb_base | virtuladdr>>18)才是正确的。
解释:
首先mmu_tlb_base是一个unsigned long *型,而virtuladdr是unsigned long型,位或操作会出错!
查阅资料可知,一级页表的地址TTB必须16KB对齐,且位[14:0]必为0!
所以我们用+
和|
是一样的。而我们的mmu_tlb_base是unsigned long*型的,
在32位中,mmu_tlb_base + 1 = mmu_tlb_base + 1*sizeof(unsigned long*)
=mmu_tlb_base + 4
所以我们mmu_tlb_base + (virtuladdr >> 20) = mmu_tlb_base +( (virtuladdr >> 20))* 4 = mmu_tlb_base +( (virtuladdr >> 20))<<2 = mmu_tlb_base + (virtuladdr >>18
实验验证:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
结果:
阅读全文
0 0
- 【补充】 关于*(mmu_tlb_base + (virtuladdr >> 20))的理解
- 【补充】 关于*(mmu_tlb_base + (virtuladdr >> 20))的理解
- 对于*(mmu_tbl_base)+virtuladdr>>20等的一点理解
- 嵌入式裸机开发学习:MMU代码中的virtuladdr >> 20 的个人理解
- 关于类成员不能访问实例成员的理解补充
- 关于_disable_logging的补充
- 关于接电话的补充
- 关于多线程的补充
- 关于编译的补充
- 关于移植的补充
- 关于耳机的补充
- 关于集合的补充
- 关于webview的补充
- 关于H264的补充
- 关于反射的补充
- 【补充】deferred.then()的理解
- #ngResource的理解和补充
- 关于参考帧中的x264_reference_update函数的补充及h->frames.unused[]的理解
- C语言预习指针
- java:Oracle(table的增删改查,data的增删改查) 转载备忘
- C++ 实现简单的链表操作
- 在js中使用createElement创建HTML对象和元素
- 如何在Altium designer 17.0中点击原理图中的元器件,同时选中PCB中该器件的封装高亮显示
- 【补充】 关于*(mmu_tlb_base + (virtuladdr >> 20))的理解
- 吴恩达加入医疗机器人公司Woebot,AlphaGo Zero问世,高性能完胜旧版 | 大数据24小时
- 金融科技&大数据产品推荐:恒丰银行实时智能决策引擎
- 第四范式胡时伟:AI的商业化才刚刚开始,谈“收割”尚早
- C++ const用法
- 金融科技&大数据产品推荐:恒丰银行家庭金融系统
- android studio手机连接本地服务器测试
- Gradle记录 运行到强制刷新依赖01
- 下载基因组注释gtf文件和下载参考基因组序列