分类: BSD
2007-05-15 15:25:26
by wheelz 转载自
---------------------------------
FreeBSD 5 内核中断处理的最大特点是将中断处理程序在线程的上下文中运行。为此,内核为每个注册的中断源(即vector)准备一个内核线程,即中断线程,其任务就是等待中断的发生,一旦发生,便运行相应的中断处理程序。
FreeBSD 5这样做,有好处也有坏处。好处是可以简化线程和中断的互斥关系,并使得中断处理可以阻塞。坏处是每次响应中断都要进行线程调度,可能有两次线程上下文的切换(从用户线程切到中断线程再切回来)。未来的想法是进行lazy scheduling,即尽可能借用当前线程的上下文,只有在中断要阻塞时才进行真正的调度。
与中断有关的源代码主要在
sys/kern/kern_intr.c (与体系结构无关的中断代码)
sys/i386/i386/intr_machdep.c (与i386体系结构相关的中断代码)
sys/i386/isa/atpic.c (与8259A相关的.c代码)
sys/i386/isa/atpic_vector.s (与8259A相关的.s代码)
目录