日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中断中是否可以使用信号量?

發布時間:2025/4/5 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中断中是否可以使用信号量? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不論是書上還是網上,對這塊的解釋,總是很凌亂,? 讓人不好理清。?? 大部分開發者可能也只知其然,不知所以然。

在網上找到一篇對此解釋言簡意賅,一看就懂的文章,故分享過來。

?

1、中斷中為何不能使用信號量?

答: 信號量會導致睡眠。

?

2、中斷上下為何不能睡眠?

以下為轉載: http://blog.chinaunix.NET/uid-7332782-id-3213376.html

?

中斷發生以后,CPU跳到內核設置好的中斷處理代碼中去,由這部分內核代碼來處理中斷。這個處理過程中的上下文就是中斷上下文。

???? 為什么可能導致睡眠的函數都不能在中斷上下文中使用呢? 首先睡眠的含義是將進程置于“睡眠”狀態,在這個狀態的進程不能被調度執行。然后,在一定的時機,這個進程可能會被重新置為“運行”狀態,從而可能被調度執行。 可見,“睡眠”與“運行”是針對進程而言的,代表進程的task_struct結構記錄著進程的狀態。內核中的“調度器”通過task_struct對進程進行調度。
???? 但是,中斷上下文卻不是一個進程,它并不存在task_struct,所以它是不可調度的。所以,在中斷上下文就不能睡眠。

???? 那么,中斷上下文為什么不存在對應的task_struct結構呢?
???? 中斷的產生是很頻繁的(至少每毫秒(看配置,可能10毫秒或其他值)會產生一個時鐘中斷),并且中斷處理過程會很快。如果為中斷上下文維護一個對應的task_struct結構,那么這個結構頻繁地分配、回收、并且影響調度器的管理,這樣會對整個系統的吞吐量有所影響。

???? 但是在某些追求實時性的嵌入式linux中,中斷也可能被賦予task_struct結構。這是為了避免大量中斷不斷的嵌套,導致一段時間內CPU總是運行在中斷上下文,使得某些優先級非常高的進程得不到運行。這種做法能夠提高系統的實時性,但是代價中吞吐量的降低

總結

以上是生活随笔為你收集整理的中断中是否可以使用信号量?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。