当前位置: 首页 > news >正文

操作系统概念(一)——IOMMU学习

系列文章目录

提示:本系列主要记录工作过程中遇到的操作系统基础概念以及工作原理

  • 第一章 操作系统之IOMMU

文章目录

  • 系列文章目录
  • 1. 设备访问内存的几种主要方式
    • 1.1 传统的 I/O 访问(程序控制 I/O)
    • 1.2 直接内存访问(DMA)
    • 1.3 设备驱动与内存映射
  • 2. IOMMU简介
  • 3. IOMMU的作用
    • 3.1 提高了内存安全性
    • 3.2 解决 32 位设备的地址扩展问题
  • 4. 总结


1. 设备访问内存的几种主要方式

1.1 传统的 I/O 访问(程序控制 I/O)

在最早的计算机系统中,设备通过 CPU 执行 I/O 操作来访问内存。这种方式也称为 程序控制 I/O。

  • 操作方式:设备通过 CPU 发起 I/O 请求,CPU 会根据程序中的指令,手动读取或写入内存。
    例如,磁盘控制器向内存中写入数据时,CPU 会通过一系列指令来控制数据传输。
  • 缺点:CPU 必须参与每次数据传输,这样不仅增加了 CPU 的负担,还导致了 CPU 的效率低下,因为它需要等待设备完成数据传输。这种方法效率低,尤其是在大量数据传输时。

1.2 直接内存访问(DMA)

DMA(Direct Memory Access) 是一种提高设备访问内存效率的方法

  • 操作方式:在 DMA 模式下,设备可以直接与内存进行数据交换,无需 CPU 参与数据传输过程。
  • 特点:DMA模式下的关键硬件叫DMAC(Controller),我理解该硬件的诞生就是为了将设备访问内存时cpu的职责进行了析出,从而让cpu做其它更重要的事(毕竟cpu是万金油,啥都需要它)。

1.3 设备驱动与内存映射

在现代操作系统中,设备访问内存通常是通过设备驱动程序进行的。驱动程序负责与硬件设备进行通信,并将设备的内存空间映射到进程的虚拟地址空间中。

  • 操作方式:驱动程序通过操作系统提供的接口将设备内存映射到用户空间或内核空间。当应用程序或操作系统需要访问设备时,它直接操作映射到内存中的数据。
    这种方式通常用于高性能的 I/O 操作,如网络通信、显卡渲染等。

2. IOMMU简介

IOMMU(Input/Output Memory Management Unit)是内存控制器( memory controller)的一部分,用于将设备虚拟地址(也可称为I/O地址或设备地址)转换为物理地址

IOMMU的概念类似于MMU(Memory Management Unit),区别在于:

  • IOMMU:将设备虚拟地址翻译为物理地址;
  • MMU:负责将CPU虚拟地址翻译为物理地址。

在设备做DMA访问内存的时候,系统返回给设备驱动的不再是物理地址,而是虚拟地址 ,这个地址一般叫IOVA,设备访问内存时,由IOMMU来将这个设备虚拟地址转换为物理地址。

在这里插入图片描述

从上图可知,IOMMU是DMA(直接内存访问,即设备与内存直接通信,而无需经过CPU)过程中的一个环节。1

因此IOMMU可以看作一种机制,也可以说:IOMMU是DMA的一种实现方式


3. IOMMU的作用

IOMMU的引人带来了哪些好处呢?

  • 提高了内存安全性;
  • 扩展设备地址访问范围;

3.1 提高了内存安全性

传统方式(设备直接访问物理地址),设备可能会访问到不属于自己的内存区域(例如:破坏操作系统的内存结构),造成数据泄漏或系统崩溃。

相反,基于IOMMU机制的DMA内存访问方式,IOMMU 可以在内存访问之前进行检查,确保设备只能访问其分配的内存区域,防止设备访问操作系统的核心数据结构或其他虚拟机的内存,这对于防止设备对其他虚拟机或操作系统内存的恶意或意外访问至关重要。

结论: IOMMU使得设备无法直接访问物理地址,大大增加了设备进行DMA攻击的难度。


3.2 解决 32 位设备的地址扩展问题

设备访问 4GB 以上内存的问题:许多传统的设备(例如 32 位 DMA-capable 设备、网卡、硬盘控制器等)不能直接访问超过 4GB 的内存,因为它们只能使用 32 位的地址空间。但是,现代操作系统的内存往往大于4GB。
如果设备申请DMA(设备直接访问内存)时,内核为设备分配的DMA buffer地址高于4GB(简称为high buffer),则设备将无法寻址到它。

IOMMU通过地址转换提供了解决方案:IOMMU 需要提供一种间接方式,让设备能够通过低地址的缓冲区(low buffer)来与高地址的内存(high buffer)进行交互。这一过程通常被称为 “sync” 或 “bounce” 机制,具体过程如下:

  • 设备请求访问高地址内存:假设设备需要访问 4GB 以上的内存(high buffer),但设备无法直接寻址到高地址,因为它只能使用 32 位地址。

  • IOMMU 为设备分配低地址内存(low buffer):IOMMU 会为设备分配一个低于 4GB 的内存区域(low buffer),这块内存与高地址内存(high buffer)的大小一致。
    设备会通过低地址缓冲区(low buffer)进行 DMA 操作。虽然设备只能访问 low buffer,但通过 IOMMU 的映射,它的请求会在后台被转换成访问高地址内存(high buffer)。

  • IOMMU 进行数据同步:设备向低地址缓冲区(low buffer)写入数据后,IOMMU 会将 low buffer 中的数据复制到高地址缓冲区(high buffer)。反之,CPU 或其他系统组件向高地址缓冲区(high buffer)写入数据时,IOMMU 会将数据从 high buffer 复制到低地址缓冲区(low buffer)。

  • 数据传递与同步:通过这种方式,尽管设备无法直接访问超过 4GB 的内存,但它通过 low buffer 间接完成了数据读写。

在这里插入图片描述

结论:IOMMU 的“sync”或“bounce”机制确保了设备和 CPU 可以通过这两个内存区域交换数据,从而实现了高地址内存的间接访问。


4. 总结

本文主要介绍了设备访问内存的几种方式,以及IOMMU的基本概念、主要作用。

后续有时间再学习下虚拟化中IOMMU的作用2


  1. Linux x86-64 IOMMU详解(一)——IOMMU简介 ↩︎

  2. linux内核中IOMMU 基础架构介绍 ↩︎

相关文章:

操作系统概念(一)——IOMMU学习

系列文章目录 提示:本系列主要记录工作过程中遇到的操作系统基础概念以及工作原理 第一章 操作系统之IOMMU 文章目录 系列文章目录1. 设备访问内存的几种主要方式1.1 传统的 I/O 访问(程序控制 I/O)1.2 直接内存访问(DMA&#xf…...

通过 Windows IIS 服务访问腾讯云 CFS 文件系统

互联网信息服务(IIS)可以像访问本地数据一样访问文件存储(Cloud File Storage,CFS)系统上的数据,并提供 Web 服务,实现网站存储与计算分离。本文介绍如何配置 IIS 访问 CFS 文件系统。 背景信息…...

如何电脑连接电视,实现大屏自由!

在追求很高视听享受的今天,将电脑连接到电视上已经成为了一种趋势。无论是追剧、办公演示还是享受游戏,大屏幕带来的沉浸感是笔记本电脑无法比拟的。今天就为大家详细介绍四种不同的电脑连接电视的方法,助你轻松实现大屏自由! 方…...

闭包的概念及使用场景介绍

概念:在JavaScript中,闭包(Closure)是指一个函数有权利访问定义在它外部作用域的任何变量。 function outerFn(outerVal) {return function innerFn(innerVal) {console.log(outerVal, outerVal)console.log(innerVal, innerVal)…...

qt5将程序打包并使用

一、封装程序 (1)、点击创建项目->库->clibrary (2)、填写自己想要封装成库的名称,这里我填写的名称为mydll1 (3)、如果没有特殊的要求,则一路下一步,最终会出现如下文件列表。 (4)、删…...

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…...

uniapp上拉刷新下拉加载

方法一: z-paging 的组件库: show-loading-more-no-more-view"false" 该属性控制是否显示 "加载更多" 或 "没有更多" 的提示。如果设为 false,则不会显示这些提示。如果设为 true,当数据加载完毕…...

【C++】【算法基础】快速排序

快速排序 题目 用快速排序排序长度为 n n n的整数数列。 题解 快速排序的核心思想是分而治之:选定一个基准值,将数组分为两半,一边比其小,一边比其大,然后再次分别选定一个基准值,再次操作。 #include…...

数仓工具—Hive语法之窗口函数中的order by

窗口函数中的order by 其实工作这么多年了,再加上写了这么多的文章,我觉得我还是很理解窗口函数这个东西了,毕竟在工作中用了这么多,各种row_number 排序求分组前几,各种lead/lag 代替自关联实现感觉已经得心应手了。 但是最近遇到窗口函数中的order by 的问题,然后我发…...

以旅游产品为例改写一篇系统架构风格的论文

概念: 系统架构风格是描述某一特定应用领域中系统组织方式的惯用模式,架构风格定义了一个词汇表和一组约束,词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的,软件系统架构风格反应了领域中众多软件系统所共有的结构和语义特性,…...

【Linux】linux编辑器-vim的命令及配置

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...

解决vite项目tailwindcss不生效!!(Vue3、tailwindcss失效)

安装tailwindcss vite自带安装了postcss,只需要安装tailwindcss npm install -D tailwindcss自动创建tailwind.config.js npx tailwindcss init -p/** type {import(tailwindcss).Config} */ module.exports {// 配置需要使用tailwindcss的文件content: [./src/vi…...

ubuntu 20.04 NVIDIA驱动、cuda、cuDNN安装

1. NVIDIA驱动 系统设置->软件和更新->附加驱动->选择NVIDIA驱动->应用更改。该界面会自动根据电脑上的GPU显示推荐的NVIDIA显卡驱动。 运行nvidia-smi: NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the lat…...

Python世界:力扣题704二分查找

Python世界:力扣题704二分查找 任务背景思路分析代码实现测试套件本文小结 任务背景 问题来自力扣题目704:Binary Search,大意如下: Given an array of integers nums which is sorted in ascending order, and an integer target…...

W55RP20-EVB-Pico评估板介绍

目录 1 简介 2 硬件资源 2.1 硬件规格 2.2 引脚定义 2.3 工作条件 3 参考资料 3.1 RP2040 数据手册 3.2 原理图 ​编辑 原理图 & 物料清单 & Gerber 文件 3.3 尺寸图(单位:mm) ​编辑 3.4 认证 3.5 参考例程 4 硬件协…...

Flink安装和Flink CDC实现数据同步

一,Flink 和Flink CDC 1, Flink Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。 中文文档 Apache Flink Documentation | Apache Flink 官方文档 :https://flink.apache.org Flink 中文社区…...

数字化转型助手 快鲸SCRM系统为企业营销赋能

内容概要 在当今这个快速变化的商业环境中,数字化转型已经成为企业生存与发展的关键要素。无论是零售、制造还是服务行业,企业都深刻意识到传统工作模式的局限性,必须借助先进的技术来优化运营和提升客户体验。快鲸SCRM系统就是这样一款数字…...

浅谈Agent

目录 什么是大模型 Agent ? 大模型Agent 有哪些部分组成? 规划(Planning) Planning类型 不依赖反馈的计划 基于反馈的计划 拆解子目标和任务分解方法 COT TOT GOT LLMP 反思和完善 ReAct(融合推理与执行的能力) Reflexion(动态…...

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示,预计到2029年,全球风电运维市场的规模将攀升至307.8亿美元,并且在接下来的几年里,其年复合增长率(CAGR)将达到12.5%。 上述图表及…...

Sparrow系列拓展篇:对调度层进行抽象并引入IPC机制信号量

前言 在笔者更新完Sparrow手把手教学系列后,原本是不打算继续更新的。但关于Sparrow系列的读者又渐渐增多,作为作者,总感觉这个系列的文章还是稍微有些不圆满,恐怕多少会让读者有些意兴阑珊。 最近又恰好有一点空闲时间&#xf…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...