Win 2K OS将设备的中断请求抽象为独立于平台的中断对象。中断对象包括总线类型、中断优先级别、总线矢量号、中断模式(电平触发、边沿触发)等。操作系统总是将中断对象和一定中断等级(RIQL,Interrupt Request Level)联系在一起,中断的IQRL级别高低,依赖于发生中断的总线类型和总线级别,一个驱动程序可以产生多个具有同一IRQL级别的中断对象。中断对象也总是和一定的中断服务程序(ISR,Interrupt Service Request)联系在一起,当设备中断产生时,系统调用该中断对象的SIR。SIR是完成中断任务的核心程序,它是系统提供的标准函数,也可以是用户自己定义的执行函数。SIR只有在当前处理器RIQL级别等于或低于当前中断对象IRQL级别时才能执行。同样,SIR在执行的过程中不会被中断,除非有比IRQL级别更高的中断请求出现。一般外部设备的sIR,运行在硬件中断等级(DIRQL,Device Interrupt Request Level)级别上,这样CPU运行的级别比较高,故SIR应该尽可能快地执行,以免出现中断堆积。
操作系统提供了延迟过程调用(DPC,Delayed Procedure Call)对象,这个对象可用于那些需要花费很多时间执行SIR的设备中断,这些中断程序执行低于DIRQL级别上。这种延迟过程调用方法将那些中断发生后需要后续处理的操作通过DPC做以缓冲,在很大程度上缩短了SIR占用中断优先级的时间,提高了系统的实时性。
我们的控制卡正是采用这种中断机制。驱动程序中编写了处理系统中断的SIR,用于执行中断处理所必需的操作(如判断中断是否为本设备所产生、关闭中断、清除硬件中断信号、重启中断等)。 |