在串口执行shell命令导致死锁。rtmutex相关故障排查方法。
来源:互联网 发布:网络歌曲你是否爱过我 编辑:程序博客网 时间:2024/06/05 23:41
串口执行命令导致阻塞的流程是这样的,假设有如下场景:
1) 优先级为60的1041(0x411)号线程(命令解析线程), 解析命令后,执行system时产生缺页(c库代码段缺页),这个时候
1041抓到了mmap_sem,执行请求调页(可能比较耗时),接着do_fork会将进程的页表全部设为只读,以引发写时复制;
2)优先级为88的MediaThd 线程, 由于代码段被改成只读,也发生了缺页;
3) 优先级为87的IdleTask_Cpu线程,由于代码段被改成只读,也发生了缺页;
4)1041的请求调页执行完,尝试按照优先级由高到低顺序依次唤醒阻塞队列里的各个线程;
5)假如1041线程,先唤醒MediaThd1, 然后MediaThd1执行完缺页流程再去唤醒IdleTask_Cpu1,同时
6)可以把idle的任务优先级往下调整至最低来避免此问题(媒体面设置了排他,idle下调优先级应该无影响)
1) 优先级为60的1041(0x411)号线程(命令解析线程), 解析命令后,执行system时产生缺页(c库代码段缺页),这个时候
1041抓到了mmap_sem,执行请求调页(可能比较耗时),接着do_fork会将进程的页表全部设为只读,以引发写时复制;
2)优先级为88的MediaThd 线程, 由于代码段被改成只读,也发生了缺页;
3) 优先级为87的IdleTask_Cpu线程,由于代码段被改成只读,也发生了缺页;
4)1041的请求调页执行完,尝试按照优先级由高到低顺序依次唤醒阻塞队列里的各个线程;
5)假如1041线程,先唤醒MediaThd1, 然后MediaThd1执行完缺页流程再去唤醒IdleTask_Cpu1,同时
把锁持有者(pending owner)强行置为IdleTask_Cpu1。
由于这两个线程在一个cpu上,并且前者优先级比后者高,
因此后者一直得不到调度,同时idle的优先级也比较高,其他同一个进程下的其他线程无法偷到此锁,导致系统中连环死锁6)可以把idle的任务优先级往下调整至最低来避免此问题(媒体面设置了排他,idle下调优先级应该无影响)
- 在串口执行shell命令导致死锁。rtmutex相关故障排查方法。
- rtmutex 的死锁检测
- rtmutex 的死锁检测
- futex pthread_mutex_lock 相关故障排查
- redis 故障时排查命令
- 服务器故障排查方法总结
- 在android执行shell命令
- 执行Shell命令的方法。
- Python调用shell命令的几种方法(在新进程中执行shell命令)
- 数据库死锁导致站点访问故障解决方案
- 关于蓝屏及相关故障排查
- oracle数据库简易故障排查之死锁处理
- ORACLE死锁(ORA-00060)故障排查的一般性手法
- JVM 调优命令排查死锁问题
- 上不了网的故障排查方法
- 故障排查:是什么 导致了服务器端口telnet失败?
- 一次由于开机磁盘自检导致的启动故障排查
- 故障排查:是什么 导致了服务器端口telnet失败?
- linux fork函数的精辟解说
- 刘翔——说好的2012呢
- unix网络编程之从selelct谈到epoll
- Apache proxy转发
- ICTCLAS分词系统研究(五)--N最短路径
- 在串口执行shell命令导致死锁。rtmutex相关故障排查方法。
- 基于角色的用户权限设计探讨(非常不错)
- loadView与viewDidLoad不同
- 用 Eclipse 和 Ant 进行 Python 开发
- apache 解决防盗链问题
- [20120807]产品体验的资料收录
- c#截屏工具
- hdu football 概率DP
- 为什么使用 Redis及其产品定位