什么是中断


中断其实是一种“中断”事件,中断具体代表什么意思需要考虑它所处的上下文环境参照对象是谁。考虑事件,我们可以简单把中断抽象为这样一种模型:

当我们分析某种中断事件时,我们需要搞清楚这四个对象:

中断源

  • 中断源是谁
  • 中断源在什么条件下触发中断
  • 中断源如何触发

中断信号

  • 信号具体指的是什么
  • 信号是否需要存储
  • 如何存储

中断控制器

  • 中断信号的管理

比如说中断源发送的信号是否屏蔽,信号是否可被中断处理器重复处理,信号的处理是否有优先级…

中断处理器

  • 如何获取到信号
  • 拿到信号做什么样的操作
  • 处理完信号后做什么样的操作

在实际的中断事件中,并不一定刚好有上面提到的这四类对象,可能更复杂可能更简单化。但是当我们考虑中断事件时,需要明确应该有类似功能的“对象”承担这这样的逻辑。

下面我们主要围绕操作系统的中断机制Java的中断机制如何设计一个异步线程间的中断系统这三部分简单探讨下。

操作系统的中断机制


与操作系统有关的中断,通常是指:程序在执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行, 转去执行相应的事件处理程序,待处理完成 后再返回原程序被中断处或调度其他程序执行的过程。

按照中断事件本身的不同,可以划分为处理器之外的中断事件异常,系统异常

处理器之外的中断事件

指由外围设备发出的信号引起的,与当前运行指令无关的中断事件。示意图如下:

我们分别以上述四个对象来看:

  • 中断源

中断源:外部设备,如打印机,键盘,鼠标等。

触发条件:如外围设备报告I/O状态的I/O中断;外围设备发出的对应信号中断,如时钟中断,键盘/鼠标对应信号的中断,关机/重启动中断等。

触发方式:由外部设备向中断控制器发出中断请求IRQ。

  • 中断信号

也就是说中断源通知给中断控制器的是什么。

可以是通过一条信号线上产生特定的电平(利用高低电平表示是否中断两种状态),也可以在总线上发送特定消息或者消息序列,也可以是在中断寄存器中设置已发生的中断状态等。

  • 中断控制器

CPU中的一个控制部件,包括 中断控制逻辑线路和中断寄存器。负责中断的发现和响应。

也就是说负责检查中断寄存器中的中断信号,当发现中断时让CPU切换当前进程程序,去处理中断程序。响应示意图如下:

  • 中断处理器

指的是CPU接收到不同的中断信号该怎么处理。包括“中断处理过程”和“恢复正常操作”两部分。

1.中断处理过程

首先CPU需要将当前运行进程的上下文保存,从中断进程中分析PSW,确定对应的中断源和执行对应的中断处理程序。

小贴士:PSW(Program Status Word): 是指在电脑中,一段包含被操作系统使用的程序状态信息的内存或硬件区域。一般用一个专门的寄存器来指示处理器状态。可以理解为我们上面提到的中断信号存储装置.

2.恢复正常操作

当中断程序执行完毕,接下来执行哪个进程由进程调度决定,由调度策略决定是否调度到中断执行前的进程。

较为完整的中断响应流程图如下:

异常系统异常 这两类中断事件主要属于处理器执行特定的指令引起的中断事件。和上述硬件外围设备引起的中断事件的中断源不同,中断的发起,控制和处理主要是由操作系统的指令逻辑和线路来承担。是一种同步的处理操作,而外部中断是由外部设备发起,是一种异步的处理操作。下面我们简要介绍下。

异常

异常指当前运行指令引起的中断事件。包括错误情况引起的故障,如除零算数错误,缺页异常;也包括不可恢复的致命错误导致的终止,通常是一些硬件错误。

  • 异常的处理

对于故障的处理,根据故障是否能够被恢复,故障处理程序要么重新执行引起故障的指令,要么终止。

对于终止的处理,处理程序将控制返回给一个abort例程,该例程会终止这个应用程序。

系统异常

系统异常指执行陷入指令而触发系统调用引起的中断事件,如请求设备、请求I/O、创建进程等。

  • 系统调用的处理

这种有意的异常,称为陷阱处理。处理完成后陷阱程序会将控制返回给应用程序控制流的下一条指令。

总结一下,操作系统的中断类别行为如下:

好了,大头总算完了。因为小姐姐主要是Java码农,下面将主要介绍和Java相关的中断语义是什么。

Java的中断机制


理解了上面操作系统的中断之后,Java的中断机制就很easy了

版权声明:本文为gxm2333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gxm2333/p/12905147.html