Prozess (Computer) - Process (computing)

In der Datenverarbeitung ist ein Prozess die Instanz eines Computerprogramms , die von einem oder mehreren Threads ausgeführt wird . Es enthält den Programmcode und seine Aktivität. Abhängig vom Betriebssystem (OS) kann ein Prozess aus mehreren Ausführungs-Threads bestehen, die gleichzeitig Befehle ausführen .

Während ein Computerprogramm eine passive Sammlung von Anweisungen ist, die typischerweise in einer Datei auf einer Platte gespeichert sind, ist ein Prozess die Ausführung dieser Anweisungen, nachdem sie von der Platte in den Speicher geladen wurden. Mehrere Prozesse können demselben Programm zugeordnet sein; Beispielsweise führt das Öffnen mehrerer Instanzen desselben Programms oft dazu, dass mehr als ein Prozess ausgeführt wird.

Multitasking ist eine Methode, die es mehreren Prozessen ermöglicht, Prozessoren (CPUs) und andere Systemressourcen gemeinsam zu nutzen. Jede CPU (Kern) führt jeweils eine einzelne Aufgabe aus . Multitasking ermöglicht es jedoch jedem Prozessor, zwischen ausgeführten Tasks umzuschalten , ohne auf das Ende jeder Task warten zu müssen ( Preemption ). Abhängig von der Betriebssystemimplementierung können Umschaltungen durchgeführt werden, wenn Tasks Ein-/Ausgabevorgänge initiieren und auf den Abschluss warten , wenn eine Task die CPU freiwillig übergibt, bei Hardware- Interrupts und wenn der Betriebssystem-Scheduler entscheidet, dass ein Prozess seine Zeit abgelaufen ist CPU-Zeitanteil (zB durch den Completely Fair Scheduler des Linux-Kernels ).

Eine gängige Form von Multitasking ist das Time-Sharing der CPU, das eine Methode zur Verschachtelung der Ausführung von Benutzerprozessen und -threads und sogar unabhängiger Kernel-Tasks ist - obwohl letzteres nur in präemptiven Kerneln wie Linux möglich ist . Preemption hat einen wichtigen Nebeneffekt für interaktive Prozesse, denen gegenüber CPU-gebundenen Prozessen eine höhere Priorität eingeräumt wird, daher werden Benutzern beim einfachen Drücken einer Taste oder beim Bewegen einer Maus sofort Rechenressourcen zugewiesen. Darüber hinaus wird Anwendungen wie der Video- und Musikwiedergabe eine Art Echtzeitpriorität gegeben, die jedem anderen Prozess mit niedrigerer Priorität zuvorkommt. In Time-Sharing-Systemen werden Kontextwechsel schnell durchgeführt, was den Anschein erweckt, als würden mehrere Prozesse gleichzeitig auf demselben Prozessor ausgeführt. Diese gleichzeitige Ausführung mehrerer Prozesse wird als Nebenläufigkeit bezeichnet .

Aus Gründen der Sicherheit und Zuverlässigkeit verhindern die meisten modernen Betriebssysteme die direkte Kommunikation zwischen unabhängigen Prozessen und bieten eine streng vermittelte und kontrollierte Interprozess-Kommunikationsfunktionalität.

Darstellung

Eine Liste von Prozessen, wie sie von htop . angezeigt wird
Eine Prozesstabelle, wie sie von KDE System Guard angezeigt wird
Eine Prozesstabelle, wie sie von KDE System Guard angezeigt wird

Im Allgemeinen besteht ein Computersystemprozess aus (oder besitzt ) die folgenden Ressourcen:

  • Ein Bild des ausführbaren Maschinencodes, der einem Programm zugeordnet ist.
  • Speicher (normalerweise ein Bereich des virtuellen Speichers ); die den ausführbaren Code, prozessspezifische Daten (Eingabe und Ausgabe), einen Aufrufstapel (um aktive Subroutinen und/oder andere Ereignisse zu verfolgen ) und einen Heap zum Speichern von während der Laufzeit generierten Zwischenberechnungsdaten enthält.
  • Betriebssystemdeskriptoren von Ressourcen, die dem Prozess zugeordnet sind, wie Dateideskriptoren ( Unix- Terminologie) oder Handles ( Windows ) sowie Datenquellen und -senken.
  • Sicherheitsattribute , wie der Prozesseigner und die Berechtigungen des Prozesses (zulässige Operationen).
  • Prozessorzustand ( Kontext ), wie der Inhalt von Registern und die Adressierung des physikalischen Speichers. Der Zustand wird typischerweise in Computerregistern gespeichert, wenn der Prozess ausgeführt wird, und ansonsten im Speicher.

Das Betriebssystem speichert die meisten dieser Informationen über aktive Prozesse in Datenstrukturen, die als Prozesssteuerungsblöcke bezeichnet werden . Jede Teilmenge der Ressourcen, typischerweise zumindest der Prozessorzustand, kann jedem der Prozess- Threads in Betriebssystemen zugeordnet sein, die Threads oder Kindprozesse unterstützen .

Das Betriebssystem hält seine Prozesse getrennt und weist die benötigten Ressourcen zu, so dass es weniger wahrscheinlich ist, dass sie sich gegenseitig stören und Systemausfälle verursachen (z. B. Deadlock oder Thrashing ). Das Betriebssystem kann auch Mechanismen für die Kommunikation zwischen Prozessen bereitstellen , um es Prozessen zu ermöglichen, auf sichere und vorhersehbare Weise zu interagieren.

Multitasking und Prozessmanagement

Ein Multitasking- Betriebssystem kann einfach zwischen Prozessen wechseln, um den Anschein zu erwecken, dass viele Prozesse gleichzeitig ( dh parallel ) ausgeführt werden, obwohl tatsächlich nur ein Prozess gleichzeitig auf einer einzelnen CPU ausgeführt werden kann (es sei denn, die CPU hat mehrere Kerne). , dann können Multithreading oder andere ähnliche Technologien verwendet werden).

Es ist üblich, einen einzelnen Prozess mit einem Hauptprogramm und untergeordnete Prozesse mit beliebigen parallelen Spin-off-Prozessen zu verknüpfen, die sich wie asynchrone Unterprogramme verhalten . Ein Prozess besitzt Ressourcen, von denen ein Abbild seines Programms (im Speicher) eine solche Ressource ist. In Mehrprozessorsystemen können jedoch viele Prozesse von demselben wiedereintretenden Programm an derselben Speicherstelle ablaufen oder sich dieses teilen, aber jeder Prozess besitzt sein eigenes Abbild des Programms.

Prozesse werden in eingebetteten Betriebssystemen oft als "Aufgaben" bezeichnet. Der Sinn von "Prozess" (oder Aufgabe) ist "etwas, das Zeit in Anspruch nimmt", im Gegensatz zu "Erinnerung", das "etwas ist, das Platz einnimmt".

Die obige Beschreibung gilt sowohl für Prozesse, die von einem Betriebssystem verwaltet werden, als auch für Prozesse, die durch Prozesskalküle definiert sind .

Wenn ein Prozess etwas anfordert, auf das er warten muss, wird er blockiert. Wenn sich der Prozess im blockierten Zustand befindet , kann er auf die Festplatte ausgelagert werden, dies ist jedoch in einem virtuellen Speichersystem transparent, in dem sich Bereiche des Arbeitsspeichers eines Prozesses zu jeder Zeit tatsächlich auf der Festplatte und nicht im Hauptspeicher befinden können. Beachten Sie, dass sogar Teile von aktiven Prozessen/Aufgaben (ausführende Programme) zum Auslagern auf die Festplatte geeignet sind, wenn die Teile in letzter Zeit nicht verwendet wurden. Nicht alle Teile eines ausgeführten Programms und seine Daten müssen sich im physischen Speicher befinden, damit der zugehörige Prozess aktiv ist.

Prozesszustände

Die verschiedenen Prozesszustände, dargestellt in einem Zustandsdiagramm , mit Pfeilen, die mögliche Übergänge zwischen den Zuständen anzeigen.

Ein Betriebssystem- Kernel , der Multitasking ermöglicht, benötigt bestimmte Zustände von Prozessen . Namen für diese Zustände sind nicht standardisiert, aber sie haben eine ähnliche Funktionalität.

  • Zuerst wird der Prozess "erstellt", indem er von einem sekundären Speichergerät ( Festplatte , CD-ROM usw.) in den Hauptspeicher geladen wird . Danach weist ihm der Prozess-Scheduler den Zustand "Warten" zu.
  • Während der Prozess "wartet", wartet er darauf, dass der Scheduler einen sogenannten Kontextwechsel durchführt . Die Kontextumschaltung lädt den Prozess in den Prozessor und ändert den Zustand in "Läuft", während der vorher "laufende" Prozess in einem "Warten"-Zustand gespeichert wird.
  • Wenn ein Prozess im Status "running" auf eine Ressource warten muss (z. B. auf Benutzereingaben oder das Öffnen einer Datei warten), wird ihm der Status "blocked" zugewiesen. Der Prozesszustand wird wieder auf "Wartend" geändert, wenn der Prozess nicht mehr warten muss (im blockierten Zustand).
  • Sobald der Prozess die Ausführung beendet oder vom Betriebssystem beendet wird, wird er nicht mehr benötigt. Der Prozess wird sofort entfernt oder in den Zustand "beendet" versetzt. Wenn es entfernt wird, wartet es nur darauf, aus dem Hauptspeicher entfernt zu werden.

Interprozesskommunikation

Wenn Prozesse miteinander kommunizieren müssen, müssen sie Teile ihrer Adressräume teilen oder andere Formen der Interprozesskommunikation (IPC) verwenden. In einer Shell-Pipeline muss beispielsweise die Ausgabe des ersten Prozesses an den zweiten übergeben werden, und so weiter; Ein weiteres Beispiel ist eine Aufgabe, die in kooperierende, aber teilweise unabhängige Prozesse zerlegt werden kann, die gleichzeitig ausgeführt werden können (dh unter Verwendung von Parallelität oder echter Parallelität - das letztere Modell ist ein Sonderfall der gleichzeitigen Ausführung und ist machbar, wenn genügend CPU-Kerne verfügbar sind für alle Prozesse, die zur Ausführung bereit sind).

Es ist sogar möglich, dass zwei oder mehr Prozesse auf unterschiedlichen Maschinen laufen, auf denen unterschiedliche Betriebssysteme (OS) laufen, daher sind einige Mechanismen für die Kommunikation und Synchronisation (genannt Kommunikationsprotokolle für verteiltes Rechnen) erforderlich (z. B. das Message Passing Interface, oft einfach als MPI bezeichnet ).

Geschichte

In den frühen 1960er Jahren hatte sich die Computersteuerungssoftware von einer Monitorsteuerungssoftware , zum Beispiel IBSYS , zu einer Steuerungssoftware für die Ausführung entwickelt . Im Laufe der Zeit wurden Computer immer schneller, während die Computerzeit weder billig noch voll ausgenutzt war; eine solche Umgebung machte Multiprogramming möglich und notwendig. Multiprogramming bedeutet, dass mehrere Programme gleichzeitig laufen . Anfangs liefen aufgrund der zugrunde liegenden Einprozessor- Computerarchitektur mehr als ein Programm auf einem einzigen Prozessor , und sie teilten sich knappe und begrenzte Hardware-Ressourcen; folglich war die Nebenläufigkeit serieller Natur. Auf späteren Systemen mit mehreren Prozessoren können mehrere Programme gleichzeitig parallel laufen .

Programme bestehen aus Befehlsfolgen für Prozessoren. Ein einzelner Prozessor kann nur einen Befehl gleichzeitig ausführen: Es ist unmöglich, mehrere Programme gleichzeitig auszuführen. Ein Programm benötigt möglicherweise eine Ressource , z. B. ein Eingabegerät, das eine große Verzögerung aufweist, oder ein Programm startet möglicherweise einen langsamen Vorgang, z. B. das Senden einer Ausgabe an einen Drucker. Dies würde dazu führen, dass der Prozessor "im Leerlauf" (unbenutzt) ist. Um den Prozessor zu jeder Zeit beschäftigt zu halten, wird die Ausführung eines solchen Programms angehalten und das Betriebssystem schaltet den Prozessor um, um ein anderes Programm auszuführen. Für den Benutzer erscheint es, als ob die Programme gleichzeitig laufen (daher der Begriff "parallel").

Kurz darauf wurde der Begriff „Programm“ auf den Begriff „ausführendes Programm und sein Kontext“ erweitert. Das Konzept eines Prozesses war geboren, der auch mit der Erfindung des wiedereintretenden Codes notwendig wurde . Threads kamen etwas später. Mit dem Aufkommen von Konzepten wie Time-Sharing , Computernetzwerken und Multi-CPU- Shared-Memory- Computern wich das alte "Multiprogramming" jedoch echtem Multitasking , Multiprocessing und später Multithreading .

Siehe auch

Anmerkungen

Verweise

Weiterlesen

Externe Links