2012-06-18 15 views
8

Chcę zmienić jądro Linux tak, aby za każdym razem, gdy zmienił się bieżący PID - tzn. Został włączony nowy proces - wykonywany jest kod diagnostyczny (szczegółowe wyjaśnienie poniżej, jeśli ciekawy). Robiłem pewne kopie i wydaje się, że za każdym razem, gdy harmonogram wybiera nowy proces, wywoływana jest funkcja context_switch(), co ma sens (jest to po pobieżnej analizie sched.c/schedule()).Czy jądro/sched.c/context_switch() może być wywoływane za każdym razem, gdy proces jest włączony?

Problem w tym, że planista Linuksa jest teraz dla mnie czarną magią, więc chciałbym się dowiedzieć, czy to założenie jest poprawne. Czy jest zagwarantowane, że za każdym razem, gdy zostanie wybrany nowy proces, aby uzyskać trochę czasu na procesorze, wywoływana jest funkcja context_switch()? Czy są inne miejsca w źródle jądra, gdzie planowanie może być obsługiwane w innych sytuacjach? (Czy jestem całkowicie nieporozumieniem?)

Aby podać kontekst, pracuję z symulatorem MARSS x86, próbując wykonać pewne oprzyrządowanie i pomiary niektórych programów. Problem polega na tym, że moje oprzyrządowanie musi wiedzieć, który proces wykonawczy odpowiada określonym zdarzeniom kodu, aby uniknąć błędnej interpretacji danych. Chodzi o to, aby wykorzystać niektóre wbudowane systemy przekazywania komunikatów w MARSS, aby przekazać PID nowego procesu na każdym przełączniku kontekstu, aby zawsze wiedział, co PID jest aktualnie w trakcie wykonywania. Jeśli ktokolwiek może wymyślić prostszy sposób, aby to osiągnąć, byłoby to bardzo docenione.

Odpowiedz

4

Tak, masz rację.

schedule() wezwie context_switch() który jest odpowiedzialny za przejście od jednego zadania do drugiego, kiedy nowy proces został wybrany przez schedule().

context_switch() zasadniczo robi dwie rzeczy. To wywołuje switch_mm() i switch_to().

switch_mm() - przełącznik do mapowania pamięci wirtualnej dla nowego procesu

switch_to() - przełączyć stan procesora z poprzedniego procesu do nowego procesu (zapis/odczyt rejestrów, stos informacji i inne architektura konkretne rzeczy)

Co do twojego podejścia, to chyba w porządku. Ważne jest, aby podczas pracy z jądrem zachować ładunek i czystość, i staraj się utrzymywać go stosunkowo łatwo, dopóki nie uzyskasz większej wiedzy.

Powiązane problemy