linux Oops和Panic关系

2023-11-01

常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓”Oops”信息(在屏幕上或系统日志中),比如:

Unable to handle kernel paging request at virtual address f899b670
printing eip:
c01de48c
*pde = 00737067
Oops: 0002 [#1]
Modules linked in: bluesmoke_e752x bluesmoke_mc md5 ipv6 parport_pc lp parport nls_cp936 vfat fat dm_mod button battery asus_acpi ac joydev yenta_socket pcmcia_core uhci_hcd ehci_hcd snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore ipw2200 ieee80211 ieee80211_crypt sk98lin ext3 jbd
CPU: 0
EIP: 0060:[] Not tainted VLI
EFLAGS: 00210286 (2.6.9-11.21AXKProbes)
EIP is at kobject_add+0×83/0xd7
eax: c038db78 ebx: c038db04 ecx: f899b670 edx: f8a4a630
esi: c038db4c edi: f8a4a614 ebp: c038db80 esp: d7568f2c
ds: 007b es: 007b ss: 0068
Process modprobe (pid: 8227, threadinfo=d7568000 task=f4ea99b0)
Stack: f8a4a614 ffffffea f8a4a5e4 00000000 c01de4f9 f8a4a614 c038db00 c024a1d4
f8a4a5c0 f8a4a5e4 f8a4a5f4 d7568000 c024a661 1d244b3c 00000000 0000000a
c032421b 00000000 00000000 00000015 00000014 00000016 f89ddb34 f8a4a5c0
Call Trace:
[] kobject_register+0×19/0×39
[] bus_add_driver+0×36/0×97
[] driver_register+0×82/0×89
[] pci_register_driver+0×85/0xa1
[] init_module+0xa/0×14 [bluesmoke_e752x]
[] sys_init_module+0x1ec/0×323
[] syscall_call+0×7/0xb
Code: 85 d2 0f 85 06 04 00 00 85 ed 75 0d 8b 47 28 83 c0 10 e8 82 01 00 00 89 c5 8b 47 28 8d 57 1c 83 c0 08 89 47 1c 8b 48 04 89 50 04 <89> 11 89 4a 04 8b 47 28 8b 18 8d 4b 48 89 c8 ba ff ff 00 00 0f

Oops可以看成是内核级的Segmentation Fault。应用程序如果进行了非法内存访问或执行了非法指令,会得到Segfault信号,一般的行为是coredump,应用程序也可以自己截获Segfault信号,自行处理。如果内核自己犯了这样的错误,则会打出Oops信息。

有不少文章说明如何理解这些Oops (http://pczou.blogchina.com/545558.html),这里只想解释一下它所产生的过程(以2.6系列内核为例):

首先是处理硬件发出的内存访问异常(fault),有些异常是无辜的(比如demand-paging),而有些则是内核的错误所致。

1. do_page_fault() arch/i386/mm/fault.c

如果是内核进行了非法访问,do_page_fault()会先打出EIP, PDE等信息,例如:

Unable to handle kernel paging request at virtual address f899b670
printing eip:
c01de48c
*pde = 00737067

然后调用 die(“Oops”, regs, error_code);

这之后,如果系统还活着(至少要满足两个条件:1. 在进程上下文 2. 没有设置panic_on_oops),会杀死当前进程。然后继续运行,好像什么事情都没有发生一样。不过,这样的好事不经常发生,发生了也不会太持久。

2. do_page_fault() -> die() arch/i386/kernel/traps.c

die() 首先打出一行:

Oops: 0002 [#1]

其中0002代表错误码 (读错误、发生在内核空间),#1代表Oops发生次数。

* error_code:
*       bit 0 == 0 means no page found, 1 means protection fault
*       bit 1 == 0 means read, 1 means write
*       bit 2 == 0 means kernel, 1 means user-mode


然后,调用 show_registers(regs) 输出寄存器、当前进程、堆栈、指令代码等信息:

Modules linked in: bluesmoke_e752x bluesmoke_mc md5 ipv6 parport_pc lp parport nls_cp936 vfat fat dm_mod button battery asus_acpi ac joydev yenta_socket pcmcia_core uhci_hcd ehci_hcd snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore ipw2200 ieee80211 ieee80211_crypt sk98lin ext3 jbd
CPU: 0
EIP: 0060:[] Not tainted VLI
EFLAGS: 00210286 (2.6.9-11.21AXKProbes)
EIP is at kobject_add+0×83/0xd7
eax: c038db78 ebx: c038db04 ecx: f899b670 edx: f8a4a630
esi: c038db4c edi: f8a4a614 ebp: c038db80 esp: d7568f2c
ds: 007b es: 007b ss: 0068
Process modprobe (pid: 8227, threadinfo=d7568000 task=f4ea99b0)
Stack: f8a4a614 ffffffea f8a4a5e4 00000000 c01de4f9 f8a4a614 c038db00 c024a1d4
f8a4a5c0 f8a4a5e4 f8a4a5f4 d7568000 c024a661 1d244b3c 00000000 0000000a
c032421b 00000000 00000000 00000015 00000014 00000016 f89ddb34 f8a4a5c0
Call Trace:
[] kobject_register+0×19/0×39
[] bus_add_driver+0×36/0×97
[] driver_register+0×82/0×89
[] pci_register_driver+0×85/0xa1
[] init_module+0xa/0×14 [bluesmoke_e752x]
[] sys_init_module+0x1ec/0×323
[] syscall_call+0×7/0xb
Code: 85 d2 0f 85 06 04 00 00 85 ed 75 0d 8b 47 28 83 c0 10 e8 82 01 00 00 89 c5 8b 47 28 8d 57 1c 83 c0 08 89 47 1c 8b 48 04 89 50 04 <89> 11 89 4a 04 8b 47 28 8b 18 8d 4b 48 89 c8 ba ff ff 00 00 0f


如果是在中断上下文,则直接调用panic()【panic 输出oops信息后将挂起系统】。如果是在进程上下文,则根据panic_on_oops的设置选择是否panic()。panic_on_oops的缺省设置是”0″,即在Oops发生时不会进行panic()操作。可以通过sysctl进行设置:
sysctl -w kernel.panic_on_oops=1

有panic_on_oops这样的设置,说明Oops不一定导致系统死亡,也不一定需要重新启动系统。正如用户程序segfault时可能还能坚持运行一样。不过Oops一旦发生,系统已经有些不正常了,即使表面上可能还正常,不过可能有些锁已经被占用而无法释放,很快会导致系统死锁

那么,panic()是什么呢?panic()和用户空间的abort()类似,简单清理一下,就可以放心去死(reboot)了。

3. do_page_fault() -> die() -> panic()

panic会根据 kernel.panic 的设置决定 reboot 前的延时,如果 kernel.panic=0,则打开中断,陷入死循环。反之,则在几秒之后,reboot系统。

可以看出虽然都是死,但死因不同,死亡时的表现更是五花八门。常见的死因有:

  • 非法内存访问 (比如访问地址0)
  • 非法指令

有时候核心成心发出非法指令,比如BUG() (include/asm/bug.h) 中所做的,以引起Oops。类似用户程序中调用assert()。

死亡发生的地点也很关键,直接导致了死亡的不同表现,比如:

  • 进程上下文
  • 中断上下文

在中断上下文中,由于中断是关闭的,而且往往会占用一些锁,这种情况下一般除了死,没有什么别的办法。

在进程上下文中要自由一些,如果运气好的话,可以苟延残喘一段时间。

No related posts.


4、Comba 实例:

4.1 实例1

Driver athrs_gmac: Comba V1.2.1 (Mar 31 2014 19:36:40) init.
CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == 839bf170, ra == 839bf16c
Oops[#1]:
Cpu 0
$ 0   : 00000000 00000076 00000000 839b0000
$ 4   : 839b5788 00000000 00000000 000002e0
$ 8   : 00000000 800f27b0 00000000 83803168
$12   : 83803170 ffffffff 00000001 63202847
$16   : 800f13e0 839b5604 839b0000 839b5638
$20   : 839b5628 00000001 839b0000 00000074
$24   : 00000000 80118080                  
$28   : 838f8000 838f9e88 7ff340a8 839bf16c
Hi    : 00000011
Lo    : 00000007
epc   : 839bf170 athr_gmac_init+0x170/0x9a4 [athrs_gmac]
    Not tainted
ra    : 839bf16c athr_gmac_init+0x16c/0x9a4 [athrs_gmac]
Status: 1100ff03    KERNEL EXL IE 
Cause : 0080000c
BadVA : 00000000
PrId  : 0001974c (MIPS 74Kc)
Modules linked in: athrs_gmac(+)
Process insmod (pid: 47, threadinfo=838f8000, task=838d24f0, tls=00000000)
Stack : 00000000 839b5604 839b5648 839b561c 839b5628 839b5638 00000000 00000000
        80290000 839b5450 839bf000 00000000 2ab55008 00403564 00000002 80002468
        839b5450 fffffffc 80290000 2ab55008 00403564 8003b838 fffffffc 00537008
        2ab55008 80290000 839b5450 fffffffc 80290000 80045f30 00020000 00000802
        00000003 2ab55008 7ff34f42 8006c3e4 2ab55008 00537008 2ab4ff50 7ff342b4
        ...
Call Trace:
[<839bf170>] athr_gmac_init+0x170/0x9a4 [athrs_gmac]
[<80002468>] _stext+0x68/0x1ec

Code: 0040f809  00000000  3c03839b <ac000000> 8c6255ac  14400003  3c05839b  24020600  ac6255ac 
Disabling lock debugging due to kernel taint
Segmentation fault

在AR9344平台中,如果在有线口驱动athr_gmac_init函数定义 空指针访问,将打印上述的Oops信息,由于此Oops发生在进程上下文,

又没有开启panic_on_oops,无法进行panic()操作,最终系统依然能够正常运行,但是有线口模块异常。

建议设置panic_on_oops=1(开启)


4.2 实例2

Kernel bug detected[#1]:
Cpu 0
$ 0   : 00000000 00000000 00000028 80296470
$ 4   : 802964b0 00001565 00000001 00001565
$ 8   : 802e0000 7274696f 6e206661 696c6564
$12   : 000000cd ffffffff 839482c0 00000000
$16   : 83948000 83948030 839719a4 00001043
$20   : 00000000 00008914 7f82e308 7f82e328
$24   : 00000001 80118080                  
$28   : 838f8000 838f9d90 00000000 83962538
Hi    : 00000000
Lo    : c6edb000
epc   : 83962538 athr_gmac_open+0x28/0x34 [athrs_gmac]
    Not tainted
ra    : 83962538 athr_gmac_open+0x28/0x34 [athrs_gmac]
Status: 1100ff03    KERNEL EXL IE 
Cause : 00800024
PrId  : 0001974c (MIPS 74Kc)
Modules linked in: athrs_gmac
Process ifconfig (pid: 41, threadinfo=838f8000, task=838d24f0, tls=00000000)
Stack : 00000000 8396bdc4 00000092 00000000 00000000 8014fb9c 00000041 8014b8d8
        8391a224 8395a004 83948000 00000000 00001002 8014ef64 00000000 838f9e18
        00008914 8014fc24 00000000 ffffff82 00000000 838f9e28 83948000 801aa8f8
        83941294 838f9e18 fffffff7 80150750 8391a224 004a5be4 10433020 00000000
        7f82e33c 7f82e398 65746830 00000000 00000000 00000000 10433020 00000000
        ...
Call Trace:
[<83962538>] athr_gmac_open+0x28/0x34 [athrs_gmac]
[<8014fb9c>] dev_open+0xe8/0x15c
[<8014ef64>] dev_change_flags+0xd0/0x1c8
[<801aa8f8>] devinet_ioctl+0x2d4/0x80c
[<8013c864>] sock_ioctl+0x29c/0x2f4
[<8007ba4c>] vfs_ioctl+0x2c/0x78
[<8007c150>] do_vfs_ioctl+0x5bc/0x610
[<8007c1f4>] sys_ioctl+0x50/0x8c
[<8000dde4>] stack_done+0x20/0x3c


Code: 2442f0dc  0040f809  24060092 <0200000d> 08e5894f  00000000  27bdffd0  afb50028  00e0a821 
Disabling lock debugging due to kernel taint
Segmentation fault
ifconfig: SIOCGIFFLAGS: No such device

在AR9344平台中,修改有线口驱动中断言assert(mac),使其断言失败,将打印上述的Oops信息,由于此Oops发生在进程上下文,

又没有开启panic_on_oops,无法进行panic()操作,最终因系统死锁,而无法响应键盘的输入。

建议设置panic_on_oops=1(开启)


http://blog.csdn.net/hunanchenxingyu/article/details/22698313


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux Oops和Panic关系 的相关文章

  • 关于linux内核学习的误区以及相关书籍介绍

    第一篇 先说句正经的 其实我没资格写这篇文章 因为自己也就一两个月以来才开始有所领悟的 因此 这里与其说是关于linux内核学习的经验 不如说是自己的教训吧 希望不要扔鸡蛋砸我 常常有人问 我想学习内核 需要什么基础吗 linus torv
  • 深入解析Linux进程调度器-CPU负载

    说明 Kernel版本 4 14 ARM64处理器 Contex A53 双核 使用工具 Source Insight 3 5 Visio 1 概述 CPU负载 cpu load 指的是某个时间点进程对系统产生的压力 来张图来类比下 参考U
  • KVM内核代码结构

    KVM内核代码结构 因为KVM的源代码已经包含在了Linux的内核树中 因此我们只需直接从www kernel org下载代码即可 内核源码包打开较大 解开后目录结构大概是这个样子 涉及KVM的主要有两个目录 virt和arch x86 k
  • linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

    首先下载树莓派linux内核源码 下载网址 https github com raspberrypi linux 在树莓派使用指令 uname r查看当前树莓派的版本号 然后选择对应的linux内核版本号进行下载 将linux内核源码从共享
  • 编译Linux内核时出现“ncurses-devel”错误

    通常在安装完Linux系统后 在编译kernel使用make menuconfig时 可能会出现如下错误 Unable to find the ncurses libraries or the required header files m
  • chroot命令

    转载 理解 chroot 什么是 chroot chroot 即 change root directory 更改 root 目录 在 linux 系统中 系统默认的目录结构都是以 即是以根 root 开始的 而在使用 chroot 之后
  • BIOS和BootLoader uboot

    BIOS BIOS是英文 Basic Input Output System 的缩略语 直译过来后中文名称就是 基本输入输出系统 其实 它是一组固化到计算机内主板上一个ROM芯片上的程序 它保存着计算机最重要的基本输入输出的程序 系统设置信
  • netpoll浅析

    netpoll只是一种框架和一些接口 只有依赖这个框架和接口实现的netpoll实例 netpoll才能发挥它的功能 类似于kernel中的vfs vfs本身并不会去做具体的文件操作 只是为不同的文件系统提供了一个框架 netpoll不依赖
  • /etc/sysctl.conf 调优 & 优化Linux内核参数

    from http apps hi baidu com share detail 15652067 http keyknight blog 163 com blog static 3663784020104152407759 http bl
  • Fedora12 Linux启动过程

    1 加载BIOS BIOS Basic Input Output System 是固化到计算机内主板上一个ROM芯片上的程序 保存CPU相关信息 设备启动顺序信息 硬盘信息 内存信息等等 打开计算机电源第一项工作即加载BIOS 进行POST
  • kvm内存管理

    qemu kvm 进程很像一个普通的linux程序 它通过通常的malloc和mmap调用来申请内存 如果一个客户系统想使用1G物理内存 qemu kvm将会做一个malloc 1 lt lt 30 调用 在主机上申请1G的虚拟地址 然而
  • 七种Linux设备驱动模型之——Device

    前言 Linux将所有的设备统一抽象为struct device结构 同时将所有的驱动统一抽象为struct device driver结构 这样设计之后就方便驱动开发工程师编写驱动 只需要将具体的设备包含struct device结构 具
  • linux设备驱动归纳总结(四):3.抢占和上下文切换

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 上一节介绍了进程调度的一些基本概念 并简单介绍了在没有抢占的情况下
  • ubuntu从内核源代码编译内核及替换内核

    1 下载ubuntu对应的linux内核源代码 apt catch search linux source 查看当前linux内核版本 apt get install linux source lt 对应的内核版本好 gt 下载对应的lin
  • MPC8314 (e300核) uboot 调试

    历经2个多月 完成了MPC8314最小系统 uboot 及Linux内核和根文件系统的调试 这是我第一次从头开始做小系统和内核的移植工作 虽然调试的比较辛苦 但是收获还是很多的 下面就介绍一下调试的过程和一些原理性的东西 1 MPC8314
  • diagnose-tools 编译报错

    在 Ubuntu 20 04 4 LTS 环境中 编译diagnose tools 执行make deps时报错 checking whether gcc m32 makes executables we can run no config
  • dracut 基本介绍

    dracut 基本介绍 dracut 维基 https dracut wiki kernel org index php Main Page http www 360doc com content 13 0428 09 12139495 2
  • Linux进程管理:deadline调度器

    一 概述 实时系统是这样的一种计算系统 当事件发生后 它必须在确定的时间范围内做出响应 在实时系统中 产生正确的结果不仅依赖于系统正确的逻辑动作 而且依赖于逻辑动作的时序 换句话说 当系统收到某个请求 会做出相应的动作以响应该请求 想要保证
  • Chromium多进程架构,你知道多少?

    一 前言 国内外主流的浏览器 大多采用的是谷歌的Chromium 浏览器内核 Chromium是一个多进程多线程架构的Web引擎 很多应用和底层开发者希望了解Chromium中的进程和线程的种类和用途 以便能利用相关信息提升应用的性能 为此
  • Linux内核源码学习(1)

    一 内核简介 1 在安装好的Linux系统中 内核的源代码位于 usr src linux 2的10次方就是1K 1024 16位CPU的地址空间是64K X86结构的80386是32位CPU 段描述结构伪代码 typedef struct

随机推荐

  • 计算机文化基础-计算思维

    文章目录 计算思维 计算思维基础 计算思维定义 计算思维本质 计算思维特征 计算思维的基本问题 计算思维的基本方法 计算思维的应用 计算思维 关于计算机的说法很多 但就计算机科学来讲 计算机科学家在用计算机解决问题时形成的特有思维方式和解决
  • 三、对象与类

    1 面向对象程序设计概述 面向对象 OOP 是由对象组成的 每个对象包含对用户公开的特定功能部分和隐藏的实现部分 在OOP中 不必关心对象的具体实现 只要能满足用户的需求即可 类与对象概述 类 是构造对象的模板或蓝图 由类构造对象的过程称为
  • 什么是IoT数字孪生?

    数字孪生是资产或系统的实时虚拟模型 它使用来自连接的物联网传感器的数据来创建数字表示 数字孪生允许您从任何地方实时监控设备 资产或流程 数字孪生用于多种目的 例如分析性能 监控问题或在实施之前运行测试 从物联网数字孪生中获得的见解使用户能够
  • curl get post传参说明

    一 get请求 方式一 多个参数间用 连接 curl http 127 0 0 1 8080 api send type 1 mobile 13111111111 apikey sdfsdfdfs code 1234 方式二 url用单引号
  • 【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)

    一 虚拟化简介 1 什么是虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是在真实的 独立的物理硬件基础上运行 这种以优化资源 简化软件的重新配置过程为目的的解决方案就是虚拟化技术 虚拟化架构就是在一个物理硬件机器上同时运行多个不同应用的独立
  • sklearn-多元线性回归

    sklearn 多元线性回归 和简单线性回归使用单一解释变量和单一系数不同 多元线性回归使用任意数量的解释变量 每个解释变量对应一个系数 用于线性回归的模型也可以被表示为向量计法 多元线性回归 Y X Y是一个由训练实例响应变量组成的列向量
  • centOS7 重启后,连不上网(网卡不见了,ifcfg-ens33文件不存在)

    问题 ifconfig查询的时候 只有lo网卡 但是ifconfig a查询的时候却有ens33网卡 ls etc syconfig network scripts 查找所有网卡配置信息文件的时候 没有ifcfg ens33网卡配置文件 解
  • Python连接influxdb2.x

    Python连接influxdb2 x 一 调研 1 1 influxdb pypi 1 2 influxdb client pypi 二 连接 2 1 对象源码 2 2 连接实例 三 问题汇总 3 1 token非永久化问题结果 一 调研
  • 人工智能技术与现代应用

    人工智能的定义 人工智能 ArtificialIntelligence AI 学科从1956年正式提出 目前已取得长足的发展 成为一门广泛的交叉和前沿科学 总的说来 人工智能的目的就是让计算机这台机器能够像人一样思考 如果希望做出一台能够思
  • Vue 学习笔记

    Vue js 库 把一些常用的功能封装成一个个函数或者对象 并放到一个JS文件里 目的是为简化原生JS的操作 他是一个封装好的框架 框架 一套架构 提供一套整体解决方案 他能完全搞定整个项目开发 并且很轻松就能解决复杂的问题 vue的特征
  • 华硕天选笔记本电脑能上网但浏览器打不开

    系列文章目录 文章目录 系列文章目录 前言 二 第二种方法 1 打开设置 2 选择更改适配器选项 三 第三种方法 重置网络 1 设置 2 重置网络 前言 华硕天选笔记本电脑能上网但浏览器打不开 网上的方法 1 点击 开始 选择 控制面板 2
  • springboot配置多个数据源(两种方式)

    在我们的实际业务中可能会遇到 在一个项目里面读取多个数据库的数据来进行展示 spring对同时配置多个数据源是支持的 本文中将展示两种方法来实现这个功能 springboot mybatis 第一种方式 在配置文件中配置多个数据源 然后通过
  • 一张图看懂小程序全生态!目前总结最全的,没有之一

    本文为微信公众号 造个程序 ID zgcx007 原创 授权CSDN首发 版权归作者所有 责编 陈秋歌 关注微信开发等领域 寻求报道或者投稿请发邮件至chenqg csdn net 2017年1月9日 小程序发布在万众瞩目中发布 不仅占据了
  • k8s-进阶-工作负载

    一 控制器 Pod 容器组 是 Kubernetes 中最小的调度单元 您可以通过 kubectl 直接创建一个 Pod Pod 本身并不能自愈 self healing 如果一个 Pod 所在的 Node 节点 出现故障 或者调度程序自身
  • 《MFC添加语音功能》

    MFC一般提示都是用消息对话框来处理 同时我们也可以加上语音播报功能 语音播报我们可以调用微软自带的Microsoft Speech API SAPI 5 4 它里面有语音识别 还有有一个Text to Speech 引擎 可以将文本转化为
  • 目标检测——YOLOv3、YOLOv4、YOLOv5、YOLOv7正负样本匹配、YOLO3损失函数理解

    系列文章目录 目标检测 map概念 IoU汇总IoU GIoU DIoU CIoU SIoU EIoU Wiou Focal alpha 目标检测 YOLOv3 YOLOv4 YOLOv5 YOLOv7正负样本匹配 YOLO3损失函数理解
  • linux redhat 离线安装 mysql 8.0.20

    官方文档 https dev mysql com doc refman 8 0 en linux installation rpm html 以下操作都是用 root 用户操作 另配置文件是使用mysqld initialize 生成的 e
  • kafka消费主题和消费组总结

    1 查询kafka主题列表的命令 切换到kafka的安装目录bin目录下 执行如下代码 kafka topics sh list zookeeper zookeeprerIp zookeeperPort 比如 kafka topics sh
  • WSL 的安装、报错解决、使用技巧

    需要Windows10或以上系统版本 如果你的操作系统是Windows 10 版本 2004 及更高版本 内部版本 19041 及更高版本 或 Windows 11 并且你从来没有安装过WSL 你可以使用命令行简单的安装安装 WSL 使用管
  • linux Oops和Panic关系

    常在河边走 哪能不湿鞋 用Linux 总有死机的时候 如果运气好 会看到一些所谓 Oops 信息 在屏幕上或系统日志中 比如 Unable to handle kernel paging request at virtual address