我正在玩kretprobes,我正面臨一個問題。爲了響應來自用戶進程的特定事件(例如特定系統調用),我希望從該進程地址空間讀取數據。由於在kretprobe入口處理程序中我們處於中斷上下文中,因此我無法從這裏獲取用戶頁面(它可能會睡眠),因此我推遲了system_rq(schedule_work())中的工作。如何在Linux內核中斷之後強制重新調用?
爲了確保用戶進程在我的延期工作完成之前不會改變其內存,我將它放在TASK_INTERRUPTIBLE中並使用set_tsk_need_resched()。我希望在這個時候,這個標誌會被測試,調度器會選擇另一個任務。看起來它不能像那樣工作,並且在中斷之後用戶任務回到CPU上,在我有機會查看它之前改變它的內存。
是否還有其他事情要做,以確保任務切換後直接發生?
在此先感謝
中斷髮生*因爲*我在那裏放置了一個kprobe,所以我知道用戶進程正在運行並被我的探測器中斷,並且在調用中斷處理程序時不運行。從那裏開始,應該很容易讓它進入睡眠狀態,就像頁面錯誤處理程序所做的那樣,以便我可以稍後再運行並將其放回RUNNING。假設你mmap一個文件並嘗試讀取你的AS,但是當你嘗試讀取 - >頁錯誤時 - >數據不在這裏 - >內核會讓你進入INTERRUPTIBLE,直到數據從磁盤到達:這正是我試圖在這裏實現。儘管感謝您的回答 –