bsd6.1下的内核多线程

2009-05-13 03:53:46来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

bsd6.1自大变革以来,已经放入了多种构建多线程的方式。目前的多线程方式,不仅仅局限于通常意义上的线程,内核的一些中断也采用线程来处理。

比较常见的构建方式有3种

1. 传统的callout,这个在4.x上就存在了,只不过在新版本中支持的更好,也更能发挥其作用。
   callout属于定时程序,在预定的时间到来时,就运行相应的函数,不过要想再次运行,需要重新定时。
   callout_init,用于初始化callout结构,callout_reset用于定时程序。相对4.x,还增加了callout_init_mtx,用于加锁的callout

2. kthread,可以理解为通常意义上的线程,kthread_create后,线程就开始运行了。为了更有效使用cpu,可以在线程无事可做的时候,挂起,如果有数据需要处理,再恢复。
kthread_create((void (*)(void *)) foo, arg, &foo_proc, 0, 0, "foo");
编程是非常简单的

3. ithread,这属于中断线程,软中断都是使用ithread的,包括协议栈的软中断处理。在netisr中,调用swi_add函数,挂接中断处理。通过向量表,完成中断处理。

在线程中也可以用tsleep和wakeup,控制切换资源的使用。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/132/showart_139486.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD内核如何在保护模式下管理IA32处理器

下一篇:FreeBSD 5内核源代码分析之系统调用过程