Changes between Version 162 and Version 163 of Archi-1-TP9
- Timestamp:
- Nov 21, 2021, 4:14:27 PM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP9
v162 v163 460 460 461 461 compil: 462 $(CC) -o hcpu.o $(CFLAGS) hcpu .S462 $(CC) -o hcpu.o $(CFLAGS) hcpua.S 463 463 @$(OD) -D hcpu.o > hcpu.o.s 464 464 $(LD) -o kernel.x -T kernel.ld hcpu.o … … 539 539 {{{ 540 540 1_hello_boot 541 ├── hcpu .S: code dépendant du cpu matériel en assembleur541 ├── hcpua.S : code dépendant du cpu matériel en assembleur 542 542 ├── kernel.ld : ldscript décrivant l'espace d'adressage pour l'éditeur de lien 543 543 └── Makefile : description des actions possibles sur le code : compilation, exécution, nettoyage, etc. … … 700 700 {{{ 701 701 2_init_asm/ 702 ├── hcpu .S: code dépendant du cpu matériel en assembleur702 ├── hcpua.S : code dépendant du cpu matériel en assembleur 703 703 ├── kernel.ld : ldscript décrivant l'espace d'adressage pour l'éditeur de lien 704 704 ├── kinit.S : fichier contenant le code de démarrage du noyau, ici c'est une routine kinit. … … 708 708 **Questions** 709 709 710 1. Regarder dans le fichier `hcpu .S`, dans quelle section est désormais le code de boot ?710 1. Regarder dans le fichier `hcpua.S`, dans quelle section est désormais le code de boot ? 711 711 {{{#!protected ------------------------------------------------------------------------------------ 712 712 ''''''''''''''' … … 721 721 ''''''''''''''' 722 722 - `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. 724 724 - 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`. 725 725 ''''''''''''''' … … 775 775 {{{ 776 776 3_init_c/ 777 ├── hcpu .S: code dépendant du cpu matériel en assembleur777 ├── hcpua.S : code dépendant du cpu matériel en assembleur 778 778 ├── kernel.ld : ldscript décrivant l'espace d'adressage pour l'éditeur de lien 779 779 ├── kinit.c : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit(). … … 787 787 ''''''''''''''' 788 788 - 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` 790 790 - `$29` ← `__kdata_end`, c'est-à-dire `0x80400000` 791 791 ''''''''''''''' … … 840 840 {{{ 841 841 4_nttys/ 842 ├── hcpu .S: code dépendant du cpu matériel en assembleur842 ├── hcpua.S : code dépendant du cpu matériel en assembleur 843 843 ├── kernel.ld : ldscript décrivant l'espace d'adressage pour l'éditeur de lien 844 844 ├── kinit.c : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit(). … … 937 937 ├── harch.h : API du code dépendant de l'architecture 938 938 ├── hcpu.h : prototype de la fonction clock() 939 ├── hcpu .S: code dépendant du cpu matériel en assembleur939 ├── hcpua.S : code dépendant du cpu matériel en assembleur 940 940 ├── kernel.ld : ldscript décrivant l'espace d'adressage pour l'éditeur de lien 941 941 ├── kinit.c : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit(). … … 951 951 ''''''''''''''' 952 952 }}} 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.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 `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. 957 957 * `.globl clock` permet de faire en sorte que la fonction soit visible par les autres fichiers C. 958 958 '''''''''''''''