關于preempt_enable 和 preempt_disable
允許搶占和禁止搶占。
例如:核心态程式 和 中斷處理程式的互斥
因為中斷是異步的(不隻要何時發生中斷,也即随時可能發生中斷),是以如果核心态的程式使用了和中斷處理程式中相同的資料結構,那麼必須進行互斥通路。
load %r0, counter
add %r0,1 //發生中斷
store %r0,conter
如果在第二條指令執行時發生中斷,而中斷處理程式也需要将counter加1等操作,那麼counter變量的值就會變得紊亂。
是以,隻要非中斷處理代碼要更新一個與中斷處理程式共享的資料結構,那麼它就首先禁止中斷,執行臨界段,然後再重新允許中斷。在linux中,如下
preempt_disable();
preempt_enable();
【新浪微網誌】 張昺華--sky
【twitter】 @sky2030_
【facebook】 張昺華 zhangbinghua
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.