Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解MMU

图解MMU

作者头像
虚拟化云计算
发布于 2021-04-21 02:12:08
发布于 2021-04-21 02:12:08
1.6K0
举报
文章被收录于专栏:虚拟化云计算虚拟化云计算

这是图解系列之MMU

MMU叫内存管理单元,现在是处理器/核中的一个硬件单元,通常每个核有一个MMU。

下面cloud3图解一下MMU的工作原理。

CPU发出的地址是虚拟地址,MMU通过页表技术,把虚拟地址转换为物理地址,再去访问物理内存条。

CPU发出的虚拟地址由两部分组成:VPN和offset,VPN(virtual page number)是页表中的条目number,而offset是指页内偏移。

最终转换后的物理地址也有两部分:PFN和offset,PFN( Physical frame number)是物理页框number,offset和上面虚拟地址的offset相同,是页内偏移。

MMU由两部分组成:TLB(Translation Lookaside Buffer)和table walk unit。TLB 是一种地址转换cache,这里我们略过TLB的工作细节。

table walk unit在不同的CPU架构上有不同的叫法,但其作用是相同的,就是把内存页表走一走进行查表,完成虚拟地址到物理地址的转换。

下面以32位处理器来描述MMU和内存页表的工作流程。

假设只有一级页表

如果采用4KB的page大小,cpu发出的虚拟地址包含12bit的页内偏移和20bit的页表VPN:

这里的12bit的页内偏移是和4KB的页大小一致的,2的12次方正好能覆盖一个页。20bit的VPN就是页表中的条目数。

所以页表和物理内存是下面这个样:

从上图可以看页表条数和物理内存的页数是相同的,因为每一个物理页地址都需要页表中的一条来指向,不然就覆盖不全了。

物理内存是4KB*1M=4GB,内存页表是32bit*1M=4MB。

需要指出,这里的物理内存大小不是物理内存条大小,而是可以访问到物理内存最大大小。

页表里放着什么:

页表中的每一条叫做页表条目PTE(page table entry),其大小为4个字节。

任何一个虚拟地址,都可以用地址的高20位(由于一页是4KB,低12位就页内偏移)来表示,所以PTE的低12位可做他用。

低12位中,P表示是否命中。如果某一条目没有命中,则其他位就没有意义了。所以页表是这个样:

以这张页表为例, 当CPU发出的虚拟地址中页表Index是3时,MMU会去查页表的第3行,发现第3行没有命中,MMU会给CPU发出page fault,CPU自动跳到fault的代码去处理fault。当CPU发出的虚拟地址中页表Index是2时,MMU会去查页表的第2行,发现第2行命中了物理地址112*4KB,MMU会访问内存条112*4KB这个物理地址。

操作系统中每个进程都有自己的页表,当CPU在运行某个进程时,MMU的页表地址寄存器中会放置这个进程页表的物理地址,根据这个地址找到此进程的页表,然后根据此表进行地址转换。

上面我们已经介绍了每个页表的大小是4MB,覆盖了整个0-4GB的虚拟地址空间。每个进程都占用4M的物理地址,而且这个空间还必须是连续的。那整个操作系统的所有进程光页表就要消耗很大的物理内存。

假设只有2级页表

对于32位地址空间,会将VPN中的前10位用于索引页表目录(一级页表),紧接下来的10位用于索引所选的页表(二级页表)。

换言之,对于2级页表结构其本质是:VPN的前10位为页表目录索引,而接下来的10位为页表索引,剩下的10位为page offest。

MMU先根据一级页表的物理地址和一级页表Index去一级页表中找PTE,PTE中的地址不再是最终的物理地址,而是二级页表的物理地址。

根据二级页表物理地址和二级页表index去二级页表中找PTE,此时PTE中的地址才是真实的物理地址。

根据此物理地址和offset找到最终的物理内存地址。

一级页表占用的内存是4bit*2的10次方=4KB,每个二级页表占用的内存是4bit*2的10次方=4KB。

使用二级页表的好处是如果一级页表中的某一个PTE没有命中,那这一PTE对应的整个二级页表就不存在。

以上以32位系统中一级和二级页表来描述了MMU的最简单原理,多级页表的实现方式在理论上也是相同的,包括在64位系统中MMU工作原理也是如此。

这是图解系列之MMU

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 虚拟化云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
路由模式 - direct
package com.shi.rout; import java.io.IOException; import java.util.concurrent.TimeoutException; im
用户5927264
2019/08/01
6610
路由模式 - direct
订阅模式 - fanout
package com.shi.ps; import java.io.IOException; import java.util.concurrent.TimeoutException; impo
用户5927264
2019/08/01
4990
订阅模式 - fanout
Work模式
模式是一个生产者多个消费者模式,一个消息只能别一个消费者消费 package com.shi.work; import java.io.IOException; import java.util.c
用户5927264
2019/08/01
4230
Work模式
rabbitMQ-simple 简单模式
1 导入依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem
用户5927264
2019/08/01
2020
rabbitMQ-simple 简单模式
RabbitMq七种工作模式,java实战案例分享,别再说你不会!
最简单的一个消费者和一个生产者模式,生产者生成消息,消费者监听消息,若是消费者监听到它所需要的消息,就会消费该消息,这种消息是次性的,被消费了就没有了。
Java程序猿
2021/03/26
4750
RabbitMQ详解解答【面试+工作】
如果安装rabbitMQ首先安装基于erlang语言支持的OTP软件,然后在下载rabbitMQ软件进行安装(安装过程都是下一步,在此不在说了)
Java帮帮
2018/09/29
1.5K0
RabbitMQ详解解答【面试+工作】
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
> 公众号:[Java小咖秀](https://t.1yb.co/jwkk),网站:[javaxks.com](https://www.javaxks.com)
Java小咖秀
2021/04/09
1.5K0
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B 应用场景: 将发送的电子邮件放到消息队列,然后邮件服务在队列中获取邮件并发送给收件人 工作队列模式(Work queues)
程序员小强
2021/04/29
3640
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
RabbitMQ极速入门
消息中间件是目前比较流行的一个中间件,其中RabbitMQ更是占有一定的市场份额,主要用来做异步处理、应用解耦、流量削峰、日志处理等等方面。
sowhat1412
2020/11/05
1K0
RabbitMQ极速入门
RabitMQ&Java使用说明
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
俺也想起舞
2020/07/01
4700
RabbitMQ详解(三)------RabbitMQ的五种队列
  上一篇博客我们介绍了RabbitMQ消息通信中的一些基本概念,这篇博客我们介绍 RabbitMQ 的五种工作模式,这也是实际使用RabbitMQ需要重点关注的。
IT可乐
2018/07/24
8270
RabbitMQ详解(三)------RabbitMQ的五种队列
RabbitMQ系列(五)Topic模型
上一篇文章《RabbitMQ系列(四)通信模型之路由模型》中,简单的介绍了一下RabbitMQ的路由模型。这篇文章来学习一下RabbitMQ中的topic模型,Topic 模型是 RabbitMQ 的高级模型之一,Topic 模型使用了通配符的概念,可以匹配更灵活的路由规则。topic模式相当于是对路由模式的一个升级,topic模式主要就是在匹配的规则上可以实现模糊匹配。
Jensen_97
2023/07/20
2200
springboot-RabbitMQ发送短信
Kafka不管是消费成功还是失败,都不会立即从mq服务端中移除,使用offset记录消息消费情况
阿超
2022/08/16
9.1K0
springboot-RabbitMQ发送短信
RabbitMQ使用教程(超详细)
下载地址:http://www.rabbitmq.com/download.html
全栈程序员站长
2022/07/21
2.8K1
RabbitMQ使用教程(超详细)
RabbitMQ六种工作模式
2.Work queue 生产者传入多个消费者进行处理,每条消息只能被一个消费者拿到。
你的益达
2020/09/30
4730
RabbitMQ六种工作模式
RabbitMQ Topic(通配符)工作模式
红色 Queue:绑定的是 usa.# ,因此凡是以 usa. 开头的 routing key 都会被匹配到 黄色 Queue:绑定的是 #.news ,因此凡是以 .news 结尾的 routing key 都会被匹配,
兰舟千帆
2022/08/03
4620
RabbitMQ Topic(通配符)工作模式
RabbitMQ In JAVA 介绍及使用
  RabbitMQ是开源的消息中间件,它是轻量级的,支持多种消息传递协议,可以部署在分布式和联合配置中,以满足高级别、高可用性需求。并且可在许多操作系统和云环境上运行,并为大多数流行语言提供了广泛的开发工具。(这里只介绍JAVA下的RabbitMQ的使用,感兴趣的可以查看官方文档:http://www.rabbitmq.com/getstarted.html);
2019/02/21
7460
RabbitMQ In JAVA 介绍及使用
【RabbitMQ】RabbitMQ应用
官方安装指南:https://www.rabbitmq.com/install-rpm.html
瑞新
2021/11/08
1.9K0
MQ教程 | RabbitMQ 简单队列 hello world [Java版](三)
那么我们根据以上的模型,咱们抽取出 3 个对象 生产者(用户发送消息) 队列(中间件):类似于容器(存储消息) 消 费者(获取队列中的消息)
Tinywan
2019/07/16
7520
MQ教程 | RabbitMQ 简单队列 hello world [Java版](三)
05-RabbitMQ控制台入门及其Java简单操作
路由键: 就是指发送到Exchange的消息, 通过路由键的匹配规则, 分发到指定的Queue
彼岸舞
2022/10/06
2550
05-RabbitMQ控制台入门及其Java简单操作
相关推荐
路由模式 - direct
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档