多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 中断 当外界发生变化时,通过**中断**通知CPU应该去注意某个信号(事件)。这个时候,CPU当前执行的程序会被中断,当前的执行状态会被保存中断响应程序会被执行。 ![](https://img.kancloud.cn/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,计时器等)