Struct Cours4
Struct Cours4
Struct Cours4
1
Gérer la mémoire d’un processus
– Le code exécutable,
– La pile,
2
Une vue virtuelle de la mémoire
• Chaque processus voit un espace mémoire virtuel qui lui est propre et
qui a la taille de l’espace adressable de la machine utilisée (232 octets
pour β).
0 232
3
Réaliser la mémoire virtuelle : la pagination
4
La traduction d’adresse du virtuel au physique
31 14 0
Page virtuelle Offset
VR
31 14 0
Page physique Offset
6
La table des pages : le problème de la taille
• Une table des pages pour un espace adressable de 232 octets et des
pages de 4K mots comporte 218 entrées et a une taille de l’ordre de 1
MBytes. Toutefois seule une petite partie de cette table sera
effectivement utilisée.
• Une autre solution courante est d’avoir une table à deux niveaux.
7
Une table des pages à deux niveaux
25 14 0
Adresse virtuelle: Offset
V VR Table 0
• Cela est clairement vrai pour les adresses du code, mais l’est souvent
aussi pour les adresses des données.
9
Pagination et processus
10
Une implémentation de la mémoire virtuelle dans
l’architecture β : ULg03
11
Le module RAM dynamique de ULg03
N D21−14 D13−2
3s 8 12
1 14
0 0
D30−14
LDUCVP UCVP DRUCVP LDUCPP UCPP
17
UC/D 0 1
PC31 0 1
8 12
19...12 11...0
20
LDDRAM
WE WE WE WE
DRAM DRAM DRAM DRAM
OE OE OE OE
DRDRAM
D0...7 D8...15 D16...23 D24...31
12
Le module RAM dynamique de ULg03 (suite)
• En mode utilisateur (PC31 à 0), suivant que l’on accède à une page de
code ou de données (signal UC/D), on utilise l’adresse de page UCPP ou
UDPP, pour autant que le numéro de page virtuelle coı̈ncide avec le
contenu de UCVP (UDVP), ce qui est vérifié par le microcode. Si non, il y
a une exception.
13
L’unité de contrôle de ULg03
LDINSTREG
LDA
LDB
LDSMAR
LDINSTREG
LDSRAM
8 4 LDDRAM
D24...31 2...7 Control ROM LDPC
Instr. 0 8 6 Reset 5
8 CLK Phase
LDRMAR
0,1 CLK LDUCPP
D16...23 2 4
Instr. 1 8 LDUDPP
8 5...7
LDSPP
D8...15 0...4 3 IRQ 9 LDUCVP
Instr. 2 5 5 PC31 1 LDUDVP
8 1
D0...7 EN DD 3 LDOFF
ALU flags
Instr. 3 3
CLK QQ DRRc
DRLit/Rb D15 D EN DRRa
DRRa DRRc DRLit/Rb
1 Q CLK
DRALU
0 0 DRSRAM
8 8 3...7 0...2 3...7 0...2
16 DRDRAM
3s 3s 3s 3s 3s ALU Fnct DRPC
D16...31 D0...7 D8...15 D8...15 D8...15 ALU Cin DRROM
PCINC DRUCVP
N SUPERVISOR DRUDVP
UC/D
0x00
...
...
15
La ROM de constantes de ULg03 (suite)
• Les adresses des handlers ont été modifiées pour qu’elles soient
groupées (les handlers débutent par un “branch”).
16
Le microcode de ULg03
• Lors d’un cache miss sur code on revient à l’instruction suivante (ou à
la destination du saut) ; lors d’un cache miss sur données, on
réexécute l’instruction qui en est la cause.
• L’instruction JMP est un cas intéressant car elle permet de passer d’une
adresse physique (mode superviseur) à une adresse virtuelle (mode
utilisateur).
17
Le microcode de LD
18
Il y a cache miss pour les données ; il faut sauter au handler correspondant
qui doit revenir en XP -4, ce qui signifie que l’instruction sera réexécutée.
Noter que, à partir de la phase 10010, PC31 vaut 1 et donc que l’on
travaille avec des adresses physiques.
19
Il n’y a pas de cache miss données ; il faut charger l’instruction suivante
en vérifiant qu’il n’y a pas de cache miss code.
20
Il y a cache miss pour le code ; il faut sauter au handler correspondant qui
doit revenir en XP, ce qui permettra d’exécuter l’instruction suivante.
21
Il n’y a pas de cache miss relatif au code ; on passe à l’instruction
suivante.
22
Le micro code de JMP
23
Pas de cache miss sur le code, charger la destination du JMP
24
JMP(Ra, Rc) (mode superviseur)
Saut vers une adresse dont le bit de poids fort est 1 : on reste en mode
superviseur et on gère une adresse physique.
25
Saut vers une adresse dont le bit de poids fort est 0 : on passe en mode
utilisateur et on gère une adresse virtuelle qu’il faut traduire si nécessaire.
A partir de la phase 9, PC31 vaut 0.
26
Le reste se passe comme pour un JMP en mode utilisateur.
27
Les instructions spéciales du mode superviseur
29
Un handler pour les exceptions “cache miss” data
Le handler débute par le stub suivant.
CMHandler(VpageNo)
{ if (PageMap[VpageNo].valid != 0 && PageMap[VpageNo].resid != 0)
return PageMap[VpageNo].PhysPage ;
else Pagerror(VpageNo);
}
L’erreur peut être une page non allouée au processus (faute de segment),
ou une page sauvée qu’il faut recharger en mémoire (faute de page).
31