Cos'è una chiamata di sistema?
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 31 di 45.
Hai scritto istruzioni assembly come mov e lea. Queste istruzioni vengono eseguite direttamente dalla CPU. Ma cosa succede se devi fare qualcosa che la CPU non può fare da sola, come stampare sullo schermo, leggere dalla tastiera o uscire da un programma?
Per queste attività, ti serve il sistema operativo (Linux, in questo corso).
Che cos'è una syscall?
Una syscall (chiamata di sistema) è una richiesta del tuo programma al sistema operativo. È così che chiedi al sistema operativo di fare qualcosa per te.
Perché hai bisogno delle syscall:
| Attività | La CPU può svolgerla da sola? | Serve una syscall? |
|---|---|---|
| Sommare due numeri | Sì | No |
| Spostare dati tra registri | Sì | No |
| Stampare testo sullo schermo | No | Sì |
| Leggere l'input della tastiera | No | Sì |
| Uscire da un programma | No | Sì |
| Aprire un file | No | Sì |
Come funziona una syscall:
- Inserisci un numero di syscall in
rax(indica al sistema operativo cosa vuoi) - Inserisci gli argomenti in altri registri (
rdi,rsi,rdx, ecc.) - Esegui l'istruzione
syscall
- La CPU salta nel kernel del sistema operativo
- Il sistema operativo esegue la richiesta
- Il sistema operativo restituisce il controllo al tuo programma
Analogia:
Immagina una syscall come una richiesta a un ufficio pubblico:
| Passaggio | Analogia | In assembly |
|---|---|---|
| 1 | Decidi quale servizio ti serve | Scegli il numero della syscall (inseriscilo in rax) |
| 2 | Compila i moduli | Inserisci gli argomenti nei registri |
| 3 | Invia la richiesta | Esegui syscall |
| 4 | L'amministrazione la elabora | Il kernel del sistema operativo svolge il lavoro |
| 5 | Ottieni il risultato | Il programma continua |
Chiamate di sistema che imparerai in questo corso:
| Chiamata di sistema | Numero | Cosa fa | Capitolo |
|---|---|---|---|
exit | 60 | Termina il programma | Capitolo 4 |
write | 1 | Stampa testo sullo schermo | Capitolo 5 |
La chiamata di sistema più importante per ora: exit
Senza exit, il tuo programma continuerebbe a funzionare per sempre o andrebbe in crash. Ogni programma che scrivi deve terminare con una chiamata di sistema exit.
mov rax, 60 ; numero di syscall per exit
mov rdi, 0 ; codice di uscita (0 = successo)
syscall ; chiede al sistema operativo di terminareProvalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita correttaEsercitati da solo: Playground Assembly