首页 理论教育 操作系统实现之路:中断和异常概述

操作系统实现之路:中断和异常概述

时间:2023-10-21 理论教育 版权反馈
【摘要】:中断和异常是系统在运行过程中可能发生的外部或内部事件。一旦检测到中断或异常发生,CPU就会中断当前的处理顺序,并根据中断或异常的类型转移到相应的处理程序。需要注意的是,CPU并不是在中断发生后马上跳转到相应的处理程序,而只是在指令的执行边界检查是否有中断发生。

操作系统实现之路:中断和异常概述

中断和异常是系统在运行过程中可能发生的外部或内部事件。一般情况下,中断是由外部设备引起的,比如键盘设备,每当计算机系统的使用者按下一个键,或者放开一个键,键盘设备(严格来说,应该是控制键盘的芯片)就会生成一个中断并通知CPU。而异常则一般是由软件造成的,泛指软件运行过程中产生的不正常的事件。比如最容易理解的是除法运算,如果出现了除数为0的情况,就会引发一个异常。另外一个很常见的异常就是缺页异常。为了实现虚拟内存模型,操作系统可以把内存的一部分内容暂时存储在外部存储设备上(比如硬盘),从而腾出更多的内存空间为软件的运行服务。这样一旦一条指令访问了不在物理内存中的内存地址(比如已经被暂时置换到硬盘上的可执行代码),就会引发一个缺页异常。

一旦检测到中断或异常发生,CPU就会中断当前的处理顺序,并根据中断或异常的类型转移到相应的处理程序。需要注意的是,CPU并不是在中断发生后马上跳转到相应的处理程序,而只是在指令的执行边界检查是否有中断发生。如果没有,CPU继续执行下一条指令。一旦有中断发生,会引起CPU设置内部的特定寄存器位,然后继续执行当前指令(中断发生时,正在执行的指令),只有当前指令执行完毕,相应的中断才有机会得到处理。

不同的CPU类型,其异常或中断的处理机制是不同的,比如Intel CPU对系统中可能产生的异常进行了编号,一旦异常发生,CPU就根据异常类型找到对应的编号,然后根据异常编号,查找中断描述符表(IDT),找到对应的处理程序,再跳转到具体的处理程序。对于中断,也是采取类似的方式,只不过中断的编号(俗称中断向量号)是由硬件决定的。而Power PC则不论对异常还是对中断,都调用同一个处理程序,然后处理程序再检测中断或异常的类型,进行进一步的分类处理,在此,我们称这种处理方式为中断处理链方式。(www.xing528.com)

在Hello China的设计中,充分考虑了这两种典型的中断和异常模型,采用了中断描述符表与中断处理链方式结合的实现方式,即首先有一个中断描述符表,这样如果目标CPU是Intel系列的CPU,则直接根据中断或异常的向量号,定位到一个中断描述符表项,在每个中断描述符表的表项中,又保存了一个中断对象链表,这样就可以实现链表方式的中断处理模型。因此,其可移植性较好。

本章以Intel CPU(IA32架构)为目标CPU,详细介绍Hello China的中断处理机制,并介绍中断处理机制的服务提供接口

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈