自旋鎖 中斷和程序切換

2021-08-18 14:17:04 字數 390 閱讀 1044

1、程序可以有多個,但linux核心只有乙個,相當於所有程序的全域性**區和全域性變數,程序有自己的程序空間(使用者空間+內 

核空間,2個空間都有自己的頁表);中斷上下文只有核心空間,不可阻塞,不可排程程序

2、單cpu自旋鎖:執行在臨界區域**時,不執行發生程序切換(即不能阻塞,相當於主動釋放cpu),要獨佔cpu

不允許spin_lock保護的臨界區**有任何休眠釋放cpu的操作,例如copy_from_user、kmalloc等存在風險

中斷發生時,如訪問其他核心**可以;但訪問臨界區域會造成死鎖

3、多cpu自旋鎖:執行在臨界區域**時,沒加鎖的cpu發生程序切換,加鎖的不行

中斷發生時,本cpu中斷如上情況;其他cpu訪問臨界區域會忙等待               

中斷級和自旋鎖

中斷級 1 中斷級 irql 數字越大優先順序越高,優先執行,等級越低越容易被等級高的程式打斷。0級 pass level 1級 apc level 2 級 dpc level,比2級dpc高的是 硬體中斷級 我們一般就是要提高到dpc級 每乙個核心函式都要執行優先順序 2 通過程式設計可以把 提高...

linux核心自旋鎖和中斷知識講解

一 併發與競態三個要點 1 只要併發的執行單元同時訪問共享記憶體是就會出現競態 2 解決競態的唯一途徑是保證共享資源的互斥訪問,即乙個執行單元在訪問共享資源時,其他的執行單元被禁止訪問。3 訪問共享資源的 區域被稱為臨界區,臨界區需要被以某種互斥機制加以保護 二 自旋鎖注意事項 1 自旋鎖是一種忙等...

自旋鎖和互斥鎖

1.理論分析 從理論上說,如果乙個執行緒嘗試加鎖乙個互斥鎖的時候沒有成功,因為互斥鎖已經被鎖住了,這個未獲取鎖的執行緒會休眠以使得其它執行緒可以馬上執行。這個執行緒會一直休眠,直到持有鎖的執行緒釋放了互斥鎖,休眠的執行緒才會被喚醒。如果乙個執行緒嘗試獲得乙個自旋鎖的時候沒有成功,該執行緒會一直嘗試加...