- Prozess (Computer)
-
Der Prozess in der Informatik ist ein ablaufendes Programm.
Zum Ablauf ist das Speicherabbild des ausführbaren Programms (Code), Speicher für die Daten, weitere vom Betriebssystem bereitgestellte Betriebsmittel (Ressourcen) und ein Prozessor notwendig. Ein Prozess nutzt diese Ressourcen exklusiv. Notwendige Betriebsmittel zusammen mit Verwaltungsinformationen definieren den Prozesskontext.
Aus der Definition folgt: Es kann mehrere Prozesse zu einem Programm geben, die je nach Anwendung auch gleichzeitig oder nebenläufig ablaufen. Im einfachen Fall werden mehrere Prozesse von einem Prozessor abgearbeitet, allgemein werden mehreren Prozessoren mehrere Prozesse zugeordnet. Die Verwendung mehrerer Prozessoren muss von der verwendeten Hard- und Software inklusive Betriebssystem unterstützt sein.
Inhaltsverzeichnis
Prozessmodell
Ein Prozessor kann immer nur einen Prozess gleichzeitig verarbeiten. Bei den ersten Computern wurden daher Programme immer nacheinander als Ganzes verarbeitet, es konnte immer nur ein Programm zur gleichen Zeit (exklusiv) ablaufen. Auch Benutzer konnten einen Computer nicht gleichzeitig verwenden. Daher wurde die Möglichkeit geschaffen, Prozesse nur teilweise auszuführen, zu unterbrechen, und später wieder aufzusetzen und fortzuführen, was im Prozessmodell beschrieben wird.
Das Prozessmodell beschreibt die drei wesentlichen Zustände eines Prozesses:
- WARTEND: Der Prozess wartet auf die Zuteilung eines Prozessors
- LAUFEND: Der Prozess ist aktuell einem Prozessor zugeordnet und läuft ab.
- UNTERBROCHEN: Der Prozess wurde durch einen anderen Prozess unterbrochen.
Ein Betriebssystem benutzt eine bestimmte Strategie um Zeitabschnitte des Prozessors den Prozessen zuzuordnen, die ablaufen wollen. Dabei ändert das Betriebssystem eigenständig den Zustand eines jeden Prozesse zwischen WARTEND und LAUFEND hin und her, bis alle abgearbeitet ist; pro Zeiteinheit ist immer nur ein Prozess im Zustand LAUFEND.
Andere Prozesse können ebenfalls einen Prozess unterbrechen. Er ist dann im Zustand UNTERBROCHEN und wird vom Betriebssystem auch nicht mehr zeitweise in den Zustand LAUFEND versetzt. Erst wenn ein anderer Prozess den Prozess wieder aufsetzt und in den Zustand WARTEND bringt, ist das wieder der Fall.
Betriebssysteme benutzen unterschiedliche Strategien, ihren Prozessen Zeitabschnitte eines Prozessors zuzuordnen, siehe Scheduling und Dispatcher. Weit verbreitet ist das Zeitscheibenverfahren fester Länge verbunden mit einer priorisierten Warteschlange (Vorrangwarteschlange) als Ringpuffer (Round-Robin).
Threads (leichtgewichtige Prozesse)
Threads (auch „leichtgewichtige Prozesse“ genannt) haben zwar eigene Stapelspeicher, besitzen jedoch im Gegensatz zu Prozessen keine eigenen Betriebsmittel wie Speicher oder geöffnete Dateien. Sie laufen als Teil eines Prozesses und verwenden dessen Betriebsmittel.
DV-Technik
Prozesse beim Betriebssystem UNIX
Beim Betriebssystem Unix läuft in einem Prozess häufig nur ein einziger Aktivitätsträger (Thread). Die Arbeit mit mehreren Threads wird erst mit der pthreads Bibliothek, normiert als Standard POSIX 1003.1c (Quelle: Galileo Computing), ermöglicht. Hierbei bringt jedes UNIX System wie beispielsweise Solaris oder Linux eine eigene Implementation dieser Bibliothek mit. Bei der Anzeige der Prozesszustände wird der Zustand des Threads, der den Prozess repräsentiert, angegeben. Das sind folgende:
- dead: Der Prozess wurde beendet, er belegt jedoch noch Speicherplatz.
- ready: Der Prozess wartet auf Zuteilung der CPU (Zeitscheibe). Gibt es den ready-Zustand, so befinden sich höchstens so viele Prozesse im Zustand running, wie CPUs vorhanden sind.
- running: Entweder genau der Prozess, der gerade bearbeitet wird, oder alle Prozesse, die momentan Rechenarbeit verrichten können.
- sleep: Der Prozess wurde auf eigenen Wunsch zurückgestellt. Er kann Signale entgegennehmen, wie z. B. Timer, oder Ergebnisse von Kindprozessen.
- trace: Der Prozess wurde von außen angehalten, üblicherweise durch einen Debugger.
- wait: Der Prozess wartet auf ein Ereignis, üblicherweise eine Benutzereingabe.
- uninterruptible sleep: Der Prozess wartet auf ein Ereignis, üblicherweise Hardware. Tritt dieses Ereignis ein, ohne dass der anfragende Prozess es entgegennimmt, so kann das System instabil werden.
- zombie: Der Prozess wurde beendet und aus dem Arbeitsspeicher gelöscht, aber noch nicht aus der Prozessliste entfernt.
Unter Unix wird ein neuer Prozess mittels des Systemaufrufs fork (Gabelung) erzeugt. Dabei wird ein zweiter identischer Prozess gestartet, während der erzeugende Prozess (auch Elternprozess genannt) weiterläuft. Alle Daten des ersten Prozesses, beispielsweise auch geöffnete Dateien, werden für den zweiten Prozess kopiert und stehen für diesen nun getrennt zur Verfügung. Jeder Prozess hat seinen eigenen Speicher. Der zweite Prozess ist ein vollwertiger Prozess ohne Einschränkung. Beide Prozesse können dann eigenständig weiterlaufen.
Ein Prozess ist meistens unterteilt in drei Segmente:
- Text-Segment (hier ist der Code hinterlegt) (Shareable)
- Data-Segment (hier liegen die Daten des Threads)
- Stack-Segment (hier sind die Stacks des Threads gespeichert)
Ein typisches Code-Segment eines Prozesses sieht folgendermaßen aus (symbolischer Code):
Process p { result = fork(); if(result==0) { // wird von child ausgeführt } else { // wird von parent ausgeführt } }
Der Aufruf von
fork()
überschreibt den Rückgabewert des Parent-Prozesses mit der PID des Child-Prozesses, während der ChildProzess den Rückgabewert 0 erhält.Prozesse beim Betriebssystem Windows
Unter Windows heißen Prozesse Tasks. In neuen Windows-Versionen ist es üblich, mit mehreren Aktivitätsträgern (Threads) zu arbeiten. Der sogenannte „Task-Manager“ (seit Windows 2000) zeigt bei entsprechender Aktivierung der Anzeigespalte die Anzahl der zugehörigen Aktivitätsträger zu jedem Prozess.
Microsoft Windows NT seit Version 4.0 teilt den linearen Adressraum in der 32-Bit Version, bedingt durch eine Limitierung der MIPS-Architektur, in zwei jeweils 2 GB große Teile. Die unteren 2 GB des Virtuellen Adressraumes stehen dem jeweiligem User Mode-Prozess zur freien Verfügung (User Space), die oberen 2 GB sind für das System (Kernel Space), wie den Kernel, den physikalischen Speicher und in den Speicher „gemappte“ I/O-Adressbereiche wie z. B. PCI-Geräte, reserviert. Allerdings ist es möglich, diese Einteilung auf 3 GB Userspace und 1 GB Kernelspace zu verändern. Auf einem 32Bit-System sind somit maximal 3G virtuellen Adressraums für einen Benutzerprozess bei knapp unter 1 Gigabyte Hauptspeicher verwendbar. Bei 2 Gigabyte RAM reduziert sich dieser Anteil auf knapp 2G virtuellen Adressraums. (Quelle: Inside Microsoft Windows 2000, 3rd Ed. Microsoft Press)
Die Art der Prozesserzeugung hängt nun davon ab, in welchem Subsystem von Windows der Prozess erzeugt wird. Wird ein Prozess aus einem Unix-Executable erzeugt, wird das Posix-Subsystem (Posix.exe) gestartet und ein Prozess mit Hilfe von
fork.exe
erzeugt.Es läuft immer genau ein Thread im Windows-Subsystem, alle anderen Subsysteme müssen „manuell“ gestartet werden um Ressourcen zu sparen.
Ein Prozess wird automatisch beendet, wenn sein letzter Thread beendet ist.
Beenden von Prozessen
Prozesse können auf verschiedene Weise beendet werden. Wird ein Programm erfolgreich aufgerufen, so werden dessen Instruktionen nacheinander abgearbeitet.
- Natürliches Ende
Am Ende, nachdem alle Anweisungen ausgeführt wurden, wird das Programm normalerweise durch einen
exit()
Aufruf terminiert.- Beenden durch äußere Einflüsse
Der Benutzer kann einen Prozess vorzeitig durch Senden von Signalen beenden. In Unix geschieht dies durch den
kill
Befehl.- Vorzeitige Beendigung durch Programmfehler
Programmfehler führen oft zur Beendigung eines laufenden Prozesses. Programmfehler können sein:
-
- Unerlaubter Speicherzugriff
- Arithmetische Fehler wie z.B.: Division durch 0
- Unerlaubte Maschinenbefehle
- Systembedingtes Beenden
Das Betriebssystem kann ebenfalls einen Prozess vorzeitig beenden, wenn zum Beispiel kein freier Speicher mehr verfügbar ist, oder wenn ein unerwarteter Fehler in der Hardware oder im Betriebssystem aufgetaucht ist.
Weblinks
Siehe auch
Leerlaufprozess, Nebenläufigkeit, Prozesskontrollblock, Bernstein-Bedingung
Wikimedia Foundation.