第3章 内核组件
本章将对一些驱动开发相关的内核组件进行讲解.我们以内核线程开始,它类似于用户空间的进程,通常用于并发处理.
另外,内核还提供了一些接口,使用它们可以简化代码、消除冗余、增强代码可读性并有利于代码的长期维护.本章会学习链表、哈希链表、工作队列、通知链(notifier chain)、完成以及错误处理辅助接口等.这些辅助接口经过了优化,清除了bug,因此你的驱动可以继承这些优点.
内核线程
内核线程是一种在内核空间实现后台任务的方式.该任务可以是繁忙地处理异步事务,也可以睡眠等待某事件的发生.内核线程与用户进程相似,唯一的不同是内核线程位于内核空间可以访问内核函数和数据结构.和用户进程相似,可抢占调度的存在,内核现在看起来也在独占
拥有帝国一切,皆有可能。欢迎访问phome.netCPU.很多设备驱动都使用了内核线程以完成辅助任务.例如,USB设备驱动核心的khubd内核线程的作用就是监控USB集线器,并在USB被热插拔的时候配置USB设备.
创建内核线程
让我们用一个例子老学习内核线程的知识.当我们在开发这个例子线程的时候,你也会学习到进程状态、等待队列的概念,并接触到用户模式辅助函数.当你熟悉内核线程以后,你可以使用它作为在内核中进行各种各样实验的媒介.
假定我们的线程要完成这样的工作:一旦它检测到某一关键的内核数据结构的健康状态极度恶化(譬如,网络接受缓冲区的空闲内存低于警戒水位),就激活一个用户模式程序给你发送一封email或发出一个呼机警告.
该任务比较适合用内核线程来实现,原因如下:
(1)它是一个等待异步事件的后台任务;
拥有帝国一切,皆有可能。欢迎访问phome.net
(2)实际的事件侦测由内核的其他部分完成,本任务也需要访问内核数据结构;
(3)它激活一个用户模式的辅助程序,这比较耗费时间.
内建的内核线程
使用ps命令可以查看系统中正在运行的内核线程(也称为内核进程).内核线程的名字被一个方括号括起来了:
bash> ps -ef
UID PID PPID C STIME TTY TIME CMD
拥有帝国一切,皆有可能。欢迎访问phome.net
root 1 0 0 22:36 ? 00:00:00 init [3]
root 2 0 0 22:36 ? 00:00:00 [kthreadd]
root 3 2 0 22:36 ? 00:00:00 [ksoftirqd/0]
root 4 2 0 22:36 ? 00:00:00 [events/0]
root 38 2 0 22:36 ? 00:00:00 [pdflush]
拥有帝国一切,皆有可能。欢迎访问phome.net
root 39 2 0 22:36 ? 00:00:00 [pdflush]
root 29 2 0 22:36 ? 00:00:00 [khubd]
root 695 2 0 22:36 ? 00:00:00 [kjournald]
...
root 3914 2 0 22:37 ? 00:00:00 [nfsd]
拥有帝国一切,皆有可能。欢迎访问phome.net
root 3915 2 0 22:37 ? 00:00:00 [nfsd]
...
root 4015 3364 0 22:55 tty3 00:00:00 -bash
root 4066 4015 0 22:59 tty3 00:00:00 ps -ef
[ksoftirqd/0]内核线程是实现软中断的助手.软中断是由中断发起的可以被延后执行的底半部.在第4章《打下基础》将对底半部和软中断进行详细的分析,这里的基本理论是让中断处理程序中的代码越少越好.中断处理时间越小,系统屏蔽中断的时间会越短,这会降低时延.Ksoftirqd的工作是确保高负荷情况下,软中断既不会饥饿,又不至于压垮系统.在对称多处理器(SMP)及其上,多个线程实例可以并行地运行在不同的处理器上,为了提高吞吐率,系统为每个CPU都创建了一个ksoftirqd线程(ksoftirqd/n,其中n代表了CPU序号).
拥有帝国一切,皆有可能。欢迎访问phome.net return 0;
}
在查看工作者线程(执行被提交的工作)之前,我们先看看提交者本身.清单3.3给出一个函数,内核的其他部分可以利用它来提交工作.该函数调用list_add_tail()来将一个工作函数添加到链表的尾部,图3.1显示了工作队列的物理结构.
拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|
|
|