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 pela 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 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 uma chamada de sistema? |
|---|---|---|
| Adicionar 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 funciona uma syscall:
- Você coloca um número da syscall em
rax(informa ao sistema operacional o que você quer) - Você coloca 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 executa a solicitação
- O sistema operacional devolve o controle ao seu programa
Analogia:
Pense em uma chamada de sistema como ligar para um órgão público:
| 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 órgão público processa a solicitação | O kernel do sistema operacional realiza o trabalho |
| 5 | Receba o resultado de volta | O programa continua |
Syscalls que você aprenderá neste curso:
| Syscall | Número | O que ele faz | Capítulo |
|---|---|---|---|
exit | 60 | Encerra o programa | Capítulo 4 |
write | 1 | Exibe texto na tela | Capítulo 5 |
A syscall mais importante por enquanto: <strong>exit</strong>
Sem exit, seu programa continuaria sendo executado para sempre ou travaria. Todo programa que você escrever deve terminar com uma syscall exit.
mov rax, 60 ; syscall number for exit
mov rdi, 0 ; exit code (0 = success)
syscall ; ask the OS to exitExperimente 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