中斷屏蔽

在單CPU範圍內避免競態的一種簡單而有效的方法是在進入臨界區之前屏蔽系統的中斷。但在一般的驅動編程中不值得推薦,驅動通常要考慮誇平臺特點而不假定自己在單核上運行。
cpu一般都具備屏蔽中斷和打開中斷的功能,此項功能保證正在執行的內核執行路徑不被中斷處理程序所搶佔,防止某些競態條件的發生。
具體而言,中斷屏蔽將使得中斷與進程之間的併發不再發生。
由於Linux內核進程調度等操作都依賴中斷來實現,內核搶佔進程之間的併發也得以避免了。
中斷屏蔽使用方法:

local_irq_disable()/local_irq_save(flags)/local_bh_disable()
/* 臨界區 路徑必須很快執行完成 */
local_irq_enable()/local_irq_restore(flags)/local_bh_enable()

以上接口都只能禁止和是能本CPU內的中斷,因此不能解決SMP多CPU引發的競態。

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