精华内容
下载资源
问答
  • arm的内存管理单元手册,适合想要了解arm内存管理单元详细信息的同学
  • 摘要:内存管理单元是体系结构中少数与操作系统进行直接交互的接口之一,其模拟模型的执行效率和扩展能力在全系统模拟环境中尤为重要。本文介绍了SimSoc 全系统模拟框架中内存管理单元的设计思路和基本实现,基于...
  • 内存管理单元(Memory Management Unit ) 内存管理单元是在CPU内部 内存管理单元的作用: 虚拟地址到物理地址映射 存储器访问权限控制 高速缓存支持 以下出自:...

    内存管理单元(Memory Management Unit )

    内存管理单元是在CPU内部

    内存管理单元的作用:
    虚拟地址到物理地址映射
    存储器访问权限控制
    高速缓存支持

    以下出自:https://blog.csdn.net/yetaibing1990/article/details/88344416
    如果CPU没有MMU、,或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址。
    在这里插入图片描述
    如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示。
    在这里插入图片描述

    内存控制器(MEMORY CONTROLLER)

    内存控制器是在CPU外部

    内存控制器的作用:
    为外部存储器存储提供内存控制信号

    展开全文
  • 关于MMU内存管理单元的原理介绍,我自己写的文档,自认为写得很详细了。内容包括MMU的相关概念介绍,MMU工作流程图,MMU地址映射机制。
  • 内存管理单元简要介绍

    千次阅读 2017-06-06 11:43:17
    1 内存管理单元(MMU)基本概念 现代处理器中对内存进行高效管理的功能单元 操作系统利用内存管理单元能够实现 虚拟内存 内存保护 在嵌入式系统中通常不会使用虚拟内存这一功能,因为它会使操作系统的实时性更具不...

    1 内存管理单元(MMU)基本概念

    • 现代处理器中对内存进行高效管理的功能单元
    • 操作系统利用内存管理单元能够实现
      • 虚拟内存
      • 内存保护
    • 在嵌入式系统中通常不会使用虚拟内存这一功能,因为它会使操作系统的实时性更具不确定性。还有另一个原因就是,嵌入式系统的外部存储空间通常很小,且没有硬盘空间用做交换分区。

    2 有意思的问题

    这里写图片描述

    这里写图片描述

    理论上,不同进程在内存中的不同位置执行;因此,全局变量的地址不同。实际上,物理地址不同,虚拟地址却是相同的。

    经常被遗忘的事实

    • 应用程序开发时,面对的内存为虚拟内存
    • 虚拟内存模式下使用的内存为虚拟内存
    • 每一个进程拥有独立私有的虚拟地址空间
    • 虚拟内存与实际物理内存无关,是一个假想的足够大的内存。

    思考:内存需求量为1G的应用程序是否能够运行于硬件内存为256M的计算机?

    3 虚拟内存的意义

    虚拟内存能够支持多个大内存需求量的进程同时运行于较小的物理内存中。

    这里写图片描述

    4 虚拟内存机制

    • 虚拟内存需要重新映射到物理内存
    • 虚拟地址映射到物理内存中的实地址
    • 每次只有进程的少量代码在物理内存中运行
    • 大部分进程代码位于存储器中

    5 页式内存管理

    • 页是内存单位,指一定数量的内存(如:4K)
    • 虚拟内存和物理内存以页为单位管理
    • 进程的活动页被载入内存时,记录页地址的映射关系
      这里写图片描述

    • 页式管理法将内存分为两个部分:(p, d)

      • p-地址高位,页面号
      • d-地址低位,页内偏移量
        这里写图片描述

    页式内存管理示意图

    这里写图片描述

    页式内存管理流程图

    这里写图片描述

    思考一下:以下几种方式为什么能够提高电脑性能?

    • 更换主频更高的处理器(同系列)
    • 增加物理内存大小
    • 更换SSD固态硬盘

    修改记录


    时间动作
    2017.6.6首次上传

    参考资料


    唐老师 — 狄泰软件学院 — 十二月提升计划

    李云 — 《专业嵌入式软件开发 全面走向高质量编程》

    展开全文
  • S3C2410内存管理单元MMU基础实验
  • 包括:内存管理单元MMU的作用,虚拟内存与物理内存之间的映射方式,页表的概念,高速缓存(Cache)的作用,物理内存与高速缓存之间的映射关系等。当然,想要深入了解,本文并不适合,本文只是从原理上,讲述以上几者...

    学习交流加

    • 个人qq:
      1126137994
    • 个人微信:
      liu1126137994
    • 学习交流资源分享qq群:
      962535112

    上一篇文章学习了中断的概念与意义,以及中断的应用-断点调试原理。点击链接复习上一篇文章:中断的概念与意义

    本片文章继续学习处理器相关的知识-内存管理。包括:内存管理单元MMU的作用,虚拟内存与物理内存之间的映射方式,页表的概念,高速缓存(Cache)的作用,物理内存与高速缓存之间的映射关系等。当然,想要深入了解,本文并不适合,本文只是从原理上,讲述以上几者之间的关系。

    1、内存管理单元MMU

    这里假设大家了解虚拟内存的由来。参考《深入理解计算机系统》讲虚拟内存的章节

    实际上我们写的程序,都是面向虚拟内存的。我们在程序中写的变量的地址,实际上是虚拟内存中的地址,当CPU想要访问该地址的时候,内存管理单元MMU会将该虚拟地址翻译成真实的物理地址,然后CPU就去真实的物理地址处取得数据。

    这里说的虚拟地址,是指虚拟地址空间中地址。这里我们说的虚拟地址空间,实际上是在磁盘上的一块空间(常见的是4G的进程虚拟地址空间)。具体这4G的虚拟地址空间的来龙去脉,参考《深入理解计算机系统》第九章。

    MMU:内存管理单元。它是一个硬件,不是软件。它用于将虚拟地址翻译成实际的物理内存地址。同时它还可以将特定的内存块设置成不同的读写属性,进而实现内存保护。注意,MMU是硬件管理,不是软件实现内存管理。

    总结来说,MMU能实现以下功能:

    • 虚拟内存。有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序。为了使用虚拟内存,操作系统通常要设置一个交换区(通常在硬盘上),通过将内存中不活跃的数据与指令放到交换区,以腾出物理内存来为其他程序服务。
    • 内存保护。通过这一功能,可以将特定的内存块设置为读、写或者可执行的属性。比如将不可变的数据或者代码设为只读的,这样可以防止被恶意串改。

    1.1、虚拟内存

    进程的概念大家都知道。

    每一个进程都独立的运行在自己的虚拟地址空间。为了理解这一个概念。我们可以看一个而简单的例子:

    看一下下面的代码:
    main.c

    #include <stdio.h>
    #include <stdlib.h>
    
    int g_int = 1;
    int main() {
    	printf("g_int = %d\n",g_int);
    	printf("&g_int = %d\n",&g_int);
    
    	system("pause");//此处程序会停止执行,不会执行到return 0
    	return 0;
    }
    

    如果我同时运行该程序两次。打印结果会是一样么?答案是结果肯定一样,运行结果都为:
    在这里插入图片描述

    当然,这是在我的计算机上,在你的计算机上g_int地址可能不一样,但是同时运行该程序两次,结果肯定是一样的。其实这个答案很多人都知道是一样的,初学者都知道。但是初学者说不清楚是为什么。

    • 分析

    这个进程运行两份实例的时候。在物理内存中,实际上是以下分布情况:

    进程1和进程2 位于不同的地址。但是我们程序打印的g_int全局变量的地址值,是一样的。

    这里就引入了虚拟内存的概念。我们写程序,面向的是虚拟地址空间。写的程序的内容,都可以看成是在虚拟地址空间中运行(实际上最终是将虚拟地址空间映射到了物理地址空间)。如下图:

    在这里插入图片描述

    以上只是简图。

    我们可以看到。main.o可执行程序,运行两份实例时,相当于两个进程。这两个进程都有自己独立的虚拟地址空间。然后将虚拟地址空间里的代码数据映射到内存中,从而被CPU执行与处理。在物理内存中,g_int这个全局变量的物理地址确实不同。但是在虚拟内存中,由于进程1与进程2的虚拟地址空间完全一样(同一个可执行程序代码),那么g_int地址,实际上就是一样的。

    CPU在执行指令与数据时,获得的是虚拟内存的地址。但是CPU只能去物理内存寻址。此时,MMU就派上用场了。MMU负责,将虚拟地址,翻译成,真正运行时的物理地址。

    MMU是如何将虚拟地址翻译成物理地址的,这个后面讲。现在先要了解一下交换区的概念。

    • 交换区: 实际上就是一块磁盘空间(硬盘空间)。虚拟内存与物理内存映射的时候,是将虚拟内存的代码放到交换区中,以后在CPU想要执行相关的指令或者数据时,如果内存中没有,先去交换区将需要的指令与数据映射到物理内存,然后CPU再执行。

    虚拟内存与交换取的这种概念,实现了大内存需求量的(多个)进程,能够(同时)运行在较小的物理内存中。如下图所示:

    在这里插入图片描述

    上图中,说的是进程的局部代码在物理内存中运行。是因为程序具有局部性原则,所以在某一段很小的时间段内,只有很少一部分代码会被CPU执行。具体可以参考下一篇文章。

    到这里,我们应该大致明白了虚拟内存的作用与简单机制。还剩下MMU如何翻译虚拟地址为物理地址的,这放到最后讲解。现在先总结一下虚拟内存机制:

    • 虚拟内存需要重新映射到物理内存
    • 虚拟地址映射到物理地址中的实际地址
    • 每次只有进程的少部分代码会在物理内存中运行
    • 大部分代码依然位于磁盘中(存储器硬盘)

    1.2、 页式内存管理

    上一节笼统的介绍了虚拟内存的概念。接下来学习内存管理中的一种方式:页式内存管理。
    页式内存管理中我们需要了解:

    • 页的概念
    • 页表的概念
    • 缺页的概念与页命中的概念
    • 分配页面
    • 程序的局部性原则

    1.21 页的概念

    由1.1的内容,我们知道了交换区。我们知道交换区里面存放的是大部分的可执行代码与数据。而物理内存中,执行的是少部分的可执行代码与数据。那么当物理内存中的代码与数据执行完需要执行接下来的代码,而刚好接下来的代码还在交换区中没有映射到物理内存(这称为缺页,后面会讲),那么此时就需要从交换区获取程序的代码,将它拿到物理内存执行。那么一次拿多少代码过来呢?这是一个问题!

    为了CPU的高效执行以及方便的内存管理(详细原因见以后的文章),每次需要拿一个页的代码。这个页,指的是一段连续的存储空间(常见的是4Kb),也叫作块。假设页的大小为P。在虚拟内存中,叫做虚拟页(VP)。从虚拟内存拿了一个页的代码要放到物理内存,那么自然物理内存也得有一个刚好一般大小的页才能存放虚拟页的代码。物理内存中的页叫做物理页(PP)

    在任何时刻,虚拟页都是以下三种状态中的一种:

    • 未分配的:VM系统还未分配的页(或者未创建)。未分配的页还没有任何数据与代码与他们相关联,因此也就不占用任何磁盘。
    • 缓存的: 当前已缓存在物理内存中的已分配页
    • 未缓存的:未缓存在物理内存中的已分配页

    下图展示了一个8个虚拟页的小虚拟内存。其中:虚拟页0和3还没有被分配,因此在磁盘上还不存在。虚拟页1、4、 6被缓存在物理内存中。虚拟页2、 5、 7已经被分配,但是还没有缓存到物理内存中去执行。

    在这里插入图片描述

    1.22 页表的概念

    1.21节用到了缓存这个词。这里假设大家都理解缓存的概念。

    虚拟内存中的一些虚拟页是缓存在物理内存中被执行的。理所应当,应该有一种机制,来判断虚拟页,是否被缓存在了物理内存中的某个物理页上。如果不命中(需要一个页的代码,但是这个页未缓存在物理内存中),系统还必须知道这个虚拟页存放在磁盘上的哪个位置,从而在物理内存中选择一个空闲页或者替换一个牺牲页,并将需要的虚拟页从磁盘复制到物理内存中。

    这些功能,是由软硬件结合完成的。 包括操作系统软件,MMU中的地址翻译硬件,和一个存放在物理内存中的页表的数据结构。

    上一节说将虚拟页映射到物理页,实际上就是MMU地址翻译硬件将一个虚拟地址翻译成物理地址时,都会去读取页表的内容。操作系统负责维护页表的内容,以及在磁盘与物理内存之间来回传送页。

    下图是一个页表的基本组织结构(实际上不止那些内容):

    如上图所示:

    页表实际上就是一个数组。这个数组存放的是一个称为页表条目(PTE)的结构。虚拟地址空间的每一个页在页表中,都有一个对应的页表条目(PTE)。虚拟页地址(首地址)翻译的时候就是查询的各个虚拟页在页表中的PTE,从而进行地址翻译的。

    现在假设每一个PTE都有一个有效位和一个n位字段的地址。其中

    • 有效位:表示对应的虚拟页是否缓存在了物理内存中。0表示未缓存。1表示已缓存。
    • n位地址字段:如果未缓存(有效字段为0),n位地址字段不为空的话,这个n位地址字段就表示该虚拟页在磁盘上的起始的位置。如果这个n位字段为空,那么就说明该虚拟页未分配。如果已缓存(有效字段为1),n位地址字段肯定不为空,它表示该虚拟页在物理内存中的起始地址。

    综上分析,就得知,上图中:四个虚拟页VP1 , VP2, VP4 , VP7 是被缓存在物理内存中。 两个虚拟页VP0, VP5还未被分配。但是剩下的虚拟页VP3 ,VP6已经被分配了,但是还没有缓存到物理内存中去执行。

    注意:任意的物理页,都可以缓存任意的虚拟页。(因为物理内存是全相联的)

    1.23 页命中

    考虑下图的情形:

    假设现在CPU想读取VP2页面中的某一个字节的内容。会发生什么呢?

    当CPU得到一个地址vaddr想要访问它(这个addr就是上面想要访问的某一个字节的地址),通过后面会学习的MMU地址翻译硬件,将虚拟地址addr作为索引定位到页表的PTE条目中的PTE2(这里假设是PTE2),从内存中去读到PTE2的有效位为1,说明该虚拟页面已经被缓存了,所以CPU使用该PTE2条目中的物理内存地址(这个物理内存地址是PP1中的起始地址)构造出vaddr的物理地址paddr(这个地址是PP1页面起始地址或后面的某一个地址)。然后CPU就会去paddr这个物理内存地址去取数据。这种情况,就是也命中。

    实际上,上面的VP2的起始地址与paddr地址,很类似于内存的分段机制(X86以前就是分段机制),CPU访问内存的地址是“段地址偏移地址”或者叫做“CS:IP”。而我们现在学习的是分页机制,他们都是一种内存管理机制。

    1.24 缺页

    什么是缺页?

    考虑以下图示情形:

    当CPU想访问VP3页面中的某一个字节。会发生什么情况?

    由1.23小节的分析知,当地址翻译硬件MMU找到了PTE3后,发现有效位为0,则说明VP3并未缓存在物理内存中,并且触发一个缺页异常。缺页异常调用内核中的缺页异常处理程序,该程序会在物理内存中查询是否有空闲页面。如果物理内存中有空闲页面,则将VP3页面的内容从磁盘中复制到(映射)物理内存中的空闲页面。如果物理内存中没有空闲页面,则缺页异常处理程序就选择一个牺牲页,在此例中就是存放在PP3中的VP4。如果VP4已经被修改了,那么内核就会将它复制回磁盘。

    然后此时因为VP3已经在物理内存中被缓存了,就需要将页表更新,也就是更新PTE3。

    随后缺页异常处理程序返回。它会重新启动导致缺页的指令,该指令会重新将刚刚导致缺页的虚拟地址发送到MMU硬件翻译,但是此时,因为VP3已经被缓存,所以会页命中。

    下图是在经过了缺页后,我们的示例页表的状态:

    • 以上有一个过程是替换页面的过程,其中包含一个页面调度算法。这个以后会学习。

    1.25 分配页面

    当你在程序中调用malloc或者new分配内存时,发生了什么?调用malloc后,会在虚拟内存中分配页面。(注意malloc分配的内存时虚拟内存,当CPU访问的时候,首先肯定会发生缺页,然后再将该页缓存到物理内存中)

    如下图所示:
    本身没有VP5这个虚拟页面,现在malloc后,新分配了一个虚拟页面VP5。

    分配好VP5这个虚拟页面后,还需要更新PTE条目,使得PTE5指向VP5。

    1.26 程序的局部性原则

    虚拟内存这种机制会有什么问题?经常缺页会不会导致程序的执行效率低下?

    实际上,虽然会产生不命中现象,但是虚拟内存机制工作的很好。这主要与程序局部性原则有关!!!什么是程序的局部性?

    尽管在程序整个运行的生命周期,引用的不同的页面总数可能会超过物理内存的大小,但是局部性原则保证了在任意时刻程序将趋向于在一个较小的活动页面集合上工作。 这个集合成为工作集或者常驻集合。在最开始,也就是将工作集页面调度到物理内存中之后,接下来对这个工作集的引用将导致页命中,而不会产生额外的磁盘流量。

    上面看似很完美,但是也有可能会出现这样一种情况:工作集的大小超过了物理内存的大小!! 此时,页面会不停的换入换出。这种状态叫做抖动!!!

    当然,现在的计算机的物理内存的大小都非常大,一般不会出现抖动的现象!!!

    1.3 虚拟内存作为内存管理工具

    虚拟内存为什么说是一种内存管理工具?

    虚拟内存大大地简化了内存管理,并提供了一种自然的保护内存的方法。

    到目前为止,我们都假设有一个单独的页表,将一个虚拟地址空间映射到物理地址空间。实际上,操作系统为每一个进程提供了一个独立的页表,因而也就是一个独立的虚拟地址空间。如下图:

    注意:多个虚拟页面,可以映射到同一个共享物理页面上。

    按需页面调度和独立的虚拟地址空间的结合,对系统中内存的使用和管理产生了深远的影响!!!如下:

    • 简化链接。
    • 简化加载
    • 简化共享
    • 简化内存分配

    具体参考CSAPP:9.4节内容。

    1.4、虚拟内存作为内存保护工具

    上一节学习了虚拟内存作为内存管理工具。

    其实虚拟内存还可以作为内存保护工具。如何做到?

    想一想,CPU在访问一个虚拟内存页面时,需要读取页表条目中的PTE条目。如果在PTE条目中加一些额外的许可位来控制对虚拟内存的访问,当CPU读到相应的许可位,就可以知道该虚拟内存是否可读或者可写,或者可执行? 这样看来我们的页表就要变化一下,就如下图所示:

    上图中:

    • SUP表示进程是否必须运行在内核模式(超级用户)下才能访问该页。
    • READ表示是否可读
    • WRITE表示是否可写

    如果一条指令违反了这些许可条件,那么CPU就会触发一个一般保护故障,将控制传递给一个内核中的异常处理程序。Linux shell 一般将这种异常报告为“段错误(segmentation fault)”

    2、地址翻译

    上面一直在说MMU通过读取页表的PTE将虚拟地址翻译成物理地址。到底是如何翻译的?

    如下图,展示了MMU是如何翻译地址的:

    看到这么复杂的图,不要害怕!!! 下面讲解很容易懂!

    • CPU中有一个控制寄存器,页表基址寄存器(PTBR)指向当前页表。
    • n位的虚拟地址,包含两个部分:虚拟页面偏移VPO(p位)与虚拟页号VPN(n-p位)
    • MMU利用虚拟内存的高n-p位VPN作为索引找到页表的对应的PTE条目,然后获取PTE条目对应的物理页号PPN
    • 然后将PPN与VPO串联连接起来,就得到了实际的物理地址。(实际上就是PPN左移p位然后加上VPO,VPO=PPO)

    到这里实际上我们已经更加的将这种地址串联与X86处理器中的分段机制很像。X86-16位的分段机制 也是将段地址CS左移4位然后与偏移地址IP相加,得到最终的物理地址。这是不是与上面的分页机制的地址翻译过程很像? 实际上它们一个是实模式,一个是保护模式而已!

    MMU的地址翻译过程是不是很简单?如果不理解,就反复看,就理解了!!!

    3、总结

    下面来总结一下,分页机制中,CPU获得一个虚拟地址后,有哪些步骤需要做:

    本片文章,我学会了:

    • 虚拟内存的概念与交换区的概念

    • MMU的作用

    • 虚拟内存机制的意义

      • 虚拟内存作为内存管理工具
      • 虚拟内存作为内存保护工具
    • 页表的概念

    • 页命中与缺页

    • 程序的局部性在虚拟内存中的作用

    • MMU的地址翻译过程

    本人积累了无数的技术电子书籍与各类技术的视频教程,可以加好友共同探讨学习交流。
    学习探讨加个人:
    qq:1126137994
    微信:liu1126137994

    展开全文
  • arm内存管理单元

    2015-04-08 16:13:35
    为了更好的学习嵌入式系统,为了更好的学习linux,理解操作系统
  • x86内存管理单元的简介,具有权威性,大家快下载啊!
  • 内存管理单元--MMU

    千次阅读 2013-08-12 15:19:54
    现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍MMU的作用。首先引入两个概念,虚拟地址和物理地址。...

    现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍MMU的作用。

    首先引入两个概念,虚拟地址和物理地址。如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。

    图 17.5. 物理地址

    物理地址

    如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将VA映射成PA,如下图所示。

    图 17.6. 虚拟地址

    虚拟地址

    如果是32位处理器,则内地址总线是32位的,与CPU执行单元相连(图中只是示意性地画了4条地址线),而经过MMU转换之后的外地址总线则不一定是32位的。也就是说,虚拟地址空间和物理地址空间是独立的,32位处理器的虚拟地址空间是4GB,而物理地址空间既可以大于也可以小于4GB。

    MMU将VA映射到PA是以页(Page)为单位的,32位处理器的页尺寸通常是4KB。例如,MMU可以通过一个映射项将VA的一页0xb7001000~0xb7001fff映射到PA的一页0x2000~0x2fff,如果CPU执行单元要访问虚拟地址0xb7001008,则实际访问到的物理地址是0x2008。物理内存中的页称为物理页面或者页帧(Page Frame)。虚拟内存的哪个页面映射到物理内存的哪个页帧是通过页表(Page Table)来描述的,页表保存在物理内存中,MMU会查找页表来确定一个VA应该映射到什么PA。

    操作系统和MMU是这样配合的:

    1. 操作系统在初始化或分配、释放内存时会执行一些指令在物理内存中填写页表,然后用指令设置MMU,告诉MMU页表在物理内存中的什么位置。

    2. 设置好之后,CPU每次执行访问内存的指令都会自动引发MMU做查表和地址转换操作,地址转换操作由硬件自动完成,不需要用指令控制MMU去做。

    我们在程序中使用的变量和函数都有各自的地址,程序被编译后,这些地址就成了指令中的地址,指令中的地址被CPU解释执行,就成了CPU执行单元发出的内存地址,所以在启用MMU的情况下,程序中使用的地址都是虚拟地址,都会引发MMU做查表和地址转换操作。那为什么要设计这么复杂的内存管理机制呢?多了一层VA到PA的转换到底换来了什么好处?All problems in computer science can be solved by another level of indirection.还记得这句话吗?多了一层间接必然是为了解决什么问题的,等讲完了必要的预备知识之后,将在第 5 节 “虚拟内存管理”讨论虚拟内存管理机制的作用。

    MMU除了做地址转换之外,还提供内存保护机制。各种体系结构都有用户模式(User Mode)和特权模式(Privileged Mode)之分,操作系统可以在页表中设置每个内存页面的访问权限,有些页面不允许访问,有些页面只有在CPU处于特权模式时才允许访问,有些页面在用户模式和特权模式都可以访问,访问权限又分为可读、可写和可执行三种。这样设定好之后,当CPU要访问一个VA时,MMU会检查CPU当前处于用户模式还是特权模式,访问内存的目的是读数据、写数据还是取指令,如果和操作系统设定的页面权限相符,就允许访问,把它转换成PA,否则不允许访问,产生一个异常(Exception)。异常的处理过程和中断类似,不同的是中断由外部设备产生而异常由CPU内部产生,中断产生的原因和CPU当前执行的指令无关,而异常的产生就是由于CPU当前执行的指令出了问题,例如访问内存的指令被MMU检查出权限错误,除法指令的除数为0等都会产生异常。

    图 17.7. 处理器模式

    处理器模式

    通常操作系统把虚拟地址空间划分为用户空间和内核空间,例如x86平台的Linux系统虚拟地址空间是0x00000000~0xffffffff,前3GB(0x00000000~0xbfffffff)是用户空间,后1GB(0xc0000000~0xffffffff)是内核空间。用户程序加载到用户空间,在用户模式下执行,不能访问内核中的数据,也不能跳转到内核代码中执行。这样可以保护内核,如果一个进程访问了非法地址,顶多这一个进程崩溃,而不会影响到内核和整个系统的稳定性。CPU在产生中断或异常时不仅会跳转到中断或异常服务程序,还会自动切换模式,从用户模式切换到特权模式,因此从中断或异常服务程序可以跳转到内核代码中执行。事实上,整个内核就是由各种中断和异常处理程序组成的。总结一下:在正常情况下处理器在用户模式执行用户程序,在中断或异常情况下处理器切换到特权模式执行内核程序,处理完中断或异常之后再返回用户模式继续执行用户程序。

    段错误我们已经遇到过很多次了,它是这样产生的:

    1. 用户程序要访问的一个VA,经MMU检查无权访问。

    2. MMU产生一个异常,CPU从用户模式切换到特权模式,跳转到内核代码中执行异常服务程序。

    3. 内核把这个异常解释为段错误,把引发异常的进程终止掉。

    展开全文
  • 内存管理单元-MMU

    千次阅读 2014-02-11 11:29:32
    现代操作系统及CPU硬件中,都会提供内存管理单元(memory management unit,MMU)来进行内存的有效管理。内存管理算法有许多,从简单的裸机方法到分页和分段策略。各种算法都有其优缺点,为特定系统选择内存管理算法...
  • Cortex-M MMU内存管理单元和 Linux

    千次阅读 2018-12-27 15:47:07
    内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。 在多用户、多进程的操作系统中,MMU使得各个用户进程都有独立的地址空间。 任何微控制器都存在一个程序能够产生的...
  • CPU和MMU(内存管理单元

    千次阅读 2019-03-22 02:16:27
    CPU的架构:要求能够理解从源程序到微指令的整个经历过程:存储器的层次结构(网络资源下载到硬盘、磁盘缓存、内存、Cache、...MMU(内存管理单元):包括从逻辑地址到虚拟地址(线性地址)再到内存地址的变换过...
  • 内存管理单元 MMU

    千次阅读 2008-02-25 19:53:00
    现代操作系统及CPU硬件中,都会提供内存管理单元(memory management unit,MMU)来进行内存的有效管理。内存管理算法有许多,从简单的裸机方法到分页和分段策略。各种算法都有其优缺点,为特定系统选择内存管理算法...
  • 介绍一种面向通信领域通用内存管理单元的算法和实现方法
  • ARM芯片S3C2410内存管理单元MMU基础实验,三星arm 资料
  • 申延超_嵌入式Linux应用开发完全手册笔记_内存管理单元MMU
  • MMU内存管理单元详解

    千次阅读 2020-04-28 23:15:07
    在传统的批处理系统如 DOS 系统,应用程序与操作系统在内存中的布局大致如下图: 应用程序直接访问物理内存,操作系统占用一部分内存区。 操作系统的职责是“加载”应用程序,“运行”或“卸载”应用程序。...
  • MMU--Memory Management Unit(内存管理单元)

    千次阅读 2018-05-26 00:03:11
    MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程...
  • 内存管理单元MMU的功能:将虚拟地址映射到物理地址,并提供内存访问权限。 没启动MMU时,cpu核,cache,MMU和外设等所有部件使用的都是物理地址。 启动MMU后,cpu核发出虚拟地址,由MVA转换成物理地址供cache和MMU...
  • 嵌入式linux学习笔记 – 内存管理单元mmu http://www.sectop.com/post/83.html
  • 内存管理单元MMU的原理

    千次阅读 2017-04-30 15:22:55
    如下图 1. cpu访问内存的级别有4种级别,linux只是用了2种级别,内核空间是0级,用户空间是3级 2. 32位的地址空间一共4G,0-3G是用户空间,3-4G是内核空间
  • if(VA < 32M) MVA = VA | ( PID<<25 ) else MVA = VA
  • 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。...MMU(Memory Management Unit,内存管理单元)在现代处理器中扮演着非常重要
  • 1、在页式存储管理中,为了实现主存的空间分配,应设置()。D A.段表 B.空闲区表 C.位示图 D.页表 2、每次分配时总是从低地址到高地址顺序查找空闲区表,找到第一个能满足作业长度要求的空闲区,此种分配算法称为...
  • DRAM内存原理(五)内存管理单元MMU

    千次阅读 2014-12-12 22:57:19
    cpu和内存之间用地址来查找数据,但是两者的地址并不总是一样的,cpu产生的是逻辑地址,而内存的就是物理地址。通常都是不一样的,所以需要地址映射。正好是从编程人员的角度看,(不考虑解释执行)程序总是经过源...
  • MMU的主要作用:虚拟地址到物理地址的转换;...但是,内存有限,不能一次性把所有代码加载到内存中,所以只把当前用到的一部分代码加载过来,把没用到的搬回磁盘。此时的效果等同于把所有程序加载到
  • 内存管理单元(了解概念,不必深究) MMU作用 : 1.权限管理:程序之间地址空间各不相同,控制不同程序的权限 。 2.地址映射:将虚拟地址与物理地址转进行转换。 cpu发出地址请求,自己并不管虚拟地址或...
  • 随着计算机的性能越来越快,手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,人们迫切需要一套完整的控制程序来管理系统资源,从而提高系统资源的利用率。 于是各式各样的操作系统出现了,人们又制定了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 225,257
精华内容 90,102
关键字:

内存管理单元