Changes between Version 65 and Version 66 of AS6-TME-B6


Ignore:
Timestamp:
Mar 26, 2024, 3:10:42 PM (6 months ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B6

    v65 v66  
    4646
    4747
    48 {{{#!html
    49 <font size=+7 color=orange> En travaux</font> (correction TP en cours)<br><br>
    50 }}}
    51 
    52 
    5348Résumé des principes de l'allocation de mémoire vue en cours.
    5449
     
    304299
    305300
     301{{{#!html
     302<font color=orange><b>Il n'y a pas de corrigés de TPs
     303}}}
    306304
    307305Commencez par récupérer le code de source de la séance tp6 (toujours accessible dans INDEX)
    308306
    309307Pour 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).
     308Les exercices sont classés par niveau de difficultés supposées (on est jamais à l'abri de surprises).
    311309
    312310En 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.
     
    355353
    356354
    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é.
     355L'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.
    358356
    359357Dans 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...
     358On 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.
    361359
    362360**ulib/memory.c**
     
    424422
    425423
    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.
     424Plus 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
     426En 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.
    427427
    428428