Menu
CoddyTech

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 numeriSìNo
Spostare dati tra registriSìNo
Stampare testo sullo schermoNoSì
Leggere l'input della tastieraNoSì
Uscire da un programmaNoSì
Aprire un fileNoSì

Come funziona una syscall:

  1. Inserisci un numero di syscall in rax (indica al sistema operativo cosa vuoi)
  2. Inserisci gli argomenti in altri registri (rdi, rsi, rdx, ecc.)
  3. Esegui l'istruzione syscall
  1. La CPU salta nel kernel del sistema operativo
  2. Il sistema operativo esegue la richiesta
  3. Il sistema operativo restituisce il controllo al tuo programma

Analogia:

Immagina una syscall come una richiesta a un ufficio pubblico:

PassaggioAnalogiaIn assembly
1Decidi quale servizio ti serveScegli il numero della syscall (inseriscilo in rax)
2Compila i moduliInserisci gli argomenti nei registri
3Invia la richiestaEsegui syscall
4L'amministrazione la elaboraIl kernel del sistema operativo svolge il lavoro
5Ottieni il risultatoIl programma continua

Chiamate di sistema che imparerai in questo corso:

Chiamata di sistemaNumeroCosa faCapitolo
exit60Termina il programmaCapitolo 4
write1Stampa testo sullo schermoCapitolo 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 terminare

Provalo tu

Questa lezione non include una sfida di codice.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly