DMA简介

article/2025/11/5 10:56:14

为什么要有 DMA 技术?

  • dma主要是用于读写数据用的

在没有 DMA 技术前,I/O 的过程是这样的:

  • CPU 发出对应的指令给磁盘控制器,然后返回;
  • 磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,然后产生一个中断
  • CPU 收到中断信号后,停下手头的工作,接着把磁盘控制器的缓冲区的数据一次一个字节地读进自己的寄存器,然后再把寄存器里的数据写入到内存,而在数据传输的期间 CPU 是无法执行其他任务的。

 可以看到,整个数据的传输过程,都要需要 CPU 亲自参与搬运数据的过程,而且这个过程,CPU 是不能做其他事情的。简单的搬运几个字符数据那没问题,但是如果我们用千兆网卡或者硬盘传输大量数据的时候,都用 CPU 来搬运的话,肯定忙不过来。

计算机科学家们发现了事情的严重性后,于是就发明了 DMA 技术,也就是直接内存访问(Direct Memory Access 技术。

什么是 DMA 技术?

简单理解就是,在进行 I/O 设备和内存的数据传输的时候,数据搬运的工作全部交给 DMA 控制器,而 CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务

具体过程:

  • 用户进程调用 read 方法,向操作系统发出 I/O 请求,请求读取数据到自己的内存缓冲区中,进程进入阻塞状态;
  • 操作系统收到请求后,进一步将 I/O 请求发送 DMA,然后让 CPU 执行其他任务;
  • DMA 进一步将 I/O 请求发送给磁盘;
  • 磁盘收到 DMA 的 I/O 请求,把数据从磁盘读取到磁盘控制器的缓冲区中,当磁盘控制器的缓冲区被读满后,向 DMA 发起中断信号,告知自己缓冲区已满;
  • DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区中,此时不占用 CPU,CPU 可以执行其他任务
  • 当 DMA 读取了足够多的数据,就会发送中断信号给 CPU;
  • CPU 收到 DMA 的信号,知道数据已经准备好,于是将数据从内核拷贝到用户空间,系统调用返回;

可以看到, 整个数据传输的过程,CPU 不再参与数据搬运的工作,而是全程由 DMA 完成,但是 CPU 在这个过程中也是必不可少的,因为传输什么数据,从哪里传输到哪里,都需要 CPU 来告诉 DMA 控制器。


http://chatgpt.dhexx.cn/article/7D1eV6Yt.shtml

相关文章

利用RadASM 写汇编程序

本文介绍利用RedASM写一个messageBox “hello world”. RadAsm 是我用过最爽的一个汇编Ide了, 代码高亮,智能提示…… RadASM支持多种不同的汇编编译器,这里我们选择MASM.既然是IDE了,创建工程就很简单了, 文件->Win32 App(no …

srand和rand详细讲解

srand 使用srand引用头文件#include<stdlib.h> 在rand调用之前设置srand&#xff0c;若不设置当rand调用时随机数种子默认为1&#xff0c;随机数种子一样则每次打印出来的值也是一样的。 设置srand srand( (unsigned int )time(NULL) ) 如上所示&#xff0c;我们给一个持…

RadASM with Masm32

1.下载RadASM 从http://www.oby.ro/rad_asm/ 处下载 或http://www.assembly.com.br/ //这个是官网 1.RadASM 2.2.1.6 (09-April-2009) 2.RadASM Assembly programming (07-08-2008) 第一个是编译器 第二个是官网自带的编译配置辅助文件 2.下载MASM 从…

windows10_64位环境下RadAsm的8086汇编语言程序

前言&#xff1a; 当我们在win10环境下使用RadAsm编写汇编时&#xff0c;发现并不能够运行&#xff0c;因为Win64已经废弃了对16位程序的支持&#xff0c;甚至连debug都废除了。而且使用虚拟机太麻烦&#xff0c;有两种解决方案: 方法一&#xff1a;第一种是linux环境下使用命…

在64位系统下,使用 RadASM IDE 写 32 位及 16 位的汇编程序

一&#xff0e; 解压压缩包 二&#xff0e; 打开解压出的文件夹 三&#xff0e; 解压下图两个文件 四&#xff0e; 移动下图的文件夹&#xff08;DOSBox-0.74&#xff09;到你想放置的位置 五&#xff0e; 运行下图程序 下一步 我同意 下一步&#x…

汇编工具安装二:RadASM的安装!

已经配置好的汇编工具下载地址&#xff1a;http://download.csdn.net/detail/sunylat/9189543 RadASM也是一款汇编开发工具&#xff0c;网址&#xff1a;http://www.oby.ro/rad_asm/ 这个工具我也是偶然知道的&#xff0c;今天简单试用了一下&#xff0c;我觉得不错&#xff01…

图解RadASM使用初步

RadASM是一个主要用于Win32汇编的开发工具&#xff0c;也有对其他语言的支持&#xff1b; 此工具提供的方便相当多&#xff1b; 1 安装 2 自带例程 3 部分自带工具 ascii码表 颜色工具&#xff1b; 自带教程&#xff1b; 工具栏制作器&#xff1b; 自带代码片段&#xff1b;…

【汇编语言】汇编实验IDE(集成开发环境):RadASM的安装和使用说明

0 前言 本文适合8086CPU的指令集。 对于重要的专业基础课程&#xff0c;汇编语言&#xff0c;做实验是必不可少的&#xff0c;但是由于汇编语言本身的缺陷&#xff0c;现代计算机并不能直接运行汇编语言程序&#xff0c;因此&#xff0c;一般老师会要求我们 使用虚拟机&…

32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式

32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各种声明 那么现在有大神,已经帮我们做了一个IDE环境,就是RadAsm,首先简单介绍一下界面 (对于这…

python3——写文件默认的编码格式 GBK~cp936

用python3写文件的时候没有指定编码模式&#xff0c;其默认使用的是encoding‘cp936’ 微软的CP936通常被视为等同GBK&#xff0c;连 IANA 也以“CP936”为“GBK”之别名。不过实际上 GBK 定义的字符比 CP936 多出95个字&#xff0c;其中包括了15个非汉字及80个汉字。 所以小…

Configuration file contains invalid cp936 characters in C:\Users\xxx\pip\pip.ini.

在按照网上的教程配置过pip.ini之后&#xff0c;使用install命名进行导包&#xff0c;导包不成功&#xff0c;提示这个&#xff1a; Configuration file contains invalid cp936 characters in C:\Users\wangli66\pip\pip.ini. 这是我配置的文件&#xff1a; [global] index…

PL3369CE

PL3369CE是一款原边控制&#xff0c;用于反激式开关电源的恒流/恒压调节器。PL3369CE高度集成了功率开关&#xff0c;并通过去除光耦以及次级控制电路&#xff0c;在简化充电器/适配器等传统的恒流/恒压设计的同时实现了精确的电流和电压调节。PL3369CE的复合模式的应用使芯片能…

TexLive安装报错does not map to cp936

TexLive解压后安装&#xff0c;如果存放在有中文名的文件夹中&#xff0c;就会出现如下报错&#xff1a;xxx does not map to cp936 at xxx/install-menu-extl.pl line 111. in vars section 解决方法&#xff1a;直接将解压好的文件剪切到不含中文的文件夹中&#xff08;比如直…

Configuration file contains invalid cp936 characters in C:\Users\YWX\pip\pip.ini. 已解决!

项目场景&#xff1a; python pip安装国内镜像源报错问题&#xff01; 问题描述 在C:\Users\YWX\pip 配置好镜像源后 在cmd安装出现&#xff1a; 原因分析&#xff1a; 在pip.ini 配置文件里存在注释符号 解决方案&#xff1a; 把注释去掉&#xff0c;保存&#xff01; &g…

ubuntu 截图快捷键设置

转载于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/8554312.html

ubuntu-ubuntu16.04截屏

默认&#xff1a; 对整个屏幕截图&#xff1a; PrintScreen 对活动窗口截图&#xff1a; AltPrintScreen 对任意矩形截图&#xff1a; ShiftPrintScreen 以上三个快捷键再加上Ctrl&#xff0c;就会默认复制截图到粘贴板 在系统设置里可以更改快捷键设置&#xff1a; 系统设置-硬…

Ubuntu设置快捷键截图

单击桌面右上角的设置然后点击系统设置&#xff1a; 单击键盘选项&#xff1a; 选择快捷键&#xff1a; 选择截图-复制选区截图到剪贴板&#xff0c;然后输入你想设置的快捷键&#xff1a; 这样方便多了&#xff0c;做个记录。

Ubuntu 自带截图工具快捷键盘

PrtSc – 获取整个屏幕的截图并保存到 Pictures 目录。 Shift PrtSc – 获取屏幕的某个区域截图并保存到 Pictures 目录。 Alt PrtSc –获取当前窗口的截图并保存到 Pictures 目录。 Ctrl PrtSc – 获取整个屏幕的截图并存放到剪贴板。 Shift Ctrl PrtSc – 获取屏幕的某个…

ubuntu 20.04截图快捷键

按鍵位置&#xff1a; 截屏键&#xff1a; Pirnt Screen截圖快捷鍵&#xff1a; Print Screen截取整个桌面Alt Print Screen截取选中的窗口––Shift Print Screen自由选区––Alt Print Screen截取选中的窗口––Ctrl Print Screen剪贴板整个桌面––Ctrl Alt Print …

Ubuntu截图软件flameshot命令行下载

截图软件flameshot命令行下载 一、安装二、命令行截图三、设置自定义快捷键 一、安装 sudo apt-get install flameshot二、命令行截图 flameshot gui三、设置自定义快捷键 设置——键盘快捷键—— “”