Changes between Version 65 and Version 66 of AS6-TME-B6
- Timestamp:
- Mar 26, 2024, 3:10:42 PM (11 months ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B6
v65 v66 46 46 47 47 48 {{{#!html49 <font size=+7 color=orange> En travaux</font> (correction TP en cours)<br><br>50 }}}51 52 53 48 Résumé des principes de l'allocation de mémoire vue en cours. 54 49 … … 304 299 305 300 301 {{{#!html 302 <font color=orange><b>Il n'y a pas de corrigés de TPs 303 }}} 306 304 307 305 Commencez par récupérer le code de source de la séance tp6 (toujours accessible dans INDEX) 308 306 309 307 Pour la partie pratique, vous allez devoir programmer un peu. Les premières questions sont assez faciles, les dernières un peu moins. Le but est de vous «forcer» à entrer dans le code et même des petites modifications suffisent. 310 Les exercices sont classés par niveau de difficultés supposées (on est jamais à l'abri de surprise ).308 Les exercices sont classés par niveau de difficultés supposées (on est jamais à l'abri de surprises). 311 309 312 310 En préalable de tous les exercices, quelques questions sur le code. Dans le répertoire `tp6` vous trouvez le répertoire `01_malloc` qui contient le code complet des allocateurs et la modification du code de `kentry` pour le changement de pile. … … 355 353 356 354 357 L'allocateur first-fit parcourt la liste des blocs depuis le tout premier jusqu'à la fin à la recherche du premier bloc non plein assez grand pour l'objet à allouer. Pour transformer ce comportement en next-fit, il suffit de se souvenir du dernier bloc alloué. 355 L'allocateur first-fit parcourt la liste des blocs depuis le tout premier jusqu'à la fin à la recherche du premier bloc non plein assez grand pour l'objet à allouer. Pour transformer ce comportement en next-fit, il suffit de se souvenir du dernier bloc alloué. Ce changement est une petite optimisation, parce qu'on évite le parcours des blocs qui sont au début du heap et si le heap est plein de petits blocs occupés alors ce parcours peut être long. 358 356 359 357 Dans le code ci-après, on peut voir la fonction `try_malloc()` appelée par la fonction `malloc()`. 360 On voit que les blocs sont parcourus depuis `Heap.beg` le premier bloc jusqu'au dernier `Heap.end` (qui n'est pas vraiment un bloc, mais une frontière). Lisez le code et trouvez comment recommencer le prochain `try_malloc()` à partir de dernier bloc alloué. Ce n'est pas difficile, mais il faut comprendre...358 On voit que les blocs sont parcourus depuis `Heap.beg` le premier bloc jusqu'au dernier `Heap.end` (qui n'est pas vraiment un bloc, mais une frontière). Lisez le code et trouvez comment recommencer le prochain `try_malloc()` à partir de dernier bloc alloué. Ce n'est pas très difficile, mais il faut comprendre le code. 361 359 362 360 **ulib/memory.c** … … 424 422 425 423 426 Plus difficile, passer l'allocateur en best-fit. Je ne vous demande pas d'écrire le code, sauf si vous avez le temps et la motivation. En revanche, vous pouvez réfléchir à la manière de procéder. Pour vous aider, l'idée, c'est de ne pas toucher aux chaînages des blocs utilisés par first-fit. Il faut créer un chaînage ordonné par taille des blocs libres en utilisant l'API `list` et l'utiliser pour trouver le bloc de la bonne taille. Ce n'est très difficile, mais il y a pleins de détails à régler, par exemple, décider de ce qu’on lors d'un ''merge'' des blocs libres. 424 Plus difficile, passer l'allocateur en best-fit. L'idée, c'est de ne pas toucher aux chaînages des blocs utilisés par first-fit. Il faut créer un second chaînage ordonné par taille des blocs libres en utilisant l'API `list` et l'utiliser pour trouver le bloc de la bonne taille. Il y a pleins de détails à régler, par exemple, décider de ce fait qu’on lors d'un ''merge'' des blocs libres parce que cela va impacter la liste ordonnée des blocs libres. Les maillons de ce second chaînage sera mis dans les blocs eux-mêmes, juste après le block_info. 425 426 En fonction de votre niveau de programmation en C et de votre niveau de compréhension de l'algorithme, cela peut vous prendre de 1h à beaucoup... alors ce n'est vraiment pas important d'aller jusqu'au code. Par conséquent, je ne vous demande pas d'écrire le code, sauf si vous avez le temps et la motivation. En revanche, vous pouvez réfléchir à la manière de procéder et la décrire dans votre compte rendu. 427 427 428 428