Linux中断详解:硬件篇

需积分: 9 0 下载量 161 浏览量 更新于2024-07-22 收藏 938KB PDF 举报
"Linux中断介绍——硬件篇" 这篇文章深入探讨了Linux操作系统中的中断处理机制,重点关注了中断控制器,如Programmable Interrupt Controller (PIC)和Advanced Programmable Interrupt Controller (APIC)。作者ZX_WING和贡献者BLUESKY_JXC基于2.6.20内核版本,分享了他们的研究和理解。 1. **中断控制器** - **PIC (Programmable Interrupt Controller)**: PIC是传统的中断控制器,用于管理8个外部中断。在早期的x86系统中,它通常是一个8259A芯片,可以级联两个来处理16个中断源。PIC通过向CPU发送中断请求(IRQ)信号,通知CPU有事件需要处理。 - **APIC (Advanced Programmable Interrupt Controller)**: 随着系统复杂性的增加,APIC被引入以支持更多的中断源和更复杂的中断管理。APIC可以处理多个中断,并支持I/O APIC (Input/Output APIC),用于处理I/O设备的中断。APIC系统在多处理器环境中尤为重要,因为它允许中断在处理器之间分布。 2. **中断探测与初始化** - Linux内核在启动时会探测系统中存在的中断控制器,并进行初始化。这一过程包括识别中断控制器的类型,配置中断向量,以及设置中断处理程序。 - 探测过程涉及读取系统寄存器以确定硬件特性,而初始化则包括编程APIC寄存器,以确保正确的中断路由和优先级。 3. **硬件知识补充** - 为了全面理解中断处理,文章还介绍了与中断系统相关的硬件知识,如中断向量表、中断服务例程(ISRs)以及中断描述符表(IDT)。 - 文中提到的“题外话”可能包括中断的触发方式(边沿触发和电平触发)、中断屏蔽和优先级等概念,这些都是理解和调试中断问题的关键。 4. **中断处理流程** - 当一个中断发生时,硬件会暂停当前执行的指令,保存上下文,然后跳转到相应的中断处理程序。在Linux中,这个过程由中断处理子系统管理和协调。 5. **代码注释风格** - 作者反对过多的源码注释,认为代码本身应清晰易懂,这符合开源软件开发的原则。他们鼓励读者通过阅读源码来理解中断处理的细节。 这篇文档是针对有一定基础的读者,深入理解Linux中断机制的重要参考资料。它涵盖了从基本的中断控制器原理到Linux内核如何处理中断的高级主题,对于那些想要深入了解操作系统内核和多处理器环境下的中断管理的人来说,极具价值。
2014-08-29 上传
【摘要】本文详解了 Linux 内核的中断实现机制。首先介绍了中断的一些基本概念,然后分 析了面向对象的 Linux 中断的组织形式、三种主要数据结构及其之间的关系。随后介绍了 Linux 处理异常和中断的基本流程, 在此基础上分析了中断处理的详细流程, 包括保存现场、 中断处理、中断退出时的软中断执行及中断返回时的进程切换等问题。最后介绍了中断相关 的 API,包括中断注册和释放、中断关闭和使能、如何编写中断 ISR、共享中断、中断上下 文中断状态等。 【关键字】中断,异常,hw_interrupt_type,irq_desc_t,irqaction,asm_do_IRQ,软中断, 进程切换,中断注册释放 request_irq,free_irq,共享中断,可重入,中断上下文 1 中断概述 1.1 为什么需要中断? 处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器 向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢, 那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来 对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期 对设备的状态进行查询, 然后做出相应的处理。 不过这种方法很可能会让内核做不少无用功, 因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行。 更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动 为硬件主动)。这就是中断机制。