Menu
Coddy logo textTech

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

Come funziona una syscall:

  1. Inserisci un numero di syscall in rax (dice 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:

Pensa a una chiamata di sistema come a una visita a un ufficio governativo:

PassaggioAnalogiaIn assembly
1Decidi di quale servizio hai bisognoScegli il numero della chiamata di sistema (inseriscilo in rax)
2Compila i moduliInserisci gli argomenti nei registri
3Invia la richiestaEsegui syscall
4Il governo la elaboraIl kernel del sistema operativo esegue il lavoro
5Ricevi il risultatoIl programma continua

Chiamate di sistema che imparerai in questo corso:

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

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