1.各种MMU
MMU是memory manage unit 内存管理单元;
SMMU是system memory manage unit 系统内存管理单元;
IOMMU和SMMU的功能基本相同,只是不同厂商的叫法
2.各种MMU的使用场景
MMU是cpu和各种处理器对应的内存管理单元;
SMMU/IOMMU是DMA使用的内存管理单元
MMU/SMMU的发展是围绕着虚拟内存管理(Virtual Memory Management)技术,就产生了分页技术,虚拟地址,地址空间,TLB,MMU等概念。
可参考
CPU体系架构-MMUhttps://nieyong.github.io/wiki_cpu/CPU体系架构-MMU.html
2.1 各自的使用场景
2.1.1 地址转换
MMU是处理器与内存之间的VA和PA的地址转换,个人理解是用户程序在处理器执行过程中将用户程序编译链接之后分配的虚拟地址转化为物理地址。所以多个用户程序的虚拟地址可以重叠,但是多个程序同时运行时会被分配到不同的物理地址。这样用户程序不用关心实际的地址分配。
有了MMU可以在OS上运行超过系统内存的程序,此时通过OS设置的交换分区(通常是硬盘)通过将不活跃的内存中的数据放入交换分区,操作系统可以腾出其空间来为其它的程序服务。虚拟内存是通过虚拟地址来实现的。
那么SMMU/IOMMU怎么使用呢?在soc中假设有一个video DMA(VDMA) 读一张大图像,在VDMA希望这个图像是连续地址空间存储的,这样只需要配置一个基地址。但实际上可能DDR中没有这么大一块连续存储。这时就可以使用SMMU了。
还有soc的软硬件交互时,多个用户程序和多个硬件设备的交互,这里面的内存空间如何管理?对于DMA来说就需要一个SMMU/IOMMU.
以下的参考文献就给出了SMMU的应用场景
https://zhuanlan.zhihu.com/p/105005488
2.1.2 内存保护
MMU/SMMU/IOMMU另外一个重要作用就是内存保护
根据需要对特定的内存区块的访问进行保护,通过这一功能,我们可以将特定的内存块设置成只读、只写或是可同时读写。
3.MMU和SMMU的区别
两者区别首先是一个供处理器使用,一个供DMA使用(DMA是一个广义的说法,就是soc中那些可以大量读写DDR的ip/外设等)
再则SMMU更复杂一点,多了streamID,STE:Stream Table Entry和CD: Context Descriptor的概念。在SMMU中,一个发起DMA传输(transaction)的设备的信息由一个Stream Table Entry(STE)来描述。所有的STEs共同构成了Stream Table,可由StreamID作为Stream Table数组的索引,查找得到对应的STE,因此StreamID也就成了设备唯一性的标识。
下面的知乎专栏以ARM的SMMU为例讲解了SMMU技术
"SMMU和IOMMU技术 [一] 兰新宇"
https://zhuanlan.zhihu.com/p/75978422
SMMU和IOMMU技术[二]
https://zhuanlan.zhihu.com/p/76643300
标签:DMA,SMMU,MMU,IOMMU,内存,用户程序 From: https://www.cnblogs.com/linhaostudy/p/18310095