Windows 8 : au cœur de l'OS controversé de Microsoft

Avec Windows Vista, Microsoft a entrepris un énorme chantier destiné à refondre complètement l’architecture de Windows et a débuté un gros travail de démêlage des dépendances.  Le grand nombre de modifications a entrainé à son lancement de nombreux problèmes de compatibilité et des bugs de jeunesse qui ont eu raison de son succès.

Avec Windows 7 sous la houlette de Steven Sinofsky, la décision fut prise de faire évoluer le système de façon graduelle. La plupart des technologies de Windows 7 étaient des versions « 2 » de celles de Vista. Windows 7 a introduit en outre un projet nommé MinWin, géré par Mark Russinovich. MinWin est l’aboutissement du travail sur les dépendances de Windows. C’est une base minimale qui peut s’exécuter et compiler de façon indépendante du reste du système. Il tient dans 25 Mo sur le disque dur et a besoin de 40 Mo en mémoire vive.

windows8 windows8

Windows 8 est considéré comme une version majeure qui apporte de nombreux changements. Mais là où Vista a tout changé et provoqué de nombreux problèmes, Windows 8 bénéficie d’une nouvelle approche. Microsoft a fait le choix de conserver la base système de Vista et de la faire évoluer de la même façon que Windows 7. Toutefois, Windows se retrouve divisé en deux environnements différents : Modern UI et le Bureau. La plupart des changements fondamentaux seront appliqués à l’environnement Modern UI. L’environnement Bureau de son côté évolue aussi mais de façon moins significative. Une telle architecture permet à Microsoft de diminuer les problèmes de compatibilité et de créer un nouvel environnement, mais avec un sérieux bémol. En effet, les Windows précédents n’obligeaient pas les développeurs à utiliser les nouvelles API (Application Programming Interface). Il s’agit donc d’un pari.

Windows Core

Avec Vista, les systèmes client et serveur ont été unifiés sur la même base. Microsoft conservait toutefois Windows CE pour tous les appareils  mobiles. En 2008 et 2009, au MSR (Microsoft Research),  deux projets ont été initiés : Menlo et Experiment 19. Menés par Galen Hunt (chef du projet Singularity), ils avaient pour but de remplacer Windows CE par une base MinWin. Ce dernier avait été porté sur ARM, ainsi que le compilateur JIT et le runtime du CLR .NET. Ce travail a été incorporé dans Windows 8, Windows RT et Windows phone 8. Windows 8 intègre désormais une base commune pour les Windows mobile, client et serveur. Microsoft nomme cette base commune Windows Core, et nous y ferons référence sous ce nom.

windows8

Il est important de souligner que la base Windows Core est simplement une évolution de celle de Vista et Windows 7. Le but est d’éviter les nombreux problèmes de compatibilité du lancement de Vista. Microsoft arrive ainsi à faire évoluer graduellement et de façon contrôlée Windows. On peut par exemple se référer aux versions du KMDF (Kernel Mode Driver Foundation) et de l’UMDF (User Mode Driver Foundation), les frameworks de pilotes introduits dans Vista, qui indiquent toujours « 1 » en version majeure.

Dans un billet publié par Steven Sinofsky en 2011, on apprend en outre que Microsoft a ajouté plusieurs protections contre les menaces de type buffer overflow dans le noyau. Elles étaient réservées auparavant aux applications. Ainsi, l’allocation des 64 premiers Ko en mémoire est maintenant interdite pour les processus utilisateurs (nous parlons ici d'une exploitation au niveau noyau, l'accès étant déja bloqué au niveau utilisateur). Cela permet d’éviter les attaques de déréférencement de NULL en mode noyau. Plusieurs contrôles d’intégrité ont également été ajoutés à la mémoire de réserve du noyau.

Le noyau NT 6.2 (Windows 8) autorise désormais aux pilotes d’allouer de la mémoire « Non paged pool » non exécutable. C’est-à-dire qu’il est impossible d’exécuter des instructions dans ce bloc mémoire alloué, le but étant d’éviter l’exploitation de failles en espace noyau. À noter que le pilote doit être conçu pour Windows 8 pour exploiter cette fonctionnalité et cela pour des raisons de compatibilité évidentes.

Windows intègre en outre plusieurs nouveautés au cœur du système afin de mieux exploiter les systèmes SOC et améliorer l’autonomie des batteries. On citera également la version 3 du système DMA dans Windows 8. Pour rappel le contrôleur DMA permet  d’accéder à la mémoire vive et d’effectuer des transferts sans utiliser le CPU.  Cette version 3 exploite la possibilité permise par les SOC de regrouper ou séparer des transferts mémoires.

windows8

Sur les précédents Windows, le noyau NT interrompait périodiquement le CPU pour effectuer entre autres le travail de l’ordonnancement et basculait sur d’autres processus. Quand le processeur est en état de repos, il peut  être coupé périodiquement pour effectuer différentes tâches empêchant une mise en veille trop longue. Sur Windows 8, cette interruption périodique est remplacée par des interruptions à la demande. Le système peut alors mettre le processeur en veille sur une durée plus longue si besoin.

Pour rappel, Windows 7 avait déjà introduit le regroupement des alarmes afin de diminuer le nombre d’interruptions. À noter que la pile réseau Windows 8 effectue aussi un regroupement des paquets réseau NDIS reçus en utilisant le cache de l’adaptateur réseau afin de diminuer les interruptions matérielles et donc d’améliorer l’autonomie. Ce changement est surement parmi les plus importants de Windows 8 pour préserver cette dernière.

Le power management framework apparaît en outre dans Windows 8. Il permet de mettre en veille seulement certains composants d’un même matériel. Par exemple sur une carte audio, le module d’enregistrement peut se mettre en veille s’il n’est pas utilisé pendant une lecture audio. Dans Windows 8, l’état D3 qui correspond à l’état éteint d’un périphérique a été divisé en deux sous-états distincts :

  • S3 Hot : le périphérique n’est pas tout à fait éteint et peut encore répondre aux requêtes du bus parent
  • S3 Cold : le périphérique est totalement éteint

Dans les Windows précédents, les périphériques pouvaient passer dans l’état S3 cold uniquement  si le PC passait en veille. Sur Windows 8, quand le périphérique n’est pas utilisé, il peut aussi  passer en état S3Cold quand le pc est en fonctionnement (état S0). Ce mécanisme devrait permettre d’augmenter nettement l’autonomie des batteries.

Une gestion du niveau de température pour les périphériques a également été intégrée. Elle permet :

  • soit un refroidissement actif en démarrant des ventilateurs ou en désactivant certains composants
  • soit un refroidissement passif qui permet de contrôler le niveau de performances du matériel (en abaissant la fréquence par exemple)

Élément intéressant, Vista s’était démarqué en proposant une pile audio entièrement logicielle. Sur Windows 8, une pile matérielle est disponible. En effet, la lecture d’un flux audio par le DSP de la carte audio peut se révéler plus rapide que par le CPU. Le but n’est en réalité pas les performances, car l’écart reste mineur,  mais l’amélioration de l’autonomie. D’ailleurs, l’accélération audio ne devrait être exploitable uniquement par les applications Modern UI.

windows8 audio

Avec Vista, Microsoft avait également introduit l’UMDF (User Mode Driver Foundation) qui permettait aux développeurs de créer des pilotes en espace utilisateur. En effet, sur les architectures actuelles, les pilotes tournent dans le même espace mémoire que le noyau. C’est la raison principale aux « BSOD » (Blue Screen of Death) sur les systèmes actuels. Microsoft a voulu faire passer plus de pilotes en espace utilisateur avec Vista pour augmenter la stabilité du système. Il est donc intéressant de voir que la version 1.11 de l’UMDF propose l’accès direct au matériel. Il est ainsi possible d’accéder aux interrupt, ports E/S et « Memory mapped registers », des fonctionnalités basiques réservées jusqu’à présent aux pilotes en espace noyau. Bien entendu, pour des raisons de performances, il n’est pas possible de faire passer l’ensemble des pilotes en espace utilisateur.

Le démarrage rapide sur Windows 8

windows8

Sur Windows 8, une nouvelle option de démarrage rapide est disponible par défaut.  À l’extinction le système ferme les sessions utilisateurs mais conserve la session 0 contenant le système, les pilotes et les services système. Cette session 0 se met en hibernation dans le fichier hiberfile.sys. Au démarrage, le système est restauré depuis ce fichier. Ce dernier ne contenant que la session 0 et Microsoft ayant optimisé fortement la base système de Windows 8, le démarrage se révèle assez rapide. Au final, le temps de lecture du fichier d’hibernation ajouté au temps de réinitialisation des pilotes en sortie d’hibernation est bien plus court que la durée d’initialisation du système avec un démarrage à froid.

Il est possible que plusieurs personnes soient obligées de désactiver cette option en raison d’une mauvaise gestion du retour d’hibernation avec certains pilotes à problème. Les problèmes de veille et d’hibernation dans les pilotes sont des bugs fréquents. 

par Vincent Hermann et Jérôme Bosch Publiée le 27/11/2012 à 14:36