Camada Zero · 16 · Syscalls & a Fronteira User/Kernel

Seu programa não toca o disco, a rede nem o hardware direto. Ele pede pro kernel, e esse pedido cruza uma fronteira que custa caro. Faz uma syscall aqui embaixo e vê o pedido atravessar. Depois lê o mesmo arquivo com e sem buffer e olha a contagem de syscalls disparar.
USER SPACE · sem privilégio seu programa read() / write() / open() fronteira · cada cruzada = 1 mode switch KERNEL SPACE · privilegiado kernel disco / rede hardware
0Syscalls feitas
0Mode switches
userModo atual da CPU
Clica em "fazer 1 syscall" e vê o pedido descer pro kernel, fazer o trabalho privilegiado e voltar. Cada ida e volta cruza a fronteira duas vezes.
user space kernel space fronteira (mode switch) o pedido
O hardware tem dois modos: user (sem privilégio) e kernel (privilegiado). Seu código roda em user mode e não pode falar com disco, rede ou a memória de outro processo direto. Pra isso ele faz uma syscall, que é o portão controlado pro kernel agir por ele. Cruzar essa fronteira custa: salva estado, troca de modo, valida, executa, volta. Ordens de grandeza acima de uma chamada de função comum.
ModoPodeCusto de cruzar
userCPU, memória própriamode switch por syscall
kernelI/O, hardware, tudo

Sem buffer: 1 syscall por byte

func semBuffer(f *os.File) {
    buf := make([]byte, 1)
    for {
        _, err := f.Read(buf) // 1 syscall por byte lido
        if err != nil { break }
    }
}

Com bufio: junta em poucas syscalls

func comBuffer(f *os.File) {
    r := bufio.NewReader(f) // lê em blocos de 4096
    for {
        _, err := r.ReadByte() // syscall só quando o buffer esvazia
        if err != nil { break }
    }
}

Syscall bloqueante no runtime Go

// A goroutine bloqueia no kernel, mas o runtime
// entrega o P (processador) a outra M (thread),
// então as outras goroutines seguem rodando.
n, err := conn.Read(buf) // não congela o programa inteiro

🧠 Desafio — Syscalls

Faz uma syscall e roda os dois modos de leitura aqui de cima antes de responder. As duas últimas são de reflexão: escreve a sua e só então revela o modelo.