组成原理---中断

  • 中断系统是计算机中实现中断功能的软、硬件总称。一般在 CPU 中配置中断机构,在外设接口中配置中断控制器,在软件上设计相应的中断初始化程序和中断服务程序。

中断的基本概念

  • 在 CPU 执行程序的过程中,由于某种事件发生,CPU 暂时停止正在执行的程序而转向对所发生的事件进行处理,当对事件的处理结束后又能回到原来中止的地方,接着中止前的状态继续执行原来的程序,这一过程称为中断。

  • 中断源的分类
    所谓中断源,是指由于某种原因引起 CPU 中断的事件或设备。硬中断是指由外部设备和其他 CPU 外部事件引起的中断,因此又叫外中断。外中断一般通过 CPU 的中断请求引脚引入。软中断是由指 CPU 内部的指令或程序执行中的突发事件所引起的中断,又叫内中断。

  • 在很多中断系统中,对所有的中断源编码,为其分配一个惟一的代号,称为中断类型号。中断类型号用于寻找中断服务程序的入口地址(中断向量),以实现程序转移。

  • 中断过程
    在这里插入图片描述
    中断申请:对于外中断,外设或其他中断源通过CPU的中断请求引脚向CPU发中断请求信号,CPU在每条指令执行完后,监测是否有中断请求,有效则转入中断响应阶段。对于内中断,则无需中断请求,直接可以根据中断类型号转入相应的中断服务程序。 在从中断源产生中断信号,到 CPU 接收到中断请求并准备响应的过程中,中断系统需解决的主要问题是: 中断屏蔽:对那些 CPU 目前不准备响应的中断源,CPU 如何禁止它们产生中断请求? 中断请求信号的传递:当系统中有多个中断源时,各中断源如何向 CPU 提出中断请求? CPU 对中断请求信号的监测:CPU 如何监测到有中断请求?

    中断响应:CPU 首先通过硬件保存程序断点(PC)及标志寄存器,以便中断返回,由于该过程对软件设计者是透明的,因此又称为 CPU 执行了中断隐指令。然后进入中断响应周期,或者通过向量方式或者通过软件查询方式得到中断服务程序入口,并置入 PC。 在中断响应过程中,中断系统需解决的主要问题是: 中断优先级的判别,中断源的识别:CPU 如何知道当前响应的是哪个中断源?即转入哪个中断源的中断服务程序入口?

    中断服务:CPU 转入中断服务程序并执行,进行外设所需的数据交换。中断服务程序中,首先保护现场,将有关寄存器的内容压栈,然后进行 I/O 操作,实现数据传送。最后,恢复现场,并执行中断返回指令。 在中断服务过程中,中断系统需解决的主要问题是: 中断嵌套。

    中断返回:即恢复断点及标志。中断返回指令的功能,就是将中断隐指令保存的程序断点和标志读出并送入 PC 和标志寄存器,从而回到 CPU 原来的程序断点处继续执行。

  • 中断的作用
    实现 CPU 和多台 I/O 设备并行工作。

    具有处理应急事件的能力。

    进行实时处理:指在某个事件出现的规定时间内及时处理,而不是集中起来批处理。

    实现人机通信。

    实现多道程序运行和分时操作。

    实现应用程序和操作系统(管态程序)的联系:可以在用户程序中安排一条“Trap”指令(陷阱指令)进入操作系统,以方便调试或使用系统功能,其中断处理过程与其他中断类似。

    实现多机系统中各处理机间的联系:在多机系统中,各处理机之间的信息交流和任务切换都是通过中断系统来实现的。

  • 只要在响应时间比事件发生之间的平均时间短得多的情况下,采用中断技术可以大大提高主机的工作效率。

中断请求与判优

  • 中断请求信号的产生与监测:一般情况下,计算机都有多个中断源。由于每个中断源向 CPU 发出中断请求是随机的,为了记录中断事件的发生,一般是为每个中断源设置一个触发器,称为中断请求触发器INTR。当某个中断源有中断请求时,其相应的中断请求触发器置成“1”状态(INTRi=1), 以表明中断源向 CPU 发出中断请求信号。中断请求信号锁存在中断请求触发器中,必须保持到 CPU 响应这个中断请求后,才可以将其清除。 由多个中断请求触发器构成一个中断请求寄存器 IRR,该寄存器的每一位对应一种中断源。中断寄存器的内容称为中断字,中断字中为“1”的位表示对应的中断源存在中断请求。

  • 由于中断的发生是随机的,必须提供一种手段使 CPU 监测随时可能发生的中断。一般,CPU 在每条指令执行完毕后,通过检测 CPU 的中断请求引脚是否有效来达到监测目的。 大多数 CPU 具有若干个中断请求引脚(可屏蔽中断和不可屏蔽中断),用以监测是否有中断发生。

  • 中断屏蔽:中断屏蔽技术能够使得CPU禁止或允许某些中断源的中断请求。通常,在中断系统中设置了一个可以被 CPU 指令访问的中断使能触发器 IE。可以通过开中断指令控制开放中断(IE=1),即 CPU 可以响应中断;通过关中断指令关闭中断(IE=0),即 CPU 禁止响应任何中断。

    实际上在大部分中断系统中,对应每一个中断源都设置一个中断屏蔽触发器 INTMi, 以实现对单个中断源的屏蔽控制。将中断系统中的所有中断源的屏蔽触发器放在一起,形成一个寄存器,用一个地址对其寻址,称为屏蔽寄存器 IMR。外部中断产生后,首先经过屏蔽寄存器屏蔽,然后送入硬件优先级排队电路判优,最后送到 CPU 的中断引脚。CPU 可以通过指令向该屏蔽寄存器写入屏蔽字,以开放或者屏蔽某一个或者某一些中断源。在多重中断中,还可以使用屏蔽技术实现动态改变中断优先级。
    在这里插入图片描述

  • 中断请求信号的传递
    在这里插入图片描述
    公共请求线:各中断源共用一根公共请求线,当 CPU 接到中断请求后,必须通过软件或硬件的方法来查询是哪个设备提出的中断请求,然后再找出中断服务程序的入口地址。这种方式的特点是在负载允许的情况下,中断源的数目可随意扩充。

    独立请求线:独立请求线方式中,各个中断源单独设置中断请求线,将中断请求直接送往 CPU。这种方式的特点是 CPU 接到中断请求的同时,也就知道了中断源和中断服务程序的入口地址,便于实现向量中断,而且提高了中断的响应速度。但其硬件代价较大,且 CPU 所能连接的中断请求线数目有限,中断源难以扩充。

    二维结构:通常,中断源的数目都大于中断输入线的数目。为此,将中断请求线连成二维结构。这种方式中,同一优先级别的若干中断源共享一条中断输入线。当 CPU接到中断请求信号时,仍然需要进行查询,以识别中断源,但只需对共享一条中断请求线上的几个设备进行查询,不同请求线上的中断源优先级别不同。适合于管理数目较多的中断源且具有较快的响应速度。

  • 中断请求的排队判优
    当某个时刻有多个中断源同时提出中断请求时,通常,需要把全部中断源按中断性质和处理的轻重缓急分配优先级并进行排队。确定中断优先级的原则是:对那些—旦提出请求需要立刻响应处理,否则就会造成严重后果的中断源,规定最高的优先级,而对那些可以延迟响应和处理的中断源,规定较低的优先级。一般,把硬件故障引起的中断优先级定为最高,其次是软件故障中断和 I/O 中断。 每个中断源均有一个为其服务的中断服务程序。每个中断服务程序都有与之对应的优先级别。另外,CPU 正在执行的程序也有优先级;只有当某个中断源的优先级高于 CPU 中正在执行的程序的优先级时,才能中止 CPU 正在执行的程序。在一些计算机的程序状态字寄存器中就设置有优先级字段。

    软件查询
    所谓软件查询法就是用程序来判断优先级,这是最简单的中断判优方法。软件查询法用于一根公共请求线的情况,当存在中断请求时,通过程序查询连接在该中断请求线上的每一个设备,根据其查询的先后次序确定其优先级,查询程序逐次检测中断请求寄存器的各位状态,最先检测的中断源具有最高的优先级。显然,软件查询是与中断源的识别结合在一起的.当检测到申请中断的设备时,也就找到了中断源,便转到相应的中断服务程序。 必须指出,软件查询中断与程序传送方式的等待循环“查询”是不同的。对于后者,CPU 要花费很多时间不断地要查询设备是否“准备好”信号进行数据交换,查询所需要的时间,取决于设备的工作速度。而中断查询是一种中断处理方式,在设备未提出中断请求时,CPU 照常执行主程序;只有在接收到中断请求后,CPU 才去“查询”它们,以寻找申请中断的设备。 可以灵活地修改中断源的优先级别,并且除了中断请求寄存器外,无需额外的硬件电路,实现简单。查询、判优完全靠程序实现,需要占用 CPU时间,同时中断响应较慢,优先级较低的设备被响应的等待时间也较长。
    在这里插入图片描述

    硬件排队电路
    优先级别高的中断请求将自动封锁优先级别低的中断请求的处理。硬件排队电路一旦设计连接好之后,将无法改变其优先级别。

    串行排队链(菊花链硬件查询线路)与向量中断:串行排队链判优电路,适用于公共请求线传送方式。当接在一条公共中断请求线上的一个或几个设备提出中断请求时,通过这根请求线 INTR送到 CPU。CPU 一旦条件允许响应,将发出中断响应信号INTA,它串行地依次连接所有中断源。若某个设备没有中断请求,它就将中断响应信号INTA传给下一设备;若某设备有中断请求情号,它就封锁INTA,不再往下传送,同时产生该设备的中断请求响应信号 INTAi,用它选通该设备的中断向量编码器,将中断向量或者中断向量地址送上 CPU 数据总线,供CPU 读取。CPU 依据中断向量地址从相应的中断向量单元取出中断服务程序的入口地址,从而转入执行相应的中断服务程序。 适用于向量中断方式,中断响应信号INTA逐级传送,电路中距离 CPU 最近的(电气上的信号传递顺序)中断源优先级最高。这种方法实现时电路较简单,但优先级固定,取决于固定的硬件连接,不够灵活,不易于改变或调整优先级。
    在这里插入图片描述

    独立请求优先级排队电路:在独立请求的多线方式下,对各个中断源的中断请求信号 INTRi进行串行排队,只把目前申请中断的中断源中优先级最高的 INTRi 信号送至 CPU,即级别高的中断源封锁级别低的中断源的 INTR 信号,从而构成了独立请求优先级排队电路,中断源 1 的优先级最高,它一旦有中断请求(INTR1’=1),则将屏蔽其他所有的中断源的中断请求信号;当中断源 1 没有中断请求(INTR1’=0)时,中断源 2 的中 断请求信号 INTR2’才能送到 CPU。在这种判优电路中,任何时刻下 CPU 至多只有一个中断请求线有效,此时,该请求线上所接的中断源优先级最高。链路上离 CPU 最近的中断源,其优先级最高。
    在这里插入图片描述
    二维结构优先排队判优电路:对于二维结构的情况,可以用多线请求与菊花链响应相结合来实现。在这种结构中,把全部外中断源按优先级分成几类,每一类用一条中断请求线,各类之间的优先级可采用多线请求的串行排队判优电路实现;同一条中断请求线上的各中断源可采用单线请求的串行排队判优电路实现,按它们距离 CPU 的远近判定它的优先级。各请求线的优先级别,被称为主优先级,同一条请求线上各中断源的优先级别,被称为次优先级。CPU 在处理中断时,首先比较有中断请求的中断线和正在运行的程序的优先级,如果中断线优先级高于正在运行的程序,则 CPU 响应该中断线,发送相应的INTA信号给这条中断线的菊花链判优电路,进行次优先级比较,响应这根中断线上最高优先级的中断源。
    在这里插入图片描述

中断响应

  • CPU 响应中断的条件
    如果不考虑更高级的请求(如 DMA 请求),CPU 响应中断的条件是: CPU 的中断使能触发器开放(IE=1,允许中断); 在规定的时间内,CPU 的中断请求引脚有效; 该中断未被屏蔽; 本条指令执行完; 对于某个中断源来说,若要使得它的中断请求得到 CPU 的响应,则在满足以上条件的基础上,还必须保证:该中断源的中断请求没有被 CPU 屏蔽,且优先级最高,且高于 CPU现行程序。

  • CPU 中断响应的过程
    CPU 在执行现行指令的最后一个机器周期的最后一个时钟周期时,采样中断输入引脚,若发现中断请求有效,在下一个机器周期进入中断响应周期,以响应中断。 在中断响应周期,CPU 执行中断隐指令。

    关中断:当 CPU 响应中断后,立即自动关中断(把内部的中断使能触发器 IE 清零),禁止接收新的中断,以保证接下来中断隐指令操作不被打断。

    保存断点:为了在中断服务程序执行完毕后,能够正确地返回到原来主程序被中断的断点处继续执行,必须把断点保存起来。一是 PC 的值,指向下条指令的地址,即中断返回后要执行的指令;二是程序状态字 PSW,记录中断发生时的程序“现场”,譬如进位、溢出、符号等运算标志位。断点通常保存在堆栈中,有些计算机中将断点保存在特殊的中断返回寄存器中。

    识别中断源,转入服务程序入口地址:中断源识别的目的是形成该中断源的中断服务程序的入口地址,以便 CPU 将此地址置入 PC 中,实现程序转移。向量中断:在向量中断中,中断服务程序入口地址被称为中断向量。通常将各中断源的中断向量存放在内存一片连续的单元中,形成一张中断向量表,表的内容是相应的中断服务程序入口地址,存放中断向量的单元地址称为中断向量地址,简称为向量地址。 当 CPU 响应中断时,由硬件(外设接口或者中断控制器)自动产生一个指定的地址(向量地址)或者代码(中断类型号),它们与该中断源的中断向量有一一对应关系。由向量地址或中断类型号指出每个中断源设备的中断向量(中断服务程序入口地址),这种使用向量识别中断源的中断系统称为向量中断。 CPU 在中断响应周期通过中断响应信号INTA去读取向量地址,之后能根据该地址从中断向量表读出中断服务程序的入口地址。 向量中断的好处是中断服务程序可放在内存任何位置。中断服务程序可随意修改,只要将中断服务程序首地址写入(更新)向量表就可以了,而不必担心存储空间的冲突问题。 软件查询:由 CPU 执行一个公共的中断处理程序,逐个询问外设接口有否发出中断请求(测试中断请求触发器),若有中断请求,则转入其中断服务程序的入口开始执行。

中断服务与返回

在这里插入图片描述

  • 中断处理是通过执行中断服务程序完成的,中断服务程序是预先编好存放于内存固定位置的一段程序。

  • 中断服务程序

    预处理部分:保护现场是将在中断处理程序的过程中用到的一些通用寄存器进栈保护,待中断处理结束后再将之恢复。在中断处理过程中,断点(PC 的值,PSW 的值)是任何中断处理都必须保护的重要“现场”,所以放在“中断响应周期”中由硬件完成,以提高中断响应的速度。程序要保护的寄存器只是中断处理程序中用到的寄存器,不同的中断处理程序使用的寄存器名称不同,个数也不等,因而保护的寄存器往往放在中断处理程序中由软件完成。 因为中断隐指令中,由硬件关闭了中断使能,为了在中断处理的过程中允许中断嵌套,需要软件开启中断使能。而通过保存旧屏蔽字和设置新屏蔽字,可以更改中断的优先级。若不允许中断嵌套,则无需开中断和交换屏蔽字。

    中断服务:中断服务是中断处理程序的核心内容,随中断源的不同而不同。

    恢复部分:恢复现场及恢复屏蔽字是在中断处理程序即将结束前要恢复通用寄存器内容及原来的屏蔽字,关中断则是为了在恢复现场的重要时间内不允许中断。

    中断返回:中断返回是由中断服务程序的最后一条指令(IRET)实现的,该指令的功能是将中断响应周期中保存在堆栈中的断点恢复,然后开中断,同时,清除了正在服务的中断的一些状态。这样就从中断服务程序转回到了原来被中断的程序继续执行。
    在这里插入图片描述

  • 中断服务程序与子程序的区别
    子程序的执行是由程序员事先安排好的(由一条调用子程序指令转入),而中断服务程序的执行则是由随机的中断事件引起的; 子程序的执行受到主程序或其上层程序的控制,而中断服务程序一般与被中断的现行程序毫无关系; 不存在同时调用多个子程序的倩况,而有可能发生多台 I/O 设备同时请求 CPU 为自己服务的情况。

  • 中断嵌套
    中断嵌套是指 CPU 在执行某个中断服务程序的过程中允许再响应更高级别的中断请求,也称为多重中断。如果正在执行的中断服务程序中禁止再响应其他中断请求,就称为单重中断。引入中断嵌套之后,不但当多个中断请求同时到达时能先为优先级更高的请求服务,而且当优先级高的中断请求到达得晚,也能尽快得到优先服务。 中断嵌套技术的实现,关键是在中断处理程序中必须适时开放中断(STI 指令),并且使用堆栈的“先进后出”特性保证中断的逐级返回。
    在这里插入图片描述

  • 利用中断屏蔽技术修改中断优先级
    优先级的确定一般由硬件排队电路决定,不便于改动。但是利用中断屏蔽技术可以巧妙地改变各中断源的优先级,使计算机适应各种场合的需要。通常把屏蔽字看成软件排队,通过程序修改屏蔽字的方法可以方便地改变中断源得到CPU 服务的先后次序,实现灵活的优先级排队。

    中断响应的次序与中断服务的次序可以不一致,中断响应的次序是由排队判优电路确定的固定次序,而中断处理的次序可以与之保持—致,也可靠修改屏蔽字来灵活地改变。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值