精通Linux设备驱动程序开发-第三章-内核组件.pdfVIP

精通Linux设备驱动程序开发-第三章-内核组件.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第 3 章 内核组件 本章将对一些驱动开发相关的内核组件进行讲解。我们首先以内核线程开始,它类似 于用户空间的进程,通常用于并发处理。 另外,内核还提供了一些接口,使用它们可以简化代码、消除冗余、增强代码可读性 并有利于代码的长期维护。本章会学习链表、哈希链表、工作队列、通知链(notifier chai n)、完成以及错误处理辅助接口等。这些辅助接口经过了优化,而且清除了 bug,因此你 的驱动可以继承这些优点。 内核线程 内核线程是一种在内核空间实现后台任务的方式。该任务可以是繁忙地处理异步事 务,也可以睡眠等待某事件的发生。内核线程与用户进程相似,唯一的不同是内核线程位 于内核空间可以访问内核函数和数据结构。和用户进程相似,由于可抢占调度的存在,内 核现在看起来也在独占 CPU。很多设备驱动都使用了内核线程以完成辅助任务。例如,U SB 设备驱动核心的 khubd 内核线程的作用就是监控 USB 集线器,并在 USB 被热插拔的 时候配置 USB 设备。 创建内核线程 让我们用一个例子老学习内核线程的知识。当我们在开发这个例子线程的时候,你也 会学习到进程状态、等待队列的概念,并接触到用户模式辅助函数。当你熟悉内核线程以 后,你可以使用它作为在内核中进行各种各样实验的媒介。 假定我们的线程要完成这样的工作:一旦它检测到某一关键的内核数据结构的健康状 态极度恶化(譬如,网络接受缓冲区的空闲内存低于警戒水位),就激活一个用户模式程 序给你发送一封 email 或发出一个呼机警告。 该任务比较适合用内核线程来实现,原因如下: (1)它是一个等待异步事件的后台任务; (2 )由于实际的事件侦测由内核的其他部分完成,本任务也需要访问内核数据结 构; (3)它必须激活一个用户模式的辅助程序,这比较耗费时间。 内建的内核线程 使用 ps 命令可以查看系统中正在运行的内核线程(也称为内核进程)。内核线程的 名字被一个方括号括起来了: bash ps -ef UID PID PPID C STIME TTY TIME CMD 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] 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] 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)及其上,多个线程实例可以并行地运行在不同的处理器 上,为了提高吞吐率,系统为每个

文档评论(0)

勤劳的小厮 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档