---
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)