I/O控制器 和 DMA控制方式

一 IO控制器

1.1 I/O控制器是什么

IO设备主要包括机械部件和电子部件。磁盘、光盘、鼠标、键盘、显示器、打印机等都属于机械部件;磁盘控制器、显卡、网卡等属于电子部件。CPU是无法直接操作机械部件的,只能通过电子部件间接的控制。这些电子部件就叫做I/O控制器,和CPU、主存之间通过总线通信。如图示:
在这里插入图片描述
在这里插入图片描述

1.2 I/O控制器有哪些功能和组成部分

1.2.1 控制器功能

第一:传输CPU指令,接收来自CPU的指令
第二:缓冲和传输数据
第三:选址的功能,根据地址获取本次需要参与I/O的设备
第四:向CPU报告设备的状态

1.2.2 I/O控制器组成部分

根据控制器功能,我们可以知道控制器主要需要哪些部分组成:
指令(控制)寄存器:传输指令
数据寄存器:缓冲和传输数据
状态寄存器:反应设备的状态
设备选择电路:选址的功能
如图所示:

在这里插入图片描述

二 IO控制方式

2.1 IO程序查询控制方式

2.1.1 程序查询的控制方式下I/O控制器最主要组成部分

第一:数据缓冲寄存器 (缓冲要输入到主存或者输出到设备的数据)
第二:状态寄存器(控制I/O就绪状态、设备状态)
第三:控制寄存器(接收CPU指令)
第四:设备选择电路(从地址线获取地址,判断是否是需要打开的设备)
第五:I/O控制逻辑
第六:控制器和设备的接口

2.1.2 程序查询控制方式下的流程(读)

在这里插入图片描述

第一:设备选则电路从地址总线获取要打开的设备的地址,然后和设备选择电路连接的设备进行比较,如果相同说明这次启动就是连接在这个电路上的外部设备,
设备选择电路最后把结果发送到控制寄存器
第二:CPU将读指令发送到控制寄存器,然后根据设备选择电路发送的信号判断是否启动设备
第三:I/O控制器此时将状态寄存器的I/O就绪状态置为0,表示没有就绪;将设备状态置为1,表示设备已经就绪,可以开始读取数据了
第四:设备考试工作,读取数据,然后返回给I/O控制器,并且向I/O控制器报告设备的状态,比如是否已经读取完了
第五:I/O控制器将数据拷贝到数据寄存器;
第六:I/O控制器将更新状态寄存器为就绪状态,之前I/O状态时未就绪,CPU一直在 不断的轮询这个状态,现在这个状态置为1,表示数已经准备好了,可以取数据了;如果读取完了,设备的状态需要置为0
第七:CPU从数据寄存器拷贝数据到CPU的寄存器中
第八:CPU将寄存器中读取的数据送到主存中
第九:如果还有继续读取的数据,则CPU继续发送一条读指令

2.1.3 程序查询方式优缺点

优点: 控制简单
缺点:CPU频率太高,而且轮询等待,如果要读写的数据很大,那么CPU将会被长时间占用,没有发挥CPU的性能

2.2 程序中断控制方式

2.2.1 程序中断控制方式下I/O控制器的组成部分

和程序查询方式相比,就只是多了中断机构而已,所以它主要包括七个部件:
第一:数据缓冲寄存器 (缓冲要输入到主存或者输出到设备的数据)
第二:状态寄存器(控制I/O就绪状态、设备状态)
第三:控制寄存器(接收CPU指令)
第四:设备选择电路(从地址线获取地址,判断是否是需要打开的设备)
第五:中断控制逻辑(数据写完或者读取结束,向CPU发送中断请求)
第六:I/O控制逻辑
第七:控制器和设备的接口

2.2.2 程序中断控制方式下工作流程(读)

在这里插入图片描述

第一:I/O控制器的设备选择电路从地址线获取要操作的设备的地址,并且和设备选择电路打开的设备进行比较,将比较结果传输给控制寄存器
第二:控制器寄存器从控制线收到CPU的指令,然后和设备选择电路传输过来的结果进行判断是否应该打开设备,如果结果相同才会打开设备
第三:启动之后,I/O逻辑会将设备状态置为1,将I/O就绪状态置为0
第四:当数据准备好了,通知I/O控制器
第五:I/O逻辑将数据放到数据缓冲区寄存器
第六:将I/O就绪状态置为1,表示已经就绪
第七:通过中断控制逻辑向CPU发出中断信号
第八:CPU在每一个指令执行完毕,会检查有无中断信号;现在发现有中断请求,则执行中断隐指令,保存现场,然后执行对应的中断服务程序。判断I/O就绪状态,如果是I/O就绪则将数据缓冲区寄存器的数据传输到CPU寄存器中
第九:CPU将寄存器中的数据写入到内存

CPU写数据的时候,因为写设备的速度远低于写主存或寄存器的速度,有可能导致COU等待,所以在CPU发送完写指令后,也去干别的事情,等数据写完了然后还是需要中断控制逻辑发送中断请求,才能确定数据已经写入外设了,要你不然CPU还是得不断轮询状态寄存器才能知道是否已经成功写入外设了。

2.2.3 程序中断控制方式的优缺点

优点:和程序轮询方式,减少了CPU的干预频率,有利于发挥CPU的性能
缺点:控制方式增加中断控制,比程序轮询方式复杂些;并没有很好的解决的CPU干预的问题,因为数据量大的时候会频繁发送中断请求,这样CPU还是会很多时间来处理中断请求

2.3 IO控制方式之DMA方式

2.3.1 什么是DMA? 和传统控制方式相比,有什么优点或者改进?

2.3.1.1 什么是DMA?

DMA: 是直接内存访问(Direct Memory Access)的缩写, 主要用于对设备的控制。
我们知道程序查询控制方式和程序中断控制方式都是特别需要依赖CPU,如果对于网络或者磁盘等有大量的数据输入输出,那么势必会占用大量的CPU时间,那么CPU就没有发挥其最大的性能,如果把CPU从IO等待或者数据传送的过程中解放出来,那么肯定不会影响CPU还能提升性能。那么DMA控制就可以实现。CPU只需要发送指令和结束的时候处理中断服务程序就可以,不需要参与I/O准备和数据传输,减轻了CPU压力,也加快了数据的传输速度。因为少了一层CPU拷贝。

2.3.1.2 和传统控制方式相比,有什么优点或者改进?

在这里插入图片描述

2.3.1.2.1 CPU使用频率

程序轮询: 该控制方式导致CPU会一直阻塞等待I/O就绪,导致CPU使用的使用频率很高,而且还很低效率;
程序中断:该控制方式只有在发送I/O指令和响应中断请求的时候会使用CPU,在I/O就绪等待的这段时间不会使用CPU,使得CPU的效率可以提升一些,但是遇到数据量大的时候,依然会出现CPU使用频繁的情况,影响CPU性能;
DMA控制: 该控制方式只需要发送I/O指令和结束的时候才需要CPU干预

2.3.1.2.2 数据传输单位

程序轮询: 按照字传输
程序中断: 按照字传输
DMA: 按照块传输

2.3.1.2.3 数据流向

程序轮询: 主存和设备之间需要通过CPU操作数据。比如读数据,CPU需要先从设备读取到本地寄存器然后再写入内存
程序中断: 主存和设备之间需要通过CPU操作数据。比如写数据,CPU需要先读取内存的数据,然后放到寄存器,然后才发送到IO控制器中的数据缓冲区寄存器
DMA: 主存和设备之间不需要CPU操作数据

2.3.2 DMA与主存交换数据的二种方式

2.3.2.1 停止CPU对主存的访问

只要设备要和主存进行数据交换,CPU就会放弃总线的控制权,放弃了对主存的访问。总线的控制权和主存的访问权交给DMA接口。
在这里插入图片描述

优点:控制简单,对于大量数据访问时比较友好
缺点:CPU并不能充分发挥对主存利用率。在传输间隔或者数据准备期间,DMA并没有访问主存,但是依然占用着主存的使用权。

2.3.2.2 周期挪用

如果DMA接口准备好了数据传输,那么就通过申请建立总线使用权,占用一个或则几个内存访问周期,完成数据的传输。在数据准备阶段或者说数据传输间隔,DMA接口放弃对总线的使用权,放弃对主存的访问权。这时候CPU是可以取使用总线,访问主存的。
在这里插入图片描述

2.3.3 DMA接口的功能和组成

2.3.3.1 DMA接口的功能

第一:向CPU申请DMA传输
第二:处理总线控制权的转变
第三:管理系统总线、控制数据传输
第四:确定数据传输的首地址和长度
第五:DMA结束,给出操作结束信号

2.3.3.2 DMA接口的组成

第一:DMA控制逻辑
第二:中断机构
第三:主存地址寄存器(MAR),保存主存或者首地址的寄存器
第四:设备的地址寄存器(DAR),保存设备地址的寄存器
第五:数据缓冲区寄存器,存储读写的数据
第六:传送的长度计数器(WC),统计传输了多少数据

2.3.4 DMA方式的I/O控制方式

主要分为3个处理阶段:预处理、数据传送、后处理

2.3.4.1 预处理

第一: 设置DMA传输方向,时主存到设备还是设备到主存
第二:设置设备的地址到DAR中,和哪一个设备进行数据传输
第三:设置主存的开始地址到MAR,主存的什么地址需要开始和设备进行数据传输
第四:设置字数到WC,表示传输的数据量有多大
第五:启动设备

2.3.4.2 数据传送

第一:CPU继续执行I/O指令后面的指令
第二:真正的数据输入输出由DMA接口来完成
第三:数据准备好后,判断是否可以占用总线或者主存,从而决定是否传输
#1 不允许传(如果CPU正在使用总线或者主存,则DMA接口就只能等)
则继续发送DMA请求
#2允许传(可以占用总线和主存的使用权)
MAR中的主存地址发送到总线(数据要传送到哪里)
DMA将数据传输到主存
传输完之后,根据主存新的地址修改MAR中的主存地址,以确定下一次传输到主存什么位置
修改WC计数器中的值,剩余数据的量是多少?
第四:根据WC计数器中的值,判断DMA传输是否完成,如果没有完成,则继续向CPU发出DMA请求
第五:如果WC字计数器中的值没有量了,则表示已经传输完了,所以需要通过中断机构向CPU发起中断

2.3.4.3 后处理

第一:CPU接收到DMA的中断请求,开始进行中断处理,执行中断服务程序
第二:CPU中断返回继续执行主程序

2.3.5 DMA控制方式的流程(读数据)

在这里插入图片描述

#1 CPU执行I/O指令,开始进行预处理操作,保存主存地址到将MAR中、设备地址到DAR中、要读取的字的数量、启动设备
#2 DMA开始工作,准备数据
#3 设备数据准备好了之后,会将数据传输到数据缓冲器寄存器中
#4 然后设备会通知DMA接口数据已经准备好,向DMA控制逻辑发送DREQ(设备请求信号)
#5 DMA控制逻辑向CPU提出总线和主存占用请求(HRQ)
#6 CPU在允许的情况下,会给出DMA 的总线和主存占用请求(HRQ)的应答HLDA, CPU此时会放弃对总线和主存的使用,DMA开始控制总线和主存
#7 DMA控制逻辑获取MAR中的主存地址,发送到地址总线
#8 DMA控制逻辑给外部设备一个应答信号DACK,表示已经开始数据传输
#9 DMA控制器发出对主存的写指令,同时数据缓冲器寄存器(DBR)的数据需要通过数据线发送到数据总线
#10 传输完数据之后,DMA控制逻辑需要修改主存地址和字计数器中的大小
#11 如果字计数器值没有溢出,则继续发送DMA请求;否则字计数器发出溢出信号,会发送给中断机构
#12 中断机构向CPU发出中断请求
#13 CPU收到中断请求信号,开始执行中断处理程序,进行后处理,比如校验主存的数据是否正确,是否继续使用DMA等等

2.3.6 DMA控制的优缺点

优点:减少了CPU干预的频率,提升了CPU性能和传输效率
缺点:控制复杂,需要DMA接口获取总线和主存使用权

网络硬盘数据的传输量很大,如果都需要CPU来传输的话,那么势必会影响CPU的效率。

三 IO控制方式比较

3.1 流程比较

3.1.1 程序查询控制方式

在这里插入图片描述

3.1.2 程序中断控制方式

在这里插入图片描述

3.1.3 DMA控制方式(周期挪用)

在这里插入图片描述

3.2 对CPU的干预频率

3.2.1 程序查询控制方式

需要CPU不断轮询I/O控制器的状态寄存器中状态,而且还需要CPU传送数据,所以CPU干预频率是最高的。

3.2.2 程序中断控制方式

在发送I/O指令和响应中断进行数据传输需要CPU干预,在I/O准备阶段不需要CPU干预,比程序查询方式干预的少一些。但是如果数据量很大,CPU也需要处理大量的中断请求,所以效果也不是特别好

3.2.3 DMA控制方式

只需要在程序开始发送指令和程序结束的时候需要CPU处理中断,I.O准备阶段和数据传送都不需要CPU干预,所以CPU干预的最少

3.3 数据传输单位

程序查询和程序中断控制方式按照字传送;DMA按照块传送

3.4 数据流向

程序查询和程序中断控制方式:
主存 > CPU > 设备 或者 设备 > CPU > 主存
DMA控制方式
主存 > 设备 或者 设备 > 主存
DMA 少了一层CPU拷贝,所以效率拷贝,这也就是零拷贝的原理

四 DMA copy 和 CPU copy比较

程序查询和程序中断控制方式:
主存 > CPU > 设备 或者 设备 > CPU > 主存
CPU需要先把主存中数据拷贝到寄存器,然后在将寄存器中的数据发送到I/O控制器中的数据缓冲区;或者CPU先从数据缓冲区把数据传送到CPU寄存器,再将寄存器中数据拷贝到主存。在主存和设备之间有一个CPU拷贝的过程。

DMA控制方式
主存 > 设备 或者 设备 > 主存
DMA 少了一层CPU拷贝,所以效率拷贝,这也就是零拷贝的原理。

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
这是使用NuMicro M480系列微控制器在OLED萤幕上显示静态与动态资讯的电竞参考设计。NuMicro M480系列微控制器强大的运算力所赐,在OLED萤幕上除了显示一般静态资讯外,如环境温度、系统状态、显示卡风扇转速等,更可以即时解码GIF动态影像,在OLED萤幕上流畅地播放动画。 此参考设计中包含了emWin GUI资料库,搭配易用的视窗软体,即可快速勾勒出精致的图形界面,让整体OLED画面看起来更专业。此外还内置字型库用以输出高品质文字。 NuMicro M480系列微控制器基于Arm Cortex-M4内核,带有数位讯号处理指示(DSP)与浮点数运算单元(FPU),主频最高可达192 MHz,能够快速解码GIF动态影像,多达512KB嵌入式快闪记忆体与160KB 嵌入式记忆体,可用以储存字型库及图型快取(Cache)。除了本身内部记忆体外还支持外部SPI Flash的SPIM通讯界面,最大可扩充容量到32Mbytes并且可以设定为直接记忆体映射模式(Direct Memory Map Mode)以及32Kbytes记忆体快取来加速存取速度,让OLED萤幕能流畅地播放动画。 …… ► 核心技术优势  高达192 MHz Cortex-M4及DSP与FPU  支援32KB快取记忆体(Cache Memory)  外接SPI快闪记忆体最大32MBytes,支援标准的1位、2位和4位元I/O传输模式,最高达96Mbit/s  支援CPU直接从SPI快闪记忆体读取(Direct Memory Map Mode)  支援高速GIF动态点阵图解码(LZW )  支援高速BMP、PNG、JPEG解码  支援各种客制化OLED显示幕来动态播放各种资讯  内建多样字型字库 ► 方案规格  NuMicro M484 (32-bit Arm:registered: Cortex:registered:-M4F)内建DSP指令集、记忆体保护单元  高达192 MHz工作主频  内建512 KB Flash/160 KB SRAM  高达96 MHz SPI 通讯界面  16通道周边DMA控制器  12个增强型PWM带有12个16位元计时器  USB 2.0高速装置/主机/OTG控制器及内置PHY  USB 2.0全速装置/主机/OTG控制器及内置PHY  多达6个低功耗UART界面(17 Mbps),包含2个LIN界面  1个四线SPI界面(可达48 MB/s)  2个USCI界面,支援可程设UART/SPI/I²C  3个I²C界面(可达3.4 Mbps)  2个SD卡控制器(50MHz)  支持W25Q32 SPI Flash  支持单色2” OLED(ELW2106AA)面板256 x 64画素  电压范围:1.8V至3.6V  温度范围:-40°C至+105°C 方案来源于大大通。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值