linux内核 panic,linux 内核 panic
Linux内核栈溢出(stack overflow)问题
最近一段时间在设计和开发一个Linux内核模块,进入到最后的正确性测试与稳定性测试阶段。在这个阶段发现了一个非常有意思的问题,堆栈溢出(stack overflow)。Linux内核堆栈溢出之后直接导致了系统kernel Panic。由于导致stack overflow的原因是递归调用导致的,所以,最后通过调试串口导出的kernel panic信息很快就定位问题所在了,否则这样的问题还真是很难调试和发现。通过这次bug,我们应该记住的是:Linux内核stack资源是有限的,而递归调用将大量消耗stack资源,因此在内核编程中尽量少用递归算法,否则将会导致出乎意料的一些问题。依次类推,为了减少stack资源的消耗,程序的局部变量定义的不要太大,否则也将会消耗大量stack资源,从而导致内核程序的不稳定。
为了解决递归调用导致的问题,我将递归算法改写成了非递归算法,解决了stack overflow的问题。在此介绍一下递归算法改写成非递归算法的一些思想。在项目实现过程中,需要对IO请求进行按顺序排队,因此采用了效率较高并且实现简单的快速排序算法,该算法是一种分治算法,即将排序队列进行切分,分解成一系列的小问题进行求解,针对这种问题,很容易采用递归的办法进行实现,伪代码描述如下:
/* qs_sort实现从小到大的排序 */
Struct bio qs_sort(struct bio_list *list_head, struct bio *bio_tail) {
Struct bio_list *less_list, *large_list;
Struct bio *middle_bio;
/* 递归调用结束点,小问题求解完毕,直接返回最后一个元素 */
If (!list_head) {
Return bio_tail;
}
/* 对队列进行切分,选择一个middle_bio,并且按照middle_bio将其切分成less_list队列和large_list队列 */
Split_list(list_head, less_list, large_list, &middle_bio);
/* 采用递归的方法实现大队列的排序操作 */
Middle_bio->bi_next = qs_sort(large_list, bio_tail);
/* 采用递归的方法实现小队列的排序操作 */
Return qs_sort(less_list, middle_bio);
}
linux内核 panic,linux 内核 panic相关推荐
- linux内核 异常 log,Linux Kernel WARN()/BUG(), Oops/Panic, Tainted分析
稳定性范畴, 参考5.x kernel. kernel Oops Oops指的就是内核的不正确行为,比如对驱动来说:static int i82092aa_pci_probe(struct pci_d ...
- linux系统与内核,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- linux的内核是指的什么,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- linux 系统的内核,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- 最小的linux内核编译,Linux最小内核移植
class="markdown_views prism-github-gist"> Linux内核编译 本篇博客来自凌云实验室开发板介绍及其烧录学习笔记 1.内核介绍 一种开 ...
- 几个使用linux内核的系统,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- linux 内核将两个设备相关联,linux用户空间和内核空间交换数据
转载地址:http://www.poluoluo.com/server/201107/138420.html 在研究dahdi驱动的时候,见到了一些get_user,put_user的函数,不知道其来 ...
- 熟悉linux系统内核,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- linux版本与内核对应关系,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- Linux内核与Linux操作系统的区别,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
最新文章
- 关于C#中timer类 在C#里关于定时器类就有3个
- URAL 1055 Combinations
- linux下remove函数
- mysql 删除过期日志_【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等...
- 触摸屏开发_Microchip推出新型电容触摸式控制器,加速汽车触摸屏EMI认证
- 【poj3375】 Network Connection
- 从零实现深度学习框架——理解正则化(二)
- 5-21 求前缀表达式的值(25分)
- 我是如何学习Android源码的
- JAVA实现MD5算法、SHA1算法和SHA256算法
- 一张图囊括所有ASM优化投放知识点
- 竞赛题-6283. 正整数和负整数的最大计数
- 【快乐摸鱼】— 用python开发益智游戏
- SpringCloud Alibaba 从入门到精通(精选)
- android连iphone热点超时,Android19连接iOS13个人热点失败
- 手机ftp服务器进入制定文件夹,ftp服务器 指定文件夹
- 教你免费下载和安装office办公软件,超级简单
- word图片另存为变黑色_别处复制过来的 图像在word中粘贴后变黑怎么处理?
- 网易视频云余利华:以用户体验为核心,深耕PaaS云生态
- rtth之线程间的通信
热门文章
- 使用selenium爬取csdn博客
- selenium得到一个动态页面
- flutter 刷脸_支付宝刷脸认证 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
- Emgu-WPF学习使用-阈值化
- Windows7系统下编译安装X264
- 构建之法----软件工程简介
- E/Trace: error opening trace file: No such file or directory
- QTWebkit中的webkit/qt/api文档
- Silverlight4 ColorPicker控件
- 响应在此上下文中不可用