| 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 | |