149 | | 1. Pour libérer un objet alloué par l'allocateur de l'application, la fonction `free()` reçoit juste le pointeur rendu par `malloc()`. Comment la fonction `free()` connait-elle la taille qui avait été allouée ? |
150 | | {{{#!protected ------------------------------------------------------------------ |
151 | | ''' |
152 | | * |
153 | | ''' |
154 | | }}} |
155 | | 1. |
156 | | {{{#!protected ------------------------------------------------------------------ |
157 | | ''' |
158 | | * |
159 | | ''' |
160 | | }}} |
161 | | 1. |
162 | | {{{#!protected ------------------------------------------------------------------ |
163 | | ''' |
164 | | * |
165 | | ''' |
166 | | }}} |
167 | | 1. |
168 | | {{{#!protected ------------------------------------------------------------------ |
169 | | ''' |
170 | | * |
171 | | ''' |
172 | | }}} |
173 | | 1. |
174 | | {{{#!protected ------------------------------------------------------------------ |
175 | | ''' |
176 | | * |
177 | | ''' |
178 | | }}} |
179 | | 1. |
| 149 | 1. Pour libérer un objet alloué par l'allocateur de l'application, la fonction `free()` reçoit juste le pointeur rendu par `malloc()`. Comment la fonction `free()` connaît-elle la taille qui avait été allouée ? |
| 150 | {{{#!protected ------------------------------------------------------------------ |
| 151 | ''' |
| 152 | * |
| 153 | ''' |
| 154 | }}} |
| 155 | 1. L'allocateur d'objets du noyau utilise un mécanisme d'allocation par dalles ou `slab` en anglais, nommé `slab allocator`. Qu'est-ce qu'un slab ? Quelle est la taille d'un slab ? Quel est l'intérêt des slabs? |
| 156 | {{{#!protected ------------------------------------------------------------------ |
| 157 | ''' |
| 158 | * |
| 159 | ''' |
| 160 | }}} |
| 161 | 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 ? |
| 162 | {{{#!protected ------------------------------------------------------------------ |
| 163 | ''' |
| 164 | * |
| 165 | ''' |
| 166 | }}} |
| 167 | 1. Lorsqu'on libère le dernier objet d'un slab, celui-ci est libéré, pensez-vous que cela puisse être un problème ? Si oui, avez-vous une solution ? |
| 168 | {{{#!protected ------------------------------------------------------------------ |
| 169 | ''' |
| 170 | * |
| 171 | ''' |
| 172 | }}} |
| 173 | 1. Les objets alloués par l'allocateur d'objets de kO6 font au maximum 4kO, pourquoi cette limite ? Est-ce un problème selon vous ? |
| 174 | {{{#!protected ------------------------------------------------------------------ |
| 175 | ''' |
| 176 | * |
| 177 | ''' |
| 178 | }}} |
| 179 | 1. Pour libérer un objet alloué par l'allocateur d'objets du noyau, on utilise la fonction `kfree()` qui prend en argument le pointeur |