2011-07-24 40 views
1

如果我已經爲mm_struct持有mmap信號量(閱讀),並且我想將一些數據寫入頁面結構的成員,那麼我應該up_read信號量並嘗試獲取down_write mm_struct還是應該使用單獨的鎖(它是我創建的結構成員,它是一個列表)。另外,如果我已經擁有一個down_read信號量,並且我調用down_reads同一個信號量的另一個方法,那麼根據我的理解,這應該不會造成死鎖嗎?在內核中的mmap信號量鎖定頁面

+0

爲了清楚起見,這是我編寫的一個自定義內核,它向mm_struct添加了成員​​,只有您的代碼可以訪問? –

+0

@Corey,是的,但成員被添加到頁面結構,這就是爲什麼我想在頁面上使用另一個鎖。 –

+0

而不是mmap信號量 –

回答

0

我發現的解決方案是down_read不會導致死鎖。相反,我使用螺旋鎖來維護專有權利來修改列表並更改頁面的標誌。這使我可以避免在同一頁面出現多個錯誤的問題,還可以讓我看到,如果我當前持有該鎖,則頁錯誤處理程序可以返回,因爲我已經處理了該錯誤。