Vista 32 bits ou 64 bits ?

La principale raison pour laquelle les gens devraient considérer passer à Vista 64 bits est le support d’un espace d’adressage de taille raisonnable. Plus de détails après le saut.

Espace d’adressage

En effet, windows 32 bits (xp ou vista) utilise le mode “32 bits” des processeurs x86. Cela veut dire notamment que l’adressage mémoire se fait avec un pointeur 32 bits (ce n’est pas la seule différence mais c’est celle qui peut vous affecter en pratique). Comme la mémoire peut-etre lue et écrite de 8 bits en 8 bits (octets) et que ce n’est pas négotiable pour raisons de compatibilité, un pointeur 32 bits peut pointer linéairement vers 2^32 octets = 4 giga octets. Grace aux mécanismes de mémoire virtuelle et de swapping to disk, une application pourrait allouer 2Go de ces 4Go, meme s’il n’y a que 512Mo de mémoire physique disponible sur la machine et meme si il y a d’autres applications qui font la même chose (chaque application peut réserver ces 2Go tant qu’il y a de la place sur le disque dur). Où sont les 2Go manquants ? Les adresses hautes (>= 2 ^31) sont réservées pour le noyau de l’OS. Elles ne sont pas directement adressables par les applications.

2Go c’est beaucoup, mais peu en même temps. À l’époque ou cette limite a été mise en place, il n’y avait que des machines avec 1Mo de mémoire, voire 2Mo si on était chanceux, et la situation était pire parce que les programmes tournaient en mode 16 bits et donc ne pouvait adresser que 64 ko de mémoire à la fois et donc devait passer d’une banque de mémoire à l’autre via un selecteur de segment (ce qui rallentit le processeur et peut compliquer la programmation). Passer au modèle de mémoire “plat”, où toutes les adresses sont équivalentes a donc de gros avantages en rapidité et en simplicité de fonctionnement.

Ce n’est donc pas un problème tant que les programmes n’ont besoin que de 2 Go de données. Seul problème, les ordinateurs sont désormais livrés couramment avec 2Go ou 4Go de mémoire physique disponible et une application ne pourrait donc pas adresser la totalité de la mémoire disponible du moins pas directement avec le modèle “plat”. De plus, outre les 2Go constamment occupés par le noyau windows (meme s’il n’en a pas besoin autant), une grosse partie de l’espace d’adressage peut-être consommé de manières diverses et variées, par exemple un programme peut faire un “mapping virtuel” de certaines adresses sur des resources qui ne sont pas en mémoire système, comme la mémoire vidéo de la carte graphique (1Go), un fichier sur disque, ou même réserver de l’espace virtuel non utilisé tout simplement parce qu’il prévoit un gros besoin de plage d’adresses contigues.

Lorsque l’espace d’adressage est utilisé à son maximum, toute nouvelle allocation mémoire ou reserve de plage d’adresse va échouer même si les ressources systèmes autres sont utilisées à 50%. Cela peut également arriver si l’espace d’adressage est fragmenté, et contrairement aux disques durs, un espace d’adressage ne peut pas être défragmenté à part en désallouant tout et réallouant à la volée (puisque le programme conserve les adresses sous forme de pointeurs).

La situation n’est certes pas aussi noire que ça : peu de programmes vont aujourd’hui utiliser 2Go d’adresses. Si il y a 4Go de mémoire physique disponible, la partie qui n’est pas utilisée par un programme peut-etre utilisée par un autre et donc limiter l’utilisation du fichier d’échange, elle peut meme être utilisée comme un cache disque qui n’est pas lié à une adresse fixe. Mais pour les programmes qui vont avoir besoin de plus de 2Go d’adresses ce problème est critique. Dans cette catégorie il y a les jeux vidéo sur PC.

Adresses 64 bits

Sur une machine qui supporte les pointeurs 64 bits, l’espace d’adressage est égal à 4Go fois 2^32, soit plus de 18 milliards de milliards d’octets adressables. Par application.

Donc imaginez vous dans cette situation dans un futur proche : vous avez deux options. La première est de travailler dans un espace restreint, ou vous devez constamment vous demander comment vous allez faire rentrer une nouvelle donnée, aliaser des plages d’adresses (une adresse va pointer sur X ou sur Y suivant la partie du programme que vous executez), et faire l’impasse sur les 2Go de mémoire disponible sur votre carte graphique (ça c’est une feature de vista mais bon vaut mieux pas s’attarder là dessus..), et les 14Go sur 16Go de mémoire DRAM que vous avez acheté pour votre PC qui ne sont pas accessibles parce qu’il n’y a que 2Go qui sont adressables directement. Deuxième option : passer à un système 64 bits avec adressage “plat” (donc pas d’aliasing et espace contigu disponible à gogo) et programmer comme vous l’avez toujours fait.

Pourquoi tout le monde n’est pas encore passé au 64 bits ?

  • les processeurs avec adressage 64 bits ne sont couramment utilisés et livrés dans 100% des PC que depuis peu.
  • les principaux OS 64 bits ne sont pas des OS grand public (unix, linux et windows pour Itanium).
  • l’OS grand public windows XP a une version 64 bits qui est resté en phase beta pendant très longtemps (Microsoft préparait Vista en même temps) et dont la diffusion reste confidentielle. Du coup peu de matériel a les drivers correspondants 64 bits (à moins que ce soit la cause et non la conséquence. la poule et l’oeuf tout ça).
  • Vista 64 bits est sorti récemment et va donc peut-etre changer la donne. À cause du problème des drivers, il est probable qu’il faille encore construire la machine sur mesure mais de plus en plus de matériel a des drivers, de plus Microsoft impose un nouveau “logo program” qui combine la certification 32 bits et 64 bits simultanée, donc plus d’excuse pour les fabricants de matériel.

Comments

Leave your comment