中断基本知识
前言
中断出现之前有另外一个处理程序的方式:轮询,这种方式会占用CPU资源进行等待,那为了解决这种等待的问题,从而产生中断。
中断的优点就是可以释放CPU资源,使其在需要的时候再进行资源分配和调度。
什么是中断
中断就是指CPU在运行某个程序时,被预先安排的程序或内外部事件打断从而转到执行其处理函数的过程。
中断产生的过程
1、物理原理:电信号
2、产生源:硬件设备
3、传输路径:电信号->中断控制器->CPU->中断向量表->跳转处理函数->恢复现场
中断向量表
0-31:异常和非屏蔽中断,此向量是固定的
32-47:屏蔽中断(IO设备引起的中断)
48-255:软中断
异常和中断的区别
异常
概念
是指CPU内部出现的中断,即CPU在执行特定指令时出现的非法情况,异常也称为同步中断,因此之后再一条指令执行完成后才会发生中断,不存在指令执行期间发生异常。
产生的原因:
1、程序的错误产生,例如发生除0
2、内核必须处理的异常条件产生,例如缺页
中断
中断:称为异步中断,是由设备依照CPU时钟信号随机产生,因此可能出现在CPU指令之间
可屏蔽中断(INTR):所用IO设备产生的中断请求
非屏蔽中断(NMI):硬件故障引起的中断请求
问题:如果发生异常时,产生了IO中断,CPU如何处理?
cpu会把当前中断放入特定栈中,等异常处理完成后再处理非屏蔽中断(意味着异常的优先级总高于非屏蔽中断)
问题:如果同时发生多个中断,CPU如何处理?
同上述问题,CPU会处理最高优先级中断,其他中断会被按照优先级先后顺序等待执行
问题:低优先级中断是否可以被高优先级打断?
linux中,中断处理函数分为前半段和后半段,前半段不可被打断,后半段可被打断
而且linux中的中断也是不可嵌套的,如A中断没执行完之前是不允许