Changes between Version 41 and Version 42 of Archi-1-TP10


Ignore:
Timestamp:
Jan 3, 2021, 8:18:30 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP10

    v41 v42  
    607607
    608608
    609 * Ajout de la fonction `int cpuid(void)` qui lit le registre `$15` du coprocesseur système.\\Vous pouvez vous inspirez fortement de la fonction `clock()`.\\Ecrivez un programme de test.
     609* Le numéro du processeur est les 12 bits de poids faible du registre $15 du coprocesseur système (à côté des registres `c0_epc`, `c0_sr`, etc.). Ajoutez de la fonction `int cpuid(void)` qui lit le registre `$15` du coprocesseur système et qui rend un entier contenant juste les 12 bits de poids faible.\\Vous pouvez vous inspirez fortement de la fonction `clock()`. Comme il n'y a qu'un seul processeur dans cette architecture, `cpuid` rend `0`.\\Ecrivez un programme de test.
    610610
    611611
     
    695695Le programme utilisateur doit absolument s'exécuter en mode user et il doit passer par des appels système pour accéder aux services du noyau. Les services, ici, sont limités (l'accès au TTY, exit et clock), il n'empêche que pour gérer ces appels, il faut l'analyseur des causes d'appels à l'entrée du noyau et un gestionnaire de `syscall`. Il faut aussi le gestionnaire d'exceptions, parce que s'il y a une erreur de programmation, le noyau doit afficher quelque chose pour aider le programmeur.
    696696
    697 Le passage de l'application au noyau par le biais de l'instruction `syscall` impose que les numéros de services soient identiques pour le noyau et pour l'application. Ces numéros de service (comme `SYSCALL_TTY_WRITE`, `SYSCALL_EXIT` sont défins dans un `.h` commun aux noyau et à l'application. Ce fichier est mis dans un répertoire à part nommé `common`. Il n'y a qu'un seul fichier ici, mais dans un système plus élaborés il y en a d'autres.
     697Le passage de l'application au noyau par le biais de l'instruction `syscall` impose que les numéros de services soient identiques pour le noyau et pour l'application. Ces numéros de service (comme `SYSCALL_TTY_WRITE`, `SYSCALL_EXIT` sont définis dans un `.h` communs aux noyau et à l'application. Ce fichier est mis dans un répertoire à part nommé `common`. Il n'y a qu'un seul fichier ici, mais dans un système plus élaborés il y en a d'autres.
    698698
    699699
     
    749749**Exercice**
    750750
    751 - Vous allez ajouter un appel système qui rend le numéro du processeur.
    752 
    753 
     751- Vous allez ajouter un appel système nommé `SYSCALL_CPUID` qui rend le numéro du processeur. Nous allons lui attribuer le numéro 4 (notez que ces numéros de services n'ont rien à voir avec les numéros utilisés pour le simulateur MARS). Pour ajouter un appel système, vous devez modifier les fichiers :
     752  - `common/syscalls.h` : pour ajouter le numéro de service
     753  - `kernel/ksyscall.c` : pour modifier le vecteur de syscall
     754  - `kernel/hcpu.S`     : pour ajouter la fonction `int cpuid(void)` (la même que celle demandé en **B.1**)
     755  - `kernel/hcpu.h`     : pour déclarer le prototype de `int cpuid(void)` (comme pour **B.1**)
     756 
    754757
    755758