中断和中断向量
最后更新于:2022-04-02 04:07:30
[TOC]
## 中断
当外界发生变化时,通过**中断**通知CPU应该去注意某个信号(事件)。这个时候,CPU当前执行的程序会被中断,当前的执行状态会被保存中断响应程序会被执行。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0b/78/0b78e4f73dac7641a2f322ade544e6d1_1172x670.png)
中断请求IRQ有哪些
- 硬件设备发给主板(打印机、键盘、鼠标等)
- 硬件中断:CPU异常(除以0),时钟信号等
- 软件中断:发出(异常、切换到内核态等
中断响应过程
- (OS加载时)写入中断向量表
- 产生中断请求,发送给CPU查询中断向量表 (Interrupt Vector Table)确定中断向量(Interrupt Vector)
- 根据中断向量定位中断响应程序
- OS 接管中断
### 中断向量表
存放响应事件对应的地址,指导PC指针往哪个地方跳
(一般在内存中)一块区域,存储了中断类型和中断响应程序的对应关系。每一行叫做一个中断向量。
| 中断类型 | ISR地址 | 描述 |
| --- | --- |--- |
| 00 | 0x0000 | 除以0 |
| 01 | 0x0004 | 单步(调试器) |
| 09 | 0x0024 | 键盘 |
| 18 | 0x0048 | 打印机 |
| 100 | 0x0190 | 自定义 |
### 如果没有中断(polling)
如果没有中断,需要使用 while 语句去不断循环,如果使用中断,则可以不用while,类似异步IO,其底层就是用中断实现
```
while(!printer.ready()){
sleep(10ms)
}
doPrint()
```
### 中断意义
- 提高工作效率(回忆polling的问题)
- 故障恢复(异常处理、紧急事件等)
- 简化编程模型(try/cache,计时器等)
';