板友們晚安
我想請教一個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高手能解答小弟疑惑@@,謝謝。