Alles rund um Windows

Windows: Prozesse, Threads und Jobs

Windows: Prozesse, Threads und Jobs

Prozesse, Threads und Jobs sind wichtige Konzepte im Zusammenhang mit Programmen, die auf einem Computer ausgeführt werden. Wir beginnen daher mit einer Definition dieser Begriffe.

Inhaltsverzeichnis

Prozess

Wenn wir ein Programm starten und es in den Arbeitsspeicher des Computers geladen wird, haben wir einen Prozess, also ein Programm, das auf dem Computer ausgeführt wird.

Thread

Ein Thread ist eine Einheit von Code, die im Prozessor ausgeführt wird. Ein Thread gehört zu einem Prozess und wird als dynamischer Teil eines Prozesses bezeichnet.

Faser

Eine Faser ist eine Art Thread und wird oft als leichtgewichtiger Thread bezeichnet. Eine Faser wird anders geplant als gewöhnliche Threads.

Job

Windows kann Prozesse, die zusammenarbeiten, zu einer Gruppe zusammenfassen, die als Job bezeichnet wird.

Prozesse

Ein Computerprogramm besteht aus einer oder mehreren Dateien auf einer Festplatte, die Code und Programmressourcen enthalten. Wenn ein Programm gestartet und in den Speicher eines Computers geladen wird, handelt es sich um einen Prozess. Ein Prozess ist also ein Programm, das auf einem Computer ausgeführt wird. Ein Programm kann mehrere Prozesse auf einem Computer erzeugen, wenn das Programm mehrmals hintereinander gestartet wird.

Ein Prozess ist eine Aufgabe, die auf einem Computer ausgeführt wird. Ein Prozessor führt einen Prozess aus, indem er den Code des Prozesses ausführt. Auf einem Computer gibt es oft viele Prozesse, aber nur einen oder wenige Prozessoren. Wenn es also mehr Prozesse als Prozessoren gibt, müssen sie nacheinander auf dem Prozessor oder den Prozessoren ausgeführt werden.

Ein Prozess besteht aus zwei Teilen:

  • dem statischen Teil
  • dem dynamischen Teil

Der statische Teil eines Prozesses sind Ressourcen auf Ihrem Computer, die der Prozess nutzt. Der statische Teil eines Prozesses kann aus einem Teil des Speichers bestehen, der zu dem Prozess gehört, einem Verzeichnis, einer geöffneten Datei und anderen zugehörigen Ressourcen.

Der dynamische Teil eines Prozesses besteht aus einem oder mehreren Threads. Der dynamische Teil eines Prozesses ist ein Programmcode, der auf Ihrem Computer ausgeführt wird, d. h. als eine Reihe von Befehlen, die nacheinander im Prozessor ausgeführt werden.

Screenshot: Task-Manager in Windows

Im Windows-Betriebssystem wird ein Prozess wie folgt definiert:

Ein Prozess ist ein Container im Speicher mit den Ressourcen, die zum Ausführen eines Programms auf dem Computer erforderlich sind.

Ein Windows-Prozess besteht aus:

  1. Einem Adressraum, der aus einer Reihe virtueller Adressen besteht.
  2. Einem ausführbaren Programm.
  3. Mindestens einer Zeile Code, die im Prozessor ausgeführt werden soll. Eine Liste von Handles zu verschiedenen Systemressourcen.
  4. Eine eindeutige Prozess-ID, die zur Identifizierung des Prozesses verwendet wird.
  5. Eine Sicherheitsstruktur, die den Zugriff auf den Prozess steuert.

Für jeden laufenden Prozess verfügt das Betriebssystem über eine Struktur namens Prozessdeskriptor, die die folgenden Informationen enthält:

  • Den Namen des Prozesses.
  • Die Startzeit des Prozesses.
  • Den Status des Prozesses.
  • Eine Liste der mit dem Prozess verbundenen Threads.
  • Eine Beschreibung der Adressen im Speicher.
  • Eine Liste der Ressourcen, die zu dem Prozess gehören.

Der Prozessmanager kümmert sich um Prozesse, Threads und die zu den Prozessen gehörenden Ressourcen. Der Prozessmanager steuert daher die Aktivitäten des Prozesses und die vom Prozess verwendeten Ressourcen.

Threads

Ein Thread besteht aus Code, der im Prozessor ausgeführt wird. Ein Prozess kann einen oder mehrere Threads erstellen. Wenn ein Prozess mehrere Threads enthält, werden diese unabhängig voneinander ausgeführt und konkurrieren um Zeit im Prozessor.

Ein Prozess mit nur einem Thread ist ein Single-Thread-Prozess, während ein Prozess mit mehreren Threads als Multithread-Prozess bezeichnet wird. Der Vorteil von Multithread-Prozessen besteht darin, dass sie verschiedene Aufgaben gleichzeitig ausführen können.

Warum mehrere Threads verwenden?

Ein Grund für die Verwendung mehrerer Threads in einer Anwendung ist, dass mehrere Aktivitäten gleichzeitig ablaufen. Eine dieser Aktivitäten kann manchmal unterbrochen werden, beispielsweise beim Warten auf eine Eingabe des Benutzers. In diesem Fall kann es sinnvoll sein, wenn andere Aktivitäten unabhängig davon weiterlaufen können, was möglich ist, wenn es sich um separate Threads handelt.

Die Verwendung mehrerer Threads ist besonders von Vorteil auf Computern mit mehreren Prozessoren, da die Threads parallel ausgeführt werden und so die Geschwindigkeit erhöhen.

Da Threads um Prozessorzeit konkurrieren, hat jeder Thread einen Status. Der Status ist entweder aktiv oder inaktiv, was bedeutet, dass ein Thread entweder im Prozessor aktiv ist oder sich im Standby-Modus befindet.

ZustandBeschreibung
Blocked (blockiert)Der Thread befindet sich im Wartezustand
Ready (bereit)Der Thread kann nun in den Prozessor geladen werden
Active (aktiv)Der Thread wird im Prozessor ausgeführt

In Windows ist ein Thread ein Prozessobjekt, dem das Betriebssystem Prozessorzeit zuweist. Der Prozess selbst ist ein primärer Thread, der andere Threads starten kann. Der Prozess verfügt über eine Liste mit den Threads, die zu diesem Prozess gehören.

Ein Thread verfügt über einen Thread-Deskriptor im Speicher des Computers mit Informationen über den Thread. Ein Thread-Deskriptor ist eine Datenstruktur, die das Betriebssystem verwendet, um Informationen zu erhalten, die es zur Verarbeitung eines Threads benötigt, und enthält die folgenden Informationen über den Thread:

  • Eine Beschreibung des Threads.
  • Der Status des Threads.
  • Die Startzeit für den Thread.
  • Ein Verweis auf den Prozessdeskriptor.
  • Eine Liste der mit dem Thread verbundenen Threads.
  • Ein Verweis auf die Ressourcen des Threads.

Alle Threads in einem Prozess haben gemeinsamen Zugriff auf die zum Prozess gehörenden Ressourcen. Die meisten von einem Thread verwendeten Ressourcen werden dem Prozess zugewiesen, obwohl Ressourcen auch direkt einem Thread zugewiesen werden können.

In der Regel laufen auf einem Computer viele Threads gleichzeitig, weshalb das Betriebssystem ihnen Zeit in den Prozessoren zuweisen muss. Ein Prozessor führt einen Thread nach dem anderen aus und wechselt somit ständig zwischen den ausgeführten Threads.

Context Switching ist der Vorgang, bei dem ein Thread aus dem Prozessor entfernt und ein neuer Thread geladen wird. Wenn Context Switching einen Thread aus dem Prozessor entfernt hat, befindet sich der Thread im Standby-Status. Alle Informationen über den Thread werden dann gespeichert, damit der Thread beim nächsten Mal, wenn er in den Prozessor gelangt, auf die gleiche Weise weiterlaufen kann.

Im Allgemeinen konkurrieren mehrere Threads um den Zugang zum Prozessor. Die Ablaufplanung bestimmt die Reihenfolge, in der die Threads in den Prozessor gelangen, sodass die Hauptaufgabe eines Schedulers darin besteht, die Zeit im Prozessor für die Threads bestmöglich zuzuweisen.

Eine Möglichkeit, die Ablaufplanung zu organisieren, besteht darin, den Threads unterschiedliche Prioritäten zuzuweisen, da Threads mit einer hohen Priorität leichter Zugang zum Prozessor haben als solche mit einer niedrigen Priorität.

Fibers

Fibers sind relativ neu im Windows-Betriebssystem und wurden in Windows Vista eingeführt. Eine Fiber ist Code, der wie ein Thread im Prozessor ausgeführt wird. Eine Fiber ist ein Sub-Thread, der zu einem herkömmlichen Thread gehört, und Fibers werden oft als Lightweight-Threads bezeichnet.

Eine Fiber ist eine Ausführungseinheit, die manuell von der Anwendung geplant werden muss. Fibers ermöglichen es einer Anwendung, ihre eigenen Ausführungsthreads zu planen, anstatt sich auf die in das Windows-Betriebssystem integrierten prioritätsbasierten Planungsmechanismen zu verlassen. In Bezug auf die Planung sind sie für den Kernel unsichtbar, da sie im Benutzermodus implementiert sind.

Fibers benötigen weniger Unterstützung durch das Betriebssystem als Threads und können im Gegensatz zu Threads kooperatives Multitasking verwenden. Kooperatives Multitasking bedeutet, dass ein Thread so lange im Prozessor verbleibt, bis er freiwillig seinen Platz freigibt.

Scrennshot: Beziehung zwischen Prozessen, Threads und Fibers

Ein Vorteil von Fibers ist, dass es einfach ist, in einem Prozessor von einer Fiber zu einer anderen zu wechseln. Um zwischen Fibers zu wechseln, müssen lediglich einige Register gespeichert und gelesen werden, während für den Wechsel zwischen Threads diese den Kernel verlassen oder in ihn eintreten müssen.

Die Verwendung von Fibers ist in der Regel nicht ratsam. Der Grund dafür ist, dass sie für den Kernel unsichtbar sind. Außerdem können Fibers nicht gleichzeitig auf mehr als einem Prozessor ausgeführt werden und sind auf die Zusammenarbeit durch Multitasking beschränkt.

Die Verwendung von Threads und die Steuerung der Planung durch den Windows-Kernel ist in der Regel die beste Lösung. Das Gruppieren von Prozessen in einem Job ist nur dann sinnvoll, wenn die Prozesse zusammenarbeiten müssen.

Im Windows-Betriebssystem ist ein Job ein Objekt. Die Funktion eines Jobobjekts besteht darin, Gruppen von Prozessen als Einheit zu verwalten. Ein Jobobjekt ist ein Kernelobjekt mit einem Namen, das eine hohe Sicherheit aufweist.

Der Prozessmanager

Ein Prozessmanager verwaltet Prozesse und Threads und übernimmt die folgenden Aufgaben:

  • Starten und Beenden von Prozessen und Threads.
  • Bereitstellung von Parametern und Eigenschaften von Prozessen und Threads.
  • Zuweisung von Ressourcen zu Prozessen und Threads.
  • Implementierung von Ein- und Ausgaben.
  • Implementierung von Adressen im Speicher.

Der Prozessmanager führt keine Operationen für Prozesse und Threads wie Scheduling und Synchronisation durch. Diese Operationen werden vom Kernel übernommen.

Multitasking

Früher hatte ein PC nur einen Prozessor, der jeweils nur einen Thread ausführen konnte. Dies ist ausreichend, wenn nur ein Programm auf Ihrem Computer läuft, wie es bei den ersten PCs der Fall war. Mit der Entwicklung grafischer Betriebssysteme wurde es jedoch möglich, mehrere Programme in verschiedenen Fenstern auszuführen. Daher mussten Computer in der Lage sein, mehrere Programme gleichzeitig auszuführen. Infolgedessen benötigt ein Betriebssystem wie Windows Multitasking.

Windows unterstützt Multitasking, was bedeutet, dass zwei oder mehr Threads gleichzeitig auf einem Prozessor ausgeführt werden können, wobei sie sich im Prozessor abwechseln.

Multitasking ermöglicht es einem Benutzer, mehrere Anwendungen gleichzeitig auszuführen und zwischen den Anwendungen zu wechseln. Wenn Sie beispielsweise gleichzeitig mit einem Textverarbeitungsprogramm und einer Tabellenkalkulation arbeiten, können Sie die Daten aus der Tabellenkalkulation durch Ausschneiden und Einfügen in den Editor übertragen.

Ein Multitasking-Betriebssystem gibt den Threads, die sie benötigen, Prozessorzeit. Multitasking wird durch Kontextwechsel erreicht. Bei der Verwendung von Kontextwechseln läuft ein Thread im Prozessor, bis das Betriebssystem ihn unterbricht oder der Thread den Prozessor freiwillig verlässt.

Wir unterscheiden zwischen zwei Arten von Multitasking:

  • Kooperatives Multitasking.
  • Präemptives Multitasking.

Beim kooperativen Multitasking teilen sich Programme die CPU-Zeit untereinander auf. Ein Thread belegt den Prozessor, bis er ihn freiwillig freigibt.

Präemptives Multitasking stellt sicher, dass die verschiedenen Prozesse nur für kurze Zeit im Prozessor laufen. Ein Thread kann nur für ein Zeitintervall, das als Quantum bezeichnet wird, im Prozessor sein. Wenn ein Quantum beendet ist, führt das Betriebssystem automatisch einen Kontextwechsel durch.

Kommunikation zwischen Prozessen

Interprozesskommunikation ist die Interaktion zwischen einem Thread in einem Prozess mit einem Thread in einem anderen Prozess. Dies gilt, wenn:

  • Die Prozesse auf demselben Computer laufen.
  • Die Prozesse sich auf verschiedenen Computern befinden.

Die Kommunikation zwischen Prozessen auf demselben Computer ist recht einfach. Das Betriebssystem kann Daten aus dem Speicher des sendenden Threads in den Speicher des empfangenden Threads kopieren.

Die Kommunikation zwischen Prozessen auf verschiedenen Computern läuft wie folgt ab. Das Betriebssystem auf dem sendenden Computer kopiert die Daten aus seinem Speicher in eine Kommunikationseinheit. Die Kommunikationseinheit sendet die Daten dann an den empfangenden Computer.

Das Windows-Betriebssystem verfügt über mehrere Mechanismen zur Unterstützung der Kommunikation zwischen Prozessen:

Zwischenablage

Die Zwischenablage wird häufig verwendet, um Daten von einer Anwendung in eine andere zu übertragen. Wenn ein Benutzer Daten aus einer Anwendung kopiert oder ausschneidet, können diese Daten durch Einfügen in eine andere Anwendung übertragen werden.

Dateizuordnung

Die Dateizuordnung ist eine Möglichkeit für einen Prozess, den Inhalt einer Datei so zu verwalten, als befände er sich im Speicher des Prozesses. Der Prozess kann einen Zeiger verwenden, um Daten aus der Datei abzurufen und den Inhalt der Datei zu ändern. Die Dateizuordnung ist eine einfache Methode für zwei oder mehr Prozesse, um Daten auszutauschen, erfordert jedoch eine Synchronisierung.

Pipes

Pipes sind ein einfaches Modell für die Prozesskommunikation. Ein Thread schreibt Daten in einen Puffer, sodass ein anderer Thread die Daten aus dem Puffer lesen kann. Wir unterscheiden zwischen zwei Arten von Pipes: Anonyme Pipes und benannte Pipes.

Anonyme Pipes können außerdem zur Übertragung von Daten zwischen Threads im selben Prozess verwendet werden.

Benannte Pipes können Daten von einer Anwendung zu einer anderen Anwendung auf einem Computer übertragen sowie Daten von einem Computer zu einem anderen Computer über ein Netzwerk übertragen. Benannte Pipes haben einen Namen, anhand dessen andere Prozesse sie identifizieren können. In Windows basieren benannte Pipes auf einer Client-Server-Kommunikation, die der von Sockets ähnelt.

Diese Artikel könnte Sie ebenfalls interessieren: