为什么在中断过程中不能进行睡眠

        运行在中断中的代码不能进行睡眠,或者阻塞!因为代码是运行在中断上下文中,并非进程上下文中,如果将中断进行睡眠的话,调度器无从得知下一个应该调度的进程,系统无法继续进行!

        关于调度器在中断过程中无法调度其他进程的问题,是由于系统设计的原因!当然你也可以将你的系统设计成在中断过程中,可以进行睡眠或阻塞!但这样会增加你系统设计的复杂程度!因为在设计过程中,你需要考虑好多,复杂的情况!所以,如果你将系统设计成可在中断中睡眠的话,除了给你的设计增加难度外,应该没有其他任何的帮助!所以说从系统设计的角度来讲,声明在中断中无法进行睡眠是有必要的!

       如果你在中断中睡眠的话,你将不得不考虑到许多复杂的情况,以下场景是你经常会遇到的!

       死锁问题:

                         1) 进程1进入kernel code

                         2) 进程1获得Lock A

                         3) 中断发生

                         4)  ISR 执行,但ISR借用进程1的stack

                         5)  ISR 试图获得Lock A

                         6)  ISR 由于无法获得 Lock A, 而进入睡眠!

       此时,就会造成系统死锁,而导致进程1 和ISR无法运行!因为进程1 在等待ISR释放stack而阻塞,而ISR在等待进程1释放Lock A而阻塞,但进程1由于被阻塞,所以无法释放Lock A而导致两者死锁! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值