Prozess (Informatik)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Die fraglichen Angaben werden daher möglicherweise demnächst entfernt. Bitte hilf der Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst. Näheres ist eventuell auf der Diskussionsseite oder in der Versionsgeschichte angegeben. Bitte entferne zuletzt diese Warnmarkierung.
Der Artikel fußt auf einem einzigen Beleg, und das ist der Duden Informatik! Dazu keine Literatur. Für einen so zentralen Begriff entschieden zu wenig. -ZT (Diskussion) 01:05, 6. Dez. 2013 (CET)

Ein Prozess ist in der Informatik „der Vorgang einer algorithmisch ablaufenden Informationsverarbeitung“. Als Spezialfall „in Betriebssystemen ist ein Prozess ein Vorgang, der durch ein Programm kontrolliert wird, welches zur Ausführung einen Prozessor benötigt“ (Duden Informatik).[1]

Zum Prozess gehören das Programm samt Daten und der Prozesskontext.

Prozessmodell[Bearbeiten]

Ein Prozessor(kern) kann immer nur einen Prozess gleichzeitig verarbeiten. Bei den ersten Computern wurden daher die Programme immer nacheinander als Ganzes verarbeitet, es konnte immer nur ein Programm zur gleichen Zeit (exklusiv) ablaufen. Es konnten auch nicht mehrere Benutzer einen Computer gleichzeitig unabhängig voneinander verwenden. Daher wurde die Möglichkeit geschaffen, Prozesse nur teilweise auszuführen, zu unterbrechen und später wieder aufzusetzen und fortzuführen. Durch schnelles Abwechseln können mehrere Prozesse quasi-gleichzeitig ausgeführt werden. Das Prozessmodell beschreibt die drei wesentlichen Prozesszustände, die je nach Ausgestaltung um weitere ergänzt werden können:

  • BEREIT: Der Prozess besitzt alle benötigten Betriebsmittel (Ressourcen) (bis auf den Prozessor(kern)) und wartet auf seine weitere Ausführung.
  • LAUFEND: Der Prozess ist aktuell einem Prozessor(kern) zugeordnet und läuft auf diesem ab.
  • WARTEND: Der Prozess wurde unterbrochen und wartet auf eine nicht-Prozessorkern-Ressource. Wenn die Zuteilung erfolgt ist, wird er zunächst wieder in den Zustand BEREIT versetzt.

Die Prozesse werden vom Prozess-Scheduler des Betriebssystems verwaltet. Er führt entsprechende Listen und versucht, wartenden Prozessen möglichst schnell die benötigten Ressourcen zuzuteilen, teilt ausführungsbereiten Prozessen Zeitschlitze zu und startet sie.

Ein laufender Prozess kann durch drei Ereignisse unterbrochen werden:

  • Ablauf seines Zeitschlitzes, meist als Ablauf eines Hardware-Timers, der dann einen Hardware-Interrupt auslöst.
  • Hardware-Interrupt; ein (unvorhergesehenes) Ereignis eines Geräts, zum Beispiel ein Tastendruck auf der Tastatur.
  • eigener Wunsch; der Prozess benötigt eine Dienstleistung des Betriebssystems oder hat seine Arbeit beendet.

Der dann wieder aktive Prozess-Scheduler regelt das weitere Vorgehen.

Betriebssysteme benutzen unterschiedliche Strategien, ihren Prozessen Zeitabschnitte eines Prozessor(kern)s zuzuordnen, siehe Scheduling und Dispatcher. Weit verbreitet ist das Zeitscheibenverfahren fester Länge verbunden mit einer priorisierten Warteschlange (Vorrangwarteschlange) als Ringpuffer (Round-Robin).

Threads[Bearbeiten]

Hauptartikel: Thread (Informatik)

Ein Thread (im Sinne der Informatik) – auch leichtgewichtiger Prozess genannt – ist eine Erweiterung des Prozessmodells. Er teilt sich mit anderen Threads die Betriebsmittel (Systemressourcen) sowie den Prozesskontext eines Prozesses und besitzt nur den eigenen Stapelspeicher (Stack).
Bei betriebssystemunterstützten Threads können diese durch mehrere CPU-Kerne echt parallel ausgeführt werden.

Prozesskontext[Bearbeiten]

Beim Kontext wird zwischen dem Hardwarekontext und dem Softwarekontext unterschieden.

Der Hardwarekontext wird gebildet aus dem Speicherabbild des ausführbaren Programms (Code), Speicher für die Daten, weitere vom Betriebssystem bereitgestellte Betriebsmittel (Ressourcen) und der zugeordnete Prozessor (sowie i. A. der zugehörige Prozessorkern). Ein Prozess nutzt diese Ressourcen exklusiv, d. h. insbesondere, dass andere Prozesse nicht auf seinen Adressraum zugreifen dürfen und seine Daten somit nur ihm zugänglich sind (dies ist auch der Hauptunterschied zum Thread, der im gemeinsamen Adressraum seines Gesamtprozesses läuft).

Der Softwarekontext enthält Verwaltungsinformationen, auch über erforderliche Betriebsmittel.

Prozesskommunikation[Bearbeiten]

Selten gibt es mehrere Prozesse zu einem Programm, die je nach Anwendung auch gleichzeitig oder nebenläufig ablaufen. Damit sie zusammenarbeiten können, bietet das Betriebssystem meist Wege zur Interprozesskommunikation an. Im einfachen Fall werden mehrere Prozesse von einem Prozessor(kern) abgearbeitet (quasi-gleichzeitig, Multitasking), allgemein werden mehreren Prozessorkernen mehrere Prozesse zugeordnet (echt gleichzeitig, Multiprocessing). Die Verwendung mehrerer Prozessorkerne sowie das quasi-gleichzeitige Abarbeiten verschiedener Prozesse auf einem Kern muss von der verwendeten Hard- und Software inklusive Betriebssystem unterstützt werden. Moderne Betriebssysteme kombinieren Multitasking und Multiprocessing.

DV-Technik[Bearbeiten]

Prozesse beim Betriebssystem UNIX[Bearbeiten]

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 (Zeitschlitz). 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:

  • Textsegment: Hier ist der Code hinterlegt (shareable).
  • Datensegment: 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 Child-Prozess den Rückgabewert 0 erhält.

Prozesse beim Betriebssystem Windows[Bearbeiten]

Unter Windows heißen Prozesse Tasks. In diesem Kontext wird also Task mit Prozess gleichgesetzt. Dies ist die am weitesten verbreitete Bedeutung von „Task“. Ein Task kann jedoch mehrere Prozesse enthalten.

In neuen Windows-Versionen ist es üblich, mit mehreren Aktivitätsträgern (Threads) zu arbeiten. Der sogenannte Taskmanager (seit Windows NT 4.0) 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 jeweiligen User-Mode-Prozess zur freien Verfügung (User Space), die oberen 2 GB sind für Einblendungen von Systembereichen reserviert (Kernel Space), wie Kernel-Treiber, Bibliotheken und in den Speicher „gemappte“ I/O-Adressbereiche wie z. B. PCI-Geräte. Allerdings ist es möglich, diese Einteilung auf 3 GB Userspace und 1 GB Kernelspace zu verändern. Auf einem 32-Bit-System sind somit maximal 3 GB virtuellen Adressraums für einen Benutzerprozess verwendbar. (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 endet, wenn sein letzter Thread beendet wurde, existiert dann aber u. U. noch als Zombie-Prozess, bis der Vaterprozess den Beendigungsstatus abfragt.

Andere Verwendungen des Begriffs „Task“[Bearbeiten]

Manchmal wird ein Task als Subprozess angesehen, er steht dann synonym zu Thread.

Die Begriffe Multitasking und Taskwechsel werden gelegentlich nicht nur auf Prozesse, sondern (fälschlicherweise) auch auf Threads bezogen, statt korrekterweise von Multithreading und Threadwechsel zu sprechen. Dann wird meist Task als Oberbegriff für Prozess und Thread gesehen.

Beenden von Prozessen[Bearbeiten]

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 Befehl kill.

  • 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.

Siehe auch[Bearbeiten]

Einzelnachweis[Bearbeiten]

  1. Duden Informatik, ISBN 3-411-05232-5.

Weblinks[Bearbeiten]