Chamadas de Sistema - O que são, Para que servem e Exemplos de System Calls

Nesse tutorial de Programação de Sistemas Operacionais, vamos aprender o que são chamadas de sistemas, para que servem, onde são utilizadas e ver alguns exemplos das system calls em ambientes Unix (como Linux).

O que são Chamadas de Sistema (System Calls)

Quando falamos sobre os Sistemas Operacionais sob o ponto de vista da programação, citamos que uma de suas funções é fornecer algumas abstrações, de modo que o usuário não tenha que se preocupar com coisas específicas e complexas, além de gerenciar recursos de hardware (como memória e processamento).

Tendo isso em mente, podemos definir chamadas de sistemas como funções, porém, são funções específicas que invocam o sistema operacional para que este faça algo, como a criação de um processo.

Geralmente, essas tarefas que pedimos para que o sistema operacional faça são bem complexas e que exijam uma permissão maior do sistema, pois geralmente lidam com ferramentas em baixo nível, como gerenciamento de memória, processos e outros recursos que o usuário comum não tem acesso.

Podemos dividir as chamadas de sistema entre quatro grandes grupos:

  • Chamadas de sistemas para gerenciamento de processos
  • Chamadas de sistemas para gerenciamento de diretórios
  • Chamadas de sistemas para gerenciamento de arquivos
  • Chamadas de sistemas restantes








Chamadas de Sistema (System Calls) do Unix

A seguir, vamos dar exemplos de funções de chamadas de sistema, que invocam o SO para fazer alguma tarefa específica, em ambientes do tipo Unix.

Daremos uma breve explicação sobre cada uma, e no decorrer de nossos estudos sobre sistemas operacionais, entraremos em mais detalhes sobre elas. Não se preocupe em decorar elas muito menos seus parâmetros, é um trabalho gigante.

Apenas saiba que existem, para que servem e onde são usadas, para que um dia caso venha precisar, saber que tipos de tarefas você pode pedir para que seu sistema operacional realize, em seus programas.








  • pid = fork() - Essa chamada cria um processo (filho), idêntico ao pai
  • pid = waitpid(pid, &statloc, options) - O processo pai volta a rodar somente após o término do filho, ou seja, o processo pai aguarda o filho ser finalizado
  • s = execv(name, argv, enrionp) - É realizado, no processo, a substituição da imagem do núcleo
  • exit( num ) - Termina um processo e retorna um status (um número identificado algo, como sucesso, erro etc)
  • fd = open (file, abertura ...) - Abre um arquivo (leitura, escrita ou os dois)
  • s = close(fd) - Fecha o arquivo anteriormente aberto 
  • n = read (fd, buffer, nbytes) - Lê dados do arquivo 'fd' no 'buffer',  de 'nbytes' valores de bytes
  • n = write(fd, buffer, nbytes) - Analogamente ao read, mas escreve
  • position = lseek(fd, offset, whence) - Move o ponteiro de 'fd'
  • s = stat(name, &buf) - Retornar informações do arquivo
  • s = chdir(nome) - Altera o diretório em que se está trabalhando
  • s = kill(pid, sinal) - Envia um sinal 'sinal' para o processo de PID 'pid'
  • seconds = time(&seconds) - Essa chamada retorna o tempo, em segundos, desde 1o de janeiro de 1970
  • s = chmod(nome, modo) - Altera o sistema de proteção do arquivo 'nome' 
  • s = mkdir(nome, modo) - Cria uma pasta (diretório)
  • s = rmdir(nome) - Apaga o diretório de nome "nome", previamente criado
  • s = mount(special, nome, flag) - Cria um sistema de arquivos (como um dvd ou pendrive)
  • s = umount(special) - Desmonta o sistema de arquivos previamente criado
  • s = link(nome1, nome2) - Cria a entrada 'nome2' apontando pra 'nome1'
  • s = unlink(nome) - Desfaz a entrada 'nome'






Chamadas de Sistema (System Calls) do Windows

Embora seja um sistema mais fechado (o que atrapalha um estudo mais aprofundado), o sistema operacional Windows também possui importantes chamadas de sistemas, essenciais para todos os programadores que desejam trabalhar com este tipo de SO.

A seguir, vamos mostrar algumas chamadas de sistemas do Windows, e que system calls do Linux elas são correspondentes.


  • CreateProcess - fork
  • WaitForSingleObject - waipid
  • ExitProcess - exit
  • CreateFile - open
  • ReadFile - read
  • WriteFile - write
  • CloseHandle - close
  • SetFilePointer - lseek
  • GetFileAttributesEx - stat
  • CreateDirectory - mkdir
  • RemoveDirectory - rmdir
  • SetCurrentDirectory - chdir
  • GetLocalTime - time
  • DeleteFile - unlink


As seguintes system calls do Unix não possuem uma correspondente no Windows:

  • kill
  • chmod
  • mount
  • umount
  • link
  • execve

Nenhum comentário: