漫谈计算机组成原理(十一)中断系统

前言

这篇文章是整个《漫谈计算机组成原理》系列文章的最后一篇——中断系统。实际上,在《I/O系统》那一篇文章中,我们已经介绍过了中断系统,我想你大概也知道了中断的流程及中断的两种方式,如果你还不知道,就去翻翻前一篇文章《漫谈计算机组成原理(七)I/O系统》吧!
在这篇文章中,我们将细化的讲述中断系统的相关内容,带你全面的了解中断系统的组成、中断系统的工作流程及中断系统的意义。那就开始吧!

中断系统概述

所谓中断,在计算机系统中的含义就是:“当前程序被打断”。有很多的情况会造成这种打断,比如说人为打断、机器故障、断电等突发情况。举个简单的例子,比如说,你现在正在使用U盘传输文件,但是传到一半,突然发现正在传输的文件并不是我想要的,所以就点击“取消传输”停止当前任务。这其实是两个过程,你先是打断了当前的“传输任务”,然后又取消了“传输任务”。

引起中断的原因

引起中断的原因有很多,大多数的属于下面的这几种情况。

  • 人为设置的中断
    这就是我刚才说的“传输任务”类的中断。人为的结束当前的任务,转而进入接下来的任务。

  • 程序性事故
    就是程序出错了。比如定点、浮点运算中的溢出等。

  • 硬件故障
    就是硬件出现了问题。这个好像没啥可说的。

  • I/O设备
    在I/O系统那一讲中我们说过,I/O设备会不断的向CPU发出中断请求,这也会造成中断。这个中断就和计算机的配置密切相关了。

  • 外部事件
    即使用键盘来中断现行程序。

中断系统实现的功能

我们先来回顾一下在I/O系统中讲过的中断的流程:保护现场–>中断服务–>恢复现场–>中断返回
这个流程的第一步虽然是保护现场,但是对于真正的中断来说,第一步肯定是中断源发出中断请求。也就是说,中断源如何发出中断请求是中断系统要解决的第一个问题。中断系统的其他作用,就是解决上面步骤中“如何实现”的这个问题。

中断请求标记和中断判优逻辑

中断请求触发器

所谓的中断请求标记,就是由中断请求触发器的状态决定的。触发器的“开”状态代表1,“闭”状态代表0。因为如果有了中断请求,CPU需要首先找到究竟是哪里发来的中断请求,所以就需要中断请求触发器做出这个标记的状态。

中断判优逻辑

在计算机中,任何一个时刻只能处理一个中断程序。所以,当很多设备或者说中断源发出中断请求的时候,就需要知道究竟要先处理那个中断程序,如果处理不当,计算机就要宕机了。我记得在《系统总线》那篇文章中有讲过,尽管判优逻辑不同,但是就分成了软件处理和硬件处理两种方式。
1.硬件排队
硬件排队也分成两种,一种是链式查找,将所有的中断源组成一条链子,CPU从第一个一直查到最后一个,遇到中断就停下,下一次再重新开始查询,这种方式的缺点就是,优先级最低的设备可能永远都不会被CPU“临幸”。第二种方式是在CPU内部,设置了一个INTR,这玩意的作用其实就是禁止后面的中断源发出中断请求。当然,肯定是优先级高的中断源能够禁止优先级低的中断源。
2.软件排队
软件排队就是使用软件查询的方式,从优先级高的中断源开始查询。

中断程序入口地址的寻找

计算机想要执行一段代码或者一个程序,就需要先行得知中断程序究竟是从哪里开始的。这种寻找方式有两种:硬件向量法和软件查询法。

硬件向量法

硬件向量法是利用硬件先生成向量地址,然后再通过向量地址找到软件中断程序的入口地址。这种方法的核心就是生成向量地址的那个硬件。此方法速度相当快,是当下应用最为广泛的一种方式。

软件查询法

使用软件寻找中断服务程序入口地址的方法。

中断响应

中断响应的条件

在中断源中,有一个装置叫做“中断允许触发器”,只有这个触发器处于“开”的状态的时候,才能够发起中断服务。

中断隐指令

在发起中断服务后,CPU首先要将原有的程序“保存”,做一个压栈的操作,目的就是在中断服务程序结束的时候好通过弹出栈元素的方式找回原来执行的程序。
同时,当程序进入中断服务之后,除了多重中断的情况,必须保证当前的中断程序不会受到各种影响,所以还需要“硬件关中断”,即通过硬件的方式,禁止中断源发起请求,或者说将中断源发出的请求拦截。

恢复现场

在中断响应完成以后,就需要将原有的被打断的程序继续执行。所以就要用到“现场恢复”的技术。

结语

其实这块的东西非常简单,没有什么高大上的,所以我的行文就是按照唐老师的《计算机组成原理》一书的编排方式操作的。这个系列的文章到这里就结束了。剩下CPU那部分没有写的东西,后面可能会放到“计算机系统”的文章中,也有可能写个这个系列文章的续集(笑哭)。第一篇文章是今年的5月17号发布的,没想到一写就写了三个半月(好像产出不算太高,可能是我太懒了)。感谢大家的陪伴!
新的文章暂时不写这么“硬”的内容了,可能会更加偏向“实用性”,当然,计算机理论基础的文章还是会继续写的,会穿插在“应用型”的文章中。
最后,希望大家对这个系列的文章打个分,也好让我知道我到底有多菜,谢谢大家!

发表评论

电子邮件地址不会被公开。 必填项已用*标注