处理器之MMU(三)

今天我们来看看嵌入式中的内存管理单元(MMU),它是现代处理器对内存进行高效管理的功能单元,操作系统利用内存管理单元能够实现虚拟内存和内存保护。我们先来看个有意思的问题,下面的程序运行两次后的输出是否完全相同?为什么呢?

我们先来分析下。理论上,不同进程在内存中的不同位置执行;因此,全局变量的地址是不同的。关系如下

我们来看看结果

我们看到两次运行的结果的地址是相同的,也就是说我们之前的分析是错误的。我们在开发中经常被遗忘的事实:1、应用程序开发时,面对的内存为虚拟内存;2、虚拟内存模式下使用的内存地址为虚拟地址;3、每一个进程拥有独立私有的虚拟地址空间。换句话说,虚拟内存是与实际物理内存无关的,它是一个假想的足够大的内存。那么我们来思考下,内存需求总量为 1G 的应用程序是否能够运行于硬件内存为 256M 的计算机呢?在现代肯定是支持的,通过虚拟内存来支持。虚拟内存的意义是能够支持多个大的内存需求量的进程同时运行于较小的物理内存中,如下

举个例子来说。我们在上小学时,老师都是将讲义和书上的内容搬到黑板上进行讲解。刚开始的时候黑板上啥都没有,空间很大,老师可以随意的写内容。但是随着时间的推移,在后半节的时候,这时黑板已经写满了内容。老师想要继续写,就得擦掉一些已经写过的内容了以便写新的内容。我们来看看虚拟内存的机制:a> 虚拟内存需要重新映射到物理内存;b> 虚拟地址映射到物理内存中的实地址;c> 每次只有进程的少量代码在物理内存中运行;d> 大部分进程代码位于存储器中。在虚拟内存管理中,它是以页式内存管理的。页式内存单位,指一定数量的内存(如 4K);虚拟内存和物理内存以页为单位管理;进程的活动页被载入内存时,记录地址的映射关系。关系如下

页式内存管理法将内存分为两个部分:(p,d)。p 指的是地址高位,页面号;d 指的是地址低位,页内偏移量。如下

我们是通过页映射表来进行物理地址和虚拟地址映射的。具体如下

它是进行 MMU 时,先是进行查找,根据查找到的对应关系然后进行对应的映射到虚拟内存的显示。那如果没有找到对应的关系呢?我们来看看具体的过程,如下

如果没找到的话,便从物理内存中换出闲置的页面,再更新页映射表进而插入物理内存中。最后再进行地址的映射到物理内存中进行显示。那么我们来思考下,这几种方式为何能提高电脑性能?1、更换主频更高的处理器(同系列);2、增加物理内存大小;3、更换 SSD 固态硬盘。第一种的话换一个更高的处理器,也就意味着处理速度更快了,因此电脑性能就提升了。第二中的话,物理内存越大,也就意味着可以不用进行页面的替换,这样效率自然就提升了。第三种的话,更换 SSD 固态硬盘,在内存的处理速度就更快了,因而效率就越高了。

原文地址:http://blog.51cto.com/12810168/2133980

时间: 2024-10-26 01:51:40

处理器之MMU(三)的相关文章

自己动手写处理器之第三阶段——教学版OpenMIPS处理器蓝图

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第十篇,我尽量每周四篇 从本章开始将一步一步地实现教学版OpenMIPS处理器.本章给出了教学版OpenMIPS的系统蓝图,首先介绍了系统的设计目标,其中详细说明了OpenMIPS处理器计划实现的5级流水线.3.2节给出了OpenMIPS处理器的接口示意图,及各个接口的作用.3.3节简单解释了各个源代码文件的作用.最后描述了OpenMIPS处理器的实现方法,读者将发现本书给出的实现方法与现有书籍的方法完全不同,更加易于理解.便于实践

第三十五天:Tiny4412驱动开发之配置MMU

MMU表示内存管理单元,负责虚拟内存映射到物理内存. 虚拟地址映射到物理地址的关键是构建映射表.MMU就是利用映射表格将虚拟地址转换成物理地址.虚拟地址在32系统中为4G,地址占4字节,如果映射表格中虚拟地址和物理地址是一一对应的关系,一条记录就占8字节,那么映射表就要32G.这明显是不合理的. 于是通过二级映射解决这个问题.地址共32位,把前12位作为基地址,后20位作为偏移量,将虚拟地址和物理地址作为的前12位一一对应,12位就是2的12次方为4k. 一条记录8字节,那么映射表格就只有32k

跟着韦老师学Linux学习笔记(三)-MMU

(1).MMU介绍 a.权限管理 不同地址空间的程序是无法相互访问的,否则会发生错误. b.地址映射 老师在视频中关于MMU讲解不是很多,要求也只是了解MMU这个概念就行了,可以参考书上或者下面这个文章了解MMU http://www.cnblogs.com/bigbear1385/p/5325344.html 1.  建立表格,就是建立虚拟地址到物理地址的映射 2.  把表格地址告诉MMU 3.  启动MMU (2).程序代码 首先我们看汇编代码,因为我们的主要程序都在汇编代码里面了. .te

三十三、Java图形化界面设计——布局管理器之null布局(空布局)

摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局. 操作方法: 1)       首先利用setLayout(null)语句将容器的布局设置为null布局(空布局). 2)       再调用组件的setBounds(int x, int y, int width,int

三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式为:从上到下,从左到右. l  组件放入容器的次序决定了它在容器中的位置. l  容器大小改变时,组件

三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件. 1.  CardLayout类的常用构造函数及方法 2.  使用CardLayout类提供的方法可以切换显

服务器的设计与实现(三)——FTP服务器之设计与实现

在实现了Http服务器之后,本人打算再实现一个Ftp服务器.由于Ftp协议与Http一样都位于应用层,所以实现原理也类似.在这里把实现的原理和源码分享给大家. 首先需要明确的是Ftp协议中涉及命令端口和数据端口,即每个客户端通过命令端口向服务器发送命令(切换目录.删除文件等),通过数据端口从服务器接收数据(目录列表.下载上传文件等).这就要求对每个连接都必须同时维护两个端口,如果使用类似于上一篇文章中的多路IO就会复杂很多,因此本文采用了类似Apache的多进程机制,即对每个连接创建一个单独的进

第三十四天:按键驱动与蜂鸣器驱动以及MMU

编写按键驱动的过程和编写LED灯的驱动类似.区别在于按键是在底板上的.要从底板的电路图开始看.   使用key为关键字查找电路图: 可以得知的信息:按键松开时候XEINT26为高电平.按下时候为底电平.所以要判断按键是否被按下,就要检测XEINT26的状态. 使用XEINT26为关键字,在核心板上查看其定义.找到下图: XEINT26在核心板上链接到GPX3_2上.然后就是去datasheet中查找GPX3_2的说明了. 按键为检测,GPX3CON置0,GPX3DAT置1,表示按键被按下.代码如

STL 源码剖析读书笔记三:序列式容器之 vector、list

1. STL 中的容器 容器,置物之所也.STL 容器即是将运用最广的一些数据结构实现出来.如下图所示: 上图以内缩方式来表达基层和衍生层的关系.所谓衍生,并非派生关系,而是内含关系.例如 heap 内含一个 vector,priority-queue 内含一个 heap.stack.queue都内含一个 deque,set/map/multimap/multiset 都内含一个 RB-tree,hash_x 都内含一个 hashtable. 2. 序列式容器之 vector 所谓序列式容器,其