Computer multitasking
Im Computer, Multitasking ist der gleichzeitig Ausführung mehrerer Aufgaben (auch bekannt als Prozesse) über einen bestimmten Zeitraum. Neue Aufgaben können bereits vor ihrer Beendigung gestartet werden, anstatt darauf zu warten, dass sie enden. Infolgedessen führt ein Computer Segmente mehrerer Aufgaben auf verschachtelte Weise aus, während die Aufgaben gemeinsame Verarbeitungsressourcen wie z. Zentrale Verarbeitungseinheiten (CPUs) und Haupterinnerung. Multitasking unterbricht das laufende Programm automatisch, speichert seinen Status (Teilergebnisse, Speicherinhalte und Computerregisterinhalte) und lädt den gespeicherten Status eines anderen Programms und übertragen Sie die Steuerung. Dies "Kontextschalter"Kann in festen Zeitintervallen eingeleitet werden (Präventives Multitasking) oder das laufende Programm kann codiert werden, um der Aufsichtssoftware zu signalisieren, wenn sie unterbrochen werden kann (Kooperatives Multitasking).
Multitasking erfordert nicht Parallele Ausführung von mehreren Aufgaben gleichzeitig; Stattdessen ermöglicht es mehr als eine Aufgabe über einen bestimmten Zeitraum.[1] Auch auf Multiprozessor Computer, Multitasking ermöglicht es, viel mehr Aufgaben auszuführen als CPUs.
Multitasking ist seit mindestens 1960er Jahren ein häufiges Merkmal von Computerbetriebssystemen. Es ermöglicht eine effizientere Nutzung der Computerhardware. wo ein Programm auf ein externes Ereignis wie eine Benutzereingabe oder eine wartet Input-Output Übertragen mit einem peripheren Umfang, um zu vervollständigen, kann der zentrale Prozessor weiterhin mit einem anderen Programm verwendet werden. In einem Zeitteilung System, mehrere menschliche Betreiber verwenden denselben Prozessor, als ob es ihrer Verwendung gewidmet wäre, während der Computer hinter den Kulissen vielen Benutzern durch Multitasking ihrer individuellen Programme bedient. Im Multiprogrammierung Systeme, eine Aufgabe läuft, bis sie auf ein externes Ereignis oder bis zum Betriebssystem warten muss Planer Tippt die Laufaufgabe gewaltsam aus der CPU aus. Echtzeit Systeme wie diejenigen, die zur Kontrolle von Industrie -Robotern kontrolliert werden, erfordern eine zeitnahe Verarbeitung. Ein einzelner Prozessor kann zwischen Berechnungen von Maschinenbewegungen, Kommunikation und Benutzeroberfläche geteilt werden.[2]
Oft umfassen Multitasking -Betriebssysteme Maßnahmen zur Änderung der Priorität einzelner Aufgaben, so dass wichtige Arbeitsplätze mehr Prozessorzeit erhalten als diejenigen, die als weniger signifikant angesehen werden. Abhängig vom Betriebssystem kann eine Aufgabe so groß sein wie ein ganz Themen Das führt Teile des Gesamtprogramms aus.
Ein Prozessor, der für die Verwendung mit Multitasking -Betriebssystemen bestimmt ist, kann spezielle Hardware enthalten, um mehrere Aufgaben sicher zu unterstützen, wie z. Gedächtnisschutz, und Schutzringe Dadurch wird sichergestellt, dass die Aufsichtssoftware nicht von User-Mode-Programmfehlern beschädigt oder untergraben werden kann.
Der Begriff "Multitasking" ist zu einem internationalen Begriff geworden, da das gleiche Wort in vielen anderen Sprachen wie Deutsch, Italienisch, Niederländisch, Rumänisch, Tschechisch, Dänisch und Norwegisch verwendet wird.
Multiprogrammierung
In den frühen Tagen des Computers, CPU -Zeit war teuer und Peripheriegeräte waren sehr langsam. Als der Computer ein Programm ausführte, das Zugriff auf eine Peripherie benötigte, müsste die Central Processing Unit (CPU) die Ausführung von Programmanweisungen einstellen, während die peripheren Daten die Daten verarbeitet haben. Dies war normalerweise sehr ineffizient.
Der erste Computer, der ein Multiprogrammierungssystem verwendet, war der Briten Leo III gehört J. Lyons und Co. Während StapelverarbeitungIm Computerspeicher wurden mehrere verschiedene Programme geladen, und der erste begann zu laufen. Als das erste Programm eine Anweisung erreichte, die auf einen Peripheriegerät wartete, wurde der Kontext dieses Programms weggelassen, und das zweite Programm im Gedächtnis hatte die Chance, auszuführen. Der Prozess wurde fortgesetzt, bis alle Programme abgeschlossen wurden.[3]
Die Verwendung von Multiprogramming wurde durch die Ankunft von verstärkt virtueller Speicher und virtuelle Maschine Technologie, die es individuelle Programme ermöglichte, Speicher- und Betriebssystemressourcen zu nutzen, als ob andere gleichzeitig ausgeführte Programme für alle praktischen Zwecke nicht vorhanden waren.
Die Multiprogrammierung gibt keine Garantie dafür, dass ein Programm rechtzeitig ausgeführt wird. In der Tat kann das erste Programm stundenlang sehr gut ausgeführt werden, ohne Zugang zu einem Peripheriegericht zu benötigen. Da keine Benutzer an einem interaktiven Terminal warteten, war dies kein Problem: Benutzer überreichten in einem Deck mit Stanzkarten an einen Bediener und kamen einige Stunden später für gedruckte Ergebnisse zurück. Multiprogramming reduzierte die Wartezeiten stark, wenn mehrere Chargen verarbeitet wurden.[4][5]
Kooperatives Multitasking
Frühe Multitasking -Systeme verwendeten Anwendungen, die freiwillig die Zeit miteinander übertragen hatten. Dieser Ansatz, der schließlich von vielen Computer unterstützt wurde Betriebssysteme, ist heute als kooperatives Multitasking bekannt. Obwohl es jetzt selten in größeren Systemen verwendet wird, mit Ausnahme spezifischer Anwendungen wie z. CICs oder der JES2 Subsystem, kooperatives Multitasking war einst das einzige Planungsschema, das von verwendet wurde Microsoft Windows und Klassischer Mac OS So können mehrere Anwendungen gleichzeitig ausgeführt werden. Kooperatives Multitasking wird bis heute noch verwendet RISC OS Systeme.[6]
Da ein kooperativ multitaskiertes System darauf angewiesen ist, dass jeder Prozess regelmäßig Zeit für andere Prozesse auf dem System gibt beschäftigt zu warten; Beide würden das gesamte System dazu bringen aufhängen. In einer Serverumgebung ist dies eine Gefahr, die die gesamte Umgebung unannehmbar fragil macht.
Präventiver Multitasking
Durch das Präventive Multitasking kann das Computersystem jedem Verfahren zuverlässig eine regelmäßige "Scheibe" der Betriebszeit garantieren. Es ermöglicht dem System auch, mit wichtigen externen Ereignissen wie eingehenden Daten schnell umzugehen, die möglicherweise die sofortige Aufmerksamkeit eines oder eines anderen Prozesses erfordern. Betriebssysteme wurden entwickelt, um diese Hardwarefunktionen zu nutzen und mehrere Prozesse präventiv auszuführen. Präventives Multitasking wurde in implementiert Der PDP-6-Monitor und Mehrheit im Jahr 1964 in OS/360 MFT im Jahr 1967 und in Unix 1969 und war in erhältlich Einige Betriebssysteme Für Computer, die so klein wie die PDP-8 von DEC; Es ist ein zentrales Merkmal von allen Unix-artig Betriebssysteme wie z. Linux, Solaris und BSD mit Derivate,[7] sowie moderne Versionen von Windows.
Zu jedem Zeitpunkt können Prozesse in zwei Kategorien eingeteilt werden: diejenigen, die auf Eingabe oder Ausgabe warten (genannt "E/O gebunden"), und diejenigen, die die CPU voll nutzen ("CPU gebunden"). In primitiven Systemen würde die Software oft"Umfrage", oder "Beschäftigten Wait"Während ich auf angeforderte Eingaben wartete (z. B. Festplatte, Tastatur oder Netzwerkeingabe). In dieser Zeit leistete das System keine nützliche Arbeit. Mit dem Aufkommen von Interrupts und präventiven Multitasking könnten E/A -gebundene Prozesse" blockiert "oder" blockiert "oder" blockiert "werden oder Aufgehalten, bis die erforderlichen Daten angewendet werden, sodass andere Prozesse die CPU verwenden können. Da die Ankunft der angeforderten Daten einen Interrupt generieren würde, könnten blockierte Prozesse eine rechtzeitige Rückkehr zur Ausführung garantiert werden.
Das früheste präventive Multitasking -Betriebssystem für Heimnutzer war Sinclair Qdos auf der Sinclair Ql1984 veröffentlicht, aber nur sehr wenige Leute kauften die Maschine. Commodore Amiga, veröffentlicht im folgenden Jahr, war der erste kommerziell erfolgreiche Heimcomputer, der die Technologie nutzte, und seine Multimedia -Fähigkeiten machen es zu einem klaren Vorfahr des zeitgenössischen Multitasking -PCs. Microsoft machte Präventive Multitasking in den frühen neunziger Jahren bei der Entwicklung zu einem Kernfunktion ihres Flaggschiffs -Betriebssystems Windows NT 3.1 und dann Windows 95. Es wurde später auf dem Apple Macintosh von übernommen Mac OS X Als Unix-ähnliches Betriebssystem verwendet das präventive Multitasking für alle nativen Anwendungen.
Ein ähnliches Modell wird in verwendet Windows 9x und die Windows NT -Familie, wo native 32-Bit-Anwendungen vorbeugend multitaskiert sind.[8] 64-Bit-Editionen von Windows, beide für die x86-64 und Itanium Architekturen unterstützen keine 16-Bit-Anwendungen mehr und bieten somit präventive Multitasking für alle unterstützten Anwendungen.
Echtzeit
Ein weiterer Grund für Multitasking war die Gestaltung von Echtzeit-Computing Systeme, bei denen eine Reihe von möglicherweise nicht verwandten externen Aktivitäten von einem einzigen Prozessorsystem gesteuert werden müssen. In solchen Systemen ist ein hierarchisches Interrupt -System mit der Prozesspriorisierung verbunden, um sicherzustellen Prozess Zeit.[9]
Multithreading
Da Multitasking den Durchsatz von Computern erheblich verbesserte, begannen die Programmierer, Anwendungen als Sätze kooperierender Prozesse zu implementieren (z. B. ein Prozess, der Eingabedaten sammelt, ein Prozessverarbeitungsdaten, ein Prozess, der Ergebnisse auf der Festplatte ausschreibt). Dies erforderte jedoch einige Tools, um die Prozesse zum effizienten Austausch von Daten zu ermöglichen.
Themen wurden aus der Idee geboren, dass der effizienteste Weg für die Kooperation von Prozessen zum Austausch von Daten darin besteht, ihren gesamten Speicherplatz zu teilen. Daher sind Threads effektiv Prozesse, die im gleichen Speicherkontext ausgeführt werden und andere Ressourcen mit ihren teilen Elternprozesse, wie offene Dateien. Themen werden als beschrieben als Leichte Prozesse Da das Wechsel zwischen Threads nicht das Ändern des Speicherkontexts beinhaltet.[10][11][12]
Während Threads präventiv geplant sind, bieten einige Betriebssysteme eine Variante für Threads, die benannt sind Fasern, das sind kooperativ geplant. Bei Betriebssystemen, die keine Fasern anbieten, kann eine Anwendung ihre eigenen Fasern verwenden, indem sie wiederholte Anrufe bei Arbeiterfunktionen verwenden. Die Fasern sind noch leichter als Fäden und etwas einfacher zu programmieren, obwohl sie tendenziell einige oder alle Vorteile von Fäden an verlieren Maschinen mit mehreren Prozessoren.[13]
Einige Systeme unterstützen direkt Multithreading in Hardware.
Gedächtnisschutz
Wesentlich für jedes Multitasking -System ist es, den Zugriff auf Systemressourcen sicher und effektiv zu teilen. Der Zugriff auf Speicher muss streng verwaltet werden, um sicherzustellen, dass kein Prozess versehentlich oder absichtlich an Speicherorte außerhalb des Adressraums des Prozesses gelesen oder geschrieben wird. Dies geschieht zum Zweck der allgemeinen Systemstabilität und der Datenintegrität sowie der Datensicherheit.
Im Allgemeinen ist das Speicherzugriffsmanagement eine Verantwortung des Kernels des Betriebssystems in Kombination mit Hardwaremechanismen, die unterstützende Funktionen wie a liefern Speicherverwaltungseinheit (MMU). Wenn ein Prozess versucht, auf einen Speicherort außerhalb seines Speicherplatzes zuzugreifen, verweigert die MMU die Anfrage und signalisiert den Kernel, geeignete Maßnahmen zu ergreifen. Dies führt in der Regel dazu, dass der Straftat gewaltsam endet. Abhängig von der Software- und Kerneldesign und dem betreffenden spezifischen Fehler erhält der Benutzer möglicherweise eine Zugriffsverletzungsfehlermeldung wie "Segmentierungsfehler".
In einem gut gestalteten und korrekt implementierten Multitasking -System kann ein bestimmter Prozess niemals direkt zugreifen, der zu einem anderen Prozess gehört. Eine Ausnahme von dieser Regel liegt im Fall eines gemeinsamen Speichers; Zum Beispiel in der System v Kommunikationsmechanismus interprozessiger Kommunikation Der Kernel weist ein, dass das Gedächtnis von mehreren Prozessen geteilt wird. Solche Funktionen werden häufig von Datenbankverwaltungssoftware wie PostgreSQL verwendet.
Unzureichende Gedächtnisschutzmechanismen, entweder aufgrund von Fehler in ihrem Design oder schlechten Implementierungen, ermöglichen Sicherheitslücken, die möglicherweise von böswilliger Software ausgenutzt werden können.
Speicheraustausch
Verwendung von a Auslagerungsdatei oder die Swap -Partition ist eine Möglichkeit für das Betriebssystem, mehr Speicher zu liefern, als physikalisch verfügbar ist, indem Teile des Primärspeichers in den Zweitlager. Während Multitasking- und Gedächtnisaustausch zwei völlig unabhängige Techniken sind, werden sie sehr oft zusammen verwendet, da das Swapping -Speicher gleichzeitig mehr Aufgaben geladen werden kann. In der Regel kann ein Multitasking -System einen anderen Prozess ausführen, wenn der laufende Vorgang einen Punkt erreicht, an dem es warten muss, bis ein Teil des Speichers aus dem Sekundärspeicher neu geladen wird.[14]
Programmierung
Prozesse, die völlig unabhängig sind, sind nicht große Probleme, in einer Multitasking -Umgebung zu programmieren. Der größte Teil der Komplexität in Multitasking-Systemen ergibt sich aus der Notwendigkeit, Computerressourcen zwischen Aufgaben zu teilen und den Betrieb von Kooperationsaufgaben zu synchronisieren.
Verschiedene Gleichzeitiges Computer Techniken werden verwendet, um potenzielle Probleme zu vermeiden, die durch mehrere Aufgaben verursacht werden, die versuchen, auf dieselbe Ressource zuzugreifen.
Manchmal wurden größere Systeme mit einem zentralen Prozessor und einer Reihe von Anzahl von gebaut E/A -Prozessoren, eine Art von Asymmetrische Multiprozessierung.
Im Laufe der Jahre wurden Multitasking -Systeme verfeinert. Moderne Betriebssysteme enthalten im Allgemeinen detaillierte Mechanismen zur Priorisierung von Prozessen Symmetrische Multiprozessierung hat neue Komplexitäten und Fähigkeiten eingeführt.[15]
Siehe auch
Verweise
- ^ "Parallelität, Parallelität, gleichzeitige Programmierung gegenüber paralleler Programmierung". Orakel. Archiviert von das Original am 7. April 2016. Abgerufen 23. März, 2016.
- ^ Anthony Ralston, Edwin D. Reilly (Hrsg.),Enzyklopädie der Informatik dritte Ausgabe, Van Nostrand Reinhold, 1993, ISBN0-442-27679-6, Artikel "Multitasking" und "Multiprogrammierung"
- ^ Master -Programm- und Programmversuche System Teil 1 Master -Programmspezifikation. Februar 1965. Abschnitt 6 "Priority Control Routinen".
- ^ Lithmee (2019-05-20). "Was ist der Unterschied zwischen Batch -Verarbeitung und Multiprogrammierung". Pediaa.com. Abgerufen 2020-04-14.
- ^ "Entwicklung des Betriebssystems". 2017-09-29. Abgerufen 2020-04-14.
- ^ "Präventiver Multitasking". riscos.info. 2009-11-03. Abgerufen 2014-07-27.
- ^ "Unix, Teil eins". Die digitale Forschungsinitiative. ibiblio.org. 2002-01-30. Abgerufen 2014-01-09.
- ^ Joseph Moran (Juni 2006). "Windows 2000 & 16-Bit-Anwendungen". Smart Computing. Vol. 16, nein. 6. S. 32–33. Archiviert von das Original am 25. Januar 2009.
- ^ Liu, C. L.; Layland, James W. (1973-01-01). "Planung von Algorithmen zur Multiprogrammierung in einer Umgebung mit hartem Echtzeit". Journal of the ACM. 20 (1): 46–61. doi:10.1145/321738.321743. ISSN 0004-5411.
- ^ Eduardo Ciliendo; Takechika Kunimasa (25. April 2008). "Linux Performance- und Tuning -Richtlinien" (PDF). redbooks.ibm.com. IBM. p. 4. archiviert von das Original (PDF) am 26. Februar 2015. Abgerufen 1. März, 2015.
- ^ "Kontextschalterdefinition". linfo.org. 28. Mai 2006. archiviert von das Original am 18. Februar 2010. Abgerufen 26. Februar, 2015.
- ^ "Was sind Threads (Benutzer/Kernel)?". tldp.org. 8. September 1997. Abgerufen 26. Februar, 2015.
- ^ Multitasking verschiedene Methoden Zugriff am 19. Februar 2019
- ^ "Was ist eine Swap -Datei?". kb.iu.edu. Abgerufen 2018-03-26.
- ^ "Betriebssystemarchitektur". cis2.oc.ctc.edu. Abgerufen 2018-03-17.