Allocation de mémoire aux processus§

Systèmes d’exploitation

auteur:Pierre-Antoine Champin
adresse:Département Informatique - IUT - Lyon1
licence:Ce travail est sous license Creative Commons Attribution-ShareAlike 3.0 France
1

Problématique§

2

Protection / partage§

On souhaite que deux processus indépendants ne puissent pas, par accident, utiliser la même zone mémoire (Arbitrage, Autorisation),

3

Translation (relocation)§

Le même programme doit pouvoir s’exécuter à différent endroits de la mémoire.

4

Allocation / réallocation§

Un programme doit pouvoir recevoir la zone mémoire dont il a besoin si la mémoire est disponible, et modifier ses besoins pendant sont exécution.

_images/vm_probleme.png
5

Augmentation§

L’utilisation « optimale » du système peut requérir plus de processus qu’il n’en tient à un instant donné dans la mémoire

6

Solution générale§

7

Principe§

On va distinguer deux « vues »

La traduction peut, en théorie, être implémentée soit

8

Solution matérielle§

En mode utilisateur, les instructions manipulent des adresses logiques.

C’est un composant matériel, le MMU (Memory Management Unit), qui assure la traduction en adresses physiques.

→ peu coûteux

→ transparent pour les programmes

En mode superviseur, les instructions manipulent directement les adresses physiques.

→ le système d’exploitation a une vue « globale » de la mémoire
9

Remarque§

int i;
int main (int argc, char** argv) {
    i = argc;
    printf("adresse: %p - valeur: %d\n", &i, i);
    return 0;
}

Ce programme affiche-t-il une adresse physique ou une adresse logique ?

Que se passe-t-il si on l’exécute ainsi :

./prog a  &  ./prog a b
10

Pagination§

11

Principe§

12

Illustration§

_images/vm_pagetable.png
13

Pagination et SE§

14

Pagination et SE (2)§

Translation :

Protection :

15

Pagination et SE (3)§

Allocation – ré-allocation :

Partage :

16

Mémoire partagée : illustration§

_images/vm_sharing.png
17

Pagination et SE (4)§

Augmentation de la mémoire physique :

NB: C’est pour répondre spécifiquement à cette fonction que la pagination a été inventée

18

Rappel: calcul d’adresses§

al:

adresse logique

ap:

adresse physique

tp:

taille d’une page

tc[]:

table de correspondance

(numéro de page → numéro de cadre)

calcul:

no_page = al div tp

décalage = al mod tp // en anglais: offset

ap = tc[ no_page ]*tp + décalage

19

Rappel: calcul d’adresses (2)§

ap = tc[ al div tp ]*tp + ( al mod tp )

supposons tp = 10 et tc =

|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|
|21|22|23|24|02|03|04|36|34|35|43|44|45|46|10|xx|

traduisons d’adresse logique 123 :

20

Rappel: calcul d’adresses (3)§

ap = tc[ al div tp ]*tp + ( al mod tp )

supposons tp = 10 et tc =

|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|
|21|22|23|24|02|03|04|36|34|35|43|44|45|46|10|xx|

traduisons d’adresse logique 123 :

21

Rappel : calcul d’adresses (4)§

_images/vm_address.png

Exemple de bus d’adresse sur 32 bits

22

Table des pages§

23

Présentation§

La table des pages est un tableau : le numéro du bloc correspondant à la page n est à la n-ième case du tableau.

Chaque case, ou PTE (Page Table Entry) ne contient donc pas explicitement le numéro de page ; uniquement le numéro de bloc plus des information de gestion.

24

Structure d’une PTE§

Drapeaux (flags) renseignés par le SE / utilisés par le MMU

Drapeaux renseignés par le MMU / utilisés (et parfois modifiés) par le SE

_images/vm_pte.png
25

Drapeaux d’une PTE§

26

Drapeaux d’une PTE (2)§

27

Application : optimisation de fork§

Problème avec le code suivant :

int pid = fork();
if (pid == 0) exec("monprog", argv);
28

COW: Copy On Write§

NB: ce type de méthode est appelé « méthode paresseuse » (lazy)

29

Mémoire virtuelle§

30

Introduction : principe de localité§

31

Hiérarchie des mémoire§

_images/vm_pyramide.svg
32

Principe de la mémoire virtuelle§

Le principe de mémoire virtuelle est une application de la technique du cache.

_images/vm_cache.svg
33

Remplacement des pages§

Problématique : comment décider des pages à retirer de la mémoire et de celles à recharger ?

Idéalement (principe de localité) :

NB : ce problème ne le limite pas à la gestion de mémoire paginée, mais à tout type de cache (y compris au niveau applicatif).

34

Stratégies§

En ce qui concerne la restauration, on fonctionne à la demande : une page est restaurée en mémoire au moment où on a besoin d’elle :

Reste le problème du retrait : quelle page va céder sa place à la page restaurée ?

35

Mise en œuvre§

36

Stratégie de remplacement optimale§

Toujours retirer la page qui sera ré-utilisée le plus tard.

Nécessite soit :

Utile pour évaluer les autres approches a posteriori.

37

Stratégie : Not Recently Used§

38

Stratégie : Not Recently Used (2)§

En fait, on utilise également le bit dirty pour déterminer les pages utilisées récemment, en donnant le poids fort à accessed

Méthode relativement efficace (surcoût très faible), mais ayant un grain très grossier (4 catégories seulement).

39

Stratégies : FIFO§

40

Stratégie FIFO : Anomalie de Belady§

41

Anomalie de Belady (exemple)§

_images/vm_belady.png
42

Stratégie : Seconde chance§

43

Stratégie : Least Recently Used§

44

Stratégie : Not Frequently Used§

45

Stratégie : Not Frequently Used (2)§

46

Stratégie : NFU + vieillissement§

47

Stratégie : NFU + vieillissement (2)§

_images/vm_nfu_ageing.png
48

Remarques sur les stratégies§

49

Remplacement local ou global§

50

Pré-nettoyage (pre-cleaning)§

51

Évolutions§

52

Conclusion§

53

En résumé§

La gestion de la mémoire relève d’une coopération entre le matériel (MMU) et le système d’exploitation

MMU :

Système :

54