板友们晚安
我想请教一个Linux Kernel的问题,但看了Linux板,感觉不是在讨论code。
所以我就来这里发文看看。若我在这边发文不适合可以在下面回文,我会
再删除,谢谢。
我在【知乎】这个平台看到有关于spin_lock_irq()的介绍
https://reurl.cc/eWe4lb
里面有个图关于spin_lock_irq(&lock1)后再一次spin_lock_irq(&lock2)
紧接着spin_unlock_irq(&lock2)后,CPU发生了interrupt,若好死不死
这ISR内要执行lock1所保护的critical section,由于前面已有task获取
到lock1的锁了,ISR内铁定拿不到lock1便会deadlock.
其实我不太知道为何deadlock的原因。查了网络上的说明更加混乱了...
这有两种deadlock的原因请问是哪一种呢?
1.ISR内因获得不到锁所以永久的spin,所以先前拿到锁的task也因此无法解锁.
2.先前拿到锁的task在被中断后状态变成TASK_INTERRUPT,schedual无法再调度
task使之有机会解锁,这意味着ISR内不会永久spin,且有一定的时间霸占CPU?
希望能有kernel高手能解答小弟疑惑@@,谢谢。