This link has been bookmarked by 1 people . It was first bookmarked on 10 Jan 2008, by 葡 萄.
-
10 Jan 08
-
硬件发出的内存访问异常(fault)
-
用Linux,总有死机的时候,如果运气好,会看到一些所谓"Oops"信息
-
应用程序如果进行了非法内存访问或执行了非法指令,会得到Segfault信号
-
Oops可以看成是内核级的Segmentation Fault
-
如果内核自己犯了这样的错误,则会打出Oops信息。
-
其中0002代表错误码 (读错误、发生在内核空间),#1代表Oops发生次数。
-
然后,调用 show_registers(regs) 输出寄存器、当前进程、堆栈、指令代码等信息:
-
可以通过sysctl进行设置:
sysctl -w kernel.panic_on_oops=1 -
Oops一旦发生,系统已经有些不正常了,即使表面上可能还正常,不过可能有些锁已经被占用而无法释放,很快会导致系统死锁。
-
panic()和用户空间的abort()类似,简单清理一下,就可以放心去死(reboot)了。
-
常见的死因有
-
类似用户程序中调用assert()
-
死亡发生的地点也很关键
-
在中断上下文中,由于中断是关闭的,而且往往会占用一些锁,这种情况下一般除了死,没有什么别的办法。
-
在进程上下文中要自由一些,如果运气好的话,可以苟延残喘一段时间。
-
Would you like to comment?
Join Diigo for a free account, or sign in if you are already a member.