Changes between Version 41 and Version 42 of Archi-1-TP10
- Timestamp:
- Jan 3, 2021, 8:18:30 AM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP10
v41 v42 607 607 608 608 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. 610 610 611 611 … … 695 695 Le 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. 696 696 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éfin s dans un `.h` communaux 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.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é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. 698 698 699 699 … … 749 749 **Exercice** 750 750 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 754 757 755 758