1. 在單cpu,不可搶佔內核中,自旋鎖爲空操作。
2. 在單cpu,可搶佔內核中,自旋鎖實現爲“禁止內核搶佔”,並不實現“自旋”。
3. 在多cpu,可搶佔內核中,自旋鎖實現爲“禁止內核搶佔” + “自旋”。
(2) 關於搶佔式內核與非搶佔式內核:
在非搶佔式內核中,如果一個進程在內核態運行,其只有在以下兩種情況會被切換:
1. 其運行完成(返回用戶空間)
2. 主動讓出cpu(即主動調用schedule或內核中的任務阻塞——這同樣也會導致調用schedule)
在搶佔式內核中,如果一個進程在內核態運行,其只有在以下四種情況會被切換:
1. 其運行完成(返回用戶空間)
2. 主動讓出cpu(即主動調用schedule或內核中的任務阻塞——這同樣也會導致調用schedule)
3. 當從中斷處理程序正在執行,且返回內核空間之前(此時可搶佔標誌premptcount須爲0) 。
4. 當內核代碼再一次具有可搶佔性的時候,如解鎖及使能軟中斷等。