直接程序控制
看完之后是不是依然一头雾水?来看下面两个例子
无条件传送
假设你正在使用键盘打字。当你敲击键盘上的一个键时,键盘会立即产生一个信号(即输入数据),并且这个信号会立即被电脑接收。在这个过程中,电脑并没有去查询键盘是否准备好发送数据,而是直接接收了这个信号。因为键盘这种输入设备非常简单,它总是准备好发送数据给电脑。
程序查询控制
假设你正在使用电脑看电影,并且想要通过键盘上的某个按键来控制电影的播放或暂停。当你按下这个按键时,电脑并不会立即响应,而是会首先查询这个按键是否确实被按下了(即查询外设状态)。如果按键确实被按下,并且电影播放软件也准备好接收这个指令(即外设准备好接收数据),那么电脑才会执行相应的操作(如暂停或播放电影)。
在这个过程中,电脑需要花费一定的时间(比如几个微秒或毫秒)去查询按键的状态和电影播放软件的状态。虽然这个时间对于人类来说非常短暂,但对于电脑来说却是可以感知的。
中断方式
想象一下你正在使用电脑编写一个文本编辑器,并且你正在通过键盘输入文字。在这种情况下,键盘输入可以视为一个中断源,因为它会在你按下键时产生中断请求。
-
正常工作状态:
当文本编辑器在屏幕上等待用户输入时,CPU正在执行其他任务,比如处理图形界面、响应其他用户操作等。此时,键盘处于空闲状态,等待用户按下按键。 -
中断请求:
一旦你按下键盘上的一个键,键盘控制器会检测到这个事件,并生成一个中断请求信号。这个信号会被发送到CPU的中断控制器(也称为中断处理器或中断服务程序)。 -
中断响应:
CPU在接收到中断请求后,会暂停当前正在执行的任务(即保存当前的状态和上下文),并跳转到中断服务程序(也称为中断处理程序或中断服务例程)去处理这个中断请求。对于键盘输入的中断,中断服务程序会读取键盘控制器中的按键信息,并将其传递给操作系统或应用程序。 -
中断处理:
操作系统或应用程序在接收到键盘输入的按键信息后,会进行相应的处理。在这个例子中,文本编辑器会将按键信息转换为对应的字符,并将其插入到编辑器的文本缓冲区中。 -
恢复执行:
当中断处理完成后,中断服务程序会恢复CPU之前的状态和上下文,并将控制权交还给CPU。CPU会从之前被打断的地方继续执行原来的任务。
总结
虽然都是I/O输入/输出,但是中断方式CPU无须等待,利用率得到大大提升。