Linux 核心同步機制

來源:互聯網
上載者:User

標籤:

    本文將就自己對核心同步機制的一些簡要理解,做出一份自己的總結文檔。

    Linux內部,為了提供對共用資源的互斥訪問,提供了一系列的方法,下面簡要的一一介紹。

Technorati 標籤: 互斥 Linux 中斷屏蔽

使用方法:

local_irq_disable()  //屏蔽中斷                           critical section  //臨界區local_irq_enable()  //開中斷  

原因:Linux核心的進程調度依賴時鐘中斷實現,如果禁止中斷,核心就不會調度其他程式,因此,可以保證正在執行的核心路徑不會被中斷服務程式打斷。

缺點:

1. local_irq_disable 和 local_irq_enable 只能禁止和使能本地CPU內中斷,對於多CPU的SMP情況,無法解決此類競爭。

2. 屏蔽中斷期間,內部一些非同步I/O、進程調度無法進行,有可能造成資料丟失等問題。   

變體:local_irq_save(flags),在屏蔽本地CPU中斷的基礎上,備份禁止中斷之前的CPU標誌位,可通過local_irq_restore來恢複。

原子操作

     原子操作是核心實現並且保證的最小執行單元,如果需要保護的臨界資源為單一變數,可以考慮這種輕量級的保護方式。

     核心提供 對於整形數的原子操作和 對於某一位的原子操作。

   

自旋鎖

     自旋鎖,從名字上可以知道,這個函數將會自我原地旋轉,直到某一條件符合要求,如符合要求,則說明鎖已經開啟,可以進入,若不符合要求,則自己原地轉個圈,轉完後繼續判斷條件是否符合要求。

最簡單的使用方法如下:

    spinlock_t lock;     spin_lock_init(&lock);     spin_lock (&lock);    ...   //臨界區     spin_unlock(&lock);

自旋鎖,對不可搶佔核心,

 

 

 

RCU------讀-----------寫

        無鎖訪問           寫(向拷貝副本中寫)

                             更新(延遲到對該資料的所有讀操作完成為止)

 

 

 

wait_event <-----> wake_up

相關變體:

wait_event_interrupitble <----> wake_up_interruptible

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.