【第七章:输入输出系统】

知识框架

No.0 引言

这一章节和 操作系统 的最后一章节 是有很强的联系的;

操作系统:更多的讨论的是输入输出系统的软件部分,如何管理这些输入输出设备。

计算机组成:更多的讨论的是硬件的实现。

在这里插入图片描述

No.1 输入输出系统

一、基本概念

“I/O”就是“输入/输出”( Input/Output)

I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备

  1. 鼠标和键盘:为输入设备,
  2. 显示屏和打印机:为输出设备。
  3. 而对于光盘,硬盘这些既可以输入又可以输出的的设备;也可称呼为外存设备。反正都可以。
  4. 也就是说自己安装的那个固态硬盘也是外部设备,然后还有那个接口也就是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 进行交互,

  1. I/O接口:又称I/O控制器(I/O Controller)、设备控制器,负责协调主机外部设备之间的数据传输
  2. 例子就是:买了键盘之后,通过USB连接线查到USB接口处。
  3. ​ 其实USB插口的背后就是有一个小芯片,用来控制主机与外部设备键盘的数据交互。
  4. 那么电脑可以连接的外部设备多种多样,对应不同的接口所用到的芯片即I/O控制器是不同的。
  5. I/O控制器多种多样,也会制定相应的标准,如:用于控制usB设备的IO接口)用于控制SATA3.0确盘的IO接口等
  6. 而通常来说呢,那个芯片会被集成在 你的 主板上, 与你的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当了中转站,作为 输入设备和主存的中转站了。

  1. IO控制器部件里面的三大寄存器;
  2. 控制寄存器:反映了某个外设它具体需要做什么动作,需要让它做什么。
  3. 数据寄存器:暂存来往的数据,入和出。
  4. 状态寄存器:反映了当前外设的状态,是否在忙碌,是否完成了工作(比如打印机)、是否就绪等等状态。

在这里插入图片描述

3、如何判断读入的数据有没有被输入完成呢?

那么你就要判断 该IO设备的 操作是否已经完成? 通过 IO控制器里面的 状态寄存器

不同的IO控制方式导致不同的方法。

下面的几种方式:各有节奏。

大致流程如下:

​ 1、当需要IO操作的时候,会通过IO指令来启动一次数据的读或者写。

​ 2、在IO设备准备数据的这一段时间:不同IO控制方式,不同反应,

  1. 程序查询方式:CPU不断轮询检查I/O控制器中的“状态寄存器”,检测到状态为“已完成”之后,再从数据寄存器取出输入数据。
    1. 对于这一种的查询方式,因为CPU一直问询,那么你不输入,它CPU就一直在这耗着,CPU不能去做其他的事情。其它那些后台程序的运行就一直被暂停着;很明显这种查询方式不好。所以我们采取另外一种I/O设备的控制方式如第二条。
    2. 即执行到了到scanf(“%c”,&i);这条语句的时候,CPU会等待输入设备的输入,如果你不输入的话那么CPU就卡在这里了。
  2. 程序中断方式:等待键盘l/O时CPU可以先去执行其他程序,键盘I/o完成后,I/o控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据。
    1. 对于这一种的查询方式,CPU并没有被这一个简单的输入给困在这,即你什么时候输入好了,让IO控制器通知一下(发终端请求)就可以了,然哈CPU再停下手中的工作来处理这边 已经完成的IO操作将数据寄存器的数据取走。
    2. 即执行到了到scanf(“%c”,&i);这条语句的时候,CPU就转而执行其他程序去了。这样CPU不用陷入盲等
    3. 其实当IO接口发生中断请求;CPU在每一个指令执行周期的末尾都会检查一下 此时有没有中断请求的到来,

4、对于快速I/o设备,如“磁盘”,每准备好一个字就给CPu发送一次中断请求,会导致什么问题?

因为在3中所提到的是键盘 输入 慢速设备,因为最快人 也就是 需要秒来计数的,比较慢;对于CPU来说,中断的频率并不高,属于可接受的。那么如果是快速设备,我们还能用程序中断方式吗?

每一次的中断请求,都需要我们的CPU调用一次中断处理服务程序;CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下降。相当于一直被打断了好像。

那么如何解决这种的快速IO设备呢?因为主要是一直频繁的打断CPU,即我们直接绕过CPU与主存联系。

我们为了解决这种快速的,我们可以采用DMA控制方式,也就是第三种IO控制方式。

  1. DMA接口DMA接口,即DMA控制器,也是一种特殊的I/o控制器,不过控制的外部设备比较特殊。

  2. DMA接口是用来管理这些高速的外部设备的,如果:磁盘、

  3. 那么DMA控制方式的原理是什么样的??

  4. 是这样的: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

  1. 通道:可以理解为是(弱鸡版的CPU”。通道可以识别并执行一系列通道指令,通道指令种类、功能通常比较单一

在这里插入图片描述

在这里插入图片描述

No.2 外部设备

外部设备也称外围设备,是除了主机以外的、能直接或间接与计算机交换信息的装置。

1、输入设备

用于向计算机系统输入命令和文本、数据等信息的部件。键盘和鼠标是最基本的输入设备。

2、输出设备

用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件。显示器和打印机是最基本的输出设备。

3、外存设备

是指除计算机内存及CPU缓存等以外的存储器。硬磁盘、光盘等是最基本的外存设备。

No.3 IO接口

1、IO接口的作用

2、IO接口的结构和工作原理

3、IO端口

4、IO接口的分类

No.4 I/O控制方式程序查询方式

一、基础介绍

CPU启动一个IO操作之后,比如说启动一个读操作;

当IO设备在准备数据的时候,CPU会不断的轮询检查,检查IO接口当中的这个状态是否已完成。

当检查到已经完成才回去IO接口当中去取数据;

在IO设备准备数据的过程中,CPU是不可以做其它事情的。

从IO接口中的数据缓冲寄存器取走数据,放到CPU内的数据寄存器里面。

在这里插入图片描述

二、IO接口内部细化

在这里插入图片描述

三、程序查询方式流程图

在这里插入图片描述

No.5 I/O控制方式程序中断方式

一、中断系统

1、中断的基本概念

2、中断的工作流程

3、单重中断和多重中断

二、程序中断方式

引入中断系统之后,如何控制数据的读写工作呢?

1、工作流程

当前CPU正在运行现在的程序,现在需要比如说要从这个外部设备输入一个字符的数据;开始启动。

IO指令,向IO设备发出启动相关的命令、

在这里插入图片描述

2、CPU占用情况

No.6 I/O控制方式DMA

一、基础介绍

这种控制方式存在的意义呢?

之前在前面已经说过了:对于程序中断方式来说,每一次IO设备准备好了大概一个字的信息数据之后(在数据寄存器)

CPU就需要运行一次中断服务程序(这个是比一个运行周期还要长的);把这个字的数据存储到主存当中去。而对于那些快速IO设备来

说就CPU比较就会使得cpu执行中断服务程序的时间开销会特别大效率低;因此提出了DMA方式。

DMA控制方式:需要一个DMA控制器即IO接口,IO控制器。

​ 这个IO接口比普通的IO接口更厉害一点。

​ 可以控制数据传输的过程。

二、DMA数据传输过程

DMA控制器通常是用来控制一些快速设备的比如磁盘。就是以块为单位进行读写的设备

现在采用DMA控制方式假设:CPU想要读入IO设备磁盘内的一整块的数据;

1:CPU向DMA控制器指明这次:CPU向DMA控制器指明要输入还是输出;要传送多少个数据;数据在主存外设中的地址

2:就是CPU让DMA这个小cpu进行各种操作并且指明操作什么以及如何做。

那么DMA是如何与外设进行数据传输的呢?以及如何与主存进行数据传输的呢?

①:DMA控制器接收外设发出的DMA请求(外设发出的比如磁盘)所谓DMA请求就是磁盘给他传了一个字之后就会给它一个DMA请求,说明这个字已经写入完成了,

②:当DMA接收到这个DMA请求后,需要把这一个字的数据通过系统总线写入到主存,就向CPU发出总线请求。CPU响应此总线请求,发出总线响应信号,DMA控制器接管总线控制权,进入DMA操作周期(就是一个系统周期四阶段了)。

③:确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。(通过地址总线和控制总线)

④:向CPU报告DMA操作的结束。方式就是通过一个中断信号;CPU接收到中断信号后再做出一系列的处理。

在这里插入图片描述

三、DMA控制结构细化:

DMA控制结构细化:

数据缓冲寄存器:快速设备的传输的数据都会先被放到数据缓冲寄存器里面

控制/状态逻辑:这个就是一些时序电路逻辑电路;类似CPU内部的时钟信号发送器;由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步。每一步应该做什么操作等等。

DMA请求触发器:每当IO设备准备好数据后给出一个控制信号,使DMA请求触发器置位。

主存地址计数器:简称AR,存放要交换数据的主存地址。即传到主存的哪里去。

传送长度计数器:简称wc,用来记录传送数据的长度,计数溢出时,数据即传送完毕,自动发中断请求信号。

中断机构:当一个数据块传送完毕后触发中断机构,向CPU提出中断请求。

注:在DMA传送过程中,DMA控制器将接管cPu的地址总线、数据总线和控制总线,CPU的主存控制信号被禁止使用。而当DMA传送结束后,将恢复CPu的一切权利并开始执行其操作。即CP在此阶段要等着。

在这里插入图片描述

四、DMA传输过程更细化

CPU向DMA控制器说明你要读or写的数据应该存放在主存的哪里:利用主存地址计数器;

CPU向DMA控制器说明你要读or写的数据应该从哪个设备即设备读写地址:利用DAR寄存器;

CPU向DMA控制器说明你要传输多少个数据:利用传送长度计数器寄存器;

开始启动IO设备;DMA控制器控制着数据传送的过程;CPU去执行自己的程序和事情。

IO设备首先把数据冲到数据缓冲寄存器;当写满之后,向DMA触发器发出一个高电平信号。

控制逻辑检测到DMA请求,即检测到一个字的数据已经完成之后,DMA控制器向CPU请求总线使用权。

CPU返回一个反馈的信号。然后DMA控制器获得总线使用权。然后完成一次数据传输。

在数据传输完之后,DMA控制器利用 中断机构向CPU发出中断请求(这个根DMA请求是不一样的);意味着一整块的数据传输已经完成了。

CPU受到中断请求后,就停下手中的事情来处理后事;也就是运行相应的中断服务程序做DMA结束的处理。

做完之后CPU继续自己的主程序的执行。

对于程序中断方式,每完成一个字的数据就需要CPU运行相应的中断服务程序;

而DMA是完成了一整块数据之后需要CPU运行相应的中断服务程序

注意:总线的控制权是由CPU决定的。

DMA方式具有下列特点:
①它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
②在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
③主存中要开辟专用缓冲区,及时供给和接收外设的数据。
④DMA传送速度快,CPU和外设并行工作,提高了系统效率。
⑤DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。

在这里插入图片描述

五、三总线结构访问主存

当使用单总线结构的时候,总线控制权是由CPU决定的,那么如果CPU不给,DMA是无法使用的。即只能有一个与主存交互;到底要让谁使用主存,这个完全由CPU决定的。

但是在三总线结构中,主存与CPU是主存总线,主存与DMA是DMA总线;这种情况下DMA想要访问主存DMA总线的控制权总是可以归DMA所有的,即不需要根主存进行争了。

也就是说两种都有自己总线的控制权。意味着可能出现CPU想要访问主存,DMA想要访问主存;如果主存不是双端口的主存,那么同一时刻只能支持一个进行访问;是先满足CPU还是先满足DMA控制器呢??主存和DMA控制器之间有一条数据通路,因此主存和I/O设备之间交换信息时,不通过cPU。但当l/o设备和CPU同时访问主存时,可能发生冲突,为了有效地使用主存,DMA控制器与CPu通常采用以下3种方法使用主存。

如何解决CPU与DMA控制器的访存冲突:

在这里插入图片描述

在这里插入图片描述

六、DMA方式与中断方式

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值