Linux內核併發和競態(2)

一.併發和競態相關的概念

併發: 多個執行單元同時發生;
執行單元包括進程和中斷
競態:多個執行單元對共享資源的同時訪問造成的競爭狀態
形成競態條件:
1.要有多個執行單元
2.要有共享資源
3.要同時訪問
共享資源:
1.軟件上的全局變量屬於共享資源
2.硬件資源 (寄存器都是共享資源)
避免競態的本質目的:
一個執行單元在訪問共享資源的時候,其他執行單元禁止訪問共享資源;
這種訪問方式又稱之爲互斥訪問!

互斥訪問的本質目的:
就是讓訪問共享資源的代碼具有原子性;
例如: --open_cnt當某個任務在訪問的時候,不能發生CPU資源的切換!

臨界區:
訪問共享資源的代碼區域叫臨界區!
if (--open_cnt != 0)
{
printk("設備已被打開!\n");
open_cnt++;
return -EBUSY; //出錯,設備忙
}
3.3.產生競態的幾種情形
1.多處理器(多核, SMP),多處理器共享系統的內存,閃存和IO資源,勢必形成競態
2.單CPU的進程與進程的搶佔,形成競態 (UC中只有一種情形)
3.中斷和進程(中斷優先級高於進程)
4.中斷和中斷
高優先級的軟中斷搶佔低優先級的軟中斷
硬件中斷搶佔軟中斷

二.Linux內核解決競態的方法

中斷屏蔽
自旋鎖
信號量
原子操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章