专题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 ...
随机推荐
- LG3648 [APIO2014]序列分割
题意 你正在玩一个关于长度为 \(n\) 的非负整数序列的游戏.这个游戏中你需要把序列分成 \(k+1\) 个非空的块.为了得到 \(k+1\) 块,你需要重复下面的操作 \(k\) 次: 选择一个有 ...
- Cocoapods的操作
1.卸载Cocoapods命令: sudo gem uninstall cocoapods 2.安装Cocoapods的命令: >安装最新版本 sudo gem install cocoapod ...
- QtAV的编译方法
1--编译准备 QtAV的安装编译总指导说明:https://github.com/wang-bin/QtAV/wiki/Build-QtAV QtAV的源代码:https://github.com/ ...
- Oracle恢复drop误删除的表和建用户操作
一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: 1.从flash back里查询被删除的表 select * from r ...
- go基本数据类型与运算符
GO基本类型1.布尔(bool) 长度:1字节 取值范围:true,false 注意事项:不可用数字代表true或false2.整型(int/uint) 根据平台 肯能为32位或64位3. 8位整型: ...
- 源码编译安装ceph
标签(空格分隔): ceph,ceph安装,ceph运维 centos7系统,aarch64架构下安装最新版本的ceph(13.0.0),x86架构的环境无需修改脚本即可. 一,物理环境: 内核版本: ...
- PHP中的逻辑判断函数empty() isset() is_null() ==NULL ===NULL
1.empty() header("Content-type: text/html; charset=utf-8"); if(!empty($data)){ //empty() 未 ...
- kali 软件源 包含virtualbox所需头文件
# deb cdrom:[Debian GNU/Linux 7.0 _Kali_ - Official Snapshot i386 LIVE/INSTALL Binary 20130905-08:50 ...
- mysql 无意重启 [Note] /usr/sbin/mysqld: Normal shutdown
情况: 今早发现,昨天下午安装的4台mysql服务器,突然出现,由于在shell窗口 (root@localhost:mysql.sock) [(none)]> 190102 18:12:16 ...
- spring mvc helloworld 和表单功能、页面重定向
Spring MVC Hello World 例子 这里有个很好的教程:https://www.cnblogs.com/wormday/p/8435617.html 下面的例子说明了如何使用 Spri ...