Allocation Dynamique Flashcards

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
Q

Stratégie Worst-fit

A

Éviter la prolifération de blocs minuscules
• considérer l’intégralité de la freelist et choisir le bloc acceptable le plus grand

26
Q

Hypothèse suivie quand on cherche dans la freelist

A

Si le bloc choisi est trop grand, on le découpe

27
Q

Meilleure stratégie ?

A

Il n’y en a pas ! Tout dépend du scénario et chacune possède ses désavantages

28
Q

Format d’un bloc libre

A

Header + espace libre
Dans le header : on indique taille du bloc entier + 3 derniers bits à 000 (alignement : toujours un multiple de 8)

29
Q

Format d’un bloc alloué

A

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
Q

Pourquoi a t-on du padding ?

A

C’est causé par l’arrondi à des multiples de 8

31
Q

Boundary tags (footer)

A

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
Q

Chaînage explicite de la freelist

A

On rajoute des pointeurs de chaînage pour permettre à l’allocateur de parcourir la freelist dans l’ordre qui l’arrange

33
Q

Si on n’a aucun bloc libre assez grand

A

Il faut agrandir le tas : appel système mmap() pour demander des pages au noyau

34
Q

Comment accélérer la recherche dans la freelist grâce au chaînage explicite ?

A

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
Q

Ordre de tri de la freelist

A

Par adresses croissantes, par tailles croissantes ou par tailles décroissantes

36
Q

Tri par adresses croissantes

A

Fusion facile mais allocation coûteuse

37
Q

Tri par tailles croissantes

A

Best-fit efficace mais fusion coûteuse

38
Q

Tri par tailles décroissantes

A

Worst-fit facile mais fusion coûteuse

39
Q

Allocateur avec segregated freelist

A

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
Q

Allocation et désallocation avec segregated freelist

A

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
Q

Pour lancer un programme…

A

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
Q

Que contient le registre Stack Pointer SP du CPU ?

A

L’adresse du sommet de pile

43
Q

La pile appartient-elle à l’exécutable ?

A

Non, elle est allouée au fur et à mesure de l’exécution + à la demande par le noyau

44
Q

Règles de gestion du tas

A

• 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
Q

Inconvénient de First-fit

A

Beaucoup de fragmentation en début de liste

46
Q

Inconvénient de Next-fit

A

Beaucoup de fragmentation partout

47
Q

Inconvénient de Best-fit

A

Comment examiner efficacement tous les blocs ?

48
Q

Inconvénient de Worst-fit

A

Comment examiner efficacement tous les blocs + énormément de fragmentation

49
Q

Si aucun bloc libre assez grand

A

Il faut agrandir le tas : appel système mmap() pour demander des pages au noyau

50
Q

Inconvénient de procéder avec ces règles

A

• Trop grand nombre de blocs libres ▶ allocation lente
• Blocs libres trop petits ▶ espace inutilisable