《linux裝置驅動程式III》學習—第五章

來源:互聯網
上載者:User

 

       第四章中講的是核心的調試技術。。。以後用到在學習吧

 

    第五章   並發和競態

1,作業系統編程的核心問題之一是並發管理

2,什麼是競態:linux中存在大量的並發源,當這些並發源訪問可共用的資料時就會發生競態

3,競態的危害:競態會導致共用的資料非控制訪問,導致系統崩潰、資料破壞及安全問題

4,如何避免競態:常用的技術是 鎖定和互斥

5,記:linux中訊號量的作用絕大多數是為互斥

 自旋鎖

6,鎖定功能的實現用的多的是自旋鎖,自旋鎖要更高效

7,自旋鎖由spinlock_t 類型定義

  初始化:

      spinlock_t my_lock=SPIN_LOCK_UNLOCKED;

void spin_lock_init(spinlock_t my_lock);

通過void spin_lock(spinlock_t *lock);獲得自旋鎖

通過void spin_unlock(spinlock_t *lock);釋放

8,自旋鎖弄不好會出現死結的問題,這裡要遵守一定的規則:

  @任何擁有自旋鎖的代碼必須是原子的。因為核心的搶佔機制,當有高優先順序的進程代碼排擠帶有自旋鎖的代碼時,帶有自旋鎖的代碼就一直不能運行,就會陷入死結狀態。 這裡解釋下自旋鎖的機制:共用代碼被上鎖後,其他進程要想訪問,就得一直等著解鎖,等待的過程中會一直訪問,這種狀態稱為自旋。

 @中斷中有自旋鎖會進入自旋陷阱,所以要禁止中斷。

  @自旋鎖必須最短時間擁有。因為自旋是原子操作,如果時間長的話,其他優先順序高的真正需要先啟動並執行就要等待,核心延遲。

   最後說一點個人理解:自旋鎖的作用是核心管理並發出現競態問題的有效手段,用法和線程間的鎖是一個原理,訪問共用資源的時候,鎖定,這個時候其他線程要訪問的話會先看是不是上鎖,如果上鎖的話其他進程會等待。退出前釋放,其他進程就可以再用這個共用資源了。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.