异常与中断
需了解异常和中断的概念和区别,可能在选择题中考察。
异常
在CPU中,异常是指在执行程序时遇到的非常规或意外情况,需要操作系统介入以调整、中断或改变程序的正常执行流程。CPU会使用异常处理机制来处理这些情况。
类型
- 除法错误(Division Error)
- 触发条件:程序尝试除以零或执行其他非法的除法操作时触发。
- 处理:通常会中断程序运行,并可能通过操作系统给出错误信息。
- 缺页异常(Page Fault)
- 触发条件:程序尝试访问的内存页不在物理内存中时触发。
- 处理:操作系统将相应的内存页从磁盘加载到物理内存中,并更新页表。
- 无效指令(Invalid Instruction)
- 触发条件:CPU遇到未被定义或不可执行的指令时触发。
- 处理:通常会中断程序的执行,并可能给出错误信息。
- 保护错误(Protection Fault)
- 触发条件:程序尝试执行一些不被允许的操作,如访问受保护的内存区域或执行特权指令时触发。
- 处理:通常会中断程序的执行,并可能给出错误信息。
- 机器检查(Machine Check)
- 触发条件:硬件错误或故障,如内存错误、总线错误等。
- 处理:取决于具体硬件和配置,可能包括中断程序、记录错误信息、尝试纠正错误等。
- 浮点异常(Floating-Point Exception)
- 触发条件:浮点运算错误,如溢出、下溢、除以零、无效操作等。
- 处理:可能包括提供一个近似结果、设置状态标志、中断程序等。
自陷
在CPU和操作系统的上下文中,“自陷”(也称为陷阱,trap)是一种机制,其中程序执行中的某些条件会导致处理器自动执行一个异常或中断的响应例程。自陷通常是由以下原因引起的:
- 异常:程序执行中出现了错误条件,例如除以零、访问非法内存地址、执行非法指令等。
- 系统调用:程序请求操作系统服务,例如文件操作、进程创建、网络通信等。在大多数系统中,这通过执行一个特定的指令(如syscall在x86架构上)来完成,它会触发自陷并进入内核模式。
- 断点调试:在软件开发的调试过程中,可以设置断点以在特定的程序点停止执行,允许开发者检查程序状态。当程序达到断点时,会触发自陷。
自陷流程与外中断处理流程类似:
- 处理器检测到一个自陷条件。
- 当前的程序执行被中断,处理器状态(如程序计数器、寄存器等)被保存。
- 处理器切换到内核模式(如果它之前在用户模式下运行),这是一种更高的特权级别,允许执行操作系统代码。
- 控制权转移到预定的自陷处理程序或中断处理程序。这通常是操作系统内核的一部分,能够处理异常或执行系统调用。
- 自陷处理程序执行必要的服务或处理异常。
- 一旦自陷处理完成,程序可以返回到自陷发生前的状态并继续执行,或者如果出现了无法恢复的错误,程序可能会被终止。
陷阱指令(trap instruction)是一种特殊的指令,用于故意中断当前的程序流,并将控制权转移给操作系统。这是一种由程序员显式请求的自陷(trap),通常用于执行系统调用、启动调试操作或其他由操作系统内核提供的服务。
中断
中断概念
- 中断请求(IRQ,Interrupt ReQuest):
- 外部设备通过中断请求线向CPU发送中断请求,每个设备通常有一个特定的IRQ号码。
- 中断控制器(PIC, Prgrammable Interrupt Controller):
- 包含一个中断控制器芯片用于集中处理和管理中断请求。这个控制器接收来自多个设备的中断请求,并将它们传递给 CPU。
- 中断向量:
- 中断服务程序的入口地址,是中断向量表中的一个表项。
- 中断服务程序(ISR,Interrupt Service Routine):
- 一旦中断向量被确定,处理器会跳转到相应的中断服务例程,即中断处理程序。
- 中断向量表:
- 一个数组或表格,包含了各种中断类型的中断处理程序的起始地址,每个中断向量的值对应于相应中断处理程序的地址。
分类
按中断类型
- 外部中断(External Interrupt):
- 触发来源:外部设备或外部事件触发,如输入设备、时钟、外部信号等。
- 响应:CPU响应外部事件,执行相应的中断处理程序。
- 内部中断(Internal Interrupt):
- 触发来源:程序或CPU内部状态触发,如异常、错误等。
- 响应:CPU根据内部条件触发中断,执行特定的中断处理程序。
- 软件中断(Software Interrupt):
- 触发来源:软件或操作系统指令触发,常用于实现系统调用。
- 响应:CPU执行一个特定的中断处理程序来响应软件的请求。
按是否可屏蔽
- 可屏蔽中断:可屏蔽中断是可以被禁用或屏蔽的中断。处理器可以通过设置特定的标志或寄存器来忽略这类中断。
- 不可屏蔽中断:不可屏蔽中断是不能被禁用或屏蔽的中断。这类中断通常与系统的关键和紧急事件相关。
中断和异常的区别:
异常发生在CPU内部,在一般的分类方法中可以被看为中断类型的一种(内中断),但是在有的书上将中断和异常这两个概念区分了开来:
- 异常代表CPU执行指令时的意外事件
- 中断代表来自CPU外部、与CPU执行指令无关的事件引起的中断
在这里注意一下即可,面对题目可以灵活分辨即可