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,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...
随机推荐
- WebService学习总结(6)——WebService常用接口
商业和贸易:1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSer ...
- UVA11752 The Super Powers
/* UVA11752 The Super Powers https://vjudge.net/contest/153365#problem/Y 数论 注意a^n=b要用除法求,并且求得的n比实际大1 ...
- uva 10003 Cutting Sticks 【区间dp】
题目:uva 10003 Cutting Sticks 题意:给出一根长度 l 的木棍,要截断从某些点,然后截断的花费是当前木棍的长度,求总的最小花费? 分析:典型的区间dp,事实上和石子归并是一样的 ...
- 多线程的join和interrupt
你可以在一个线程1里添加线程2对象thread的join方法来让线程1处于等待的状态 ,同时也可以调用thread.interrupt()来打断等待状态,此处注意 interrupt应在线程1开启st ...
- Android菜鸟笔记- 获取未安装的APK图标、版本号、包名、名称、是否安装、安装、打开
周末闲来无事,把Android的基础知识拿出来复习复习,今天主题是<获取未安装的APK图标.版本号.包名.名称.是否安装.跳转安装.打开> 一.获取APK图标 通常读取APK的图标能够用, ...
- 0x3A 博弈论之SG函数
博弈即玄学啊 (除了nim和二分图博弈什么都不会 算是学了下SG函数吧 这个东西是针对有向图游戏的,相当于把一个局面看作一个点,到达下个局面相当于建一条边 必胜态SG值为0 那么对于一个点,他的SG值 ...
- oracle性能检测sql语句
1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev",sum(decode(wait_Time,0,1,0)) & ...
- DB-MySQL:MySQL 序列使用
ylbtech-DB-MySQL:MySQL 序列使用 1.返回顶部 1. MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想 ...
- Ubuntu18.04修改Hostname
1. 设置新的hostnamesudo hostnamectl set-hostname newNameHere 2. 修改配置文件使hostname可以保存编辑这个文件: /etc/cloud/cl ...
- Vmware VM共享
打开虚拟机,设置,选项点击共享文件夹 点击启用,将电脑windows的目录添加过来 进入终端即可以进入