LinuxKernel核心中文手册(7)[3]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:

    Linux 中断处理子系统的一个主要任务是把中断转送到( route )正确的中断处理代码段。这种代码必须了解系统的中断拓扑。例如,如果软驱控制器在中断控制器的管脚 6 发生中断,它必须可以识别出中断是来自软驱,并把它转送到软驱设备驱动程序的中断处理程序代码。 Linux 使用一系列数据结构的指针,包含了处理系统中断的例程的地址。这些例程属于系统中的设备的设备驱动程序,每一个设备驱动程序必须负责在驱动程序初始化的时候请求它想要的中断。图 7.2 显示了 irq_action 是一个指向 irqaction 数据结构的指针的向量表。每一个 irqaction 数据结构都包括了这个中断处理程序的信息,包括中断处理例程的地址。不同体系的中断数目和如何处理是不同的,通常,不同系统之间, Linux 中断处理代码是和体系结构相关的。这意味着 irq_action 向量表的大小依赖于中断源的数目而不同。
  
    当发生中断的时候, Linux 必须首先通过读取系统的可编程中断控制器的状态寄存器确定它的来源。然后把这个来源转换成 irq_action 向量表中的偏移。例如,从软驱控制器来的中断控制器管脚 6 的中断会转为中断处理程序向量表中的第 7 个指针。如果发生的中断没有对应的中断处理程序, Linux 核心会记录下一个错误,否则,它会调用这个中断源的所有的 irqaction 数据结构中的中断处理例程。
  
    当 Linux 核心调用设备驱动程序的中断处理例程的时候,它必须有效地判断为什么被中断,并进行响应。为了找出中断的原因,设备驱动程序会读取中断设备的状态寄存器。设备可能回应:发生了一个错误或者完成了一个请求的操作。例如软驱控制器可能报告它已经把软驱的读磁头定位到了软盘正确的扇区。一旦确定了中断的原因,设备驱动程序可能还需要做更多的工作。如果是这样, Linux 核心有机制允许延迟这个操作稍候进行。这可以避免让 CPU 在中断模式下花费太多时间。详细描述参见设备驱动程序章(第 8 章)
  
  

本文关键:LinuxKernel核心中文手册(7)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top