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.
Prozesse · Lektion 3
Prozessdetails
Erfahre, welcher Zustand und welche Ressourcen einen laufenden Prozess von einem auf dem Datenträger gespeicherten Programm unterscheiden.
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?
Nutze das Lab Linux-Prozesse verwalten und überwachen, um mehrere Instanzen zu starten und ihre PIDs und Zustände zu vergleichen. Das Lab Linux-Befehl top bietet eine veränderliche Ansicht von Scheduling- und Ressourcenmetriken.
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