今天我们来看看嵌入式中的内存管理单元(MMU),它是现代处理器对内存进行高效管理的功能单元,操作系统利用内存管理单元能够实现虚拟内存和内存保护。我们先来看个有意思的问题,下面的程序运行两次后的输出是否完全相同?为什么呢?
我们先来分析下。理论上,不同进程在内存中的不同位置执行;因此,全局变量的地址是不同的。关系如下
我们来看看结果
我们看到两次运行的结果的地址是相同的,也就是说我们之前的分析是错误的。我们在开发中经常被遗忘的事实:1、应用程序开发时,面对的内存为虚拟内存;2、虚拟内存模式下使用的内存地址为虚拟地址;3、每一个进程拥有独立私有的虚拟地址空间。换句话说,虚拟内存是与实际物理内存无关的,它是一个假想的足够大的内存。那么我们来思考下,内存需求总量为 1G 的应用程序是否能够运行于硬件内存为 256M 的计算机呢?在现代肯定是支持的,通过虚拟内存来支持。虚拟内存的意义是能够支持多个大的内存需求量的进程同时运行于较小的物理内存中,如下
举个例子来说。我们在上小学时,老师都是将讲义和书上的内容搬到黑板上进行讲解。刚开始的时候黑板上啥都没有,空间很大,老师可以随意的写内容。但是随着时间的推移,在后半节的时候,这时黑板已经写满了内容。老师想要继续写,就得擦掉一些已经写过的内容了以便写新的内容。我们来看看虚拟内存的机制:a> 虚拟内存需要重新映射到物理内存;b> 虚拟地址映射到物理内存中的实地址;c> 每次只有进程的少量代码在物理内存中运行;d> 大部分进程代码位于存储器中。在虚拟内存管理中,它是以页式内存管理的。页式内存单位,指一定数量的内存(如 4K);虚拟内存和物理内存以页为单位管理;进程的活动页被载入内存时,记录地址的映射关系。关系如下
页式内存管理法将内存分为两个部分:(p,d)。p 指的是地址高位,页面号;d 指的是地址低位,页内偏移量。如下
我们是通过页映射表来进行物理地址和虚拟地址映射的。具体如下
它是进行 MMU 时,先是进行查找,根据查找到的对应关系然后进行对应的映射到虚拟内存的显示。那如果没有找到对应的关系呢?我们来看看具体的过程,如下
如果没找到的话,便从物理内存中换出闲置的页面,再更新页映射表进而插入物理内存中。最后再进行地址的映射到物理内存中进行显示。那么我们来思考下,这几种方式为何能提高电脑性能?1、更换主频更高的处理器(同系列);2、增加物理内存大小;3、更换 SSD 固态硬盘。第一种的话换一个更高的处理器,也就意味着处理速度更快了,因此电脑性能就提升了。第二中的话,物理内存越大,也就意味着可以不用进行页面的替换,这样效率自然就提升了。第三种的话,更换 SSD 固态硬盘,在内存的处理速度就更快了,因而效率就越高了。