Changes between Version 15 and Version 16 of Archi-1-TP9


Ignore:
Timestamp:
Nov 15, 2020, 6:51:20 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v15 v16  
    55}}}
    66
    7 = Préambule
    8 
    97Si ce n'est pas encore fait, vous devez lire la page décrivant les [WikiStart#obj_gen objectifs généraux] des séances, le [WikiStart#prin_peda principe pédagogique] choisi et le [WikiStart#fonc_sean fonctionnement des séances].
    108
    11 La première séance est découpé en 5 étapes :
    12 
    13  [#hello_boot 1. hello_boot]::
     9= Présentation des étapes
     10
     11
     12La séance est découpé en 5 étapes. Dans cette présentation, pour chaque étape, nous donnons une brève description, suivie d'une liste des objectifs principaux et d'une liste des fichiers présents.
     13
     14 [#hello_boot 1. hello_boot]:: \\
    1415   Nous commençons par un petit programme de quelques lignes en assembleur, placé entièrement dans la région mémoire
    1516   du boot, qui réalise l'affichage du message "Hello World". C'est un tout tout petit programme, mais pour obtenir
     
    1718   pour l'exécuter vous devrez exécuter le simulateur du prototype. C'est simple, mais c'est nouveau pour
    1819   beaucoup d'entre vous.
    19 
    20  [#kinit_asm 2. kinit_asm]::
     20   \\\\
     21 **Objectifs**
     22   - Savoir produire un exécutable à partir d'un code en assembleur.
     23   - Savoir comment afficher un caractère sur un terminal.
     24 
     25 **Fichiers**
     26
     27 [#kinit_asm 2. kinit_asm]:: \\
    2128   Dans le deuxième programme, nous restons en assembleur, mais nous avons deux fichiers source : (1) le fichier contenant
    2229   le code de boot et (2) le fichier contenant le code du noyau. Ici, le code du noyau c'est juste une fonction `kinit()`.
    2330   Cette étape permet de voir comment saute d'un fichier à l'autre. Il utilise aussi une version plus complète du fichier
    2431   `ldscript` du kernel.
    25 
    26  [#kinit_c 3. kinit_c]::
     32   \\\\
     33   **Objectifs**
     34   - S
     35
     36 [#kinit_c 3. kinit_c]:: \\
    2737   Dans ce troisième programme, nous faisons la même chose que pour le deuxième mais `kinit()` est désormais écrit en
    2838   langage C. Cela change peut de chose, sauf une chose importante `kinit()` est une fonction et donc il faut absolument
    2939   une pile d'exécution.
    30 
    31  [#nttys 4. nttys]::
     40   \\\\
     41   **Objectifs**
     42   - S
     43
     44 [#nttys 4. nttys]:: \\
    3245   Le prototype de SoC que nous utilisons pour les TP est configurable. Il est possible par exemple de choisir le nombre
    3346   terminaux texte (TTY). Par défaut, il y en a un mais, nous pouvons en avoir jusqu'à 4. Nous allons modifier le code du
    3447   noyau pour s'adapter à cette variabilité.
     48   \\\\
     49   **Objectifs**
     50   - S
    3551
    3652 [#driver 5. driver]::
     
    6177
    6278
    63 == Compétences acquises
    64 
    65 
    66 - Savoir produire un exécutable à partir d'un code en assembleur.
    67 - Savoir comment afficher un caractère sur un terminal.
    68 
    69 
    70 == Questions
    71 
    72 
    73 - Dans quel fichier se trouve la description de l'espace d'adressage du MIPS ?
    74 - Dans quel fichier se trouve le code de boot et pourquoi l'avoir nommé ainsi ?
    75 - A quelle adresse démarre le MIPS ?
    76 - Que produit le compilateur C quand on utilise l'option -c ?
    77 - Que fait l'éditeur de liens ?
    78 - De quels fichiers a besoin l'éditeur de liens pour fonctionner ?
    79 - Dans quelle section se trouve le code de boot pour le compilateur ?
    80 - Dans quelle section se trouve le message hello pour le compilateur ?
    81 - Dans quelle section se trouve le code de boot dans le code exécutable ?
    82 - Dans quelle région de la mémoire le code de boot est placé ?
    83 - Comment connaît-on l'adresse du registre de sortie du contrôleur de terminal TTY ?
    84 - Comment sait-on que le message est fini et que le programme doit s'arrêter ?
    85 - Pourquoi terminer le programme par un `dead: j dead` ?
     79
     80
     81 Questions::
     82
     83 - Dans quel fichier se trouve la description de l'espace d'adressage du MIPS ?
     84{{{#!protected
     85''
     86C'est dans le fichier kernel.ld
     87''
     88}}}
     89 - Dans quel fichier se trouve le code de boot et pourquoi l'avoir nommé ainsi ? (la réponse est dans le fichier)
     90{{{#!protected
     91''
     92Le code de boot est dans le fichier `hcpu.S`. Il a a été nommé ainsi parce que c'est du code qui dépend du
     93hardware et qu'il concerne le cpu.
     94''
     95}}}
     96 - A quelle adresse démarre le MIPS ? Où peut-on le vérifier ?
     97{{{#!protected
     98''
     99L'adresse de démarrage est `0xBFC00000`. On peut le vérifier dans le fichier `kernel.ld`. Il y a une définition des
     100régions mémoire avec une région commençant à cette adresse et c'est dans cette région que l'on met le code de boot.
     101''
     102}}}
     103 - Que produit le compilateur C quand on utilise l'option -c ?
     104{{{#!protected
     105
     106}}}
     107 - Que fait l'éditeur de liens ?
     108{{{#!protected
     109
     110}}}
     111 - De quels fichiers a besoin l'éditeur de liens pour fonctionner ?
     112{{{#!protected
     113
     114}}}
     115 - Dans quelle section se trouve le code de boot pour le compilateur ?
     116{{{#!protected
     117
     118}}}
     119 - Dans quelle section se trouve le message hello pour le compilateur ?
     120{{{#!protected
     121
     122}}}
     123 - Dans quelle section se trouve le code de boot dans le code exécutable ?
     124{{{#!protected
     125
     126}}}
     127 - Dans quelle région de la mémoire le code de boot est placé ?
     128{{{#!protected
     129
     130}}}
     131 - Comment connaît-on l'adresse du registre de sortie du contrôleur de terminal TTY ?
     132{{{#!protected
     133
     134}}}
     135 - Comment sait-on que le message est fini et que le programme doit s'arrêter ?
     136{{{#!protected
     137
     138}}}
     139 - Pourquoi terminer le programme par un `dead: j dead` ?
     140{{{#!protected
     141
     142}}}
    86143
    87144
     
    90147}}}
    91148= [=#kinit_asm 2. Saut dans le code du noyau en assembleur]
    92 
    93 
    94 
    95 == Objectif de l'étape
    96 
    97 
    98 - Affichage d'un message depuis le code du noyau toujours en assembleur
    99149
    100150