文章目录
- 前言
- 一、IO系统基本概念
- 1.1、输入/输出系统基本概念
- 1.1.1、现代计算机的结构
- 1.1.2、常见的I/O设备
- 1.1.3、主机与I/O设备如何进行交互?(认识I/O接口)
- 1.1.4、I/O系统的基本组成(I/O硬件、I/O软件)
- 本节回顾
- 1.2、I/O控制方式
- 1.2.1、I/O控制方式简介
- 1.2.2、程序控制方式(程序查询、程序中断、通道)和硬件控制方式(DMA方式)
- ①程序查询方式
- ②程序中断方式
- ③DMA控制方式
- ④通道控制方式
- 本节回顾
- 1.3、外部设备
- 1.3.1、介绍外部设备主要分类
- 1.3.2、输入设备
- 1.3.3、输出设备
- 1.3.3.1、根据显示设备所用的显示器件分类
- 阴极射线管显示器(CRT)
- 液晶显示器(LCD)
- 发光二极管显示其(LED)
- 1.3.3.2、按照显示设备显示的内容进行分类(字符、图形、图像,重点有CRT字符的原理)
- **①字符显示器(包含CRT的字符显示原理)**
- ②图形显示器
- ③图像显示器
- 1.3.3.3、打印机
- ①按照印字原理不同分类(击打、非击打)
- ②按照工作方式分类(串行、行式)
- ③按照工作方式分类(针式、喷墨、激光)
- 1.3.4、显示器的参数性能指标(包含实际显存计算)
- 本节回顾
- 二、I/O接口
- 2.1、I/O接口的作用
- 2.2、I/O接口的工作原理
- 2.3、I/O接口的组成
- 2.4、I/O接口的编址方式(统一编址、独立编址)
- 方式一:统一编址
- 方式二:独立编址
- 2.5、I/O接口的分类
- ①按数据传送方式分类
- ②按主机访问I/O设备的控制方式分类
- ③按功能选择的灵活性分类
- 知识回顾
- 三、I/O方式原理细节
- 3.1、程序查询方式
- 3.1.1、认识程序查询方式(含指令示例)
- 3.2、程序查询方式流程图
- 3.1.3、程序查询方式-例题
- 本节回顾
- 3.2、程序中断方式
- 3.2.1、中断系统
- 3.2.1.1、中断的基本概念
- 3.2.1.2、中断的工作流程(单重中断)
- 详细的整体流程(认识关中断)
- ①中断过程的中断请求标记(如何判断?外中断何时触发以及条件)
- ②中断判优-实现原理
- ③中断判优-优先级设置
- ④详细剖析中断隐指令
- ⑤细致剖析中断服务程序的主要任务
- 本节总结(中断处理过程)
- 3.2.1.3、多重中断
- 1、认识单重与多重中断的区别
- 2、中断屏蔽技术
- 3、多重中断的实际例题
- 扩展:CPU如何检测中断信号?
- 3.2.2、程序中断方式
- 3.2.2.1、认识程序中断本质以及程序中断的流程
- 3.2.2.2、程序中断方式-例题(大题,含详细解析)
- 本节回顾
- 3.3、DMA方式
- 3.3.1、认识DMA控制器
- 3.3.2、DMA控制器结构细化
- 3.3.3、DMA传送过程
- 3.3.4、解决CPU与DMA的访存冲突(三种方式,针对于三总线结构)
- 3.3.5、DMA方式的特点
- 3.3.6、DMA与中断方式对比
- 本节回顾
前言
目前正在备考24考研,现将24计算机王道的408学习整理的知识点进行汇总整理。
博主博客文章目录索引:博客目录索引(持续更新)
一、IO系统基本概念
1.1、输入/输出系统基本概念
1.1.1、现代计算机的结构
I/O:将主机中的数据输出到外部的设备。
1.1.2、常见的I/O设备
常见的IO设备:
输入设备:鼠标、键盘
输出设备:显示器、打印机
外存设备(可输入也可输出):硬盘、光盘。
1.1.3、主机与I/O设备如何进行交互?(认识I/O接口)
I/O接口(又称为IO控制器):主板上的一块芯片,主要是用于控制I/O接口。主要协调主机与外部设备之间传输数据,又称为设备控制器,I/O设备连接上IO接口就可以与主机进行通信了。
- 对于IO控制器也会有相应的工业标准限制,CPU按照相对应的标准向I/O接口发出相应的数据、命令即可进行控制。
举例:例如电脑USB插口的后背,在主板上会有一个小芯片来控制USB设备,这个就是I/O接口,也是USB接口,下面看一下对应的I/O接口:
I/P接口与I/O设备区别:I/O接口是一个电子部件,会集成在主板上,I/O设备则是看得见摸得着的硬件设备。
1.1.4、I/O系统的基本组成(I/O硬件、I/O软件)
I/O系统的基本组成:I/O硬件、I/O软件
I/O硬件
:
I/O软件
:通过采用I/O指令和通道指令实现主机和I/O设备的信息交换。
- 驱动程序:是厂商自己来进行设计的功能以及特性能够被我们去使用。
I/O指令
:操作码+命令码+设备码
- 命令码介绍:对于不同的硬件设备其提供的命令码各不相同,例如键盘雷蛇与罗技指定的位置亮也是不相同的,需要根据实际的硬件设备来进行合理的编写指令。
通道指令
:对于通道硬件设备能够识别的指令。
两者关系:CPU发出I/O指令对通道发起命令,而通道最终执行的则是在主存中的一系列通道指令,来代替CPU完成I/O设备的管理。
本节回顾
1.2、I/O控制方式
1.2.1、I/O控制方式简介
I/O接口中包含三个寄存器:数据寄存器、控制寄存器、状态寄存器
- 数据寄存器:用于保存CPU与外设之间传输的数据。
- 控制寄存器:用来保存我们想要让外设做一些动作的指令控制信息。
- 状态寄存器:反应了当前的外设状态,是否在忙等等。
上面的程序代码执行到scanf的时候,黑框会卡在当前界面等待输入,此时就表示CPU在进行等待输入,对于CPU如何来控制键盘的I/O操作完成呢?
- CPU会通过控制总线向这个I/O接口发出读的命令,同时通过地址总线指明要读的设备,其中地址线还指明了设备读入的寄存器(指向数据寄存器),此时我们输入的数据都会存储在数据寄存器当中。
对于读命令发出后,我们如何判定这个字符数据已经被输入了呢,可见如下的几种程序控制方式。
1.2.2、程序控制方式(程序查询、程序中断、通道)和硬件控制方式(DMA方式)
程 序控制方式指的是用软件实现的,硬件控制方式则是使用硬件实现的。
①程序查询方式
程序查询方式:采用不断轮询的策略,不断的去检测I/O控制器中给的"状态寄存器",一旦为完成,此时就从数据寄存器中将数据取走。
- 问题:对于这种方案若是我们不输入此时会造成CPU不断的去检查这个状态从而导致CPU不能够去做其他事情,影响CPU的工作。
②程序中断方式
程序中断方式:在等待键盘输入的时候,CPU同样也会去做其他事情。若是键盘输入了字符后,此时I/O接口会向CPU发起一个中断请求,此时CPU会响应中断请求,此时从I/O接口取出数据。
- 好处:可以解决不输入时CPU会一直处在等待过程,不再陷入忙等。
数据流:键盘->I/O接口的数据寄存器->数据总线->CPU的寄存器->主存(指定变量i的位置)。
注意:对于每输入、输出一个字就需要CPU来进行介入,作为中转站进行主存与I/O设备之间的数据交换。
③DMA控制方式
思考:对于快速IO设备,例如"磁盘",一旦我们采用程序中断方式每准备好一个字,那么就给CPU发送一次中断请求,此时会出现什么问题?
答:CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下滑。
此时就可以引出我们的DMA控制方式:
DMA(Direct Memory Access)
接口也是一种I/O控制器:这种I/O接口称为DMA接口,直接内存访问。
原本我们读取数据需要使用CPU来作为I/O接口以及主存之间的中转,使用了MDA后可直接通过DMA总线来让磁盘与主存进行数据传输。
详细流程:
- CPU通过I/O总线向DMA接口指明,本次是进行读/写,并指定某个高速的I/O设备、该设备读取数据到的主存地址,读取的数据量,指明好了之后CPU即可去做其他的事情。
- 接着DMA接口即开始控制磁盘与主存之间进行数据的读/写,此时DMA接口每次会从磁盘中读出一个字的数据(1个存取周期)传输到主存中,当完成一整块的数据读写后,DMA接口才会向CPU发送一次中断请求表示数据读写完成。
- 注意:在这1个存取周期中,若是CPU想要访问主存,则需要进行等待,只有等待写好这1个字后,才能够对主存进行访问。
- 此时CPU来对这一个中断请求进行一个响应即可。
DMA方式与程序中断方式对比:前者效率比后者高。
- 对于DMA中一个存取周期时间一定会比程序中断方式中的时间更短,因为在程序中断方式中每传一个字CPU要运行一次中断程序,对于DMA一个字则是一个存取周期。
④通道控制方式
对于一些厂商在使用商用中型机、大型机时会接上很多的I/O设备,若是都让CPU来进行管理会使用占用CPU时间,设想若是有大量的I/O设备即便使用DMA方式进行,此时若是一个I/O设备在读取完后都向CPU发送中断请求,那么此时也会占用CPU十分多的时间。
通道:为了让CPU从上述场景的繁杂I/O设备管理工作解脱,此时就发明了通道,这个硬件部件专门用来去管理各种I/O设备。此时CPU与各种I/O接口之间不会进行直接的交互了。
原理:
1、CPU向通道发起I/O指令,告知通道程序在内存中的位置,并且指明要控制的I/O设备。
2、通道执行主存中的通道程序,控制I/O设备来完成一系列的读/写操作与主存(可以是多组),直到全部完成之后,通道才会向CPU发起一个中断请求。
3、CPU此时再对指定的中断请求来做相应的处理。
好处:使用了通道之后我们对于各种I/O设备的控制都可以变得十分灵活,提前编写好对应的程序即可。
本节回顾
1.3、外部设备
重点就是显存VARM的计算。
1.3.1、介绍外部设备主要分类
外部设备:输入设备、输出设备、外存设备
1.3.2、输入设备
键盘:
鼠标:
-
机械式鼠标:其中包含小圆珠,滚动小圆珠时会将位置、移动速度、移动距离传送给鼠标内部的几个轴,接着将这些数据传送给我们的计算机。
-
光电式鼠标:通过光传感器来检测鼠标移动的方向、距离、速度等。
1.3.3、输出设备
1.3.3.1、根据显示设备所用的显示器件分类
阴极射线管显示器(CRT)
阴极射线管显示器(CRT):很大很笨重的显示器
厚重的原因?里面有一个阴极射线管,实际显示器显示的信息则是由电子枪(电子发射器)在经过一系列的电路控制电子偏移后打到屏幕上显示的。
液晶显示器(LCD)
原理:通过电光效应
发光二极管显示其(LED)
原理:通过半导体发光二极管来实现
LCD与LED对比:LCD与LED是两种不同的显示技术,LCD是由液态晶体组成的显示屏,而LED则是由发光二极管组成的显示屏。与LCD相比,LED显示器在亮度、功耗、可视角度和刷新速率等方面都更具优势。
1.3.3.2、按照显示设备显示的内容进行分类(字符、图形、图像,重点有CRT字符的原理)
按显示信息内容不同分为:字符显示器、图形显示器、图像显示器
①字符显示器(包含CRT的字符显示原理)
①字符显示器原理(非阴极射线管原理,一定要注意):通过点阵形式来最终控制位置显示来实现字符的效果,包含中文
下面是阴极射线管实现字符显示器的原理::
- 首先需要将对应要显示的字符(中文)的ascii码(先以这个为准,中文是其他码)存储在显存里。
- 接着在在阴极射线管控制器的控制下,显存里的这些字符会发送给字符发生器ROM中,在这个字符发生器内部不仅仅有控制电路外,还有对应的ROM来存放每一个ASCII对应的字形码,也就是对应的点阵信息,接着根据这个指定字符ASCII码和CRT的控制信号选中某一个字符的字形码所存储的ROM单元(指定最终显示的字)。
- 将这个字符信息输出到缓冲器里, 接着通过另一个电路控制,将字形的信息通过电子外射的方式最终在屏幕上打出这个字符的样子。
- 显示存储器RAM:存储这指定字的ASCII码。
- 字符发生器ROM:存放的是对应ASCII码以及对应的字形码,对于转换的过程也是由字符发生器来实现的。
实际对应的点阵就是下面的n*m
阵列,一个字就是由n*m
组成,我们可以根据这个点阵信息来确定这个字形码的大小多大:
②图形显示器
显示矢量图形。
应用:用于显示数电模电显示图的则是图形显示器,十分规整并不复杂。例如股票涨跌等等。
对于图形显示器按照扫描方式的不同分为:光栅扫描显示器、随机扫描显示器
③图像显示器
应用:如电脑、手机,显示丰富的图像信息。
1.3.3.3、打印机
①按照印字原理不同分类(击打、非击打)
击打式打印机:打印票据
- 如今依旧广泛使用原因?物理机打的方式可以在票据上留下一定的印记 。对于这种票据,很难被复制。防伪性比较好。
非击打式打印机:
②按照工作方式分类(串行、行式)
③按照工作方式分类(针式、喷墨、激光)
针式打印机:
喷墨打印机:利用加电的方式给这些墨点进行偏移,喷到指定的位置。
激光打印机:
应用:早年用于打照片。
1.3.4、显示器的参数性能指标(包含实际显存计算)
显示器的参数性能指标:
屏幕大小:指的是显示器对角线的长度,以多少英寸为准。
分辨率:像素点数,一般是宽x高。
灰度级:用来描述黑白显示器的。目前大多都是彩色。对于黑白显示器有kiddle。一般用若干个比特来描述像素点的信息,例如八位,全0则是全白,全1则是最黑,若是取中位100,则是对应100的灰度级。
- 彩色则是采用RGB,每一个像素8个bit表示红,8个bit表示绿,8个bit表示蓝。n位可以表示2n种不同的亮度或者颜色。
刷新:通常显示器为60hz-120hz,1hz就是1次,表示的是1秒刷新60-120次。若是为30hz会明显感受到不流畅。
显示存储器(VRAM):刷新存储器,其中存放的是用于播放显示器上一帧图像的信息,用于刷新图像用的。必须将一帧的信息存储在刷新显示器中。
VRAM容量 = 分辨率 * 灰度级位数
,一般指的是最小容量,若是比这个还小,显示器无法正常工作。VRAM带宽 = 分辨率 * 灰度级位数 * 帧频
(是一个写入的速度,单位应该是B/s),这里帧频指的是刷新的频率,若是刷新频率为60hz,此时对于VRAM的写入速度也是有一定的要求,最低的要求就是VRAM的带宽。
计算VRAM容量(一帧大小)与带宽的计算实际例子:
对于计算得到的显存大小小于实际的显存大小原因?对于其他的一部分空间则可能会随时存放一些任务模型、场景模型,用于实时的3D渲染。
额外说明:若是我们的电脑没有显存,那么就会将电脑中主存中的一部分来作为显存使用;若是电脑有独立显卡,在独立显卡的内部会专门有一个存储芯片用于作为显存使用。
本节回顾
重要考点1:显示器的参数屏幕大小与显示存储器。
重要考点2:字符显示器显示字符的原理
二、I/O接口
2.1、I/O接口的作用
I/O接口的功能包含如下:
①数据寄存器作用:通过数据缓冲区(DBR)达到主机和外设工作速度的匹配。
- 对于CPU与外设之间的速度有很大的差异,此时就需要一个缓存器来进行缓冲的作用。慢速的外设首先将数据输入到数据寄存器中,寄存器写满后,CPU就可以快速的从数据寄存器中取出数据。
②错误与状态检测:在I/O的状态寄存器中存储着外设的错误信息、工作状态,若是CPU想要知道当前外设的工作情况,就可以读取状态寄存器中的信息来确认。
③控制与定时功能:主要接收控制总线发来的控制信号以及时钟信号。
- 首先控制功能指的是I/O接口收到CPU的发出来的命令之后再向I/O设备发出控制命令;对于定时功能则是I/O通过控制总线来接收到CPU的发过来的一系列时钟信号来决定每一步的任务。
④数据格式转换:串-并、并-串等格式转换。
- 在系统中多数是使用并行转,并且这类串行数据的转换则同样是I/O接口实现。
⑤与主机和设备通信:实现主机-I/O接口-I/O设别之间的通信。
2.2、I/O接口的工作原理
主机侧就是系统总线和CPU进行连接
- 对于左边就是内部接口,右边则是外部接口,中间就是I/O接口(I/O控制器)。
注意:对于上图中数据线实际还负责传输中断类型号,这个中断信号不仅仅包含工作完成时的一个中断信号,还包含出现故障的异常中断(对于故障异常的中断还要结合状态/控制寄存器中的内容反馈一个具体的中断类型号)。
内部接口:是要插到主板上的,内部接口与系统总线相连,实际上是与CPU、内存相连,对于数据的传输方式是并行也有可能是串行。
- 数据的传输方式是并行也有可能是串行的原因:2000年几乎都是采用并行技术,之后慢慢转向了串行转换。
外设接口:对于I/O接口是可以连接多个外设的。
I/O接口是如何工作的?这里对打印机的请求打印流程进行描述:
- 首先CPU需要将打印机所对应的命令也就是一串二进制码(具体命令,也就是命令字),将它输入到这个控制器中,对于这个命令还需要厂商的驱动程序协助。
- 接着在I/O控制逻辑的这个指挥下,会根据CPU发过来的这个命令字去给外设发出一系列的控制信号,实际就是一些电信息,用这样的启动方式启动打印机,相对应打印机的一些状态信息同样会输入到控制寄存器中。
- CPU此时可以通过在控制寄存器中读取相应的状态信息来确认设备是否已经就绪或工作是否完成
- 确认准备就绪后,CPU可以通过数据线往数据缓冲寄存器中写入数据,接着在控制逻辑电路控制下将缓冲器中的数据写入到打印机中。
当打印机完成任务后,就会修改状态寄存器中的比特位,CPU只要去读取状态寄存器中的数据就能够确认打印机任务是否完成。
对于CPU何时去读取状态寄存器中的数据?①CPU通过轮询来检查状态寄存器。②通过控制线,IO控制器给CPU发送一个中断请求信号,CPU收到中断信号后来去对这个中断请求进行处理。
为什么要将状态寄存器和控制寄存器组合到一起?更加合理高效的使用控制空间不浪费。
- 首先若是CPU想要让外设工作,那么首先会向I/O控制器中发送命令到控制寄存器,此时控制逻辑单元再将控制信号传给I/O设备,传输好之后就只需要去接收设备的状态信息来存到状态寄存器中,对于这两者存储数据的时间是完全错开的,此时我们就可以将这两个部分寄存器合并到一起,节约空间。
I/O端口:实际指的就是CPU可以连接到的寄存器,I/O接口内部会有多个寄存器,此时就表示有多个端口。
CPU对于外设设备的选择如何确定?
- 方案1:CPU传输指定的寄存器外,还会指明对应的设备编号,对于这两个信息会分开传输。
- 方案2:一个外设对应一组数据缓冲寄存器以及控制寄存器,实际就是一个外设对应一个I/O端口,此时若是有两个外设,那么就需要两组这样的IO端口,也就是四个寄存器。
2.3、I/O接口的组成
接口组成:端口(数据、控制、状态端口)和控制逻辑组成。
- 其中对于数据端口可以进行读或写,对于控制端口只有写,对于状态端口只有读。
2.4、I/O接口的编址方式(统一编址、独立编址)
方式一:统一编址
统一编址(存储器映射方式):主存与I/O端口进行统一编址,I/O端口可以连在主存后面,也可以连到主存前面或者中间
对于统一编址,CPU可以使用Load与Store去读/写寄存器,一般采用的是RISC寄存器。不仅仅是精简指令集系统,对于复杂指令系统若是也采用统一编址,也是可以通过使用命令去访问的,例如add等。
对于主存与I/O端口的划分方案可以如下:
优点:
- 无需专门的输入/输出指令,所有访存指令都可以直接访问端口,程序设计灵活性高。
- 端口有较大的编址空间。
- 读写控制逻辑电路简单。
缺点:
- 端口占用了主存地址空间,使主存地址空间变小。
- 外设寻址时间长,若是访问一个IO端口的时候,我们需要给出很多位的地址,由于地址的位数很多,此时就会导致地址译码器的译码速度比较慢。(地址位数多,地址译码速度慢)
方式二:独立编址
独立编址(I/O映射方式):主存与I/O端口各自独立编址,I/O端口会重新从0开始
对于独立编址,需要使用专门的I/O指令来进行访问I/O端口,例如Intel处理器常用的IN
(将I/O端口寄存器中的数据读取到CPU的寄存器中)、OUT
(将CPU寄存器中的数据写入到I/O端口中)命令。
- 若是I/O指令那么就去根据地址信息找I/O端口,若不是则就是找主存。
优点:
- 使用专用的IO指令,程序编制清晰。
- I/O端口地址位数少,地址译码速度比较快。
- I/O端口的地址不占用主存的地址空间。
缺点:
- 只能使用指令来对端口进行传送操作。(例如X86只有四条IO指令,IN、OUT、INS、OUTS,加s指的是可以写入、输出多个数据)
- 设计灵活性差。
- 需要CPU提供存储器、I/O设备读/写两组控制信号,增加了逻辑电路的复杂性。
2.5、I/O接口的分类
①按数据传送方式分类
②按主机访问I/O设备的控制方式分类
③按功能选择的灵活性分类
知识回顾
三、I/O方式原理细节
3.1、程序查询方式
3.1.1、认识程序查询方式(含指令示例)
借助实际例子来使用I/O指令来完成字符打印,如下两条指令:
IN Rd,Rs
:将I/O端口Rs的数据输入到CPU寄存器Rd中。OUT Rd, Rs
:把CPU寄存器Rs的数据输出到IO端口Rd中。
例如打印流程:
- CPU首先向状态/控制寄存器发出打印的命令OUT指令,CPU通过地址线指明要输出的端口n+1,通过控制线来指明是进行写操作,此时再将要打印的数据通过数据线传过来。
- 此时对于打印机的I/O接口会通过I/O控制逻辑根据CPU发出的打印命令来通过控制线(外设界面控制逻辑中的)向外设发起打印信号,此时打印机收到命令后就开始启动。
- 启动完成后会通过状态线(外设界面控制逻辑中的)发出一个状态反馈。I/O控制逻辑单元会根据这个状态线发来的信号ready就绪状态存到n+1这个状态寄存器中。
程序查询方式:CPU会通过数据线来不断轮询查询这个状态寄存器,使用IN指令来将状态寄存器中的值不断输入到CPU的寄存器中来查看是否为ready准备就绪状态。
- 若是打印a、b、c三个字符,会依次首先发送a字符,之后会使用CPU不断轮询检查直到打印状态好了之后再发送b字符,循环往复。直到最后一个字符也打印完毕之后,CPU会给打印机发送一个停机的命令字,接着I/O控制逻辑也根据停机指令来去发出相应的停机信号给到外设,打印机工作就此停止。
3.2、程序查询方式流程图
程序查询方式流程图:
3.1.3、程序查询方式-例题
题目:
从角度来进行解题:
从频率的角度解题:
结论梳理:
- 若是CPU对鼠标外设的检查频率太低就会导致外设的某一些输入信息会丢失。
- 若是CPU采用程序查询的方式来进行取数据,那么在1s中之内也是无法完成所有数据的传输,并且这个时间还没有算上数据传输的时间。
- 程序查询对于一些慢速的设备都是可以的,采用定时查询并不会对CPU有任何影响,但是对于一些快速的I/O设备来说,若是我们同样采用程序查询方式则会占用大量的时间。
疑问:对于程序查询方式CPU不是会一直查询?
- 实际上也是可以采用定时查询的,每隔一段时间查询一次。对于之前所说的CPU不停地检查一个IO接口的方式,称为独占查询的方式。对于独占查询则是会花100%时间去等待这个I/O的完成。
本节回顾
3.2、程序中断方式
3.2.1、中断系统
3.2.1.1、中断的基本概念
正常情况下CPU执行指令是按照顺序往下执行的,即使出现JMP、call这类指令依旧是属于同一进程。
实际CPU会执行很多个进程,除了运行程序之外,还会需要处理外部设备发来的信号,这样试想若是CPU只能够去顺序执行指令,那么CPU就无法处理用户给计算机发出的一系列请求。
CPU何时又是如何处理中断请求呢?
- CPU依旧是顺序执行指令代码的,若是实现中断系统,CPU每执行完一条指令后都会在指令周期的末尾去进行例行的检查,此时是否有某一种中断信号处理(中断请求信号),若是有那么CPU会展示改变程序的执行流,会转而去执行另一端程序,使用中断服务程序来进行来去响应相应的中断信号(例如敲击键盘)。只有当这个中断处理完成之后,才会继续的回到刚刚的程序继续向下执行。
对于不同的中断请求,我们会采用不同的中断处理程序来进行处理。
中断源:例如键盘、鼠标、打印机这类IO设备,或者也有可能是某些时钟部件会向CPU发送一个中断请求信号。
3.2.1.2、中断的工作流程(单重中断)
详细的整体流程(认识关中断)
中断的基本流程:
下面是归纳总结和补充:
- 首先中断源会发起中断请求到CPU。
- 此时CPU就需要对这个中断信号进行响应,首先判断自己的状态是否可以进行中断响应,若是当前中断状态为关中断那么此时就不会响应任何中断信息,若是此时位开中断则会处理中断信号。
- 若是此时中断信号有多条,此时就会进行中断判优,判断各个中断源的优先级,确认首先要执行的中断请求。
- 确定好要处理的中断信号后,接着通过中断隐指令帮助,将CPU的指令转移到一个指定的中断服务程序(实际就是进行PC修改),在中断服务程序中也是进行顺序执行。
如何判断CPU处于关中断的状态?
- 这里使用8086芯片来举例,关中断的信息是存储在PSW状态寄存器中的,关键是其中的IF字段,指的是Interrupt Flag,若是为1,表示开中断,能够允许中断;若是为0表示关中断,当前无法中断。
对于外中断的分类(狭隘定义):非屏蔽中断与屏蔽中断
- 是否所有的中断在关中断期间无法被执行?对于非屏蔽中断例如掉电中断信号、强行关机按钮,对于一些特别紧急的事件是必须进行响应的,并且CPU在完全断电之前会做一些措施,例如紧急做一些系统状态等。
- 对于可屏蔽中断,CPU在关中断状态下是不能够执行这类中断信号的,对于I/O设备发来的请求几乎都是可屏蔽信号。
关中断的作用?
- 简述:在关中断指令和开中断指令中间夹带这我们想要完成程序,那么这一段程序则是原子性的。
- 详细说明:可以辅助使用一些原子操作(要么全部做完,要么不做)。例如我们要必须执行3条指令,在执行这三条指令的时候是不能够处理响应中断并且构成原子性的操作,此时我们可以在三条指令之前插入一条关中断,接着三条指令执行完之后插入一条开中断,此时若是有中断请求来临,CPU就能够进行处理操作。
实际应用:数据库当中一些原子性操作就与这个有关。包括操作系统中的pv原语执行,实际它也是使用关中断来进行封装的原子操作。
①中断过程的中断请求标记(如何判断?外中断何时触发以及条件)
对于CPU接收到中断请求信号,CPU如何判断是从哪个I/O设备发送过来的?
- 此时就要借助中断请求信号。对于是谁发出来信号的可以使用一个中断请求标记寄存器来进行存储,对于这个寄存器可以集成在CPU中也可以分散的在各个中断源里。若是状态为1时就表示是该设备发起的中断。
对于外中断的响应时间:
CPU响应中断必须要满足的3个条件:
②中断判优-实现原理
若是有多个部件发送了中断信号那应该去响应哪个部件呢?此时就是中断判优需要解决的问题。可以采用硬件判优或者软件判优。
硬件实现:
可以对应寄存器中存储的顺序,最左边的是优先级最高的中断源,越往后优先级越低,将它们组成电路后形成一个硬件排队器,将对应中断源的信号数据分别传输进去,最终输出得到的只会有一个优先级最高的中断源,其他则都是0。
- 例如下面分别输入1111、那么最终输出的则是1000,因为左边的优先级更高。
软件实现:
③中断判优-优先级设置
对于上面几点的补充说明:
- 1中最高级的可以指的是掉电,对于软件中断则如系统调用。
- 2非屏蔽中断指的是一些连关中断都无法将它屏蔽的信号。
- 3与4中说的一致,高速设备由于低速设备。对于高速设备生产力高,若是后执行会影响其效率,而对于低速设备本身速度就比较慢,那么拖一拖也没有关系。
- 5中若是本来是要进行打印的,此时若是同学突然想要修改此时输入优先的话就能够在输出中断前(对于传输数据是处理一个字符,j就给CPU一个中断请求)给处理好完成。
④详细剖析中断隐指令
如何找到对应中断程序的入口地址?可以交给中断隐指令。
中断隐指令主要任务:
- 对应的中断隐指令并不是一条简单的指令,在这个中断隐指令的背后需要做很多的事情,例如jump指令、关中断指令,指的是一系列任务。
- 步骤1:关中断。
- 步骤2:保存断电。
- 步骤3:引出中断服务程序的实现原理包含硬件实现与软件实现
硬件向量法
:
其中如何确定具体中断源相对应的中断向量地址?
- 可以通过一个中断向量地址形成部件,首先之前多个中断源同时中断经过排队器输出的数据重新作为中断向量地址形成部件的输入,接着输出的则是相对应的中断向量地址。
- 中断向量:函数的指针。
- 向量地址:函数指针的指针。实际在这里存储的是最终真实的要执行指定中断程序位置的第一行指令。
疑问:为什么要先去查到向量地址?而不直接定位到对应的中断程序指令位置呢?
- 这样子的原因就是若是一段中断服务程序的指令增加了,那么相对应的所有中断向量地址形成部件中的硬件逻辑就需要修改,若是采用上面先查向量地址,我们就可以直接去修改实际的向量地址值即可!!!
软件查询法
:通过查询向量表来确认中断向量地址、
⑤细致剖析中断服务程序的主要任务
对于上面的补充:
- ①保护现场:让处理好中断请求后回到原先要执行的程序位置以及恢复得到一些中间结果。
- ②中断服务。
- ③恢复现场。
- ④中断返回:将PC指向原有的位置,弹出栈顶保存的寄存器数据恢复现场。
本节总结(中断处理过程)
可以看到流程图中中断隐指令的关中断和开中断之间贯穿了向量地址查询、保护现场…恢复现场等等,在这个过程中CPU是不会出现屏蔽中断的。
- 单重中断:当我们在执行中断服务程序的时候不响应新的中断请求。
之后则会涉及到多重中断,也就是在单重中断再嵌套处理中断响应。
3.2.1.3、多重中断
1、认识单重与多重中断的区别
简述:一个程序在进入到中断服务程序后,还有可能再次进入中断程序。
回顾单中断程序:在关中断与开中断中间不会执行任何的中断服务程序。
多重中断与单重中断的区别:在原本的关中断、开中断中间又增加了一对指令,让其中的执行中断服务程序过程中可以处理响应其他中断,而对于保护现场以及恢复现场是一定要是原子性操作,避免数据丢失。
为什么将开中断指令保存到保护现场后面呢?若是在保护现场之前开中断,那么可能在保护现场数据的过程中处理其他的中断响应,此时就有可能造成现场数据丢失的情况。对于恢复现场同样也是需要一气呵成。
2、中断屏蔽技术
认识屏蔽字:中断屏蔽字,在保护现场后,需要使用这一个中断屏蔽字来指明接下来有哪些中断请求需要被屏蔽。本质也就是解决中断优先级的问题。
- 我们应当优先响应高级别的中断信号,例如我们当前在执行DMA的中断服务程序,在这个过程中若是出现了键盘中断程序肯定是不会处理的。
中断屏蔽技术:可以基于之前的硬件排队器基础上再实现一个增加了中断屏蔽功能的排队器。
下面画圈的则是增加了屏蔽字的部分:
屏蔽中断作用:若是同时有多个中断源来的时候,可以结合相对应终端源屏蔽字来得到基于当前中断服务程序应当要处理的中断请求。例如当我们处理键盘中断请求的时候,此时来了几个中断请求,但是我们所有中断源的屏蔽字都设置为了1,此时最终得到的结果就是一个都进行嵌套向下处理中断请求。
屏蔽字设置规律:设置1表示是屏蔽,设置0表示不屏蔽。每一个屏蔽字中至少有一个1(最起码自己本身要设置1)。
3、多重中断的实际例题
例题
题解:
由于比A优先级高的只有D此时只将D设置为0,其他都需要进行屏蔽,向下几条都类似。
流程梳理:
- 首先执行B程序,执行了5us后,此时中断程序D请求,由于优先级比B高,此时优先执行D程序,经过20us,D程序首先执行完。(已完成D)
- 此时经过5us,B程序执行了10us,此时A发起了中断请求依旧比B高,此时优先执行A程序,经过20us,A程序执行完。(已完成D、A)
- 此时B程序再次执行5us,目前执行了15us,C中断请求来临由于比B高,所以优先执行C程序,经过20us后C完成了。(已完成D、A、C)
- 最终只需要执行B程序即可,经过5us后,B程序也完成!(已完成顺序:D、A、C、B)
扩展:CPU如何检测中断信号?
认识其中的三个关键引脚
与中断相关的三个引脚:IF
、INTR
、NMI
IF为1表示CPU可以接受中断响应,那么此时中断请求信号会从INTR线发过来
- 接着会根据INTA这条线给中断控制器返回一个响应的信号。
- 对于NMI是用来输入非屏蔽信号(对于这个引脚可以忽略IF的值为0的情况)
IF为0表示CPU处于关中断,则不会处理任何中断请求,无论是否有无信号从INTR发过来。
详细剖析其中的发送中断以及进行中断类型号判定最终确认执行的中断地址
与8080配套的中断控制器是8259A芯片,接下来就来详细剖析下面中断控制器如何与8080CPU搭配使用的:
在8259A芯片中有一个中断请求标记寄存器如下,每一根都可以连上特定的IO端口,此时不同的IO接口则会通过这么一根线来发出中断信号。
- 中断请求标记寄存器实际指的就是我们之前存放不同中断源的寄存器。
此时无论收到多少个IO请求信号,这个中断服务程序都会通过内部总线来给CPU发送一个中断请求信号,如下控制逻辑位置的那根线到NMI
则是输入信号的过程:
若是此时CPU没有关中断,此时会通过INTA
这个引脚给中断控制器发回一个反馈信号:
此时通过中断判优,也就是通过这个优先权电路后会确定一个中断信号被选中,画大圆圈如下:
接着再经过所谓的这个中断服务寄存器器后就可以向CPU指明对应的中断信号的类型号是什么,对于中断服务寄存器(ISR
)实际指的就是对应的中断向量地址形成部件:
接着对应的中断类型号会经过数据总线走到CPU的中断类型号,接着根据CPU中的这些中断类型号找到中断服务程序的入口地址:
对于中断控制器中包含有中断屏蔽寄存器,其中就是存储着各个中断源对应的中断屏蔽字,其作用就是用于决定屏蔽哪些中断信号。
3.2.2、程序中断方式
3.2.2.1、认识程序中断本质以及程序中断的流程
程序中断方式本质:IO设备完成后会给CPU发出一个中断信号,CPU与外设可以并行工作。
如上图,我们来叙述下CPU要将一些数据交由外设打印的整个程序中断的流程:
- 首先CPU发起指令到I/O接口后交由I/O控制器来向外设发出命令,此时CPU与外设可以并行进行工作。
- 外设完成之后,此时就会由I/O控制器来发出中断请求给CPU,此时CPU肯定是在执行某个进程的指令(当执行完某条指令后,实际会进行中断检测)检测由中断异常信息时则会去执行中断隐指令,此时引出中断服务程序。
- 在中断服务程序过程中,此时CPU又会向该外设发出同样的的命令循环往复。
可以注意到:CPU与外部设备可以并行的进行工作。
3.2.2.2、程序中断方式-例题(大题,含详细解析)
(1)完成这一任务所需时间多少个时钟周期?
首先读题,是从外设中读取数据到I/O端口,接着通过I/O端口向CPU发送中断请求来让CPU进行处理。
CPU主频为50MHZ,此时计算一个时钟周期需要耗时多少,这里得到20ns。
完成这一任务指的是:1000个字符从外设D传输到I/O端口以及加上I/O端口给CPU发送中断请求还有就是CPU处理中断程序的所有时长。
首先来计算下外设D传输到I/O端口所耗费的时钟周期数,0.5ms/20ns=25000个时钟周期,接着根据题意中断响应需要10个时钟周期,对于中断服务程序总共有20条指令,由于其中第15条指令是用来启动,那么我们只需要计算这15条指令所耗费的时间,这里CPI为4,表示的是一条指令需要4个时钟周期。
最终我们可以计算执行一次CPU读取字符的时间为:2500+10+15*4=25070
最终有1000条指令,那么就是25070*1000=25070 000个时钟周期。
(2)CPU用于完成这一任务的时间大约是多少时钟周期
这里应该是单单指CPU完成所耗费的时间,那么就是处理请求中断响应以及执行中断服务程序的时间,此时读取一个字符的时间为:
10 + 20 * 4 = 90,这里要算上20条指令来计算,最终1000条指令为:
90 * 1000 = 90000时钟周期
(3)中断响应阶段完成了什么事情
首先执行中断隐指令,在执行隐指令的过程中,实际上也会去执行中断服务程序,在中断服务程序中会首先保存现场接着执行中断程序,最后恢复现场结束。
本节回顾
3.3、DMA方式
3.3.1、认识DMA控制器
DMA
控制器比普通的IO控制器厉害些,可以控制数据的传输过程。
DMA
控制器通常用来控制一些"块"设备,例如磁盘等高速设备。
数据传输过程中DMA要做的事情:
基于上面来自行写的描述过程:
1、首先CPU向DMA控制器发送命令,首先要指明输入还是输出,要传的数据量,数据在主存地址、外设的读写地址。
- 数据缓冲寄存器:存放临时数据(外设传来的或者主存传来的)。
- 主存读写地址:主存的指定位置。
- 计数器:要传几个字。
- 外设读写地址:外设的要读或写的初始位置。
2、之后磁盘是一个字一个字的传输的DMA控制器当中,此时在DMA控制器还需要有一个数据缓冲器。
3、此时DMA控制器可以根据主存读写地址将数据缓冲寄存器中的一个字数据传到主存对应的位置(通过主存读写地址),此时计数器也可以进行减1,之后操作同样是循环往复,当所有字都传输完毕之后,计数器也变为了0。
- 对于这一部分操作都是由DMA自己来进行完成的。
4、最终所有数据都传输完成之后,则会向CPU发起一个中断信号。
注意:对于首先进行读/写是CPU告知DMA控制器的,之后对于数据的传输则是DMA控制器自行进行控制完成流向的。
3.3.2、DMA控制器结构细化
对于CPU与主存则是在系统总线上互连。
DMA请求触发器作用:当我们设备输出1个字符到数据缓冲寄存器中时,设备就会将DMA请求触发器设置为1。一旦当一个字数据传输好后,此时就能够告知CPU可以将数据寄存器中的数据取走了。
主存单元计数器(AR)
:用于交换数据的主存地址。
传送长度计数器(WC)
:用来传送数据的长度,用于记录还有多少字要传、已经传了多少字了。
- 可以注意到控制/状态逻辑和主存地址计数器、传递长度计数器中连接了一个1,就是表示当控制/状态逻辑这边发起中断请求时,主存地址会+1,同时计数器长度也会+1。
中断机构
:当DMA完成了整一块的数据传输之后,此时就会发送一个中断请求信号,其就是由中断机构发出的。
- 对应中断机构与传送长度计数器有一根线是连着的,上面对应标着溢出信号,其表示的就是当我们的长度计数器不断+1,到达1k(溢出的单位)时此时就会发出一个溢出信号(表示DMA控制器中数据缓冲寄存器已经完成了1k个字的传送),因而能够让中断机构来发出一个中断请求给CPU来完成DMA控制器与主存的数据传输。
注意:若是DMA控制器在通过系统总线将数据传输到主存时,此时若是CPU想要访问主存则需要等待DMA数据传输完毕之后才可以将总线的使用权还给CPU。
3.3.3、DMA传送过程
下面是基于上面CPU进行三个阶段的说明:
①预处理:
过程:CPU会向DMA控制器指明接下来是进行读/写,告知数据要存储的主存地址(主存地址计数器,AR),指定设备的读写地址(DAR),指明传输多少数据(传送长度计数器,WC),接下来DMA控制器就可以开始启动IO设备。
②数据传输:
过程:
- 这个阶段CPU可以去处理自己的事情,对于数据传输则就要DMA控制器来完成。
- 此时设备输入了一个数据,数据首先会传输到数据缓冲寄存器中,同时会向DMA请求触发器发送一个高电平信号。
- 当DMA控制器检测到设备一个字的数据传输完成之后,此时会DMA控制器会向CPU申请总线的控制,若是CPU允许将总线交由DMA控制器控制时,则会发送一个HLDA信号,此时DMA控制器获得了总线的使用权。
- 此时DMA控制器就可以通过控制线、地址线、数据线来给主存发出写的命令(控制信号),同时将数据寄存器中的数据发出送数据线上,这样就完成了一个字的传输。
- 完成好之后,此时会让主存地址往后移动1位,传送长度计数器也向后移动一位。当传输完指定字以后,传送长度计数器会发成溢出,此时会发送一个异常信号给中断机构,此时中断机构会向CPU发送一个中断请求,表示一整块数据已经传输完成到主存中了。
此时CPU对中断请求来进行一次处理即可。
③后处理:
过程:运行相应的中断服务程序,接着做DMA程序的处理,这些完成之后CPU就重新回到原先的程序段继续执行。
对于上面描述疑问点
疑问:在这里系统总线是由CPU来进行管理的,当DMA控制器在不断占用系统总线时,CPU决定是否要将控制权交给DMA控制器,对于当前DMA控制器占用着,CPU是否能够访问主存?
- 一旦CPU将控制权交给DMA控制器,此时CPU当前就无法访问主存,因为CPU与主存之间的交互也需要通过系统总线来进行。
换一种总线的连接方式,DMA控制器是单独使用一个DMA总线来与主存连接的,若是DMA控制器在向主存传输一个字的过程中,CPU同样是无法访问主存的,只有当传输完之后,才能够访问。
- 若是主存是双端口的,那么是可以支持DMA与CPU同时访问的,若是不是双端口,那么同一时间只能有一个设备能够访问。
3.3.4、解决CPU与DMA的访存冲突(三种方式,针对于三总线结构)
那么此时问题来了,若是CPU与DMA控制器同时都想要对主存进行访问,究竟先满足谁呢?
解决CPU与DMA的访存冲突,三种方式:
第一种方式:停止CPU访问主存
- 简述:这个十分暴力,也就意味着CPU将主存的控制权全部交给DMA控制器,DMA控制器在传输整块数据的过程,CPU无法访问主存,会导致CPU整个运行完全停止。
- 优点:控制简单。
- 缺点:CPU处于不工作状态或保持状态,不能够充分发挥CPU对主存的利用率。
第二种方式:CPU与主存交替访存
- 简述:一个CPU周期,分为C1和C2两个周期,进行时间片的划分。
- 优点:不需要总线使用权的申请,建立和归还过程。
- 缺点:硬件逻辑复杂。未必能够很好利用CPU主存的读写性能,若是CPU对主存的访问十分频繁;对于DMA控制器则是需要等待外设输入一个字之后才会进行访存,此时对于DMA控制器来说给它分配的一个周期可能会被浪费。
第三种方式:周期挪用(周期窃取)
- 这里的周期指的是主存的存取周期。
对于DMA访问主存有三种可能:
①CPU此时不访存(不冲突)。
②CPU正在访存(需要等待CPU存取周期结束让出总线,此时DMA再访存)
③CPU与DMA同时请求访存(I/O访存优先):主要原因是若是I/O控制器不优先将数据缓冲器中的数据刷新到主存,此时就可能出现设备再向数据缓冲器写入数据的情况,有可能会造成数据丢失的情况。
3.3.5、DMA方式的特点
注意:对于单总线情况,DMA是否能够访问主存是CPU说了算,而对于三总线的情况,则需要考虑上面的三种方式。
对于大多数的引入DMA控制器的计算器,都会给DMA控制器与主存之间有一个专用的数据通路,专用总线。
3.3.6、DMA与中断方式对比
针对于上面对比表中的补充与说明如下:
- 数据传送:中断方式是通过I/O控制器发送中断来让CPU去读取数据,此时涉及到CPU中程序的切换、保护与恢复现场;DMA方式则都是交由硬件处理,读取完整块数据后才向CPU发起中断请求。
- 中断请求:中断方式每传输一个数据就会发出一个中断请求;而对于DMA只有整块数据传输完成之后才会发出一个中断请求。
- CPU何时响应:中断方式中指令执行周期结束CPU就会进行检查是否有无中断若是有此时就会响应中断;DMA方式则是每个机器周期结束,一旦总线空闲时CPU即可响应DMA请求。
本节回顾
整理者:长路 时间:2023.6.30-7.2