Ich habe gelesen, dass DOS ein Single-Tasking-Betriebssystem ist.
Aber wenn alte Windows-Versionen (auch Windows 95?) Nur DOS-Wrapper wären, wie könnte Windows dann als Multitasking-Betriebssystem ausgeführt werden?
windows
multitasking
Arkonix
quelle
quelle
print
Dienstprogramm für Windows 2.1-3.0 oder ansi.sys unter MS-DOS 5.0), auch nach Ablauf der angegebenen 12 Monate -Lebensfrist. Es ist einfach nicht so einfach zu durchsuchen wie die aktive Produktdokumentation. Sie müssen bei Ihren Suchanfragen genau sein.Antworten:
Windows 95
Windows 95 war weit mehr als "nur ein Wrapper" für MS-DOS . Zitat Raymond Chen:
Windows 95 hat praktisch alle MS-DOS-Betriebssysteme angehängt / überschrieben, wobei es als Kompatibilitätsebene beibehalten wurde, während das ganze Heben selbst ausgeführt wurde. Außerdem wurde präemptives Multitasking für 32-Bit-Programme implementiert.
Pre-Windows 95
Windows 3.x und älter waren größtenteils 16-Bit (mit Ausnahme von Win32s, einer Art Kompatibilitätsebene, die 16 und 32 verbindet, aber wir werden das hier ignorieren), waren stärker von DOS abhängig und verwendeten nur kooperatives Multitasking - das ist die, bei der sie kein laufendes Programm zum Ausschalten zwingen; Sie warten darauf, dass das ausgeführte Programm die Steuerung übernimmt (sagen Sie "Ich bin fertig", indem Sie das Betriebssystem anweisen, das nächste Programm auszuführen, das wartet).
Windows 3.x Architektur
Wie früh würden Windows-Programme die Kontrolle übernehmen?
Quelle
Alles, was DOS sehen würde, ist, dass diese einzelne Anwendung (Windows oder eine andere) ausgeführt wird, die die Steuerung weitergibt, ohne dass sie beendet wird. Theoretisch kann preemptives Multitasking möglicherweise ohnehin über DOS implementiert werden, indem eine Echtzeituhr und Hardware-Interrupts verwendet werden, um die Steuerung des Schedulers zu erzwingen. Wie Tonny bemerkt , wurde dies tatsächlich von einigen Betriebssystemen durchgeführt, die auf DOS liefen.
386 erweiterter Modus?
Hinweis: Es wurden einige Kommentare zum erweiterten 386-Modus von Windows 3.x (32-Bit) und zur Unterstützung von präemptivem Multitasking abgegeben.
Dies ist ein interessanter Fall. Um den verknüpften Blog-Beitrag zusammenzufassen , war der erweiterte 386-Modus im Grunde ein 32-Bit-Hypervisor, auf dem virtuelle Maschinen ausgeführt wurden. Auf einer dieser virtuellen Maschinen wurde der Windows 3.x-Standardmodus ausgeführt, der alle oben aufgeführten Aufgaben ausführt.
MS-DOS würde auch in diesen virtuellen Maschinen ausgeführt, und anscheinend waren sie präventiv Multitasking - so scheint es, dass der 386-Hypervisor im erweiterten Modus CPU-Zeitscheiben zwischen den virtuellen Maschinen (von denen eine normales 3.x und andere, auf denen MS ausgeführt wurde, gemeinsam nutzen wird) -DOS), und jede VM macht ihr eigenes Ding - 3.x würde kooperativ Multitasking ausführen, während MS-DOS Single-Tasking ausführen würde.
MS-DOS
DOS selbst war eine Einzelaufgabe auf Papier, unterstützte jedoch TSR- Programme, die so lange im Hintergrund blieben, bis sie von einem Hardware-Interrupt ausgelöst wurden. Weit entfernt von echtem Multitasking, aber auch nicht vollständig auf einmal.
All das Gerede von Bissigkeit? Ich habe nach Multitasking gefragt!
Genau genommen sind Bit-Ness und Multitasking nicht voneinander abhängig. Es sollte möglich sein, irgendeinen Multitasking-Modus in irgendeiner Bit-Ness zu implementieren. Die Umstellung von 16-Bit-Prozessoren auf 32-Bit-Prozessoren führte jedoch auch andere Hardwarefunktionen ein, die die Implementierung von präventivem Multitasking erleichtern könnten.
Da 32-Bit-Programme neu waren, war es auch einfacher, sie zum Laufen zu bringen, wenn sie gewaltsam ausgeschaltet wurden - was möglicherweise einige ältere 16-Bit-Programme beschädigt hat.
Das ist natürlich alles Spekulation. Wenn Sie wirklich wissen möchten, warum MS in Windows 3.x kein präventives Multitasking implementiert hat (ungeachtet des erweiterten 386-Modus), 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 ist;)
quelle
Es lief ununterbrochen ein einzelnes Programm, das als Windows bezeichnet wurde. Dieser verteilt die CPU-Zeit (und andere Ressourcen) auf verschiedene Programme.
Betrachten Sie diese Analogie:
Sie haben ein Büro, in dem jeweils nur eine Person arbeiten kann (diese Person heißt Mister oder Missus DOS). Diese Person arbeitet zu der Zeit an einer Sache. ZB ruft es eine einzelne Person an und fängt an, 24/7 mit ihr zu plaudern.
Jetzt ersetzen Sie diese Person durch Herrn Sekretär. (Fenster). Es wird jemanden anrufen und die ganze Zeit damit sprechen (immer noch eine einzige Aufgabe). Dann sagt die andere Person nach einiger Zeit: "Ich habe jetzt genug geredet. Sprich mit jemand anderem und ruf mich gleich zurück."
Herr Sekretär wird die andere Person anrufen. Chatte mit dieser Person, bis sie dasselbe sagt. Dann ruft es die nächste Person an, bis es am Ende der Liste der Personen steht, mit denen gesprochen werden soll. Zu diesem Zeitpunkt wird es wieder an der Spitze beginnen.
Wenn Sie mehrere Prozessoren hinzufügen, wird dies noch komplizierter. :)
quelle
In einem modernen Betriebssystem steuert das Betriebssystem alle Hardwareressourcen und laufende Anwendungen werden in Sandkästen gespeichert. 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 Steuerung erzwingen, da die CPU gezwungen wird, in den geschützten Modus zu wechseln .
DOS hingegen wechselt nie in den geschützten Modus, sondern bleibt im realen Modus *. Im Real-Modus können die laufenden Anwendungen alles ausführen, was sie möchten, z. B. direkt auf die Hardware zugreifen. Eine im Real-Modus ausgeführte Anwendung kann die CPU jedoch auch anweisen, in den geschützten Modus zu wechseln.
Und dieser letzte Teil ermöglicht es Anwendungen wie Windows 95, eine Umgebung mit mehreren Threads zu starten, obwohl sie im Grunde genommen unter DOS gestartet wurden.
DOS (Disk Operating System) war nicht viel mehr als ein Dateiverwaltungssystem. Es bot ein Dateisystem, Mechanismen zum Navigieren im Dateisystem, einige Tools und die Möglichkeit, Anwendungen zu starten. Einige Anwendungen, z. B. Maustreiber und EMM-Emulatoren, konnten ebenfalls resident bleiben. Es wurde jedoch nicht versucht, die Hardware im Computer so zu steuern, wie es ein modernes Betriebssystem tut.
* Als DOS in den 70er Jahren zum ersten Mal erstellt 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.
quelle
Vor Windows 3.x, der ersten Version für Multitask-DOS-Anwendungen, gab es Programme wie DesqView, die dies ebenfalls konnten. Wenn beispielsweise drei DOS-Sitzungen gleichzeitig ausgeführt werden, erstellt DesqView vier virtuelle Maschinen. Bei den drei DOS-Sitzungen wurde jeweils angenommen, dass sie den gesamten Computer "besaßen", mit der Ausnahme, dass keiner von ihnen tatsächlich Datei-E / A-Vorgänge ausführte. Stattdessen wird die in jeder Sitzung ausgeführte DOS-Version gepatcht, sodass alle Anforderungen für Datei-E / A an eine spezielle Sitzung weitergeleitet werden, die diesem Zweck gewidmet ist. Da die Textmodushardware des PCs den Inhalt eines Speicherbereichs kontinuierlich als Zeichen anzeigt; DesqView kann jeder Sitzung einen eigenen virtuellen Bildschirm zuweisen, indem der 0xB8000-0xB9FFF-Bereich jeder Sitzung ihrem eigenen RAM-Bereich zugeordnet wird. und periodisches Kopieren des Bereichs der aktuellen Anwendung in den physischen Bildschirmpuffer. Die grafische Unterstützung war viel schwieriger, da 256 KB RAM auf der Anzeigetafel mit 64 KB Adressraum, einigen E / A-Registern und "interessanter" Hardware gesteuert wurden, bei der bestimmte Sequenzen gelesen und geschrieben werden mussten. Im Textmodus konnte DesqView, wenn eine Anwendung etwas in den Textpuffer schrieb, ein Flag setzen, das angibt, dass es beim nächsten Timer-Tick auf die Anzeige kopiert werden soll. Nur das erste Schreiben in den Textpuffer in einem bestimmten Zeitintervall würde das Eingreifen von DesqView erfordern. Alle anderen werden auf den nächsten Timer-Tick konsolidiert. Da 256 KB RAM auf der Anzeigetafel mit 64 KB Adressraum, einigen E / A-Registern und "interessanter" Hardware gesteuert wurden, mussten die Daten in bestimmten Sequenzen gelesen und geschrieben werden. Im Textmodus konnte DesqView, wenn eine Anwendung etwas in den Textpuffer schrieb, ein Flag setzen, das angibt, dass es beim nächsten Timer-Tick auf die Anzeige kopiert werden soll. Nur das erste Schreiben in den Textpuffer in einem bestimmten Zeitintervall würde das Eingreifen von DesqView erfordern. Alle anderen werden auf den nächsten Timer-Tick konsolidiert. Da 256 KB RAM auf der Anzeigetafel mit 64 KB Adressraum, einigen E / A-Registern und "interessanter" Hardware gesteuert wurden, mussten die Daten in bestimmten Sequenzen gelesen und geschrieben werden. Im Textmodus konnte DesqView, wenn eine Anwendung etwas in den Textpuffer schrieb, ein Flag setzen, das angibt, dass es beim nächsten Timer-Tick auf die Anzeige kopiert werden soll. Nur das erste Schreiben in den Textpuffer in einem bestimmten Zeitintervall würde das Eingreifen von DesqView erfordern. Alle anderen werden auf den nächsten Timer-Tick konsolidiert. DesqView könnte ein Flag setzen, das angibt, dass es beim nächsten Timer-Tick auf die Anzeige kopiert werden soll. Nur das erste Schreiben in den Textpuffer in einem bestimmten Zeitintervall würde das Eingreifen von DesqView erfordern. Alle anderen werden auf den nächsten Timer-Tick konsolidiert. DesqView könnte ein Flag setzen, das angibt, dass es beim nächsten Timer-Tick auf die Anzeige kopiert werden soll. Nur das erste Schreiben in den Textpuffer in einem bestimmten Zeitintervall würde das Eingreifen von DesqView erfordern. Alle anderen werden auf den nächsten Timer-Tick konsolidiert.
Im Gegensatz dazu müsste DeskView für die Virtualisierung des Grafikmodus jeden einzelnen Schreibvorgang abfangen, um den Speicher oder die E / A-Register anzuzeigen. Da dies das Schreiben des Speichers um den Faktor 100 verlangsamen würde und Grafikprogramme viel mehr Daten schreiben mussten als Textprogramme, war die Echtzeitvirtualisierung der meisten Grafiksoftware nicht praktikabel. Stattdessen wurde für Grafiken eine Nicht-Vordergrundanwendung verwendet, bei der versucht wurde, die Grafik anzuhalten, bis sie zur Vordergrundanwendung wurde, und die dann die vollständige Kontrolle über den Bildschirm ausübte. Wenn die Steuerung zu einer anderen Anwendung wechselt, versucht DesqView, den Status aller Grafikregister zu kopieren und dann zu wechseln. Beim Zurückschalten zur grafischen Anwendung stellte DesqView den gespeicherten Zustand wieder her.
In gewisser Weise war das Multitasking nicht grafischer DOS-Anwendungen einfacher als das Multitasking von Windows-Anwendungen, da nur sehr wenige Ressourcen gemeinsam genutzt wurden und die Anwendungen nicht miteinander interagieren mussten. Im Gegensatz dazu ist es in Windows erforderlich, sich mit Dingen wie der Zwischenablage oder der Möglichkeit zu befassen, dass sich die Fenster eines Programms so bewegen, dass die Fenster eines anderen Programms verdeckt werden. Windows 95 war die erste Version von Windows, die solche Einschränkungen überwinden konnte, indem sie Dinge wie ein Fenstersystem einbezog, bei dem ein Bereich des Bildschirms nicht mehr verfügbar war, während der Code versuchte, darauf zu zeichnen (mit dem Effekt, dass die Zeichnung ausgeblendet wurde) ).
quelle
Multitasking ist nichts anderes als die Illusion, Anwendungen gleichzeitig auszuführen. Es wird als gleichzeitige Ausführung auf Ihrer Seite angesehen, 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 einfach ein und sehr schnell ab. Es werden tatsächlich keine zwei Prozesse gleichzeitig ausgeführt.
Es ist also durchaus möglich, MS-DOS-Multitasking auszuführen, indem Sie einen Prozess anhalten, den nächsten für einen kurzen Zeitraum ausführen, diesen anhalten, zum ersten zurückspringen und so weiter.
Multitasking ist nur eine clevere Funktion, die entwickelt wurde, als die CPUs schnell genug waren, um diese Prozesse fortlaufend zu durchlaufen und sie für den Endbenutzer simultan erscheinen zu lassen.
Für diejenigen, die sich erinnern, wurden Spiele immer noch unter DOS4GW ausgeführt, weil Windows einfach zu langsam war.
quelle
Auch wenn es sich nur auf eine Aufgabe konzentrieren kann, ist dies ein einfacher Schritt, um schnell von einer zur anderen zu gelangen. Auf diese Weise schien es, dass es Multitasking war, aber in Wahrheit konzentriert es sich nur auf 1, dann auf einen anderen, dann auf einen anderen usw.
quelle
Eine Sache, die ich hier nicht erwähnt habe, ist irgendwie interessant:
Windows 3.0 war kein vorbeugendes Multitasking-System, sondern wie alle MacOS-Versionen kooperativ, bis OS X - Eine App von einem Anruf zurückkehren musste, bevor eine andere App Maßnahmen ergreifen konnte.
Ein Kommentator erinnerte mich jedoch daran, dass DOS-Apps mehrere Aufgaben haben. Dies liegt daran, dass sie nicht für "Kooperativ" -Multitask geschrieben wurden (Dies muss immer in Systeme eingebaut werden, die es verwenden).
Zu dieser Zeit gab es Programme namens TSRs (Terminate-Stay Resident), die die heutigen Gerätetreiber ersetzten. Diese Treiber würden unabhängig voneinander ausgeführt - im Allgemeinen auf ihrem eigenen Thread, indem sie sich in einen der Event-Handler des Betriebssystems einfügen. Windows wusste im Allgemeinen nichts über sie, sie liefen auf einer niedrigeren Ebene.
Hierbei handelte es sich nicht wirklich um Windows-Apps, sondern darum, wie alle Threading-Aktivitäten vor Windows 3.1 stattfanden, z. B. Druckertreiber, Com-Treiber usw.
Windows 3.1 war zwar multitaskingfähig, DOS jedoch nicht. Windows 3.1 schob DOS jedoch einfach aus dem Weg und übernahm beim Start das Kommando (Damals wurde Windows häufig über eine DOS-Eingabeaufforderung gestartet).
quelle
Gute Frage. In MS-DOS war der Kernel monolithisch, was bedeutet, dass er nur eine Aufgabe gleichzeitig erledigte, im Vergleich zu dem neuen, modernen Kernel, der in Windows 9x und der aktuellen Version implementiert war. Sie können mehr Besuche hier .
quelle