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 控制方式,基本的控制方式有以下四种:
① 程序查询方式
【一个字一个字的存】
程序里的变量存储的位置都是在主存里的,所以数据流最后要放回主存1
程序查询方式的基本原理就是当CPU向I/O接口发出一个指令之后,就一直处于等待和询问之中,每一个节拍都查看一下I/O接口的状态寄存器,看是否已经完成。如果完成了,CPU就进行数据的交互(CPU向I/O传数据或者从I/O的数据寄存器取数据)。王道PPT上举了一个例子进行说明:
如图,目前我们需要使用打印机打印三个字符的数据。需要两条I/O指令,IN和OUT分别控制数据从I/O输入到CPU,从CPU传出到I/O。具体的操作如下:其实是先OUT后IN。
(1)首先从主存里面把要打印的数据从主存放到CPU的一个寄存器里面,假设第一个字符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指令。
(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接口的控制指令发出停机指令(需要驱动程序的协助),之后打印机停止工作,反馈一个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 21 2^{21}221来除以2 2 2^222就是2 19 2^{19}219次,一次的时间也是2/1Ms,那么就是2 20 2^{20}220/1Ms,拿计算器算一次是105%,所以CPU用程序查询方式完成不了对硬盘的访问的。所以程序查询仅适用于慢速的I/O设备。
题目中说的方法是定时查询,也就是每隔一段时间查询一次。前面学习的是独占式查询。在数据不易丢失时常采用定时查询,如果容易丢失则采用独占式查询。
【1】程序查询方式:这个阶段CPU需要一直检查,进行忙等,CPU与I/O串行工作,而无法去做其他的事情,效率很低。
- 优点:接口设计简单、设备量少。
- 缺点:CPU在信息传送过程中要花费很多时间用于查询和等待,而且如果采用独占查询,则在一段时间内只能和一台外设交换信息,效率大大降低。
分类:
- 独占查询:CPU 100%的时间都在查询l/O状态,完全串行。
- 定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的间隔内CPU可以执行其他程序。
②程序中断方式
【一个字一个字的存】
程序中断方式:等待键盘I/O时CPU可以先去执行其他程序,键盘I/O完成后I/O控制器向CPU发出中断请求,[CPU在每个指令执行的末尾都会例行检查是否有I/O信号]CPU响应中断请求,并取走输入数据。
详细:
- PC值:中断隐指令自动保存(硬件完成);
- 通用寄存器、中断屏蔽字:操作系统保存;
- 块表(TLB)和Cache:硬件机构保存。
例题:
③ 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详细传送过程:
④ 通道控制方式
有的商用中型机、大型机可能会接上超多的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 接口功能:
- 进行地址译码和设备选择;
- 实现主机和外设的通信联络控制;
- 实现数据缓冲;
- 信号格式的转换;
- 传送控制命令和状态信息;
进行地址译码和设备选择
I/O接口会对CPU送来的地址码进行译码,然后产生设备选择信息,以选中指定外设与CPU进行信息交换。
实现主机与外设的通信联络控制
解决主机与外设的时序配合问题,协调不同速度的外设与主机进行信息交换,使得整个计算机协调统一的工作。
实现数据缓冲
I/O接口会设置数据缓冲寄存器,以暂存数据,解决因外设速度与主机不一致而造成数据丢失的问题。
信号格式的转换
解决外设电平、数据格式可能与主机存在差异的问题。I/O接口提供了电平转换、串/并或并/串转换、模/数或数/模转换等功能。
传送控制命令和状态信息
CPU要启动某一外设时,会通过I/O接口中的命令寄存器向外设发出启动命令;外设准备就绪时,会将自身的状态信息存储到I/O接口中的状态寄存器,并反馈给CPU,同时也可以进行错误与状态检测
2.2 I/O 接口的类型
2.3 I/O 接口的基本结构
有的I/O接口可以连接多个设备!比如下面的USB控制器
命令字:也可叫做控制字,每一个外部设备识别命令字的方式是千差万别的,只有厂家自己知道他们的设备可以识别什么命令,因此 发出这个命令字需要设备所对应的驱动程序的写入。
CPU向数据缓冲寄存器里写入数据,在I/O控制逻辑的操控下,把这些数据逐个输出到外部设备上,当打印机完成工作后,会给I/O接口一个状态的反馈【修改状态寄存器里的值】这样CPU就会通过状态寄存器来得知I/O操作的完成【①CPU不断轮询检查状态寄存器②通过控制线向CPU发送中断控制信号,当CPU收到后再对中断进行处理】
- 数据缓冲寄存器可通过数据总线(I/O总线)与主存或CPU进行数据传送。
- 状态寄存器用于存储接口和外设的状态信息。
- 控制寄存器用于存储CPU向外设发出的控制命令。
- 状态寄存器与控制寄存器在数据传送的方向上是相反的。
- 地址线用于给出要访问的I/O接口中的寄存器的地址。
- 控制线用于给出读写信号(是读寄存器,还是写寄存器)、仲裁信号和握手信号等;
- I/O控制逻辑能够对控制寄存器中的命令字进行译码,并将译码后产生的额控制信号通过外设界面控制逻辑发送到外设;同时它还能协调数据缓冲寄存器与外设之间的数据交换;它还能收集外设的状态信息并存储到状态寄存器中。
I/O指令用来访问I/O接口中的数据缓冲寄存器和状态寄存器。
I/O指令只能在操作系统内核的底层I/O软件中使用,属于特权指令。
状态寄存器和控制寄存器可以共用一个:?
CPU发出命令 到 控制寄存器 然后控制寄存器到I/O控制逻辑里 这时候控制寄存器就空了 状态就可以写进去了 所以两个可以公用同一个寄存器 【使用时间上是错开的】
I/O接口里的控制器 又叫做端口
2.4 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 执行程序实现;
关于 程序查询方式 的例题
结论:对于快速I/O设备,使用 程序查询方式 会占用大量的CPU查询时间;
小结
定时查询、独占查询
3.2 中断系统
1. 中断的基本概念
中断的主要功能 (了解即可) :
- ① 实现 CPU 与 I/O 设备的并行工作;
- ② 处理硬件故障和软件错误;
- ③ 实现人机交互,用户干预机器需要用到中断系统;
- ④ 实现多道程序、分时操作,多道程序的切换需借助于中断系统;
- ⑤ 实时处理需要借助中断系统来实现快速响应;
- ⑥ 实现应用程序和操作系统(管态程序)的切换,称为“软中断”;
- ⑦ 多处理器系统中各处理器之间的信息交流和任务切换;
当CPU 检测到中断信号后,由 硬件 自动保存被中断程序的断点 (即程序计数器PC).
之后,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址
(各中断向量统一存放在 中断向量表 中,该表由操作系统初始化)。 接下来开始执行中断服务程序,保存PSW、保存中断屏蔽字、保存各通用寄存器的值,并提供与中断信号 ==对应的中断服务,==中断服务程序属于操作系统内核。
程序中断方式的思想:CPU执行程序无需一致等待 I/O设备,代I/O设备完成之后发送中断请求通知CPU;
非屏蔽中断 + 屏蔽中断
2. 中断请求标记
CPU设置 中断请求标记 来判断是哪个设备发来的中断信号 - 中断请求标记标记触发器INTR ;
.
CPU响应中断必须满足条件:
- ① 中断源有中断请求;
- ② CPU允许中断及开中断(异常和不可屏蔽中断不受此限制);
- ③ 一条指令执行完毕(异常不受此限制),且没有更紧迫的任务;
3. 中断判优
中断判优:当有多个中断信号同时到来,该选择先处理哪个 ?
- 硬件排队器 实现硬件判优,确保当前优先级最高的中断的信号为1;
- 查询程序 实现软件判优,按优先级递减顺序查询中断;
中断优先级的设置原则
4. 中断系统的工作流程
中断隐指令 并不是一条指令,而是CPU遇到中断信息,进行的一系列动作;
【问题一】PC的值如何保存 ?
【问题二】保存完PC的值之后,如何找到对应中断处理程序的入口地址 ?
中断隐指令 的主要任务:
- 关中断
- 保持断点
- 引出中断服务程序
如何确定中断信号对应的中断服务程序的起始地址:
- 软件查询法
- 硬件向量法(重点)
硬件向量法
首先,可以给 中断请求 编号,例如下图中的 12H、13H、14H ;
12H 中的 无条件转移指令
JMP 200
,指明 12H 所对应的中断服务程序; 把 指向中断服务程序的地址信息 称为 中断向量 ;
实际过程:由 硬件 产生 向量地址 ,再由 向量地址 找到 入口地址 ;
中断向量是函数的指令,向量地址是函数指针的指针;
中断服务程序 的主要任务;
- 保护现场
- 中断服务
- 恢复现场
- 中断返回
小结
3.3 多重中断
1. 多重中断的概念
【问题一】为什么在多重中断中,要把开 中断指令 放在保护现场之后呢 ?
答:保护现场必须完全进行完,才可以开中断,不然主程序的信息可能会被新中断影响,导致未完全保存;(恢复现场同理)
【问题二】中断屏蔽字
答:中断屏蔽字,用来屏蔽优先级较低中断。
2. 中断屏蔽技术
关于 中断屏蔽技术 的例题
小结
3.4 程序中断方式
关于 程序中断方式 的例题
小结
3.5 DMA方式
1. DMA控制器
2. DMA传送过程
3. 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在现行指令结束的最后一个状态周期响应中断;