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

Contenu supprimé Contenu ajouté
Ligne 23 :
====Adresses valides et invalides====
 
Avec cette technique, Lil y a une différence entre l'adresseadresses d'un mot et l'adresses d'un byte. Les ''bytes ont une adresse qui est égalegé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, ceux qui sont situées dans undu 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. PrenonsL'adresse undu exemple,mot afinest deutilisée détaillerpour quelquecommuniquer peuavec lela proposmémoire, avecmais uncela processeurne ayantsignifie des mots de 4 octets. Répertorions les adresses utilisables : on saitpas que l'adresse zéro,des bytes est l'adresseinutile deau-delà l'octetdu de poids faiblecalcul de notre premier mot. Ll'adresse 1 est située dans notredu mot,. pareilEn pour 2effet, pareill'accès pourà 3.un L'adressebyte 4précis est utilisableencore possible : c'estle l'adresseprocesseur dulit premierun octetmot du second motentier, etc.sélectionne Sile on fait une liste exhaustive des adressesbyte validesadéquat et invalides, on remarque que seulesoublie les adresses multiples de 4 sont utilisablesautres. Et ceuxpour quicela, sontil encoredoit plusdéterminer observateursla remarquerontposition quedu 4byte estdans la taille d'unle mot. DansC'est notre exemple,que lesl'adresse adressesdu utilisablesbyte sontest multiples de la taille d'un motutile. EtElle biendonne sachezla queposition celadu fonctionnebyte aussidans avec d'autres tailles dele mot que 4. En fait, çaelle fonctionneindique même toutsi le tempsbyte !à :p Si mlire/écrire est lale taillepremier d'undu mot, alorsle seulessecond, lesle adressestroisième, multiples de m seront utilisablesetc.
 
Prenons un exemple, afin de détailler quelque peu le propos. 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 la réalité, ces blocs ont une taille égale à une puissance de deux : 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).
 
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.
 
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.
 
====Accès mémoire non-alignés====