Chapter 3 Basic Input/Output(4)

中英对照表

英文 中文
Multiple Devices Interrupt System Design Issues 多设备中断系统设计问题
Identify Interrupt Source 识别中断源
Multi level Interrupt 多级中断
Simultaneous Interrupt 同时中断

多设备中断系统设计问题

学习一个东西往往是有目的的,即使表面上没有,深处也一定有着某种说法。

  1. 识别中断源(Identify Interrupt Source)
    • 面临的问题在于,如何准确分辨出是哪个模块发出了中断请求。因为在包含多个设备的系统中,众多设备都有可能产生中断,处理器需要明确具体来源才能进行针对性处理。
    • 同时,处理器要知道如何获取对应不同设备的合适中断服务程序的起始地址。也就是说,当确定了中断是由某个设备发出后,处理器得能快速定位到处理该设备中断相关事宜的具体程序入口,进而执行相应的中断服务流程。
  2. 多级中断(Multi level Interrupt)
    • 要考虑这样一个情况,当处理器正在处理一个中断时,是否应该允许另一个设备再次中断处理器来请求处理它的相关事务。在复杂的系统环境里,可能会出现不同优先级或者不同紧急程度的中断请求,需要制定相应规则来决定能否在已有中断处理过程中插入新的中断处理,这就涉及到多级中断相关机制的设计。比如高优先级的中断可能需要打断正在执行的低优先级中断服务程序,优先得到处理,以保障重要或紧急任务能及时响应。
  3. 同时中断(Simultaneous Interrupt)
    • 当出现两个或更多的中断请求同时发生的情况时,应该如何妥善处理是需要重点考虑的问题。这种情况下,需要有合适的策略来判断这些同时到来的中断的先后处理顺序,比如根据中断优先级进行排序,或者按照特定的预设规则来协调,确保各个中断请求都能被合理、有序地处理,避免出现混乱,保证系统整体运行的稳定性和高效性。

识别中断源

(1)

  1. 情况1:多条中断请求线
    • 在处理器和I/O接口之间设置多条中断线。通过这种方式,理论上不同的中断线可以对应不同的设备或者设备组,方便区分中断来源。
    • 不过即便采用了多条中断线,很可能每条线上还是会连接多个I/O接口,这就意味着仅靠中断线并不能完全精准地确定具体是哪个I/O接口对应的设备发出的中断,还需要进一步的分辨手段。
image-20241205184651306

(2)

  1. 情况2:公共中断请求线
    • 轮询(非向量中断)
      • 这是一种处理中断的方式,后续会详细介绍其原理及特点等内容。
    • 向量中断:同样是一种应对中断的机制,和轮询方式有所不同,下面也会展开讲解。

(3)

  1. 轮询(非向量中断)
    • 非向量中断的定义:当CPU接收到一个中断时,它会通过硬件将程序计数器跳转到一个固定的地址。也就是说,不管是哪个设备触发的中断,处理器都会先跳到这个统一的固定地址去开始执行相应操作,后续再通过软件手段去进一步判断具体中断源,所以这种方式相对比较简单直接。
    • 适用场景:对于那些中断源较少,并且软件结构比较简单的小型系统来说很实用。因为系统简单,即便都跳转到固定地址再排查中断源,也不会花费过多的时间和资源,处理起来相对容易。

(4)

  1. 轮询(非向量中断)(续)
    • 实现方法:处理器会去读取每个I/O接口的状态寄存器。因为当某个设备发起中断请求时,它会将自身状态寄存器里对应的中断请求位(IRQ位)设置为1,所以处理器通过依次读取各接口状态寄存器,查看哪个设备对应的IRQ位为1,就能判断出是哪个设备发出的中断请求了。
image-20241205184720270

(5)

  1. 向量中断
    • 向量中断的定义:这是一种中断处理方案,在请求中断时,设备会通过向处理器发送中断向量代码的方式来表明自身身份,处理器根据这个代码就能快速知晓是哪个设备触发的中断,进而直接定位到对应的中断处理程序入口,效率更高。
    • 中断向量相关概念
      • 中断向量指的是中断处理程序的内存地址,也就是处理器根据中断向量代码最终要找到的具体处理中断的那段程序在内存中的存放位置。
      • 中断向量表包含了所有中断处理程序的内存地址,它就像是一个索引目录一样,把各个设备对应的中断处理程序地址整理罗列在一起。
      • 中断向量代码其实就是进入中断向量表的一个索引,处理器通过这个代码能在中断向量表中快速查找到对应的中断向量(即中断处理程序地址),从而精准地执行相应的中断服务程序。

(6)

image-20241205184750737

多级中断

(1)

  1. 单级中断
    • 不管是单个设备还是多个 I/O 设备产生中断,在执行某个中断服务程序期间,都应该禁用中断。也就是说,一旦开始处理一个中断,就要确保这个过程不被其他中断打扰,直至当前中断服务程序执行完毕,这样能保证处理逻辑的连贯性和稳定性,但灵活性欠佳,可能会导致一些高优先级的紧急中断请求也得等待。
  2. 多级中断(中断嵌套)
    • 在执行某个设备的中断服务程序过程中,有必要能够接受来自其他设备的中断请求。这就涉及到中断嵌套的概念,即高一级的中断可以打断正在执行的低一级中断服务程序。
    • 各个 I/O 设备按照优先级结构进行组织。当处理器正在处理来自低优先级设备的中断请求时,如果有高优先级设备发出中断请求,那么处理器应该接受这个高优先级设备的请求并优先进行处理,以此来保证更重要、更紧急的中断事务能得到及时响应,提高系统整体对各类中断情况的应对效率。

(2)

  1. 多级优先级
    • 给处理器分配一个优先级级别,并且这个优先级是可以在程序(通过特权指令)控制下进行改变的。特权指令一般只有特定的、具有较高权限的程序才能使用,以此保障优先级调整的安全性和合理性。
    • 处理器的优先级实际上就是当前正在执行程序的优先级,意味着程序的重要性、紧急程度等因素决定了处理器当前以何种优先级状态去处理中断相关事务。
    • 处理器只接受来自优先级高于自身的设备发出的中断请求。这样能确保高优先级的中断优先被处理,避免低优先级中断频繁打断重要任务的执行。
    • 当开始执行某个设备的中断服务程序时,处理器的优先级会提升至该设备对应的优先级,使得在处理这个中断期间,处理器可以按照合适的优先级规则,应对其他可能出现的中断情况,比如能继续嵌套处理更高优先级的中断等。
    • 处理器的优先级可以通过处理器状态寄存器中的几位来进行编码表示,便于处理器快速识别和判断自身当前所处的优先级状态以及与外部中断请求优先级的比较等情况。

(3)

  1. 多级优先级(续)
    • 图(Figure):展示了利用单独的中断请求线和应答线来实现中断优先级的相关情况。图中涉及多个设备(如 Device 1、Device 2、Device p 等),这些设备通过各自的中断请求线(如 INTR1、INTRp 等)向处理器发送中断请求,处理器再通过对应的中断应答线(如 INTA1、INTAp 等)进行回应,整体呈现了基于这种硬件连线方式来进行中断优先级仲裁的架构,通过这种硬件层面的设计来保障不同优先级设备的中断请求能按照设定的规则被合理处理。
中断请求线和应答线

同时中断

(1)

  1. 情况1:每个设备有单独的中断请求和应答线
    • 处理器只需接受优先级最高的请求。这样的设计使得处理器能够根据设备优先级,选择性地接受某些设备的中断请求,而忽略其他优先级较低设备的请求,从而保证在多个中断请求同时到来时,系统优先处理最重要的任务。
  2. 情况2:多个设备共享一条中断请求线
    • 软件轮询(Software Poll):这是一种处理同时中断的方式,后续会详细说明其原理和特点。
    • 菊花链(硬件轮询,Daisy Chain):同样是应对多个设备共享中断请求线的一种策略,也会在后面详细介绍。
    • 优先级组(Priority Group):也是用于处理这种情况的一种机制,具体内容会逐步展开讲解。

(2)

  1. 软件轮询
    • 处理器会轮询I/O设备的状态寄存器。通过逐个检查设备状态寄存器来确定哪个设备需要处理中断。
    • 设备的优先级由轮询设备的顺序决定。例如,先被轮询的设备优先级相对较高,后被轮询的设备优先级较低。这种方式完全依靠软件的顺序来确定优先级,灵活性较高,但轮询过程可能会消耗较多时间。

(3)

  1. 菊花链
    • 图(Figure)相关说明:从图中可以看到,在菊花链(Daisy Chain)的连接方式中,在电气连接上离处理器最近的设备具有最高优先级。就像链条一样,沿着这个连接顺序,第二个设备优先级次之,依此类推。这种方式通过硬件连接的顺序来确定设备的优先级,是一种硬件轮询方式,速度相对较快,但硬件连接一旦确定,优先级就很难改变。
    • 从硬件连接来看,包括处理器(Processor)、多个设备(如Device 1、Device 2、Device n),通过中断请求线(INTR)和中断应答线(INTA)进行连接,这种连接方式决定了设备的优先级顺序。
image-20241205185548159

(4)

  1. 优先级组
    • 优先级组是一种用于处理多个设备共享中断请求线时中断请求的机制。它通过对设备进行分组,并为不同的组分配不同的优先级,来确定在多个中断请求同时发生时,处理器应该先响应哪个组中的设备中断请求。
    • 例如,假设有三组设备,分别为 A 组、B 组和 C 组。A 组被分配为最高优先级,B 组次之,C 组最低。当 A 组中的任何一个设备发出中断请求时,处理器会优先响应 A 组中的设备,只有当 A 组中没有设备发出中断请求时,才会考虑 B 组中的设备,以此类推。

与其他方式的比较优势

  • 与软件轮询相比,优先级组在处理中断请求时不需要通过逐个轮询设备状态寄存器来确定优先级。软件轮询方式由于要按顺序检查设备状态,在设备较多时会消耗大量时间。而优先级组可以根据硬件线路的设置快速确定应该优先处理的设备组,减少了处理中断请求的延迟。
  • 与菊花链相比,优先级组的优先级设置更加灵活。菊花链的优先级是由设备在硬件连接上离处理器的远近决定的,一旦硬件连接确定,优先级很难改变。而优先级组可以通过重新配置硬件线路或者设置分组规则,相对容易地调整设备的优先级,更能适应不同的应用场景和设备需求。
image-20241205185701911

Quiz (1)

问题

In the process of determining which device is requesting an interrupt, the device identifies itself directly by sending a signal or a binary code to the processor. This approach is called _______.

A. polling B. non - vectored interrupt C. vectored interrupt D. interrupt vector

答案:C. vectored interrupt

解释

  • Polling(选项A):在轮询方式中,是处理器主动去轮询各个设备的状态寄存器来确定哪个设备需要中断处理,而不是设备主动发送信号来直接标识自己。例如,在软件轮询中,处理器会按照一定的顺序逐个检查设备的状态,设备处于被动被检查的状态,所以不符合题意。
  • Non - vectored interrupt(选项B):非向量中断是一种简单的中断处理方式,通常处理器响应中断后,会执行一个通用的中断服务程序,而不是设备直接发送信号来标识自己。在这种方式下,处理器需要通过其他方式(如软件轮询等)来确定是哪个设备产生的中断,因此不符合描述。
  • Vectored interrupt(选项C):向量中断是指设备通过发送一个信号或者二进制代码直接向处理器标识自己。这个信号或者代码可以引导处理器直接跳转到该设备对应的特定中断服务程序入口地址,这样处理器就能快速地定位和处理该设备的中断请求,与题目中描述的设备直接发送信号或二进制代码来标识自己的方式相符。
  • Interrupt vector(选项D):中断向量是一个存储中断服务程序入口地址的指针数组或者内存区域。它主要是用于在中断发生时,帮助处理器找到对应的中断服务程序,而不是设备标识自己的方式,所以不符合题意。

Quiz (2)

问题

  1. 请说明KIN的功能是什么?
  2. 请说明KIRQ的功能是什么?
  3. 请说明KIE的功能是什么?

答案

  1. The KIN bit is the status flag for the processor to read to determine when a character code has been placed in KBD_DATA. If KIN = 1, then the character has been in KBD_DATA, otherwise, KIN = 0.
  2. The KIRQ bit is the status flag whether the keyboard is requesting an interrupt. If KIRQ = 1, it shows that the keyboard raises an interrupt, otherwise, KIRQ = 0.
  3. The KIE bit is the bit to control whether the keyboard can raise an interrupt. If KIE = 1, then the keyboard is placed into a mode in which it is allowed to interrupt the processor whenever it is ready for an I/O transfer.

解释

  • 对于KIN:它作为一个状态标志位,供处理器读取来判断字符代码是否已经被放置到KBD_DATA中。处理器通过查看KIN的值来知晓相应情况,值为1表示字符已在KBD_DATA里,值为0则表示还没有。
  • 对于KIRQ:其作用是作为表明键盘是否正在请求中断的状态标志。当KIRQ的值为1时,意味着键盘发起了中断请求,若为0则表示没有发起中断请求,方便系统知晓键盘的中断相关状态。
  • 对于KIE:它主要用于控制键盘能否发起中断。当KIE的值被设置为1时,键盘就进入一种允许在准备好进行I/O传输时中断处理器的模式,若为0则不能发起中断,以此来对键盘的中断权限进行管控。