766 | | L'application utilisateur n'est pas censée utiliser directement les appels système. Elle utilise une bibliothèque (ou librade fonctions standards (la libc POSIX, mais pas seulement) et ce sont ces fonctions qui réalisent les appels système. Toutes les fonctions de la libc n'utilisent pas les appels système. Par exemple, les fonctions `int rand(void)` ou `int strlen(char *)` (rendent, respectivement, un nombre pseudo-aléatoire et la longueur d'une chaîne de caractères) n'ont pas besoin du noyau. |
767 | | |
768 | | Normalement, les bibliothèques système sont des « vraies » bibliothèque au sens `gcc` du terme. C'est-à-dire des archives de fichiers objet (`.o`). Ici, nous allons simplifier et ne pas créer de bibliothèque, mais seulement un fichier objet `libc.o` contenant toutes les fonctions. Ce fichier objets doit être lié avec le code de l'application. |
769 | | |
770 | | L'exécutable de l'application utilisateur est donc composé de deux parties : le code de l'application et le code de la librairie |
| 766 | L'application utilisateur n'est pas censée utiliser directement les appels système. Elle utilise une librairie de fonctions standards (la libc POSIX, mais pas seulement) et ce sont ces fonctions qui réalisent les appels système. Toutes les fonctions de la libc n'utilisent pas les appels système. Par exemple, les fonctions `int rand(void)` ou `int strlen(char *)` (rendent, respectivement, un nombre pseudo-aléatoire et la longueur d'une chaîne de caractères) n'ont pas besoin du noyau. Les librairies font partie du système d'exploitation mais elles ne sont pas dans le noyau. |
| 767 | |
| 768 | Le terme « librairie » vient de l'anglais « library » qui signifie bibliothèque. On utilise souvent le mot librairie même si le sens en français n'est pas le même que celui en anglais. Disons que, dans notre contexte, les deux mots sont synonymes. |
| 769 | |
| 770 | Normalement, les librairies système sont des « vraies » librairies au sens `gcc` du terme. C'est-à-dire des archives de fichiers objet (`.o`). Ici, nous allons simplifier et ne pas créer de librairie, mais seulement un fichier objet `libc.o` contenant toutes les fonctions. Ce fichier objets doit être lié avec le code de l'application. |
| 771 | |
| 772 | L'exécutable de l'application utilisateur est donc composé de deux parties : le code de l'application et le code de la librairie et nous allons répartir le code dans deux répertoire `uapp` pour les fichiers de l'application et `ulib` pour les fichiers qui ne sont pas l'application, c'est-à-dire la libc, mais aussi le fichier `ldscript` et le fichier `crt0.c`. |
807 | | 1. Question ? |
808 | | {{{#!protected ------------------------------------------------------------------------------------ |
809 | | ''''''''''''''' |
810 | | - réponse |
811 | | ''''''''''''''' |
812 | | |
| 808 | 1. Pour ce petit système, quel fichier sont placés les prototypes de la libc? Est-ce ainsi pour POSIX sur LINUX? |
| 809 | {{{#!protected ------------------------------------------------------------------------------------ |
| 810 | ''''''''''''''' |
| 811 | - Ils sont tous dans le fichier `libc.h`. |
| 812 | - Non, pour POSIX, les prototypes de fonctions de la libc sont répartis dans plusieurs fichiers suivant leur rôle. Il y `stdio.h`, `string.h`, `stdlib.h`, etc. Nous n'avons pas voulu ajouter cette complexité. |
| 813 | ''''''''''''''' |
| 814 | }}} |
| 815 | |
| 816 | |
| 817 | **Exercice** |
| 818 | |
| 819 | |
| 820 | - Vous allez juste ajouter la fonction `int cpuid()` dans la librairie |