我想改變Linux內核,以便每次當前的PID改變 - 即新的進程被切換 - 執行一些診斷代碼(下面的詳細解釋,如果好奇的話)。我做了一些挖掘,看起來每次調度程序選擇一個新進程時,函數context_switch()
被調用,這是有道理的(這只是從粗略的分析sched.c/schedule()
)。kernel/sched.c/context_switch()保證每次切換進程時調用?
問題是,Linux調度程序對我來說基本上是黑魔法,所以我想知道這個假設是否正確。是否保證每次選擇一個新進程以在CPU上獲得一些時間時,會調用context_switch()函數?還是在內核源代碼中有其他地方可以在其他情況下處理調度? (或者我完全誤解了這一切?)
爲了給出一些上下文,我正在使用MARSS x86模擬器嘗試做某些儀器和某些程序的測量。問題是我的儀器需要知道某些代碼事件對應哪個執行過程,以避免誤解數據。這個想法是在MARSS中使用一些內置的消息傳遞系統來在每個上下文切換時傳遞新進程的PID,所以它總是知道當前正在執行的PID。如果任何人都可以想出一個更簡單的方法來實現這一點,那也將不勝感激。