Qu'est-ce qu'un Syscall ?
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 31 sur 45.
Vous avez écrit des instructions d’assembleur comme mov et lea. Ces instructions s’exécutent directement sur le processeur. Mais que faire si vous devez effectuer une tâche que le processeur ne peut pas accomplir seul, comme afficher quelque chose à l’écran, lire au clavier ou quitter un programme ?
Pour ces tâches, vous avez besoin du système d’exploitation (Linux, dans ce cours).
Qu’est-ce qu’un syscall ?
Un syscall (appel système) est une demande de votre programme au système d’exploitation. C’est ainsi que vous demandez au système d’exploitation de faire quelque chose pour vous.
Pourquoi vous avez besoin d’appels système :
| Tâche | Le CPU peut-il le faire seul ? | Appel système nécessaire ? |
|---|---|---|
| Ajouter deux nombres | Oui | Non |
| Déplacer des données entre les registres | Oui | Non |
| Afficher du texte à l’écran | Non | Oui |
| Lire les entrées du clavier | Non | Oui |
| Quitter un programme | Non | Oui |
| Ouvrir un fichier | Non | Oui |
Comment fonctionne un syscall :
- Vous placez un numéro de syscall dans
rax(indique au système d’exploitation ce que vous voulez) - Vous placez les arguments dans d’autres registres (
rdi,rsi,rdx, etc.) - Vous exécutez l’instruction
syscall
- Le processeur passe au noyau du système d’exploitation
- Le système d’exploitation exécute la requête
- Le système d’exploitation rend le contrôle à votre programme
Analogie :
Imagine qu’un syscall soit comme appeler un service gouvernemental :
| Étape | Analogie | En assembleur |
|---|---|---|
| 1 | Décider du service dont vous avez besoin | Choisir le numéro du syscall (le placer dans rax) |
| 2 | Remplir les formulaires | Placer les arguments dans les registres |
| 3 | Soumettre la demande | Exécuter syscall |
| 4 | Le gouvernement la traite | Le noyau de l’OS effectue le travail |
| 5 | Récupérer le résultat | Le programme continue |
Appels système que vous apprendrez dans ce cours :
| Appel système | Numéro | Ce qu’il fait | Chapitre |
|---|---|---|---|
exit | 60 | Met fin au programme | Chapitre 4 |
write | 1 | Affiche du texte à l’écran | Chapitre 5 |
Le syscall le plus important pour l’instant : <strong>exit</strong>
Sans exit, ton programme continuerait à s’exécuter indéfiniment ou planterait. Chaque programme que tu écris doit se terminer par un syscall exit.
mov rax, 60 ; syscall number for exit
mov rdi, 0 ; exit code (0 = success)
syscall ; ask the OS to exitEssayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1La Machine
Qu'est-ce qu'un CPULa mémoireRegistres vs MémoireFonctionnement des instructionsLe modèle à deux fichiersL'architecture x86-64Entraînez-vous par vous-même : Playground Assembly