Das Kefk Network Wiki befindet sich im Testbetrieb.


Prozess (Informatik)

Aus Kefk.

Wechseln zu: Navigation, Suche

Als Prozess wird in der Informatik der Ablauf eines Programms bezeichnet. Zum Ablauf ist das Speicherabbild des Programms, Speicher für die Daten, vom Betriebssystem bereitgestellte Ressourcen und ein Prozessor notwendig. Daher werden diese Betriebsmittel als zum Prozess zugehörig betrachtet. Allgemein spricht man von einem Programm in Ausführung. Ein Prozess kann auch als Code und Daten im Arbeitsspeicher plus Kontext (Register im Prozessor, Stack, Puffer, Filehandles) aufgefasst werden. Das definiert also, dass ein Prozess aus dem Speicherabbild, d. h. den Programmanweisungen und Daten, die im Hauptspeicher liegen, der Registerbelegung und Verwaltungsinformationen, z. B. der bisherigen verbrauchten CPU-Zeit, besteht.

Der eine oder gegebenenfalls mehrere Prozessoren werden in Multitasking-Betriebssystemen mehreren Prozessen, genauer deren Threads sequentiell zugeordnet. Die bei nicht zugeordnetem Prozessor gespeicherten Abbilder des Prozessor-Inhaltes (Register) gehören mit zum Prozess. Ein Prozess kann gegebenenfalls mehrere Threads umfassen, die aber im selben Speicherraum arbeiten, siehe auch Protected Mode.

Jede Ressource, die ein Thread anfordert, gehört dem Prozess und kann von anderen Threads dieses Prozesses benutzt werden.

Prozesse sind einerseits Handlungsträger in einer Rechenanlage, andererseits Objekte, denen Prozesskapazität (CPU-Kapazität) zugeteilt wird.

Inhaltsverzeichnis

Technische Umsetzung

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 befindet sich höchstens ein Prozess im Zustand running.
  • 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.

Prinzipiell gibt es unter Windows drei Möglichkeiten, einen Prozess zu erzeugen:

  1. System Calls
  2. Aufruf eines Executables
  3. Doppelklick auf Executable

Ein Prozess wird automatisch beendet, wenn sein letzter Thread beendet ist.

Weblinks

Siehe auch: Thread, Leerlaufprozess, Nebenläufigkeit, Prozesskontrollblock

Wikipedia
Dieses Dokument entstammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Es ist dort zu finden unter dem Stichwort Prozess_%28Informatik%29, die Liste der bisherigen Autoren befindet sich in der Versionsliste; die Originalfassung kann dort auch bearbeitet werden. Alle Texte der Wikipedia und ihre Derivate stehen unter der GNU-Lizenz für freie Dokumentation.
Persönliche Werkzeuge