Changes between Version 40 and Version 41 of Doc-MIPS-Archi-Asm-kernel


Ignore:
Timestamp:
Nov 13, 2020, 9:52:32 AM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Doc-MIPS-Archi-Asm-kernel

    v40 v41  
    7474
    7575
    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
     80L’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) :
    9581
    9682{{{
    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.
     83bit n°31 de l'adresse = 0 : partie non protégée, mode user pour l'utilisateur
     84bit n°31 de l'adresse = 1 : partie protégée mode kernel : réservée au noyau du système d'exploitation
     85}}}
     86
     87Quand 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.
    11388
    11489Quand le processeur est en mode utilisateur, si une instruction essaie d'accéder à la mémoire avec une adresse de la partie système alors le processeur part en exception, c'est-à-dire que le programme est dérouté vers le noyau du système d'exploitation (voir section E)