专题1-MMU-lesson2-深入剖析地址转化
1、地址转化总体分析


level one fetch和level two fetch分为一级转换和二级转换。
由上图右边可以看出,首先通过TTB(Translation Table Base)寄存器找到转换表基地址,该表有4096项,然后用虚拟地址的[31:20]位来找该表里面的表项,再检查该表项最后两位如果为00,则无效转换,如果为01,则是粗页转换,为10为段转换,为11为细页转换。
关于转换表的简单描述
首先,转换表是存放在内存当中的;然后,这张表是由工程师来编写的,工程师然后把该表的首地址放到TTB中,然后把TTB的值写入cp15寄存器中的c2寄存器,那么在MMU工作的时候,会直接去cp15的c2寄存器当中去取该地址,那么就可以找到转换表的首地址了。
2、段转换方式
当找到转换表中的表项之后,会取出该表项的高12位,



3、细页转换
从转换表的表项中找到细页页表的基地址,然后从虚拟地址的[19:10]位来找到细页页表里面的表项,然后检测该表项的最后两位为00则无效,为01则找到大页基地址,然后用虚拟地址的[15:0]来找具体的表项,就是我们要找的物理内存;为10则找到小页基地址,然后用虚拟地址的[11:0]来找具体的表项,就是我们要找的物理内存,为11则找到极小页基地址,然后用虚拟地址的[9:0]来找具体的表项,就是我们要找的物理内存。

专题1-MMU-lesson2-深入剖析地址转化的更多相关文章
- 嵌入式Linux之我行——ARM MMU工作原理剖析【转】
转自:http://blog.chinaunix.net/uid-20698426-id-136197.html 一.MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时 ...
- C++学习010-将某个地址转化为指针
如果需要将某个具体的地址转化为指针,可以直接使用类型那个转换来是实现. 实例如下 int main() { void* pData = (void*)(0x004001); std::cout < ...
- 【硬核】MMU是如何完成地址翻译的
目录 1. 什么是虚拟内存? 2. 虚拟内存的作用 3. 虚拟内存与物理内存 3.1 CPU存取数据 3.2 物理地址常用术语 3.3 虚拟地址常用术语 3.4 页表常用术语 3.5 页命中/缺页 4 ...
- IP多播与NAT地址转化
IP多播 与单播相比,在一对多的通信中,多播可以大大减少网络资源.在互联网上进行多播就叫做IP多播,IP多播所传送的分组需要使用IP多播地址. 如果某台主机想要收到某个特定的多播分组,那么怎样才能是这 ...
- 深入剖析mmu地址转化
mmu(内存管理单元),是arm区别于单片机的标志之一,虚拟地址转化分为3种,常见的如下2种. 段式转化如下,由表像中的基地址加偏移地址,(细页转化跟段式转化类似,多了一个2级页表,把虚拟地址0-20 ...
- C 如何将输出的地址转化为十进制数
•需求 这两天在看内存对齐的相关问题,因此产生了一个,如何将地址转换为十进制数? 对于如下程序: void func() { int a = 10; printf("a 的地址为:%p\n& ...
- 将IP地址转化为整数
$ip = 'IP地址';echo $intip = sprintf('%u',ip2long($ip)); //转换为无符号整型echo long2ip($intip);//将整型转换为ip
- ip地址转化代码实例
/*@author: lgh@ * * */ #include <stdio.h> #include <string.h> #include <unistd.h> ...
- java实现根据高德地图API接口进行地址位置解析,将地址转化为经纬度
原创文章,转载请注明,欢迎评论和更改. 1,所需额外ar包,import net.sf.json.JSONObject; 2,完整源代码代码 package com.travel.util; impo ...
随机推荐
- Windows Server 2008用IIS部署FTP简述
1.安装IIS 2.在IIS中勾选FTP选项 3. 新建FTP站点
- c# 统计运行时间
long startTime = Environment.TickCount; long endTime = Environment.TickCount; long totalTime = endTi ...
- YY一下十年后的自己(转)
每到年底总是我最焦虑的时候,年龄越大情况越明显.可能越长大越是对 时光的流逝 更有感触,有感触之后就会胡思乱想.所以随手开始写下这篇文章. 人无远虑必有近忧.那么同学呀,你听说过安利么. 一直都有做总 ...
- 真正明白c语言二级指针
指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...
- 关于app集成支付宝应用内支付的问题总结
pem文件生成,将合作伙伴密钥复制到notepad++中,每45个字符回车,去除空格,头尾加上标题,文件需保存为无BOM的UTF8格式,就OK. 可以每行64个字符,共216个字符. 近来处理了 ...
- laravel修改命名空间中的App为各自项目的名称(个人喜好)
学习源头:https://blog.csdn.net/xx1129244705/article/details/77965618 laravel框架的应用默认命名空间是App,修改命名空间的可通过ap ...
- c#实现QQ群成员列表导出及邮件群发开篇
主题已迁移至:http://atiblogs.com/ ITO-神奇的程序员
- (转)pipe row的用法, Oracle split 函数写法.
本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...
- maven学习0 常用命令学习
mvn clean install -Dmaven.test.skip=truemaven的package与install命令区别: package是把jar打到本项目的target下,而instal ...
- Spring Cloud与分布式系统
本文不是讲解如何使用spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义. 背景 2008年以后,国内互联网行业飞速发展,我们对软件系统的需求已经不再是过去” ...