Wenn DOS Singletasking ist, wie war dann Multitasking in der alten Windows-Version möglich?

Wenn DOS Singletasking ist, wie war dann Multitasking in der alten Windows-Version möglich?

Ich habe gelesen, dass DOS ein Single-Tasking-Betriebssystem ist.

Wenn jedoch alte Windows-Versionen (einschließlich Windows 95?) bloße Wrapper von DOS waren, wie konnte Windows dann als Multitasking-Betriebssystem ausgeführt werden?

Antwort1

Windows 95

Windows 95war weit mehr als "nur ein Wrapper" für MS-DOS. Zitat von Raymond Chen:

MS-DOS erfüllte in Windows 95 zwei Zwecke.

  • Es diente als Bootloader.
  • Es fungierte als 16-Bit-Legacy-Gerätetreiberschicht.

Windows 95 hat MS-DOS praktisch vollständig übernommen bzw. außer Kraft gesetzt, es als Kompatibilitätsebene beibehalten und die ganze Schwerarbeit selbst erledigt. Außerdem wurde präemptives Multitasking für 32-Bit-Programme implementiert.


Vor Windows 95

Windows 3.x und älter waren größtenteils 16-Bit-Versionen (mit Ausnahme von Win32s, einer Art Kompatibilitätsschicht, die 16 und 32 verbindet, die wir hier jedoch ignorieren), waren stärker von DOS abhängig und verwendeten nur kooperatives Multitasking, d. h., sie zwingen ein laufendes Programm nicht zum Ausschalten, sondern warten darauf, dass das laufende Programm die Kontrolle übergibt (sagen also im Grunde „Ich bin fertig“, indem sie dem Betriebssystem mitteilen, das nächste wartende Programm auszuführen).

Multitasking war kooperativ, genau wie in alten Versionen von MacOS (allerdings anders als Multitasking in DOS 4.x, das präemptives Multitasking bot). Eine Aufgabe musste dem Betriebssystem nachgeben, um eine andere Aufgabe zu planen. Die Nachgaben waren in bestimmte API-Aufrufe integriert, insbesondere in die Nachrichtenverarbeitung. Solange eine Aufgabe Nachrichten rechtzeitig verarbeitete, war alles großartig. Wenn eine Aufgabe die Nachrichtenverarbeitung einstellte und damit beschäftigt war, eine Verarbeitungsschleife auszuführen, gab es kein Multitasking mehr.

Windows 3.x-Architektur

Wie frühe Windows-Programme die Kontrolle übergaben:

Windows 3.1 verwendet kooperatives Multitasking. Das bedeutet, dass jede laufende Anwendung angewiesen wird, regelmäßig eine Nachrichtenwarteschlange zu überprüfen, um festzustellen, ob eine andere Anwendung die CPU-Nutzung anfordert, und, falls dies der Fall ist, die Kontrolle an diese Anwendung abzugeben. Viele Windows 3.1-Anwendungen überprüfen die Nachrichtenwarteschlange jedoch nur selten oder überhaupt nicht und monopolisieren die Kontrolle über die CPU so lange, wie sie benötigen. Ein präemptives Multitasking-System wie Windows 95 entzieht einer laufenden Anwendung die CPU-Kontrolle und verteilt sie auf Anwendungen mit höherer Priorität, je nach den Anforderungen des Systems.

Quelle

DOS würde nur diese eine laufende Anwendung (Windows oder eine andere) sehen, die die Kontrolle weitergeben würde, ohne beendet zu werden. Theoretisch kann präemptives Multitasking ohnehin auf DOS implementiert werden, indem eine Echtzeituhr und Hardware-Interrupts verwendet werden, um die Kontrolle zwangsweise an den Scheduler zu übergeben.Tonny Kommentare, dies wurde tatsächlich von einigen Betriebssystemen getan, die auf DOS liefen.

386 erweiterter Modus?

Hinweis: Es gab einige Kommentare zu386 erweiterter Modusvon Windows 3.x, das 32-Bit ist und präemptives Multitasking unterstützt.

Dies ist ein interessanter Fall. Um die verknüpftenBlogeintrag, 386 Enhanced Mode war im Grunde ein 32-Bit-Hypervisor, der virtuelle Maschinen ausführte. In einer dieser virtuellen Maschinen lief der Windows 3.x-Standardmodus, der alle oben aufgeführten Funktionen ausführt.

Innerhalb dieser virtuellen Maschinen lief auch MS-DOS und offenbar waren diese präemptiv im Multitasking-Modus. Es scheint also, dass der 386 Enhanced Mode-Hypervisor CPU-Zeitscheiben zwischen den virtuellen Maschinen aufteilt (auf einer lief das normale 3.x und auf den anderen MS-DOS) und jede VM ihr eigenes Ding macht – 3.x würde kooperativ im Multitasking arbeiten, während MS-DOS im Singletasking-Modus wäre.


MS-DOS

DOS selbst war auf dem Papier Single-Tasking, aber es hatte Unterstützung fürTSRProgramme, die im Hintergrund bleiben, bis sie durch eine Hardwareunterbrechung ausgelöst werden. Weit entfernt von echtem Multitasking, aber auch nicht vollständig Singletasking.


All dieses Gerede von Bitanzahl? Ich habe nach Multitasking gefragt!

Nun, streng genommen sind die Bitanzahl und das Multitasking nicht voneinander abhängig. Es sollte möglich sein, jeden Multitasking-Modus mit beliebiger Bitanzahl zu implementieren. Der Wechsel von 16-Bit-Prozessoren zu 32-Bit-Prozessoren führte jedoch auch andere Hardwarefunktionen ein, die die Implementierung von präemptivem Multitasking einfacher gemacht hätten.

Da 32-Bit-Programme neu waren, war es außerdem einfacher, sie zum Laufen zu bringen, wenn sie zwangsweise ausgeschaltet wurden – was möglicherweise bei einigen älteren 16-Bit-Programmen zu Problemen geführt hat.

Natürlich ist das alles Spekulation. Wenn Sie wirklich wissen möchten, warum MS in Windows 3.x kein präemptives Multitasking implementiert hat (außer im erweiterten Modus für 386), müssen Sie jemanden fragen, der dort gearbeitet hat.

Außerdem wollte ich Ihre Annahme korrigieren, dass Windows 95 lediglich ein Wrapper für DOS war ;)

Antwort2

Es lief kontinuierlich ein einzelnes Programm namens Windows. Dieses verteilte die CPU-Zeit (und andere Ressourcen) auf verschiedene Programme.

Betrachten Sie diese Analogie:

Sie haben ein Büro, in dem sich immer nur eine Person aufhalten kann (diese Person wird Herr oder Frau DOS genannt). Diese Person arbeitet immer nur an einer Sache. Beispielsweise ruft sie eine einzelne Person an und beginnt, rund um die Uhr mit ihr zu chatten.

Jetzt ersetzen Sie diese Person durch Herrn Sekretär (Windows). Er wird jemanden anrufen und die ganze Zeit mit ihm reden (immer noch eine einzelne Aufgabe). Dann wird die andere Person nach einiger Zeit sagen: „Ich habe jetzt genug geredet. Sprechen Sie mit jemand anderem und rufen Sie mich in Kürze zurück.“

Herr Sekretär ruft die andere Person an. Chatten Sie mit dieser Person, bis diese Person dasselbe sagt. Dann ruft er die nächste Person an, bis er am Ende der Liste der zu sprechenden Personen angelangt ist. Dann beginnt er wieder von vorne.

  • In der Fachsprache nennt sich das kooperatives Multitasking. Dabei muss der andere Teilnehmer bestätigen, dass er/sie genügend CPU-Zeit hat. Tut er/sie das nicht, bricht alles zusammen.
  • Moderne Systeme sind viel intelligenter. Einschließlich präventivem Multitasking. Denken Sie an die Sekretärin, die einen Wecker stellt und die andere Person nach 5 Minuten unterbricht. „Das ist nett, Jane. Aber ich muss jetzt mit Joe sprechen. Ich rufe dich gleich zurück. – Klick.“

Wenn Sie mehrere Prozessoren hinzufügen, wird es noch komplizierter. :)

Antwort3

In einem modernen Betriebssystem steuert das Betriebssystem alle Hardwareressourcen und laufende Anwendungen werden in Sandboxen gehalten. Eine Anwendung darf nicht auf Speicher zugreifen, den das Betriebssystem dieser Anwendung nicht zugewiesen hat, und sie kann nicht direkt auf Hardwaregeräte im Computer zugreifen. Wenn Hardwarezugriff erforderlich ist, muss die Anwendung über Gerätetreiber kommunizieren.

Das Betriebssystem kann diese Kontrolle erzwingen, da es die CPU zwingt,Sicherheitsmodus.

DOS dagegen wechselt nie in den geschützten Modus, sondern bleibt imRealmodus*. Im Realmodus können die laufenden Anwendungen alles tun, was sie wollen, z. B. direkt auf die Hardware zugreifen. Eine im Realmodus laufende Anwendung kann der CPU aber auch mitteilen, in den geschützten Modus zu wechseln.

Und dieser letzte Teil ermöglicht es Anwendungen wie Windows 95, eine Multithread-Umgebung zu starten, obwohl sie grundsätzlich unter DOS gestartet wurden.

DOS (Disk Operating System) war meines Wissens nach nicht viel mehr als ein Dateiverwaltungssystem. Es bot ein Dateisystem, Mechanismen zur Navigation im Dateisystem, einige Tools und die Möglichkeit, Anwendungen zu starten. Es ermöglichte auch, dass einige Anwendungen resident blieben, z. B. Maustreiber und EMM-Emulatoren. Es versuchte jedoch nicht, die Hardware im Computer so zu steuern, wie es ein modernes Betriebssystem tut.

* Als DOS in den 70er Jahren erstmals entwickelt wurde, gab es in der CPU keinen geschützten Modus. Erst mit dem 80286-Prozessor Mitte der 80er Jahre wurde der geschützte Modus Teil der CPU.

Antwort4

Multitasking ist nichts anderes als die Illusion, dass Anwendungen gleichzeitig ausgeführt werden. Auf Ihrer Seite wird es als gleichzeitige Ausführung wahrgenommen, aber tatsächlich teilen sich die Prozesse A, B und C die CPU-Zeit in dieser Reihenfolge: A, B, C, A, B, C, A, B... sie schalten sich nur sehr schnell ein und aus. Tatsächlich werden keine zwei Prozesse gleichzeitig ausgeführt.

Es ist also durchaus möglich, MS-DOS zum Multitasking zu bewegen, indem man einen Prozess anhält, den nächsten für eine kurze Zeit ausführt, diesen anhält, zum ersten zurückspringt und so weiter.

Multitasking ist lediglich eine clevere Funktion, die entwickelt wurde, als die CPUs schnell genug wurden, um diese Prozesse abwechselnd auszuführen und es dem Endbenutzer so erscheinen zu lassen, als ob sie gleichzeitig ausgeführt würden.

Für diejenigen, die sich erinnern: Spiele wurden immer noch auf DOS4GW ausgeführt, weil Windows einfach zu langsam war.

verwandte Informationen