中断对于操作系统非常重要,它就好像机器中的齿轮,驱动各部件的动作。所以,许多人称操作系统是由“中断驱动”的。
所谓中断是指CPU对系统发生的某个事件做出的一种反应,它使CPU暂停正在执行的程序,保留现场后自动执行相应的处理程序,处理该事件后,如被中断进程的优先级最高,则返回断点继续执行被“打断”的程序。
中断示意图
引起中断的事件或发出中断请求的来源称为中断源。中断源向CPU提出的处理请求称为中断请求。发生中断时,被打断程序的暂停点称为断点。
前面讲过,中断最初是作为通道(或设备)与CPU之间进行通信的工具。通道和CPU并行工作,各自负责自己的任务。当通道完成某项预定的I/O请求或数据传输过程中发生故障时,就用中断方式向CPU“报告情况”,请求处理。
中断的概念后来得到进一步扩展。在现代计算机系统中,不仅通道或设备控制器可向CPU发送中断信号,其他部件也可以造成中断。例如,程序在CPU上运行时出现运算溢出、取数时奇偶错、电源故障、时钟计数到时等,都可成为中断源。
中断概念的另一个发展是访管(即访问管理)指令(或系统调用)的使用。用户程序中可以使用操作系统对外界提供的系统调用,得到系统内部服务。当用户程序执行到系统调用时,进程状态从用户态变为核心态。核心根据系统调用的编号,转去执行相应的处理程序,如对文件的读/写、对进程的控制等。硬件保证用户态下运行的程序不得访问核心空间中的数据,从而保护了操作系统。系统调用的出现为用户编制程序提供了方便和可靠性保证。
2.中断类型 按功能划分这种分类法类似于IBM 360/370系统的分类法,所有中断源分为5类。
(1)机器故障中断。它是机器发生错误时产生的中断,用来反映硬件在执行过程中出现的故障,以便进入诊断程序,做出处理。例如,机器电路检验错、电源故障和内存读数错,等等。
(2)I/O中断。这是来自通道或各种外部设备的中断,用于反映通道或设备的工作情况。例如,打印机打印结束、磁盘传输完成、利用终端进行输入/输出等。
(3)外部中断。它是来自计算机系统外部装置的中断,用来反映外界对本系统的要求。例如,计时器到时溢出,操作员操纵控制台按钮,在多机系统中它机送来信号,等等。
(4)程序性中断。这是因错误地使用指令或数据而引起的中断,用于反映程序执行过程中发现的例外情况,例如,非法操作码,无效地址和运算溢出,等等。
(5)访管中断。由于执行“访问管理程序”指令而产生的中断,用来使CPU的状态从用户态转入管理态,由操作系统根据不同的编号引进不同的处理。这样,操作系统为用户态程序提供对系统资源使用请求的服务。
按产生中断的方式划分(1)强迫中断。在程序运行过程中,发生某些(个)随机性事件,如外设工作结束和程序运行出错等,需要及时进行处理的一种中断。程序设计人员在编制程序时并不知道它何时出现,也并不期望它出现。上述按功能划分的机器故障中断、I/O中断、外部中断和程序性中断都可算做强迫中断。
(2)自愿中断。程序员在编制程序时因需要系统提供某些服务而有意使用访管指令或系统调用,从而导致执行程序的中断。这是程序员事先安排好的,其出现时机是可知的。上述按功能划分的访管中断就属于这一类。
按中断事件来源划分目前,很多小型机系统和微型机系统都采用这种分类方式。
(1)中断。它是由CPU以外的事件引起的,如I/O中断、时钟中断、控制台中断等。利用中断实现设备与CPU的通信。中断是异步的,因为从逻辑上讲,中断的产生与当前正在执行的进程无关。
(2)异常(Exception)。它是来自CPU内部的事件或程序执行中的事件引起的过程。如CPU本身故障(电源电压低于105 V,或频率在47~63 Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)和请求系统服务的指令(即访管指令)引起的事件等。可见,异常包括很多方面,主要有出错、陷入和可编程异常。出错和陷入之间最重要的区别是处理完异常事件返回时,出错事件会重新执行导致异常的那条指令,如缺页故障处理完之后还会尝试重新执行那条触发异常的指令(通常不会再缺页);而陷入事件则不会重新执行那条指令。陷入主要用于程序调试,被调试的进程遇到用户设置的断点会停下来等待你的处理,当你让它重新运行时,它就执行下面的指令。
可编程异常是由于用户在C程序中使用了系统调用而引发的过程。系统调用也称软件中断(或陷入)。应用程序使用系统调用就可由用户模式转入核心模式,在核心模式下完成相应的服务之后再返回用户模式。所以系统调用是用户程序与内核的接口。硬件对可编程异常的处理与对陷入的处理是一致的,即从这类异常返回时,也返回产生异常的下一条指令。
3.中断系统的作用中断系统是当代计算机必不可少的组成部分之一。中断系统的作用主要有以下5点。
(1)提高主机的利用率,使高速CPU可以和低速的外部设备并行工作。
(2)及时进行事故处理。当计算机发生硬件故障或出现程序性错误(如运算结果溢出、除数为0、地址错、非法操作码等)时,可以通过中断系统进行处理。操作系统通过程序复执来排除偶然性错误,或将故障与错误记录下来,为故障诊断和机器恢复做好准备。
(3)实现分时操作。如前所述,在分时系统中正在运行的进程用完所分到的时间片后,就要让出CPU,排到相应的就绪队列中。在这里,依靠定时时钟对时间片进行计时,到达预定值时就产生时钟中断,调用进程调度程序进行相应处理。就是说,通过中断系统将CPU的时间分配给各个进程使用。
(4)实现实时操作。在实时控制系统中,很多信号是随机产生的,只有通过中断系统才能对它进行及时处理,避免信息的丢失。
(5)方便程序调试。利用中断可以方便地调试程序,可人为设置断点,随时中断程序的执行,查看中间结果,了解机器的工作状态,输入临时命令等。