Changes between Version 20 and Version 21 of Archi-1-TD10


Ignore:
Timestamp:
Nov 20, 2022, 4:04:17 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TD10

    v20 v21  
    4324325. Vous avez appris à écrire des programmes assembleur, mais parfois il est plus simple, voire nécessaire, de mélanger le code C et le code assembleur. Dans l'exemple ci-dessous, nous voyons comment la fonction `syscall()` est écrite. Cette fonction utilise l'instruction `syscall`.\\Deux exemples d'usage de la fonction `syscall()` pris dans le fichier `tp2/4_libc/ulib/libc.c`.
    433433{{{#!c
    434   1 int fprintf (int tty, char *fmt, ...) // tty est l'identifiant du terminal
    435   2 {                                     // fmt est la chaine format, suivie d'une liste d'arguments optionnelz
     434  1 int fprintf (int tty, char *fmt, ...) // tty identifiant du terminal
     435  2 {                                     // fmt chaine format, suivie d'arguments optionnels
    436436  3     int res;
    437437  4     char buffer[PRINTF_MAX];
     
    465465 A quoi sert la ligne 3 de la fonction `syscall()` et que se passe-t-il si on la retire ?
    466466 Expliquer la ligne 5 de la fonction `syscall()`.
    467  Aurait-il été possible de mettre le code de la fonction `syscall()` dans un fichier `.S` ?
    468 {{{#!protected ------------------------------------------------------------------------------------
    469 ''
    470 Cours 10 annexe / slide 10
     467 Aurait-il été possible de mettre le code de la fonction `syscall()` dans un fichier `.S` ? (C10 S31)
     468{{{#!protected ------------------------------------------------------------------------------------
     469''
    471470- La fonction `syscall()` a 5 a arguments
    472471- Elle reçoit ses 4 premiers arguments dans les registres $4 à $7 et le 5e (le numéro de service) dans la pile.
     
    492491
    493492
    494 1. Rappelez à quoi sert un Makefile?
    495 {{{#!protected ------------------------------------------------------------------------------------
    496 ''
    497 Cours 9 / slide 26
     4931. Rappelez à quoi sert un Makefile?  (C9 annexe S5 à S7)
     494{{{#!protected ------------------------------------------------------------------------------------
     495''
    498496- Le rôle principal d'un Makefile est de décrire le mode d'emploi pour construire un fichier dit **`cible`** à partir d'un ou plusieurs fichiers **`source`** (dits de dépendance) en utilisant des commandes du `shell`. Ce rôle pourrait tout aussi bien être occupé par un script `shell` et d'ailleurs, dans le premier TP, nous avons vu un usage du Makefile dans lequel nous avions rassemblé plusieurs scripts `shell` sous forme de règles.
    499497- Le second rôle d'un Makefile est de permettre la reconstruction partielle du fichier **`cible`** lorsque quelques fichiers **`source`** changent (pas tous). Pour ce rôle, le Makefile exprime toutes les étapes de construction de la **`cible`** finale et des **`cibles`** intermédiaires sous forme d'un arbre dont les feuilles sont les fichiers **`sources`**.
    500498''
    501499}}}
    502 1. Vous n'allez pas à avoir à écrire un Makefile complètement. Toutefois, si vous ajoutez des fichiers source, vous allez devoir les modifier en ajoutant des règles. Nous avons vu brièvement la syntaxe utilisée dans les Makefiles de ce TP au cours n°1. Les lignes qui suivent sont des extraits de `1_klibc/Makefile` (le Makefile de l'étape1). Dans cet extrait, quelles sont la `cible` finale, les `cibles` intermédiaires et les `sources`? A quoi servent les variables automatiques de make? Dans ces deux règles, donnez-en la valeur.
     5001. Vous n'allez pas à avoir à écrire un Makefile complètement. Toutefois, si vous ajoutez des fichiers source, vous allez devoir les modifier en ajoutant des règles. Nous avons vu brièvement la syntaxe utilisée dans les Makefiles de ce TP. Les lignes qui suivent sont des extraits de `1_klibc/Makefile` (le Makefile de l'étape1). Dans cet extrait, quelles sont la `cible` finale, les `cibles` intermédiaires et les `sources`? A quoi servent les variables automatiques de make? Dans ces deux règles, donnez-en la valeur. (C9 annexe S5 à S7)
    503501{{{#!make
    504502kernel.x : kernel.ld obj/hcpua.o obj/kinit.o obj/klibc.o obj/harch.o
     
    512510{{{#!protected ------------------------------------------------------------------------------------
    513511''
    514 Cours 9 / slides 27 et 56
    515512- La `cible` finale est : `kernel.x`
    516513- Les `cibles` intermédiaires sont : `kernel.ld`, `obj/hcpua.o`, `obj/kinit.o`, `obj/klibc.o` et `obj/harch.o`.
     
    525522''
    526523}}}
    527 1. Dans le TP, à partir de la deuxième étape, nous avons trois répertoires de sources `kernel`, `ulib` et `uapp`. Chaque répertoire contient une fichier `Makefile` différent destiné à produire une `cible` différente grâce à une règle nommée `compil`, c.-à-d. si vous tapez `make compil` dans un de ces répertoires, cela compile les sources locales.\\Il y a aussi un Makefile dans le répertoire racine `4_libc`. Dans ce dernier Makefile, une des règles est destinée à la compilation de l'ensemble des sources dans les trois sous-répertoires. Cette règle appelle récursivement la commande `make` en donnant en argument le nom du sous-répertoire où descendre :\\`make -C <répertoire> [cible]` est équivalent à `cd <répertoire>; make [cible] ; cd ..`\\Ecrivez la règle `compil` du fichier `4_libc/Makefile`.
     5241. Dans le TP, à partir de la deuxième étape, nous avons trois répertoires de sources `kernel`, `ulib` et `uapp`. Chaque répertoire contient une fichier `Makefile` différent destiné à produire une `cible` différente grâce à une règle nommée `compil`, c.-à-d. si vous tapez `make compil` dans un de ces répertoires, cela compile les sources locales.\\Il y a aussi un Makefile dans le répertoire racine `4_libc`. Dans ce dernier Makefile, une des règles est destinée à la compilation de l'ensemble des sources dans les trois sous-répertoires. Cette règle appelle récursivement la commande `make` en donnant en argument le nom du sous-répertoire où descendre :\\`make -C <répertoire> [cible]` est équivalent à `cd <répertoire>; make [cible] ; cd ..`\\Ecrivez la règle `compil` du fichier `4_libc/Makefile`. (Ce n'est pas dit dans le cours, mais la question contient la réponse...)
    528525{{{#!xml
    5295264_libc/
     
    539536{{{#!protected ------------------------------------------------------------------------------------
    540537''
    541 Ce n'est pas dit dans le cours, mais la question contient la réponse...
    542538{{{#!make
    543539compil: