
Programmation des Systèmes
Pagination et Segmentation
Travaux Dirigés assurés par Philippe Décogné
14/12/2002
Pagination
On considère une mémoire segmentée paginée pour laquelle les cases en mémoire centrale sont de 4 Ko. La mémoire centrale compte au total 15 cases numérotées de 1 à 15. Dans ce contexte, on considère deux processus A et B.
Le Processus A a un espace d'adressage composé de trois segments S1A, S2A et S3A qui sont respectivement de 8 Ko, 12 Ko et 4 Ko.
Le processus B a un espace d'adressage composé de deux segments S1B et S2B qui sont respectivement de 16 Ko et 8 Ko.
Pour le processus A, seules les pages 1 et 2 du segment S1A, la page 2 du segment S2A et la page 1 du segment S3A sont chargées en mémoire centrale respectivement dans les cases 4, 5, 10 et 6.
Pour le processus B, seules les pages 2 et 3 du segment S1B et la page 1 du segment S2B sont chargées en mémoire centrale respectivement dans les cases 11, 2 et 15.
Représentez sur un dessin les structures allouées (table des segments, tables des pages) et la mémoire centrale correspondant à l'allocation décrite.
Si 4098 et 12292 sont des adresses linéaires pour A, déterminez les adresses virtuelles et réelles correspondantes.
Même question avec 16389 pour A et 8212 pour B.
Espace d'adressage virtuel du processus A
Comme la mémoire est segmentée paginée, la taille des pages du processus A est identique à celle des blocs de la mémoire centrale, c'est-à-dire 4 Ko. On a donc 2 pages pour le segment S1A, 3 pages pour le segment S2A et 1 page pour le segment S3A.

Espace d'adressage virtuel du processus B
Comme la mémoire est segmentée paginée, la taille des pages du processus B est identique à celle des blocs de la mémoire centrale, c'est-à-dire 4 Ko. On a donc 4 pages pour le segment S1B et 2 pages pour le segment S2B.

Mémoire centrale
Le schéma de la mémoire centrale reprend les informations des tables des segments et de pages des deux processus concernés.

Adresses linéaires vs. adresses virtuelles et adresses réelles
L'adresse linéaire p est une adresse relative dans le code du processus X. Pour obtenir les adresses virtuelles et réelles, il faut donc rechercher où se trouve le pième octet.
Comme chaque bloc fait 4 Ko, un bloc correspond à :
1 024 x 4 = 4096 octets
En faisant la division euclidienne de l'adresse linéaire par la taille d'un bloc, on obtient l'adresse du segment dans le bloc, en prenant pour principe que l'on numérote les adresses à partir de 0, sinon il faut rajouter une unité pour obtenir cette adresse (problème d'intervalle).
Une fois l'adresse du segment trouvé, il suffit de se reporter à la table des segments et à la table des pages correspondante pour obtenir le segment.
On obtient la page dans le segment en renumérotant les blocs d'un même segment à partir de 1.

Enfin, le décalage correspond au reste de la division euclidienne.
De cette façon, on obtient l'adresse virtuelle.
Pour obtenir l'adresse réelle, il suffit de se reporter à la table des segments. Si la page est valide, on lit directement le numéro de case, sinon l'adresse réelle ne peut être déterminée. Comme la mémoire est segmentée, paginée, le décalage en mémoire virtuelle et en mémoire physique reste le même, puisque les blocs sont de même taille, à condition que la page soit valide.
Adresse linéaire 4098 dans A
L'adresse se trouve en page :
4098 div 4096 + 1 = 2
D'après la table des segments, la page 2 se trouve dans le segment S1A et correspond à la page 2 dudit segment.
Le décalage est de :
4098 mod 4096 = 2
On a donc l'adresse virtuelle suivante :
segment S1A, page 2, décalage 2
D'après la table des segments, la page est valide et correspond à la case 5. L'adresse réelle est donc :
case 5, décalage 2
Adresse linéaire 12292 dans A
L'adresse se trouve en page :
12292 div 4096 + 1 = 4
D'après la table des segments, la page 4 se trouve dans le segment S2A et correspond à la page 2 dudit segment.
Le décalage est de :
12292 mod 4096 = 4
On a donc l'adresse virtuelle suivante :
segment S2A, page 2, décalage 4
D'après la table des segments, la page est valide et correspond à la case 10. L'adresse réelle est donc :
case 10, décalage 4
Adresse linéaire 16389 dans A
L'adresse se trouve en page :
16389 div 4096 + 1 = 5
D'après la table des segments, la page 5 se trouve dans le segment S2A et correspond à la page 3 dudit segment.
Le décalage est de :
16389 mod 4096 = 5
On a donc l'adresse virtuelle suivante :
segment S2A, page 3, décalage 5
D'après la table des segments, la page n'est pas valide. On ne peut donc déterminer une adresse réelle.
Adresse linéaire 8212 dans B
L'adresse se trouve en page :
8212 div 4096 + 1 = 3
D'après la table des segments, la page 3 se trouve dans le segment S1B et correspond à la page 3 dudit segment.
Le décalage est de :
8212 mod 4096 = 20
On a donc l'adresse virtuelle suivante :
segment S1B, page 3, décalage 20
D'après la table des segments, la page est valide et correspond à la case 2. L'adresse réelle est donc :
case 2, décalage 20