Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

中断系统

复习

  • 外设可以在准备好后主动通知 CPU
  • CPU 此时可能正在执行另一段程序
  • PC、寄存器和状态标志共同描述程序进行到哪里

TL;DR

  • 中断让 CPU 暂停当前程序,先处理突然到来的事件
  • 离开前要保存现场,处理后再恢复
  • 中断向量帮助 CPU 找到对应的处理程序

正文

  你正在读书,门铃突然响了。去开门并不难,真正重要的是回来后还能找到刚才那一行。

  CPU 处理中断也一样。

离开之前先做书签

  设备发出中断请求后,CPU 通常先完成当前指令,再依次做这些事:

  1. 保存下一条指令地址和必要的状态
  2. 根据中断编号找到对应处理程序
  3. 执行处理程序,例如读取键盘送来的字符
  4. 恢复刚才保存的状态
  5. 从原程序的下一条指令继续

  被保存的 PC、状态寄存器及必要的通用寄存器,合起来叫作现场。如果现场保存不完整,回来后程序就可能拿着被改过的数据继续算。

该跳到哪里

  键盘、时钟和硬盘需要不同的处理办法。机器用一张中断向量表,把中断编号映射到处理程序入口。收到编号后查表,再把入口地址写入 PC。

  这和普通跳转并没有根本区别,只是目标地址由事件和向量表决定。

同时有人敲门

  多个中断可能同时到来,因此需要优先级。更紧急的请求可以先处理,较低优先级的暂时等待。有些系统也允许高优先级中断打断正在执行的低优先级处理程序,但每多嵌套一层,就要多保存一层现场。

  时钟本身也能定期产生中断,让系统周期性地重新获得控制权。以后讲操作系统时,会看到它怎样借此轮流安排多个程序。

  现在,最后一块已经放好。下一章把一段程序装进内存,看整台机器第一次从头跑到尾。

思考题

  如果中断处理程序修改了寄存器 R1,却没有在返回前恢复它,原程序可能出现什么问题?

小结

知识点

  • 中断处理包含保存现场、处理与恢复
  • 中断向量表给出处理程序入口
  • 优先级解决多个请求的先后

思考题答案(仅供参考)

  原程序会以为 R1 仍保存中断前的值,却实际读到中断处理留下的新值。后续计算可能出错,而且错误看起来像凭空发生,因此现场必须按约定保存和恢复。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪