MMU段式映射(VA -> PA)过程分析
MMU:内存管理单元。
CPU寻址的方式:
未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx)。
使用MMU :CPU发出地址(VA) MMU接收CPU发来的地址 经过某种转换
变成实际的物理地址去寻址。
那么是MMU是如何实现VA到PA的转化的呢?
建立VA与PA的对应关系:
MMU有段描述符(1M)(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))
我们这里说段页表的建立。
比如32位CPU,4G的寻址空间可分为4094个段(4G/1MB)
所以可以建立4096个对应的关系而实际的内存肯定没到4G(VA-PA 可多对一)
所以首先要在内存中指定存放该对应表的其实位置(可通过CP15协处理器指定)
映射表的大概示意图如下
VA(0-4095) PA(高12位)
0 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
1 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
2 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
···
···
4094 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
4095 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
AP:AP权限为所有用户可读写 在多进程时使用 用来保护进程
DOMAIN:配合AP使用 权限管理
cacheable :C位 使能MMU缓存
bufferable :B位 使能MMU缓冲区
描述符:MMU使用段描述符(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))
以下是建立1MB映射的C语言描述:
phyaddr = 0x30000000;
viraddr = 0xa0000000;
*(mmu_ttb_base + (viraddr >> 20)) = ((phyaddr & 0xfff00000) | 低20位的属性描述);
VA到PA转化过程:
CPU发出VA:比如0xa0000123,转化过程如下图:
OK,到此,便得到了实际的物理地址!
MMU段式映射(VA -> PA)过程分析的更多相关文章
- MMU_段式映射
首先, 段式映射的示意图如下: 该例程有5个文件构成: head.s-------------入口程序 mmu.lds-----------连接文件 init.c---------------初始化文 ...
- 对MMU段式转换的理解
本文将详细介绍MMU段式转换的过程,并在文末附上一篇讲MMU比较详细的文章.具体什么是MMU,什么时段是转换就不在本文讲了,直接戳文末的链接. 首先,进行段式转换的条件.我们要拥有一个虚拟地址,还有一 ...
- 内存管理单元--MMU
现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍M ...
- MMU内存管理单元
arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...
- 硬件篇之MMU
<背景> MMU即内存管理单元(Memory Manage Unit),是一个与软件密切相关的硬件部件,也是理解linux等操作系统内核机制的最大障碍之一.可以说,不懂MMU使很多人一直停 ...
- MMU介绍【转】
转自:http://blog.csdn.net/martree/article/details/3321578 虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前 ...
- [转帖]MMU内存管理单元
MMU内存管理单元 https://www.cnblogs.com/alantu2018/p/9002309.html 之前对这一块一直不理解 最近学习了点 CPU time slice 以及 con ...
- ARMv7-A 架构下的MMU
ARM架构中MMU的作用主要就是将CPU发出的虚拟地址转换成为物理地址,从实现内核和用户程序和用户程序之间的虚拟地址空间隔离.MMU的主要组成为两部分,其一是内部的TLBs缓存:还有就是转换表装换单元 ...
- Linux内存管理 (2)页表的映射过程
专题:Linux内存管理专题 关键词:swapper_pd_dir.ARM PGD/PTE.Linux PGD/PTE.pgd_offset_k. Linux下的页表映射分为两种,一是Linux自身的 ...
随机推荐
- Go语言 channel 管道 阻塞 死锁 经典问题
建议阅读:14.2协程间的信道 问题:为什么代码1会报死锁的错误,而代码2不会报错? 代码1: package main import ( "fmt" ) func main() ...
- 【C#笔札】1 string类型(2)
4> Trim whitespace Trim 也是string的一个方法节点 C#例子如下: C#中有Trim,TrimEnd 和TrimStart三种Trim节点,其中后两者无需介绍. 如上 ...
- MySQL连接中出现大量的 init 状态问题
最怕的就是睡一觉醒来,系统出了问题. 大早系统无法登陆,以前没有经验的同学code的代码,竟然 try catch 没有记录异常日志信息. 查的问题一点头绪都没有,一直锁定在公司公共网关接口出了问题. ...
- ThinkPHP之MVC简析
MVC是一种设计模式.它强制性的使用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(Model).视图(View).控制器(Controller),它们各自处理自己的任务. 模 ...
- Qt事件系统基本概念
(转自:http://www.cnblogs.com/andy1987/p/3322059.html) 1. QT事件系统 Qt应用程序的消息处理是基于事件驱动的,程序的每个动作都是由某个事件所触发的 ...
- shell编程学习1
1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式. (2)我们可以使用shell和操作系统.uboot等软件系统进 ...
- Android中轻松使用线程
当你第一次启动一个Android程序的时候,一个被 称为"main"的线程就被自动创建了.它被称为主线程或者UI线程,它是非常重要的因为负责分发事件给对应的widget,还包含画 ...
- socket INADDR_ANY
linux下的socket INADDR_ANY表示的是一个服务器上所有的网卡(服务器可能不止一个网卡)多个本地ip地址都进行绑定端口号,进行侦听. 不光是多个网卡的问题. 见如下server lis ...
- 深入浅出Eclipse Modeling Framework (EMF)
Eclipse Modeling Framework (EMF),简单的说,就是Eclipse提供的一套建模框架,可以用EMF建立自己的UML模型,设计模型的XML格式或编写模型的java代码.EMF ...
- Python 多版本共存之pyenv
经常遇到这样的情况: 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性: 系统自带的 Python 是 2.x,自己需要 Python 3.x: 此时需要在系统中安装 ...