[linux核心][linux中斷]——核心搶佔

來源:互聯網
上載者:User

標籤:

1,禁止核心搶佔的函數是preempt_disable(),允許核心搶佔的方法是preempt_enable()

2,真正的上鎖前,為何要調用preempt_disable()來關閉搶佔的case 

http://blog.csdn.net/kasalyn/article/details/11473885

 

[cpp] view plaincopy 
  1. static inline void raw_spin_lock(raw_spinlock_t *lock)  
  2. {  
  3.      preempt_disable();  
  4.      do_raw_spin_lock(lock);  
  5. }  



在真正的上鎖前,為何要調用preempt_disable()來關閉搶佔?
相關資料結構:

 

struct thread_info中
{
unisgned int preempt_count;-----(PREEMPT 0-7位表示核心態禁止搶佔計數器,SOFTIRQ 8-15表示非強制中斷禁止計數器,HARDIRQ 16-27表示中斷嵌套的深度)
}
只要PREEMPT為0時才允許核心態搶佔.

==》
1.如果核心可搶佔, 單CPU
    process1通過系統調用進入核心態,如果其需要訪問臨界區,則在進入臨界區前獲得鎖,上鎖,V=1,然後進入臨界區
    如果process1在核心態執行臨界區代碼的過程中發生了一個外部中斷,當中斷處理函數返回時,因為核心的可搶佔性,此時將會出現一個調度點,如果CPU的運行隊列中出現了一個比當前被中斷進程process1優先順序更高的進程process2,那麼被中斷的進程將會被換出處理器,即便此時它正運行於核心態。
    如果process2也通過系統調用進入核心態,且要訪問相同的臨界區,則會形成死結(因為擁有鎖的Process1永沒有機會再運行從而釋放鎖)
    
2.如果核心可搶佔,多CPU
    CPU1上的process1通過系統調用進入核心態,如果其需要訪問臨界區,則在進入臨界區前獲得鎖,上鎖,V=1,然後進入臨界區
     如果process1在核心態執行臨界區代碼的過程中發生了一個外部中斷,當中斷處理函數返回時,因為核心的可搶佔性,此時將會出現一個調度點,如果CPU1的運行隊列中出現了一個比當前被中斷進程process1優先順序更高的進程process2,那麼被中斷的進程process1將會被換出處理器,即便此時它正運行於核心態。
    如果CPU2上的process3也通過系統調用進入核心態,且要訪問相同的臨界區,也一樣形成死結

 

3,記憶體屏障相關
http://blog.csdn.net/joker0910/article/details/7782765

[cpp] view plaincopy 
  1. #define preempt_disable() \     
  2. do{ \    
  3.     inc_preempt_count(); \    
  4.     barrier();    \    
  5. }while(0)    


記憶體屏障,以強制該語句前後的指令以正確的次序完成,其實在指令序列中放一個wmb的效果是使得指令執行到該處時,把所有緩衝的資料寫到該寫的地方,
同時使得wmb前面的寫指令一定會在wmb的寫指令之前執行。rmb(讀記憶體屏障)保證了屏障之前的讀操作一定會在後來的讀操作執行之前完成。wmb保證寫操
作不會亂序,mb 指令保證了兩者都不會。這些函數都是 barrier函數的超集。

[linux核心][linux中斷]——核心搶佔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.