首页 > 其他 > 详细

中断详解(五)——中断处理程序

时间:2015-03-24 17:30:46      阅读:184      评论:0      收藏:0      [点我收藏+]

对于异常处理来说,内核只要给引起异常的进程发送一个Unix信号就能处理大多数异常。然后内核的工作就是延迟下一个动作,知道进程接收到该信号。关于异常处理,内核并没有执行多少任务,因而异常处理非常迅速。

这种方怯并不适合中断,因为经常会出现一个进程(例如,一个请求数据传输的进程)被挂起好久后中断才到达的情况,因此,一个完全无关的进程可能正在运行。所以,给当前进程发送一个Unix信号是毫无意义的.

中断处理依赖于中断类型,三种主要的中断类型:
I/O中断:

些110设备需要关注,相应的中断处理程序必须查询设备以确定适当的操作过程.

时钟中断:

某种时钟{或者是一个本地APIC时钟,或者是一个外部时钟)产生一个中断,这种中断告诉内核一个固定的时间间隔已经过去。这些中断大部分是作为1/0中断来处理的$

处理期间中断:

多处理器系统中一个CPU对另一个CPU发出一个中断.

I/O中断处理

一般而言, 1/0中断处理程序必须足够灵活以给多个设备同时提供服务

中断处理程序的灵活性是以两种不同的方式实现的

IRQ共享:

中断处理程序执行多个中断服务例程(interruptservice routine. ISR). 每个ISR是一个与单独设备(共享IRQ线)相关的函数。因为不可能预先知道哪个特定的设备产生IRQ. 因此,每个ISR都被执行,以验证它的设备是否需要关注,如果是,当设备产生中断时,就执行需要执行的所有操作。

动态分配:

一条IRQ线在可能的最后时刻才与一个设备驱动程序相关联,例如,软盘设备的IRQ线只有在用户访问软盘设备时才被分配。这样,即使几个硬件设备并不共享
IRQ线.同一个IRQ向量也可以由这几个设备在不同时刻使用

Linux把紧随中断要执行的操作分为三类:

1)紧急的

2)非紧急的

3)非紧急可延迟的

不管引起中断的电路种类如何,所有的I/O中断处理程序都执行四个相间的基本操作:
1.  在内核态堆栈保存IRQ的值和寄存器的内容.
2.  为正在给IRQ线服务的PIC发送一个应答,过将允的二PICill  .步发出巾断。
3.  执行共享这个IRQ的所有设备的中断服务例程(lSR)。
4.  跳到ret_from_intr()的地址后终止。
二恶











处理器间中断处理





中断详解(五)——中断处理程序

原文:http://blog.csdn.net/windeal3203/article/details/44594207

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!