题目
什么是中断、中断的工作原理
答案
@[toc] --- ## 什么是中断 **操作系统是由中断驱动的** 在合适的情况下,操作系统的内核会把 CPU 的使用权主动让给应用程序,也就是使 CPU 从内核态转换到用户态。而 **CPU 要想从用户态回到内核态,只能通过中断机制完成** 这里的中断机制非常广义,包含了三种手段,也就是说从用户态转换到内核态有三种手段: - 程序请求操作系统服务,执行**系统调用**(系统调用其实属于内中断) - 程序运行时产生**外中断**事件(比如 I/O 操作完成),运行程序被中断,转向中断程序处理 - 在程序运行时发生**内中断**(异常)事件,运行程序被打断,转向异常处理程序工作 按照中断信号来源于 CPU 的外部还是内部,将中断类型分为外中断和内中断: - **外中断** (也称中断,狭义上的中断) 外中断与当前执行的指令无关, 中断信号来源于 CPU 外部。如 I/O 完成中断,表示设备输入/输出处理已经完成,CPU 能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。 - **内中断**(也称 **异常 Exception**、例外) 指 CPU 内部出现的中断,即在 CPU 执行特定指令时出现的非法情况,因此只有在一条指令执行后才会发出内中断,不可能在指令执行期间发生内中断。常见的内中断如非法操作码、地址越界、算术溢出,除数为 0 等。 ## 中断机制的基本原理 不同的中断信号,肯定是需要用不同的中断处理程序来处理的。那么当 CPU 检测到中断信号后,就会根据中断信号的类型去查询**中断向量表**,中断向量表是操作系统中一个重要的数据结构,它存储了每个中断类型对应的中断处理程序的入口地址。当发生中断时,CPU会根据中断类型从中断向量表中查找对应的中断处理程序入口地址,然后跳转到该地址执行中断处理程序。 ![](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/image-20230401162123013.png) 中断机制的主要流程如下: 1. 当硬件设备需要处理数据或产生异常情况时,会向CPU发送中断信号。 2. CPU在接收到中断信号后,暂停当前任务,将当前任务的上下文环境保存到内存中,以便后续恢复现场。 3. CPU 根据中断向量表找到中断处理程序,执行相应的操作,如保存现场、执行中断服务例程、恢复现场等。 4. 中断处理程序完成中断服务例程后,将控制权交还给原程序,使其继续执行。 5. 原程序从上次中断的位置继续执行,并恢复之前保存的上下文环境。