中断:没有我,还想提高计算机性能,做梦吧!
设想一个场景:
小宏正在吃饭,突然接到公司的电话,要求马上赶到公司开会。此时小宏做了如下几件事情:
- 放下碗筷
- 拿上车钥匙
- 去车库取车
- 赶到公司
如上场景在生活中经常能够见到,放在本文中,有一个术语能够很好的诠释这一场景——中断。
中断
公司打来电话要求小宏马上去公司开会,因而小宏必须放下没有吃完的饭,转而赶去公司开会,等开完会再回到家继续吃饭。这几个动作就表现出了中断的概念。而小宏就是一个中断装置。
什么是中断?
在程序运行过程中出现某种紧急事件,必须中止当前正在运行的程序,转而去处理此事件,然后再恢复原来运行的程序,这个过程就被称为中断。
什么是中断装置?
中断系统中的硬件部分,其职能是发现并响应中断,具体为:
- 识别中断源
- 保存现场
- 引出中断处理程序
中断源
公司打电话要求小宏马上去公司开会,这就是引起小宏不得放下碗筷去公司开会的事件了。在计算机术语中,也称之为中断源。
引起中断的事件称为中断源。
中断字
当小宏到了公司,走进会议室开始开会,此时:
- 拿出笔记本
- 开始记录会议内容
以上是小宏在处理中断事件,我们称,笔记本是中断记录器,笔记本上记录的内容是中断字。
在中断装置发现并响应中断后,转到响应的中断处理程序。
硬件系统为每一个中断源设置一个寄存器,即为中断寄存器,而中断寄存器中保存了与中断事件相关的一些信息,这些信息就称为中断字。
中断类型
小宏记录了一会,发现自己对于某一内容有疑问,于是标记下来,等待会议的提问阶段抛出此疑问。
小宏现在所做是其自己有意识的安排,并且使自愿的,我们称此为自愿性中断。既然有自愿性,相对的就有强迫性中断,被公司叫去开会,这就属于强迫性中断
- 强迫性中断:
这类中断事件是正在运行的程序锁不期望的,这类中断是否发生,何时发生,无法预知。
- 时钟中断
- 输入输出中断
- 控制台中断
- 硬件故障中断
- 程序错误中断
- 自愿性中断:
这类中断事件是正在运行的程序有意识的安排,这类中断的发生具有必然性,发生时机,位置确定。
中断向量
小宏是在技术部会议室开技术研讨会议,这就是所谓的中断向量。
技术部会议室对应中断程序入口地址(PC),技术研讨会议对应的是运行环境(PSW),PC和PSW合称中断向量。
NOTE:
同类事件的处理方法是相同的,所以不是每一个中断源都有一个中断处理程序,而是每一类中断时间有一个中断处理程序。
中断嵌套
小宏在提问阶段抛出疑问时,是在其处理第一个中断事件时发生的,这就是一种嵌套。我们知道,开会时领导发言是不允许被打断的,除非是更高一级的领导才能打断(0.....0),这就是中断的优先级问题以及中断屏蔽。
中断嵌套主要是嵌套,虽然嵌套可以无休止的进行下去,但是,由于中断优先级的存在使得当前中断只能被更高优先级的事件中断,所以中断嵌套实际上是无法无限的。
想出现低优先级的事件中断也并非不可行,只需要调整一下优先级,比如说开会时的提问阶段就提高了普通员工的优先级。
注意:
中断发生时,需要保存(使用栈保存,栈区位置是由硬件确定的)被中断程序的现场信息,以保证处理完中断事件后可以恢复现场。
中断优先级
硬件规定,不可改变,但程序可以适当做出调整。
就如领导的优先级高于普通员工(你说是谁规定的呢?  ̄▽ ̄)
中断屏蔽
中断屏蔽指令可以暂时禁止中断源向处理器发送中断请求。
哪怕是领导,在一些会议上也是不能打断会议的进行 ︿( ̄︶ ̄)︿。
中断处理程序
小宏在会议上做了什么动作,还记得吗?那些动作就组成了一个处理程序。
中断处理程序处理中断的过程中可能会使用通用寄存器,所以需要进一步保存现场信息。
保存什么现场信息呢?保存时需要注意些什么吗?
中断处理完毕返回用户程序时,需要通过一条指令将PC和PSW弹出系统栈,为什么呢?
保存现场信息: PC,PSW以及通用寄存器内容
保存时需注意:现场信息保存在系统栈中,在保存和恢复现场的过程中不响应新的中断(中断屏蔽)。
一条指令恢复PC和PSW:中断向量中程序状态字PSW与指令计数器PC的内容必须由一条指令同时恢复,这样才能保证系统状态由管态转到目态的同时,控制转到上升进程的断点处继续执行。如果不同时恢复,则只能(1)先恢复PSW再恢复PC,在恢复PSW后已经转到目态,操作系统恢复PC的使命无法完成;(2)先恢复PC再恢复PSW,PC改变后转到操作系统另外区域(因为PSW仍为系统状态),PSW无法恢复。