本帖最后由 DKENNY 于 2024-12-12 20:24 编辑
#技术资源#
1. 中断的由来
1956 年,ERA 1103A 计算机系统引入了中断(interrupt)机制。这一创新主要是为了提高计算机的利用率,特别是在处理风洞实验数据时。
ERA 1103A 主要用于接收和处理风洞试验数据,并将处理结果返回给风洞。在数据准备阶段,风洞数据的获取需要较长时间,导致计算机处于等待状态,这段时间的资源被浪费掉了。为了解决这个问题,ERA 1103A 设计了一条中断线。
通过中断机制,ERA 1103A 可以在等待风洞数据的过程中运行其他程序。当风洞数据准备好后,风洞系统会通过中断线向 ERA 1103A 发送信号,通知其停止当前工作并接收新到的数据。这种机制有效地提升了系统的资源利用率,使得计算机能够更灵活地处理多任务。
以上就是最初的中断设计原型,它为后来的计算机系统中断机制的发展奠定了基础。
2. 中断分类
现代处理器中的中断概念已经得到了广泛的发展,不再仅限于外部设备的中断。中断的主要作用在于使CPU在控制外部设备的同时,能够灵活地响应外部设备的请求。这一设计思想现已扩展为以下几个方面:
a. 外部设备对CPU的控制(Hardware Interrupt):即硬件中断,允许外部设备请求CPU的处理能力。
b. 软件对CPU的控制(Software Interrupt):包括软件中断,通常用于系统调用和其他软件层面的操作。
c. CPU的内部管理(Exceptions):对应异常处理,主要用于处理执行过程中的错误或特殊情况。
因此,以事件(event)来形容这一机制更为合适,尽管在日常交流中仍然常用“中断”一词。事件包括中断与异常,分别对应硬件中断、软件中断和异常处理机制。
2.1 hardware interrupt
硬件中断是我们最常接触到的一种事件,例如鼠标、键盘和网卡等设备都会生成硬件中断。由于CPU无法预测外部硬件何时发出中断请求,因此硬件中断被视为异步事件。
在硬件中断信号的传递过程中,CPU与外部输入输出设备通过一根或多根硬件连线进行通信。这些连线可以是在系统芯片(SoC)内部实现,也可以是在外部电路板(PCB)上进行连接。
当CPU内部集成中断控制器IP后,各个输入输出设备的中断信号线可以直接连接到这个控制器上。例如,常见的ARM通用中断控制器(GIC)不仅可以处理外部输入输出设备的硬件中断,还能处理CPU内部组件之间的硬件中断。其内部结构设计有效地管理和调度各种中断信号。
外部输入输出设备可以通过中断控制芯片与CPU相连接,这类芯片被称为可编程中断控制器(PIC)。PIC的主要功能是管理多个中断信号,并将它们传递给CPU,以便CPU能够有效地响应和处理来自不同设备的中断请求。通过使用PIC,系统可以实现更高效的中断管理,确保CPU能够及时处理外部设备的请求。
2.2 software interrupt
当操作系统阻止非特权代码直接访问系统资源时,应用程序可以通过软件中断来实现对这些受保护资源的访问。当应用程序终止或请求操作系统提供服务时,软件中断就会被触发。如果在软件代码中嵌入了系统调用,则可以将软件中断视为一种同步事件。
当CPU接收到软件中断信号时,它会将控制权暂时切换到对应的中断处理程序。同时,内核中被中断的进程(例如某个程序的运行实例)将在软件中断被处理后恢复执行。这使得应用程序可以安全地请求操作系统的服务,从而实现对受保护资源的访问。
应用程序通过系统调用实现与操作系统内核之间的通信,从而可以有效地控制CPU。这种机制使得应用程序能够请求操作系统提供的服务,如文件操作、内存管理以及设备控制等。系统调用充当了应用层与内核之间的桥梁,确保了安全性和稳定性,防止非特权代码直接访问内核资源。通过这种方式,应用程序能够在受控的环境中进行操作,充分利用系统资源。
2.3 exception
CPU异常是在各种错误情况下发生的,例如访问无效的内存地址或进行除零运算。为应对这些情况,处理器设计了异常处理机制。不同架构的处理器对异常类型的定义可能有所不同,但其核心思想是处理器在执行过程中遇到不允许的错误或强制停止指令时触发异常。
异常可以大致分类为以下几种。
Faults 异常
Faults 异常通常不会影响软件代码的继续运行,主要包括以下几种情况:
a. 除零操作:当程序尝试进行除以零的操作时,会引发此类异常。
b. 无效操作码:当CPU遇到无法识别的指令码时,会触发无效操作码异常。
c. 设备不可用:当程序尝试访问一个未连接或不可用的硬件设备时,会产生此异常。
Traps 异常
Traps 异常通常与调试相关,比较常见的就是 JTAG 调试。当 CPU 收到调试指令后,会进入异常模式。此类异常主要包括:
a. 断点:在调试过程中设置的断点会触发此异常。
b. 溢出:当程序在执行过程中出现算术溢出时,会引发此异常。
c. 调试指令:专门用于调试的指令,如读取寄存器的状态等,也会产生此异常。
Abort 异常
Abort 异常通常与指令获取失败有关。常见的取指异常是在从RAM中未能正确获取待执行指令时触发。此类异常主要包括:
a. 访存错误:当访问非法或无效的内存地址时,会产生此异常。
b. 总线错误:在数据传输过程中,若发生总线错误,会引发此异常。
c. Cache 错误:如果在缓存中发生错误而无法正确读取数据,也可能导致此异常。
3. 总结
处理器中断的本质是处理器在执行指令时,能够被外部或内部事件打断,从而暂时停止当前执行的任务,转而执行其他特定的处理程序(中断处理程序)。
硬中断主要用于处理外部硬件请求,软中断用于程序内部的调用,而异常则是处理器在执行过程中遇到的错误条件。三者的共同点在于它们都会中断当前任务的执行,并转向相应的处理程序,但触发的来源和处理方式有所不同。
|