按:开学了,学习生活当然要入正轨。
之前看时草率,越往后越迷糊。遂回头再把一些东西搞明白,果然有收获:
中断
中断无非是用来提高处理器效率的一个手段。
中断指令
假如,一个 I/O 程序的调用可分为两个部分:
- 为实际的 I/O 操作做准备。比如:复制将要输出到特定缓冲区的数据,为设备命令准备参数。
- 实际的 I/O 命令。
- 设置一个表示操作成功或失败的标记。用于完成操作。
其中第一步较为简单,速度也快。但第二步将会消耗大量时间。
利用中断功能,处理器可以在 I/O 操作的执行过程中执行其他指令。
用户程序到达系统调用 WRITE 处,但涉及的 I/O 程序仅包括准备代码和真正的 I/O 命令。在这些为数不多的几条指令执行后,控制返回到用户程序。
在这期间,外部设备忙于从计算机存储器接收数据并打印。
而处理器得以执行接下来的其他用户程序指令
这种 I/O 操作和用户程序中指令的执行是并发的。
这样就节省下了中间第二步的时间。
当外部设备做好服务的准备,也就是说,当它准备好从处理器接收更多的数据时,
该外部设备的 I/O 模块给处理器发送一个中断请求信号。
(外部设备对 CPU 说:我的活干完了,你快给我派任务啊!)
这时处理器会做出响应,暂停当前程序的处理,转去处理服务于特定 I/O 设备的程序,这个程序称做中断处理程序(interrupt handler)。在对该设备的服务响应完成后,处理器恢复原先的执行。
为适应中断产生的情况,在指令周期中要增加一个中断阶段: