--- titre: Noyau et Systèmes d'exploitation [1] description: Noyau et Systèmes d'exploitation [1] tags: NSE1, jerome.tchan author: Jérôme Tchan --- # Noyau et Systèmes d'exploitation [1] ## Syscalls API exposée par le kernel `man 2 syscall` Différents moyens de faire des syscalls en x86: - `int 80` (méthode historique): lent, /iret - `syscall` (AMD): /sysret - `sysenter` (Intel): /sysexit MSR: machine specific register Problème: **comment appeler le syscall rapide quand c'est possible (syscall sur AMD, sysenter sur Intel)?** Solution: **VDSO** (virtual dynamic shared object) Dans chaque process, il y a une zone mémoire VDSO mappée en read only, avec dedans une fonction "vsyscall": au démarrage du programme, la détection est faite et la bonne version est compilée et exposée dans la zone read-only Pour accélérer les appels de syscalls courants (= gettime), une autre zone read-only (read-write pour le kernel) est exposée dans le programme et le kernel va écrire de manière périodique dedans la date pour que le programme n'ait pas à faire un syscall à chaque fois qu'il veut savoir l'heure Il n'y a plus ce problème de syscall en x64: on utilise `syscall` dans tous les cas (si on fait tourner un binaire x86 sur un PC x64, on revient sur le mécanisme VDSO)