Prozessdetails
100%

Prozesse · Lektion 3

Prozessdetails

Erfahre, welcher Zustand und welche Ressourcen einen laufenden Prozess von einem auf dem Datenträger gespeicherten Programm unterscheiden.

Ein Programm besteht aus ausführbarem Code und Daten, die in einer Datei gespeichert sind. Ein Prozess ist ein aktiver Ausführungskontext: Er umfasst eingebundenen Code, Speicher, Zugangsdaten, offene Dateideskriptoren, Signalzustand, Scheduling-Informationen und einen oder mehrere Threads. Dasselbe Programm kann viele unabhängige Prozessinstanzen besitzen.

Programminstanzen und PIDs

Starte beispielsweise cat ohne Operanden in zwei Terminals. Jede Instanz wartet auf Eingaben und besitzt eine eigene Prozess-ID:

$ pgrep -a cat
18420 cat
18457 cat

Beide Prozesse führen dasselbe Programm aus, können aber unterschiedliche Eingabeströme, Speicherinhalte, Zugangsdaten, Arbeitsverzeichnisse und Lebensdauern besitzen. Eine PID kennzeichnet jeweils einen laufenden Prozess und kann später nach dessen Beendigung erneut vergeben werden.

Was unterscheidet zwei laufende Instanzen desselben Programms?

Vom Kernel verfolgter Zustand

Der Kernel verwaltet die Informationen, die zum Planen und Steuern jedes Prozesses erforderlich sind, darunter:

  • Prozess- und Elternkennungen
  • Benutzer- und Gruppenzugangsdaten
  • virtuelle Speicherabbildungen
  • offene Dateideskriptoren und das aktuelle Verzeichnis
  • Signalbehandlungen und ausstehende Signale
  • Scheduling-Richtlinie, Priorität und Ausführungszustand
  • Abrechnungsdaten wie CPU-Zeit

Einige zugrunde liegende Ressourcen können gemeinsam verwendet werden. Verwandte Prozesse können eingebundenen Speicher teilen, und Threads eines Prozesses teilen sich einen Adressraum und viele prozessweite Ressourcen. Ein Prozess stellt daher Isolationsgrenzen bereit, ohne dass jedes Byte oder Kernelobjekt physisch privat sein muss.

Welche Komponente verwaltet Scheduling- und Zugangsdatenzustände für Linux-Prozesse?

CPU-Scheduling und Speicher

Ausführungsbereite Threads konkurrieren um CPU-Zeit. Der Kernel-Scheduler wählt anhand von Scheduling-Klasse, Priorität, CPU-Affinität, Last und Richtlinie aus, welcher Thread auf welcher CPU läuft. Das ist keine Zusage, dass jeder Prozess einen gleichen Anteil erhält.

Jeder Prozess sieht gewöhnlich einen virtuellen Adressraum. Kernel und Hardware ordnen virtuelle Adressen physischem Speicher oder einem anderen Hintergrundspeicher zu, setzen Schutzmechanismen durch und können Seiten gegebenenfalls gemeinsam nutzen. Eine Speicherangabe in ps oder top entspricht daher nicht automatisch der Menge an eindeutig diesem Prozess zurechenbarem physischem RAM.

Was wählt der Linux-Scheduler aus?

Prozessbeendigung und Ressourcenbereinigung

Wenn sich ein Prozess beendet, gibt der Kernel die meisten seiner privaten Ressourcen frei, schließt verbleibende Deskriptoren und erfasst Beendigungsinformationen für den Elternprozess. Ein kleiner Eintrag in der Prozesstabelle kann als Zombie bestehen bleiben, bis der Elternprozess den Beendigungsstatus abruft. Daher sind „der Prozess hat seine Ausführung beendet“ und „jede Spur ist aus der Prozesstabelle verschwunden“ nicht immer gleichzeitige Ereignisse.

Warum kann ein beendeter Prozess kurzzeitig als Zombie bestehen bleiben?

Lektion abgeschlossen

Sie haben Prozessdetails abgeschlossen

Du kannst nun einen Prozess als mehr als eine Programmdatei beschreiben.

  • Unterscheide gespeicherten ausführbaren Code von einer aktiven Prozessinstanz.

  • Bestimme den vom Kernel verfolgten Zustand und die Ressourcen.

  • Setze Scheduling mit ausführungsbereiten Threads statt mit gleichen Anteilen in Beziehung.

  • Erkenne, dass der Beendigungsstatus bestehen bleiben kann, bis der Elternprozess ihn abholt.

Lernfortschritt speichern

Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.

Kostenloses Konto erstellen
Nächste Lektion
Zurück zu Prozesse