X86的中断管理的主要内容也是以Intel软件开发手册作为参考,但是遗憾的是没有程序代码可以编写用于实现我们的理解,当然在实验3以及之后的内容中就会涉及到。本节我们将从两个部分来描述中断——8086中断与32位保护模式下的中断,对于前者我们已经在前面的实验得到很好的使用与介绍,所以我们只需要简单的介绍之,而对于保护模式下的中断才是我们介绍的重点。
为了详实而具体介绍本文内容,我们先复习一下一些重要的概念,如下:
1.中断源——能够引起中断原因或提出中断请求的设备和异常故障;可以分为外部中断与内部中断
2.中断模式——对于外部中断来说,连接到处理器中断线上的触发方式——沿触发或者电平触发。以及可屏蔽中断与不可屏蔽中断。
3.中断优先级——如果在响应一个中断,执行中断处理的过程中,又有新的中断事件发生而发出了中断请求,应该如何处理也取决于中断事件的优先级
4.中断号——每一个中断源都对应一个中断号,用于识别不同的中断事件
5.中断屏蔽——通过设置相应的中断屏蔽位,禁止响应某个中断
6.中断服务——对中断的响应的程序
一)8086中断
当系统启动时,bios接管了整个系统的控制,处理器处于8086的状态;而bios对外(指的是对基于bios运行的程序)提供接口的主要方式就是中断,基本上能够使用系统所有的服务。而8086对中断的处理是很简单的,对于每个中断源对应一个中断号,每个中断号有一组中断向量(cs:ip)对应着每个中断服务的入口(存在于内存的最低1024个字节中)。详细的终端服务表如下:
INT 00 - CPU-generated - DIVIDE ERROR(除0)
INT 01 - CPU-generated - SINGLE STEP; (80386+) - DEBUGGING EXCEPTIONS(单步调试)
INT 02 - external hardware - NON-MASKABLE INTERRUPT(外部中断,不可屏蔽中断)
INT 03 - CPU-generated - BREAKPOINT(断点)
INT 04 - CPU-gen