2012-01-24 13 views
5

Przyjaciele, próbuję prześledzić kompletne wykonanie systemu operacyjnego, w tym procesy na nim uruchomione. W tym celu chcę instrukcji wykonanych przez każdy proces i jego śledzenia wykonania i chcę to zrobić bez konieczności iść i podjąć objdump każdego procesu.pid aktualnie wykonywanego procesu

Moje cele to:
1) Przestrzeń adresowa każdego pida.
2) Śledzenie wykonania każdego pid.

Aby osiągnąć powyższe cele, uruchamiam system operacyjny oparty na systemie Linux na emulatorze Qemu.

Kiedy qemu napotka instrukcję po raz pierwszy, sprawdzę pid procesu uruchamiającego tę instrukcję za pomocą portu io znanego fizycznego adresu pamięci gościa. Mogę następnie użyć tych informacji, aby zrobić rzeczy, które chcę.

Moim problemem jest .... gdzie w kernelu/sched.c mogę znać pid procesu, który będzie wykonywany w następnej kolejności. Znaczy, nie jestem w stanie wymyślić wywołania funkcji jak -> launch_process (pid). Może ktoś wskazać mi tę lokalizację w jądrze. Czy istnieje znane miejsce w systemie, w którym możemy śledzić przestrzeń adresową. Jednym z nich jest CR3, ale naprawdę nie mogę mu ufać.

Dla niektórych osób może to wydawać się banalną wskazówką dla tej lokalizacji, ale nie jestem w stanie znaleźć tej lokalizacji.

Odpowiedz

3

Każdy proces ma odpowiednią wartość struct task_struct. Możesz użyć funkcji find_task_by_*(), aby znaleźć struct task_struct przez PID lub task_pid_*(), aby uzyskać PID danego zadania. Zobacz także "Co to jest struct pid?" sekcja w include/linux/pid.h.

Uruchomione zadania są ustawione na przerwanie pracy procesora: patrz definicja struct rq w kernel/sched.c.

Funkcje try_to_wake_up(), wake_up_process(), wake_up_new_task(), context_switch() i inne są również powiązane z zadaniem.

+0

@Droid thanks ... context_switch to funkcja, w której zmienia się pid procesu wykonywania. Tutaj zamierzam umieścić kod przy użyciu parametru task_struct. Czy jest jakikolwiek inny punkt wejścia do zmiany pid ?? Czy ta metoda zadziałałaby również dla systemu SMP? –

+0

Nie jestem zaznajomiony z jądrem, więc na pewno odpowiedzieć na inne takie punkty wejścia. Co do SMP - myślę, że wszystko powinno być w porządku. –

Powiązane problemy