Changes between Version 28 and Version 29 of Archi-1-TD9
- Timestamp:
- Nov 26, 2024, 3:40:43 PM (3 months ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TD9
v28 v29 194 194 '' 195 195 * On parle ici du pointeur de pile pour le `kernel`, on doit mettre le pointeur de pile dans la section des données du kernel. Ici, il n'y en a qu'une et c'est `.kdata`. La pile est mise en haut de cette section aux adresses les plus grandes. Les adresses du bas de la section sont occupées par les données globales du kernel. 196 * La pile va être initialisée juste à la première adresse au-delà de la zone kdata donc\\`__kdata_end = 0x80020000` + `0x003E0000` = `0x80400000`\\Oui, on initialise le pointeur de pile a une adresse qui est en dehors du segment! Ce n'est pas un problème parce que le compilateur C n'écrira jamais à cette adresse, car elle n'est pas dans le contexte de la fonction C . La première chose qu'il fera, c'est décrémenter le pointeur de pile pour allouer le contexte de la fonction.196 * La pile va être initialisée juste à la première adresse au-delà de la zone kdata donc\\`__kdata_end = 0x80020000` + `0x003E0000` = `0x80400000`\\Oui, on initialise le pointeur de pile a une adresse qui est en dehors du segment! Ce n'est pas un problème parce que le compilateur C n'écrira jamais à cette adresse, car elle n'est pas dans le contexte de la fonction C et que la fonction appelée ici n'a pas d'argument `void kinit(void)`. La première chose que la fonction `kinit()` fait, c'est décrémenter le pointeur de pile pour allouer son contexte. Si la fonction `kinit()` avait eu des arguments, alors il aurait fallut prévoir de l'espace dans la pile pour ces arguments. 197 197 * En effet, la première chose que fait une fonction, c'est décrémenter le pointeur de pile pour écrire `$31`, etc. Il faut donc que le pointeur ait été défini avant d'entrer dans la fonction. 198 198 {{{#!asm … … 280 280 281 281 282 = 3. Programmation en C282 = 4. Programmation en C 283 283 284 284 … … 365 365 366 366 367 = 4. Usage de Make (optionnel)367 = 6. Usage de Make (optionnel) 368 368 369 369 … … 417 417 -rm *.o* *.x* *~ *.log.* proc?_term? 2> /dev/null || true 418 418 }}} 419 4. Où est utilisé `CFLAGS` ? Que fait `-DNTTYS=$(NTTY)` et pourquoi est-ce utile ici ? (C9 annexe S8)419 5. Où est utilisé `CFLAGS` ? Que fait `-DNTTYS=$(NTTY)` et pourquoi est-ce utile ici ? (C9 annexe S8) 420 420 {{{#!protected ------------------------------------------------------------------------------------ 421 421 ''