Computer-Multitasking - Computer multitasking

Moderne Desktop-Betriebssysteme sind in der Lage, eine Vielzahl unterschiedlicher Prozesse gleichzeitig abzuwickeln. Dieser Screenshot zeigt Linux Mint, das gleichzeitig die Xfce- Desktop-Umgebung, Firefox , ein Taschenrechnerprogramm, den integrierten Kalender, Vim , GIMP und den VLC-Mediaplayer ausführt .
Multitasking-Fähigkeiten von Microsoft Windows 1.0 1 aus dem Jahr 1985, hier gezeigt, wie die Programme MS-DOS Executive und Calculator ausgeführt werden

In der Berechnung , Multitasking ist die gleichzeitige Ausführung mehrerer Tasks (auch bekannt als Prozess über einen bestimmten Zeitraum). Neue Aufgaben können bereits begonnene Aufgaben unterbrechen, bevor sie abgeschlossen sind, anstatt auf ihr Ende zu warten. Als Ergebnis führt ein Computer Segmente mehrerer Tasks in einer verschachtelten Weise aus, während die Tasks gemeinsame Verarbeitungsressourcen wie etwa Zentraleinheiten (CPUs) und Hauptspeicher teilen . Multitasking unterbricht automatisch das laufende Programm, speichert seinen Zustand (Teilergebnisse, Speicherinhalte und Computerregisterinhalte) und lädt den gespeicherten Zustand eines anderen Programms und überträgt die Kontrolle darauf. Dieser " Kontextwechsel " kann in festen Zeitintervallen eingeleitet werden ( präemptives Multitasking ), oder das laufende Programm kann codiert sein, um der Überwachungssoftware zu signalisieren, wann es unterbrochen werden kann ( kooperatives Multitasking ).

Multitasking erfordert nicht die parallele Ausführung mehrerer Aufgaben gleichzeitig; Stattdessen ermöglicht es mehr als eine Aufgabe, über einen bestimmten Zeitraum fortzuschreiten. Auch auf Multi - Prozessor - Computern ermöglicht Multitasking viele weitere Aufgaben ausgeführt werden , als es CPUs sind.

Multitasking ist ein häufiges Merkmal von Computerbetriebssystemen. Es ermöglicht eine effizientere Nutzung der Computerhardware; wo ein Programm auf ein externes Ereignis wartet, wie beispielsweise eine Benutzereingabe oder eine Eingabe/Ausgabe- Übertragung mit einem Peripheriegerät, um abgeschlossen zu werden, kann der Zentralprozessor immer noch mit einem anderen Programm verwendet werden. In einem Time-Sharing- System verwenden mehrere menschliche Bediener denselben Prozessor, als ob er für ihre Verwendung bestimmt wäre, während der Computer hinter den Kulissen viele Benutzer bedient, indem er ihre individuellen Programme multitaskingfähig macht. In Multiprogramming- Systemen läuft eine Task, bis sie auf ein externes Ereignis warten muss oder bis der Scheduler des Betriebssystems die laufende Task zwangsweise aus der CPU auslagert. Echtzeitsysteme , wie sie zur Steuerung von Industrierobotern entwickelt wurden, erfordern eine zeitnahe Verarbeitung; ein einzelner Prozessor könnte zwischen Berechnungen der Maschinenbewegung, Kommunikation und Benutzerschnittstelle geteilt werden.

Multitasking-Betriebssysteme enthalten häufig Maßnahmen zur Änderung der Priorität einzelner Tasks, sodass wichtige Jobs mehr Prozessorzeit erhalten als weniger bedeutsame. Je nach Betriebssystem kann eine Task so groß wie ein gesamtes Anwendungsprogramm sein oder aus kleineren Threads bestehen , die Teile des Gesamtprogramms ausführen.

Ein Prozessor, der für die Verwendung mit Multitasking-Betriebssystemen vorgesehen ist, kann spezielle Hardware umfassen, um mehrere Aufgaben sicher zu unterstützen, wie beispielsweise Speicherschutz , und Schutzringe , die sicherstellen, dass die Überwachungssoftware nicht durch Programmfehler im Benutzermodus beschädigt oder unterwandert werden kann.

Der Begriff "Multitasking" ist zu einem internationalen Begriff geworden, da das gleiche Wort in vielen anderen Sprachen wie Deutsch, Italienisch, Niederländisch, Dänisch und Norwegisch verwendet wird.

Multiprogrammierung

In den frühen Tagen des Computings war CPU-Zeit teuer und Peripheriegeräte sehr langsam. Wenn der Computer ein Programm ausführte, das Zugriff auf ein Peripheriegerät benötigte, müsste die Zentraleinheit (CPU) die Ausführung von Programmanweisungen stoppen, während das Peripheriegerät die Daten verarbeitete. Dies war normalerweise sehr ineffizient.

Der erste Computer, der ein Multiprogramming-System verwendet, war der britische Leo III im Besitz von J. Lyons und Co. Während der Stapelverarbeitung wurden mehrere verschiedene Programme in den Computerspeicher geladen, und das erste begann zu laufen. Als das erste Programm einen Befehl erreichte, der auf ein Peripheriegerät wartete, wurde der Kontext dieses Programms gespeichert, und dem zweiten Programm im Speicher wurde die Möglichkeit gegeben, ausgeführt zu werden. Der Vorgang wurde fortgesetzt, bis alle Programme ausgeführt wurden.

Die Verwendung von Multiprogramming wurde durch die Einführung der virtuellen Speicher- und virtuellen Maschinentechnologie verbessert, die es einzelnen Programmen ermöglichte, Speicher- und Betriebssystemressourcen zu nutzen, als ob andere gleichzeitig laufende Programme für alle praktischen Zwecke nicht existent wären.

Multiprogramming gibt keine Garantie für die zeitgerechte Ausführung eines Programms. Tatsächlich kann das erste Programm sehr gut stundenlang laufen, ohne Zugriff auf ein Peripheriegerät zu benötigen. Da keine Benutzer an einem interaktiven Terminal warteten, war dies kein Problem: Die Benutzer gaben einen Stapel Lochkarten an einen Operator ab und kamen einige Stunden später zurück, um die gedruckten Ergebnisse zu erhalten. Multiprogramming reduzierte die Wartezeiten bei der Verarbeitung mehrerer Chargen erheblich.

Kooperatives Multitasking

Frühe Multitasking-Systeme nutzten Anwendungen, die sich freiwillig Zeit schenkten. Dieser Ansatz, der schließlich von vielen Computerbetriebssystemen unterstützt wurde , ist heute als kooperatives Multitasking bekannt. Obwohl es heute nur noch selten in größeren Systemen verwendet wird, außer für bestimmte Anwendungen wie CICS oder das JES2- Subsystem, war kooperatives Multitasking einst das einzige Scheduling-Schema, das von Microsoft Windows und Classic Mac OS verwendet wurde , um die gleichzeitige Ausführung mehrerer Anwendungen zu ermöglichen. Kooperatives Multitasking wird auch heute noch auf RISC OS- Systemen eingesetzt.

Da ein kooperatives Multitasking-System darauf angewiesen ist, dass jeder Prozess regelmäßig Zeit an andere Prozesse auf dem System abgibt, kann ein schlecht entworfenes Programm die gesamte CPU-Zeit für sich selbst verbrauchen, entweder durch Ausführen umfangreicher Berechnungen oder durch eifriges Warten ; beides würde dazu führen, dass das ganze System hängen bleibt . In einer Serverumgebung stellt dies eine Gefahr dar, die die gesamte Umgebung inakzeptabel anfällig macht.

Präventives Multitasking

Präemptives Multitasking ermöglicht es dem Computersystem, jedem Prozess ein regelmäßiges "Stück" der Betriebszeit zuverlässiger zu garantieren. Es ermöglicht dem System auch, schnell mit wichtigen externen Ereignissen wie eingehenden Daten umzugehen, die die sofortige Aufmerksamkeit des einen oder anderen Prozesses erfordern könnten. Betriebssysteme wurden entwickelt, um diese Hardwarefunktionen zu nutzen und mehrere Prozesse präventiv auszuführen. Präemptives Multitasking wurde 1964 in PDP-6 Monitor und MULTICS , 1967 in OS/360 MFT und 1969 in Unix implementiert und war in einigen Betriebssystemen für Computer so klein wie DECs PDP-8 verfügbar ; es ist ein Kernfeature aller Unix-ähnlichen Betriebssysteme wie Linux , Solaris und BSD mit seinen Derivaten sowie moderner Windows-Versionen.

Zu jedem beliebigen Zeitpunkt können Prozesse in zwei Kategorien eingeteilt werden: Prozesse, die auf Eingaben oder Ausgaben warten (sogenannte „ I/O-gebunden “) und solche, die die CPU voll auslasten („ CPU-gebunden “). In primitiven Systemen würde die Software oft " abfragen " oder "beschäftigt warten ", während sie auf eine angeforderte Eingabe wartete (wie beispielsweise eine Disketten-, Tastatur- oder Netzwerkeingabe). Während dieser Zeit verrichtete das System keine nützliche Arbeit. Mit dem Aufkommen von Interrupts und präemptivem Multitasking könnten E/A-gebundene Prozesse "blockiert" oder angehalten werden, bis die erforderlichen Daten ankommen, so dass andere Prozesse die CPU nutzen können. Da das Eintreffen der angeforderten Daten einen Interrupt erzeugen würde, könnte blockierten Prozessen eine zeitnahe Rückkehr zur Ausführung garantiert werden.

Das früheste präventive Multitasking-Betriebssystem, das Heimanwendern zur Verfügung stand, war Sinclair QDOS auf dem Sinclair QL , das 1984 veröffentlicht wurde, aber nur sehr wenige Leute kauften die Maschine. Der Amiga von Commodore , der im folgenden Jahr veröffentlicht wurde, war der erste kommerziell erfolgreiche Heimcomputer, der diese Technologie nutzte, und seine Multimedia-Fähigkeiten machen ihn zu einem klaren Vorfahren der modernen Multitasking-PCs. Microsoft machte präventives Multitasking Anfang der 90er Jahre zu einem Kernfeature seines Flaggschiff-Betriebssystems, als es Windows NT 3.1 und dann Windows 95 entwickelte . Es wurde später auf dem Apple Macintosh von Mac OS X übernommen , das als Unix-ähnliches Betriebssystem präemptives Multitasking für alle nativen Anwendungen verwendet.

Ein ähnliches Modell wird in Windows 9x und der Windows NT-Familie verwendet , wo native 32-Bit-Anwendungen präventiv Multitasking ausgeführt werden. 64-Bit-Editionen von Windows, sowohl für die x86-64- als auch für die Itanium- Architektur, unterstützen keine 16-Bit-Legacy-Anwendungen mehr und bieten daher präventives Multitasking für alle unterstützten Anwendungen.

Echtzeit

Ein weiterer Grund für Multitasking lag im Design von Echtzeit-Computersystemen , bei denen eine Reihe von möglicherweise nicht zusammenhängenden externen Aktivitäten von einem einzigen Prozessorsystem gesteuert werden müssen. In solchen Systemen ist ein hierarchisches Interrupt-System mit einer Prozesspriorisierung gekoppelt, um sicherzustellen, dass Schlüsselaktivitäten ein größerer Anteil der verfügbaren Prozesszeit eingeräumt wird .

Multithreading

Da Multitasking den Durchsatz von Computern stark verbesserte, begannen Programmierer, Anwendungen als Sätze kooperierender Prozesse zu implementieren (z. B. ein Prozess sammelt Eingabedaten, ein Prozess verarbeitet Eingabedaten, ein Prozess schreibt Ergebnisse auf Platte). Dies erforderte jedoch einige Tools, um den Prozessen einen effizienten Datenaustausch zu ermöglichen.

Threads wurden aus der Idee geboren, dass der effizienteste Weg für kooperierende Prozesse zum Datenaustausch darin besteht, ihren gesamten Speicherplatz gemeinsam zu nutzen. Somit sind Threads effektiv Prozesse, die im gleichen Speicherkontext ausgeführt werden und andere Ressourcen mit ihren Elternprozessen teilen , wie zum Beispiel offene Dateien. Threads werden als leichtgewichtige Prozesse beschrieben, da das Wechseln zwischen Threads keine Änderung des Speicherkontexts beinhaltet.

Während Threads präventiv geplant werden, bieten einige Betriebssysteme eine Variante von Threads mit dem Namen fiber , die kooperativ geplant werden. Auf Betriebssystemen, die keine Glasfasern bereitstellen, kann eine Anwendung ihre eigenen Glasfasern durch wiederholte Aufrufe von Worker-Funktionen implementieren. Fasern sind sogar leichter als Threads und etwas einfacher zu programmieren, obwohl sie dazu neigen, einige oder alle Vorteile von Threads auf Maschinen mit mehreren Prozessoren zu verlieren .

Einige Systeme unterstützen Multithreading direkt in der Hardware .

Speicherschutz

Wesentlich für jedes Multitasking-System ist die sichere und effektive gemeinsame Nutzung des Zugriffs auf Systemressourcen. Der Zugriff auf den Speicher muss streng verwaltet werden, um sicherzustellen, dass kein Prozess versehentlich oder absichtlich Speicherorte außerhalb des Adressraums des Prozesses lesen oder schreiben kann. Dies erfolgt zum Zwecke der allgemeinen Systemstabilität und Datenintegrität sowie der Datensicherheit.

Im Allgemeinen liegt die Speicherzugriffsverwaltung in der Verantwortung des Betriebssystemkernels in Kombination mit Hardwaremechanismen, die unterstützende Funktionalitäten bereitstellen, wie beispielsweise eine Speicherverwaltungseinheit (MMU). Wenn ein Prozess versucht, auf eine Speicherstelle außerhalb seines Speicherplatzes zuzugreifen, lehnt die MMU die Anfrage ab und signalisiert dem Kernel, geeignete Maßnahmen zu ergreifen; dies führt in der Regel zu einer gewaltsamen Beendigung des beleidigenden Prozesses. Je nach Software- und Kernel-Design und dem jeweiligen Fehler kann der Benutzer eine Zugriffsverletzungs-Fehlermeldung wie "Segmentierungsfehler" erhalten.

In einem gut entworfenen und korrekt implementierten Multitasking-System kann ein gegebener Prozess niemals direkt auf einen Speicher zugreifen, der zu einem anderen Prozess gehört. Eine Ausnahme von dieser Regel bildet der gemeinsam genutzte Speicher; zum Beispiel weist der Kernel im System V- Interprozess-Kommunikationsmechanismus Speicher zu, der von mehreren Prozessen gemeinsam genutzt wird. Solche Funktionen werden häufig von Datenbankverwaltungssoftware wie PostgreSQL verwendet.

Unzureichende Speicherschutzmechanismen, entweder aufgrund von Fehlern in ihrem Design oder schlechter Implementierungen, ermöglichen Sicherheitslücken, die potenziell von bösartiger Software ausgenutzt werden können.

Speicher-Swapping

Die Verwendung einer Auslagerungsdatei oder einer Auslagerungspartition ist eine Möglichkeit für das Betriebssystem, mehr Speicher bereitzustellen, als physisch verfügbar ist, indem Teile des Primärspeichers im Sekundärspeicher gehalten werden . Während Multitasking und Speicherauslagerung zwei völlig unabhängige Techniken sind, werden sie sehr oft zusammen verwendet, da durch das Auslagern von Speicher mehr Aufgaben gleichzeitig geladen werden können. Typischerweise ermöglicht ein Multitasking-System die Ausführung eines anderen Prozesses, wenn der laufende Prozess einen Punkt erreicht, an dem er darauf warten muss, dass ein Teil des Speichers aus dem sekundären Speicher neu geladen wird.

Programmierung

Völlig unabhängige Prozesse sind in einer Multitasking-Umgebung kein großes Problem. Die meiste Komplexität in Multitasking-Systemen rührt von der Notwendigkeit her, Computerressourcen zwischen Tasks zu teilen und den Betrieb kooperierender Tasks zu synchronisieren.

Es werden verschiedene gleichzeitige Rechentechniken verwendet, um potenzielle Probleme zu vermeiden, die durch mehrere Tasks verursacht werden, die versuchen, auf dieselbe Ressource zuzugreifen.

Größere Systeme wurden manchmal mit einem oder mehreren Zentralprozessoren und einer gewissen Anzahl von I/O-Prozessoren gebaut , eine Art asymmetrischer Multiprocessing .

Im Laufe der Jahre wurden Multitasking-Systeme verfeinert. Moderne Betriebssysteme beinhalten im Allgemeinen detaillierte Mechanismen zur Priorisierung von Prozessen, während symmetrisches Multiprocessing neue Komplexitäten und Fähigkeiten eingeführt hat.

Siehe auch

Verweise