美文网首页
异常处理

异常处理

作者: 牛牛_735d | 来源:发表于2019-08-11 15:40 被阅读0次

    异常的发生和捕获是在硬件层面完成的、异常的处理是软件完成的

    异常分类

    中断Interrupt 触发CPU内部开关值发生变化的信号
    陷阱 Trap 主动触发的异常、比如调试断点
    故障 Fault 非主动的错误、处理完异常之后回来处理当前指令、而不是去执行程序中的下一条指令
    终止 Abort 故障的一直特殊情况、当CPU遇到故障、但无法恢复时、程序就必须终止了

    异常.png

    异常处理、上下文切换

    类似异常处理函数调用、指令的控制权被切换到另外一个`函数`里、但比函数调用更复杂一些
    1. 因为异常情况往往发生在正常执行的预期之外、eg. 中断、故障发生的时候、所以、除了本来程序压桟要做的事情之外、还需要把CPU内当前运行程序用到的所有寄存器都放在桟里边. eg. 条件码寄存器的内容
    
    2. 类似陷阱这种异常、涉及程序指令在用户态和内核态之间的切换、对应压桟的时候、对应数据是压到内核栈、而不是程序桟
    
    3. 类似故障这样的异常、在异常处理执行完成之后、从桟里返回出来、继续执行的不是顺序的下一条指令、而是故障发生的当前指令、因为当前指令因为故障没有正常执行成功、必须重新执行一次
    
    对于异常这样的处理流程、不像是顺序执行的指令间的函数调用关系、更像是两个不同的独立进程之间在CPU层面的切换、称为 `上下文切换` 
    

    相关文章

      网友评论

          本文标题:异常处理

          本文链接:https://www.haomeiwen.com/subject/mzwjjctx.html