计算机组成原理(7):I/O

1 I/O系统基本概念 *

​ 本节实际就是对 I/O 系统 的简易科普,重点内容会在后续展开介绍;

在这里插入图片描述

在这里插入图片描述

1.1 I/O 系统

在这里插入图片描述

所以的这些I/O设备也可称为外部设备

在这里插入图片描述

​ I / O 接口 :负责协调 主机 与 外部设备 之间的数据传输;

在这里插入图片描述

【1】I/O设备作用:

数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配;

错误或状态监测:通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用;

控制和定时:接收从控制总线发来的控制信号、时钟信号;

数据格式转换:串-并、并-串等格式转换;

与主机和设备通信:实现主机一I/o接口一I/o设备之间的通信。

【2】I/O设别有很多所以对应的I/O接口也很多

在这里插入图片描述在这里插入图片描述

主机测:内部接口:内部接口与系统总线相连,实质上是与内存、CPU相连。

设备测:外部接口:外部接口通过接口电缆与外设相连,外部接口的数据传输可能是串行方式,因此I/O接口需具有串/并转换功能。


1.2 I/O 控制方式【数据传输】

​ 在 I / O 系统中,经常进行大量的数据传输,传输过程有各种不同的 I / O 控制方式,基本的控制方式有以下四种:

​ ① 程序查询方式

【一个字一个字的存】

在这里插入图片描述

②程序中断方式

【一个字一个字的存】

在这里插入图片描述

③ DMA控制方式

而对于快速I/O设备,如“磁盘”,每准备好一个字就给CPU发送一次中断请求,会导致CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下降。

​ DMA接口 也是一种 I/O接口,只不过DMA接口负责高速外设;

三总线方式

在这里插入图片描述

DMA接口,即DMA控制器,也是一种特殊的I/O接(I/O控制器)。

DMA控制方式:主存与高速I/O设备之间有一条直接数据通路(DMA总线)。CPU同DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数。

DMA控制器自动控制磁盘与主存的数据读写(每传送1个字);每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求

在这里插入图片描述

每准备好一个字就会发出DMA请求,接下来DMA控制器会占用一个存取周期向主存的对应位置写入一个字的数据,如果在这个存取周期之内CPU也想访问主存,CPU就要等一等。等DMA写好这一个字的数据之后,CPU才可以继续的访问主存【在这里主存是被CPU和DMA共享的,当DMA在对主存进行读/写操作时,CPU就不能进行读/写】,但是一个存取周期的时间肯定比一次中断程序处理的事件短【程序中断方式:每存一个字就要执行中断处理程序;DM方式:每存一个字只需一个存取周期就可以】

单总线方式

在这里插入图片描述

DMA详细传送过程:

在这里插入图片描述

用于解DMA和CPU的访存冲突

在这里插入图片描述

DMA方式vs中断方式

在这里插入图片描述

④ 通道控制方式

有的商用中型机、大型机可能会接上超多的I/O设备,如果都让CPU来管理,那么CPU就太累了…

在这里插入图片描述

在这里插入图片描述

小结
在这里插入图片描述


1.3 I/O 外部设备

在这里插入图片描述

在这里插入图片描述

1. 输入设备

在这里插入图片描述

2. 输出设备[VRAM的计算]

在这里插入图片描述

显示存储器【显存】,在显示存储器里存储的是接下来要在显示器上面播放的一帧的图像的信息!

分辨率:一个显示屏上有几个像素点,灰度级:一个像素点占多少个bit位。

因为刷新频率是60Hz,也就是1秒刷新60次,那么在一秒内需要向显存里存储60帧的数据--因此为VROM写入速度有【带宽:一秒钟可以写入多少数据】一个最低要求

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

②字符显示器下面这个还挺重要的!!!!!

在这里插入图片描述

【1】字符发生器里除了控制电路以外 还有一个ROM用来存放每一个ascll码所对应的字形码,也就是刚刚给出的0101的点阵信息

【2】字符的ascll码写入到显存里面
①在阴极射线管控制器控制下,显存里的ascll码会一个一个的用电信号的方式送给字符发生器
②然后字符发生器根据ascll码和CRT控制器信号信息找到 对应字形码 的ROM存储单元【这个存储单元就有要显示的这个字符的字形的信息】,将字形码输出到输出缓冲器里

③另一个控制电路 把字形的信息通过电子往外射的方式往外射出去 在屏幕上打出这个字符的样子 通过阴极射线将字形码显示出来

对于液晶显示器和LED显示器像素,显示的方式不同而已(不像CRT用电子射的)

【3】可以通过点阵是m*n,根据这个信息来确定每个字的字形码大小是m*n bit[字形码的信息存放在字符发生器ROM里面]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

小结

在这里插入图片描述

2 I/O接口

本节内容对标 《操作系统》5.1.2 I/O 控制器,两个之间配合学习;

在这里插入图片描述

在这里插入图片描述

2.1 I/O 接口的功能

在这里插入图片描述

进行地址译码和设备选择:I/O接口会对CPU送来的地址码进行译码,然后产生设备选择信息,以选中指定外设与CPU进行信息交换。

实现主机与外设的通信联络控制:解决主机与外设的时序配合问题,协调不同速度的外设与主机进行信息交换,使得整个计算机协调统一的工作。

实现数据缓冲:I/O接口会设置数据缓冲寄存器,以暂存数据,解决因外设速度与主机不一致而造成数据丢失的问题。

信号格式的转换:解决外设电平、数据格式可能与主机存在差异的问题。I/O接口提供了电平转换、串/并或并/串转换、模/数或数/模转换等功能。

传送控制命令和状态信息:CPU要启动某一外设时,会通过I/O接口中的命令寄存器向外设发出启动命令;外设准备就绪时,会将自身的状态信息存储到I/O接口中的状态寄存器,并反馈给CPU,同时也可以进行错误与状态检测


2.2 I/O 接口的类型

在这里插入图片描述


2.3 I/O 接口的基本结构

在这里插入图片描述

组成:寄存器组、控制逻辑电路、主机与接口和接口与I/O设备之间的信号联接线、数据地址线、控制状态信号线。

有的I/O接口可以连接多个设备!比如下面的USB控制器

在这里插入图片描述

2.4 I/O接口的工作原理

在这里插入图片描述

命令字:也可叫做控制字,每一个外部设备识别命令字的方式是千差万别的,只有厂家自己知道他们的设备可以识别什么命令,因此 发出这个命令字需要设备所对应的驱动程序的写入。

打印机工作的过程:CPU向数据缓冲寄存器里写入数据,在I/O控制逻辑的操控下,把这些数据逐个输出到外部设备上,当打印机完成工作后,会给I/O接口一个状态的反馈【修改状态寄存器里的值】这样CPU就会通过状态寄存器来得知I/O操作的完成【①CPU不断轮询检查状态寄存器②通过控制线向CPU发送中断控制信号,当CPU收到后再对中断进行处理】

状态寄存器和控制寄存器可以共用一个:?

CPU发出命令 到 控制寄存器 然后控制寄存器到I/O控制逻辑里 这时候控制寄存器就空了 状态就可以写进去了 所以两个可以公用同一个寄存器 【使用时间上是错开的】

中断类型号:发生故障、工作完成这两种中断的类型是不一样的  为了区分才有了中断类型号

I/O接口可以接多个设备,CPU要操作的是哪一个设备,对于设备的选择信息:①有的地址线除了要指明要读要写的数据缓冲寄存器,状态/控制寄存器外,也有可能指明具体的设备编号,但是设备编号和寄存器编号要分开两次进行传输。②需要连多个外设 让每一个外设都对应一组数据寄存器、状态寄存器。


2.4 I/O 端口及其编制

​ I/O 接口 = 若干个 I/O 端口 + 控制逻辑;

在这里插入图片描述

​ I/O端口的编址方式分为两种:

  • 统一编址;
  • 独立编址;

在这里插入图片描述

统一编址:

访存的指令是通用的 比如LODA指令、STORE指令 有这两个指令就可以实现对所有I/O设备的控制;

RICS机器【精简指令集常用】;但是复杂指令集也可以使用:ADD指令【可以直接指明某一个内存单元】那么也可以通过加法指令在后面直接跟上一个I/O端口的地址,这样ADD指令可以对某个端口实现加法操作

独立编址:

地址空间是有重复的,所以没办法分I/O设备和内存

in指令:从寄存器里读入到CPU的寄存器中;

out指令:把CPU某一个寄存器里的内容写入到指定的I/O端口当中;

所以如果执行的时I/O指令就会根据地址信息找I/O端口;如果不是I/O指令就去访存

在这里插入图片描述

一旦确定了哪个区域时I/O端口,那个是内存区域后就不能更改了

在这里插入图片描述


章节小结

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3 I/O方式 ⭐

本节内容对标 《操作系统》5.1.3 I/O 控制方式,两个之间配合学习;

​ I / O 系统 实现主机与 I / O 设备 之间的数据传送,可以采用不同的 I / O 控制方式 ;

在这里插入图片描述

​ 三种 I/O 方式 的CPU过程;

在这里插入图片描述

3.1 程序查询方式

​ 程序查询方式 中信息交换的控制完全由 CPU 执行程序实现;

程序里的变量存储的位置都是在主存里的,所以数据流最后要放回主存1

程序查询方式的基本原理就是当CPU向I/O接口发出一个指令之后,就一直处于等待和询问之中,每一个节拍都查看一下I/O接口的状态寄存器,看是否已经完成。如果完成了,CPU就进行数据的交互(CPU向I/O传数据或者从I/O的数据寄存器取数据)。王道PPT上举了一个例子进行说明:
在这里插入图片描述

CPU是如何控制外设的:

如图,目前我们需要使用打印机 打印3个字符的数据。需要两条I/O指令,IN和OUT分别控制数据从I/O输入到CPU,从CPU传出到I/O。具体的操作如下:其实是先OUT后IN。
(1)首先从主存里面把要打印的数据从主存放到CPU的一个寄存器 R0里面,假设第一个字符a取到了R0,I/O指令Out存在R1里面 [通过打印机驱动程序的处理]。
(2)CPU通过地址线指明此时要输出的端口是Rn+1,然后通过控制线指明要进行写的操作,控制寄存器Rn+1做好写的准备,然后 R1通过数据线把指令传到Rn+1里面。
(3)Rn+1把这个命令发给I/O控制逻辑单元,控制逻辑单元进行翻译然后向外设界面控制逻辑发出对应信号,外设界面控制逻辑单元通过控制线向外设发出控制线信号。
(4)然后外设开始启动,启动工作完成以后 并且通过状态线发回一个Ready信号,外设逻辑单元把信号发给I/O控制逻辑单元,逻辑单元把信号发给Rn+1覆盖原本的指令。
(5)这个时候,CPU在不断的执行In指令,I/O一直持续不断的把自己状态寄存器Rn+1里面的值发给CPU。直到CPU收到了Ready的状态,CPU才会停止执行IN指令。【轮询检查指令的实现:通过IN指令检查】
(6)紧接着,CPU继续执行OUT指令,用地址线选通I/O端口的数据寄存器Rn,然后一样的,控制线发出写的命令,数据线把R0里面的a取到Rn中。
(7)a这个字符从Rn传递到I/O的控制逻辑单元,然后一样的从外设界面(也就是接口)的数据线传递到外设。打印机就打一个a出来,打印完成之后把Ready状态传回I/O的状态寄存器。
(8)一样的,CPU不断地执行IN指令获取I/O接口的状态寄存器的值,直到获得打印机Ready的信号,它才会发出下一个字符,以此类推。。。
(9)打印完成之后,CPU向I/O接口的控制指令【通过数据线向Rn+1】发出停机指令(需要驱动程序的协助),之后打印机停止工作,反馈一个STOP的状态,CPU受到STOP以后就不管了,否则还是会一直询问I/O接口的状态寄存器。

还需要最后要说明的是,并不是所有的I/O接口的样子都是上面的图中这样【只是说明了至少有这些部分】因为前面说过,目前很多I/O接口有多组寄存器),但是基本组成是一致的,附上王道考研总结的流程图:
在这里插入图片描述
如上图中所说的,它有着会踏步的缺点,但是也有着设计起来简单的优点,所以早期的计算机才会使用,但是目前一些简单的儿童玩具,比如一个读故事机器人,它不需要和其他的设备交互,只需要和音响交互,所以用的也是这种简单的程序查询方式。这是一个王道PPT给出的例题:
在这里插入图片描述
首先还是分析题目:

用的是程序查询方式的输入输出系统,且不需要考虑处理时间。

CPU的时钟频率为50MHZ,那么一个时钟周期就是1/50M s,一个查询操作需要2/1M s,那么CPU每一秒内对鼠标的查询时间就是60/1Ms=0.006%(1M=1000000十的六次方)所以对鼠标的查询是可接受的。

然后先计算一秒钟需要查询硬盘几次:32位的数据,其实是4B,那么用传输率来除以数据的长度就是2^19次,一次的时间也是2000*2^19ns,拿计算器算一次是105%,所以CPU用程序查询方式完成不了对硬盘的访问的。所以程序查询 仅适用于慢速的I/O设备。但对于快速的很致命

CPU从磁盘读入数据:数据先别放到 DBR数据缓冲寄存器里,每次放32bit;状态寄存器用来反映这次的32bit是否输入完成,如果输入完成CPU就可以从DBR里直接取走32bit的信息。所以每秒要进行2^19次传送 就意味着CPU 每秒钟至少检查状态寄存器2^19次

题目中说的方法是定时查询,也就是每隔一段时间查询一次。前面学习的是独占式查询。在数据不易丢失时常采用定时查询,如果容易丢失则采用独占式查询。

【1】程序查询方式:这个阶段CPU需要一直检查,进行忙等,CPU与I/O串行工作,而无法去做其他的事情,效率很低。

  • 优点:接口设计简单、设备量少。
  • 缺点:CPU在信息传送过程中要花费很多时间用于查询和等待,而且如果采用独占查询,则在一段时间内只能和一台外设交换信息,效率大大降低。

分类:

  1. 独占查询:CPU 100%的时间都在查询l/O状态,完全串行。
  2. 定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态,每隔一段事件就检查特定的I/O接口。查询的间隔内CPU可以执行其他程序。

小结:

在这里插入图片描述


3.2 中断系统

在这里插入图片描述

1. 中断的基本概念

​ 中断的主要功能 (了解即可) :

  • ① 实现 CPU 与 I/O 设备的并行工作;
  • ② 处理硬件故障和软件错误;
  • ③ 实现人机交互,用户干预机器需要用到中断系统;
  • ④ 实现多道程序、分时操作,多道程序的切换需借助于中断系统;
  • ⑤ 实时处理需要借助中断系统来实现快速响应;
  • ⑥ 实现应用程序和操作系统(管态程序)的切换,称为“软中断”;
  • ⑦ 多处理器系统中各处理器之间的信息交流和任务切换;

​   当CPU 检测到中断信号后,由 硬件 自动保存被中断程序的断点 (即程序计数器PC).

​ 之后,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址
​ (各中断向量统一存放在 中断向量表 中,该表由操作系统初始化)。

​ 接下来开始执行中断服务程序,保存PSW、保存中断屏蔽字、保存各通用寄存器的值,并提供与中断信号 对应的中断服务,中断服务程序属于操作系统内核。

在这里插入图片描述

在每个指令的末尾都会例行的检查 是否有中断信号

响应中断条件:如果处于 关中断的状态就不会处理中断信号

中断隐指令:把cpu的指令执行流转移到正确的服务程序这里,本质就是修改PC的值,让PC这个指针执行要处理的中断程序这

​ 程序中断方式的思想:CPU执行程序无需一致等待 I/O设备,代I/O设备完成之后发送中断请求通知CPU;

在这里插入图片描述

2. 开中断/关中断

​ 非屏蔽中断 + 屏蔽中断

在这里插入图片描述

PSW程序状态字寄存器!

OF、SF、ZF、CF四个标志位可以用于辅助实现条件转移指令

IF=0处于关中断 可以用于辅助实现一些原子操作(一口气做完)

但是处于关中断下 有一些紧急的可以中断 比如掉电 这时CPU需要做强制关机的紧急处理(记录系统的状态等等) 所以掉电就是必须被响应的特殊的中断信号,称为非屏蔽中断。

3.中断请求标记 

​ CPU设置 中断请求标记 来判断是哪个设备发来的中断信号 - 中断请求标记标记触发器INTR ;

.

CPU响应中断必须满足条件:

  • ① 中断源有中断请求;
  • ② CPU允许中断及开中断(异常和不可屏蔽中断不受此限制);
  • ③ 一条指令执行完毕(异常不受此限制),且没有更紧迫的任务;

在这里插入图片描述

4. 中断判优

可以通过软件或者硬件的方式进行

​ 中断判优:当有多个中断信号同时到来,该选择先处理哪个 ?

  • 硬件排队器 实现硬件判优,确保当前优先级最高的中断的信号为1;
  • 查询程序 实现软件判优,按优先级递减顺序查询中断;

在这里插入图片描述

从左到右:①非门【输入0出来1 输入1出来0】②与非门【先对两个信号进行与(相乘)的操作 然后取反】

软件排队是通过编写查询程序实现的,其程序框图如下图所示,程序按中断源的优先等级,从高至低逐级查询各中断源是否有中断请求,这样就可以保证CPU首先响应级别高的中断源的请求。

查询程序的方式是非常慢的 所以现在一般都通过 硬件的方式进行判优!

​ 中断优先级的设置原则

在这里插入图片描述

【1】硬件故障:掉电;软件中断:系统调用

【2】非屏蔽中断 是非常紧急的连关中断都不能屏蔽掉的中断信号

【3】DMA控制器就是用于控制某些高速设备的,3、4是差不多的意思

【4】输入高输出低:键盘输入的信息放在I/O的某个设备寄存器里,如果CPU不快点把这个字符拿走的话,键盘又输入字符 就会把原来的字符覆盖掉;而打印机输出设备CPU 给I/O一个字符 打印机慢慢的打印出一个字符 打印完成后返回ready状态到 状态寄存器里 CPU检查到ready后就会再写入下一个字符!

5. 中断系统的工作流程

根据中断信号找到 中断服务程序的入口地址 这又是如何实现的呢?

​ 中断隐指令 并不是一条指令,而是CPU遇到中断信息,进行的一系列动作【而这都是由CPU自动的完成的】;

【问题一】PC的值如何保存 ?

【问题二】保存完PC的值之后,如何找到对应中断处理程序的入口地址 ?

在这里插入图片描述

中断隐指令 的主要任务:

  • 关中断【为了完成原子操作】
  • 保持断点【PC当前的值保存下来,放到内核堆栈里】
  • 引出中断服务程序【修改PC的值 指向中断处理程序】

如何确定中断信号对应的中断服务程序的起始地址:

  • 软件查询法
  • 硬件向量法(重点)

在这里插入图片描述

​ 硬件向量法

  硬件向量法就是利用硬件【上面讲的硬件排队器(可以得出现在处理的是那个中断信号)作为 中断向量地址形成部件的输入】产生向量地址【0001 0010 用16进制表示就是12H】,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内。

        由向量地址寻找中断服务程序的入口地址通常采用两种办法。一种在第四章介绍过,在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址(如12H)送至PC,执行这条指令,便可无条件转向中断服务程序的入口地址200;另一种是设置向量地址表,该表设在存储器内,存储单元的地址为向量地址,存储单元的内容为入口地址。

中断向量是函数的指令【存储的是这个中断信号的中断服务程序的入口地址】,向量地址是函数指针的指针【存储的是中断向量的存储地址】;

向量地址又叫 中断类型号,来判断当前接受的中断信号是那个类型的

为什么不 直接形成 中断处理程序的入口地址 而是要采取两级指针?

因为如果中断服务程序出现变化 那么硬件电路也要修改 这是不科学的 而采用两级指针 只需要修改内存里的值就可以。

在这里插入图片描述

 中断服务程序 的主要任务;

  • 保护现场【保护之前运行的程序的CPU环境,为了再返回执行的时候 能够在之前得到的结果基础上 再进行】
  • 中断服务【千差万别】
  • 恢复现场【之前程序的ACC通用寄存器等恢复(从之前的压入的堆栈栈顶弹出各种寄存器的值 把其写回去)】
  • 中断返回【恢复PC的值】

在这里插入图片描述

小结

在这里插入图片描述

单重中断:只有一次关中断和开中断!


3.3 多重中断

在这里插入图片描述

1. 多重中断的概念

如果CPU在执行某一中断服务程序过程中,又遇到了新的更高级的中断请求,CPU暂停原中断的处理,而转去处理新的中断,待处理完毕后,再返回继续处理原来的中断,这种中断称为多重中断,也称中断嵌套。

在这里插入图片描述

【问题一】为什么在多重中断中,要把开 中断指令 放在保护现场之后呢 ?

​ 答:保护现场必须完全进行完,才可以开中断,不然主程序的信息可能会被新中断影响,导致未完全保存;(恢复现场同理)

【问题二】中断屏蔽字

​ 答:中断屏蔽字,用来屏蔽优先级较低中断。

在这里插入图片描述

2. 中断屏蔽技术

若新的中断的优先级高于原中断的优先级,CPU响应新的中断;否则,CPU不予响应,必须待原中断处理完毕且返回主程序后,再响应新的中断。(这个地方其实可以参考一下计算机操作系统里面对动态的优先级算法) 

中断屏蔽字就是是为了实现这个功能的,本质上叶老师为了解决中断信号的优先级的问题

在这里插入图片描述

增加中断屏蔽字后 就可以更灵活更动态的调节 各个中断之间优先级! 每个中断源都会对应一个中断屏蔽字,每个中断屏蔽字有很多的比特组成,中断屏蔽字指明了 当CPU在处理中断源发来的中断请求时 应该屏蔽掉那些中断源的中断请求

比如 最右面的时键盘 优先级是较低的 如果键盘不想别打断 那么就向\overline{MASK1}---\overline{MASK4}都输入1 这样就可以把那些都屏蔽了!

在这里插入图片描述

如果全为1说明 这个中断源不可能再被中断 优先级最高!

​ 关于 中断屏蔽技术 的例题

在这里插入图片描述

1越多优先级越高!

小结

在这里插入图片描述

注意向量地址和中断信号的区别!

实例:8086CPU是如何检测中断信号

在这里插入图片描述

PSW程序状态字寄存器!

在这里插入图片描述

左右是配套的

当外设向CPU发送可屏蔽中断请求:

1)8259中断控制器的IRR通过INT信号线向CPU发送高电屏请求信号接上CPU的INTR

2)CPU在每执行一条指令的最后一个时钟周期时会采样INTR信号线判断有无新的中断请求,如果INTR标志为1(也就是有中断请求)CPU就会首先判断IF标志位,如果为1,CPU就允许中断响应。IF=0就忽略该中断。

3)IF=1,CPU通过\overline{INTA}(这里表示上划线)信号线向8259发送两个连续负脉冲的中断响应信号【反馈信号】。第一个信号表示CPU准备好接收中断类型码,第二个信号告诉8259中断控制器发送中断类型码。当中断控制器收到第二个信号时就会通过数据线将中断类型码【由ISR产生】发送给CPU。CPU就凭借着中断号从中断向量表中找到对应的中断函数地址(中断向量表是一个结构体数组,其中每个结构体中记录了CS:IP的值,结构体中低2字节记录CS段地址,高2字节记录IP偏移地址)

4)CPU找到中断函数后就会暂停当前执行中的程序,将新的CS:IP加载到寄存器,跳转到中断函数首地址去执行。这个过程中CPU还需要按顺序做以下处理:

                         1、将标志寄存器FR的当前值压入堆栈

                         2、将标志寄存器的中断允许标志位IF和单步标志位TF设置为0。IF=0,是为了屏蔽其他同级可屏蔽中断(如果是比

                         当前中断高级那么IF=0就失效了);TF=0,为了避免进入服务函数以单步形式执行(怕影响执行效率)

                         3、保护断点,将当前CS:IP压入堆栈保存,以便执行中断函数后返回

                         4、根据中断号找到中断函数首地址,将获得的CS:IP加载进寄存器

                         5、执行前还要压入各个寄存器的值进入堆栈,防止中断程序破坏现场。中断程序执行完成后再恢复寄存器的值并

                         设置IF=1

                         6、返回断点,中断服务结束后最后一条指令是IRET(中断返回指令),该指令将保存在堆栈中的断点值和寄存

                         器FR的值弹出堆栈,将CS:IP还原成中断前的值。

在这里插入图片描述


3.4 程序中断方式

 程序中断方式:等待键盘I/O时CPU可以先去执行其他程序,键盘I/O完成后I/O控制器向CPU发出中断请求,[CPU在每个指令执行的末尾都会例行检查是否有I/O信号]CPU响应中断请求,并取走输入数据。

在这里插入图片描述

在中断服务程序就是用来取走I/O设备里的数据。

  • PC值:中断隐指令自动保存(硬件完成);
  • 通用寄存器、中断屏蔽字:操作系统保存;
  • 块表(TLB)和Cache:硬件机构保存。

例题:

在这里插入图片描述

CPI:一个指令需要4个是时钟周期

第二问为啥是 20*4 不是15*4 ??????????!

假如回到主程序代表 cpu什么都不做的话  真正CPU运转的工作的时间 就是有中断响应时间和CPU处理中断服务程序程序的时间  所以就是(10+20*4)*1000

小结在这里插入图片描述


3.5 DMA方式

而对于快速I/O设备,如“磁盘”,每准备好一个字就给CPU发送一次中断请求,会导致CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下降。

​ DMA接口 也是一种 I/O接口【更厉害可以 控制数据传输的过程(不用通过CPU)】,只不过DMA接口负责高速外设;

在这里插入图片描述

1. DMA控制器

适用于块设备!以块为单位进行读写!

①DMA控制器的主要功能

在这里插入图片描述

DMA操作周期:要把这一个字的内容通过系统总线写入到主存里,这样就叫一个DMA操作周期

5)是通过中断进行通知的

②DMA控制器的主要组成

DMA控制器包括多个设备寄存器、中断控制和DMA控制逻辑等。主要的寄存器有:
  (1)主存地址寄存器(MAR):存放要交换数据的主存地址
  (2)外围设备地址寄存器(ADR):存放I/O设备的设备码,或者表示设备信息存储区的寻址信息。
  (3)字数计数器(WC):对传送数据的总字数进行统计。
  (4)控制与状态寄存器(CSR):用来存放控制字和状态字。
  (5)数据缓冲寄存器(DBR):暂存每次传送的数据

下面这个图就是上面那个图的详情!

在这里插入图片描述

【1】DMA控制器缩写DMAC

【2】DMA请求触发器:保存二进制的0和1,工作原理-如果设备输入完一整个数据到数据缓冲区之后,设备会将DMA请求触发器的值改为1(表示已经完成一个字的输入),这样控制逻辑

相关的电路就会收到高电平的信号,于是这个控制电路就知道接下来要把数据缓冲寄存器里的数据挪到主存里了

【3】AR和WC:“+1”会自动变化的意思,每传送一个数据主存地址的指针和长度的计数器都会进行相应的变化!

【4】中断机构:“溢出信号”--WC可以表示的数值是有限的 比如1K的数据,当计数器从0增加到1023后,再加1就会发生溢出,这就意味着此时已经完成一整块的数据传送,这时就可以向CPU传送中断处理信号了

DMA控制器和主存之间的数据交换是通过系统总线进行的,如果DMA传输的过程中CPU想要使用系统总线就要等待!

2. DMA传送过程

1、预处理

CPU 会对 DMA 控制器和 IO 接口进行初始化,初始化的内容如下:

① DMA 控制器初始化

  • 配置 DMA 内存缓冲区的首地址AR(即告诉DMA把数据放到哪)
  • 配置 DMA 传输方向(是向外设传数据,还是从外设读数据)
  • 配置 DMA 交换量WC(设置数据传输的上限)

② 接口的初始化

  • I/O 设备的寻址信息DAR

2、数据传输

<1>准备

在这里CPU可以继续执行之气的主程序 不用管这个过程!

① 设备接口 => DMA 控制器

设备接口向DMA控制器发送 “ DMA请求 ” ,即请求使用 DMA 进行数据传输

② DMA 控制器 => CPU “HRQ”

DMA 控制器向CPU申请 “ 总线占用 ”,DMA控制器和 CPU 只能有一个占用总线

③ CPU => DMA 控制器

CPU 批准使用总线【返回HLDA信号】,此时CPU会让出一个或者多个总线周期用于数据传输。在DMA数据传输期间,CPU 停止访问内存,无法执行需要占用总线的指令。

④ DMA 控制器 => 设备接口

DMA 批准设备请求,此时 DMA控制器将掌握总线控制权。如果是单字节传送,一个总线周期后,DMA归还总线控制权;如果是块传送,连续占用若干个总线周期后,DMA才会归还总线控制权。

<2>数据传送

数据传送期间,DMA 控制器会向总线发送读/写命令、向 I/O 接口发响应信号。真正的数据交互是内存和设备接口,DMA 控制器只是负责控制整个数据传送流程。

4、善后处理

在初始化时,CPU 便指定了DMA的交换量,而且DMA 控制器内部有一个计数器,只有 DMA 控制器知道传送是否结束。当传送结束[WC溢出]时,DMA控制器向CPU发送一个传输完成的中断,CPU重新接管总线的控制权。

注意:DMA 控制器并非只有在传输完成时才会发送中断,其实传输过半、传输错误也可以发送中断

【区分 DMA 请求、DMA 中断】

  • DMA 请求:意味着要向主存传输一个字的数据, 不是中断!当 I/O 设备准备好数据之后,I/O 设备向 DMA 控制器发送 DMA 请求,再由 DMA 控制器向 CPU 发送总线请求,有时将这两个过程统称为 DMA 请求。DMA 请求的优先级大于中断请求!
  • DMA 中断:意味着一整块的数据传输已经完成,属于中断的一类,按正常的中断处理即可!DMA 完成数据传送之后,DMA 控制器向 CPU 发送的中断信号称为 DMA 中断!

在这里插入图片描述

在这里插入图片描述

单总线传送方式:DMA在传送数据的过程当中需要不断地占用系统总线,如果系统总线是被CPU管理的,由CPU决定要不要把系统总线的使用权分配给DMA;只要CPU把系统总线分给DMA CPU就暂时不访问主存了 因此DMA就可以访问主存!!!!!引出了下面的 DMA的传送方式!!!(三总线?会出现同时访问主存的问题)

在这里插入图片描述

3. DMA传送方式【解决三总线时的访问冲突】

在这里插入图片描述

(1)与引入DMA的初衷相违背了!!

(2)分的太平均了 可能CPU可以使用完 但是DMA就是使用不完!

(3)如果同时申请DMA优先 因为DMA数据缓冲寄存器里的数据如果不及时写到主存里,就有可能导致数据的丢失!

在这里插入图片描述

​ DMA 方式 v.s 中断方式

在这里插入图片描述

小结

在这里插入图片描述

4 常见问题和易混淆知识点

1. 中断响应优先级和中断处理优先级分别指什么 ?

​ 中断响应优先级是由硬件排队线路或中断查询程序的查询顺序决定的,不可动态改变;而中断处理优先级可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低(屏蔽位为“0”,对新中断开放),若是,则中止正在处理的中断,转到新中断去处理,处理完后再回到刚才被中止的中断继续处理。

2. 向量中断、中断向量、向量地址三个概念是什么关系 ?

​ 中断向量:每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量;

​ 所有中断的中断服务程序入口地址构成一-个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。
​ 向量地址:中断向量表或中断向量跳转表中每个表项所在的内存地址或表项的索引值,称为向量地址或中断类型号;

​ 向量中断:指一种识别中断源的技术或方式;

​ 识别中断源的目的是找到中断源对应的中断服务程序的入口地址的地址,即获得向量地址;

3. 程序中断和调用子程序有何区别 ?

​ 两者的根本区别主要表现在服务时间和服务对象上不一样;

​ 1) 调用子程序过程发生的时间是已知的和固定的,即在主程序中的调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的。而中断过程发生的时间一般是随机的,CPU 在执行某个主程序时收到中断源提出的中断申请,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的。也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决定的;

​ 2)子程序完全为主程序服务,两者属于主从关系。主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序二者一般是无关的,不存在谁为谁服务的问题,两者是平行关系;

​ 3)主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路;而中断处理系统是一个软/硬件结合的系统,需要专门的硬件电路才能完成中断处理的过程;

​ 4)子程序嵌套可实现若千级,嵌套的最多级数受计算机内存开辟的堆栈大小限制;而中断嵌套级数主要由中断优先级来决定,一般优先级数不会很大;

​ 从宏观上看,虽然程序中断方式克服了程序查询方式中的CPU“踏步”现象,实现了CPU与IO 并行工作,提高了CPU的资源利用率,但从微观操作分析,CPU在处理中断服务程序时,仍需暂停原程序的正常运行,尤其是当高速IO设备或辅助存储器频繁地、成批地与主存交换信息时,需要不断打断CPU 执行现行程序,而执行中断服务程序;

1) IO设备有哪些编址方式 ? 各有何特点 ?

​ 统一编址和独立编址;

​ 统一编址是在主存地址中划出一定的范围作为IO地址,以便通过访存指令即可实现对IO的访问,但主存的容量相应减少;

​ 独立编址是指IO地址和主存是分开的,IO地址不占主存空间,但访存需专门的IO指令;

2) CPU响应中断应具备哪些条件 ?

​ 在CPU内部设置的中断屏蔽触发器必须是开放的;

​ 外设有中断请求时,中断请求触发器必须处于“1”状态,保持中断请求信号;

​ 外设(接口)中断允许触发器必须为“1",这样才能把外设中断请求送至CPU;

​ 具备上述三个条件时,CPU在现行指令结束的最后一个状态周期响应中断;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值