ou INSCRIVEZ-VOUS Mot de passe oublié ?
Publicité

Dossier Vista : première partie

Vincent HERMANN, Jerôme BOSCH le 30 janvier 2006 (147 032 lectures)
Le noyau de Vista



Parlons d’abord de ce que l’on appelle la pagination.

Sur les noyaux des systèmes d’exploitation NT5 (Windows 2000/XP), la mémoire virtuelle est découpée en petits morceaux (les pages). Si le taux d'utilisation de la mémoire physique est trop élevé, le noyau choisit les pages à retirer de la mémoire pour les stocker dans le fichier de pagination (pagefile.sys) sur le disque dur. Les nouvelles pages peuvent ainsi ensuite être allouées. Si une page demandée n'est pas présente dans la mémoire physique, il se produit ce que l'on appelle un défaut de page. Une page va à nouveau être libérée pour pouvoir recharger celle présente sur le disque dur.

Windows XP gère une table de toutes les pages allouées. Sur les systèmes à architecture X86, une page fait 4096 octets et la table des pages contient au maximum 524 288 entrées. Sur les systèmes NT5, 50 000 PTE (Page Table Entries) sont réservées pour un usage général et le reste est alloué entre différents types de mémoire :

  • Non page pool Memory
  • Page pool
  • Session space
  • Mapped view memory

La taille de ces différents types de mémoire est allouée à partir de la quantité de mémoire physique disponible sur la machine et de paramètres fixes dans la base de registre. On peut donc noter que le système d'adressage-mémoire sur Windows XP fixe certaines ressources au niveau du démarrage du PC et est donc de nature statique.

Sur Vista (NT6), Microsoft introduit un système d'adressage-mémoire dynamique : tous les types de systèmes d'adressages peuvent grossir à la demande. Les pages du noyau elles aussi peuvent être allouées dynamiquement ainsi que la « pool memory » utilisée principalement par les drivers. Le noyau n’est plus limité au niveau des ressources, ce qui devrait éliminer certains redémarrages dus au balancement des ressources suite à une reconfiguration du système.

Ce mécanisme est accompagné d’un certain nombre de protections. Par exemple, pour protéger un composant du système de la corruption des pages-mémoires, comme le registre par exemple, les pages sont marquées en lecture seule. Quand le composant a besoin d'écrire sur cette page il va changer la permission pour autoriser l'écriture, puis remettre ensuite la permission en lecture seule. Dans le cas de barrettes-mémoires défectueuses, le système peut également lancer un test de la mémoire vive. Ce logiciel prévient le système d’exploitation de ne pas utiliser les pages physiques mémoires corrompues.

Le noyau de Vista profite ensuite d’un certain lifting du côté des performances. Par exemple, la réduction de la fragmentation sur le fichier de pagination ainsi que des accès plus rapides en lecture. Les allocations-mémoires ont été améliorées de 30% pour la mémoire conventionnelle et de 2500% pour la mémoire AWE. Cette mémoire AWE, pour Advanced Windowing Extensions, permet en fait au système d’accéder à toute la mémoire située au-delà des 4Go, ce que les systèmes Windows Server peuvent faire (jusqu’à 64Go pour le Datacenter Server), mais d’une manière assez perfectible. A noter que cette barrière n’est toutefois inhérente qu’aux versions 32 bits de Windows.

Pour pouvoir accélérer les accès aux applications, Vista utilise la technologie Superfetch, qui utilise la mémoire disponible du système pour mettre en cache les applications les plus utilisées selon des critères assez complexes. Le Superfetch, qui agit comme un cache intelligent, va établir des profils détaillés des applications et va, par exemple, garder en mémoire les applications qui sont utilisées en semaine et celles qui sont lancées pendant le week-end.

Cette gestion complexe de la mémoire vise à toujours obtenir un maximum de performances. Ainsi, si une application lourde est lancée, comme Photoshop, le Superfetch libérera des ressources pour les redonner. Le Superfetch est également capable d’utiliser les clés USB, via la technologie ReadyBoost, pour créer un espace de stockage pour le cache, situé entre la mémoire vive et le disque dur. Les performances en accès aléatoire sont bien meilleures en général avec les clés USB qu’avec les disques durs. Vista crypte d’ailleurs les données du Superfetch créées sur la clé USB pour des raisons de sécurité.


Le Superfetch est à l’origine de ce que l’on pourrait appeler au premier abord une consommation gargantuesque de mémoire vive sous Vista. Le fait est qu’à l’utilisation, le système reste rapide en permanence. Le but de ce système n’est pas d’économiser les ressources, mais de prodiguer les meilleures performances possibles. Il s’agit globalement d’une philosophie visant à exploiter au maximum les ressources matérielles qui sont disponibles.

Le noyau de Windows utilise ce que l’on appelle un ordonnanceur temps partagé pour rendre plus simple l’utilisation simultanée des applications. Son rôle est de partager l’utilisation du CPU entre les différentes applications. A chaque quota de temps (dans l’ordre des ms) l’ordonnanceur prend la main et va décider à quelle application il va passer la main selon un algorithme complexe. Windows Vista devrait rajouter des fonctionnalités en temps réel pour le multimédia à l’ordonnanceur, ce qui permettrait de s’assurer qu’une tâche vidéo ou audio se terminera à un moment donné. Ceci devrait permettre, entre autres, d’éviter les problèmes de grésillement de sons en assurant une période de temps pour certaines tâches critiques. Les accès entrées/sorties aux fichiers sur Vista sont maintenant ordonnancés. L’ordonnanceur gérera également les priorités sur les différentes requêtes I/O, les accès entrées/sorties aux fichiers et pourra également réserver de la bande passante.

La gestion d’erreurs, suite à un problème, peut devenir ardue sur Windows. Imaginons une sauvegarde de fichiers qui échoue : cela peut souvent entraîner une corruption du fichier. Le Kernel Transaction Manager (KTM) devrait résoudre ce problème. Les transactions sont un mécanisme emprunté au monde des bases de données. Le principe est d’assurer une opération ou une suite d’opérations de manière atomique (indivisible). Un échec de la transaction renvoie alors automatiquement les ressources dans leur état initial.

Notons que les problèmes matériels causeraient 7 à 10% des plantages, d’après le Microsoft Online Crash Analysis (OCA). Les systèmes précédents n’étaient pas assez précis au niveau des informations d’erreurs renvoyées, et Microsoft a donc mis en place la Windows Hardware Error Architecture (WHEA) qui devrait uniformiser les mécanismes de récupération et de traitement d’erreurs (qui pour l’instant diffèrent selon le matériel).
Windows Vista devrait également permettre l’ajout ou le remplacement à chaud de processeurs et de barrettes-mémoires (pour les serveurs). C’est le mécanisme de « dynamic partitioning » (Document PPT) qui devrait être géré par les fabricants de matériels.

Noyau hybride et sous systèmes

Avant de commencer, il faut différencier le noyau de l’espace noyau. L’espace noyau correspond à une zone-mémoire (l’anneau 0) plus privilégiée dans laquelle un bug entraîne nécessairement le crash du système. L’espace noyau, comme nous le verrons, est généralement plus étendu que le noyau lui-même.
Concernant le noyau lui-même, il en existe deux grandes familles.


Les noyaux monolithiques consistent en un bloc unique en mémoire qui gère les fonctions primordiales du système. Il exporte directement une série d’appels systèmes qui sont à leur tour directement utilisés par les applications. Le problème principal de cette architecture est son manque de modularité. Linus Torvalds a prouvé avec Linux qu’on pouvait très bien créer un noyau monolithique modulaire même s’il réside en mémoire en tant qu’entité unique.

Les noyaux Linux contiennent cependant à l’heure actuelle plus de 400 appels systèmes. A chaque fois que Linus Torvalds rajoute une technologie dans le noyau, il y réfléchit toujours à deux fois car ces appels systèmes créent des dépendances entre le noyau et les applications. A long terme cela pourrait peut-être s’avérer problématique.
L’autre grande famille est celle des microkernels qui consiste en une entité minimale. Tous les composants et les drivers viennent entourer le microkernel, mais en espace utilisateur (anneau 3). Cette architecture permet une très haute modularité comme on peut le voir avec le microkernel L4 par exemple. Le principal intérêt de cette architecture est sa fiabilité. En effet, tous les composants systèmes, dont les drivers, se situent en espace utilisateur. En cas de crash d’un pilote, cela n’entraîne pas le crash du système. Il y a cependant un hic : le passage de l’espace noyau à l’espace utilisateur est extrêmement coûteux en termes de performances. Cela complexifie également énormément le travail, ce qui explique les retards du noyau Hurd basé sur le microkernel L4.

Pour ces raisons, les Windows NT 4/5/6 et MacOS X ont adopté une architecture de type hybride. Elle consiste en un noyau et une série de drivers présents en espace noyau. MacOS X est par exemple basé sur un microkernel Mach, mais le sous-système BSD est en réalité en espace noyau, le rangeant ainsi dans la catégorie des noyaux hybrides. De la même manière, le noyau de Vista ne communique pas directement avec les applications, mais par le biais de sous-systèmes. Ces derniers correspondent aux API utilisables par les applications et sont totalement indépendants du noyau.


Sur Vista on trouve ainsi :

  • L’API Win32, présente depuis Windows 95, qui est utilisée par les applications Windows actuelles. A noter qu'une version plus limitée existait depuis NT3
  • WinFX, qui est une nouvelle API entièrement neuve. Elle est dite de très haut niveau et a la caractéristique d’être une API managée. Nous reviendrons plus tard sur ce point qui permettra aux applications de fonctionner indifféremment en application locale ou en application web comme le fait le Java. Le WinFX devrait devenir l’API officielle pour les développeurs. Sur des versions ultérieures à Vista, telle que Vienna (ancien Blackcomb), il est très probable que le Win32 finisse par disparaître, à l’instar du DOS.

A propos de sous-systèmes, un petit mot sur la compatibilité avec les applications UNIX. Sur les systèmes NT5, il existe un sous-système POSIX mais il n’avait pas été mis à jour depuis longtemps. Ce sera cependant le cas avec Vista, ce qui devrait permettre une meilleure compatibilité.