2.2.5 中断

中断是计算机系统结构的一个重要部分,是实现多道程序的必要条件。没有中断,操作系统无法改变CPU的状态(即目态与管态之间的转换)。可以说操作系统是由中断驱动的。中断的实现需要硬件和软件两部分共同完成,其中的硬件部分称为中断装置,软件部分称为中断处理程序。

1.中断的基本概念

1)中断(interrupt):是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行的过程。

2)中断源:是指引起中断发生的事件。

3)中断请求:是指中断源向CPU发出的请求中断处理信号。

4)中断响应:是指CPU收到中断请求后,暂停先行程序,转向相应的中断事件处理程序。

5)断点:是指发生中断时,刚执行完的那条指令所在的单元号或者说被打断程序的暂停点。

6)恢复点:是指断点的逻辑后继指令的单元号。

7)中断返回:是指返回断点的过程。

8)中断向量:是指将存放中断处理程序入口地址的主存单元。

2.中断机制

每个计算机系统都有自己的中断机制,中断机制包括硬件的中断装置和操作系统的中断处理程序。中断装置的职能是发现并响应中断。它由一些特定的寄存器和控制线路组成。CPU和外设等识别到的事件保存在特定寄存器中。CPU执行完一条指令后,均由中断装置判别是否有中断事件发生。若无事件发生,CPU继续执行后续指令;若有事件发生,中断装置中断原来占用CPU的程序执行,让操作系统的中断处理程序占用CPU,对出现的事件进行处理,当操作系统对事件处理完成后,再让原来的程序继续占用CPU执行。

3.中断的分类

1)根据事件的性质和激活方式,可将中断分为两个大的类型:强迫性中断和自愿性中断。

·强迫性中断是由随机事件或外部请求信息引起,这类中断事件无法预知,因而运行程序可能会在任意位置处被中断。时钟中断、控制台中断、硬件故障中断、程序性中断、输入输出中断等都属于强迫性中断。

·自愿性中断也称访管中断,是正在运行的程序有意识安排的,通过执行“访管指令”引起的中断,目的是要求操作系统为其提供某种服务。如用户请求系统分配内存空间、请求分配设备、请求启动外设等。

2)根据中断源,可将中断分为硬中断和软中断。硬中断是由硬件产生中断源而引发的中断,它又分为外中断和内中断:

·外中断,又称为异步中断,是指来自处理器和内存外部的中断,包括I/O设备发出的I/O中断、外部信号中断(如用户键入Esc键)、各种定时器引起的时钟中断,以及程序调试中设置断点等引起的调试中断等。外中断在狭义上一般称为中断。

·内中断,又称为同步中断,主要指在处理器和内存内部产生的中断。一般称内中断为陷阱(trap)或异常。它包括程序性异常(如算术操作溢出、地址越界、数据格式非法、除数为零、缺页或缺段故障等)、访管中断(通常由用户程序执行系统调用引起)、硬件故障中断(如掉电、内存校验错误)等。

软中断利用硬中断的概念,采用软件方法对中断机制进行模拟,分为信号中断和软件中断两种机制。

4.中断响应

中断响应是由硬件对中断做出反应的过程,包括发现中断源、现场保护、转向中断处理程序、现场恢复4个步骤。中断装置发现中断事件后,首先将被中断程序的断点(当前的指令地址)等保存起来,然后让操作系统的中断处理程序占用CPU。操作系统在处理事件之前,将被中断程序在处理器各寄存器中设置的状态保存起来,在事件处理结束后,选中某个程序占用处理器时再把被保存的该程序的状态恢复到各寄存器中,同时把该程序的返回地址装入指令地址计数器中。于是,被选中的程序就可占用CPU,根据被中断前的情况继续执行。

5.中断处理

中断处理即中断事件的处理。一般为系统中每个中断编制一个中断处理程序,并将这些程序的入口地址存放在特定的主存单元中。中断装置响应中断后,通过交换中断向量引入中断处理程序。中断处理程序需要进一步分析中断源,然后进行相应的处理,最后根据情况决定是否需要切换进程。中断处理的主要步骤包括:保存被中断进程的现场(保存未被硬件保存的现场)、识别中断具体原因、根据中断原因处理中断事件、中断返回。

(1)时钟中断处理

对于时钟中断,中断处理程序需要涉及系统管理和维护相关的工作,包括记录进程已占有CPU的时间并判断时间片是否用完,或者重新计算进程的优先数,并判断是否有更高优先数的进程出现;记录作业在输入井中等待的时间以及目前的优先级别;动态统计运行进程占用和使用CPU的时间;定时运行死锁检测程序等。

(2)硬件故障中断处理

对于硬件故障中断,中断处理程序通常要保护现场,停止设备工作,停止CPU运行,报告故障信息,并对故障进行恢复。

(3)程序性中断处理

对于地址越界、执行非法特权指令等中断,中断处理程序通常会报告出错的进程号、出错位置和错误性质;对于缺页或缺段中断,中断处理程序要将所需的页或段动态调入内存;对于浮点溢出、除数为零等,可由用户程序自行处理,如果没有提供特定的处理程序,则可由操作系统按照标准处理方法加以处理。

(4)I/O中断处理

对于I/O正常结束的情况,将等待传输的进程均设置为就绪态;对于I/O传输错误的情况,先向设备发送命令索取状态字,然后根据所分析的错误原因,采用I/O复执或者请求人工干预。

6.中断优先级与中断屏蔽

由于中断源所代表事件的重要性不同,要求立即处理的紧迫程度不一样,操作系统一般根据中断源的自身情况,按照一定的顺序来加以响应,形成了中断的优先级。当系统中同时发生多个中断时,先处理优先级高的中断。一般来说,各中断源的优先级在系统设计时给定,在系统运行时是固定的。

在中断事件的处理过程中可能会发生新的中断,称为中断嵌套或多重中断。为避免低优先级的中断源干扰高优先级中断处理,防止中断嵌套层数无限增大导致系统栈溢出,硬件提供了中断屏蔽指令,暂时禁止任意一个或多个中断源向CPU发出中断请求。通常,在中断事件的处理过程中,程序屏蔽包括该级在内的所有低优先级别的中断,但允许更高优先级中断的插入。这样当发生中断嵌套时,嵌套中断事件的优先级别是按照响应顺序依次递增。