您的位置:首页 > 运维架构 > Shell

在串口执行shell命令导致死锁。rtmutex相关故障排查方法。

2012-08-07 21:57 531 查看
串口执行命令导致阻塞的流程是这样的,假设有如下场景:

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 system 任务 c