Cos'è una chiamata di sistema?
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 31 di 45.
Hai scritto istruzioni in 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. È il modo in cui chiedi al sistema operativo di fare qualcosa per te.
Perché ti servono le chiamate di sistema:
| Attività | La CPU può farlo da sola? | Serve una chiamata di sistema? |
|---|---|---|
| Somma di due numeri | Sì | No |
| Spostare dati tra registri | Sì | No |
| Stampare testo sullo schermo | No | Sì |
| Leggere l'input da 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(dice 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:
Pensa a una chiamata di sistema come a una visita a un ufficio governativo:
| Passaggio | Analogia | In assembly |
|---|---|---|
| 1 | Decidi di quale servizio hai bisogno | Scegli il numero della chiamata di sistema (inseriscilo in rax) |
| 2 | Compila i moduli | Inserisci gli argomenti nei registri |
| 3 | Invia la richiesta | Esegui syscall |
| 4 | Il governo la elabora | Il kernel del sistema operativo esegue il lavoro |
| 5 | Ricevi 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 il testo sullo schermo | Capitolo 5 |
La syscall più importante per ora: <strong>exit</strong>
Senza exit, il tuo programma continuerebbe a essere eseguito per sempre o andrebbe in crash. Ogni programma che scrivi deve terminare con una syscall exit.
mov rax, 60 ; numero di syscall per l'uscita
mov rdi, 0 ; codice di uscita (0 = successo)
syscall ; chiede al sistema operativo di terminare il programmaProvalo 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