linux内核(四)内存管理单元MMU
1,基本概念
一个程序运行时没必要全部都同时装入内存,只需要把当前需要运行的部分装入内存即可,这样就使得一个大程序可以在较小的内存中运行,也使得内存中可以同时装入更多的程序并发执行,从用户角度看,该系统拥有的内存容量比实际的内存容量大的多,这样的存储器称为虚拟存储器。虚拟存储器从逻辑上对内存容量进行了扩充,用户看到的大容量是虚的。
在没有使用虚拟存储器的机器上,地址被直接送到内存总线上,使具有相同地址的物理存储器被读写;而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到存储器管理单元MMU,把虚拟地址映射为物理地址。(即MMU把虚拟地址空间和物理地址空间给隔开了)
虚拟地址空间:大小由CPU的位数决定,例如在一个32位的CPU系统中,这个虚拟内存地址范围是0~0xFFFFFFFF (4G),这个地址范围称为虚拟地址空间。
虚拟地址:虚拟地址空间中的某一个地址我们称之为虚拟地址。
物理地址空间和物理地址就是对应实际的内存。
页表(Page Table):把虚拟内存转换为物理内存,一般有两种办法,其一用一个数学公式进行转换;另一个就是用表格存储虚拟地址对应的物理地址,这个表格就称为页表。页表有一个个条目(Entry)(条目也称为描述符)组成,每个条目存储了一段虚拟地址对应的物理地址及其访问权限,或者下一级页表的地址。我们以两级页表为例简单说一下 虚 到 实的转换过程:开始是页表基址寄存器(存了一级页表的基地址),这样就来到了一级页表,根据要找的虚拟地址找到一级页表中的条目,如果此条目是段描述符,则返回物理地址结束;如果是二级页表的描述符,则继续利用虚拟地址在 此二级也页表中找到条目,如果找到的条目是页描述符,则返回物理地址,结束。
单独说一下一级页表,32位CPU的虚拟地址空间为4GB,一级页表中使用了4096个描述符来表示这4GB空间,即每个描述符对应1MB的虚拟地址,这4096个描述符中存储了它各种对应的1MB物理空间的起始地址 或者 下一级页表的地址。
TLB(Translation Lookaside Buffer)转换检测缓冲区是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存。
CPU每次拿着虚拟内存去找物理地址,从概念上说,这个转换需要遍历页表,如果页表是二级页表,就需要2次内存访问才能拿个物理地址,读写数据还得访问一次。这一遍遍访问内存,遍历页表太慢。所以出现了TLB(常用的几十个虚拟地址与物理地址的对应表,当然满了会有算法去更新),CPU发出虚拟地址,MMU先访问TLB,如果有这个虚拟地址则直接用这个描述符进行地址转换和权限检查,没有再去遍历页表,找到描述符进行那俩工作,并把描述符填入TLB(TLB已满,用round-robin算法找到一个条目,覆盖它)。
Cache高速缓冲存储器,在主存和CPU通用寄存器间设置的一个高速的小存储器,,把正在执行的指令地址附近的指令或数据从主存中调入这个存储器,供CPU在一段时间内使用。启用Cache后,CPU读数据,如果Cache中有这个数据的复本则直接返回,否则从主存中读取。
TLB 和 Cache的都是一种缓存。
2,MMU
内存管理单元(Memory Management Unit)简称MMU,两个功能:虚拟地址到物理地址的映射;提供硬件机制的内存访问权限检查。
1)虚拟地址到物理地址的映射
现代的多用户多进程操作系统,通过MMU使每个用户进程都拥有自己独立的地址空间:地址映射功能使得各进程拥有“看起来”一样的地址空间。
例如WINDOWS操作系统将地址范围4M-2G划分为用户地址空间,进程A在地址0X400000(4M)映射了可执行文件,进程B同样在地址0X400000(4M)映射了可执行文件,如果A进程读地址0X400000,读到的是A的可执行文件映射到RAM的内容,而进程B读取地址0X400000时,则读到的是B的可执行文件映射到RAM的内容。
ARM的CPU上地址转换有3个概念:虚拟地址VA、变换后的虚拟地址MVA、物理地址PA。
- 没启动MMU时,CPU、cache、MMU、外设等所有部件使用的是物理地址;
- 启动MMU之后,CPU对外发出虚拟地址VA,VA被转换为MVA供cache、MMU使用,MVA在这里被转换为PA,最后使用PA读写实际的硬件设备(内部寄存器或外接设备)。
CPU核看到的、用到的只是虚拟地址VA。实际设备看不到VA和MVA,读写他们时使用的是物理地址PA。
2)提供硬件机制的内存访问权限检查
简单来说就是决定一块内存是否允许读,是否允许写。页表描述符的域(domain),描述符的AP位,CP15寄存器C3,CP15寄存器C1D R/S/A位。MMU根据这些值来进行权限检查。
《嵌入式Linux应用开发完全手册》
linux内核(四)内存管理单元MMU的更多相关文章
- 24小时学通Linux内核之内存管理方式
昨天分析的进程的代码让自己还在头昏目眩,脑子中这几天都是关于Linux内核的,对于自己出现的一些问题我会继续改正,希望和大家好好分享,共同进步.今天将会讲诉Linux如何追踪和管理用户空间进程的可用内 ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- 转 s3c2440硬件学习----内存管理单元MMU
本篇基本是韦东山书上的 一.内存管理单元MMU介绍 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访 ...
- Linux内核之内存管理
Linux内核之内存管理 Linux利用的是分段+分页单元把逻辑地址转换为物理地址; RAM的某些部分永久地分配给内核, 并用来存放内核代码以及静态内核数据结构; RAM的其余部分称动态内存(dyna ...
- 第七章 内存管理单元MMU介绍
7.1 内存管理单元MMU介绍 7.1.1 S3C2410/S3C2440 MMU特性 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查 特性: 与ARM V4兼容的映射长度.域.访问权 ...
- JZ2440 裸机驱动 第7章 内存管理单元MMU
本章目标: 了解虚拟地址和物理地址的关系: 掌握如何通过设置MMU来控制虚拟地址到物理地址的转化: 了解MMU的内存访问权限机制: 了解TLB.Cache.Write ...
- Linux内核之 内存管理
前面几篇介绍了进程的一些知识,从这篇开始介绍内存.文件.IO等知识,发现更不好写哈哈.但还是有必要记录下自己的所学所思.供后续翻阅,同时写作也是一个巩固的过程. 这些知识以前有文档涉及过,但是角度不同 ...
- 内存管理单元--MMU
现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍M ...
- 三、内存管理单元---MMU
3.1 MMU介绍 3.1.1 MMU 特性 内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...
随机推荐
- 基于redis的分布式锁实现方案--redisson
实例代码地址,请前往:https://gitee.com/GuoqingLee/distributed-seckill redis官方文档地址,请前往:http://www.redis.cn/topi ...
- hdu 1163
别人的代码开始自己不知道什么数论解法: ab*ab=(a*10+b)(a*10+b)=a^2*100+2ab*10+b^2 所以the root digital=(a+b)*(a+b): 而数论中的定 ...
- muduo总结
总结说的有的过大,算是对自己学习的一个总结.兴许会不断补充. 模型总结 muduo是基于非堵塞的IO和事件驱动的网络库. muduo的总体结构时one loop per thread+threadpo ...
- How to improve Java's I/O performance( 提升 java i/o 性能)
原文:http://www.javaworld.com/article/2077523/build-ci-sdlc/java-tip-26--how-to-improve-java-s-i-o-per ...
- Android 中View的绘制机制源代码分析 二
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/46842891 本篇文章接着上篇文章的内容来继续讨论View的绘制机制,上篇文章中我们主要解说 ...
- vi 调到第一行,或最后一行
用vi命令打开文件直接跳到最后一行的方法如下: :$ 跳到文件最后一行 :0或:1 跳到文件第一行 或 另外一组命令: gg 跳到文件第一行 Shift + g 跳到文件最后一行
- Javascript中的with用法
1.看例子 <script language="javascript"> function Lakers() { this.name = "kobe brya ...
- 微信小程序发送模板消息
微信小程序发送模板消息 标签(空格分隔): php 看小程序文档 [模板消息文档总览]:https://developers.weixin.qq.com/miniprogram/dev/framewo ...
- 关于spring和extjs对接的过程简述
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- Git 学习笔记(三)
我记得最初学习的时候我提到了使用版本控制软件的最大好处是让你可以永远后悔,那么如何吃后悔药呢?在项目过程中我们很有可能因为各种因素对我们的操作进行回滚,对于传统的版本控制系统来说,并不复杂,拿 SVN ...