Changes between Version 24 and Version 25 of AS6-TME-B6
- Timestamp:
- Mar 29, 2022, 11:42:08 AM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B6
v24 v25 22 22 - **Nous avons donc 3 allocateurs dans kO6** : 23 23 - un allocateur de variables dynamiques pour l'application ; 24 - un allocateur de piles utilisateurs pour les threads de l'applicationmais utilisé par le noyau ;24 - un allocateur de piles ‘’utilisateurs’’ pour les threads de l'application, mais utilisé par le noyau ; 25 25 - un allocateur de variables dynamiques pour le noyau. 26 26 - L'allocateur de piles utilisateur et l'allocateur de variables doivent partager la zone libre laissée dans le segment `.data`. Ainsi l'allocateur de piles utilise la partie haute du segment `.data` et l'allocateur de variables utilise la partie basse. … … 29 29 - **kO6 propose une API nommée `list` permettant de gérer les listes chaînées** 30 30 - Cette API est définie dans le fichier `common/list.h` et elle est utilisable par l'application et le noyau, notamment dans les allocateurs. 31 - L'API `list` permet de chaîner des éléments de liste de type `list_t`, laquelle est une structure composée d'un double pointeur pointant vers d'autres structures `list_t`.31 - L'API `list` permets de chaîner des éléments de liste de type `list_t`, laquelle est une structure composée d'un double pointeur pointant vers d'autres structures `list_t`. 32 32 - Les éléments de liste sont embarqués dans des structures porteuses. 33 33 - Ce sont les éléments de type `list_t` qui sont chaînés entre eux, mais l'API `list` permets de retrouver le pointeur sur la structure porteuse de l'élément. … … 46 46 47 47 - **L'allocateur de variables dynamiques pour l'application.** 48 - Cet allocateur gère un segment d'adresses nommé `heap` placé en bas du segment `.data`, situé juste après les variables globales et aligné sur les lignes de caches.48 - Cet allocateur gère un segment d'adresses nommé `heap` placé en bas du segment `.data`, situé juste après les variables globales et alignées sur les lignes de caches. 49 49 - l'adresse limite du `heap` est nommée `heap_end`, c'est un pointeur. 50 50 - L'allocateur gère des blocs (il fallait bien donner un nom...) … … 73 73 - Au départ, toutes les listes d'objets libres sont vides. 74 74 - Lorsqu'une demande d'allocation est faite pour une certaine taille `T` et que la liste des objets libres de cette taille `T` est vide alors l'allocateur alloue une dalle (ou `slab` en anglais) de 4kO. 75 - Il découpe la dalle en autant d'objets que possible de la taille `T` demandée et il cha ine ces objets pour remplir la liste d'objets libres.75 - Il découpe la dalle en autant d'objets que possible de la taille `T` demandée et il chaîne ces objets pour remplir la liste d'objets libres. 76 76 - Pour allouer un objet, l'allocateur prend le premier objet de la liste des objets libres de la bonne taille. 77 77 - `void kfree(void *, size_t)` … … 117 117 ''' 118 118 }}} 119 1. Aquoi sert l'allocateur de pile user ? Qui demande l'allocation ? Qui utilise les piles ? Est-ce que ces piles ont une taille variable ?119 1. À quoi sert l'allocateur de pile user ? Qui demande l'allocation ? Qui utilise les piles ? Est-ce que ces piles ont une taille variable ? 120 120 {{{#!protected ------------------------------------------------------------------ 121 121 ''' … … 129 129 ''' 130 130 }}} 131 1. Est-ce que ces piles peuvent déborder ? Si oui, est-ce vraiment un problème et que propose kO6 pour se problème ?131 1. Est-ce que ces piles peuvent déborder ? Si oui, est-ce vraiment un problème et que propose kO6 pour ce problème ? 132 132 {{{#!protected ------------------------------------------------------------------ 133 133 ''' … … 141 141 ''' 142 142 }}} 143 1. L'allocateur d'objets (nommés blocs dans le rappel de cours au dessus) pour l'application utilise une politique ''first fit''. Qu'est-ce que cela signifie ? Quels sont les autres ? existe-il une politique meilleure que les autres et pour quel critère ?144 {{{#!protected ------------------------------------------------------------------ 145 ''' 146 * 147 ''' 148 }}} 149 1. Rappeler le nom des deux fonctions de l'API utilisateur de cet allocateur. Est-ce que ces fonctions font des appels système s? Si oui, quand et pourquoi ?143 1. L'allocateur d'objets (nommés blocs dans le rappel de cours au-dessus) pour l'application utilise une politique ''first fit''. Qu'est-ce que cela signifie ? Quels sont les autres ? Existe-t-il une politique meilleure que les autres et pour quel critère ? 144 {{{#!protected ------------------------------------------------------------------ 145 ''' 146 * 147 ''' 148 }}} 149 1. Rappeler le nom des deux fonctions de l'API utilisateur de cet allocateur. Est-ce que ces fonctions font des appels système ? Si oui, quand et pourquoi ? 150 150 {{{#!protected ------------------------------------------------------------------ 151 151 ''' … … 165 165 ''' 166 166 }}} 167 1. L'allocateur d'objets du noyau gère des listes d'objets libres. Quel rapport y -a-t-il entre les objets alloués et les slabs ? À quel moment les slabs sont-ils alloués ? À quel moment les slabs sontils libérés ?167 1. L'allocateur d'objets du noyau gère des listes d'objets libres. Quel rapport y a-t-il entre les objets alloués et les slabs ? À quel moment les slabs sont-ils alloués ? À quel moment les slabs sont-ils libérés ? 168 168 {{{#!protected ------------------------------------------------------------------ 169 169 ''' … … 189 189 ''' 190 190 }}} 191 1. Le premier usage des allocateurs est fait par la gestion des threads. Sur les trois allocateurs décrits ici, quels sont ceux utilisés?191 1. Le premier usage des allocateurs est fait par la gestion des threads. Sur les trois allocateurs décrits ici, quels sont ceux qu’il utilise? 192 192 {{{#!protected ------------------------------------------------------------------ 193 193 '''