自旋鎖的實現

(1) linux上的自旋鎖有三種實現:
          1. 在單cpu,不可搶佔內核中,自旋鎖爲空操作。
          2. 在單cpu,可搶佔內核中,自旋鎖實現爲“禁止內核搶佔”,並不實現“自旋”。
          3. 在多cpu,可搶佔內核中,自旋鎖實現爲“禁止內核搶佔” + “自旋”。
(2) 關於搶佔式內核與非搶佔式內核:
          在非搶佔式內核中,如果一個進程在內核態運行,其只有在以下兩種情況會被切換:
          1.  其運行完成(返回用戶空間)
          2.  主動讓出cpu(即主動調用schedule或內核中的任務阻塞——這同樣也會導致調用schedule)

          在搶佔式內核中,如果一個進程在內核態運行,其只有在以下四種情況會被切換:
          1.  其運行完成(返回用戶空間)
          2.  主動讓出cpu(即主動調用schedule或內核中的任務阻塞——這同樣也會導致調用schedule)
          3.  當從中斷處理程序正在執行,且返回內核空間之前(此時可搶佔標誌premptcount須爲0) 。
          4.  當內核代碼再一次具有可搶佔性的時候,如解鎖及使能軟中斷等。
發佈了53 篇原創文章 · 獲贊 12 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章