Changes between Version 28 and Version 29 of Archi-1-TD9


Ignore:
Timestamp:
Nov 26, 2024, 3:40:43 PM (3 months ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TD9

    v28 v29  
    194194''
    195195* 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.
    197197* 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.
    198198{{{#!asm
     
    280280
    281281
    282 = 3. Programmation en C
     282= 4. Programmation en C
    283283
    284284
     
    365365
    366366
    367 = 4. Usage de Make (optionnel)
     367= 6. Usage de Make (optionnel)
    368368
    369369
     
    417417    -rm *.o* *.x* *~ *.log.* proc?_term? 2> /dev/null || true
    418418}}}
    419 4. Où est utilisé `CFLAGS` ? Que fait `-DNTTYS=$(NTTY)` et pourquoi est-ce utile ici ? (C9 annexe S8)
     4195. Où est utilisé `CFLAGS` ? Que fait `-DNTTYS=$(NTTY)` et pourquoi est-ce utile ici ? (C9 annexe S8)
    420420{{{#!protected ------------------------------------------------------------------------------------
    421421''