Systèmes d’Exploitations Avancés

Gestion de la mémoire · notes

Voir tous les documents en gestion et économie

Systèmes d’Exploitations Avancés

Chapitre VI :

Gestion de la mémoire

Amine DHRAIEF

Mastère professionnel en Modélisation, Bases de

Données et Intégration des Systèmes

ESEN, Univ. Manouba

Introduction

Les programmes s’accroissent pour

remplir la mémoire disponible qui leur

est réservée

12/15/16

2

Introduction

• Souhaits des programmeurs

– Une mémoire infiniment grande

– Une mémoire infiniment rapide

– Non volatile

– Bon marché !

– Frein technologique → hiérarchie de la mémoire

• hiérarchie de la mémoire

– Quelques MB de mémoire cache volatile, rapide et chère

– Quelques GB de mémoire rapidité moyenne, prix moyen

– Quelques TB de mémoire non volatile, lente, mémoire de

masse

12/15/16

3

Introduction

• Gestionnaire de la mémoire :Entité

du S.E qui gère hiérarchie de la

mémoire

– Garde trace de la partie de la mémoire qui est

en cours d’utilisation et celle qui ne l’est pas

– Allouer de la mémoire au processus

– Libérer la mémoire à la fin de l’exécution des

processus

12/15/16

4

Abstraction de la mémoire ?

• Avant 1980: on ne disposait pas d’abstraction

– MOV REGISTER1, 1000

– on fait passer le contenu de l’emplacement mémoire 1000 dans

le registre REGISTER1

– Il n’était pas possible d’exécuter deux programmes en même

temps

• Le modèle de mémoire présenté au programmeur

correspondait tout simplement à la mémoire physique

– Un ensemble d’adresse numérotées de 0 à une valeur maximale

– Chaque adresse désignant une cellule contenant un certain

nombre de bit (8 bits)

12/15/16

5

Abstraction de la mémoire ?

• Même si le modèle ne reflète que la mémoire physique, il peut exister

plusieurs variantes

– (a) S.E en bas de la mémoire vive RAM (n’est plus utilisé)

– (b) S.E en haut de la ROM (système embarqué)

– (c) gestionnaire des périphérique en haut de la ROM (BIOS), S.E en RAM

(MSDOS)

• Le modèle (c) représente un inconvénient majeur: un bogue dans un

programme utilisateur peut engendrer des conséquences

désastreuse sur le S.E.

12/15/16

6

Abstraction de la mémoire ?

• Un seul processeur peut s’exécuter à la fois. Dès

que l’utilisateur tape une commande

– Le S.E copie le programme demandé depuis le

disque vers la mémoire et l’exécute

– Lorsque le processus se termine, le S.E affiche le

prompt et attend une nouvelle commande

– Quand il reçoit la commande, il charge un nouveau

programme en mémoire en écrasant le précédent

12/15/16

7

L’exécution de plusieurs programmes

sans abstraction de mémoire

• Même sans abstraction de la mémoire, il est

cependant possible d’exécuter quasi

simultanément plusieurs programmes.

• Le S.E. doit alors recopier sur disque

l’intégralité du contenu de la mémoire avant

de charger et d’exécuter le programme suivant

• C’est le va-et-vient ou swapping

12/15/16

8

UNE ABSTRACTION DE LA MÉMOIRE:

LE ESPACES D’ADRESSAGE

12/15/16

9

Contexte

• Faire voire aux processus la mémoire physique

présente plusieurs inconvénients

– Risque de plantage générale, même avec un seul

programme qui s’exécute

– Lourdeur pour exécuter plusieurs programmes à la

fois

• Besoin d’abstraction de la mémoire

12/15/16

10

La notion d’espace d’adressage

• De la même façon qu’un processus crée une

UC abstraite exécutant un programme, l’espace

d’adressage est une sorte de mémoire abstraite

d’un programme prêt à l’exécution

• C’est l’ensemble des adresses qu’un processus

peut utiliser pour adresser la mémoire

• Chaque processus a son propre espace

d’adressage, indépendant de celui des autres

12/15/16

11

La notion d’espace d’adressage

• Il est difficile de donner à chaque

programme son propre espace

d’adressage

– C’est-à-dire de faire en sorte que l’adresse

(abc) de l’un correspond à un emplacement

différent de l’adresse (abc) de l’autre

• Solution: ré-allocation dynamique

12/15/16

12

La notion d’espace d’adressage

12/15/16

13

Les registres de base et de limite

• Ré-allocation dynamique: mapper l’espace

d’adressage de chaque processus sur une

partie différente de la mémoire physique.

• Équiper les UC de deux registres matériels:

les registres de base et de limite.

– Les programmes sont chargés en mémoire sans

ré-allocation, là où il y a de la place pour les ranger

dans des mots mémoire consécutifs

12/15/16

14

Les registres de base et de limite

• À l’exécution du programme, le S.E

range dans le registre de base

l’adresse physique de début de

programme et dans le registre de limite

et celle de fin

– Les valeurs de base et de limite du premier

programme sont de 0 et 16384 (16Ko x 1024

= 16384)

– Du second programme 16384 et 32768

12/15/16

15

Les registres de base et de limite

• Chaque fois qu’un processus référence

la mémoire,

– que ce soit pour charger une instruction ou bien

lire ou écrire une donnée,

– le matériel de l’UC ajoute automatiquement à

l’adresse engendrée par le programme la valeur

du registre de base

– et vérifie la nouvelle adresse ainsi créée reste

bien inférieur ou égale à la valeur du registre de

limite

12/15/16

16

Les registres de base et de limite

• Dans le cas de la première instruction du second

programme exécute une instruction

– JMP 10

• Le matériel la traite comme si c’était

– JMP 16394

– 16394 = 16384 +10

• L’inconvénient majeur de cette méthode est qu’elle

exige une addition et une comparaison à chaque

référence mémoire

12/15/16

17

Le va-et-vient (swapping)

• Si la mémoire physique de l’ordinateur est

suffisamment grande pour contenir tous les

processus, les méthodes vues jusqu’ici

conviennent.

– En pratique, c’est rarement le cas

– Sur les S.E. actuelles, entre 40 et 60 processus sont

lancés au démarrage

– Sous windows, un processus de vérification de mise à

jour d’une application, lancée au démarrage occupe

entre 5 et 10 Mo!

– Firefox peut occuper facilement 270Mo de mémoire

12/15/16

18

Le va-et-vient (swapping)

• Deux approches de gestion de

mémoire peuvent être utilisées

– Le swapping: considérer chaque processus

dans son intégralité, exécution puis

placement sur le disque

– La mémoire virtuelle: permet au

programmes de s’exécuter même quand ils

sont partiellement en mémoire principale

12/15/16

19

Le va-et-vient (swapping)

• L'allocation de la mémoire change au gré des processus

qui viennent en mémoire et ceux qui quittent la mémoire

• Les zones grises indiquent la mémoire non utilisée

12/15/16

20

Le va-et-vient (swapping)

i.

(a) A est en mémoire

ii.

(b,c) B et C sont crées

ou chargés depuis le

disque

iii. (d) A est transférer sur le

disque

iv. (e,f) D arrive, tandis que

B s’en va

(g) A revient

v.

12/15/16

21

Le va-et-vient (swapping)

• Lorsque le swapping crée de multiples trous

dans la mémoire, il est possible de tous les

recombiner en une seule zone plus grande en

déplaçant tous les processus vers le bas de

la mémoire aussi vite que possible

– Compactage de mémoire

• N’est pas mise en œuvre car elle requiert

énormément de temps UC

– 5s pour compacter 1 Go!

12/15/16

22

Le va-et-vient (swapping)

• Si des processus sont crées avec une taille fixe qui

ne change jamais, l’allocation est alors simple: le

système alloue exactement la mémoire nécessaire

pas plus pas moins !

• Lorsque les segments de données des processus

doivent croître (allocation dynamique de la mémoire)

un problème surgit toutes les fois qu’un processus

essaie de s’accroître.

– Si un trou est adjacent au processus, ce trou peut lui être

alloué et le processus est autorisé à s’étendre dedans

12/15/16

23

Le va-et-vient (swapping)

• Si le processus est adjacent à un autre processus, le

processus croissant devra être déplacé dans un trou

suffisamment grand pour lui

• Si un processus ne peut pas croître en mémoire et que

la zone de va-et-vient sur le disque est pleine, le

processus devra attendre ou être tué

– Il est conseillé d’allouer un ‘peu’ de mémoire supplémentaire

chaque fois qu’un processus est chargé ou déplacé

– Si on transfert le processus sur le disque, seule la mémoire

Publicité

véritablement utilisé qui doit être recopiée, inutile de recopier

la mémoire supplémentaire.

12/15/16

24

Gérer la mémoire libre

• Quand la mémoire est attribué

dynamiquement, le système

d’exploitation doit la gérer

• Il existe deux manière de conserver

une trace de l’utilisation de la mémoire

– À l’aide des tables bits

– À l’aide des listes

12/15/16

25

Gérer la mémoire avec une table de

bits

• Avec une table de bits, la mémoire est

répartie en unités d’allocation dont la

taille peut varier de quelques mots à

plusieurs kilo-octets.

• Chaque unité d’allocation correspond à

un bit du tableau de bits, lequel est 0 si

l’unit correspondante est vide et 1 si elle

est occupée (ou vice versa)

12/15/16

26

Gérer la mémoire avec une table de

bits

a) Une partie de la mémoire avec 5 processus, 3 trous

Les petites marques verticales indiquent les unités

d'allocation

Les zones grises sont libres

b) Le tableau de bits correspondant

c) Mêmes informations sous la forme d'une liste chaînée

12/15/16

27

Gérer la mémoire avec une table de

bits

• La taille de l’unité d’allocation est un élément

fondamentale dans la configuration:

– plus l’unité est petite, plus le tableau de bit est

important

• Avec une unité de 4 octets (32bits), n’auront

besoin que de 1 bit du tableau de bit

– Une mémoire de 32n bits utilisera une table de n

bits qui ne prendra pas plus de 1/33 de la mémoire

12/15/16

28

Gérer la mémoire avec une table de

bits

• Le tableau de bit offre un moyen simple de

garder une trace des mots mémoire dans

une quantité fixe de mémoire

• Le tableau offre un inconvénient:

– lorsqu’un processus de k unités est chargé en

mémoire, le gestionnaire de mémoire doit

parcourir le tableau de bits pour trouver une

séquence de k bit consécutifs dont la valeur est

0.

12/15/16

29

Gérer la mémoire avec des listes

chaînées

• Une des manière de conserver une trace de la

mémoire est de maintenir une liste chaînée des

segments de mémoire alloués et libres

– Dans cette liste, un segment est soit un processus, soit un

trou entre deux processus

– La liste est trié par adresse, donc si un processus se

termine la mise à jour est directe

12/15/16

30

Gérer la mémoire avec des listes

chaînées

• Un processus qui se termine a normalement deux

voisins (excepté en début de liste/fin de liste) qui

peuvent être des processus ou des trous, ce qui

conduit à quatre combinaison possibles

12/15/16

31

Gérer la mémoire avec des listes chaînées

(a) la mise à jours de la liste

oblige à remplacer un P par un T

(b,c) deux unités sont réunies

en une seule, la liste devient

plus courte d’une unité

(d) trois entrées sont fusionnées

et deux items sont retirés de la

liste

• → Il y a avantage a utiliser une

liste de segments doublement

chaînée afin de faciliter la

recherche du nœud précédent.

12/15/16

32

Gérer la mémoire avec des listes

chaînées

• Quand les processus et les trous sont indiqué

dans une liste triées par adresse, plusieurs

algorithmes peuvent servir à allouer de la

mémoire à un processus nouvellement créé (ou

un processus existant chargé depuis le disque)

– First fit

– Next fit

– Best fist

– Worst fit

– Quick fit

12/15/16

33

Gérer la mémoire avec des listes chaînées

First Fit

• Algorithme de la première zone libre:

– On trouve le premier trou suffisamment grand

pour contenir le processus.

– Le trou est ensuite divisé en deux parties: une

pour le processus et l’autre pour la mémoire

inutilisée

• Algorithme rapide parce qu’il limite ses

recherches autant que possible

12/15/16

34

Gérer la mémoire avec des listes chaînées

Next Fit

• Algorithme de la première zone libre

suivante

– Identique à l’algorithme précédent sauf que la

recherche commence au dernier espace libre

trouvé.

– Les performance sont légèrement meilleures

12/15/16

35

Gérer la mémoire avec des listes chaînées

Best Fit

• Algorithme du meilleur ajustement

– Parcourt toute la liste et recherche le plus

petit trou pouvant contenir le processus.

– Évite de partitionner inutilement les gros trous

– Cet algorithme crée des trous minuscules

inutilisables par la suite

– Plus lent que les algorithmes précédents

12/15/16

36

Gérer la mémoire avec des listes chaînées

Worst Fit

• Algorithme du plus grand résidu

– On prend le plus grand trou disponible

– Le trou restant est assez grand pour être

réutilisé

– Des simulations démontrent que cette

solution n’est pas meilleure que la

précédente.

12/15/16

37

Gérer la mémoire avec des listes

chaînées

• On peut utiliser deux listes distinctes (zones libres et

occupées par un processus)

• Accélère les algorithmes précédents

– Si la liste des trous est triée par taille alors best-fit et first-fit sont

essentiellement équivalents.

• Ralentissement quand la mémoire est libérée

– Un segment libéré est enlevé de la liste des processus et inséré dans la

liste des trous

• On peut utiliser les zones libres elle même pour la liste des

zones libres

12/15/16

38

Gérer la mémoire avec des listes chaînées

Quick Fit

• Algorithme du placement rapide (quick fit)

– On gère des listes séparées pour certaines des tailles les

plus communes

– Par exemple, on peut avoir des listes de 4Ko, 8Ko, 12Ko, etc.

– Très rapide.

– Rend plus complexe le processus de libération de la

mémoire: On doit chercher les trous adjacents pour une

vérifier si une fusion est possible.

• Tous ces algorithmes souffrent du problème de la

fragmentation de la mémoire.

12/15/16

39

Application #1

12/15/16

40

Application #1

● Considérons un système de gestion de mémoire à

partitions variables avec la liste des trous suivante

(ordonnée par adresses croissantes) : 10K, 4K, 20K,

18K, 7K, 9K, 12K et 15K.

● Supposons les demandes successives d'espace

mémoire :A= 12K, B= 10K et C= 9K.

● Indiquer pour les stratégies First Fit, Next Fit, Best

Fit et Worst Fit l'état de cette liste après l'allocation

des espaces pour les demandes de A, B et C.

12/15/16

41

Solution Application #1

● First fit : on cherche le premier espace

qui convient

@

a

b

c

d

e

f

g

h

Lg

10k

4k

20k

18k

7k

9k

12k

15k

@

a

b

c

d

e

f

g

h

Lg

10k

4k

8k

18k

7k

9k

12k

15k

12/15/16

A

12k

B

10k

@

b

c

d

e

f

g

h

Lg

4k

Publicité

8k

18k

7k

9k

12k

15k

C

9k

@

b

c

d

e

f

g

h

Lg

4k

8k

9k

7k

9k

12k

15k

42

Solution Application #1

● Next Fit : on cherche l’espace suivant

qui convient

@

a

b

c

d

e

f

g

h

Lg

10k

4k

20k

18k

7k

9k

12k

15k

@

a

b

c

d

e

f

g

h

Lg

10k

4k

20k

6k

7k

9k

12k

15k

@

a

b

c

d

e

f

g

h

Lg

10k

4k

10k

6k

7k

9k

12k

15k

12/15/16

A

12k

B

10k

C

9k

@

a

b

c

d

e

f

g

h

Lg

10k

4k

1k

6k

7k

9k

12k

15k

43

Solution Application #1

● Best fit : on cherche l’espace qui laisse

le plus petit trou

@

a

b

c

d

e

f

g

h

Lg

10k

4k

20k

18k

7k

9k

12k

15k

12/15/16

A

12k

@

a

b

c

d

e

f

h

Lg

10k

4k

20k

18k

7k

9k

15k

B

10k

@

b

c

d

e

f

h

Lg

4k

20k

18k

7k

9k

15k

C

9k

@

b

c

d

e

h

Lg

4k

20k

18k

7k

15k

44

Solution Application #1

● Worst fit : on cherche l’espace qui

laisse le plus grand vide

@

a

b

c

d

e

f

g

h

Lg

10k

4k

20k

18k

7k

9k

12k

15k

@

a

b

c

d

e

f

g

h

Lg

10k

4k

8k

18k

7k

9k

12k

15k

@

a

b

c

d

e

f

g

h

Lg

10k

4k

8k

8k

7k

9k

12k

15k

12/15/16

A

12k

B

10k

C

9k

@

a

b

c

d

e

f

g

h

Lg

Publicité

10k

4k

8k

8k

7k

9k

12k

6k

45

LA MÉMOIRE VIRTUELLE

12/15/16

46

La mémoire virtuelle

• Si la taille des mémoires augmente, celle des

logiciels augmente encore plus vite

– Dans les années 1980, on faisait tourner en temps partagé

des dizaine d’utilisateurs sur des VAX dotés de 4Mo.

– Vista/Seven (mono-utilisateur) recommande au minimum 1

Go

• On est sûr d’être à court de mémoire

– Le swapping n’est pas une bonne option en raison des

volumes à transférer: il faut au moins 10s pour mettre un

programme de 1 Go sur un disque SATA au débit crête de

100Mo/s

12/15/16

47

La mémoire virtuelle

• Le problème de programme plus gros que la mémoire

est connu depuis longtemps

• Dans les années 1960, la solution la plus courante

consistait à diviser le programme en parties, appelées

segments de recouvrement (overlay)

– Le segment 0 était exécuté en premier

– Quand cela était réalisé, il pouvait appeler un autre

segment

– Le va-et-vient est géré par le système, la division en

overlay est géré par le programmeur!

– Solution rapidement abandonnée

12/15/16

48

La mémoire virtuelle

• La méthode qui a été imaginée est connue aujourd’hui sous le

nom de mémoire virtuelle.

• La mémoire virtuelle repose sur le principe suivant: chaque

programme a son propre espace d’adressage découpé en petites

entités appelées pages, entités formées d’une suite d’adresse

contiguës

– La taille des page est fixe (typiquement entre 512 octets à 64Ko)

• Les pages sont mappées sur la mémoire physique, mais il n’est

pas obligatoire d’avoir toutes les page en mémoire physique pour

exécuter le programme.

12/15/16

49

La pagination

• Les adresses générées par programme sont

appelées des adresses virtuelles et elle

forment l’espace d’adressage virtuel

• Dans les ordinateurs sans mémoire virtuelle,

l’adresse est placée directement sur le bus

mémoire et provoque la lecture ou l’écriture

du mot de même adresse physique

• Dans les ordinateurs avec mémoire virtuelle,

l’adresse est placée dans une unité de

gestion mémoire (MMU Memory Mangement

Unit) qui fait correspondre les adresses

virtuelles à des adresses physiques

• La relation entre les adresses virtuelles et

physiques est indiquée dans la table des

pages

12/15/16

50

La pagination

• Un ordinateur peut produire de adresses

sur 16 bits avec des valeurs comprises

entre 0 et 64Ko: ce sont les adresses

virtuelles.

• Toutefois, cet ordinateur a seulement

32Ko de mémoire physique;

– par conséquent, même s’il permet d’ écrire

des programmes de 64Ko, ceux-ci ne

peuvent pas être chargés entièrement dans

la mémoire et exécutés.

– Il faut cependant qu’une copie complète de

tout le programme soit présente sur le

disque, afin que les différentes parties

puissent être récupérer quand cela est

nécessaire

12/15/16

51

La pagination

• L’espace d’adressage virtuel est

divisé en unités appelées pages

• Les unités correspondantes dans

la mémoire physique sont

appelées cadres de pages (pages

frames)

– Les pages et les cadres de pages

ont toujours la même taille (4Ko

dans notre exemple)

– Chaque page est indivisible: Elle est

entièrement en mémoire physique

ou elle n’y est pas du tout.

12/15/16

52

La pagination

• L’indication 0K-4K signifie que

les adresse virtuelles ou réelles

de la page sont situées entre 0

et 4095

• L’indication 4K-8K entre 4096-

8191

• Chaque page contient 4096

adresses qui démarrent à un

multiple de 4096 et finissent au

multiple suivant

12/15/16

53

La pagination

L’adresse virtuelle 0 est

transformée en adresse

physique 8192=2*4096

L’adresse virtuelle 8192=2*4096

est transformée en adresse

physique 24576=6*4096

L’adresse virtuelle

20500=5*4096+20 est

transformée en adresse

physique 12308=3*4096+20

12/15/16

54

La pagination

• Quand le programme essaie par exemple

d’accéder à l’adresse 0, à l’aide de

l’instruction

– MOV REG,0

• L’adresse virtuelle 0 est envoyée à la

MMU. La MMU constate que cette adresse

virtuelle tombe dans la page 0 ( de valeurs

comprises entre 0 et 4095), laquelle

correspond au cadre de la page 2 ( de

valeurs comprises entre 8192 et 12287)

– Elle transforme l’adresse en 8192 et la

présente sur le bus

• La mémoire ne sait rien de la MMU: elle

interprète seulement qu’il s’agit d’une

requête de lecture ou d’écriture à

l’adresse 8192, et elle le réalise.

12/15/16

55

La pagination

• Cette capacité de mettre en

correspondance les 16 pages virtuelles

sur les 8 cadres de pages ne résout pas

le problème posé par un espace

d’adressage virtuel plus grand que la

mémoire physique

• Seule 8 des pages virtuelles sont mise

en correspondance avec la mémoire

physique

• Un bit de présence/absence conserve la

trace des pages qui se trouvent

physiquement en mémoire

• Que se passe-t-il si le programme

essaye de faire appel à une page non

présente avec l’instruction MOV

REG,32780 ????

12/15/16

56

La pagination

• MOV REG,32780 correspond à l’octet 12 de

la page virtuelle 8 (qui commence à 32768)

• La MMU remarque que la page est absente

(ce qui est indiqué par une croix dans la

figure) et fait procéder l’UC à un

déroutement, c’est-à-dire que le processeur

est restitué au système d’exploitation

• Ce déroutement, appelé défaut de page

(page fault), est réalisé de la manière

suivante:

– Le système d’exploitation sélectionne un cadre

de page peu utilisé

– et écrit son contenu sur le disque;

– il transfère ensuite la page qui vient d’être

référencée dans le cadre de page libéré,

– modifie la correspondance et recommence

l’instruction déroutée.

12/15/16

57

La pagination

• Par exemple, si le système d’exploitation

décide de déplacer le cadre de la page 1

– Il doit charger la page virtuelle 8 à l’adresse

physique 4K et faire deux correspondance dans la

MMU.

• Tout d’abord, il doit marquer l’entrée de la

page virtuelle 1 comme étant non utilisée,

afin d’autorisé tout accès ultérieur aux

adresses virtuelles comprise entre 4K et 8K

• Ensuite il devra remplacer la croix de l’entrée

de la page 8 par la valeur 1

• Enfin, quand l’instruction déroutée sera ré-

exécutée, il mettra l’adresse virtuelle 32780

en correspondance avec l’adresse physique

4108 (4096 +12)

12/15/16

58

La pagination: fonctionnement interne d’une MMU

• Adresse virtuelle 8196, en

binaire 0010000000000100

est divisée en deux

parties

– Un numéro de page sur 4

bits et un décalage sur 12

bits

– Avec 4 bits pour le numéro

de page nous pouvons

avoir 16 pages

– Avec 12 bits pour le

décalage, nous pouvons

adresser l’ensemble des

4096 octets d’une page

12/15/16

59

La pagination: fonctionnement interne d’une MMU

• Le numéro de page est

utilisé comme un index

dans la table des pages:

– Le numéro du cadre de

page correspond à la page

virtuelle

• Si le bit de

présence/absence est à

0, un déroutement vers le

système d’exploitation

est mis en place

12/15/16

60

La pagination: fonctionnement interne d’une MMU

• Si le bit est à 1,

– le numéro de cadre de page trouvé

dans la table des page et copié

dans les 3 bits de poids le plus fort

du registre de sortie

– auxquels sont ajoutés les 12 bits de

décalage, qui sont copié à partir de

l’adresse virtuelle entrante sans

être modifiée

– ils forment ensemble une adresse

physique sur 15 bits

• Le registre de sortie est ensuite

placé sur le bus mémoire en tant

qu’adresse de mémoire physique

12/15/16

Publicité

61

Les tables de pages

• Le rôle d’une table des pages est ainsi de faire

correspondre des pages virtuelles à des cadres de page

– C’est une fonction qui a comme argument le numéro de la

page virtuelle et comme résultat le cadre physique

– Le résultat de cette fonction peut servir à remplacer le champ

nommé page virtuelle d’une adresse virtuelle par un champ

nommée cadre de page et à créer ainsi une adresse mémoire

physique

• Deux problèmes:

– La table des pages peut être très grande

– Trouver l'adresse réelle à partir de l'adresse virtuelle doit se

faire très rapidement

12/15/16

62

Récapitulons :

• Dans le cas le plus simple, la mise en correspondance des adresses virtuelles et

des adresses physiques se déroule comme suit

– L’adresse virtuelle est séparée en deux parties

– Un numéro de page virtuelle (les bits de poids fort)

– Et un décalage (les bits de poids faible)

• Avec une adresse de 16 bits et une taille de page de 4 Ko,

– les 4 bits de poids fort peuvent spécifier une des 16 pages virtuelles,

– les 12 bits de poids faible indiqueront alors le décalage en octet ( de 0 à 4095)

• Dans la table des pages, le numéro de page virtuelle sert à trouver l’entrée de la

page virtuelle.

– S’il existe, le numéro du cadre de page est trouvé à partir de cette entrée de la table des pages

• Le numéro du cadre de page est attribué aux bits de poids fort suivi du décalage,

remplaçant le numéro de page virtuelle, pour composer une adresse physique qui

peut être envoyée à la mémoire

12/15/16

63

Structure d’un entrée de table de page

• Le champ le plus important est le numéro de cadre de page

– L’objectif est de localiser cette valeur

• Présent/Absent:

– si 0 cela provoque un défaut de page

– Si 1, l’entrée est valide et peut être utilisé

• Protection: précise quelles sortes d’accès sont permis

– lecture, écriture, exécution

12/15/16

64

Structure d’un entrée de table de page

• Modifié (dirty/clean bit) :

– Si aucune modification (clean), il n’est pas nécessaire de sauvegarder sur le disque. Lors d’une

écriture (dirty), automatiquement mis à 1

• Référencé:

– Mis à 1 chaque fois qu’une page est consultée

– Permet de décider si la page peut être remplacer par une autre

– Les pages qui ne sont pas en cours d’utilisation sont de meilleures candidates que les autres

• Cache inhibée:

– Caractéristique importante pour les pages qui sont mises en correspondance dans des registres

matériel plutôt qu’en mémoire

– Utile pour les attentes de réponse d’E/S on veut accéder aux données du périphérique plutôt qu’au

cache

12/15/16

65

Application #2

12/15/16

66

Exercice 1 : Pagination Simple

Sur un système de pagination simple de 2¹ octets de

mémoire physique de 2¹² pages d'espace d'adressage

virtuel et une taille de page de 4 ko (=4096 octets).

1) Combien de bits se trouvent dans une adresse virtuelle ?

2) Combien d'octets se trouvent dans un cadre de page ?

3) Combien de bits de l'adresse physique spécifient le cadre de page ?

4) Combien d'entrées se trouvent dans la table de pages ?

5) Combien de bits sont nécessaires pour stocker une entrée dans la table de

pages (de quelle largeur est la table de pages) ?

● Hypothèse :

– Chaque entrée de table de pages contient, en plus du numéro de cadre de page, 1

bit de présence (P), 1 bit pour son référencement (R) et 1 bit pour sa modification

(M).

12/15/16

67

Solution Exercice 1 : Pagination Simple

● 1- Combien de bits se trouvent dans une

adresse virtuelle ?

– L’espace d’adressage logique contient 2¹² = 4096 pages de 4

ko = 2¹² octets chacune, soit un espace d’adressage total de

2¹² x 2¹² = 2² octets. Pour couvrir cet espace d’adressage,

l’adresse virtuelle sera codée sur 24 bits : 12 bits pour les

pages et 12 bits pour le déplacement dans la page

● 2- Combien d'octets se trouvent dans un cadre

de page ?

– 4096 octets

12/15/16

68

Solution Exercice 1 : Pagination Simple

● 3- Combien de bits de l'adresse physique spécifient le cadre de

page ?

– L’espace d’adressage physique est de 2¹ octets. Étant donné que les pages font 2¹²

octets, on peut donc écrire 2¹ = 2¹² * 2 . Ceci implique une adresse physique de 16

bits définie avec 4 bits pour les numéros des cadres et 12 bits pour le déplacement

dans une page.

● 4- Combien d'entrées se trouvent dans la table de pages ?

– La table des pages doit contenir une entrée pour chaque page. Comme il y a 2¹²

pages, la taille de la table des pages doit donc avoir une longueur de 2¹² = 4096

entrées.

● 5- Combien de bits sont nécessaires pour stocker une entrée

dans la table de pages (de quelle largeur est la table de pages) ?

– Chaque entrée contient 3 bits pour indiquer P, R et M et 4 bits pour spécifier le

numéro du cadre de page ; ce qui donne au total 3 + 4 = 7 bits par entrée.

12/15/16

69

Accélérer la pagination

• Tout système de pagination doit considérer deux éléments

1. La correspondance doit être rapide

2. La table des pages doit être très grande

• Accélérer la correspondance

–.La correspondance entre mémoire virtuelle et mémoire physique doit être

réalisée à chaque référence mémoire

–.Un instruction typique: un mot d’instruction + opérande mémoire

–.Chaque instruction : on fait référence à la table des pages au moins

une fois

•. La table des pages doit être très grande

–.Les adresses virtuelles courante d’au moins 32bits (souvent 64 bits)

–.Une page de 4Ko, un espace d’adressage de 32 bits a 1 Million de pages

–.Avec un 1 Million de page dans l’espace d’adressage virtuel, la table

des pages doit avoir 1 Million d’entrées

12/15/16

70

La mémoire associative

• Hypothèse: la table des pages est en mémoire

– Impact considérable sur les performances

– Par exemple une instruction qui copie un registre dans un autre

● En l’absence de pagination: cette instruction fait une seule

référence mémoire

● Avec la pagination: des références mémoires supplémentaires

peuvent être nécessaire pour accéder à la table des pages

• Observation:

– La plupart des programmes tendent à faire un grand nombre de

référence à un petit nombre de pages

→ Seule un petite fraction des entrées de la table des pages est

réellement lue, tout le reste sert rarement

12/15/16

71

La mémoire associative

• Solution

– équiper les ordinateurs avec un périphérique qui permet de mettre en

correspondance les adresses virtuelles avec les adresses physique sans passer

par la table des pages

– TLB: Translation Lookaside Buffer

– Appelé aussi mémoire associative, se trouve à l’intérieur de la MMU

• Le TLB consiste en un petit nombre d’entrées qui sont rarement

plus de 64

– Chaque entrée contient les informations d’une page:

• le numéro de la page virtuelle,

• un bit mis à 1 quand la page est modifiée,

• le code de protection (RWX)

• la cadre de page physique dans lequel la page est utilisé

• Un bit indique si l’entrée est valide (càd utilisée) ou non

– Ces champs étalissent une correspondance point à point avec les champs de la

page

12/15/16

72

La mémoire associative

Valide

Page virtuelle

Modifié

Protection

Cadre de page

indices

code

données

données

code

code

pile

pile

73

• Un processus (boucle + tableau)

– Les données principales sont dans les pages 129,130

– Page 140 indice de parcours

– Pile 860, 861

– Code 19,20,21

12/15/16

La mémoire associative

• Quand une adresse virtuelle est présentée à la

MMU pour être traduite

– Le matériel vérifie si ce numéro de page virtuelle est

présent dans le TLB

– Si une correspondance est trouvée et si l’accès n’enfreint

pas la pas les bits de protection, le cadre de page est

pris directement dans le TLB sans passer par la table

des pages

– Si le numéro de page virtuelle est présent dans le TLB

mais l’instruction essaie d’écrire dans un cadre autorisée

en lecture seule, une erreur de protection est générée

12/15/16

74

La mémoire associative

• Lorsque le numéro de page virtuelle

n’est pas dans le TLB

– La MMU détecte l’erreur et parcourt

normalement la table des pages

– Elle efface une des entrées du TLB et la

remplace par l’entrée de la table des pages

trouvée

– Si cette page est réutilisée rapidement, il en

résultera cette fois un accès plutôt qu’une

erreur

12/15/16

75

Les tables des pages des grandes

mémoires

• On utilise les TLB pour accélérer la

traduction d’adresse virtuelles en

adresses physiques, mais ce n’est pas

le seul problème à traiter

• Il faut aussi gérer de très grandes

mémoires. Deux solutions:

1. Tables des pages multi-niveaux

2. Tables des pages inversées

12/15/16

76

Tables des pages multi-niveaux

• Une adresse de 32 bits est

subdivisé en

– Un champ de 10 bits nommé

PT1

– Un champ de 10 bits nommé

PT2

– Un champ de 12 bits nommé

Décalage

• Puisque les décalages

sont sur 12 bits, les pages

font 4 Ko (4*1024) et nous

avons au total 220 pages.

12/15/16

77

Tables des pages multi-niveaux

• Avec la méthode des tables

de pages multi-niveau, on ne

garde pas en mémoire toutes

les tables de pages en

particulier celles dont nous

n’avons pas besoin.

• Exemple: Un processus a

besoin de 12 Mo: 4Mo

inférieur pour le code, 4 Mo

pour les données, 4 Mo pour

la pile

12/15/16

78

Tables des pages multi-niveaux

Publicité

• Le 1er niveau correspon...