[A-21]ARMv8/v9-SMMU系统架构和功能概述

ver0.1

[看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章]

前言

MMU在整个ARM的VMSA中的江湖地位,我们通过一些列的文章已经反反复复的介绍了。怎么形容呢?那都不是重要,那是相当的重要,还不了解的小伙伴,建议你先读一读前面的文章。MMU这个带刀护卫只管CPU内部的一亩三分地,CPU外面的世界他是不太关心的。了解总线架构的我们应该知道,SOC内部可不只有一个CPU,还有GPU、NPU、ADSP、DMA Controller、等等一众大哥,他们在VMSA下也是挂了号的,在CPU的眼里,这些大哥是分享IO(Device)内存空间的。这个空间是在CPU的视角下,把视角拉高的SOC架构下的视角,那么在SOC的运行时,这么江湖大哥也是需要资源才能工作的。比如,GPU要渲染一张图片、ADSP要解码MP3音频文件、网卡要接受以太网报文、等等。通过这些例子会发现,多数的总线架构下的Master要工作都离不开内存(RAM),因为他们要操作的那些图片数据、音频数据、网络报文总得有个地方放吧。牵扯到内存了,就涉及到一个重要的课题,那就是寻址,总得告诉这些大哥他们操作的数据在哪里吧。SOC中肯定是CPU说了算,它上面跑的指令可以把内存永久的或者临时的分配给一个Master使用,那么怎么找到和管理这些内存就是它们要考虑的问题了。一种就是自己管理起来,比如一些SOC平台下的GPU就可以自己管理分配给它的内存;另外一种方式就是借助类似CPU的带刀护卫MMU那种功能单元。本文我们就介绍基于ARM体系的系统架构下辅助其他Master管理内存的功能单元-SMMU(System Memory Management Units)的架构和一些核心的概念。
在开始正文正文之前,先搞清两个概念。
(1) 第一个是MMU,建议大家花一点时间阅读下前序文章: [A-07]ARMv8/ARMv9-Memory-内存管理单元(MMU)。因为SMMU和MMU的功能类似,先建立起对MMU的感觉是理解本文的重要基础。
(2) 第二个是IOMMU,其实在笔者看来两者是一回事儿,只是在不同的体系下叫法不一样。X86体系下,这个功能单元就叫IOMMU。Intel早啊,哈哈哈,现在Linux Kernel源码中Driver文件夹命名都是IOMMU。

正文

1.1 SMMU的系统架构

我们先看一张SOC架构图,如图1-1所示。
1-1

图1-1 High-Level SOC 架构

从上图可以看出在总线架构的视角下,SMMU其实也是一个Master。SMMU在SOC的形态并非固定的,具体要看芯片厂商在设计SOC产品时候考量。搭载了SMMU的SOC,系统架构就会发生变化,一些总线节点会隐藏在SMMU后面成为它的Client Device,例如图中的DMA和PCIe Controller等等。下面我们对SMMU的外围电路放大,如图1-2所示。
1-2

图1-2 High-Level SMMU相关系统架构实例

我们对图1-2做一下简单的总结:
(1) Device1和Device2可以独立也可以组团通过IO总线和SMMU连接变成他的Client设备。
(2) SMMU也可以和PCIe控制器合作将PCIe总线上的一些列设备变成自己的Client设备。
(3) 所有的Client设备在访问内存之前都要经过SMMU的管理,拿不到SMMU翻译出来的物理地址(总线地址),内存上的啥数据访问不了。
(4) SMMU本身也要接受PEs发出的指令进行控制,包括初始化配置,和运行时的指令管控。

前面说过了SMMU的系统架构形态和具体的芯片厂商设计有关系,具体先看图1-3。
1-3

图1-3 多种SMMU产品实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值