频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

详解Linux 2.6内核新变化

来源:IBM 作者:Anand K Santhanam 出处:巧巧读书 2005-12-07 进入讨论组
上一页 1 2 3 4 5 6 7 8 9 

讨论组http://group.qqread.com

中断例程的变化

  2.5的中断处理程序内部已经经历了许多变化,但是绝大部分对于普通的驱动程序开发者来说没有影响。不过,还是有一些重要的变化会影响到驱动程序开发者。

  现在的中断处理函数的返回代码是一个 irqreturn_t 类型。这个由 Linus 引入的变化意味着中断处理程序告诉通用的 IRQ 层是否真的要中断。这样做是为了当中断请求不断到来时(原因是驱动程序偶然激活了一个中断位或者硬件坏掉了),捕获假中断(尤其是在共享的PCI线上),而任何驱动程序对此都是无能为力的。在2.6中,驱动程序如果要从一个设备上发出一个中断需要返回 IRQ_HANDLED,如果不是的话返回 IRQ_NONE。这样可以帮助内核的 IRQ 层清楚地识别出哪个驱动程序正在处理那个特定的中断。如果一个中断请求不断到来而且没有注册那个设备的处理程序(例如,所有的驱动程序都返回 IRQ_NONE),内核就会忽略来自那个设备的中断。缺省情况下,驱动程序 IRQ 例程应该返回 IRQ_HANDLED,当驱动程序正在处理那个中断时却返回了 IRQ_NONE,说明存在 bug。新的中断处理程序可能是类似于这样:

  清单 4. 2.6的中断处理程序伪代码


       irqreturn_t irq_handler(...) {
             ..
             if (!(my_interrupt)
                   return IRQ_NONE;  // not our interrupt
             ...
             return IRQ_HANDLED;  // return by default
       }

   注意,cli(),sti(),save_flags()和 restor_flags() 是不赞成使用的方法。取而代之的是 local_save_flags() 和 local_irq_disable(),用来禁止所有的本地中断(本处理器内的)。禁止所有处理器的中断是不可能的。

  统一的设备模型

  2.5开发过程中另一个最值得关注的变化是创建了一个统一的设备模型。这个设备模型通过维持大量的数据结构囊括了几乎所有的设备结构和系统。这样做的好处是,可以改进设备的电源管理和简化设备相关的任务管理,包括对以下信息的追踪:

  系统中存在的设备,其所连接的总线
  特定情形下设备的电源状态
  系统清楚设备的驱动程序,并清楚哪些设备受其控制
  系统的总线结构:哪个设备连接在哪个总线上,以及哪些总线互连(例如,USB和PCI总线的互连)
  设备在系统中的类别描述(类别包括磁盘,分区等等)
  在2.5内核中,与设备驱动程序相关的其他发展包括:

  不再使用 malloc.h。所有包含 <linux/malloc.h>(用于内存分配)的代码现在要替换为 <linux/slab.h>。
 
  用于 x86 体系结构的 HZ 值增加到1000。引入了一个叫做 jiffies_64 的瞬间计算器,以避免由于 HZ 值的变化而引起瞬间变量的迅速溢出。

  引入了一个叫做 ndelay() 的新的延迟函数,允许纳秒级的等待。

  引入了一个叫做 seqlock() 的新类型的锁,用于锁定小段的经常被访问的数据(不是指针)。
 
  由于2.6内核可以抢占,应该在驱动程序中使用 preempt_disable() 和 preempt_enable(),从而保护代码段不被抢占(禁止 IRQ 同时也就隐式地禁止了抢占)。

  在2.5中加入了异步 I/O。这意味着用户进程可以同时进行多个 I/O 操作,而不用等待它们完成。在字符驱动程序中引入了异步 API。

  块层在2.5的开发过程中经历了大幅度的变化。这意味着原来用于2.4的块设备需要进行重新设计。
 
  在2.5中引入了sys文件系统,它给出了系统的设备模型的用户空间描述。它挂载在 /sys 目录下。

  结束语

  由于相对于2.4来说 Linux2.6发生了太多的变化,所以在 Linux 内核界有一种说法是新的发布版本应该命名为3.0。Linus 将最终决定如何命名,官方可能将于2003年11月发布官方版本。不管最终采用哪个版本号,相对于2.4来说,新的内核发布版本在多种平台和体系结构上性能将更快,可扩展性更强,更加稳定。

  Linus 已经邀请世界各地的测试人员来查找 bug 和报告问题,并要求发行者提供2.6版本的下载。

更多文章 更多内容请看Linux集群技术体验Linux的音影世界Linux驱动大全专题,或进入讨论组讨论。
上一页 1 2 3 4 5 6 7 8 9 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章