中断和异常

C语言中的异常处理

异常处理一般有两种模型,一种是“终止模型”,一种是“恢复模型”。
“终止模型”中,将假设错误非常关键,以致于程序无法返回到异常发生的地方继续执行。一旦异常被抛出后,就表明错误已经无法挽回,也不能回来继续执行。“恢复模型”

中断

中断是由硬件设备产生的,而它们从物理上说就是电信号。电信号通过中断控制器发送给CPU,CPU判断接收到的中断来自于哪个硬件设备(这定义在内核中),最后由CPU发送给内核,由内核处理中断。
在这里插入图片描述

异常

异常包括很多方面,有出错、陷入、可编程异常
可编程异常:这类异常可由程序员用int指令来触发。在linux中,经常使用 int 0x80。硬件对可编程异常的处理与对trap的处理类似,即从这类异常返回时也是返回到触发异常的下一条指令。
出错保存的EIP指向触发异常的那条指令。因此,当从异常返回时,出错会重新执行那条指令。比如我们熟悉的缺页异常,由于是fault,所以当缺页异常处理完成之后,还会去尝试重新执行那条触发异常的指令。
陷入保存的EIP指向触发异常的那条指令的下一条指令,陷入不会重新执行因为异常的指令。陷入的最主要的应用是在调试中,被调试的进程遇到你设置的断点,会停下来等待你的处理,等到你让其重新执行了,它当然不会再去执行已经执行过的断点指令。
在这里插入图片描述

中断和异常的区别

1.产生源不同:异常是由CPU产生的,而中断是由硬件设备产生的。

2.中断是异步的,这意味着中断可能随时到来;异常在处理的时候必须考虑与处理器的时钟同步。

中断和异常的相同点

最后都是由CPU发送给内核,由内核去处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poetry _Distance

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值