首页 > 嵌入式硬件 > 存储技术

有些童鞋可能会有这样的疑问,没有MMU的处理器可否安装操作系统呢?

本文引用地址: http://www.21ic.com/embed/hardware/storage/201804/51522.html

事实上,我们知道处理器是计算机的核心运算硬件,现在使用windows操作系统的用户使用的机器之中的处理器多数都是X86内核,而实际之上很多时候我们用户都是会在心目之中把一个处理器和其运行的特定操作系统挂钩,之前说的X86和windows操作系统,而在Cortex-A系列硬件之上我们运行的多数都是Android操作系统,或者是linux操作系统。

这些操作系统虽然说各自不同,但是都是有相同的部分,比如说对于内存的管理就是如此。一般我们把对于内存的管理模块都是称之为MMU,但是实际之上在win7旗舰版操作系统之中并不是所有的内存管理任务都是操作系统完成的,处理器也是提供了MMU硬件支持,一般我们都说有MMU支持的处理器是可以安装操作系统的。

没有MMU的处理器无法安装操作系统? 我们在上面说了没有MMU的处理器是不能安装操作系统的,其实并不是这样,现在很多的使用在嵌入式系统之中的MCU处理器都是不具备MMU,但是这种处理器可以与运行一些最为简单的实时操作系统。这种操作系统甚至也是可以提供多任务功能。无MMU处理器到底是有什么限制 实际之上如果一个处理器没有MMU的话,那么其就是不能支持和我们通用计算机一样在外部存储器之中部署程序,其只能是把应用程序和操作系统混合在一起。这样的程序处理方式其实和一般的无操作系统程序类似,所以说很多人认为这不能算是操作系统。

下面我们来详细介绍一下MMU:

MMU即内存管理单元(Memory Manage Unit),是一个与软件密切相关的硬件部件,也是理解linux等操作系统内核机制的最大障碍之一。可以说,不懂MMU使很多人一直停滞在单片机与无OS的时代。

一、虚拟地址/物理地址

如果处理器没有MMU,CPU内部执行单元产生的内存地址信号将直接通过地址总线发送到芯片引脚,被内存芯片接收,这就是物理地址(physical address),简称PA。英文physical代表物理的接触,所以PA就是与内存芯片physically connected的总线上的信号。

如果MMU存在且启用,CPU执行单元产生的地址信号在发送到内存芯片之前将被MMU截获,这个地址信号称为虚拟地址(virtual address),简称VA,MMU会负责把VA翻译成另一个地址,然后发到内存芯片地址引脚上,即VA映射成PA,如下图:

1.jpg

所以物理地址①是通过CPU对外地址总线②传给Memory Chip③使用的地址;而虚拟地址④是CPU内部执行单元⑤产生的,发送给MMU⑥的地址。硬件上MMU⑥一般封装于CPU芯片⑦内部,所以虚拟地址④一般只存在于CPU⑦内部,到了CPU外部地址总线引脚上②的信号就是MMU转换过的物理地址①。

软件上MMU对用户程序不可见,在启用MMU的平台上(没有MMU不必说,只有物理地址,不存在虚拟地址),用户C程序中变量和函数背后的数据/指令地址等都是虚拟地址,这些虚拟内存地址从CPU执行单元⑤发出后,都会首先被MMU拦截并转换成物理地址,然后再发送给内存。也就是说用户程序运行*pA =100;"这条赋值语句时,假设debugger显示指针pA的值为0x30004000(虚拟地址),但此时通过硬件工具(如逻辑分析仪)侦测到的CPU与外存芯片间总线信号很可能是另外一个值,如0x8000(物理地址)。当然对一般程序员来说,只要上述语句运行后debugger显示0x30004000位置处的内存值为100就行了,根本无需关心pA的物理地址是多少。但进行OS移植或驱动开发的系统程序员不同,他们必须清楚软件如何在幕后辅助硬件MMU完成地址转换。

暂不探讨这种复杂机制的历史原因,很多人学习或阐述MMU时,都迷失于对一些相关发散问题的无休止探究,我们暂时抽身出来,用一句话做阶段性交待,"所有计算机科学中的问题都能通过增加一个中间转换层来解决"("All problems in computer science can be solved by another level of indirection")。某种程度上,这种被动解决问题的方式使计算机软硬件的一系列发展只不过是惯性向前,看起来顺理成章,然而几乎所有从业者的智慧都浪费在不断学习和构建新的中间层,身不由己的推动这个庞然大物继续膨胀。忽然感觉索然无味,很无聊啊。

二、页/页帧/页表/页表项(PTE)

这几个页概念也噎倒了不少人,这里澄清下。MMU是负责把虚拟地址映射为物理地址,但凡"映射"都要解决两个问题:映射的最小单位(粒度)和映射的规则。

MMU中VA到PA映射的最小单位称为页(Page),映射的最低粒度是单个虚拟页到物理页,页大小通常是4K,即一次最少要把4K大小的VA页块整体映射到4K的PA页块(从0开始4K对齐划分页块),页内偏移不变,如VA的一页0x30004000~0x30004fff被映射到PA的一页 0x00008000~0x00008fff,当CPU执行单元访问虚拟地址0x30004008,实际访问的物理地址是0x00008008(0x30004008和0x00008008分别位于虚实两套地址空间,互不相干,不存在重叠和冲突)。以页为最小单位,就是不能把VA中某一页划分成几小块分别映射到不同PA,也不能把VA中属于不同页的碎块映射到PA某一页的不同部分,必须页对页整体映射。

页帧(Page Frame)是指物理内存中的一页内存,MMU虚实地址映射就是寻找物理页帧的过程,对这个概念了解就可以了。

MMU软件配置的核心是页表(Page Table),它描述MMU的映射规则,即虚拟内存哪(几)个页映射到物理内存哪(几)个页帧。页表由一条条代表映射规则的记录组成,每一条称为一个页表条目(Page Table Entry,即PTE),整个页表保存在片外内存,MMU通过查找页表确定一个VA应该映射到什么PA,以及是否有权限映射。

但如果MMU每次地址转换都到位于外部内存的页表上查找PTE,转换速度就会大大降低,于是出现了

三、TLB

TLB (Translation Lookaside Buffers)即转换快表,又简称快表,可以理解为MMU内部专用的存放页表的cache,保存着最近使用的PTE乃至全部页表。MMU接收到虚拟地址后,首先在TLB中查找,如果找到该VA对应的PTE就直接转换,找不到再去外存页表查找,并置换进TLB。TLB属于片上SRAM,访问速度快,通过TLB缓存PTE可以节省MMU访问外存页表的时间,从而加速虚实地址转换。TLB和CPU cache的工作原理一样,只是TLB专用于为MMU缓存页表。

四、MMU的内存保护功能

既然所有发往内存的地址信号都要经过MMU处理,那让它只单单做地址转换,岂不是浪费了这个特意安插的转换层?显然它有能力对虚地址访问做更多的限定(就像路由器转发网络包的同时还能过滤各种非法访问),比如内存保护。可以在PTE条目中预留出几个比特,用于设置访问权限的属性,如禁止访问、可读、可写和可执行等。设好后,CPU访问一个VA时,MMU找到页表中对应PTE,把指令的权限需求与该PTE中的限定条件做比对,若符合要求就把VA转换成PA,否则不允许访问,并产生异常。

五、多级页表

虚拟地址由页号和页内偏移组成。什么东东呢?

前面说过MMU映射以页为最小单位,假设页大小为4K(212),那么无论页表怎样设置,虚拟地址后12比特与MMU映射后的物理地址后12比特总是相同,这不变的比特位就是页内偏移。为什么不变?拜托,把搭积木想象成一种映射,不管你怎么搭,你也改变不了每块积木内部的原子排列吧。所谓以页为最小单位就是保持一部分不变作为最小粒度。

页号就更有故事了,一个32bits虚拟地址,可以划分为220个内存页,如果都以页为单位和物理页帧随意映射,页表的空间占用就是220*sizeof(PTE)*进程数(每个进程都要有自己的页表),PTE一般占4字节,即每进程4M,这对空间占用和MMU查询速度都很不利。

问题是实际应用中不需要每次都按最小粒度的页来映射,很多时候可以映射更大的内存块。因此最好采用变化的映射粒度,既灵活又可以减小页表空间。具体说可以把20bits的页号再划分为几部分(如下图linux的3级划分),

PGD(16bits)

PMD(4bits)

PTE(4bits)

Offset(12bits)

简单说每次MMU根据虚拟地址查询页表都是一级级进行,先根据PGD的值查询,如果查到PGD的匹配,但后续PMD和PTE没有,就以2(offset+pte+pmd)=1M为粒度进行映射,后20bits全部是块内偏移,与物理地址相同。

依次类推,具体可参考WolfGang Mauerer的professional linux kernel architecture的1.3.4节,以及各CPU的Spec中MMU章节,查看MMU组合出物理地址的详细过程。

六、操作系统和MMU

实际上MMU是为满足操作系统越来越复杂的内存管理而产生的。OS和MMU的关系简单说:

a.系统初始化代码会在内存中生成页表,然后把页表地址设置给MMU对应寄存器,使MMU知道页表在物理内存中的什么位置,以便在需要时进行查找。之后通过专用指令启动MMU,以此为分界,之后程序中所有内存地址都变成虚地址,MMU硬件开始自动完成查表和虚实地址转换。

b.OS初始化后期,创建第一个用户进程,这个过程中也需要创建页表,把其地址赋给进程结构体中某指针成员变量。即每个进程都要有独立的页表。

c.用户创建新进程时,子进程拷贝一份父进程的页表,之后随着程序运行,页表内容逐渐更新变化。比较复杂了,几句讲不清楚,不多说了哈,有时间讲linux的话再说吧

六、最后总结

相关概念讲完,VA到PA的映射过程就一目了然:MMU得到VA后先在TLB内查找,若没找到匹配的PTE条目就到外部页表查询,并置换进TLB;根据PTE条目中对访问权限的限定检查该条VA指令是否符合,若不符合则不继续,并抛出exception异常;符合后根据VA的地址分段查询页表,保持offset(广义)不变,组合出物理地址,发送出去。

在这个过程中,软件的工作核心就是生成和配置页表。

换一批

延伸阅读

[行业资讯] 拥有百万个处理器核心的世界最大仿大脑超算问世

拥有百万个处理器核心的世界最大仿大脑超算问世

据国外媒体报道,科学家们日前激活了世界上最大的“大脑”:一台拥有100万个处理器核心和1200块互连电路板的超级计算机,其工作原理和人脑一样。科学家们宣布,这是世界上最大的神经形态计算机,也就是模拟神经元放电的计算机。 ......

关键字:处理器 互连电路板 超级计算器

[行业资讯] 是什么让英特尔PC芯片大缺货?

是什么让英特尔PC芯片大缺货?

英特尔(Intel)对苹果订单的关注,最终对PC 市场构成了压力。有业内消息人士称,英特尔为新款iPhone 提供modem 芯片的独家协议,让台湾宏碁和华硕电脑这样的长期个人电脑合作伙伴,在进入年终购物季节这种关键时刻,却面临短缺的情况。......

关键字:芯片 英特尔 处理器

[行业资讯] 9代酷睿作为的“钎焊工艺”到底是个什么鬼?

9代酷睿作为的“钎焊工艺”到底是个什么鬼?

9代酷睿处理器已经发布了不少型号了,虽然Core i7-9700K加了2个核心但是却删了超线程。而最吸引人的点却是传说中的“钎焊工艺”,今天我们来简单聊聊这个“钎焊”到底是个什么东西。先不说处理器是什么封装,只从上半部分比较的话,桌面级CP......

关键字:CPU GPU 处理器

[行业资讯] 7nm时代,半导体行业的“贫富论”

7nm时代,半导体行业的“贫富论”

和1Xnm半导体工艺的百花齐放相比,个位数的制程就显得单调许多了,很多在10Xnm大放异彩的半导体公司都在7nm制程处遭遇到了苦头,随着AMD御用代工厂商GF宣布无限期延期7nm制程工艺,目前仅剩下的7nm工艺也只有台积电能够在现阶段实现量......

关键字:半导体 处理器 AMD

[行业资讯] 新动作!AMD在2019年推7纳米Zen 2架构处理器 性能更优

新动作!AMD在2019年推7纳米Zen 2架构处理器 性能更优

根据外电报导,在陆续推出14纳米Zen架构处理器、12纳米Zen+架构处理器之后,处理器大厂AMD预计将在2019年将会推出由全新7纳米制程的Zen 2架构新处理器,预估在包括性能、功耗等各方面表现都将会有大幅度的提升。而更进一步使用7纳米......

关键字:处理器 AMD 台积电

[新鲜事] 美国物理学家爆猛料:外星人已经对人类下手了

美国物理学家爆猛料:外星人已经对人类下手了

就在世人对外星人的存在还将信将疑的时候,美国75岁物理学家斯坦顿·弗里德曼(Stanton Friedman)声称,自己确信外星生物曾到访过地球,并且外星生物在地球上停留很长时间。外星人曾经还劫持过地球人去做实验,这些资料目前被美国政府扣押......

关键字:外星人

[疯狂史] 一路走来,我的电子信息工程和嵌入式之路

一路走来,我的电子信息工程和嵌入式之路

一路走来,我的电子信息工程和嵌入式之路,嵌入式该怎么学,嵌入式从何学起,嵌入式入门需不需要报培训机构,哪个培训机构好点?.还有一些是咨询电子信息工程专业的情况等等?......

关键字:电子信息工程 嵌入式
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14