1408 | | - Pour finir, recompilez à nouveau le noyau en utilisant le mode `-O3`, réexécutez encore l'application en mode debug et regardez combien de cycles sont nécessaire pour exécuter la fonction `fputc()`. Pour ça, vous ouvrez la fonction |
| 1408 | - Pour finir, recompilez à nouveau le noyau en utilisant le mode `-O3`, réexécutez encore l'application en mode debug et regardez combien de cycles sont nécessaires pour exécuter la fonction `fputc()`. Pour ça, vous ouvrez le fichier `trace0.s`, vous cherchez le premier appel de `fputc()` (vous notez le cycle) et vous cherchez l'instruction `eret` qui marque la sortie du kernel (vous notez le cycle) et vous faites la différence ? Profitez en pour voir l'entrée dans le kernel, l'analyse de la cause, l'utilisation du vecteur de syscall, etc. |
| 1409 | {{{#!protected ------------------------------------------------------------------------------------ |
| 1410 | ''''''''''''''' |
| 1411 | - 7391 : appel de `fputc()` |
| 1412 | - 7589 : exéction de `eret` |
| 1413 | - → 7589 - 7391 = 198 cycles (pour afficher 1 caractère !) |
| 1414 | ''''''''''''''' |
| 1415 | }}} |
| 1416 | - Refaite le calcul pour le deuxième appel à `fputc()`, que constatez-vous ? Avez-vous une explication ? |
| 1417 | {{{#!protected ------------------------------------------------------------------------------------ |
| 1418 | ''''''''''''''' |
| 1419 | - 7620 : appel de `fputc()` |
| 1420 | - 7686 : exéction de `eret` |
| 1421 | - → 7686 - 7620 = 66 cycles, c'est plus rapide, c'est à cause des caches que noud verrons plus tard ! |
| 1422 | ''''''''''''''' |
| 1423 | }}} |
| 1424 | |
| 1425 | |