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

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

3天内不再提示

介绍CPU与cache之间的MMU的组成与工作原理

Linelayout 来源:黑客与摄影师 2023-03-06 15:07 次阅读

1, 介绍

前面的文章《一文搞懂Cortex-A77(ARMv8架构)工作原理》,《一文搞懂cpu cache工作原理》介绍CPU、cache的组成与工作原理,这篇文章将介绍CPU与cache之间的MMU的组成与工作原理。通过本文可以了解CPU访问的虚拟地址是怎么转换成物理地址,然后通过物理地址在cache、主存或者EMMC中获取相应的数据。

早期的内存是比较小的,一般是几十k,不过相应的程序也是比较小的,这时程序可以直接加载到内存中运行。后来为了支持多个程序的并行,内存中出现了固定分区,在编译阶段将不同程序,划分在不同的内存区域上。这种方式存在不少问题:一是内存分区大小与程序大小要匹配,二是地址空间无法动态的增长。于是内存动态分区思想便诞生了,内存上线划出一块区域给操作系统,然后剩余的内存空间给用户进程使用,这样用户程序所使用的内存空间,跟随程序大小及数目进行变动。

不论是静态分析,还是动态分区,都存在一些问题:进程地址空间安全问题、内存使用效率低。为了能够让多程序安全、高效地并行运行,物理内存中需要存放多个程序的代码及数据,这时虚拟内存便诞生了。不得不说虚拟内存是一个伟大的发明,一方面它让每个程序认为自己是独自、连续的使用内存,另一方面,每个程序之间的内存形成了安全隔离,避免程序破坏彼此的内存。

后来随着软件的快速发展,一个程序的大小变得很大,这时物理内存大小跟不上程序大小增加的速度。这样便不能将整个程序加载到物理内存中,一是物理内存没有这么大,二是如果将整个程序加载到内存,为了多程序并行,就需要将大量的数据及代码换入、换出,这导致程序运行效率低下。

虚拟内存并没解决高效使用内存的问题,好在程序运行遵循时间、空间局部性原理,进而出现了分页机制。分页机制从根本上解决了高效使用物理内存的问题。每次只需要将几页的代码、数据从磁盘中加载到内存,程序就能正常运行。当程序运行的过程中,需要新的代码、数据会产生缺页异常,这些代码、数据就会从磁盘加载到内存,然后程序从异常恢复正常运行。

对于支持虚拟内存,分页机制的系统,处理器直接寻址虚拟地址,这个地址不会直接发给内存控制器,而是先发给内存管理单元(Memory Manager Unit,MMU)。MMU就是负责将虚拟地址转换和翻译成物理地址的一个硬件模块,其实MMU所做的事,完全可以通过CPU来实现。为啥还要一个MMU硬件模块呢?就是为了提升虚拟地址到物理地址转换的速度,减少转换所消耗的时间。

MMU包含两个模块TLB(Translation Lookaside Buffer)和TWU(Table Walk Unit)。TLB是一个高速缓存,用于缓存页表转换的结果,从而缩短页表查询的时间。TWU是一个页表遍历模块,页表是由操作系统维护在物理内存中,但是页表的遍历查询是由TWU完成的,这样减少对CPU资源的消耗。

虚拟内存及分页机制的出现,解决了进程地址空间安全性的问题和内存使用效率低的问题,但是也引入了系统性能变差的问题。本来CPU可以直接通过访存执行程序,但是现在引入了虚拟地址到物理地址的转换。MMU硬件模块的出现,就是为了解决这个性能问题。因此,几G运行内存的电脑,可以并行运行几十G的多程序,让你在听歌的同时,能够并行处理编辑文档,下载电影,收发邮件等。

2, 框架

2.1 内存管理体系结构

cca00c42-bbda-11ed-bfe3-dac502259ad0.png

在SMP(Symmetric Multi Process,对称多处理器)系统中,每个处理器内置了MMU模块,MMU模块包含了TLB和TWU两个子模块。TLB是一个高速缓存,用于缓存虚拟地址到物理地址的转换结果。页表的查询过程是由TWU硬件自动完成的,但是页表的维护是需要操作系统实现的,页表存放在主存中。

页表的查询是一个耗时的过程,理想情况下,TLB命中,可以从中直接得到虚拟地址对应的物理地址。当TLB未命中的时候,MMU才会通过TWU查询页表,从而翻译虚拟地址得到物理地址。得到物理地址后,首先要查询该物理地址的内容是否存在于cache中,若cache命中,则直接取出物理地址对应的内容返回给处理器。

若cache没有命中,会进一步访问主存获取相应的内容,然后回写到cache,并返回给处理器。如果没能在页表中查询到虚拟地址对应的物理地址,则会触发一个与MMU相关的缺页异常,在异常处理的过程中,会将EMMC中相关的数据加载到主存,然后建立相应的页表,然后将物理地址对应的内容返回给cache及处理器。

2.2 MMU相关的基本概念

(1)虚拟地址相关基本概念

虚拟内存(Virtual Memory,VM):为每个进程提供了一致的、连续的、私有的内存空间,简化了内存管理。将主存看成是一个存储在磁盘上的地址空间的高速缓存,当运行多个进程或者一个进程需要更多的空间时,主存显然是不够用的,这时需要更大、更便宜的磁盘保存一部分数据。

虚拟地址空间(Virtual Address Space,VAS):每个进程独有。

虚拟页(Virtual Page,VP):把虚拟内存按照页表大小进行划分。

虚拟地址(Virtual Address,VA):处理器看到的地址。

虚拟页号(Virtual Page Number,VPN):用于定位页表的PTE。

(2)物理地址相关的基本概念

物理内存(Physical Memory,PM):主存上能够使用的物理空间。

物理页(Physical Page):把物理内存按照页表的大小进行划分。

物理地址(Physical Address,PA):物理内存划分很多块,通过物理内存进行定位。

物理页号(Physical Page Number,PPN):定位物理内存中块的位置。

(3)页表相关的基本概念

页表(Page Tabel):虚拟地址与物理地址映射表的集合。

页表条目(Page Table Entry,PTE):虚拟地址与独立地址具体对应的记录。

页全局目录(Page Global Directory,PGD):多级页表中的最高一级。

页上级目录(Page Upper Directory,PUD):多级页表中的次高一级。

页中间目录(Page Middle Directory,PMD):多级页表中的一级。

2.3 页命中、缺页

(1)页命中

ccb37f5c-bbda-11ed-bfe3-dac502259ad0.png

a) 处理器要对虚拟地址VA进行访问。 b) MMU的TLB没有命中,通过TWU遍历主存页表中的PTE地址。 c) 主存向MMU返回PTE。 d) MMU通过PTE映射物理地址,并把它传给高速缓存或主存。 e) 高速缓存或主存返回物理地址对应的数据给处理器。

(2)缺页

ccc1305c-bbda-11ed-bfe3-dac502259ad0.png

a) 处理器要对虚拟地址VA进行访问。 b) MMU的TLB没有命中,通过TWU遍历主存页表中的PTE地址。 c) 主存向MMU返回PTE。 d) PTE中有效位是0,MMU触发一次异常,CPU相应缺页异常,运行相应的处理程序。 e) 缺页异常处理程序选出物理内存中的牺牲页,若这个页面已经被修改,将其换出到EMMC。 f) 缺页异常处理程序从EMMC中加载新的页面,并更新内存中页表的PTE。 g) 缺页异常处理程序返回到原来的进程,再次执行导致缺页的指令。CPU将引起缺页异常的虚拟地址重新发给MMU。由于虚拟页面现在缓存在主从中,主存会将所请求的地址对应的内容返回给cache和处理器。

2.4 多级页表映射过程

物理页面大小一级地址总线宽度不同,页表的级数也不同。以AArch64运行状态,4KB大小物理页面,48位地址宽度为例,页表映射的查询过程如图:

ccd37adc-bbda-11ed-bfe3-dac502259ad0.png

对于多任务操作系统,每个用户进程都拥有独立的进程地址空间,也有相应的页表负责虚拟地址到物理地址之间的转换。MMU查询的过程中,用户进程的一级页表的基址存放在TTBR0。操作系统的内核空间公用一块地址空间,MMU查询的过程中,内核空间的一级页表基址存放在TTBR1。

当TLB未命中时,处理器查询页表的过程如下:

处理器根据虚拟地址第63位,来选择使用TTBR0或者TTBR1。当VA[63]为0时,选择TTBR0,TTBR中存放着L0页表的基址。

处理器以VA[47:39]作为L0的索引,在L0页表中查找页表项,L0页表有512个页表项。

L0页表的页表项中存放着L1页表的物理基址。处理器以VA[38:30]作为L1索引,在L1页表中找到相应的页表项,L1页表中有512个页表项。

L1页表的页表项中存放着L2页表的物理基址。处理器以VA[29:21]作为L2索引,在L2页表中找到相应的页表项,L2页表中有512个页表项。

L2页表的页表项中存放着L3页表的物理基址。处理器以VA[20:12]作为L1索引,在L3页表中找到相应的页表项,L3页表中有512个页表项。

L3页表的页表项里,存放着4KB页面的物理基址,然后加上VA[11:0],这样就构成了物理地址,至此处理器完成了一次虚拟地址到物理地址的查询与翻译的工作。






审核编辑:刘清

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

    关注

    68

    文章

    19404

    浏览量

    231016
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9164

    浏览量

    368929
  • SMP
    SMP
    +关注

    关注

    0

    文章

    76

    浏览量

    19717
  • TLB电路
    +关注

    关注

    0

    文章

    9

    浏览量

    5270
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    18345

原文标题:一文搞懂MMU工作原理

文章出处:【微信号:IC大家谈,微信公众号:IC大家谈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式中ARM的MMUCache机制

    Cache是高性能CPU解决总线访问速度瓶颈的方法,然而它的使用却是需要权衡的,因为缓存本身的动作,如块拷贝和替换等,也是很消耗CPU时间的。MMU的重要性勿庸置疑,ARM920T(和
    发表于 08-19 22:42

    处理器在读内存的过程中,CPU核、cacheMMU如何协同工作

    处理器中断处理的过程是怎样的?处理器在读内存的过程中,CPU核、cacheMMU如何协同工作
    发表于 10-18 08:57

    ARM920T的高速缓冲存储器cacheMMU简析

    一、cache分类及应用场合cache是内存和CPU之间的高速缓冲存储器,其分为icache(指令缓存)和dcache(数据缓存)。如果开启了cac
    发表于 05-11 17:43

    ARMv8 Uboot支持MMUCache对比实验指南

    1. ARMv8 Uboot支持MMUCache说明由于Uboot是第一次在我司平台方案上支持,因此存在很多不完善的地方,在启动过程中,客户反馈Uboot在内核解压(gzip压缩内核)这一块耗时
    发表于 05-23 16:19

    Cache工作原理

    Cache工作原理:Cache工作原理是基于程序访问的局部性。对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空
    发表于 09-19 07:48 13次下载

    Buffer和Cache之间区别是什么?

    cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存
    的头像 发表于 04-02 10:35 6786次阅读

    cache结构与工作原理

    更详细的讲,cache的结构其实和内存的结构类似,也包含地址和内容,只是cache的内容除了存的数据(data)之外,还包含存的数据的物理内存的地址信息(tag),因为CPU发出的寻址信息都是针对
    发表于 06-03 14:24 1.2w次阅读
    <b class='flag-5'>cache</b>结构与<b class='flag-5'>工作原理</b>

    MMU工作原理梳理

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

    ARM920T的MMUCache介绍

    CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,
    发表于 03-28 11:05 14次下载
    ARM920T的<b class='flag-5'>MMU</b>与<b class='flag-5'>Cache</b><b class='flag-5'>介绍</b>

    CPU设计之Cache存储器

    Cache存储器也被称为高速缓冲存储器,位于CPU和主存储器之间。之所以在CPU和主存之间要加cache
    的头像 发表于 03-21 14:34 1353次阅读
    <b class='flag-5'>CPU</b>设计之<b class='flag-5'>Cache</b>存储器

    MMU内存管理单元的工作原理和作用

    MMU(Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟内存管理。
    的头像 发表于 08-03 10:03 2557次阅读
    <b class='flag-5'>MMU</b>内存管理单元的<b class='flag-5'>工作原理</b>和作用

    Cache工作原理讲解 Cache写入方式原理简介

    Cache是位于CPU与主存储器即DRAM(Dynamic RAM,动态存储器)之间的少量超高速静态存储器SRAM(Static RAM),它是为了解决CPU与主存
    的头像 发表于 10-17 10:37 1018次阅读
    <b class='flag-5'>Cache</b><b class='flag-5'>工作原理</b>讲解 <b class='flag-5'>Cache</b>写入方式原理简介

    Cache工作原理是什么

    具有Cache的计算机,当CPU需要进行存储器存取时,首先检查所需数据是否在Cache中。如果存在,则可以直接存取其中的数据而不必插入任何等待状态,这是最佳情况,称为高速命中; 当CPU
    的头像 发表于 10-31 11:34 1089次阅读
    <b class='flag-5'>Cache</b><b class='flag-5'>工作原理</b>是什么

    MMU原理:CPU是如何访问到内存的?

    CPU访问虚拟地址0的时候,MMU会去查上面页表的第0行,发现第0行没有命中,于是无论以何种形式(R读,W写,X执行)访问,MMU都会给CPU发出page fault,
    发表于 11-09 12:30 1245次阅读
    <b class='flag-5'>MMU</b>原理:<b class='flag-5'>CPU</b>是如何访问到内存的?

    什么是CPU缓存?它有哪些作用?

    CPU缓存(Cache Memory)是计算机系统中一个至关重要的组成部分,它位于CPU与内存之间,作为两者
    的头像 发表于 08-22 14:54 3654次阅读