O que é uma Syscall?
Parte da seção Fundamentos do Journey de Assembly da Coddy. Lição 31 de 45.
Você escreveu instruções de 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 encerrar um programa?
Para estas tarefas, você precisa do sistema operacional (Linux, neste curso).
O que é uma chamada de sistema?
Uma chamada de sistema (system call) é uma solicitação do seu programa ao sistema operacional. É assim que você pede ao SO para fazer algo por você.
Por que você precisa de chamadas de sistema:
| Tarefa | A CPU consegue fazer isso sozinha? | Precisa de chamada de sistema? |
|---|---|---|
| Somar dois números | Sim | Não |
| Mover dados entre registradores | Sim | Não |
| Imprimir texto na tela | Não | Sim |
| Ler a entrada do teclado | Não | Sim |
| Sair de um programa | Não | Sim |
| Abrir um arquivo | Não | Sim |
Como uma chamada de sistema funciona:
- Você coloca um número da chamada de sistema em
rax(informa ao SO o que você quer) - Você coloca os argumentos em outros registradores (
rdi,rsi,rdx, etc.) - Você executa a instrução
syscall
- A CPU salta para o kernel do sistema operacional
- O sistema operacional realiza a solicitação
- O sistema operacional devolve o controle ao seu programa
Analogia:
Pense em uma chamada de sistema como se você estivesse entrando em contato com um órgão do governo:
| Etapa | Analogia | Em assembly |
|---|---|---|
| 1 | Decida de qual serviço você precisa | Escolha o número da chamada de sistema (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 realiza o trabalho |
| 5 | Receba o resultado | O programa continua |
Chamadas de sistema que você aprenderá neste curso:
| Chamada de sistema | 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 chamada de sistema mais importante por enquanto: exit
Sem exit, seu programa continuaria executando para sempre ou travaria. Todo programa que você escrever deve terminar com uma chamada de sistema exit.
mov rax, 60 ; número da syscall para exit
mov rdi, 0 ; código de saída (0 = sucesso)
syscall ; solicita ao sistema operacional que encerre o programaExperimente 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-64Pratique por conta própria: Playground de Assembly