目录
- 知识框架
- No.0 引言
- No.1 输入输出系统
- 一、基本概念
- 二、I/O控制方式
- 1、主机如何与I/O设备进行交互?
- 2、CPU是如何通过I/O接口与外设交互的
- 3、如何判断读入的数据有没有被输入完成呢?
- 4、对于快速I/o设备,如“磁盘”,每准备好一个字就给CPu发送一次中断请求,会导致什么问题?
- 5、对于大型商用的DMA方式还是比较累对于CPU;
- 三、外部设备
- 1、输入设备
- 2、输出设备
- 3、外存设备
- 四、IO接口
- 1、IO接口的作用
- 2、IO接口的结构和工作原理
- 3、IO端口
- 4、IO接口的分类
- 五、IO控制方式DMA方式
知识框架
No.0 引言
这一章节和 操作系统 的最后一章节 是有很强的联系的;
操作系统:更多的讨论的是输入输出系统的软件部分,如何管理这些输入输出设备。
计算机组成:更多的讨论的是硬件的实现。
No.1 输入输出系统
一、基本概念
“I/O”就是“输入/输出”( Input/Output)
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备
- 鼠标和键盘:为输入设备,
- 显示屏和打印机:为输出设备。
- 而对于光盘,硬盘这些既可以输入又可以输出的的设备;也可称呼为外存设备。反正都可以。
- 也就是说自己安装的那个固态硬盘也是外部设备,然后还有那个接口也就是I/O控制器。
IO系统:一般来说,I/o系统由I/o软件和I/o硬件两部分构成。
1:I/О硬件包括外部设备、I/O接口、IO总线等。
2:I/O软件包括驱动程序、用户程序、管理程序、升级补丁等。
通常采用IO指令和通道指令实现主机和IO设备的信息交换。
(IO指令):IO指令是CPU指令中的一部分
操作码+命令码+设备码
操作码:识别是不是IO指令,与加减乘除进行区分
命令码:指明了 IO设备对其的具体操作
设备码:指明了对某个设备进行操作。
注:I/o指令与普通指令格式略有不同,操作码指明了CPU要对IO接口做什么,命令码指明了Io接口要对设备做什么
(通道指令):通道能够识别的指令:
通道程序提前编制好放在主存中
在含有通道的计算机中,CPU执行I/o指令对通道发出命令,由通道执行一系列通道指令,代替cPU对I/o设备进行管理
二、I/O控制方式
1、主机如何与I/O设备进行交互?
也就是说计算机的主机如何与外部设备进行交互呢?
其实也就是前面说的那些 总线结构:
当然下面所说的“主机”也差不多就是 CPU+主存。
如下图的单总线结构:通过I/O接口进行 与设备n 进行交互,
- I/O接口:又称I/O控制器(I/O Controller)、设备控制器,负责协调主机与外部设备之间的数据传输
- 例子就是:买了键盘之后,通过USB连接线查到USB接口处。
- 其实USB插口的背后就是有一个小芯片,用来控制主机与外部设备键盘的数据交互。
- 那么电脑可以连接的外部设备多种多样,对应不同的接口所用到的芯片即I/O控制器是不同的。
- I/O控制器多种多样,也会制定相应的标准,如:用于控制usB设备的IO接口)用于控制SATA3.0确盘的IO接口等
- 而通常来说呢,那个芯片会被集成在 你的 主板上, 与你的CPU、主存等进行连接。
2、CPU是如何通过I/O接口与外设交互的
接下来的解释 是以:键盘 为举例子;
char i;
scanf(“%c”,&i);
printf(“i=%c/n”,i);
也就是说 执行到scanf(“%c”,&i);这条语句的时候,CPU会等待输入设备的输入。
通过键盘 输入的时候:scanf(“%c”,&i);从键盘上敲击一个字符,然哈把这个键盘敲击的值传递、
下面是CPU具体做了什么:
1:首先CPU通对控制总线向这个io接口发出读入的命令’
2:同时通过地址总线指明它要读的是哪一个设备。同时地址总线也可以指明此次读入的数据应该放在 哪个寄存器里
3:CPU判断IO操作是否完成:三个查询方式;查询对应的状态寄存器来判断。
4:然哈通过数据寄存器通过数据总线取走数值。
5:完成了:数据流:键盘→IO接口的数据寄存器->数据总线→CPU某寄存器–>主存(变量i的对应位置)
相当于CPU当了中转站,作为 输入设备和主存的中转站了。
- IO控制器部件里面的三大寄存器;
- 控制寄存器:反映了某个外设它具体需要做什么动作,需要让它做什么。
- 数据寄存器:暂存来往的数据,入和出。
- 状态寄存器:反映了当前外设的状态,是否在忙碌,是否完成了工作(比如打印机)、是否就绪等等状态。
3、如何判断读入的数据有没有被输入完成呢?
那么你就要判断 该IO设备的 操作是否已经完成? 通过 IO控制器里面的 状态寄存器。
不同的IO控制方式导致不同的方法。
下面的几种方式:各有节奏。
大致流程如下:
1、当需要IO操作的时候,会通过IO指令来启动一次数据的读或者写。
2、在IO设备准备数据的这一段时间:不同IO控制方式,不同反应,
- 程序查询方式:CPU不断轮询检查I/O控制器中的“状态寄存器”,检测到状态为“已完成”之后,再从数据寄存器取出输入数据。
- 对于这一种的查询方式,因为CPU一直问询,那么你不输入,它CPU就一直在这耗着,CPU不能去做其他的事情。其它那些后台程序的运行就一直被暂停着;很明显这种查询方式不好。所以我们采取另外一种I/O设备的控制方式如第二条。
- 即执行到了到scanf(“%c”,&i);这条语句的时候,CPU会等待输入设备的输入,如果你不输入的话那么CPU就卡在这里了。
- 程序中断方式:等待键盘l/O时CPU可以先去执行其他程序,键盘I/o完成后,I/o控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据。
- 对于这一种的查询方式,CPU并没有被这一个简单的输入给困在这,即你什么时候输入好了,让IO控制器通知一下(发终端请求)就可以了,然哈CPU再停下手中的工作来处理这边 已经完成的IO操作即将数据寄存器的数据取走。
- 即执行到了到scanf(“%c”,&i);这条语句的时候,CPU就转而执行其他程序去了。这样CPU不用陷入盲等。
- 其实当IO接口发生中断请求;CPU在每一个指令执行周期的末尾都会检查一下 此时有没有中断请求的到来,
4、对于快速I/o设备,如“磁盘”,每准备好一个字就给CPu发送一次中断请求,会导致什么问题?
因为在3中所提到的是键盘 输入 慢速设备,因为最快人 也就是 需要秒来计数的,比较慢;对于CPU来说,中断的频率并不高,属于可接受的。那么如果是快速设备,我们还能用程序中断方式吗?
每一次的中断请求,都需要我们的CPU调用一次中断处理服务程序;CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下降。相当于一直被打断了好像。
那么如何解决这种的快速IO设备呢?因为主要是一直频繁的打断CPU,即我们直接绕过CPU与主存联系。
我们为了解决这种快速的,我们可以采用DMA控制方式,也就是第三种IO控制方式。
-
DMA接口DMA接口,即DMA控制器,也是一种特殊的I/o控制器,不过控制的外部设备比较特殊。
-
DMA接口是用来管理这些高速的外部设备的,如果:磁盘、
-
那么DMA控制方式的原理是什么样的??
-
是这样的:DMA控制方式:主存与高速I/o设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数。(差不多就是CPU给直接各种设置参数都说明好,然哈剩下的不管了。)
DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求。也就是说DMA控制器是在完成一大部分数据挪到DMA控制器里面的数据寄存器之后才向CPU发中断请求表示自己将数据准备完成了;然哈CPU进行一个响应和中断程序服务处理,进而将这些数据取走,占用一个存取周期,这样就大大的较少了控制接口对于CPU的频繁打扰打断。
5、对于大型商用的DMA方式还是比较累对于CPU;
有的商用电型机、大型机可能会接上超多的I/o设备,如果都让CPU来管理,那么CPU就太累了…
如果IO设备非常多的话,就算是DMA也是非常很多的繁杂的IO中断;
为了将CPU从中解脱出来,人们专门发明了一个用于专门管理各种IO设备的硬件部件:叫做通道
其实通道也是一种特殊的处理器。功能远远没有CPU强大,相当于小CPU
- 通道:可以理解为是(弱鸡版的CPU”。通道可以识别并执行一系列通道指令,通道指令种类、功能通常比较单一
三、外部设备
外部设备也称外围设备,是除了主机以外的、能直接或间接与计算机交换信息的装置。
1、输入设备
用于向计算机系统输入命令和文本、数据等信息的部件。键盘和鼠标是最基本的输入设备。
2、输出设备
用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件。显示器和打印机是最基本的输出设备。
3、外存设备
是指除计算机内存及CPU缓存等以外的存储器。硬磁盘、光盘等是最基本的外存设备。
四、IO接口
1、IO接口的作用
2、IO接口的结构和工作原理
3、IO端口
4、IO接口的分类
五、IO控制方式DMA方式
这种控制方式存在的意义呢?
之前在前面已经说过了:对于程序中断方式来说,每一次IO设备准备好了大概一个字的信息数据之后(在数据寄存器)
CPU就需要运行一次中断服务程序(这个是比一个运行周期还要长的);把这个字的数据存储到主存当中去。而对于那些快速IO设备来说就CPU比较就会使得cpu执行中断服务程序的时间开销会特别大效率低;因此提出了DMA方式。
DMA控制方式:需要一个DMA控制器即IO接口,IO控制器。
这个IO接口比普通的IO接口更厉害一点。
可以控制数据传输的过程。
DMAkzz