Allocation Dynamique Flashcards

(50 cards)

1
Q

Comment est organisé l’espace d’adressage d’un processus ?

A

Un exécutable = plusieurs sections
- .text = les instructions
- .data = les variables globales
- .heap = le tas
- .stack = la pile d’adresse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Allocation statique

A

Emplacement et taille fixés début de l’exécution
Les instructions et les variables globales

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Allocation dynamique

A

Faite sur le tas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Pile d’exécution

A

Zone dédiée à l’allocation “dynamique”, utilisée pour variables locales et adresses de retour
Politique LIFO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Croissance automatique de la pile d’exécution

A
  1. Application exécute un PUSH
  2. MMU cherche à traduire VA -> PA, trouve un PTE invalide et envoie une IRQ au noyau
  3. Noyau examine la VA demandée, et reconnaît un débordement de pile
  4. Noyau cherche une PP libre
  5. Noyau place la page dans VAS = màj la PT du processus
  6. Rend la main à l’application. PUSH retentée avec succès
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Allocation dynamique sur le tas (heap allocation)

A

Permettre allocations et libérations arbitraires, grâce aux primitives allouer et libérer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Primitive allouer(taille)

A

Cherche une zone libre et retourne son adresse de début (ou renvoie une erreur si incapable de servir la requête)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Primitive libérer(adresse)

A

Indique au gestionnaire mémoire qu’une zone n’est plus utilisée et qu’elle peut être recyclé

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Gestionnaire de mémoire dynamique (memory allocator)

A

Répond aux requêtes d’allocation (resp. de désallocation) émises par l’application en réservant (resp. recyclant) des blocs de taille variées à l’intérieur d’une grande zone appelée le tas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Structure de données du gestionnaire de mémoire dynamique

A

Freelist, ou liste de blocs libres

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

À quoi correspond une activation de fonction ?

A

À un morceau de la pile
- variable locales, arguments de fonction, adresse de retour

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Quelles sont les instructions CPU dédiées à la pile ?

A

PUSH, POP, CALL et RET

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Problème de fragmentation du tas

A

Morcellement progressif de l’espace libre en des blocs trop petit pour satisfaire les requêtes d’allocation de l’application

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Causes de la fragmentation du temps

A

Disparité des durées de vie et disparité les tailles allouées

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Découpage de blocs libres lors de l’allocation

A

Réduit la fragmentation interne mais risque de produire des blocs libres trop petits

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Fusion de blocs libres lors de la désallocation

A

Réduit la fragmentation externe mais risque de causer du travail improductif

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Fragmentation interne

A

Espace inutilisé dans les blocs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Stratégies d’allocation

A

On comparer les différentes scénarios

Fragmentation = espace total occupé par le tas / somme des tailles des blocs alloués

Performance = temps d’exécution de l’algo de choix de bloc

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Stratégie First-fit

A

Examiner le moins de bloc possible
• parcourir la freelist et choisir le premier bloc libre de taille suffisante

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Fragmentation externe

A

Blocs trop petits pour être utile?

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Comment choisir le «meilleur» bloc dans la freelist ?

A

Optimal = choisir le bloc qui causera le moins de fragmentation
mémoire dans le futur ▶ impossible à deviner

En pratique, on va chercher un compromis entre fragmentation et performance

22
Q

Compromis entre fragmentation et performance

A
  • fragmentation = espace total occupé par le tas / somme des tailles des blocs alloués
  • performance = temps d’exécution de l’algo. de choix de bloc
23
Q

Stratégie Next-fit

A

Ne pas retraverser toute la freelist à chaque fois
• variante de First-fit : démarrer le parcours à l’endroit du dernier bloc alloué précédemment (on considère la freelist comme une liste circulaire)

24
Q

Stratégie Best-fit

A

Préserver les gros blocs libres
• considérer l’intégralité de la freelist et choisir le bloc acceptable le plus petit

25
Stratégie Worst-fit
Éviter la prolifération de blocs minuscules • considérer l’intégralité de la freelist et choisir le bloc acceptable le plus grand
26
Hypothèse suivie quand on cherche dans la freelist
Si le bloc choisi est trop grand, on le découpe
27
Meilleure stratégie ?
Il n’y en a pas ! Tout dépend du scénario et chacune possède ses désavantages
28
Format d’un bloc libre
Header + espace libre Dans le header : on indique taille du bloc entier + 3 derniers bits à 000 (alignement : toujours un multiple de 8)
29
Format d’un bloc alloué
Header + espace utile + padding (espace perdu) Les 3 derniers bits à 001 Pointeur p qui pointe vers début espace libre visible par l’application
30
Pourquoi a t-on du padding ?
C’est causé par l’arrondi à des multiples de 8
31
Boundary tags (footer)
Copie complète du header placée à la fin de chaque bloc, il permet de traverser la liste des blocs libres et occupés dans les deux sens (on peut localiser le bloc précédent facilement)
32
Chaînage explicite de la freelist
On rajoute des pointeurs de chaînage pour permettre à l’allocateur de parcourir la freelist dans l’ordre qui l’arrange
33
Si on n’a aucun bloc libre assez grand
Il faut agrandir le tas : appel système mmap() pour demander des pages au noyau
34
Comment accélérer la recherche dans la freelist grâce au chaînage explicite ?
Lors du chaînage explicite de la freelist 1) Chaîner uniquement les blocs libres 2) Garder trier la freelist dans le bon ordre
35
Ordre de tri de la freelist
Par adresses croissantes, par tailles croissantes ou par tailles décroissantes
36
Tri par adresses croissantes
Fusion facile mais allocation coûteuse
37
Tri par tailles croissantes
Best-fit efficace mais fusion coûteuse
38
Tri par tailles décroissantes
Worst-fit facile mais fusion coûteuse
39
Allocateur avec segregated freelist
Dans la vraie vie = plusieurs sous listes chaînées pour les différentes tailles > approximation de best-fit sans avoir à traverser tous les blocs
40
Allocation et désallocation avec segregated freelist
Allocation : si pas trouvé > découper un bloc plus grand (listé triée vs non triée) Désallocation : fusion optionnelle > recyclage des petits blocs
41
Pour lancer un programme…
Créer un PCB et une PT Charger l’exécutable en mémoire PCB.PC = adresse de main PCB.state = ready Ajouter le PCB à la ready queue
42
Que contient le registre Stack Pointer SP du CPU ?
L’adresse du sommet de pile
43
La pile appartient-elle à l’exécutable ?
Non, elle est allouée au fur et à mesure de l’exécution + à la demande par le noyau
44
Règles de gestion du tas
• interdit de «découper» les requêtes d’allocation => «allocation contiguë» ▶ taille allouée ⩾ taille demandée •interdit de réordonner la séquence des requêtes (dépend du flot d’exécution de l’application) •interdit de bouger les zones déjà allouées (chaque choix de bloc est définitif)
45
Inconvénient de First-fit
Beaucoup de fragmentation en début de liste
46
Inconvénient de Next-fit
Beaucoup de fragmentation partout
47
Inconvénient de Best-fit
Comment examiner efficacement tous les blocs ?
48
Inconvénient de Worst-fit
Comment examiner efficacement tous les blocs + énormément de fragmentation
49
Si aucun bloc libre assez grand
Il faut agrandir le tas : appel système mmap() pour demander des pages au noyau
50
Inconvénient de procéder avec ces règles
• Trop grand nombre de blocs libres ▶ allocation lente • Blocs libres trop petits ▶ espace inutilisable