Linux中断详解

2017-09-23  本文已影响0人  Joe_HUST

中断与定时器

中断的分类:

屏蔽中断和不可屏蔽中断:

向量中断和非向量中断:

(典型的非向量中断首先会判断中断源,然后调用不同中断源的中断处理程序)
irq_handler()
{
...
int int_src = read_int_status();/*读硬件的中断相关寄存器*/
switch(int_src){//判断中断标志
case DEV_A:
dev_a_handler();
break;
case DEV_B:
dev_b_handler();
break;
...
default:
break;
}
...
}

定时器中断的原理

定时器在硬件上也以来中断,PIT(可编程间隔定时器)接收一个时钟输入,当时钟脉冲到来时,将目前计数值增1并与已经设置的计数值比较,若相等,证明计数周期满,产生定时器中断,并复位计数值。


定时器工作原理

Linux中断详解

Linux中断机制与信号

异常(也叫软件中断):当指令执行时由CPU控制单元产生,异常也称为"异步中断",因为只有在一条指令终止执行之后CPU才会发出中断。
分类:
1.处理器探测到的异常
2.故障
3.陷阱
4.异常终止
5.编程异常(软中断),int 指令是软中断指令。中断向量表是中断号和中断处理函数地址的对应表。int n --触发中断n,相应的中断处理函数的地址为:中断向量表地址+4*n
来源:程序的错误产生,内核必须处理的异常(例如:缺页和内核服务的请求-int)

软中断和硬中断的区别

中断由异步的外部事件引起,外部事件和中断响应与正在执行的指令不存在关系80386有两根引脚INTR和NMI接受外部的中断请求信号,INTR接收可屏蔽中断请求,标识寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。处理器必须要接受和处理来自NMI的中断请求。在80386系统中,处理器在响应NMI的中断向量号固定为2.为了避免不可屏蔽的中断的嵌套,当接收到一个NMI中断请求时,处理器自动的屏蔽所有的NMI请求,直到执行中断指令IRET之后才会重新开放NMI中断请求。所以,NMI处理程序应该以IRET指令结束。

为了满足系统的实时性要求,中断的处理应该要越快越好。Linux中为了实现这个特点,当中断发生的时候,硬中断处理那一些短时间内就可以完成的工作,而将那些处理时间比较长的工作,放在中断之后来完成,也就是软中断来完成。Linux下的硬中断是可以嵌套的,没有优先级的概念。也就是说任何一个新的中断都可以打断正在执行的中断,但是同一种中断除外。软中断是不能嵌套的,但是相同类型的软中断可以在不同的CPU上并行执行。


1. 硬件提供的中断机制和约定

示例:Linux的中断服务程序。

上一篇下一篇

猜你喜欢

热点阅读