Changes between Version 15 and Version 16 of Archi-1-TP9
- Timestamp:
- Nov 15, 2020, 6:51:20 PM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP9
v15 v16 5 5 }}} 6 6 7 = Préambule8 9 7 Si 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]. 10 8 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 12 La 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]:: \\ 14 15 Nous commençons par un petit programme de quelques lignes en assembleur, placé entièrement dans la région mémoire 15 16 du boot, qui réalise l'affichage du message "Hello World". C'est un tout tout petit programme, mais pour obtenir … … 17 18 pour l'exécuter vous devrez exécuter le simulateur du prototype. C'est simple, mais c'est nouveau pour 18 19 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]:: \\ 21 28 Dans le deuxième programme, nous restons en assembleur, mais nous avons deux fichiers source : (1) le fichier contenant 22 29 le code de boot et (2) le fichier contenant le code du noyau. Ici, le code du noyau c'est juste une fonction `kinit()`. 23 30 Cette étape permet de voir comment saute d'un fichier à l'autre. Il utilise aussi une version plus complète du fichier 24 31 `ldscript` du kernel. 25 26 [#kinit_c 3. kinit_c]:: 32 \\\\ 33 **Objectifs** 34 - S 35 36 [#kinit_c 3. kinit_c]:: \\ 27 37 Dans ce troisième programme, nous faisons la même chose que pour le deuxième mais `kinit()` est désormais écrit en 28 38 langage C. Cela change peut de chose, sauf une chose importante `kinit()` est une fonction et donc il faut absolument 29 39 une pile d'exécution. 30 31 [#nttys 4. nttys]:: 40 \\\\ 41 **Objectifs** 42 - S 43 44 [#nttys 4. nttys]:: \\ 32 45 Le prototype de SoC que nous utilisons pour les TP est configurable. Il est possible par exemple de choisir le nombre 33 46 terminaux texte (TTY). Par défaut, il y en a un mais, nous pouvons en avoir jusqu'à 4. Nous allons modifier le code du 34 47 noyau pour s'adapter à cette variabilité. 48 \\\\ 49 **Objectifs** 50 - S 35 51 36 52 [#driver 5. driver]:: … … 61 77 62 78 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 '' 86 C'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 '' 92 Le 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 93 hardware 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 '' 99 L'adresse de démarrage est `0xBFC00000`. On peut le vérifier dans le fichier `kernel.ld`. Il y a une définition des 100 ré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 }}} 86 143 87 144 … … 90 147 }}} 91 148 = [=#kinit_asm 2. Saut dans le code du noyau en assembleur] 92 93 94 95 == Objectif de l'étape96 97 98 - Affichage d'un message depuis le code du noyau toujours en assembleur99 149 100 150