Gdzie jest PCB w systemie Linux

10

PCB lub blok sterowania procesem zdefiniowano w Wikipedii w ten sposób

Blok sterowania procesami (PCB, zwany także Blokiem Kontroli Zadań, [1] Strukturę Zadań lub Switchframe) to struktura danych w jądrze systemu operacyjnego zawierająca informacje potrzebne do zarządzania określonym procesem. PCB jest „manifestacją procesu w systemie operacyjnym

a jego obowiązkiem jest:

Process identification data
Processor state data
Process control data

Gdzie więc można znaleźć PCB procesu?

Mohammad Reza Rezwani
źródło
Zobacz także Blok sterowania procesem w systemie Linux dotyczący przepełnienia stosu.

Odpowiedzi:

15

W jądrze Linuksa każdy proces jest reprezentowany przez task_structpodwójnie połączoną listę, której głową jest init_task(pid 0, a nie pid 1). Jest to powszechnie znane jako tabela procesów .

W trybie użytkownika tabela procesów jest widoczna dla zwykłych użytkowników poniżej /proc. Przejrzyj nagłówki swojego pytania:

  • Dane identyfikujące proces to identyfikator procesu (który znajduje się na ścieżce /proc/<process-id>/...), wiersz poleceń ( cmd) i ewentualnie inne atrybuty w zależności od definicji „identyfikacji”.

  • Dane stan procesu zawiera dane harmonogramu ( sched, stati schedstat), jakie proces jest aktualnie oczekujących na ( wchan), jego środowisko ( environ) itd.

  • Można powiedzieć, że dane kontroli procesu to poświadczenia ( uid_map) i limity zasobów ( limits).

Wszystko zależy więc od tego, jak zdefiniujesz swoje terminy ... ale ogólnie wszystkie dane na temat procesu można znaleźć w /proc.

Flup
źródło
„którego głową jest init_task(pid 0, nie pid 1)” Nie ma czegoś takiego jak init_task. Jest init, a jego pid wynosi 1, a nie 0 (potwierdzone przez pidof init).
AleksandrH
1
@AleksandrH init_task jest strukturą jądra, a nie procesem. Wskazuje na bezczynne zadanie, które jest wewnętrznie reprezentowane przez pid 0. init_task i init to zupełnie różne rzeczy.
Flup,
A jednak piddotyczy tylko procesów ...
AleksandrH
1
@AleksandrH Przeczytaj plik init / init_task.c w drzewie źródeł jądra ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup,