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,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...
随机推荐
- 【POJ】3122 Pie [二分查找]
题目地址:http://poj.org/problem?id=3122 二分每块饼的体积.为了保证精度,可以先二分半径的平方r*r,最后再乘以PI.要注意一点,要分的人数要包括自己,及f+1. #in ...
- Exchange EMC打开出错 解决
Exchange控制台打开出错如何解决 1.卸载win server功能中的winrm iis 2.重启 3.安装winrm iis 4.查看default web site 有没有绑定80端口,没有 ...
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法,即数据 ...
- zoj 3034 - The Bridges of Kolsberg
题目:在河两端有两排server,如今要把河两边同样的品牌型号的机器连起来.每一个电脑有个值, 每一个机器仅仅能与还有一台机器链接.而且不同的链接不交叉,如今要求链接的电脑总之最大. 分析:dp,最大 ...
- POJ 1944
明天补上... 这道题的思路确实很精致.考虑到连的边肯定不会是一个环,所以至少有一个断点.于是,可以枚举这个断点.断点一确定,那么连边的走向也就确定了.用D[i]表示由i开始可以到达的最远点即可.对于 ...
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)
这一次我们深入的学习一下JavaScript面向对象技术,在学习之前,必要的说明一下一些面向对象的一些术语. 这也是全部面对对象语言所拥有的共同点.有这样几个面向对象术语: 对象 ECMA-262把对 ...
- Yarn架构基本概况(二)
在概况(一)中,主要简单的对Yarn的情况作了简单的介绍,今天花一定时间在某些详细的模块上呈现下面Yarn的总体情况.帮助大家更好的理解Yarn. 1)ResourceManager 在Yarn的总体 ...
- iOS库--.a与.framework
一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的差别? 静态库:链接时完整地拷贝至可运行文件里.被多次使用就有多份冗余拷贝. 动态库:链接时不复制.程序执行时由系 ...
- 【UML】UML世界的构成
UML概述 全名:Unified Modeling Language 中文名:统一建模语言 发展历程:"始于1997年一个OMG标准.它是一个支持模型化和软件系统开发的图形化语言,为软件开发 ...
- MySQL官方文档
http://dev.mysql.com/doc/refman/5.7/en/index.html 没有比这更好的MySQL文档了,省的去买书了