前言

与前同事交流,发现以前的技术经历与解决的问题,现在接触不多,但是想想还是很有意思,虽然很多细节现在已经不能表达出来或展示出来,但是还得写出来。下面写的得主要个人经历的linux内核crash原因。

内存类

这一类同用户态类似,主要有以下几种情况,

  1. 访问NULL
  2. 访问释放后的内存
  3. 非法访问内存
  4. 内存被踩
  5. 内存耗尽
  6. 野指针操作

堆栈类

  1. 内核调用栈溢出
  2. 写坏调用栈

锁

  1. 死锁
  2. rcu使用错误
  3. 锁内存被写坏
  4. 长期获取不到锁,导致看门狗饿死,狗叫重启

调度

  1. 线程陷入死循环或者长时间占用cpu,在非抢占模式下其他线程得不到调度

中断上下文

  1. 在中断上下文调用错误的函数,例如在中断上下文使用信号量,更多参考那些可进入睡眠状态的Linux内核函数

硬件故障

在系统运行过程出现硬件故障也会导致内核crash。接触较少,不作说明。

后记

能力有限,条件有限,写的很虚,也不全面,以后有机会再来点实际的,这个目的主要是回忆总结自己的知识体系。