Information Technology Reference
In-Depth Information
8.4.2
Mémoire virtuelle
Jusqu'à présent nous avons implicitement (et explicitement) fait l'hypothèse que le
programme machine était intégralement présent dans la mémoire centrale. Ceci impose
donc que la taille du programme soit plus petite que la taille de la mémoire physique.
Cette hypothèse implique que le compilateur ou le chargeur (voir chapitre 1, Du
problème au programme machine ) attribue à chaque donnée ou instruction une adresse
physique en mémoire centrale. Il n'est pas toujours possible de tenir cette hypothèse,
ni même souhaitable en terme d'efficacité. Nous avons vu que le processeur est
« ralenti » par les autres modules de l'ordinateur (temps d'accès à la mémoire centrale
mais aussi gestion des entrées-sorties) et n'est donc pas toujours utilisé au mieux.
Une manière d'améliorer les performances globales est de permettre à plusieurs
utilisateurs (plusieurs programmes machines) placés simultanément en mémoire de
se partager le processeur. Pour utiliser le processeur les instructions machine des
programmes doivent être en mémoire centrale mais la totalité des instructions de
tous les programmes peuvent ne pas être simultanément en mémoire centrale. Ainsi
l'intégralité de tous les programmes peut ne pas être présente en mémoire en même
temps. Permettre le partage du processeur entre plusieurs programmes c'est donc
permettre le partage de la mémoire centrale entre des parties de programmes présentes
simultanément en mémoire centrale. Dans cette hypothèse ni le compilateur ni le
chargeur ne peuvent a priori attribuer aux données et aux instructions une adresse
physique en mémoire centrale. On est amené à séparer l'espace d'adressage du
programme et l'espace d'adressage physique en définissant des adresses virtuelles
pour les instructions et les données. Cette adresse virtuelle ne dépend que de
l'espace d'adressage du programme et ne tient pas compte de l'adressage physique
(réel) de la mémoire centrale. C'est seulement au moment de l'exécution d'une
instruction, et non pas au moment de la compilation ou du chargement, que la corres-
pondance « adresse virtuelle », « adresse physique » est établie. Pour définir une adresse
virtuelle on peut considérer le programme comme une suite de blocs, chaque bloc
étant référencé par un numéro. L'adresse virtuelle d'un mot de programme (figure 8.20)
est alors définie par le doublet {numéro de bloc, déplacement dans le bloc} :
adresse_virtuelle = numéro_de_bloc + déplacement dans le bloc.
Dans notre hypothèse tous les blocs d'un programme ne sont pas tous nécessaire-
ment présents en mémoire centrale. Dans l'espace d'adressage du programme nous
appelons les blocs, des blocs logiques. Quand un bloc logique est présent en
mémoire principale il correspond à un bloc physique. Le bloc physique a la même
taille que le bloc logique, il est implanté en mémoire centrale à l'adresse,
« adresse_début_bloc ». Pour déterminer l'adresse effective (physique) d'un mot à
partir de son adresse virtuelle, on dispose, pour le programme, d'une table de corres-
pondance (table_des_blocs) qui a autant d'entrées qu'il y a de blocs logiques. Pour
chaque entrée on trouve un indicateur de présence ou d'absence du bloc logique en
mémoire (existence du bloc physique correspondant au bloc logique) et dans le cas
de la présence du bloc physique, l'adresse physique du début de ce bloc, soit
adresse_début_bloc (figure 8.20). Dans ces conditions :
 
 
Search WWH ::




Custom Search