中断和异常

本文涉及的产品
公网NAT网关,每月750个小时 15CU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 中断和异常

1 基本概念


中断定义:通常被定义为改变CPU指令执行序列的事件。

中断可以分为异步和同步中断:

  • 同步中断,是由CPU在执行指令时由CPU控制单元产生的中断。这意味着,CPU必须停止指令的执行,转而响应中断。通常情况下,同步中断就是指 异常
  • 异步中断,是由外部设备随机产生的,信号采样按照CPU时钟信号。异步中断就是我们通常情况下所指的中断。一般是定时器中断和I/O设备中断。

异常通常分为2类:一类是编程错误,另外一类就是需要内核处理的异常情况。编程错误,比如程序异常终止,处理这种异常,内核只需要给当前进程发送一个信号即可。而需要内核处理的异常,比如页错误、通过汇编语言指令比如int或sysenter等请求内核服务等,需要内核作出相应的处理。


2 中断信号的作用


顾名思义,中断信号提供了一种使CPU跳出当前正在执行的代码流的方法。这是对于轮询机制的一种有效补充,中断机制提高了系统效率。当中断信号来临时,CPU停止当前正在执行的指令,保存当前进程内核态栈中的PC寄存器值(例如,eip和cs寄存器),取而代之的是,将中断类型相关的地址写入到PC寄存器中,从而切换到新的中断上下文。

但是,需要注意的是中断处理和进程切换有着很大不同:中断或者异常处理程序不是进程。它的处理完全在内核态,而且处理的内容非常少,要求响应时间必须非常短。

中断处理对时间高度敏感,有着严格要求:

  • 因为中断随时发生,打断内核的调度。因此,内核希望尽快处理完中断,然后回到正常的调度执行中。比如,假设从网络上接收一个数据包,硬件中断内核,标记数据已经接收,然后就把CPU的使用权交还给之前正在运行的任务。稍后,由负责数据接收的进程来搬运数据到缓冲区,并作进一步处理。由此可见,响应中断的任务就被分成了两部分:紧急部分,由内核立即处理;可延时处理部分留给其它任务处理。
  • 因为中断会随时发生,有时候,内核正在处理一个中断的时候,另一个中断可能会发生。中断处理程序必须能够允许中断嵌套处理。
  • 虽然内核允许中断嵌套处理,但是内核代码中,必须提供临界段代码,在其中,中断必须被禁止。因为有些时候,我们的代码是不允许被中断的,这也是内核同步的一种手段。


3 中断和异常


Intel官方文档将中断和异常分类为:

  • 中断:
  • 可屏蔽中断
    所有I/O设备发出的IRQ都能产生可屏蔽中断。屏蔽掉的中断,中断控制器忽略其存在。
  • 非可屏蔽中断
    只有很少的重要事件会产生非屏蔽中断。比如,硬件错误。非屏蔽中断总是能够被硬件识别。
  • 异常:
  • Fault
    这类异常可以纠正。因为这类错误就是eip指令造成的,所以,一旦异常处理程序正确处理异常后,就可以继续执行eip寄存器中的指令了。
  • Trap
    陷阱指令造成的异常。陷阱同Fault一样,因为没有破坏内核态栈中的任何东西,异常处理程序终止后,可以继续执行eip寄存器中的指令。它的设计目的主要是为了调试,告知调试器正在执行一个特殊的指令(比如,在程序里打一个断点)。一旦用户查看完断点处信息后,他就可以让程序继续执行了。
  • Abort
    发生严重错误时的异常。此时,CPU控制单元发生异常,但是无法确定发生错误的指令的准确位置,也就是说,在eip寄存器中的指令并不是造成错误的指令。这类错误一般是硬件错误或系统页表中非法或者不一致的地址等。控制单元发出信号,让CPU跳转到异常处理程序。Abort异常处理程序一般都是终止程序的执行。
  • 处理器检测异常
    当CPU在执行指令时,检测出的异常。依赖于异常发生时,内核态栈中的eip寄存器指令,又可以分为三类:
  • 编程异常
    这类异常一般是由程序员故意造成的。可以使用int或int3指令触发,也可以使用into-溢出中断指令和bound-地址限制异常中断指令检查相应的条件,如果条件为假,也会产生异常。可编程错误一般被当作陷阱-trap处理,通常被称为软件中断。这类异常一般有两种作用:系统调用和告知调试器某个事件。

中断或异常使用一张中断向量表进行管理,编号为0-255。非可屏蔽中断和异常编号是固定的;而可屏蔽中断是不固定的,可以通过对中断控制器进行编程进行修改。


4 中断请求线-IRQ


硬件设备和可编程中断控制器之间使用中断请求线(IRQ)进行连接。中断请求线用来传输电信号。可编程中断控制器接收这些电信号,然后将其转换成中断号。具体如下:

  1. 监听IRQ线,检查上升沿信号。如果同时检测到多个信号,选择数字小的IRQ线。
  2. 如果IRQ中断请求线上产生一个上升沿信号:
  1. 将电信号转换成对应的中断向量,说白了,就是转换成一个对应的数字;
  2. 将该向量存储到中断控制器的I/O端口,然后允许CPU通过数据总线读取它;
  3. 发送一个中断信号到INTR管脚;
  4. 等待CPU应答该中断信号,然后,清除INTR中断线。
  1. 回到第1步。

IRQ线一般从0开始编号,也就是说,第一条IRQ线标记为IRQ0。Intel默认的中断向量表是从IRQ32开始的,也就是说,前32个中断号已经被不可屏蔽中断和保留中断所占用。IRQ线和向量表之间的对应关系可以通过给中断控制器发送合适的I/O指令进行修改。

可以通过对可编程中断控制器(PIC)进行编程,控制是否为某个指定的IRQ线发送中断。被禁止的中断不会丢失,一旦重新使能,PIC就会把它们发送给CPU。大部分的中断处理程序都使用这个特性,可以连续地处理相同类型的IRQ请求。

需要注意的是,这里的使能、禁止IRQ和中断的屏蔽不是一个概念。当eflag寄存器中的IF标志被清除,PIC发送的可屏蔽中断会被CPU忽略掉。cli和sti汇编指令分别用于清除和设置该标志。

传统的PIC控制器使用2个8259A外部芯片,通过”级联”的方式组成的。每个芯片可以接收8个不同的IRQ,但是从PIC的INT输出管脚连接到主PIC的IRQ2管脚上,所以总的可以使用的IRQ线就是15个。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
高可用应用架构
欢迎来到“高可用应用架构”课程,本课程是“弹性计算Clouder系列认证“中的阶段四课程。本课程重点向您阐述了云服务器ECS的高可用部署方案,包含了弹性公网IP和负载均衡的概念及操作,通过本课程的学习您将了解在平时工作中,如何利用负载均衡和多台云服务器组建高可用应用架构,并通过弹性公网IP的方式对外提供稳定的互联网接入,使得您的网站更加稳定的同时可以接受更多人访问,掌握在阿里云上构建企业级大流量网站场景的方法。 学习完本课程后,您将能够: 理解高可用架构的含义并掌握基本实现方法 理解弹性公网IP的概念、功能以及应用场景 理解负载均衡的概念、功能以及应用场景 掌握网站高并发时如何处理的基本思路 完成多台Web服务器的负载均衡,从而实现高可用、高并发流量架构
相关文章
|
6月前
|
Java API 调度
线程的中断(interrupt)机制
线程的中断(interrupt)机制
84 1
|
27天前
|
监控 Java
捕获线程执行异常的多种方法
【10月更文挑战第15天】捕获线程执行异常的方法多种多样,每种方法都有其特点和适用场景。在实际开发中,需要根据具体情况选择合适的方法或结合多种方法来实现全面有效的线程异常捕获。这有助于提高程序的健壮性和稳定性,减少因线程异常带来的潜在风险。
19 1
|
4月前
|
6月前
|
算法 Unix Linux
Linux进程与信号:正常与异常的退出机制探索
Linux进程与信号:正常与异常的退出机制探索
492 1
|
调度
中断异常和系统调用
中断异常和系统调用
150 0
|
传感器 调度
什么是中断系统?
一、什么是中断系统 中断系统是计算机系统中的一种机制,它允许外部设备和程序请求处理器的注意力,以便进行特定的操作。当一个中断请求被触发时,处理器会暂停当前正在执行的程序,转而执行与中断相关的程序或服务例程。中断系统可以提高计算机系统的效率和响应速度,因为它允许处理器在等待某些事件的同时执行其他任务。常见的中断包括硬件中断(例如键盘输入、鼠标移动、网络数据传输等)和软件中断(例如操作系统调度、系统调用等)。 二、中断系统的特点 中断系统具有以下特点: 1. 实时性:中断系统能够及时响应外部设备的请求,提高计算机系统的响应速度和效率。 2. 可靠性:中断系统能够保证中断请求的可靠性,确保外部设备的
283 0
|
编译器
中断的解析
中断的解析
96 0
|
存储 芯片 开发者
E906的异常和中断|学习笔记
快速学习 E906的异常和中断
842 0
E906的异常和中断|学习笔记
C中得到4号错误(中断),怎么办
C中得到4号错误(中断),怎么办
87 0
详解中断系统
本文针对地详解了中断系统
268 0