这里是我想到的最容易分辨中断和异常的案例。
现在正在开一场音乐选秀,有主持人和各位要演唱的歌手。
主持人(OS)和选手(1进程)想要让自己的声音被所有人听见,就必须要用话筒(CPU),且现场只有一个话筒(CPU),当选手(1进程)使用话筒(CPU)的时候,话筒是蓝色(OS处于用户态),当主持人(OS)使用话筒的时候,话筒是红色(核心态)。
外中断: 现在每位歌手(1进程)有100秒(时间片)用话筒(用户态)歌唱时间,一旦到时间,现场的提示响(时钟中断)了,主持人(OS)会立即强行夺走歌手的话筒(CPU),话筒变成红色(核心态),并宣布下一位选手登场(中断程序),将话筒交给这位歌手(2进程),话筒由红色变为蓝色(核心态-->用户态)。以此往下推。这里的时钟中断是内中断(狭义中断)。
内中断:如果选修进行中,某位选手(波澜哥,3号进程)唱的实在太难听了(出现异常),身为主持人的韩红(OS)听不下去了,立马夺回由蓝色(用户态)变成红色(核心态)的话筒(CPU),一脚将波澜哥踢出去(异常处理),再将红色(核心态)话筒(CPU)转交给下一个选手(4号进程),话筒变为蓝色(用户态)。这里难听的歌声就是异常,是进程自己出现的问题。
从这里我们不难发现,异常是进程内部自己出现的问题,中断是外部发生的,例如时钟中断,IO中断等。且只有中断发生,用户态才能变为核心态。
当然异常包括陷入,终止,故障。中断信号也对应不同的中断处理程序