快速业务通道

《Essential Linux Device Drivers》第3章(上)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-16
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号