朋友們,我試圖跟蹤包括運行在其上的進程在內的操作系統的完整執行情況。爲此,我想讓每個進程執行的指令及其執行跟蹤,我想這樣做,而不必去每個進程的objdump。當前正在執行的進程的pid
所以我的目標是:
1)建立每個PID的地址空間。
2)跟蹤每個pid的執行情況。
爲了實現上述目標,我在模擬器Qemu上運行基於Linux的操作系統。
當qemu第一次遇到一條指令時,我會使用一個io-port或一個已知的物理內存地址來檢查運行此指令的進程的pid。然後我可以使用這些信息來做我想要的東西。
我的問題是...... 在kernel/sched.c中,我可以知道下一步要執行的進程的pid。意思是我不能像一個函數調用 - > launch_process(pid)。有人請指點我在內核中的這個位置。或者在系統中有一個我們可以跟蹤地址空間的已知位置。一個是CR3,但我真的不能相信它。
對於一些人來說,這可能似乎是一個微不足道的指針,但我無法自己找到這個位置。
@droid謝謝... context_switch是執行過程的pid更改的函數。這是我打算在下一個代碼中使用task_struct的地方。有沒有其他改變PID的其他入口?這種方法是否也適用於smp系統? –
我對內核並不熟悉,因此無法確定地回答其他入口點。至於SMP - 我認爲一切都應該沒問題。 –