爲什麼中斷處理函數不能添加sleep()函數?

中斷處理的時候,不應該發生進程切換,因爲在中斷上下文中,唯一能打斷當前中斷處理函數handler的只有更高優先級的中斷,它不會被進程打斷(這點對於softirq,tasklet也一樣,因此這些bottom half也不能休眠),如果在中斷上下文中休眠,則沒有辦法喚醒它,因爲所有的wake_up_xxx都是針對某個進程而言的,而在中斷上下文中,沒有進程的概念,沒有相應的task_struct(這點對於softirq和tasklet一樣),因此真的休眠了,比如調用了會導致阻塞的進程,內核幾乎會死。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章