« Fonctionnement d'un ordinateur/Le modèle mémoire : alignement et boutisme » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 28 :
 
Dans l'exemple précédent, les adresses utilisables sont multiples de la taille d'un mot. Et bien sachez que cela fonctionne aussi avec d'autres tailles de mot que 4. En fait, ça fonctionne même tout le temps ! Si N est la taille d'un mot, alors seules les adresses multiples de m seront utilisables. Avec ce résultat, on peut trouver une procédure qui nous donne l'adresse d'un mot à partir de l'adresse d'un byte : il suffit de diviser l'adresse du byte par N (le nombre de bytes dans un mot). Et le reste de cette division donne la position du byte dans le mot : un reste de 0 nous dit que le byte est le premier du mot, un reste de 1 nous dit qu'il est le second, etc.
 
[[File:Adresse d'un mot avec alignement mémoire strict.png|centre|vignette|Adresse d'un mot avec alignement mémoire strict.]]
 
Dans la réalité, ces blocs ont une taille égale à une puissance de deux, pour diverses raisons. Le fait est que l'usage de ''bytes'' qui ne sont pas des puissances de 2 posent quelques problèmes techniques en terme d'adressage. En premier lieu, cela permet de faire quelques bidouilles sur le bus d'adresse pour économiser des fils. Si la taille d'un mot est égale à <math>2^{n}</math>, seules les adresses multiples de <math>2^{n}</math> seront utilisables. Hors, ces adresses se reconnaissent facilement : leurs n bits de poids faibles valent zéro. On n'a donc pas besoin de câbler les fils correspondant à ces bits de poids faible et on peut se contenter de les connecter à la masse (le zéro volt vu dans le second chapitre). En second lieu, cela permet de simplifier le calcul de l'adresse d'un mot, ainsi que le calcul de la position du byte dans le mot. Rappelons que pour un mot de N ''bytes'', le calcul de l'adresse du mot est une division, alors que celui de la position du byte est un modulo. Dans le cas général, ce sont deux opérations excessivement lentes, ce qui fait que les calculs d'adresse sont censés être lents. Mais avec <math>N = 2^n</math>, la division est un simple décalage et le modulo est un simple ET logique, deux opérations très rapides. Les calculs d'adresse sont donc beaucoup plus rapides et très simples.