记录
来源:互联网 发布:数据侠客行 新笔趣阁 编辑:程序博客网 时间:2024/05/01 01:14
第一步,你要知道页表的位置, 这就是所谓的页表址的概念. 该值由芯片自动从协处理器的c2寄存器中取出配置.
第二步,你要知道页表里的段的位置, 这是段基址的概念. 或者叫表内序号. 这个值是虑拟地址的bit[31:20]. 它和上一步的页表基址构成一级页表的地址项. 所以你应该明白了下面这一行的意思了吧.
pTT=(U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);
_MMUTT_STARTADDRESS就是所谓的页表基址. 由第一步可知,该值应该存到c2寄存器里,哪里存呢. 接着往下看,会发现MMU_SetTTBase(_MMUTT_STARTADDRESS)这个函数, 就是这个函数完成了该操作,由于要对c2寄存器操作,该函数要用汇编实现. 这里不分析了.
接着分析MMU_SetMTT.
第三步. 知道了页表里段的位置,下面只要知道每个地址在段内的偏移量,不就知道该地址了吗. 这个偏移量就是虚拟地址的bit[19:0].你可能要问,怎么这里没有看到对bit[19:0]的操作呢,因为MMU_SetMTT是实现虚拟地址到物理地址的映射,而这个映射是以段为单位的. 所以,只要用到bit[20]之后的位数.
那么addr是做什么的呢. 顾名思义,属性. 它定义了bit[11:0]的值, 该值在一线页表表项里不同的位代表不同的函义,比如bit[8:5]表示本段所在的域等等. 所以下面这一行
*pTT++=attr |(((paddrStart>>20)+i)<<20)
产生了物理地址的高12位,并设置了一组页表的表项.
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- 记录
- ODBC example
- Java Source 根据输入 ftp 地址 账号 密码 路径 读取提供路径下的文件
- 实时服务器框架开发(一)
- 自动创建Excel sheet页索引的办法
- jquery 循环读取 table中的内容
- 记录
- org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before
- linux下基于ncurses的扫雷程序
- 剖析MapReduce过程
- 托管和非托管转换新方法:Marshaling Library(zz)
- C#创建和打开word文件
- IText构造PDF文件
- WEB监控系列第三篇:graphite指南
- IOS常用动画效果