关于《深入理解计算机系统》除零异常的一个问题

2017-04-16 14:16:25 +08:00
 aiqier

在《深入理解计算机系统》这本书中,在“异常控制流”这一章节中,在 Linux/IA32 系统中的异常这一小节中,先提到了除 0 是一种故障(也就是四种异常中的第三种)。 然后又在“信号”这一小节中,提到当一个进程试图除以 0 ,那么内核就会发送给它一个 SIGFPE 信号。

那么我的疑问是:

  1. 除以零后,是先从异常表,找到除以零的异常处理方式,然后在给此进程发送信号么?
  2. 这本书提到,进程的上下文切换管理,是基于这四种底层异常的。那信号和这四种底层异常又有什么关系?比如上面提到的除零。
4110 次点击
所在节点    编程
2 条回复
sagaxu
2017-04-16 14:43:14 +08:00
除 0 是软中断的一种,跟其它软中断一样处理

信号是内核对进程的 notify ,中断是硬件对内核的 notify
codingyue
2017-04-16 17:27:45 +08:00
1. cpu 执行到除以 0 指令会给内核发送 interrupt 。根据内核的异常表,找到对应的异常处理函数,然后发信号 SIG 给进程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX