Warum führte das Bewegen des Mauszeigers dazu, dass Windows 95 schneller lief?

Ich habe Hypnospace Outlaw gespielt, ein Spiel über ein Betriebssystem im Retro-Stil. Dieses Betriebssystem hat die eigenartige Eigenschaft, dass beim Laden einer Webseite das Wackeln des Mauszeigers die Seite schneller lädt.

Das erinnerte mich an etwas. Wenn ich mich richtig erinnere, hatte Windows 95 (wenn nicht 98) in meiner Jugend dieses merkwürdige Verhalten, dass bei der Installation von Programmen das Wackeln des Mauszeigers den Vorgang beschleunigte. Wodurch wurde das verursacht? Ich habe danach gegoogelt, aber ich konnte nichts dazu finden.

Entschuldigung für die vage Erklärung.

Der Grund dafür ist ein Fehler in der Art und Weise, wie Windows 95 Ereignisse erzeugt, und die Tatsache, daß viele Anwendungen ereignisgesteuert sind.

Windows 95-Anwendungen verwenden häufig asynchrone E/A, d.h. sie fordern eine Dateioperation wie z.B. einen Kopiervorgang an und teilen dem Betriebssystem dann mit, daß sie in den Ruhezustand versetzt werden können, bis diese Operation beendet ist. Indem sie sich schlafen legen, ermöglichen sie anderen Anwendungen die Ausführung, anstatt endlos CPU-Zeit mit der Frage zu verschwenden, ob die Dateioperation bereits abgeschlossen ist.

Aus Gründen, die nicht ganz klar sind, aber wahrscheinlich aufgrund von Leistungsproblemen auf Low-End-Rechnern, neigt Windows 95 dazu, die Meldungen über den Abschluß von E/A zu bündeln und die Anwendung nicht sofort aufzuwecken, um sie zu bedienen. Allerdings wird die Anwendung bei Benutzereingaben aufgeweckt, vermutlich um sie reaktionsfähig zu halten, und wenn die Anwendung wach ist, werden auch alle anstehenden E/A-Meldungen bearbeitet.

Das Wackeln der Maus führt also dazu, dass die Anwendung E/A-Nachrichten schneller verarbeitet und schneller installiert. Der Effekt war ziemlich ausgeprägt; große Anwendungen, die eine Stunde für die Installation benötigen, konnten durch geeignete Mauseingaben auf 15 Minuten reduziert werden.

Kommentare (16)

Ja, es ist ein echter Effekt, der zu einer messbaren Beschleunigung führt und beliebig reproduziert werden kann:

Versuchen Sie, eine große Datei mit Notepad auf einem modernen Rechner zu öffnen. Das Fenster darf nicht bildschirmfüllend sein. Wenn die Datei geladen ist, markieren Sie den gesamten Text mit der Maus (mit der Tastatur geht es auch, es erfordert nur mehr manuelles Geschick). Während Sie die Taste gedrückt halten (und markieren), bewegen Sie die Maus nach unten, so dass der Text markiert und gescrollt wird. Vergleichen Sie nun die Scroll-Geschwindigkeit, wenn Sie die Maus festhalten, mit der Geschwindigkeit, mit der Sie sie bewegen. Je nach Rechner kann die Geschwindigkeit um ein Vielfaches höher sein.

Erstaunlich, nicht wahr?

Dies kann auch in vielen anderen Programmen beobachtet werden, Notepad ist nur ein leicht zu reproduzierendes Beispiel. Es hängt mit der Art und Weise zusammen, wie Multitasking in frühen Versionen von Windows funktionierte. Hier drehte sich alles um die Nachrichtenwarteschlange. Das Wackeln der Maus führte zu einer Flut von Mausbewegungsmeldungen, was wiederum dazu führte, dass Programme häufiger aufwachten und (je nach ihrer Struktur) jedes Mal ihren Zustand aktualisierten, wieder in die Meldungsschleife gingen und Zeit für Bildschirmaktualisierungen hatten, was insgesamt zu einer schnelleren Reaktion führte. Dies ist ein Beispiel dafür, wie MS Windows trotz seines kooperativen Threading-Charakters recht reaktionsschnell machen konnte.

Kommentare (18)

Windows vor NT (Windows 1, 2, 3, 3.11, 95, 98) war kooperatives Multitasking gegenüber NT's (2000, XP, Vista, 7 & 10) präemptives Multitasking.

Beim kooperativen Multitasking muss die Vordergrundanwendung die Kontrolle an andere Aufgaben abgeben. Wenn also die Vordergrundanwendung stecken blieb, fror der gesamte Rechner ein.

Beim präemptiven Multitasking verfügte das System in der Regel über einen Hardware-Interrupt, in der Regel einen Timer, um die Aufgabe zu erzwingen.

Unter Windows 95 erzeugten die Tastatur und die Maus Interrupts, das Bewegen der Maus führte dazu, dass der Interrupt ausgelöst wurde und das Betriebssystem die Ereigniswarteschlange bediente. Eine Form von präemptivem Multitasking, anstelle eines festen Timer-Interrupts, taten Sie es.

Das Betriebssystem würde den Status auf dem Bildschirm bei der Unterbrechung aktualisieren und dann die anderen Aufgaben abarbeiten. Die Aktualisierung des Bildschirms würde den Eindruck erwecken, dass das Betriebssystem schneller arbeitet.

EDIT - 1/2 richtig ... Win16-Anwendungen können nicht präemptiv multitaskingfähig sein, da das gleiche Modell der virtuellen Maschine (VM) wie in Windows 3.1 verwendet wird, um Win16-Anwendungen auszuführen. Daher kehrt Windows 95 zu einer kooperativen Multitasking-Umgebung zurück, wenn Win16-Anwendungen ausgeführt werden, und gibt ihnen die exklusive Kontrolle über die CPU, solange die Anwendungen ausgeführt werden. Infolgedessen ist ein echter präemptiver Betrieb unmöglich, wenn eine Mischung aus Win16- und Win32-Anwendungen im Multitasking ausgeführt wird.

Kommentare (5)