J'essaye d'écrire un appel système simple sur XV6 (documentation disponible here et Github here) afin de comprendre comment ils sont implémentés. Je l'ai utilisé ces étapesEssayer de comprendre les appels système UNIX sur XV6
- En
syscall.c
, a déclaréextern int sys_hello(void)
et ajouté[SYS_hello] sys_hello
dansstatic int (*syscalls[])(void)
tableau - Dans
syscall.h
, définiSYS_hello
comme numéro d'appel 22 - En
user.h
, a déclaré le prototype de fonctionint hello (void);
- Dans
usys.S
, ajoutéSYSCALL(hello)
à la macro Dans
sysproc.c
, a ajouté la fonctionsys_hello(void)
au fondint sys_hello(void) { cprintf ("Hello World System Call\n"); return 0; }
Créé
hello.c
qui appelle simplement l'appel systèmehello()
- Ajouté
hello.c
auMakefile
et a couru le code
Il a fonctionné comme prévu. Maintenant, ma question est qu'il semble que le tableau dans syscall.c correspond aux index des commandes avec les numéros d'appel système dans le fichier syscall.h Cependant, si je déplace la position hello à la deuxième place dans le syscall.c et laissez le numéro de commande système dans syscall.h rester 22 la commande système fonctionne comme avant. Où, je m'attendais à ce que ça casse. Pouvez-vous m'aider à comprendre comment le tableau syscall.c mappe (si c'est même le bon mot) le numéro d'appel système syscall.h?
Je suis assez nouveau à XV6 et C alors s'il vous plaît ne vous fâchez pas si cette question semble idiote, j'essaie seulement d'apprendre.
Voici le lien Github à ma fourche du dépôt XV6 si cela aide: github.com/AdityaSingh/XV6