中断
你正在看书,突然你的朋友打来电话,于是你放下书本去接电话,电话打完接着看书。
电话响->放下书本->接电话->继续看书这一个过程,就类似于CPU中断的处理过程。
一. CPU中断的作用
早期的CPU处理外设的事件(比如接收键盘输入),往往采用“轮询”的方式。即CPU像个查岗的一样轮番对外设顺序访问,比如它先看看键盘有没被按下,有的话就处理,没的话继续往下看鼠标有没有移动,再看看打印机……这种方式使CPU的执行效率很低,且CPU与外设不能同时工作(因为要等待CPU来“巡查”)。
中断模式时就是说CPU不主动访问这些设备,只管处理自己的任务。如果有设备要与CPU联系,或要CPU处理一些事情,它会给CPU发一个中断请求信号。这时CPU就会放下正在进行的工作而去处理这个外设的请求。处理完中断后,CPU返回去继续执行中断以前的工作。
二. 中断模式的作用和优点在于:
1. 可以使CPU和外设同时工作,使系统可以及时地响应外部事件。
2. 可允许多个外设同时工作,大大提高了CPU的利用率,也提高了数据输入、输出的速度。
3. 可以使CPU及时处理各种软硬件故障(比如计算机在运行过程中,出现了难以预料的情况或一些故障,如电源掉电、存储出错、运算溢出等等。计算机可以利用中断系统自行处理,而不必停机或报告工作人员。)
三、CPU中断的类型
在计算机系统中,根据中断源的不同,通常将中断分为两大类:
1. 硬件中断
2. 软件中断
硬件中断
硬件中断又称外部中断,主要分为两种:可屏蔽中断、非屏蔽中断。
可屏蔽中断:
1. 常由计算机的外设或一些接口功能产生,如键盘、打印机、串行口等
2. 这种类型的中断可以在CPU要处理其它紧急操作时,被软件屏蔽或忽略
非屏蔽中断:
1. 由意外事件导致,如电源断电、内存校验错误等
2. 对于这种类型的中断事件,无法通过软件进行屏蔽,CPU必须无条件响应
在x86架构的处理器中,CPU的中断控制器由两根引脚(INTR和NMI)接收外部中断请求信号。其中:
1. INTR接收可屏蔽中断请求
2. NMI接收非屏蔽中断请求
典型事例:
1. 典型的可屏蔽中断的例子是打印机中断,CPU对打印机中断请求的响应可以快一些,也可以慢一些,因为让打印机稍等待一会也是完全合理的。
2. 典型的非屏蔽中断的例子是电源断电,一旦出现此中断请求,必须立即无条件地响应,否则进行其他任何工作都是没有意义的。
软件中断
软件中断又称内部中断,是指在程序中调用INTR中断指令引起的中断。比如winAPI中,keybd_event和mouse_event两个函数,就是用来模拟键盘和鼠标的输入(这个仅为笔者本人的猜测)。
四、CPU中断的过程
(1). 中断请求
中断请求是由中断源向CPU发出中断请求信号。外部设备发出中断请求信号要具备以下两个条件:
1. 外部设备的工作已经告一段落。例如输入设备只有在启动后,将要输入的数据送到接口电路的数据寄存器(即准备好要输入的数据)之后,才可以向CPU发出中断请求。
2. 系统允许该外设发出中断请求。如果系统不允许该外设发出中断请求,可以将这个外设的请求屏蔽。当这个外设中断请求被屏蔽,虽然这个外设准备工作已经完成,也不能发出中断请求。
(2). 中断响应、处理和返回
当满足了中断的条件后,CPU就会响应中断,转入中断程序处理。具体的工作过程如下:
1. 关闭中断信号接收器
2. 保存现场(context)
3. 给出中断入口,转入相应的中断服务程序
4. 处理完成,返回并恢复现场(context)
5. 开启中断信号接收器
(3).中断排队和中断判优
1. 中断申请是随机的,有时会出现多个中断源同时提出中断申请。
2.CPU每次只能响应一个中断源的请求。
3. CPU不可能对所有中断请求一视同仁,它会根据各中断源工作性质的轻重缓急,预先安排一个优先级顺序。当多个中断源同时申请中断时,即按此优先级顺序进行排队,等候CPU处理。
五 . 软件中断和硬件中断
软中断:
1. 编程异常通常叫做软中断
2. 软中断是通讯进程之间用来模拟硬中断的 一种信号通讯方式。
3. 中断源发中断请求或软中断信号后,CPU或接收进程在适当的时机自动进行中断处理或完成软中断信号对应的功能
4. 软中断是软件实现的中断,也就是程序运行时其他程序对它的中断;而硬中断是硬件实现的中断,是程序运行时设备对它的中断。
硬中断:
1. 硬中断是由外部事件引起的因此具有随机性和突发性;软中断是执行中断指令产生的,无面外部施加中断请求信号,因此中断的发生不是随机的而是由程序安排好的。
2. 硬中断的中断响应周期,CPU需要发中断回合信号(NMI不需要),软中断的中断响应周期,CPU不需发中断回合信号。
3. 硬中断的中断号是由中断控制器提供的(NMI硬中断中断号系统指定为02H);软中断的中断号由指令直接给出,无需使用中断控制器。
4. 硬中断是可屏蔽的(NMI硬中断不可屏蔽),软中断不可屏蔽。
区别:
1. 软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的
2. 软中断是由程序调用发生的,而硬中断是由外设引发的
3. 硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等待较长时间