Programm, Prozess und Prozessinstanz

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Programm, Prozess und Prozessinstanz
Ich gehe gerade nochmal die SP1 Folien durch und mir sind die Begriffe Programm, Prozess und Prozessinstanz nicht ganz klar. So wie ich das verstehe ist das Programm “der Code” bzw im Kontext der Programmiersprache C “das Compilat” also die .o-Datei. Mir ist aber unklar wie ich Prozess und Prozessinstanz verstehen soll, es heisst auf Folie A3-7 “Prozess: Programm, das sich in Ausführung befindet, und seine Daten (Beachte: ein Programm kann sich mehrfach in Ausführung befinden)” aber die “mehrfachen Ausfuehrungen” sind doch die Instanzen oder?

Auf Folie 9 ist dann die Ueberschrift “Speicherorganisation eines Prozesses”, ist hier mit Prozess die Prozessinkarnation gemeint? Laut Folie 7 wird ja oft von einem Prozess geredet obwohl die Prozessinkarnation gemeint ist…


Hast du mal einen Blick in das vielfach unterschätze Glossar von wosch geworfen? https://www4.cs.fau.de/DE/~wosch/glossar.pdf
Im Folgenden meine Interpretation dessen:

Wenn wir nun mal die virtuelle Maschine „C“ betrachten und den Compiler als Prozessor, dann ist C-Code ein Programm!
Wenn wir die virtuelle Maschine „Binder“ betrachten, dann ist .o-Code auch ein Programm!
Wenn wir die virtuelle Maschine „Assemblierer“ betrachten, dann ist Assembler-Code (in Mnemonic-Form, d.h. „ADD EAX, EDX“ statt Bytecode!) auch ein Programm!
Schlussendlich ist auch Microcode ein Programm für den Microcode-Prozessor in der Hardware. (Näheres siehe z. B. VL GRa).

Also Programm ist klar? :wink:

Ein Programm kann sich mehrfach in Ausführung befinden, wie du richtig sagst. Jeder diese Ausführungen ist ein Prozess. Etwa kannst du 3 Bash-Terminals offen haben, hast also 3 Prozesse von 1 Programm, nämlich der Bash. Du hast aber nicht 3 Prozesse aus dem Grund, weil dein OS dir im Task Manager tatsächlich 3 Mal bash.exe anzeigt, nein! Sondern, weil das Programm „Bash“ 3 Mal läuft - wie es tatsächlich läuft, ist irrelevant. Üblicherweise läuft ein Programm mit einem Prozessexemplar des Betriebssystems, also mit eigener PID, virtuellem Speicher usw. Du könntest aber genauso gut in ein und derselben virtuellen Maschine (z. B. QEMU) die Bash laufen lassen - dann hättest du im äußeren Betriebssystem nur ein Prozessexemplar - nämlich das von dem Programm QEMU.
Du könntest auch bash.exe manuell mit Papier und Stift starten, dann hättest du auch einen Prozess.

Prozessinkarnation verweist auf Prozessexemplar, was wie folgt definier ist:

Eine Option, einen Prozess (was ja ein „abstraktes Gebilde“ war) auf einem OS auszuführen, besteht darin, dafür ein Prozessexemplar anzulegen. Man sagt oft zu „Prozessexemplar“ auch nur „(Betriebssystem-)Prozess“, aber ich habe und werde diese Terminologie in dieser Antwort nicht nutzen.

Ist dir noch bekannt, wie man in der einen SP-Übungsaufgabe zur Shell ein Programm gestartet hat*? Man hat sich geforked und dann via exec Teile der „Innereien“ des geforkeden Prozesses ausgetauscht**. Ich nehme stark an, dass das Prozessexemplar von der obigen Definition genau diese Innereien umfasst. Wir haben also via fork ein neues Prozessexemplar erstellt und dann einen neuen Prozess des aufgerufenen Programms darin inkarniert.

(Prozessexemplare übrigens nicht mit leichtgewichtigen Threads [=Threads im üblichen Sinne] oder federgewichtigen Threads verwechseln. Prozessexemplare sind in dem Sinne schwergewichtige Threads.)

*) also etwa bei Eingabe von „wget“ oder „curl“. Ich wollte auch zuerst Prozess gestartet sagen, was aber wohl falsch wäre!
**) Manche Teile blieben dabei davon auch unberührt, z. B. ändert sich die PID bei exec nicht!


Wenn du Obiges verstanden hast, dann könntest du dich auch fragen, ob denn nicht jeder Prozess in irgendeinem Prozessexemplar (irgendeines Betriebssystems!) inkarniert ist. Ich würde das tatsächlich bejahen. Beim Prozess der Bash auf Stift und Papier hättest du dann dich als Betriebssystem. Das Prozessexemplar würde den Programmzähler in deinem Gedächtnis und den virtuellen Speicher auf dem Blatt Papier umfassen.


Übrigens nimmt laut Glossar Wosch auch sehr gerne Vorschläge und Fragen entgegen. Auf eine Frage von mir hat er mal prompt geantwortet. Du könntest ihn ja mal fragen, ob er diesen Unterschied von Prozess und Prozessexemplar ergänzen möchte.


Aaaaalso Danke erstmal fuer den Hinweis auf das Glossar. Was ein Programm ist ist mir “relativ” klar, “man kennt den Begriff”. Den Hinweis mit der Shell finde ich gut, ich haette es allerdings so aufgefasst dass das Prozessexemplar lediglich “das Gefaess” ist in welchem das Programm laeuft und nicht die Innerein, im Skript heisst es ja “eine konkrete AusführungsUMGEBUNG für ein Programm (Speicher, Rechte, Verwaltungsinformation)”. Der Prozess hingegen “das abstrakte Gebilde, im OO-Sinne eine Klasse”, welches beschreibt wie ein konkretes Prozessexemplar auszusehen hat. Was haeltst du von diesen Aussagen Marcel?

Vor allem der Begriff Prozess macht mir Schwierigkeiten denn im Skript heisst es ja der Prozess sei ein “abstraktes Gebilde und im OO-Sinne eine Klasse” vorher aber eben auch “Programm, das sich in Ausführung befindet, und seine Daten” was in meinem Verstaendnis etwas sehr konkretes ist :huh:

Ich denke ich werde “Professor Wosch” tatsaechlich mal per Email kontaktieren um zu fragen ob man im Glossar vielleicht nochmal genau auf den Unterschied eingehen kann, finde ich gut die Idee!

UPDATE: Habe ihm geschrieben und tatsaechlich am Sonntag eine Antwort gekriegt, der Unterschied wird ins Glossar aufgenommen und Marcel[Inf] haette volle Punktzahl auf die Frage nach Programm, Prozess und Prozessinstanz und den Unterschieden gekriegt.

Prof Schroeder-Preikschat schreibt [quote]
Program: Legt den sich über eine gewisse Zeit erstreckenden Vorgang fest, bei dem ein bestimmtes Berechnungsergebnis entstehen soll.
Prozess: Ist dieser Vorgang, also ein Programm in Ausführung.
Prozessexemplar: Eine konkrete Ausfertigung eines solchen Prozesses in Abhängigkeit von der Betriebsart.

Für ein bestimmtes algorithmisches Problem, das durch ein Programm beschrieben ist und durch einen Prozess gelöst wird, können sich für die Umsetzung verschiedene Prozessexemplare ergeben oder anbieten. Diese Exemplare unterscheiden sich dann in Art und Umfang der Ressourcen, die dem Prozess, damit er stattfinden kann, durch das Betriebssystem bereitgestellt werden müssen. Ein solches Exemplar könnte als Fäserchen, Faser oder Faden gemeinsam mit anderen ihrer Art (die ganz andere Probleme lösen) im selben isolierten Adressraum umgesetzt sein oder es besitzt einen eigenen isolierten Prozessadressraum. Die für diese verschiedenen Ausprägungen von einem Betriebssystem dann bereitzustellenden Ressourcen und zu leistenden Systemfunktionen sind in Art, Umfang und Auslegung dann schon sehr verschieden.

Ursprünglich war und ist ein Prozess (abstrakt, fokussiert auf die Dynamik) was anderes als ein Prozessexemplar (konkret, fokussiert auf die benötigten Ressourcen). Seit Multics - und vor allem UNIX - werden beide begrifflich oft auch gleichgesetzt: Ein (Multics/UNIX) Prozess ist ein Prozessexemplar mit eigenem, strikt isolierten Prozessadressraum. Aber es ist grundsätzlich zu beachten, dass auch das nur eine von mehreren möglichen Implementierungen (eines Prozesses) ist.
[/quote]

Die Antwort ist denke ich “on-the-point” damit wird es, mir zumindest, klar was Prozess und Prozessexamplar meinen…

1 „Gefällt mir“

Wenn man die OO-Analogien bemühen möchte, dann vielleicht so:

[code=java]
// Das ist das Programm, umfasst etwa C+±Code
abstract class DeinProgramm;

// Fügt Laufzeitcharakteristika hinzu, Dynamik
// abstract, d.h. für jeden Prozess muss tatsächlich min. 1 Prozessexemplar existieren
abstract class DeinProzess extends DeinProgramm;

// Verschiedene Inkarnationen
class DeinBetriebssystemProzessexemplar extends DeinProzess;
class DeinFadenProzessexemplar extends DeinProzess;

// „Dein“ verdeutlicht, dass „DeinProgramm“ nicht generisch irgendein Programm beinhaltet, sondern ein konkretes Programm, ein konkreter C+±Code zum Beispiel[/code]

Wobei die Analogie bricht, denn Prozesse umfassen nicht zwingend den Originalcode.

Yaaay :slight_smile: Rumraten mit diesen abstrakten Begriffen macht auch sehr viel Spaß!