O que é uma Syscall?
Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 31 de 45.
Você escreveu instruções assembly como mov e lea. Essas instruções são executadas diretamente na CPU. Mas e se você precisar fazer algo que a CPU não consegue fazer sozinha — como imprimir na tela, ler do teclado ou sair de um programa?
Para estas tarefas, você precisa do sistema operacional (Linux, neste curso).
O que é uma syscall?
Uma syscall (chamada de sistema) é uma requisição do seu programa para o sistema operacional. É como você solicita ao SO para fazer algo por você.
Por que você precisa de syscalls:
| Tarefa | A CPU pode fazer isso sozinha? | Precisa de syscall? |
|---|---|---|
| Somar dois números | Sim | Não |
| Mover dados entre registradores | Sim | Não |
| Imprimir texto na tela | Não | Sim |
| Ler entrada do teclado | Não | Sim |
| Sair de um programa | Não | Sim |
| Abrir um arquivo | Não | Sim |
Como funciona uma syscall:
- Você coloca um número de syscall em
rax(diz ao SO o que você quer) - Você coloca argumentos em outros registradores (
rdi,rsi,rdx, etc.) - Você executa a instrução
syscall
- A CPU entra no kernel do SO
- O SO realiza a requisição
- O SO devolve o controle para o seu programa
Analogia:
Pense em uma syscall como ligar para um órgão governamental:
| Passo | Analogia | Em assembly |
|---|---|---|
| 1 | Decida qual serviço você precisa | Escolha o número da syscall (coloque em rax) |
| 2 | Preencha os formulários | Coloque os argumentos nos registradores |
| 3 | Envie a solicitação | Execute syscall |
| 4 | O governo processa a solicitação | O kernel do SO faz o trabalho |
| 5 | Receba seu resultado de volta | O programa continua |
Syscalls que você aprenderá neste curso:
| Syscall | Número | O que faz | Capítulo |
|---|---|---|---|
exit | 60 | Encerra o programa | Capítulo 4 |
write | 1 | Imprime texto na tela | Capítulo 5 |
A syscall mais importante por enquanto: <strong>exit</strong>
Sem exit, seu programa continuaria rodando para sempre ou travaria. Todo programa que você escrever deve terminar com uma syscall exit.
mov rax, 60 ; número da syscall para sair
mov rdi, 0 ; código de saída (0 = sucesso)
syscall ; solicita ao SO para sairExperimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-64