什么是中断
中断其实是一种“中断”事件,中断具体代表什么意思需要考虑它所处的上下文环境和参照对象是谁。考虑事件,我们可以简单把中断抽象为这样一种模型:
![50e397efe4c26a730f696ba8fa15e0be.png](https://i-blog.csdnimg.cn/blog_migrate/bda10640c9bf34ae301827fd7aeabdbb.jpeg)
当我们分析某种中断事件时,我们需要搞清楚这四个对象:
中断源
- 中断源是谁
- 中断源在什么条件下触发中断
- 中断源如何触发
中断信号
- 信号具体指的是什么
- 信号是否需要存储
- 如何存储
中断控制器
- 中断信号的管理
比如说中断源发送的信号是否屏蔽,信号是否可被中断处理器重复处理,信号的处理是否有优先级...
中断处理器
- 如何获取到信号
- 拿到信号做什么样的操作
- 处理完信号后做什么样的操作
在实际的中断事件中,并不一定刚好有上面提到的这四类对象,可能更复杂可能更简单化。但是当我们考虑中断事件时,需要明确应该有类似功能的“对象”承担这样的逻辑。
下面我们主要围绕操作系统的中断机制,Java的中断机制,如何设计一个异步线程间的中断系统这三部分简单探讨下。
操作系统的中断机制
与操作系统有关的中断,通常是指:程序在执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行, 转去执行相应的事件处理程序,待处理完成 后再返回原程序被中断处或调度其他程序执行的过程。
按照中断事件本身的不同,可以划分为处理器之外的中断事件,异常,系统异常。
处理器之外的中断事件
指由外围设备发出的信号引起的,与当前运行指令无关的中断事件。示意图如下:
![3b79de16a1695857cce072c1f0f15874.png](https://i-blog.csdnimg.cn/blog_migrate/c50c178d960ca96eed3359fdb5337b1a.jpeg)
我们分别以上述四个对象来看:
- 中断源
中断源:外部设备,如打印机,键盘,鼠标等。
触发条件:如外围设备报告I/O状态的I/O中断;外围设备发出的对应信号中断,如时钟中断,键盘/鼠标对应信号的中断,关机/重启动中断等。
触发方式:由外部设备向中断控制器发出中断请求IRQ。