11、深入理解中断处理与并行端口驱动实现
深入理解中断处理与并行端口驱动实现
1. 中断处理基础
在中断处理中,有两种重要的例程:过滤器例程(filter routine)和线程化中断处理例程(ithread routine)。
过滤器例程有一定的使用限制,它不能进行上下文切换,并且只能使用自旋互斥锁进行同步。因此,通常只在需要非抢占式中断处理程序的设备中使用。该例程可以完全处理一个中断,或者将计算密集型工作推迟到其关联的 ithread 例程(如果有的话)。过滤器例程的返回值及其含义如下表所示:
| 常量 | 描述 |
|---|---|
| FILTER_STRAY | 表示过滤器例程无法处理此中断,相当于一个错误代码。 |
| FILTER_HANDLED | 表示中断已被完全处理,相当于一个成功代码。 |
| FILTER_SCHEDULE_THREAD | 调度 ithread 例程执行,此值仅当过滤器例程有相关联的 ithread 例程时才能返回。 |
ithread 例程与过滤器例程不同,它在自己的线程上下文中执行。在 ithread 例程中,除了自愿进行上下文切换(即睡眠)或等待条件变量外,可以执行任何操作。由于过滤器例程是非抢占式的,FreeBSD 中的大多数中断处理程序实际上就是 ithread 例程。
