Windows硬中断的处理过程

来源:互联网 发布:纵横数据备案 编辑:程序博客网 时间:2024/05/17 02:21

键盘、打印机、磁盘等等设备的中断请求是由中断控制器(Interrupt Controller)统一控制的。中断控制器提供有限的中断请求(IRQ)数,如i8259A可编程中断控制器(Programmable Interrupt Controller, PIC)它提供了16个IRQ。我们可以通过!pic命令来查看详细的信息。


而i82489高级可编程中断控制器(Advanced Programmable Interrupt Controller,APIC)提供了256个IRQ。

虽然中断控制器本身提供了中断级别,但是Windows还是实现了它自己的中断优先级方案,称为中断请求级别(Interrupt Request Levels,IRQLs)。在不同的体系结构下,Windows内核所提供的IRQLs的数目是不同的,x86下提供0到31一共32个请求级别,而x64和IA64下则提供0到15一共16个级别。Windows的硬件抽象层(HAL)负责把硬件中断号映射到IRQLs上

每一个CUP都有一个IRQL值,它随着操作系统内核模式下代码的执行而改变。这个IRQL值决定了哪一些中断能被响应,哪一些中断不能被响应(那些IRQL值大于当前CPU的IRQL值的中断能被响应,那些IRQL值小于或等于当前CPU的IRQL值的中断不能被响应)。

当中断控制器的引线上收到中断信号,它将打断CPU;这时,CPU将向中断控制器询问IRQ号;中断控制器将IRQ号转换成中断号(Interrupt Number),使用这个中断号作为中断分发表(Interrupt DIspatch Table,IDT)的索引,从而可以找到对应的中断处理程序,并将CPU的控制权交给该中断处理程序。


IDT表是在系统初始化时生成的,其内容如下(根据硬件的实际情况会有所不同):



系统正是通过IDT找到对应的中断处理程序的。

0 0
原创粉丝点击