# 5. 中断 & 异常

&#x20;

![](https://824295091-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmUhsvIFBb8ar2-Um3%2F-MErIRhnYslOcH-BziJH%2F-MErLuXL97y8EhjugqGd%2F%E4%B8%AD%E6%96%AD%20%26%20%E5%BC%82%E5%B8%B8.svg?alt=media\&token=f7a34956-4ae9-4a11-8652-92889944c950)

## 1. 中断的作用

中断会使 CPU 由用户态变为内核态，使操作系统重新夺回对 CPU 的控制权

**中断是让操作系统内核夺回 CPU 使用权的唯一途径**。如果没有中断机制，那么一旦应用程序上 CPU 运行，CPU 就会一直运行这个应用程序

## 2. 中断的类型

**内中断：**&#x4E0E;当前执行的指令有关，中断信号来源于 CPU 内部

**例子：**

1. 试图在用户态下执行特权指令
2. 执行除法指令时发现除数为 0
3. 执行一条特殊指令 —— **陷入指令**，该指令会发出一个内部中断信号
   * 执行陷入指令，就意味着应用程序主动把 CPU 控制权还给操作系统内核。**系统调用**就是通过陷入指令完成的

**外中断：**&#x4E0E;当前执行的指令无关，中断信号来源于 CPU 外部

**例子：**

1. 时钟中断 —— 由时钟部件发来的中断信号
2. I/O 中断 —— 由输入/输出设备发来的中断信号

![](https://824295091-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmUhsvIFBb8ar2-Um3%2F-MEra9iHaG5WCGSGkswY%2F-MEreY8V5Uvim7w91Mig%2F%E4%B8%AD%E6%96%AD%E7%9A%84%E5%88%86%E7%B1%BB.svg?alt=media\&token=42efcabb-da41-4e6c-b7fe-0cb6373d9bb9)

## 3. 中断机制的基本原理

**不同的中断信号，需要不同的中断处理程序来处理**。当 CPU 检测到中断信号后，会根据中断信号的类型去查询“**中断向量表**”，以此来找到相应的中断处理程序在内存中的存放位置。

**中断处理程序一定是内核程序，需要运行在内核态。**

![](https://824295091-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmUhsvIFBb8ar2-Um3%2F-MEra9iHaG5WCGSGkswY%2F-MErfK7O-owmh3G7dMKw%2Fimage.png?alt=media\&token=e5139691-bd1f-433b-a555-4e0745cb5642)
