76 | | |
77 | | == 3. Adressage de la mémoire |
78 | | |
79 | | |
80 | | === 1) Espace d'adressage : adressage par octet |
81 | | |
82 | | |
83 | | L'ensemble des adresses que peut former le processeur définit son espace d'adressage. Toutes les adresses formées sont des adresses d'octets, ce qui signifie que la mémoire est vue par le processeur comme un tableau d'octets qui contient aussi bien les données que les instructions. |
84 | | |
85 | | Les adresses sont codées sur 32 bits. Les instructions sont codées sur 32 bits. Les échanges de données avec la mémoire se font par mot de 32 bis (4 octets consécutifs), ou par demi-mot 16 bits (2 octets consécutifs) ou par octet (8 bits). Pour les transferts de mots et de demi-mots, le processeur respecte la convention "little endian" (l'octet de poids faible est à l'adresse à plus petite). |
86 | | |
87 | | L'adresse d'un mot (4 octets) de donnée ou d'instruction doit être multiple de 4. L'adresse d'un demi-mot doit être multiple de 2, on dit que les adresses doivent être "alignées". Le processeur part en exception si une instruction calcule une adresse qui ne respecte pas cette contrainte. Plus généralement, une donnée est alignée en mémoire, si l'adresse de son premier octet (à l'adresse la plus petite) est un multiple de sa taille. |
88 | | |
89 | | |
90 | | |
91 | | === 2) Calcul d'adresse |
92 | | |
93 | | |
94 | | Le mode d'adressage définit la manière dont le processeur calcule les adresses de la mémoire pour y accéder en lecture ou en écriture. Il n'existe qu'un seul et unique mode d’adressage pour le MIPS32. Il consiste à effectuer la somme entre le contenu d'un registre général (GPR) `$i`, défini dans l'instruction, et d'un déplacement qui est une valeur immédiate signée, nommée `IMD16` sur 16 bits (de -32768 à +32767), contenue également dans l'instruction: |
| 76 | = 3. Adressage de la mémoire |
| 77 | |
| 78 | |
| 79 | |
| 80 | L’espace d'adressage de la mémoire est découpé en 2 parties identifiés par le bit de poids fort de l’adresse (bit n°31) : |
97 | | adresse = $i + IMD16 |
98 | | }}} |
99 | | |
100 | | |
101 | | |
102 | | === 3) Protection mémoire |
103 | | |
104 | | |
105 | | L’espace d'adressage de la mémoire est découpé en 2 parties identifiés par le bit de poids fort de l’adresse (bit n°31) : |
106 | | |
107 | | {{{ |
108 | | bit n°31 de l'adresse = 0 ==> partie utilisateur |
109 | | bit n°31 de l'adresse = 1 ==> partie système |
110 | | }}} |
111 | | |
112 | | Quand le processeur est en mode système alors les 2 parties (utilisateur et système) sont accessibles. Quand le processeur est en mode utilisateur alors seule la partie utilisateur est accessible. |
| 83 | bit n°31 de l'adresse = 0 : partie non protégée, mode user pour l'utilisateur |
| 84 | bit n°31 de l'adresse = 1 : partie protégée mode kernel : réservée au noyau du système d'exploitation |
| 85 | }}} |
| 86 | |
| 87 | Quand le processeur est en mode ''kernel'' alors les 2 parties (utilisateur et système) sont accessibles. Quand le processeur est en mode ''user'' alors seule la partie utilisateur est accessible. |