Changes between Version 162 and Version 163 of Archi-1-TP9


Ignore:
Timestamp:
Nov 21, 2021, 4:14:27 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v162 v163  
    460460
    461461compil:
    462     $(CC) -o hcpu.o $(CFLAGS) hcpu.S
     462    $(CC) -o hcpu.o $(CFLAGS) hcpua.S
    463463    @$(OD) -D hcpu.o > hcpu.o.s
    464464    $(LD) -o kernel.x -T kernel.ld hcpu.o
     
    539539{{{
    5405401_hello_boot
    541 ├── hcpu.S       : code dépendant du cpu matériel en assembleur
     541├── hcpua.S      : code dépendant du cpu matériel en assembleur
    542542├── kernel.ld    : ldscript décrivant l'espace d'adressage pour l'éditeur de lien
    543543└── Makefile     : description des actions possibles sur le code : compilation, exécution, nettoyage, etc.
     
    700700{{{
    7017012_init_asm/
    702 ├── hcpu.S       : code dépendant du cpu matériel en assembleur
     702├── hcpua.S      : code dépendant du cpu matériel en assembleur
    703703├── kernel.ld    : ldscript décrivant l'espace d'adressage pour l'éditeur de lien
    704704├── kinit.S      : fichier contenant le code de démarrage du noyau, ici c'est une routine kinit.
     
    708708**Questions**
    709709
    710 1. Regarder dans le fichier `hcpu.S`, dans quelle section est désormais le code de boot ?
     7101. Regarder dans le fichier `hcpua.S`, dans quelle section est désormais le code de boot ?
    711711{{{#!protected ------------------------------------------------------------------------------------
    712712'''''''''''''''
     
    721721'''''''''''''''
    722722- `kinit` est défini dans la `kinit.S`.
    723 - `hcpu.S` ne connait pas cette adresse, mais grâce au `.globl kinit`, l'éditeur de lien saura compléter `hcpu.o`, dans l'exécutable.
     723- `hcpua.S` ne connait pas cette adresse, mais grâce au `.globl kinit`, l'éditeur de lien saura compléter `hcpu.o`, dans l'exécutable.
    724724- Le code de boot est en `0xBFC00000`, `kinit` est en `0x80000000`, ces deux adresses ne partagent pas les 4 bits de poids fort, c'est trop loin pour un simple `j`.
    725725'''''''''''''''
     
    775775{{{
    7767763_init_c/
    777 ├── hcpu.S       : code dépendant du cpu matériel en assembleur
     777├── hcpua.S      : code dépendant du cpu matériel en assembleur
    778778├── kernel.ld    : ldscript décrivant l'espace d'adressage pour l'éditeur de lien
    779779├── kinit.c      : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit().
     
    787787'''''''''''''''
    788788- Il faut initialiser le pointeur avant d'appeler `kinit()`
    789 - C'est dans le fichier `hcpu.S`
     789- C'est dans le fichier `hcpua.S`
    790790- `$29` ← `__kdata_end`, c'est-à-dire `0x80400000`
    791791'''''''''''''''
     
    840840{{{
    8418414_nttys/
    842 ├── hcpu.S       : code dépendant du cpu matériel en assembleur
     842├── hcpua.S      : code dépendant du cpu matériel en assembleur
    843843├── kernel.ld    : ldscript décrivant l'espace d'adressage pour l'éditeur de lien
    844844├── kinit.c      : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit().
     
    937937├── harch.h      : API du code dépendant de l'architecture
    938938├── hcpu.h       : prototype de la fonction clock()
    939 ├── hcpu.S       : code dépendant du cpu matériel en assembleur
     939├── hcpua.S      : code dépendant du cpu matériel en assembleur
    940940├── kernel.ld    : ldscript décrivant l'espace d'adressage pour l'éditeur de lien
    941941├── kinit.c      : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit().
     
    951951'''''''''''''''
    952952}}}
    953 1. Le MIPS dispose d'un compteur de cycles internes. Ce compteur est dans un banc de registres accessibles uniquement quand le processeur fonctionne en mode `kernel`. Nous verrons ça au prochain cours, mais en attendant nous allons quand même exploiter ce compteur. Pourquoi avoir mis la fonction dans `hcpu.S` ? Rappeler, pourquoi avoir mis `.globl clock`
    954 {{{#!protected ------------------------------------------------------------------------------------
    955 '''''''''''''''
    956 * La fonction qui lit ce registre (`$9` qui ne désigne pas un registre GPR du processeur !) est nécessairement en assembleur car elle utilise des instructions particulières et dépend du matériel, elle est donc mise dans hcpu.S.
     9531. Le MIPS dispose d'un compteur de cycles internes. Ce compteur est dans un banc de registres accessibles uniquement quand le processeur fonctionne en mode `kernel`. Nous verrons ça au prochain cours, mais en attendant nous allons quand même exploiter ce compteur. Pourquoi avoir mis la fonction dans `hcpua.S` ? Rappeler, pourquoi avoir mis `.globl clock`
     954{{{#!protected ------------------------------------------------------------------------------------
     955'''''''''''''''
     956* La fonction qui lit ce registre (`$9` qui ne désigne pas un registre GPR du processeur !) est nécessairement en assembleur car elle utilise des instructions particulières et dépend du matériel, elle est donc mise dans hcpua.S.
    957957* `.globl clock` permet de faire en sorte que la fonction soit visible par les autres fichiers C.
    958958'''''''''''''''