Czy jądro jest procesem?

30
  1. W Linuksie zawsze mówimy, że pierwszy proces to init(pid == 1). Ale dlaczego jądro (start) nie konfiguruje systemu i nie tworzy initprocesu. Czy jądro jest procesem?
  2. Wiemy, że wszystkie wątki przestrzeni użytkownika są zrootowane w procesie init. A co z harmonogramem i innymi rzeczami jądra, takimi jak zarządzanie pamięcią?

Zasadniczo to, co mnie dezorientuje, to struktura jądra. Jeśli jest to proces, czy jest to pojedynczy proces, czy składa się z wielu procesów?

MarianD
źródło

Odpowiedzi:

19

Krótkie odpowiedzi:

  1. Nie, to nie jest proces
  2. Wątki użytkownika nie są zrootowane przy init.

Init jest tylko pierwszym procesem; nie zarządza żadnymi procesami ani wątkami. To tworzy, używając jądra syscalls fork () i exec.

Myślę, że masz mętne pojęcie o tym, czym jest proces. nie oznacza to tylko wykonania kodu. Tak, jądro wykonuje się przed init (a nawet program ładujący przed tym). Ale „proces” ma określoną definicję:

  • Działa w przestrzeni użytkownika
  • Działa z identyfikatorem procesu
  • Wiele interakcji musi przejść przez jądro
  • Wszystkie zasoby muszą pochodzić z jądra
  • Musi być zaplanowane przez jądro

Kiedy więc jądro się zainicjuje, uruchamia init, który następnie spawnuje wszystkie inne procesy, o których mówi jego konfiguracja.

Jeśli chodzi o # 2, wszystkie elementy jądra znajdują się w jądrze. Pomyśl o jądrze jako o dużym obszarze kodu. Znowu nie proces, ale duży obiekt blob kodu. Części jądra zajmują się zarządzaniem pamięcią, niektóre z częściami planowania (takimi jak sterowniki itp.), A część z procesami planowania.

Rich Homolka
źródło
3
Zastanawiam się, czy OP wie wystarczająco dużo, aby jego umysł był zdmuchnięty przez mikro-jądra? Nie dodałem go do mojej edycji, ponieważ myślałem, że w każdym razie będzie to rozpraszające.
new123456
4
Jednym ze sposobów myślenia o jądrze jest jak gigantyczna biblioteka, w której punkty wejścia (wywołania systemowe) proszą go o zrobienie czegoś w twoim imieniu. Innym, komplementarnym poglądem jest to, że czeka on na zdarzenia do obsłużenia, czy to wywołanie systemowe od użytkownika, czy przerwanie sprzętowe (np. Przybył nowy pakiet sieciowy). Niektóre rzeczy wymagają czasu, więc jądro po prostu wysyła pracę do wewnętrznych wątków i wraca do każdego, kto zadzwonił.
vonbrand,
15

Jądro tak naprawdę wcale nie zachowuje się jak proces. Nie podlega harmonogramowi, albo działa w imieniu procesu (tzw. Kontekst procesu lub kontekst użytkownika), albo działa w wyniku przerwania lub wyjątku (tak zwany kontekst przerwania).

To powiedziawszy, jądro Linuksa odradza wątki jądra w celu wykonania niektórych zadań lub uniknięcia zbyt długiego uruchamiania czegoś w kontekście przerwania (to właśnie robi wątek ksoftirqd, unikając nadmiernych opóźnień, które mogłyby prowadzić np .: do utraty dźwięku, ...) .

Możesz zobaczyć wątki jądra na wyjściu pspolecenia. Można je łatwo zidentyfikować: ich nazwa znajduje się w nawiasach kwadratowych. Niektóre z nich uruchamiają jedną instancję na procesor, procesor jest identyfikowany numerem po ukośniku, więc [ksoftirqd / 0] jest instancją ksoftirqd na CPU 0.

ninjalj
źródło
1

Istnieją mikro-jądra, w których różne części jądra są w rzeczywistości procesami, a główny wartownik głównie zarządza IPC.

Linux - na lepsze lub gorsze - nie jest systemem mikro-jądra.

Jé Queue
źródło
1

Nie, to nie jest ... Jądro (i rozszerzenia jądra) są ładowane bezpośrednio do pamięci. Jeśli w jądrze znajduje się niebezpieczny kod, nic nie stoi pomiędzy nim a dużym problemem.

Poza tym jądro zasadniczo wykonuje / przełącza między procesami. Oczywiście coś, co faktycznie uruchamia procesy, nie będzie procesem samym w sobie.

(tl; dr 1. no 2. część jądra / jego rozszerzenie)

Aurel Bílý
źródło
0

ninjalj napisał: „Jądro tak naprawdę nie zachowuje się jak proces. Nie można go zaplanować”

Cóż, istnieje proces bezczynności (w zasadzie pid 0, chociaż nigdzie go nie pokazano), który jest zaplanowany i prawie zawsze w stanie uruchomionym.

użytkownik55078
źródło
0

Przełączanie kontekstu

❖ Procesami zarządza wspólny fragment kodu systemu operacyjnego zwany jądrem

▪ The kernel is not a separate process, but rather runs as part of a user process

Switch Przełącznik kontekstowy przekazuje przepływ sterowania z jednego procesu do drugiego i jest wykonywany przy użyciu kodu jądra

Źródło: https://courses.cs.washington.edu/courses/cse351/19su/lectures/18/CSE351-L18-processes_19su.pdf , strona 36

ograniczenia
źródło