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

Contenu supprimé Contenu ajouté
Ligne 60 :
====La validité des adresses avec alignement mémoire====
 
Avec cette technique, il y a une différence entre l'adressesadresse d'un mot et l'adresses d'un byte. Les bytes ont une adresse qui est gérée par le processeur, alors que la mémoire ne gère que les adresses des mots. Par convention, l'adresse d'un mot est l'adresse de son byte de poids faible. Les autres bytes du mot ne sont pas adressables par la mémoire. Par exemple, si on prend un mot de 8 octets, on est certain qu'une adresse sur 8 disparaitra. L'adresse du mot est utilisée pour communiquer avec la mémoire, mais cela ne signifie pas que l'adresse des bytes est inutile au-delà du calcul de l'adresse du mot. En effet, l'accès à un byte précis est encore possible : le processeur lit un mot entier, sélectionne le byte adéquat et oublie les autres. Et pour cela, il doit déterminer la position du byte dans le mot à partir de l'adresse du byte est utile. Ses bits de poids faibles donnent la position du byte dans le mot.
 
Prenons un processeur ayant des mots de 4 octets et répertorions les adresses utilisables. Le premier mot contient les ''bytes'' d'adresse 0, 1, 2 et 3. L'adresse zéro est l'adresse de l'octet de poids faible et sert donc d'adresse au premier mot, les autres sont inutilisables sur le bus mémoire. Le second mot contient les adresses 4, 5, 6 et 7, l'adresse 4 est l'adresse du mot, les autres sont inutilisables. Et ainsi de suite. Si on fait une liste exhaustive des adresses valides et invalides, on remarque que seules les adresses multiples de 4 sont utilisables. Et ceux qui sont encore plus observateurs remarqueront que 4 est la taille d'un mot.
 
Dans l'exemple précédent, les adresses utilisables sont multiples de la taille d'un mot. Et bien sachezSachez que cela fonctionne quelquelle que soit la taille du mot. Si N est la taille d'un mot, alors seules les adresses multiples de N 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|upright=2|Adresse d'un mot avec alignement mémoire strict.]]
 
L'usage de ''bytes'' qui ne sont pas des puissances de 2 posent quelques problèmes techniques en termetermes d'adressaged’adressage, ce qui fait que tous les mots ont une taille égale à une puissance de deux. La première raison est que cela permet d'économiser des fils sur le bus d'adresse. Si la taille d'un mot est égale à <math>2^{n}</math>, seules les adresses multiples de <math>2^{n}</math> seront utilisables. HorsOr, 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. 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. 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 par rapport à une division généraliste. Les calculs d'adresse sont donc beaucoup plus rapides et très simples.
 
====Les accès mémoire non-alignés====