专题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 ...
随机推荐
- xlrd,xlwt读表格、写表格
转:http://www.jb51.net/article/60510.htm
- gulp 合格插件评判标准
官方插件列表: https://gulpjs.com/plugins/ 合格插件的判断标准 1. 不修改内容 如果一个插件一个文件都修改(无论是文案内容,文件路径),那么它就不是一个gulp ...
- 在C#获取麦克风输入的声音的波形图
怎么获取声音波动的频率,在网上找来一些这方面的资料: DirectX的 DirectSound http://zhidao.baidu.com/question/448587955.html http ...
- [Err] 1067 - Invalid default value for 'xxxTime'
下面是导入sql脚本的的局部脚本 `xxxTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 发现是NO_ZERO_IN_DATE,NO_Z ...
- 控制台执行CI方法
执行方法:进入到ci放入口文件目录 执行 php index.php 控制器 方法 #php index.php home index
- 2017中国大学生程序设计竞赛 - 女生专场 Deleting Edges(思维+最短路)
Deleting Edges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- Vue.js:条件与循环
ylbtech-Vue.js:条件与循环 1.返回顶部 1. Vue.js 条件与循环 条件判断 v-if 条件判断使用 v-if 指令: v-if 指令 在元素 和 template 中使用 v-i ...
- JCE无限制权限策略文件
JCE无限制权限策略文件,里面是对应jdk6和jdk7的文件 官网下载地址是 JDK6:http://www.oracle.com/technetwork/java/javase/downloads/ ...
- log4net 使用总结- (2)在ASP.NET MVC 中使用
log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二 ...
- pymysql简单链接示例
#!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/24 import pymysql username = input('username ...