中断处理与进程调度区别
对于中断处理和进程调度的抢占方式(处理机调度),因为二者都有打断的性质,都是抢占了CPU,所以容易混淆。
进程调度的非抢占式方式:只允许进程主动放弃处理机,例:进程正常终止;运行过程中发生异常而终止;进程主动请求阻塞。这不属于中断。(如等待IO)。实现简单,系统开销小但是无法及时处理紧急任务,适合早期批处理操作系统。
一、首先,中断处理是外设打断进程,比如一个进程在使用cpu,它的某条指令到达了中断周期,那么,这个进程被中断。(注意:是被外设中断而不是被一个进程打断。)就算中断嵌套,嵌套的也是其他中断而不是进程。中断服务程序的执行并不视为进程执行。
由OS的内核中的中断处理程序,来处理进程的中断。此时,会进入CPU的管态,并由OS接管计算机的控制权。
二、进程调度抢占方式则是CPU中一个进程打断另一个执行中的进程。(如处于改进程某条指令的取值、执行或者非中断处理的任何时候)
所以可以这么认为——中断处理是进程A执行过程中发生的,且一旦发生无法切换为另一个进程B。
进程调度的抢占方式:指进程被动放弃处理机。例:进程时间片用完;有更紧急的任务需要处理(如IO中断);有更高优先级的进程进入就绪队列。可以优先处理更紧急的进程,也可以实现各进程按时间片轮流执行的功能(通过时钟中断)。适合分时操作系统、实时操作系统。
中断处理时无法进行处理机调度(进程切换)
因为中断恢复所需要的所有数据都放在被中断进程的内核栈中,如果发生切换就找不到之前的被中断进程了,使得中断无法恢复。
注:中断处理保存PC(隐指令保存断点)和PSW、通用寄存器内容(保护现场)都是为了恢复被中断进程。
进程切换保存PC、PSW是为了下次再轮到被切换进程执行时该从哪开始。从这点看,他们的任务是一致的。(都是保存在被中断 / 切换进程的PCB中)
关于进程切换必须用到中断的问题
进程切换必定使用中断,这似乎与上文所述发生了矛盾,但实际上——上文所有中断说的都是外中断,而不是内中断。
进程切换不可发生在外中断过程,但必定发生在内中断过程。
因为进程切换必定发生在内核态(管态),而“中断”,严格地说——“内中断”是目态进入管态的必要不充分条件,所以可见进程切换必定借助内中断且必定发生了处理机模式切换。
进程管理,存储器管理,设备管理。都属于操作系统内核中,OS的对系统资源的管理功能。
(更确切的说这个内中断是软中断(指令产生的),是自愿的,往往这个软中断就是访管指令)
内中断:信号来源于CPU内部,与当前执行的指令有关。如整数除0。
外中断:信号来源于CPU外部,与当前执行的指令无关。(广义的中断)如用户强制结束一个进程。