前言
在计算机体系中,各种技术,比如虚拟化,分布式,内核,等等技术深入到底层都要考虑中断带来的影响,所以这里讲一下中断
什么是中断
首先中断是一个信号,因为某一些进程或者事件需要立马被关注,这个中断信号发向的目的地是处理器,要求处理器中断当前运行的进程,假如这个中断是由硬件发出的,比如网卡,他会通过总线发送给cpu,这个也叫做ISR
ISR(interrupt service routin)是一个程序,这个程序被谁调用呢?被硬件程序发起的中断调用,ISR在调用发起后处理调用发出的请求,并且发向CPU
硬中断
对于硬中断来说,所有的设备都链接着一个叫做Interrupt Request(IRQ) Line的东西,这个东西链链接硬件和cpu
硬中断的过程
1,硬件发起IRQ,中断控制器收到IRQ会将相应的信号发送给cpu
2,cpu收到IRQ后中断当前运行的程序
3,硬件收到消息,刚刚发送的IRQ被cpu收到
4,request action(ISR)开始运行
5,结束后中断的程序继续执行
软中断
软中断顾名思义是软件发起的中断
通常来说软中断是当前运行的程序用于请求I/O,因为我们知道在中断处理时CPU没法处理其它事物,对于网卡来说,如果每次网卡收包时中断的时间都过长,那很可能造成丢包的可能性,对于某些io请求也许会完成的非常快,但是对于磁盘io来说经常先被放入队列,然后在稍后的事件完成,硬中断是直接对cpu说,软中断是只对内核说,我们的网络io先发起硬中断通知cpu将数据从网卡的缓存中copy到内存中(只是copy其他复杂操作给软中断做),然后触发软中断,由内核去解析内存中的数据包,硬中断要做到快,因为cpu接受到中断会暂停执行当前的程序,如果硬中断慢,那么说明cpu要被挂起相当一段时间