中断处理过程:
----以下由中断隐指令完成---
【硬件方法】硬件产生中断类型号(能指出中断向量地址),CPU从数据总线上读取这个中断类型号,再由中断向量地址找到中断向量(中断服务程序的入口地址)(该坨向量在中断向量表中)。
【类比C语言:中断向量地址 即 中断服务程序入口地址的地址】
---以下进入中断服务程序---
能引起外部中断的事情是 (A) A.键盘输入 B 除数为0 C浮点运算下溢 D 访存缺页
【解析】外部中断是CPU执行指令以外的事件,主要来源外设请求,A符合。
B除数为0引起内中断(也叫异常),但是浮点运算下溢是指精度不够,无法表示一些非常接近0的数字,而大部分情况中我们把一个非常接近0的数字直接看做0是可以的,无逻辑错误;注意和上溢的区别(上溢是现有的已经不能表示出想要表示的数字了),有逻辑错误。
PS:一般叫缺页中断(习惯),其实是“缺页异常”【内中断为异常,外中断为中断】。
审题:单级中断、中断服务程序
【解析】单级中断中断服务程序中没有关中断,BC错误,D错在保存端点是在中断隐指令中完成(硬件)。
注意单级中断比多级中断少了个中断服务程序中的开中断:
单重中断 | 多重中断 | |
中断隐指令 | 关中断 | 关中断 |
保存断点(PC) | 保存断点(PC) | |
送中断向量 | 送中断向量 | |
中断服务程序 | 保护现场 | 保护现场和屏蔽字(屏蔽字即优先级的信息) |
- | 开中断 | |
执行中断服务程序 | 执行中断服务程序 | |
恢复现场 | 关中断 | |
开中断 | 恢复现场和屏蔽字(此处恢复前要关中断,因为恢复的过程中如果被中断,整体的数字逻辑就会被打乱) | |
- | 开中断 | |
中断返回 | 中断返回 |
屏蔽自己和低优先级中断源
CPU与外设并行工作,传送与主程序串行工作。
程序中断的【中断隐指令】三个步骤记住:关中断、保存断点、中断服务程序寻址。(关中断是通过将允许中断触发器置为0)
外部设备先准备好数据后,发送【中断请求】给CPU,然后CPU再停下手头工作(是在指令的执行周期后进行请求的响应。顺便复习下,指令的四个周期是:取指、间址、执行和中断周期),在中断服务程序中完成一次数据传输——字节单位的data(如CPU取出主存中的数据(取到CPU自己的寄存器中),直接交给I/O端口)。
中断处理次序:利用中断屏蔽字,进行中断的升级,改变多个中断服务程序执行完的次序;
中断响应次序是由硬件排队电路决定的。
内中断是不可被屏蔽的,注意该说法是正确的【CPU只有在处于中断允许状态时,才能响应外部设备的中断请求】
CPU与外设并行工作,传送与主程序并行工作。
DMA的请求包括2个部分(I/O设备->DMA控制器->CPU)。而请求的相应可以在每个机器周期结束时(在取指、间址、执行周期后均可以)。注意DMA中途是不需程序的切换的,所以不需要像程序中断那样进行保护、恢复现场(注意即使是周期挪用也不会改变CPU的现场)。数据的传送后的处理中是要用中断服务程序的。
DMA虽然牛逼但是只能传输批量(块)数据,而中断能处理异常事件,如鼠标键盘等实时外设就要用中断I/O,毕竟DMA方式仅适合高速设备(其实指每秒提出中断申请的次数多的设备)。
DMA传送方式注意折中类型的【周期窃取】,其实质是“CPU不在访存时,I/O设备便占用”。
在采用中断I/O方式控制打印输出中,CPU和打印控制接口中之间交换的信息不可能是【主存地址】
A 打印字符 B 主存地址 C设备状态 D 控制命令
【解析】CPU取出主存中的数据(打印字符)直接传送到打印机I/O端口中,即不需要主存地址。
变式:如果改为DMA,CPU和该接口交换的信息则是“主存地址(CPU要告诉DMA去哪里取操作数)”和“数据个数”。
【拓展】控制线和地址线都是单向传输的(从CPU传送给I/O接口),而I/O接口中的命令字、状态字和中断类型号均是由I/O接口发送CPU的,故只能通过I/O总线传输。
题目:磁盘传输数据以32位的字为单位,传输速率为1MB/s,CPU的时钟周期为50MHz,采用DMA方式,假定DMA的启动需要1000个时钟周期,DMA完成时后处理需要500个时钟周期,若平均传输的数据长度为4KB,问磁盘平均工作时处理器将用多少时间比率进行输入/输出操作?(忽略DMA申请总线的影响)
【解析】第一步:求出1s内需要DMA中断的次数:n=1MB/4KB=K/4 次DMA /s
(注意上面这步不要除错了,虽然分子是一个“传输速率”)
第二步:n×1500 /50M=0.75%(这里的分母是时钟周期,即1s内能“干”多少次)
【拓展】如果题目中说了“周期窃取”则要加上DMA抢占CPU导致CPU等待主存的时间。另外如果是中断方式注意,每传输一个字便进行一次中断处理。
注意:有时题目问的是外设I/O占整个CPU的时间比例。
【题目】已知4个中断源的中断处理次序分别为3,1,4,2;而硬件排队优先次序按1->2->3->4降序排列,若4个中断源同时有中断请求,画出CPU执行程序的轨迹
【注意】虽然排队优先次序中1是排在最前面的,但是由于1程序中的屏蔽字为1101,开中断后转向了3程序
总结:中断响应优先级是由硬件排队线路或中断查询程序的顺序决定的,不可以改变;而中断处理优先级可以由中断屏蔽字来改变,反应的是正在处理的中断是否比新发生的中断的处理优先级低(“屏蔽位”为0,对新中断开放),若是则中止正在处理的中断,转去新的中断,处理完后再回到刚才被中止的中断继续执行。