Wo ist PCB unter Linux?

10

Eine Leiterplatte ist ein Prozesssteuerungsblock , dies ist die Definition in Wikipedia

Process Control Block (PCB, auch Task Controlling Block, [1] Task Struct oder Switchframe genannt) ist eine Datenstruktur im Betriebssystemkern, die die Informationen enthält, die zum Verwalten eines bestimmten Prozesses erforderlich sind. Die Leiterplatte ist "die Manifestation eines Prozesses in einem Betriebssystem

und seine Pflicht ist:

Process identification data
Processor state data
Process control data

Wo befindet sich also die Leiterplatte eines Prozesses?

Mohammad Reza Rezwani
quelle
Siehe auch Prozesssteuerungsblock unter Linux bei Stapelüberlauf.

Antworten:

15

Im Linux-Kernel wird jeder Prozess durch eine task_structdoppelt verknüpfte Liste dargestellt, deren Kopf init_task(pid 0, nicht pid 1) lautet . Dies ist allgemein als Prozesstabelle bekannt .

Im Benutzermodus ist die Prozesstabelle für normale Benutzer unter sichtbar /proc. Nehmen Sie die Überschriften für Ihre Frage:

  • Prozessidentifikationsdaten sind die Prozess-ID (die sich im Pfad befindet /proc/<process-id>/...), die Befehlszeile ( cmd) und möglicherweise andere Attribute, abhängig von Ihrer Definition von "Identifikation".

  • Prozessstatusdaten umfassen Planungsdaten ( sched, statund schedstat), worauf der Prozess gerade wartet ( wchan), seine Umgebung ( environ) usw.

  • Prozesssteuerungsdaten können als Anmeldeinformationen ( uid_map) und Ressourcenlimits ( limits) bezeichnet werden.

Es hängt also alles davon ab, wie Sie Ihre Begriffe definieren ... aber im Allgemeinen finden Sie alle Daten zu einem Prozess in /proc.

Flup
quelle
"Der Kopf davon ist init_task(pid 0, nicht pid 1)" Es gibt keine init_task. Es ist initund seine PID ist 1, nicht 0 (bestätigt über pidof init).
AleksandrH
1
@AleksandrH init_task ist eine Kernelstruktur und kein Prozess. Es zeigt auf die Leerlaufaufgabe, die intern durch pid 0 dargestellt wird. Init_task und init sind völlig verschiedene Dinge.
Flup
Und doch pidist nur für Prozesse ...
AleksandrH
1
@AleksandrH Lesen Sie init / init_task.c im Kernel-Quellbaum ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup