Kernel
中斷中的資源鎖定
我在數據包路由的不同點有一個帶有 netfilter 鉤子的核心模組,這些鉤子使用共享資源。此外,該模組有一個可以寫入的字元設備,這也會影響這些資源。
我不確定當不同的處理程序訪問這些資源時是否需要使用鎖。我讀到中斷不能休眠,這是否意味著我可以保證我的處理程序(鉤子和讀取處理程序)將一個接一個地執行,或者我是否需要使用鎖來防止從不同的函式同時訪問相同的資源?
謝謝。
根據您編寫的內容以及它使用的資料結構,很難說,但是:
我讀到中斷不能休眠,這是否意味著我可以保證我的處理程序(鉤子和讀取處理程序)將一個接一個地執行,或者我是否需要使用鎖來防止從不同的函式同時訪問相同的資源?
雖然確實不允許中斷休眠,但您還必須考慮與此資料結構介面的中斷也可以同時在另一個 CPU 上執行,或者另一個中斷可能會堆疊在您目前正在執行的中斷之上,將其占用暫時關閉 CPU。無論哪種情況,您都需要處理死鎖情況,以及兩個執行緒競爭寫入/讀取的情況。
所以是的,沒有理由相信僅僅基於你所寫的你不需要某種同步機制。根據您的特定情況,如果您禁用該 CPU 上的進一步中斷(例如,在 percpu 變數的情況下),您可能會發現同步更簡單。
適當的機制取決於您要保護訪問的內容以及可能的時間和成本,儘管由於您正在執行中斷,因此您在某種程度上受到限制,因為您只能真正選擇非阻塞原語.