Linux内核panic核心执行逻辑

news2024/11/18 8:45:21

什么是OOPS

Oops是美国人比较常有的口语。就是有点意外,吃惊,或突然的意思。“oops”并不是很严重.对于linux内核来说,Oops就意外着内核出了异常,此时会将产生异常时出错原因,CPU的状态,出错的指令地址、数据地址及其他寄存器,函数调用的顺序甚至是栈里面的内容都打印出来,然后根据异常的严重程度来决定下一步的操作:杀死导致异常的进程或者挂起系统。

最典型的异常是在内核态引用了一个非法地址,通常是未初始化的野指针Null,这将导致页表异常,最终引发Oops。

Linux系统足够健壮,能够正常的反应各种异常。异常通常导致当前进程的死亡,而系统依然能够继续运转,但是这种运转都处在一种不稳定的状态,随时可能出问题。对于中断上下文的异常及系统关键资源的破坏,通常会导致内核挂起,不再响应任何事件。

内核的异常级别

内核的异常主要有三个级别,按照严重程度加深,可以分为BUG级->Oops级->Panic级。

BUG级:

Bug是指那些不符合内核的正常设计,但内核能够检测出来并且对系统运行不会产生影响的问题,比如在原子上下文中休眠,再内核中用BUG标识。

Oops

程序在内核态时,进入一种异常情况,比如引用非法指针导致的数据异常,数组越界导致的取指异常,此时异常处理机制能够捕获此异常,并将系统关键信息打印到串口上,正常情况下Oops消息会被记录到系统日志中去,可以通过journalctl -k命令查看.

Oops发生时,进程处在内核态,很可能正在访问系统关键资源,并且获取了一些锁,当进程由于Oops异常退出时,无法释放已经获取的资源,导致其他需要获取此资源的进程挂起,对系统的正常运行造成影响。通常这种情况,系统处在不稳定的状态,很可能崩溃。

Panic

当Oops发生在中断上下文中或者在进程0和1中,系统将彻底挂起,因为中断服务程序异常后,将无法恢复,这种情况即称为内核panic。另外当系统设置了panic标志时,无论Oops发生在中断上下文还是进程上下文,都将导致内核Panic。由于在中断复位程序中panic后,系统将不再进行调度,rsyslogd将不会再运行,因此这种情况下,Oops的消息仅仅打印到串口上,不会被记录在系统日志中。

oops要不要panic依据几个体哦见,分别是:

  1. 在中断中oops.

  1. 通过设置/proc/sys/kernel/panic_on_oops将panic_on_oops置位。

  1. 进程为0号或者1号进程.

kexec_should_crash(current)会判断进程是否为0号或者1号进程,如果是的话,oops会转变为panic.

panic的执行逻辑

流程中的细节要点:

  1. 代码尽其所能避免复杂性和可能的死锁

  1. KERN_EMERG 内核打印信息 “Kernel panic - not syncing”

  1. panic_print_sys_info();确定并显示更多系统信息–例如所有任务信息、内存、计时器、锁、ftrace信息和所有内核打印。具体取决于panic_print的bitmask

  1. 函数所做的最后一件事就是在单个启用的处理器核上无限循环;在循环中,它重置非屏蔽中断(NMI),然后定期调用一个名为架构依赖的panic_blink函数;在x86上,该事件会引起键盘LED会闪烁.

  1. 由于在函数入口处关闭了调度,所以控制台不会在有反应,系统卡死,只能冷上电。

oops要不要转成panic

前面说到,内核文件系统有一个节点/proc/sys/kernel/panic_on_oops,可以控制在oops执行结束前,要不要执行panic.

代码中的逻辑如下:

当检测到设置了panic_on_oops时,执行panic

打开/proc/sys/kernel/panic_on_oops测试,触发越界访问的oops导致的panic.PC直接挂死,电脑无反应。

panic_timeout

panic_timeout通过 /proc/sys/kernel/panic 节点去设置,代表panic后等待几秒系统重启,默认情况为0代表不会重启,一直等待。

重启调用接口emergency_restart。

其它panic控制变量还包括如下例表中的项:

-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic
-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic_on_io_nmi
-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic_on_oops
-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic_on_rcu_stall
-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic_on_unrecovered_nmi
-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic_on_warn
-rw-r--r-- 1 root root 0 2月   1 19:26 /proc/sys/kernel/panic_print

这些参数不但可以通过sysctl建立的procfs去设置,还可以通过启动命令行控制。

以qemu为例,启动参数命令行中传入panic=88

qemu-system-arm -M vexpress-a9 -m 1024M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8 panic=88" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

panic_timeout can also be set from config macro.int panic_timeout = CONFIG_PANIC_TIMEOUT;

结束!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实训六:启动过程和运行级别

实训六:启动过程和运行级别 2017 年 4 月 16 日 今日公布 实训目标 完成本次实训,将能够: 运用Shell命令管理进程。 在图形界面下管理进程。 配置cron调度。 实训准备 一台安装RHEL6系统的计算机,该系统除了root账户外&…

一文读懂:下一代微服务技术Service Mesh

相信提到微服务大家一定不会陌生,但是说起服务网格,即Service Mesh,很多同学可能就会画大大的问号了!话不多说先给结论:我们可以简单的把Service Mesh理解为网络代理,它可以解决传统微服务中的痛点&#xf…

进程状态与优先级

目录 进程状态: tracing stop:追踪暂停状态 Z:僵尸状态: 为什么要有僵尸进程呢? 孤儿进程 进程优先级: 其他概念: 进程切换: pc/eip 环境变量: PATH:全…

nestjs初始化项目

安装nestjs脚手架 npm i -g nestjs/cli初始化项目 nest new <project-name>说明初始化项目成功 结构说明 node_modules:项目所有的依赖src: 项目的主题test: 项目测试目录.eslintrc.js: eslint约束.gitignore: git上传忽略文件nest-cli.json: nest项目配置文件package…

《C++程序设计原理与实践》笔记 第12章 一个显示模型

本章介绍了一个显示模型(display model)&#xff08;GUI的输出部分&#xff09;&#xff0c;并给出了使用示例和基本概念&#xff0c;例如屏幕坐标、线和颜色等。 12.1 为什么需要图形&#xff1f; 我们为什么用四章的篇幅介绍图形以及一章介绍GUI&#xff1f; 图形很有用。…

通信原理笔记—基带信号的波形设计与编码

目录 引言&#xff1a; 基带传输系统的基本模型&#xff1a; 基带信号的波形设计与编码&#xff1a; 数字信号的波形设计原则&#xff1a; 基带信号的基本波形&#xff1a; 常用的二进制码型&#xff1a; 单极性不归零码&#xff1a; 双极性不归零码&#xff1a; ​编辑…

RTI Connext DDS代码生成器

0 简介RTI代码生成器Code Generator,创建用RTI ConnextDDS定义define和注册register用户数据类型所需的代码。在以下情况下&#xff0c;使用代码生成器是可选的&#xff1a;您正在使用动态类型&#xff08;请参阅RTI Connext DDS核心库用户手册[RTI ConnextDDS Core Libraries …

新来一个卷王,天天加班到12点,太让人崩溃......

在程序员职场上&#xff0c;什么样的人最让人反感呢&#xff1f; 是技术不好的人吗&#xff1f;并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗&#xff1f;也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反…

2023全网汇总PMP备考攻略(附答题技巧资料)

一&#xff0c;多复习和学习新版考纲 01《PMBOK》看三遍 这边建议看三遍《PMBOK》&#xff0c;更有利于我们巩固知识&#xff0c;查缺补漏。 第一遍 第一遍是老师带着我们去看。这个时候一定要非常专心&#xff0c;千万不要上课走神或者玩手机。因为这一遍老师会告诉我们&a…

结构型设计模式 Structural Patterns :适配器 Adapter(C++ 实现)

文章大纲 适配器简介对象适配器类适配器C++ 实现代码参考文献与学习路径Structural PatternsAdapterMatch interfaces of different classesBridgeSeparates an object’s interface from its implementationCompositeA tree structure of simple and composite objectsDecorat…

C#中的那些警告如何去除?完全去除C#警告

一般在c中没有使用的变量会有警告&#xff0c;C#中也有&#xff0c;在QT中我们利用Q_UNSED可以直接消除这些警告&#xff0c;那么我们在C#中该如何做才能消除这些不必要的警告呢&#xff1f;经过查询微软官方网站发现&#xff0c;有的找到了解决方法&#xff0c;有的仍然一筹莫…

学习bootstrap怎么样?

想必学习前端的都知道这个响应式框架&#xff0c;之前我接触这个框架的时候是在学习前段页面设计的进阶教程是接触的&#xff0c;那个时候要做那种登陆注册界面&#xff0c;里面的输入框很让人头疼有时候电脑的宽度不一样或者是写了一个精美的网页然后放到手机上的时候就变了模…

【C++】继承(基类和派生类的关系、菱形虚拟继承、继承和组合)

文章目录1、继承的概念和定义2、基类和派生类的赋值转换3、继承中的作用域4、派生类的默认成员函数5、继承与友元和静态成员6、复杂的菱形继承及菱形虚拟继承7、继承和组合1、继承的概念和定义 继承是面向对象程序设计上程序复用的重要手段&#xff0c;以往接触的复用都是函数复…

程序员的自律之路

世界的精彩不是单纯的美丽&#xff0c;毕竟丑恶也是美丽的食粮&#xff0c;黑暗也是光明的救世主 很久没有写博客了&#xff0c;最近半年不太稳定&#xff0c;也经历了一些自我成长的东西。 事后我进行深度反省&#xff0c;思考一个人或者说是一个程序员的失控原因到底是什么&a…

推荐几款好用的企业级文档管理软件

知识库&#xff0c;又称为智能数据库或人工智能数据库。知识库的概念来自两个不同的领域&#xff0c;一个是人工智能及其分支-知识工程领域&#xff0c;另一个是传统的数据库领域。由人工智能&#xff08;AI&#xff09;和数据库&#xff08;DB&#xff09;两项计算机技术的有机…

Java字符串查找(3种方法)

在给定的字符串中查找字符或字符串是比较常见的操作。字符串查找分为两种形式&#xff1a;一种是在字符串中获取匹配字符&#xff08;串&#xff09;的索引值&#xff0c;另一种是在字符串中获取指定索引位置的字符。根据字符查找String 类的 indexOf() 方法和 lastlndexOf() 方…

金融公司在 2022 年扩大了对下一代技术的投资

根据 Broadridge Financial Solutions, Inc. 的一份新报告&#xff0c;大多数金融服务公司现在认为数字化转型对其业务至关重要&#xff0c;并且已经在寻求下一波技术来帮助取得成功。 在对 500 名最高管理层高管及其在全球买方和卖方的直接下属进行的 2023 年数字化转型和下…

代码随想录算法训练营第五十七天_第九章_动态规划 | 1143.最长公共子序列、1035.不相交的线、53. 最大子数组和 动态规划

LeetCode 1143.最长公共子序列 视频讲解https://www.bilibili.com/video/BV1ye4y1L7CQ文章讲解https://programmercarl.com/1143.%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97.html 思路&#xff1a;代码&#xff1a;LeetCode 1035.不相交的线 视频讲解h…

技术开发119

技术开发119 业务内容&#xff1a; 汽车零部件的制造产业用机械零部件的设计、制造、组装电机零部件的制造 公司简介&#xff1a; 董事长&#xff1a;管原胜安 资本金&#xff1a;3200万日元 员工数&#xff1a;36名 成立时间&#xff1a;1972年7月 资格认证&#xff1a…

【学习笔记】coursera | Computational Neuroscience | Week 1

Course Introduction 1.1 Course Introduction 三种模型 Descriptive models of the brain&#xff08;描述型, what&#xff09;&#xff1a;神经元如何对外部刺激做出反应&#xff1f;用神经元编码模型如何量化描述&#xff1f;如何从神经元中获取信息&#xff08;解码&am…