I/O的控制方式——查询,中断,dma

2023-05-16

早期,I/O串行,查询方式。
发展,I/O并行,两种方式其一是中断方式,其二是dma方式,使得外部设备能直接与主存储器信息交换,减轻了cpu的工作量。
技术继续发展,出现通道结构,实质上为高性能的dma控制器(微处理器,dma方式的进化),目的在于让I/O自己完成输入输出。
技术再发展,出现I/O处理机,实质上为更高性能的处理器(dma再进化),成为小型的cpu系统,具有自己的寄存器,内存,指令集。


注意区别,I/O指令,是属于中央处理器的指令集,比如8086的in,out指令。
                通道指令,通道自身微处理器的指令。编写控制通道的输入输出程序,是由操作系统的开发者完成的。现代的I/O系统, 遇到中央处理器的I/O指令,不象早期那样直接去控制输出与输入,而是去调用通道程序。
换句话说,现代计算机系统中,cpu的I/O指令仅仅发了一个命令信号,而实际工作是由通道(微处理器)自己的程序来完成的。
      
端口概念:接口当中的寄存器。


i/o与主机的联系:
1.  i/o设备编址方式

      ①统一编址: 在主存地址中划出一部分作为端口地址,这叫I/O映射(由硬件完成)。

                           优点可以简化指令集,用一个指令既可以与主存通信,也可以与i/o端口通信。

                           这种方式是通过划分地址的不同,来区分访问主存与I/O。


      ②不统一编址: x86架构,有专用的I/O指令,比如与主存通信是move,I/O通信是in,out。




2. i/o设备控制方式
    ①查询方式: 又分为传统查询(串行),cpu踏步等待。

                       轮询方式(局部并行),cpu以一定的周期按照次序去查询每一个外设,看它是否有数据输入或输出   。

           

          就好像我们在网上进行了购物,传统查询方式工作机制是:从付款开始后,我们就站在小区门口等待,一直到快递公司把货物送到手上,这个期间什么事情都不做。

          显然,传统查询太蠢,于是改进为轮询方式,工作机制是:从付款开始后,我们每隔一段时间(比如4小时),去小区门口查看一下,如果货物到了就拿取,没到的话继续回来做其他事情。

          比起传统查询,轮询方式的效率提高多了。

    ②中断方式: 局部并行

           

          中断方式比起轮询来说,又改进了一步,工作机制是:从付款开始后,我们正常做其他事情,快递公司会主动给我们打电话(中断信号),报告货物已到,接到电话后我们暂停当前的工作,去小区门口领取货物,然后回来接着做剩余的工作。

          显然,日常生活中,大部分人使用的就是中断方式。

     ③ dma方式:完全并行

          

          dma是中断方式的更好改进,工作机制是:我们命令秘书去网上购买商品,同时让秘书负责商品的收取,整个过程基本上不需要自己参与,可以完全专注于当前工作。

——————————————————————————————————————

无论是传统查询,轮询,以及中断,都需要cpu自己完成额外工作。
而dma彻底解放了cpu与I/O通信的额外负担。
dma方式下cpu让出了总线(地址总线,数据总线,控制总线),暂时由dma控制器来接管总线,控制器就能直接完成i/o设备与主存的数据交换。

如果恰好cpu此时需要访问主存,那它不得不暂停一个存储周期(不是指令周期),如果只需要访问寄存器或者cache,那cpu就不会有任何停顿。

其效率比较图如下:

   


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I/O的控制方式——查询,中断,dma 的相关文章

  • DMA 中断 查询三者的区别

    1 DMA xff08 DIRECT MEMORY ACCESS xff09 即直接存储器存取 xff0c 是指外部设备不通过CPU而直接与系统内存交换数据的接口技术 要把外设的数据读入内存或把内存的数据传送到外设 xff0c 一般都要通过
  • 使用STM32CubeMX 配置ADC+DAC(DMA)感受

    STM32CubeMX使用感受 开篇先说一下个人使用STM32CubeMX的感受 xff0c 第一点的感受就是STM32CubeMX加速了开发流程 xff0c ST官方的库写的很好 xff0c 在使用之前 xff0c 开发流程一般是打开如正
  • 关于RS485的DMA发送,以及EN使能脚的自动切换

    一 电路设计 1 低成本非隔离 xff1a 3 3v系统同样 xff0c 将5V改为3 3即可 同时采用TX连接三极管 xff0c 实现三极管驱动RS485芯片的EN使能脚 xff0c 从而省下一个IO口控制 隔离只需要将两个信号线用光耦隔
  • STM32 DMA传输出错的防错机制

    一 DMA 中断 对于每个 DMA 数据流 xff0c 可在发生以下事件时产生中断 xff1a 达到半传输 xff08 每次传输都会触发 xff0c 属于正常触发 xff09 传输完成 传输错误 FIFO 错误 xff08 上溢 下溢或 F
  • STM32H7A3 ADC+DMA使用问题

    问题1 xff1a DMA采用半字传输16位ADC值 xff0c 用于存储ADC数据的数组一定是采集数的两倍 xff0c 否则会产生ADC溢出的错误中断HAL ADC ErrorCallback xff0c 从而无法进入ADC采集完成中断H
  • DMA原理,步骤超细详解,一文看懂DMA

    文章目录 什么是DMA DMA的基本定义 DMA定义 xff1a DMA传输方式DMA传输参数DMA的主要特征STM32少个DMA资源 xff1f DMA工作系统框图DMA传输方式仲裁器DMA数据流 xff08 仅存在于STM32F4 M4
  • STM32 串口 DMA 数据读取(详细代码)

    最近重新开始学32 xff0c 搞到串口 DMA 的时候 xff0c 数据读取卡了很长一段时间 xff0c 最终 xff0c 功夫不负有心人终于搞出来了 在此以记录一下 xff0c 方便以后查询使用 在调试的过程中也遇到了很多bug xff
  • ((硬件spi+dma)+模拟spi)驱动LCD5110

    span class hljs preprocessor ifndef spi dma h span span class hljs preprocessor define spi dma h span span class hljs pr
  • s3c6410 DMA

    S3C6410中DMA操作步骤 xff1a 1 决定使用安全DMAC SDMAC 还是通用DMAC DMAC xff1b 2 开始相应DMAC的系统时钟 xff0c 并关闭另外一组的时钟 xff08 系统默认开启SDMA时钟 xff09 x
  • STM32使用串口空闲中断(IDLE)和 DMA接收一串数据流

    STM32使用串口空闲中断 xff08 IDLE xff09 和 DMA接收不定长数据 方法一 使用宏定义判断IDLE标志位 空闲的定义是总线上在一个字节的时间内没有再接收到数据 xff0c USART IT IDLE空闲中断是检测到有数据
  • STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式)

    STM32使用串口空闲中断接收不定长数据帧 USART IT IDLE使用 xff08 不使用DMA方式 xff09 前言串口空闲中断介绍清中断方法串口中断处理函数串口中断用到的全局变量定义串口初始化 xff08 使能接收中断 空闲中断 x
  • DMA的补充笔记

    DMA有两个总线 xff1a 1 DMA存储器总线 xff1a DMA通过该总线来执行存储器数据的传入和传出 2 DMA外设总线 xff1a DMA通过该总线访问AHB外设 xff08 AHB主要是针对高效率 高频宽以及快速系统模块所设计的
  • STM32 DMA正常模式等待传输完成和开始下一次传输

    选择DMA的正常模式 xff0c 即DMA只传输一次 如果当传输完一次后 xff0c 还想再传输一次 xff0c 就需要重启DMA xff1a DMA Cmd DMA1 Channel6 DISABLE 重新设置源地址 重新设置目的地址 重
  • 在EBAZ4205 zynq7010上运行AXI_DMA中断回环测试

    在EBAZ4205 zynq7010上运行AXI DMA loop interrupt 整体的布局图 这是上面的一张接口图 下面对每个模块附上截图 AXI DMA的输出mm2s introut s2mm introut接到PS系统的中断触发
  • STM32 进阶教程 15 - 串口DMA收发

    前言 串口操作相信大家一定很熟悉 如果你已经会串口的收发数据 并可以灵活使用轮询及中断方式对串口进行数据收发 那么恭喜你 学完本节内容后 也将可以学会串口的更高级操作方式 DMA方式 DMA操作串口可以大大减轻MCU的负担 同时也可以加快数
  • STM32CubeMX—串口空闲中断+DMA接收

    一 实验说明 实验平台 STM32F103C8T6 实验内容 使用串口一空闲中断结合DMA 完成不定长数据接收 STM32的串口接收数据的方式 1 轮询接收 所谓轮询 就是在主函数中判断接收完成的标志位 举个不太恰当例子 就比如 此时你正在
  • GD32F4xx MCU ADC+DMA 多通道采样

    1 GD32F4xx ADC GD32F4xx 的12位ADC是一种采用逐次逼近方式的模拟数字转换器 1 1 主要特征 可配置12位 10位 8位 6位分辨率 ADC采样率 12位分辨率为2 6MSPs 10位分辨率为3 0 MSPs 分辨
  • arm64 上的 Linux:从 mmapped 相干 DMA 缓冲区发送数据时,sendto 导致“未处理的故障:对齐故障 (0x96000021)”

    我正在构建一个基于配备arm64 CPU的UltraScale FPGA的数据采集系统 数据通过DMA传输到RAM 驱动程序中的 DMA 缓冲区保留如下 virt buf i dma zalloc coherent pdev gt dev
  • 分配大的 DMA 缓冲区

    我想分配一个大的 DMA 缓冲区 大小约为 40 MB 当我使用dma alloc coherent 它失败了 我看到的是 cut here WARNING at mm page alloc c 2106 alloc pages nodem
  • glBufferSubData什么时候返回? [复制]

    这个问题在这里已经有答案了 我想将一个非常大的内存块的内容传输到足够大的 GPU 缓冲区 然后立即更改 CPU 上的内存内容 伪代码是这样的 glBindBuffer very large buffer glBufferSubData ve

随机推荐

  • 常见硬件接口汇总(未完待续)

    1 UART 通用异步收发器 xff0c 用于收发数据的串并转换 2 I2C 双线串行接口 3 I3C 4 SCI SIM卡接口 xff0c 接在APB总线上 xff0c 用于与外部读卡器通信 实际也是串并转换的通信方式 5 CSI 6 P
  • 芯片的ATE测试简介

    ATE xff1a Automatic Test Equipment xff0c 即自动测试设备 xff0c 它用于芯片大规模生产测试 xff0c 保障稳健 xff08 质量 成本和进度 xff09 的供应 ATE测试基本的覆盖理念 xff
  • Android发展历程

    发展历程 2003年10月 xff0c Andy Rubin等人创建Android公司 xff0c 并组建Android团队 2005年8月17日 xff0c Google低调收购了成立仅22个月的高科技企业Android及其团队 安迪鲁宾
  • Android系统源码目录详解

    关于源码的阅读 xff0c 你可以访问 xff1a http androidxref com 我们要先了解Android系统源码目录 xff0c 为后期源码学习打下基础 当然 xff0c 最好是将源码下载下来 下载源码可以使用清华大学开源软
  • 使用Iperf工具测试WiFi的吞吐量

    1 windows 上测试网路吞吐量工具 对于window测试网络吞吐量的工具 http download csdn net download leekwen 3427386 iperf windows版测试软件 针对wifi性能进行测试
  • C++封装的HTTP和HTTPS的接口

    记录下http和https的post方法 在C 43 43 中实现 来源无从考究了 xff0c 这里记录一下 http 的post 方法 BOOL HttpPostToBusinessServer LPCTSTR serverAddr st
  • (*((volatile unsigned long *) 0xE0028000)) 作用小解

    define IO0PIN volatile unsigned long 0xE0028000 no in lpc210x 以此句为例 简述如下 与51单片机的头文件 lt reg51 h gt 类似 在ARM处理器中 也必须有自己的寄存器
  • (M052)利用PWM波实现LED灯亮度调节

    include lt stdio h gt include lt stdint h gt include 34 M051 h 34 include 34 Register Bit h 34 include 34 Common h 34 in
  • 网络调试助手TCP server不能成功连接

    正文 xff1a 在使用网络调试助手时 xff0c 想一个建立TCP server xff0c 一个建立TCP client xff0c 两者之间进行通信 xff0c 打开网络调试助手其默认读取本地IP地址 xff0c 而端口号默认为808
  • 单片机 GSM 模块应用

    如果你只要发送英文而已 xff0c 那你很幸运 xff0c 因为仅仅为了发送个字符而已是很简单的 TEXT模式满足你的要求 xff0c 但是不爽的是 xff0c 我的上司要求我要中文字符一起混发 xff0c 还好有unicode xff0c
  • OSInit()简介

    在uC OS II的学习中 xff0c OSInit 是一个重要的函数 xff0c 它在OS应用中的void main 函数中首先被调用 xff0c 是OS运行的第一个函数 如下程序 xff0c 它完成各初始变量的初始化 xff0c 建立任
  • OSStart()函数简介

    多任务的的启动是通过调用OSStart xff08 xff09 实现的 xff0c 而在启动uc os之前至少需要建立一个应用任务 OSStart xff08 xff09 函数源码 void OSStart void INT8U y INT
  • SMS编码之PDU – 接收短信篇

    上一篇文章简单介绍了下收发短信需要用到的AT指令 xff0c 这篇文章详细分析SMS编码中的PDU编码 首先我用测试手机向短信猫中的sim卡发送了两条短信 xff0c 内容分别为 xff1a Hello World Hello World
  • PDU短信发送与接收格式分析

    一 PDU发送和接收格式分析 PDU是大多数手机短信通讯的核心 xff0c 仅有少数手机只支持Text模式 PDU模式比起Text模式可以提供能为强大的功能 xff0c 但其编码较Text模式困难 无论哪种模式 xff0c 我们都可以通过A
  • ucos OSTimeDly

    来源 xff1a http blog sina com cn s blog 5f9b3de40100e182 html OSTimeDly 在Task中 xff0c 一般执行一段时间之后调用OSTimeDly推迟一段时间再继续运行 xff0
  • WinCE中断结构分析

    以前写的原创博文 xff0c 这里放一份 前一段时间研究了一下WinCE下的中断结构 xff0c 整理了一下 xff0c 希望与大家讨论 最下面有PDF版本下载 xff0c 便于保存 Windows Embedded CE 中断结构分析 关
  • Google chrome 中文版下载

    Google release了自己的浏览器Chrome xff0c 大家可以试试看 xff0c 我觉得还不错 xff0c 对Web2 0的支持还好 xff0c 不知道安全性如何 我发现看tudou和youku等视频有问题 内存占用太大了 x
  • (下载)WinCE注册表编辑器(PC端)

    可以在PC上通过ActiveSync来查看 xff0c 修改device端的注册表 xff0c 方便调试 http download csdn net source 749005 注 xff1a 本人提供的下载均不要资源点
  • (下载)WinCE镜像传输工具ESHELL

    WinCE镜像传输工具ESHELL 使用这个可以不用装PB也可以传输镜像 xff0c 其实就是一个TFTP的传输 xff0c 适用于CE5 xff0c CE6 http download csdn net source 835336 不用资
  • I/O的控制方式——查询,中断,dma

    早期 xff0c I O串行 xff0c 查询方式 发展 xff0c I O并行 xff0c 两种方式其一是中断方式 xff0c 其二是dma方式 xff0c 使得外部设备能直接与主存储器信息交换 xff0c 减轻了cpu的工作量 技术继续