Neste tutorial do curso de Programação de Sistemas Operacionais, vamos explorar a fundo o que são as chamadas de sistema (system calls), para que servem, onde são utilizadas e analisar exemplos práticos dessas funções em ambientes Unix/Linux e Windows.
O que são Chamadas de Sistema (System Calls)?
Quando analisamos os Sistemas Operacionais sob o ponto de vista da programação, aprendemos que uma de suas principais missões é fornecer abstrações robustas. O SO esconde a complexidade do hardware bruto para que o desenvolvedor não precise gerenciar diretamente trilhas de disco, tensões elétricas ou barramentos físicos, além de gerenciar com equidade os recursos computacionais como memória, processamento e periféricos.
As chamadas de sistema (ou system calls) funcionam como a porta de entrada oficial para essas abstrações. Elas são funções especiais disponibilizadas pelo núcleo (kernel) do sistema operacional, permitindo que um programa em execução na camada de usuário solicite serviços que exigem privilégios elevados.
Para proteger o computador de códigos maliciosos ou falhas críticas, os processadores modernos operam em pelo menos dois modos:
- Modo Usuário (User Mode): Onde seus programas comuns (navegador, jogos, editores de código) rodam. O acesso ao hardware é restrito.
- Modo Kernel (Kernel Mode): Onde o núcleo do SO roda com acesso total e irrestrito a toda a memória e hardware.
Geralmente, dividimos as principais chamadas de sistema em cinco grandes categorias fundamentais:
- Controle de Processos: Criação, término, aborto, leitura e definição de atributos de processos (ex: alocação de memória para execução).
- Gerenciamento de Arquivos: Criar, deletar, abrir, fechar, ler e escrever em arquivos digitais.
- Gerenciamento de Dispositivos (Hardware): Solicitar e liberar periféricos, ler/escrever em buffers de hardware.
- Manutenção de Informações: Obter ou definir a hora do sistema, dados de data, metadados do SO e estatísticas de uso do hardware.
- Comunicação e Segurança: Criação de conexões de rede (sockets), transferência de status e gerenciamento de permissões de acesso.
Chamadas de Sistema (System Calls) no ecossistema Unix / Linux
Os sistemas operacionais baseados em Unix (como as distribuições Linux e o macOS) seguem de maneira muito fiel os padrões POSIX. Nele, as chamadas de sistema são invocadas diretamente através de funções nativas escritas em linguagem C.
Abaixo organizamos uma tabela abrangente com as principais system calls do ecossistema Unix. Não se preocupe em memorizar a sintaxe ou a lista de argumentos agora; o importante neste estágio do curso é compreender quais ferramentas e ações você tem o poder de solicitar ao núcleo do sistema operacional.
| System Call (Unix) | Descrição Técnica da Função |
|---|---|
| pid = fork() | Clona o processo atual criando um processo filho idêntico ao processo pai. |
| waitpid(pid, &status, opts) | Suspende a execução do processo pai até que o processo filho especificado termine. |
| execv(name, argv, envp) | Substitui a imagem do processo atual por um novo programa executável. |
| exit(status) | Finaliza imediatamente a execução do processo, retornando um código numérico de encerramento. |
| fd = open(file, flags) | Estabelece uma conexão de acesso a um arquivo físico (leitura, escrita ou ambos). |
| close(fd) | Fecha o descritor de arquivo (file descriptor) liberando os recursos associados. |
| read(fd, buffer, nbytes) | Copia bytes de um arquivo/dispositivo aberto para uma região da memória (buffer). |
| write(fd, buffer, nbytes) | Grava os dados contidos em um buffer de memória diretamente em um arquivo ou dispositivo. |
| lseek(fd, offset, whence) | Move o ponteiro de posição de leitura/escrita dentro de um arquivo aberto. |
| stat(name, &buf) | Retorna metadados completos sobre um arquivo (tamanho, permissões, data de modificação). |
| kill(pid, signal) | Envia um sinal específico (como interrupção ou encerramento forçado) para um processo ativo. |
| time(&seconds) | Retorna o tempo decorrido em segundos desde o marco zero da computação Unix (1º de Janeiro de 1970). |
| chmod(name, mode) | Modifica as permissões de acesso (leitura, gravação, execução) de um arquivo ou pasta. |
| mkdir(name, mode) | Cria um novo diretório vazio no sistema de arquivos. |
| rmdir(name) | Exclui um diretório do sistema (desde que este esteja completamente vazio). |
| mount(spec, dir, flags) | Anexa um sistema de arquivos externo (ex: pendrive, HD externo) à árvore de diretórios principal. |
| umount(spec) | Desconecta de forma segura um sistema de arquivos previamente montado. |
| link(name1, name2) | Cria um link rígido (hard link), fazendo com que um arquivo ganhe um novo atalho referencial. |
| unlink(name) | Remove um link para um arquivo. Se for o último link, o arquivo é efetivamente excluído do disco. |
Chamadas de Sistema (System Calls) no Windows (Win32 API)
Diferente do Unix, o sistema operacional Microsoft Windows não incentiva a chamada direta de suas system calls nativas do kernel. Em vez disso, a Microsoft fornece uma camada de abstração muito bem documentada conhecida como Win32 API (ou APIs equivalentes de 64 bits).
Sob a perspectiva prática do desenvolvimento, as funções da Win32 API atuam como a interface estável para o programador, encapsulando as chamadas internas do subsistema do Windows (muitas vezes mapeadas dentro da famosa biblioteca dinâmica ntdll.dll).
Para fins de estudo comparativo de arquitetura de computadores, confira abaixo quais são as principais funções equivalentes do ecossistema Windows em relação ao padrão Unix:
| Função Win32 API (Windows) | Equivalente Unix / Linux | Objetivo Geral |
|---|---|---|
| CreateProcess | fork + execv | Cria um processo totalmente novo e o executa. |
| WaitForSingleObject | waitpid | Faz a thread atual aguardar a sinalização de término de outro recurso. |
| ExitProcess | exit | Encerra o processo de execução atual e todas as suas threads. |
| CreateFile | open | Cria ou abre um arquivo, diretório ou canal de comunicação I/O. |
| ReadFile | read | Lê bytes a partir de um arquivo em execução. |
| WriteFile | write | Escreve bytes em um descritor de arquivo aberto. |
| CloseHandle | close | Fecha um ponteiro manipulador (handle) de um objeto do kernel aberto. |
| SetFilePointer | lseek | Altera a posição do ponteiro interno de dados de um arquivo. |
| GetFileAttributesEx | stat | Coleta metadados detalhados de atributos de arquivos e pastas. |
| CreateDirectory | mkdir | Instancia um novo diretório no disco rígido. |
| RemoveDirectory | rmdir | Exclui de forma definitiva um diretório mapeado existente. |
| SetCurrentDirectory | chdir | Altera o contexto da pasta ativa de trabalho do processo. |
| GetLocalTime | time | Obtém o horário e data locais do hardware atualizados. |
| DeleteFile | unlink | Exclui um arquivo físico do sistema de arquivos. |
Particularidades de Design de Arquitetura
Devido à diferença fundamental na filosofia de design e de desenvolvimento histórico desses ecossistemas, existem algumas system calls tradicionais do Unix que **não possuem um equivalente direto na Win32 API do Windows**:
kill: O Windows não possui a arquitetura exata de envio de sinais interprocessos do Unix. Para fechar um processo no Windows, usa-se a abordagem drástica da funçãoTerminateProcess.chmod: O ecossistema Windows gerencia permissões através de Listas de Controle de Acesso estruturadas (ACLs), que funcionam de forma muito diferente do modelo binário de permissões octais do Unix (Leitura/Escrita/Execução).mounteumount: O Windows adota nativamente o mapeamento lógico através de partições identificadas por letras (C:, D:) associadas automaticamente pelo gerenciador de volumes, dispensando a necessidade de comandos manuais do escopo Unix por parte do programa de usuário de forma genérica.
🚀 Próximos Passos na Trilha de Sistemas Operacionais:
Agora que você já entende o canal de comunicação entre os softwares e o hardware, continue acompanhando as próximas aulas estruturadas da nossa ementa:
- Gerenciamento Avançado de Processos: Entendendo a tabela de processos e Escalonadores
- Threads vs Processos: Compartilhamento de memória e concorrência na prática
- Como os Sistemas de Arquivos gerenciam blocos lógicos dentro do disco rígido

3 comentários:
Considerando o código em assembly de um programa desenvolvido em C, como funciona essa ligação para a função do sistema? Quero dizer, como o programa sabe na hora da execução onde estão essas funções? Vai ter isso mais pra frente? :)
System Calls ou Chamada de Sistema nada mais é que funções(interfaces) podem ser entendidas como uma porta de entrada para o acesso ao núcleo do Sistema Operacional e os seus serviços.Para cada serviço disponível existe uma system call associada e cada Sistema Operacional tem seu próprio conjunto de chamadas,com nomes,parâmetros e formas de ativação específicos. Ao bem entender os benefícios do System Calls é proteger o Sistema Operacional de vírus.
Li tudo só não compreendi tanto porque não participe da aula toda por conta da internet q tava só saindo do meet
Postar um comentário