1.什么是中断
中断是CPU对系统发生的某个事件作出的一种反应。 引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。
2. 中断的作用
实时控制、故障自动处理、与外围设备间的数据传送、硬件故障报警与处理、支持多道程序并发运行
3.中断处理过程
①接收中断请求。
②查看本级中断屏蔽位,若该位为1则本级中断源参加优先权排队。
③中断优先权选择。
④处理机执行完一条指令后或者这条指令已无法执行完,则立即中止现行程序。接着,中断部件根据中断级去指定相应的主存单元,并把被中断的指令地址和处理机当前的主要状态信息存放在此单元中。
⑤中断部件根据中断级又指定另外的主存单元,从这些单元中取出处理机新的状态信息和该级中断控制程序的起始地址。
⑥执行中断控制程序和相应的中断服务程序。
⑦执行完中断服务程序后,利用专用指令使处理机返回被中断的程序或转向其他程序。
图片说明
4.硬中断与软中断:
硬中断:
(1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。
(2. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。
(3. 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。
(4. 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。
软中断:
(1. 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。
(2. CPU正常情况下都是专心处理用户的进程的,当外部的硬件或软件有消息想要通知CPU,就会通过中断请求(interrupt request,IRQ)的方式来进行。比如当你的鼠标有了点击产生,再比如磁盘设备完成了数据的读取的时候,都会通过中断通知CPU工作已完成。
但是当中断机制应用到网络IO的时候,就产生了一点点问题。网络包收到后的处理工作,不像鼠标、键盘、磁盘IO读取完成那样简单,而是要进行大量的内核协议栈的处理,最终才能放到进程的接收缓存区中。假如只用一种中断(硬终端)的方式来处理网络IO,由于硬中断的优先级又比较高,这样CPU就会忙于处理大量的网络IO而不能及时响应键盘鼠标等事情,导致操作系统实时性变差,你会感觉机器以卡一卡的。
所以现代的Linux又发明了软件中断,配合硬中断来处理网络IO。 硬中断你可以理解只是个收包的,把包收取回来放到“家里”就完事,很快就能完成,这样不耽误CPU响应其它外部高优先级的中断。而软中断优先级较低,负责将包进行各种处理,完成从驱动层、到网络协议栈,最终把处理出来的数据放到socker的接收buffer中。

硬中断和软中断的区别:
(1.软中断是执行中断指令产生的,而硬中断是由外设引发的。
(2.硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。
(3.硬中断是可屏蔽的,软中断不可屏蔽。
(4.硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

参考链接:https://baike.baidu.com/item/%E4%B8%AD%E6%96%AD/579537?fr=aladdin
https://www.cnblogs.com/aaronLinux/p/10842499.html
https://blog.csdn.net/xuchenhuics/article/details/79120644