Pourquoi le déplacement du curseur de la souris a-t-il accéléré le fonctionnement de Windows 95 ?

Je jouais à Hypnospace Outlaw, un jeu sur un système d'exploitation au thème rétro. Ce système d'exploitation a un comportement particulier : lors du chargement d'une page Web, le fait d'agiter le curseur de la souris permet de charger la page plus rapidement.

Cela m'a rappelé quelque chose. Quand j'étais jeune, si je me souviens bien, Windows 95 (si ce n'est pas 98) avait ce comportement bizarre : lors de l'installation de programmes, agiter le curseur de la souris rendait la progression plus rapide. Quelle était la cause de ce phénomène ? J&#8217ai cherché sur Google, mais je n&#8217ai rien trouvé à ce sujet.

Désolé pour cette explication vague.

Cela est dû à un défaut dans la manière dont Windows 95 génère les événements, et au fait que de nombreuses applications sont pilotées par des événements.

Les applications Windows 95 utilisent souvent des E/S asynchrones, c'est-à-dire qu'elles demandent l'exécution d'une opération sur un fichier, comme une copie, puis indiquent au système d'exploitation qu'elles peuvent être mises en veille jusqu'à la fin de cette opération. En se mettant en veille, elles permettent à d'autres applications de s'exécuter, plutôt que de gaspiller le temps du processeur à demander sans cesse si l'opération sur le fichier est terminée.

Pour des raisons qui ne sont pas tout à fait claires, mais qui sont probablement dues à des problèmes de performances sur les machines bas de gamme, Windows 95 a tendance à regrouper les messages concernant la fin des E/S et ne réveille pas immédiatement l'application pour les traiter. Cependant, il réveille l'application pour les entrées de l'utilisateur, sans doute pour qu'elle reste réactive, et lorsque l'application est réveillée, elle traite également tous les messages d'E/S en attente.

Ainsi, le fait d'agiter la souris amène l'application à traiter les messages d'E/S plus rapidement, et à s'installer plus vite. L'effet était assez prononcé ; de grandes applications qui pouvaient prendre une heure à installer pouvaient être réduites à 15 minutes avec une entrée de souris appropriée.

Commentaires (16)

Oui, c&#8217est un effet réel qui entraîne une accélération mesurable et qui peut être reproduit à volonté :

Essayez d'ouvrir un gros fichier avec Notepad sur une machine contemporaine. La fenêtre ne doit pas être en plein écran. Une fois le fichier chargé, marquez tout le texte à l'aide de la souris (le clavier fonctionne aussi, il faut juste plus d'habileté manuelle). Tout en maintenant le bouton enfoncé (et en marquant), déplacez la souris vers le bas, de sorte que le texte soit marqué et défile. Comparez maintenant la vitesse de défilement en maintenant la souris immobile et en la déplaçant. Selon votre machine, la vitesse peut être plusieurs fois plus rapide.

Incroyable, n&#8217est-ce pas ?

Ce phénomène peut également être observé dans de nombreux autres programmes, le Bloc-notes n'étant qu'un exemple facile à reproduire. Il est lié à la façon dont le multitâche fonctionnait dans les premières versions de Windows. Ici, tout tournait autour de la file d'attente des messages. Le fait d'agiter la souris entraînait une avalanche de messages de déplacement de la souris, ce qui avait pour effet de réveiller les programmes plus souvent et (en fonction de leur structure) de mettre à jour leurs états à chaque fois, d'entrer à nouveau dans la boucle de messages, de donner du temps aux mises à jour de l'écran, ce qui se traduisait par une réaction globalement plus rapide. Cela montre un aperçu des moyens utilisés par MS pour rendre Windows plutôt réactif malgré sa nature de thread coopératif.

Commentaires (18)

Windows pre-NT (Windows 1,2,3,3.11,95,98) était un multitâche coopératif par rapport au multitâche préemptif de NT's (2000, XP, Vista, 7 &amp ; 10).

En multitâche coopératif, l'application de premier plan doit céder le contrôle aux autres tâches. Ainsi, si l'application de premier plan était bloquée, la machine entière se figeait.

Dans le cas du multitâche préemptif, le système dispose généralement d'une interruption matérielle, généralement une minuterie, pour forcer la cession.

Sous Windows 95, le clavier et la souris généraient des interruptions, le déplacement de la souris provoquait le déclenchement de l'interruption et la prise en charge par le système d'exploitation de sa file d'attente d'événements. Une forme de multitâche préemptif, au lieu d'une interruption fixe par minuterie, c'est vous qui le faisiez.

Le système d'exploitation mettait à jour l'état à l'écran au moment de l'interruption, puis s'occupait des autres tâches. La mise à jour de l'écran donnait l'impression que le système d'exploitation traitait plus rapidement.

EDIT - 1/2 droit ... Il n'est pas possible de préempter des applications Win16 en multitâche parce que le système utilise le même modèle de machine virtuelle (VM) que dans Windows 3.1 pour exécuter les applications Win16. Ainsi, Windows 95 reviendra à un environnement multitâche coopératif lors de l'exécution d'applications Win16 et leur donnera le contrôle exclusif du processeur tant que les applications seront en cours d'exécution. Par conséquent, un véritable fonctionnement préemptif est impossible lors de l'exécution multitâche d'un mélange d'applications Win16 et Win32.

Commentaires (5)