Windows 95
Windows 95 war weit mehr als "nur ein Wrapper" für MS-DOS . Raymond Chen zitiert:
MS-DOS diente zwei Zwecken in Windows 95.
- Es diente als Bootloader.
- Es fungierte als 16-Bit-Treiber für ältere Geräte.
Tatsächlich hat Windows 95 fast alle MS-DOS-Programme mit einem Haken versehen / überschrieben, wobei es als Kompatibilitätsebene verwendet wird, während es selbst das schwere Anheben übernimmt. Außerdem wurde das preemptive Multitasking für 32-Bit-Programme implementiert.
Vor Windows 95
Windows 3.x und älter waren meistens 16-Bit (mit Ausnahme von Win32s, einer Art Kompatibilitätsschicht, die 16 und 32 überbrückt, aber wir werden das hier ignorieren), waren mehr von DOS abhängig und verwendeten nur kooperatives Multitasking - das ist der, bei dem sie kein laufendes Programm zum Ausschalten zwingen; Sie warten darauf, dass das laufende Programm die Kontrolle übernimmt (im Grunde sagen Sie "Ich bin fertig", indem Sie das Betriebssystem anweisen, das nächste wartende Programm auszuführen).
Multitasking war wie in früheren Versionen von MacOS kooperativ (allerdings im Gegensatz zu Multitasking DOS 4.x, das präventives Multitasking aufwies). Eine Aufgabe musste sich dem Betriebssystem ergeben, um eine andere Aufgabe zu planen. Die Erträge wurden in bestimmte API-Aufrufe eingebaut, insbesondere für die Nachrichtenverarbeitung. Solange eine Aufgabe Nachrichten rechtzeitig verarbeitet hat, war alles großartig. Wenn eine Task die Verarbeitung von Nachrichten beendet hat und mit der Ausführung einer Verarbeitungsschleife beschäftigt war, war Multitasking nicht mehr möglich.
Wie würden frühe Windows-Programme die Kontrolle übernehmen:
Windows 3.1 verwendet kooperatives Multitasking. Dies bedeutet, dass jede Anwendung, die gerade ausgeführt wird, angewiesen wird, eine Nachrichtenwarteschlange regelmäßig zu überprüfen, um herauszufinden, ob eine andere Anwendung die Verwendung der CPU anfordert, und falls ja, Kontrolle über diese Anwendung zu geben . Viele Windows 3.1-Anwendungen würden die Nachrichtenwarteschlange jedoch nur selten oder gar nicht überprüfen und die Kontrolle über die CPU so lange ausüben, wie sie es benötigt. Ein preemptives Multitasking-System wie Windows 95 nimmt die CPU-Kontrolle von einer laufenden Anwendung ab und verteilt sie an diejenigen, die eine höhere Priorität haben, je nach den Anforderungen des Systems.
Alles, was DOS sehen würde, ist, dass diese einzige Anwendung (Windows oder andere) ausgeführt wird, die die Kontrolle weitergibt, ohne zu beenden. Theoretisch kann preemptives Multitasking möglicherweise ohnehin über Echtzeituhr und Hardware-Interrupts implementiert werden, um dem Scheduler zwangsweise die Kontrolle zu geben. Wie Tonny kommentiert, wurde dies tatsächlich von einigen Betriebssystemen ausgeführt, die auf DOS laufen.
386 erweiterter Modus?
Hinweis: Es wurden einige Kommentare dazu abgegeben, dass der erweiterte 386-Modus von Windows 3.x 32-Bit ist und preemptives Multitasking unterstützt.
Dies ist ein interessanter Fall. Um den verknüpften Blogbeitrag zusammenzufassen, war der 386-Modus im Wesentlichen ein 32-Bit-Hypervisor, der virtuelle Maschinen ausführte. In einer dieser virtuellen Maschinen war der Windows 3.x-Standardmodus ausgeführt, der alle oben aufgeführten Dinge erledigt.
MS-DOS würde auch innerhalb dieser virtuellen Maschinen ausgeführt und anscheinend waren sie präemptiv Multitasking - so scheint es, dass der 386 Hypervisor mit erweitertem Modus CPU-Zeitscheiben zwischen den virtuellen Maschinen teilt (eine davon lief auf normalem 3.x und andere, auf denen MS ausgeführt wurde -DOS), und jede VM erledigt ihre eigene Sache - 3.x würde gemeinsam Multitasking ausführen, während MS-DOS Einzelaufgabe ausführen würde.
MS-DOS
DOS selbst war auf Papier Single-Tasking, unterstützte aber TSR- Programme, die im Hintergrund blieben, bis sie durch einen Hardware-Interrupt ausgelöst wurden. Weit weg von echtem Multitasking, aber auch nicht vollständig für Einzelaufgaben.
All dieses Gerede von Bit-Ness? Ich habe nach Multitasking gefragt!
Nun, genau genommen sind Bititess und Multitasking nicht voneinander abhängig. Es sollte möglich sein, jeden Multitasking-Modus in beliebiger Bit-Qualität zu implementieren. Mit der Umstellung von 16-Bit-Prozessoren auf 32-Bit-Prozessoren wurden jedoch auch andere Hardwarefunktionalitäten eingeführt, die die Implementierung von preemptive Multitasking vereinfacht hätten.
Da 32-Bit-Programme neu sind, war es auch einfacher, sie zum Laufen zu bringen, wenn sie gewaltsam gewechselt wurden - was einige alte 16-Bit-Programme möglicherweise beschädigt hat.
Das ist natürlich alles Spekulation. Wenn Sie wirklich wissen wollen, warum MS unter Windows 3.x kein preemptives Multitasking (ungeachtet des erweiterten 386-Modus) implementiert hat, müssen Sie jemanden fragen, der dort gearbeitet hat.
Außerdem wollte ich Ihre Annahme korrigieren, dass Windows 95 nur ein Wrapper für DOS war.