0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

没有MMU的处理器可否安装操作系统呢?

Q4MP_gh_c472c21 来源:未知 作者:李倩 2018-04-21 10:45 次阅读

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

事实上,我们知道处理器是计算机的核心运算硬件,现在使用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,如下图:

所以物理地址①是通过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(广义)不变,组合出物理地址,发送出去。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19276

    浏览量

    229763
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209430
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    18286

原文标题:没有MMU的处理器就无法上操作系统?高手带你解读MMU内存管理单元

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    操作系统 处理器 嵌入式

    为什么有的处理器可以跑操作系统,有的不能?(专业一点的回答)
    发表于 09-04 16:08

    MiCO 基于微处理器的物联网操作系统

    `MiCO 基于微处理器的物联网操作系统介紹 :`
    发表于 01-26 10:42

    μC/OS-II操作系统在各种处理器上的移植

    的工作就是操作系统的移植。本文选取使用较多的51单片机、LPC2210、NiosII三种处理器进行介绍。 1 μC/OS-II操作系统移植条件μC/OS-II操作系统的大部分源代码都是
    发表于 08-14 09:46

    汇聚式处理器Blackfin支持什么操作系统

    当今的嵌入式应用已经无处不在,全球每年生产数十亿颗微处理器,其中大部分被广泛应用于各类嵌入式系统,从消费电子、通信终端及系统设备、工业控制、汽车电子系统到航空航天,无处不能看到嵌入式应
    发表于 10-11 07:12

    MicroBlaze处理器的PetaLinux操作系统怎么移植?

    核,而如何针对特定的微处理器选择合适的嵌入式操作系统是SOPC开发的难点之一。本文针对Xilinx公司的MicroBlaze软核,介绍了PetaLinux嵌入式操作系统及其移植方法,研究了PetaLinux的相关配置和启动方案。
    发表于 03-16 06:37

    VxWorks操作系统基于ARM处理器的中断怎么处理

    本文通过基于S3C44B0X处理器VxWorks嵌入式操作系统的BSP移植,详细分析了VxWorks操作系统基于ARM处理器的中断处理方法。
    发表于 04-27 06:28

    linux操作系统只能在以arm为处理器的pc上运行吗

    linux操作系统只能在以arm为处理器的pc上运行吗?可以在英特尔的各种处理器上运行吗?
    发表于 07-27 15:04

    UC/OS-Ⅱ操作系统在ARM处理器上的移植

    UC/OS-Ⅱ操作系统在ARM处理器上的移植
    发表于 03-28 09:51 27次下载

    嵌入式处理器和嵌入式操作系统

    嵌入式处理器和嵌入式操作系统 1.2.1 嵌入式微处理器    嵌入式微处理器有许多种流行的处理器核,芯片
    发表于 06-17 00:30 2007次阅读

    μC/OS-II操作系统在各种处理器上的移植

    μC/OS-II操作系统在各种处理器上的移植  μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效紧凑的特点。它执行效率高,占
    发表于 01-07 11:11 718次阅读
    μC/OS-II<b class='flag-5'>操作系统</b>在各种<b class='flag-5'>处理器</b>上的移植

    谷歌Pixel 2 XL问题不断,操作系统没有安装

    根据部分Reddit和Ars Technica论坛和Twitter用户表示,自己收到的Pixel 2 XL根本就没有安装操作系统。我们都知道无论是智能手机还是电脑,没有
    发表于 11-03 11:21 1626次阅读

    基于SPEC 2000的桌面操作系统与处理器适配评测

    桌面操作系统与处理器的适配评测是提升国产计算机系统质量的重要途径,传统桌面操作系统的评测侧重于软件本身的测试,不能够全面反映其与处理器的适配性能。基于SPEC 2000基准程序集,提出
    发表于 12-01 11:26 0次下载
    基于SPEC 2000的桌面<b class='flag-5'>操作系统与处理器</b>适配评测

    基于S3C4510B微处理器操作系统实现网络通信工程的编写设计

    Micro,是“小”的意思;C表示Control,是“控制”的意思,所以uCLinux就是Micro-Control-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”。它也是针对无MMU(内存管理单元模块)的微处理器
    的头像 发表于 10-04 17:37 1985次阅读
    基于S3C4510B微<b class='flag-5'>处理器</b>和<b class='flag-5'>操作系统</b>实现网络通信工程的编写设计

    MMU的工作原理梳理

    本文从内存管理的发展历程角度层层递进,介绍 MMU 的诞生背景,工作机制。而忽略了具体处理器的具体实现细节,将 MMU 的工作原理从概念上比较清晰的梳理了一遍。 MMU 诞生之前:在传
    的头像 发表于 12-17 16:13 1.3w次阅读
    <b class='flag-5'>MMU</b>的工作原理梳理

    如何使用IPMI安装操作系统

    当我们购买了物理服务,首先要做的事是必须在其上安装所需的操作系统。但这可以通过服务控制台、IPMI或KVM来完成,具体取决于我们要安装
    的头像 发表于 11-09 15:38 3897次阅读