软中断,硬中断

软中断,也叫同步中断。软中断是由CPU执行中断产生指令时产生,是由程序预先实现好的,不是随机的

硬中断,也叫异步中断。硬中断是由硬件设备依照CPU时钟信号产生的,即意味着中断发生具有随机性和突发性,能够在指令正在执行时发生。例如键盘中断

 

软中断产生源有两种:

1、硬中断处理程序产生。即:将硬中断处理程序分成"上半部"和"下半部"。上半部在屏蔽中断的上下文中运行,用于完成关键性的处理动作,然后产生软中断。下半部就是软中断处理程序,对时间要求不是非常紧急,通常比较耗时的,因此不在硬中断服务程序中执行。

     如:打印机端口产生一个硬件中断时,会执行硬件中断处理程序,硬中断处理程序会产生一个软中断并送到操作系统内核里,在软中断处理程序中唤醒睡眠在打印任务队列的处理进程。

2、软件程序执行过程中,主动产生的软件中断。

     如:程序执行过程出现异常时,主动调用abort()时,产生SIGABRT软中断。

     如:执行系统调用sleep(),当睡眠时间到达时,通过软中断触发该进程被唤醒。

 

中断抢占:

1、硬中断可以被另一个优先级更高的硬中断“中断”,不会被同级(同一种硬中断)或低级的硬中断“中断”,更不会被软中断“中断”。

2、软中断可以被硬中断“中断”,但是不会被其它软中断“中断”。

3、在一个CPU上,软中断总是串行执行。所以在单处理器上,对软中断的数据结构进行访问不需要进行任何同步处理。但是,多个CPU可以同时执行软中断。

4、由硬中断产生的软中断,在硬中断执行完成后,会马上执行软新产生的软中断。但是,如果有其它软中断正在执行,为了保证上述第2点,会先判断当前是否在中断上下文中。如果是在中断上下文中,说明有其它中断正在执行,则不再执行该新产生的软中断,软中断处理程序需要依赖OS重新调度。(有疑问,不确定,欢迎大家指点)

你可能感兴趣的:(软中断,硬中断)