Changes between Version 43 and Version 44 of Archi-1-TP10


Ignore:
Timestamp:
Jan 3, 2021, 9:41:52 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP10

    v43 v44  
    757757
    758758
    759 == B4.  Accès aux registres de contrôle des terminaux `TTY`
     759== B4.  Ajout de la librairie C
    760760
    761761
     
    764764
    765765
    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
     766L'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
     768Le 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
     770Normalement, 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
     772L'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`.
    771773
    772774 
     
    798800    ├── libc.h      : API pseudo-POSIX de la bibliothèque C
    799801    ├── libc.c      : code source de la libc
    800     ├── main.c      : fonction principale de l'application
    801802    ├── user.ld     : ldscript décrivant l'espace d'adressage pour l'édition de liens du user
    802803    └── Makefile    : description des actions possibles sur le code user : compilation et nettoyage
     
    805806**Questions**
    806807
    807 1. Question ?
    808 {{{#!protected ------------------------------------------------------------------------------------
    809 '''''''''''''''
    810 - réponse
    811 '''''''''''''''
    812 
     8081. 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