![内核 oops 和内核恐慌有什么区别?](https://linux22.com/image/50268/%E5%86%85%E6%A0%B8%20oops%20%E5%92%8C%E5%86%85%E6%A0%B8%E6%81%90%E6%85%8C%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我知道什么是内核恐慌,但我也见过术语“kernel oops”。我一直以为它们是一样的,但也许不是。所以:
什么是内核 oops,它与内核恐慌有何不同?
答案1
一个 ”哎呀“是一个严重到可能影响系统可靠性的 Linux 内核问题。
有些“oops”非常严重,以至于内核决定立即停止运行,以免发生数据丢失或其他损坏。这些被称为内核恐慌。
后一个术语是原始的,可以追溯到 Linux 的 Unix 祖先的最早版本,当它们发生时,它也会在控制台上打印一条“恐慌”消息。处理此类情况的原始 AT&T Unix 内核函数称为panic()
。您可以通过 AT&T Unix 的公共源代码版本追溯到它的第一个版本:
这OpenSolaris 版本
panic()
由 Sun 发布2005年。它相当详尽,其标题注释解释了很多有关恐慌情况下发生的情况的信息。这Unix V4的实现
panic()
于 1973 年发布。它基本上只是将内核的核心状态打印到控制台并停止处理器。该函数是Unix V3 中基本没有变化阿米特·辛格 (Amit Singh) 表示著名地剖析了旧版本的 Mac OS X 并对其进行了解释。第一个链接将带您阅读一篇精彩的文章,解释 macOS 的实现方法
panic()
,该文章以相关的历史讨论开始。这 ”Unix-jun72“从扫描的源代码打印输出中复活 Unix V1 的项目表明了一个非常早的PDP-11组装版这个函数的代码是在 1972 年 6 月之前编写的,当时 Unix 还没有用 C 语言完全重写。此时,它的实现被缩减为 6 条指令的例程,其作用只不过是重新启动 PDP-11。
答案2
oops 是内核遇到的特定错误。 Oops 包含以下信息:
- 简要描述;简介
- 哎呀#
- 它发生在哪个 CPU 上,以及 CPU 正在执行的代码
- 注册内容
Oops 是一种调试内核代码的方法,并且有一些实用程序可以提供帮助。内核恐慌意味着系统无法恢复,必须重新启动。不过,只要发出“哎呀”一声,系统通常就可以继续运行。您可以配置 klogd 和 syslogd 将 oops 消息记录到文件中,而不是记录到标准输出中。