在服务器的处理器firmware开发中,经常会遇到大家讨论MMU和SMMU的概念,而且会进一步讨论的相关的TLB和huge TLB概念。实不相瞒,一开始我是非常懵逼的,只是写code而已,最多是有用到MMIO来写device的寄存器,MMU和SMMU对我来说完全透明无感。

不过了解了MMU和SMMU之后,就不会再这样想了。

MMU是memory management unit的缩写,提供虚拟地址和物理地址的转换,为CPU提供硬件的内存访问机制。换句话说,不管我们是在user mode还是kernel mode开发,只要是通过CPU来执行指令集,而CPU又选择了enable MMU的feature(现代CPU基本都是enable CPU的),那么我们所写的代码一定有虚拟地址和物理地址的转换,也就是用到了MMU。

MMU是以页表管理机制为基础的,我们以ARMv7-A中的二级页表查询过程为例,当MMU中的TLB模块没有命中时,MMU的查询过程如下,最后会通过页表查询完成虚拟地址到物理地址的转换。(参考:奔跑吧Linux内核入门篇(笨叔,陈悦) 9.1.4 章节)

而SMMU的全程是system memory management unit,也是负责虚拟地址和物理地址的转换,不过和MMU不同的之处在于,SMMU的服务对象不是CPU,而是IO设备和加速引擎。在服务器架构中,不单单只有CPU来访问物理内存,GPU这样的加速引擎也会需要访问物理内存,这时SMMU就为其提供了硬件的物理内存访问机制。(参考:鲲鹏处理器架构与编程(戴志涛 刘健培): 3.3.3 章节)

简谈MMU与SMMU相关推荐

  1. MMU和SMMU/IOMMU使用场景和区别,SMMU技术与cache

    目录 1.各种MMU 2.各种MMU的使用场景 2.1 各自的使用场景 2.1.1 地址转换 2.1.2 内存保护 3.MMU和SMMU的区别 4. MMU/SMMU/IOMMU与cache 5.扩展 ...

  2. linux进程通信核心态时间,Linux进程管理简谈

    Linux系统进程管理简谈 进程是什么? 进程是对处理器.主存和I/O设备的抽象表示. 进程是操作系统对一个正在运行的程序的一种抽象,在一个系统上可以同时运行多个进程,而每个进程都好像在独占的使用硬件 ...

  3. .NET简谈网络系统大局观

    我们都知道软件发展经历了很长一段路程,在软件刚刚起步的时候,有一批世界顶尖的科学家用自己整个的人生为我们创造了今天美好的信息世界,我印象最深的是我看过一本书,书名是<优雅人生>是专门介绍一 ...

  4. .NET简谈组件程序设计之(手动同步)

    在上一篇文章".NET简谈组件程序设计之(上下文与同步域) "中,我们学习了关于一些上下文和同步域的概念,可以利用这两个技术来进行自动同步. 今天我们主要学习怎么手动来执行同步,能 ...

  5. php谈谈你对分布式的理解,简谈关于对分布式处理的理解

    原标题:简谈关于对分布式处理的理解 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和 ...

  6. 异步复位同步释放_简谈同步复位和异步复位

    简谈同步复位和异步复位 大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊数字电路设计中的同步复位和异步复位. 谈到同步复位和异步复位,那咱们就不得不来聊一聊复位这个词了.在数字逻辑电路设计中,电路通 ...

  7. 简谈创建字典的几种方式

    简谈创建字典的几种方式 直接用键值对的形式写出 键值对之间用逗号隔开 dict0 = {'name': 'xxx', 'age': 23} 用dict函数 dict1 = dict()

  8. python nonlocal的用法_简谈Python3关键字nonlocal使用场景

    下面是之前提过的有待提升效率的计算移动平均的方法: def make_averager(): series = [] def averager(new_value): series.append(ne ...

  9. .NET简谈组件程序设计之(上下文与同步域)

    我们继续学习.NET多线程技术,这篇文章的内容可能有点复杂.在打破常理之后,换一种新的思考模型最为头疼.这篇文章里面会涉及到一些不太常见的概念,比如:上下文.同步域等等.我也是最近才接触这些关于组件编 ...

最新文章

  1. VTK:多个视口用法实战
  2. [leetcode] 144.二叉树的前序遍历
  3. JQuery radio(单选按钮)操作方法汇总
  4. java sound api_Java Sound API
  5. 牛客网【每日一题】7月8日 Alliances
  6. IDEA2019版最新配置SVN及上传教程-超详细图文详解
  7. 前端基础-html-列表
  8. c语言学习-字符串输出
  9. SelectedNode与e.node的区别
  10. git log控制输出宽度
  11. 怎样有效地推广APP
  12. 小D课堂 - 零基础入门SpringBoot2.X到实战_第三节SpringBoot热部署devtool和配置文件自动注入实战_14、SpringBoot2.x使用Dev-tool热部署...
  13. 快手新作品监控提醒助手,可无水印下载视频和封面
  14. 左撇子的成长指南:我是左撇子.TXT
  15. FdSanitizer 简介
  16. 如何用计算机if函数,Excel IF函数怎么用
  17. Scheme语言--简介
  18. Json数据格式解析,难点,易错点分析
  19. 【高级数据结构】线段树 | 求区间和
  20. 大数据分析数据来源的有哪些类型

热门文章

  1. ECLIPSE 安装及与CDT 的使用 多线程编程
  2. 遥望布达拉——DAY20-24 波密
  3. 程序员算事业单位吗_程序员嘚瑟,嘲笑事业单位员工,一年收入才4万,众人:你还年轻...
  4. 初学者如何学习C++的50条
  5. 使用MaxCompute进行数据质量核查
  6. (Life)一次亲身学习经历有所思
  7. HTML- 超美超简单的相册
  8. Redis面试题:基本数据类型与底层存储结构
  9. 数据结构之——《双向链表》
  10. Windows Mac 查询