了解一下IO控制器与控制方式
IO控制器
CPU无法直接控制IO设备的机械部件,因此IO设备还要有个电子部件作为CPU和IO设备机械部件之间的“中介”,用于实现CPU对设备的控制。
 这个电子部件就是IO控制器,又称为设备控制器。CPU可控制IO控制器,IO控制器来控制设备的机械部件。
IO控制器的功能
- 接收设备CPU指令:CPU的读写指令和参数存储在控制寄存器中
 - 向CPU报告设备的状态:IO控制器中会有相应的状态寄存器,用于记录IO设备的当前状态。(比如1代表设备忙碌,0代表设备就绪)
 - 数据交换:数据寄存器,暂存CPU发来的数据和设备发来的数据,之后将数据发给控制寄存器或CPU。
 - 地址识别:类似于内存的地址,为了区分设备控制器中的各个寄存器,需要给各个寄存器设置一个特定的地址。IO控制器通过CPU提供的地址来判断CPU要读写的是哪个寄存器。
 
IO控制器的组成
CPU与控制器之间的接口(实现控制器与CPU之间的通信),IO逻辑(负责识别CPU发出的命令,并向设备发出命令),控制器与设备之间的接口(实现控制器与设备之间的通信)
 两种寄存器编址方式
 **内存映射IO:**控制器中的寄存器与内存统一编制,可以采用对内存进行操作的指令来对控制器进行操作。
 寄存器独立编制:控制器中的寄存器独立编制。需要设置专门的指令来操作控制器。
I/O控制方式
程序直接控制方式
CPU向IO模块发出读指令,CPU会从状态寄存器中读取IO设备的状态,如果是忙碌状态就继续轮询检查状态,如果是已就绪,就代表IO设备已经准备好,可以从中读取数据到CPU寄存器中(IO->CPU)读到CPU后,CPU还要往存储器(内存)中写入数据。写完后,再执行下一套指令。
 
CPU干预的频率:很频繁,IO操作开始之前、完成之后需要CPU的介入,并且在等待IO完成的过程中CPU需要不断的轮询检查。
 数据流向
- 读操作(数据的输入):IO设备->CPU->内存
 - 写操作(数据的输出):内存->CPU->IO设备
每个字的读写都需要CPU的帮助。
主要缺点和主要优点
优点:实现简单。在读写指令之后,加上实现循环检查的一些列指令即可。
缺点:CPU和IO设备只能串行化工作,CPU需要一直轮询检查,长期处于忙等状态,CPU利用率很低。 
中断驱动方式
因为IO设备速度很快,CPU处理速度很快,因此在CPU发出读写命令后,可将等待IO的进程阻塞,先切换到别的进程执行。当IO完成后控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序。这样就使得CPU与IO设备能够并行工作。
优点:与程序直接控制方式相比,在中断驱动方式中,IO控制器会通过中断信号主动报告IO已完成,CPU不再需要不停的轮询。CPU和IO设备可并行工作,CPU利用率得到明显提升。
 缺点:每个字在IO设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗很多的CPU时间。
 
DMA(直接存储方式)
与中断驱动方式相比,DMA方式有以下改进。
- 数据的传送单位是“块”。
 - 数据的流向是从设备直接放入内存,或者是从内存直接到设备。不在使用CPU作中间者。
 - 仅仅在传送一个或多个数据块的开始和结束时,才需要CPU的干预。
CPU在读写之前要指明要读入多少数据、数据要存放在内存中的什么位置、数据放在外部磁盘的什么位置。
DMA控制器会根据CPU踢出的要求完成数据的读写操作,整块数据的传输完成后,才像CPU发出中断信号。 

DR:暂存从设备到内存,或从内存到设备的数据。
MAR(内存地址寄存器):再输入时,MAR表示数据应放在内存中的什么地方,输出时MAR表示要输出的数据放在内存中的什么位置。
DC(数据计数器):表示剩余要读/写的字节数
CR(命令/状态寄存器):用于存放CPU发来的IO命令,或设备的状态信息。
CPU干预的频率:仅在传送一个或多个数据块的开始和结束时,才需要CPU的干预。
数据传送单位是以块为单位,每次读写一个或多个块(需要注意的是读写的只能是连续的块,且这些块读入内存后在内存中也必须是连续的)
 数据的流向也不再需要CPU干预。
优点:数据传输效率以块为单位,CPU的介入性进一步降低。CPU和IO设备的并行性进一步提升。
 缺点:CPU发出一条指令,只能读或写一个或多个连续的数据块。如果读或写的数据块不是连续存放的而是离散的,那么CPU要分别发出多条IO指令,进行多次中断处理才能完成。
通道控制方式
通道是一种硬件,可以理解为“弱鸡版的CPU”。通道只能执行一类通道指令。
 因为通道与CPU相比的话,CPU能够处理的指令的种类比通道多,也就是说通道执行的指令单一,他与CPU共用主机的内存。
具体处理过程:
 CPU将操作步骤告诉通道,通道程序会把操作的指令列在一个类似于“任务清单上”。然后剩下的事CPU就不参与了,等到通道把指令执行完后,发出一个中断,告诉CPU我处理完了,然后CPU在处理后续操作。
这时候的CPU就像一个每天忙碌的大老板,通道就是小组的组长之类的,老板很忙,把一些任务交给组长去做,做完后得汇报给老板。
使用这种方式CPU干涉的频率极低,通道会根据CPU的指示执行响应的通道程序,只有完成一组数据块的读写后才需要发出中断信号让CPU干预。
每次读写一组数据块。
优点:CPU 通道、IO设备可并行工作,资源利用率极高。
 缺点:实现复杂,需要专门的通道硬件支持。
总结

了解一下IO控制器与控制方式的更多相关文章
- 网络io控制器
		
网络io控制器 网络io控制器 ZLAN6842,ZLAN6844是8路远程网络IO控制器.含有8路DI.8路DO,8路AI输入.其中DI支持干节点和湿节点,带光耦隔离:DO为继电器输出,具有5A 2 ...
 - WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)
		
一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一) 小理论 WS2812B是一种智能控制LED光源,将控制电路 ...
 - ZeroMQ接口函数之 :zmq_proxy_steerable – 以STOP/RESUME/TERMINATE控制方式开启内置的ZMQ代理
		
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
 - I/O控制方式
		
I/O控制方式 在计算机系统中,CPU管理外围设备也有几种类似的方式: 1 程序查询方式 程序查询方式是早期计算机中使用的一种方式.数据在CPU和外围设备之间的传送完全靠计算机程序控制,查询方式的优点 ...
 - 操作系统-I/O(4)I/O控制方式
		
I/O控制的方式分为: 程序直接控制方式(最简单的I/O方式) • 无条件传送:对简单外设定时(同步)进行数据传送 • ...
 - JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作
		
1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...
 - JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理
		
1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...
 - RobotFrameWork接口项目分层及通用控制方式
		
1. 前言 上一篇文章介绍了在设计接口用例之前应遵守的设计规范,详见<RobotFramework接口设计规范>,当然读者公司的内部规范也不一定非得完全遵循笔者所提到的,适合自己公司内部的 ...
 - Android——UI和View——控制方式
		
控制方式 只用xml实现 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
 
随机推荐
- 【题解】「AT4266」[ABC113B] Palace
			
AT4266 [ABC113B] Palace 水题解*n translation 有 \(n\) 个地方,第 \(i\) 个地方的海拔为 \(H_i\),该地方的温度为 \(T-H_i \times ...
 - VMware虚拟机下Centos8 设置静态IP地址
			
缘起 我们在平时学习Redis.Nginx等分布式微服务的组件的时候,无法避免的需要用到Linux操作系统,而Linux操作系统的主机来源差不多就三种情况: 真实物理机 阿里云等云服务器 利用虚拟机 ...
 - 傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建
			
主要内容: 1.Docker与Kubernetes的关系 2.SpringBoot微服务的Docker镜像创建 3.Kubernetes本地环境搭建 一.Docker与Kubernetes的关系 在说 ...
 - Oracle 要慌了!华为终于开源了自家的 Huawei JDK——毕昇 JDK!
			
没错,自阿里.腾讯之后,华为也终于开源了自家的 JDK--毕昇 JDK! 免费!免费!免费!!! Oracle 要慌了? 毕昇 JDK 毕昇 JDK 是华为内部 OpenJDK 定制版 Huawei ...
 - docker 批量删除已经停止的容器
			
长期操作导致大量的容器堆积,如何对这些没有用的容器进行批量删除: 命令如下 : Docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]`
 - dataframe的一些用法
			
pandas中Dataframe的一些用法 pandas读取excel文件 pd.read_excel 前提是安装xlrd库 dataframe,numpy,list之间的互相转换 dataframe ...
 - Jmeter连接redis
			
介绍:现在有很多数据不是存储在数据库而是存储在Redis中 Redis数据库存储数据环境 不用每次都去数据库读取数据 可以有效的优化服务器性能. 下面介绍使用jmeter如何读取redis 一.首先创 ...
 - 栈的应用:表达式括号匹配检测(C)
			
问题说明: 假设数学表达式中允许包含两种括号:圆括号"()"和方括号"[]",嵌套顺序任意. 正确的嵌套模式:( [ ] ( ) ).[ ( [ ] [ ] ) ...
 - 是的,你没看错!Python可以实现自动化办公
			
是的,你没看错!Python可以实现自动化办公 公众号[伤心的辣条],如今越来越多的人加入到学习Python的队伍当中,尤其是对于很多职场人来说,不管你是程序员还是非程序员,Python已经为很多职场 ...
 - Python:值得学习的二十个技巧
			
本文为大家介绍20个值得记住的 Python 技巧,可以提升您编程技巧, 并为您节省大量时间. 在平常编程过程中,以下技巧大多非常有用. 1 字符串反转 使用切片反转字符串. str1="q ...