中断与异常机制

中断/异常机制

可以说 操作系统是由 “中断驱动”或者“事件驱动”的。

主要作用:

  • 及时处理设备发来的中断请求
  • 可使OS捕获用户程序提出的服务请求
  • 防止用户程序执行过程中的破坏性活动
  • .........

概念

  CPU对系统发生的某个事件做出的一种反应。CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序。

特点

  • 是随机发生的
  • 是自动处理的
  • 是可恢复的

为什么引入中断与异常???

 

 事件(对中断/异常的具体划分):

  •  中断:外部事件,在CPU之外的事件打断了CPU,是正在运行的程序所不期望的。
  •  异常:是由正在执行的指令所引发的。

中断与异常的总结:

 

 

中断/异常机制工作原理

  中断/异常机制是由硬件和软件相互配合来作用的 

  • 硬件该做什么事-- 中断/异常响应                “响应”

     捕获中断源发出的中断/异常处理请求,以一定的方式响应,将处理器控制权交给特定的处理程序。

     (1) 中断响应:发现中断,接受中断的过程,是由中断硬件部件完成的。  在处理器控制部件中,设有中断寄存器。首先由PC寄存器得到下一条指令的地址,然后执行该指令,处理器会在一个称为中断检查或中断扫描的阶段,读取中断状态寄存器的内容,以判断是否有中断请求需要处理(在一些计算机体系结构中,有一个专门的中断状态寄存器或中断检测寄存器(Interrupt Status/Flag Register),用于记录当前是否有中断请求待处理。这个寄存器中的位或标志位表示每个中断请求线的状态,比如被置为1表示对应的中断请求被触发或挂起,被置为0表示没有中断请求。) 如果有中断,中断硬件会将该中断触发器中的内容按照规定的编码方式送入PSW寄存器,称为中断码,通过查中断向量表引出中断处理程序;如果没有中断或者禁止中断,则会继续执行下一条指令。

   (2) 中断向量表:

    每一行其实就是一个个的中断向量:中断向量就是一个内存单元,存放中断处理程序入口地址和程序运行时所需要的处理机状态字。

 

                             例如Linux中的中断向量表:

 

  (3) 中断响应详细示意图:

   (4) 补充:PSW寄存器,PC寄存器  

    PSW寄存器和PC寄存器是计算机中的两种特殊寄存器,常用于处理器的控制和状态管理。

  1. PSW寄存器(Program Status Word/Register): PSW寄存器是程序状态字或程序状态寄存器,有时也称为标志寄存器(Flags Register)。它通常是一个包含多个标志位的二进制数值。这些标志位用于记录处理器的状态和条件。常见的标志位包括:
  • 进位标志(Carry Flag):记录在算术操作中的进位情况。
  • 零标志(Zero Flag):指示结果是否为零。
  • 符号标志(Sign Flag):用于指示结果的符号(正或负)。
  • 溢出标志(Overflow Flag):记录有符号数运算中是否发生了溢出。
  • 奇偶标志(Parity Flag):记录结果中1的个数,用于奇偶校验。

   这些标志位由计算机硬件根据特定的条件设置或清除。程序可以通过检查这些标志位来确定上一条指令的执行结果,从而进行条件分支或错误处理。

  1. PC寄存器(Program Counter): PC寄存器是一个用于存储当前正在执行的指令地址的寄存器。在计算机执行程序时,处理器通过PC寄存器来跟踪即将要执行的指令的地址。当一条指令执行完毕后,PC寄存器的值会更新为下一条指令的地址,以便顺序执行程序。PC寄存器在计算机中扮演着非常重要的角色,它实现了指令的顺序执行,是程序控制流的基础。例如,当程序需要执行函数调用、条件跳转或循环时,PC寄存器的值会根据特定的条件或指令内容进行更新,从而实现不同的控制流程。

   总结:PSW寄存器用于记录处理器的状态和条件,而PC寄存器用于存储下一条要执行的指令的地址,从而实现程序的顺序执行。这两个寄存器都是计算机中关键的组成部分,用于控制和管理计算机的执行过程。

  • 软件该做什么事?-- 中断/异常处理程序         “处理”

     识别中断/异常类型并完成相应的处理

 

中断/异常机制小结:

 

 

中断/异常机制实例

            -- X86处理器对中断/异常的支持

中断:由硬件信号引发的,分为可屏蔽和不可屏蔽中断。

异常:由指令执行引发的,比如除零异常。80x86处理器发布了大约20种不同的异常。对于某些异常,CPU会在执行异常处理程序之前产生硬件出错码,并压入内核态堆栈。

系统调用:异常的一种,用户态到内核态的唯一入口。

 

posted @ 2023-08-03 00:36  C++杀我  阅读(127)  评论(0编辑  收藏  举报