天天看點

關于preempt_enable 和 preempt_disable 【轉】

關于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

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀