|
Im alltäglichen Sprachgebrauch werden die Begriffe Programme und Prozesse häufig synonym verwendet, obwohl die Begriffe unterschiedliche Dinge beschreiben. Ein Programm kann mehrere Prozesse starten, aber es können auch mehrere Prozesse dasselbe Programm abarbeiten. Ein Programmierer schreibt einen Programmquelltext, der nach der Übersetzung in die Maschinensprache (z.B. durch einen Compiler) als ausführbare Datei - Programm - vorliegt. Handelt es sich bei dem Quelltext um Anweisungen für einen Kommandointerpreter, so spricht man von Skripten oder Batchdateien. Hier ist der Programmquelltext identisch mit dem Programm. |
Programme Skripte |
||
|
Wird ein Programm aufgerufen, gestartet oder ausgeführt, so spricht man von einem Prozess. Das Starten eines Programms kann dabei auch mehrere Prozesse starten. Prozesse sind selbständig ablaufende und von einander getrennte Einheiten. Allerdings sind sie nicht völlig unabhängig voneinander, sondern es gibt eine hierarchische Beziehung zwischen den Prozessen: jeder Prozess kann weitere "Child"-Prozesse haben und jeder Prozess hat einen "Parent". Aber abgesehen von der Entstehung sind die Prozesse durch das Betriebsystem strikt von einander abgeschirmt. Verschiedene Prozesse verwenden unterschiedliche Speicherbereiche und können unterschiedlichen Benutzern zugeordnet sein. |
Prozesse Tasks |
||
|
Zu jedem Prozess gehört eine Ausführungsumgebung - Environment - in der das Betriebsystem Informationen für und über den Prozess speichert. Mit Hilfe dieser Werte führt das Betriebsystem Buch über den Ressourcenbelegung eines Prozesses, z.B. stehen in der Umgebung der Benutzername des Anwenders, Zeiger auf die gerade geöffneten Dateien und andere wichtige Informationen. Diese Informationen kann das laufende Programm auslesen und für eigene Zwecke verwenden. Einen Teil der Variablen kann der Prozess nur lesen, andere können dagegen vom Prozess verändert werden und ein Prozess kann auch neue Umgebungsvariablen anlegen, die dann nur für diesen Prozess gültig sind. |
Umgebung Environment |
||
|
Ein laufendes Programm kann dem Betriebsystem die Anweisung geben, weitere Prozesse zu starten. Dazu dienen die Systemaufrufe fork() und exec(). Das Betriebsystem kopiert die aktuelle Prozessumgebung in einen neuen Speicherbereich. Dabei werden die zu diesem Zeitpunkt gültigen Inhalte mit übernommen, z.B. inclusive aller gerade geöffneten Dateien. In dieser Kopie der Umgebung wird dann das neue Programm ausgeführt - es "erbt" die Werte von seinem Parent-Prozess. Verändert der Child-Prozess nun die Inhalte der Umgebungsvariablen, so hat das keine Rückwirkungen auf den Parent, denn nach dem Kopieren sind beide Speicherbereiche voneinander getrennt. |
Systemaufrufe | ||
|
Aus der Sicht des Betriebsystems sind zwei Prozesse von einander getrennte Einheiten, die soweit möglich, parallel auszuführen sind, sich aber nicht gegenseitig beeinflussen sollen. Wenn man innerhalb eines Programms Teilabläufe gerne parallelisieren möchte, ist dieses Konzept zu starr. Die Sicherheitsbarrieren zwischen zwei Prozessen sind so hoch, daß sie nur mit hohem Aufwand umgangen werden können. Für die Parallelisierung von Aufgaben innerhalb eines Prozesses gibt es das Konzept der Threads. Diese Threads laufen innerhalb eines Prozesses ab und können daher leichter auf gemeinsame Daten zugreifen. Um Threads einsetzen zu können, ist jedoch neben der Unterstützung durch das Betriebsystem auch eine entsprechende Programmiersprache erforderlich, z.B. Java. |
Threads | ||
| >> |