Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407055
  • 博文数量: 61
  • 博客积分: 1991
  • 博客等级: 上尉
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-08 12:28
文章分类

全部博文(61)

文章存档

2011年(5)

2010年(21)

2009年(3)

2008年(4)

2007年(28)

我的朋友

分类: 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代码)


 

目录

 

阅读(1823) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~