Chinaunix首页 | 论坛 | 博客

bsd

  • 博客访问: 17844
  • 博文数量: 5
  • 博客积分: 210
  • 博客等级: 二等列兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-29 11:43
文章分类
文章存档

2009年(5)

我的朋友

分类: BSD

2009-08-14 23:11:48

NetBSD系列介绍--同步机制及工作的推后执行
1. 同步机制
    kernel 线程化的第一步工作就是就是要把锁细化,不能整个 kernel 用一个大锁,否则会严重影响 SMP 的性能。这个工作的结果就是 src/sys/kern/kern_mutex.c,src/sys/kern/kern_condvar.c 和 src/sys/kern/kern_rwlock.c,这两个文件实现了《Solaris内核结构》中介绍的 mutex 和 reader/writer lock,第三个文件实现的叫条件变量(condition variable)。关于这些概念,标准的操作系统书上都应该有介绍,如果没有,参看《Solaris内核结构》,英文版叫《Solaris Internals》。
2. 软中断线程
    NetBSD 5.0 中 Softirq 改成了用线程处理,这个是实现线程后对中断处理的一个优化,Softirq 是一种中断推后执行的机制,因为中断处理要尽量在短时间内完成,所以一般操作系统实现并不在中断中处理完所有事情,而是处理最紧急的部分,然后中断直接返回,剩下的部分用某种机制在后面合适的时候在来执行。NetBSD 5.0 中 Softirq 就是这种机制。 Softirq 改成线程处理,我认为一个明显的好处就是编写程序的时候在线程上下文,受到的限制要小很多,所以一般的函数都能用。实现在 src/sys/kern/kern_softint.c 中
3. NetBSD 中的工作队列 (work queue)
   NetBSD 中的 work queue 是一组内核 API,也是一种推后执行的机制,在线程上下文中执行。实现在src/sys/kern/subr_workqueue.c 中。
4. callout队列
   NetBSD 中 callout 是一中 timer 机制,它实现在指定的时间后执行指定的调用的功能,实现在
src/sys/kern/kern_timeout.c 中。

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