中断与异常区别
1、中断是指
外部硬件
产生的一个电信号从CPU的中断引脚进入,打断CPU的运行,异常是指
软件运行过程中
发生了一些必须作出处理的事件,CPU自动产生一个陷入来打断CPU的运行。
2、异常处理的时候要考虑与处理器的时钟同步,异常被称为同步中断
中断能不能睡眠 为什么?
1、一般说中断上下文中不能睡眠,这个中断是指硬件事件发生,触发CPU停止当前活动转而去处理硬件请求.
2、根据硬件请求响应处理逻辑的实时紧要与否,将整个中断处理过程分为
上半部和下半部
.上半部也就是所谓的硬中断处理逻辑,其要求cpu在收到硬件请求后必须马上处理的事情,比如网卡收到数据包了,把数据包从网卡缓存拷贝到主存(可以由DMA完成,但寄存器的修改以及资源设定还是要由cpu去做)的逻辑就需要cpu立即去做,不做的话,网络新来的数据包就可能丢失.所以这些紧要操作逻辑为硬中断处理.
3、下半部有很多种机制,其中就包括软中断,还有tasklet,workqueue等,软中断只是其中的一种,由于历史的原因,有时候是混淆称呼下半部和软中断的.
4、而可以看到软中断逻辑不属于任何进程,所以才不能睡眠,因为一旦睡眠,cpu切换出去,就切不回来了。
简单说就是:
唤醒函数针对进程而言的,下半部的中断不属于进程,所以无法被唤醒
中断的响应执行流程是什么?
cpu接受中断->保存中断上下文跳转到中断处理历程->执行中断上半部->执行中断下半 部->恢复中断上下文。
写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?
1、快进快出,在中断服务函数里尽量快速采集信息。
2、中断中不能有阻塞操作
3、中断服务函数注意返回值,使用操作系统定义的宏,而不是自己定义的。
4、做的事情较多,将这些任务放在后半段tasklet处理。
中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?
1、中断是CPU处于被动状态下来接受设备的信号,而轮询是CPU主动去查询该设备是否有请求。
2、请求设备是一个频繁请求cpu的设备,或者有大量数据请求的网络设备,那么轮询的效率是比中断高。
3、如一般设备,并且该设备请求cpu的频率比较低,则用中断效率要高一些。主要是看请求频率。