我正在編寫一個Linux驅動程序,它分配一些內存和用戶空間應用程序mmap()
的內存。正確釋放和取消內核內存映射
現在我正在爲該模塊編寫退出處理程序,並且我正試圖弄清楚什麼是一些安全的假設。
首先,當內核模塊退出處理程序被調用時,可以安全地假設所有內存都未被映射(無論是由應用程序還是由內核)?或者在釋放內存之前必須在內核驅動程序中手動取消映射?
我問這個問題,因爲內核應該知道模塊是否正在退出,內核也會處理解映射過程。如果內核在調用退出處理程序之前處理解映射,那麼我可以釋放內存。如果這是真的,並且如果用戶空間應用程序試圖訪問該內存,那麼應用程序會出現分段錯誤。這是因爲虛擬地址不再指向有效的物理內存,或者進程沒有權限訪問該頁面上的虛擬地址(假設內核未映射內存)。如果內核驅動程序未映射內存,也會發生同樣的情況。這是真的?
我懷疑,無論你分配和映射你將負責清理自己。但不知道。 – Wug
我確定這是爲了分配,但對於映射是不確定的,因爲這是由用戶空間完成的,而'munmap()'完全由內核處理。 – Joshua