Chamada de sistema

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Question book.svg
Este artigo não cita fontes fiáveis e independentes. (desde abril de 2012). Por favor, adicione referências e insira-as corretamente no texto ou no rodapé. Conteúdo sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)
GNU C Library, chamadas de sistema do Núcleo Linux.

Em computação, uma chamada de sistema (system call) é o mecanismo usado pelo programa para requisitar um serviço do sistema operacional, ou mais especificamente, do núcleo do sistema operacional.

Histórico[editar | editar código-fonte]

Os processadores modernos podem executar instruções com diferentes privilégios. Em sistemas com dois níveis de privilégio, eles são chamados de modo usuário e modo protegido. Os sistemas operacionais disponibilizam diferentes níveis de privilégio que restringem as operações executadas pelos programas, por razões de segurança e estabilidade. Dentre estas operações podem ser incluídas o acesso a dispositivos de hardware, habilitar e desabilitar interrupções ou alterar o modo de privilégio do processador. O núcleo deve ser executado no modo protegido e as aplicações em modo usuário.

Com o desenvolvimento de modos de operação separados, com níveis variados de privilégio, era necessário a criação de um mecanismo para transferir seguramente o controle de modos de menor privilégio para modos de maior privilégio. O código com menor privilégio não pode simplesmente transferir o controle para código com maior privilégio em qualquer ponto do código e em qualquer estado do processador; permitir essa transferência seria permitir a quebra da segurança do sistema. Por exemplo, o código com menor privilégio poderia levar o código com maior privilégio a ser executado na ordem incorreta, ou disponibilizar a ele uma pilha errada.

Mecanismo[editar | editar código-fonte]

As chamadas de sistema frequentemente utilizam uma instrução especial que faz com que a CPU transfira o controle para código de maior privilégio, como especificado previamente, pelo código de menor privilégio. Isto permite que o código de maior privilégio indique por onde ele será chamado e, tão importante quanto, o estado do processador no momento da chamada.

Quando a chamada de sistema é invocada, o programa que a invocou é interrompido, e a informação necessária para continuar a sua execução é salva. O processador inicia a execução do código de maior privilégio que, examinando o estado do processador (definido pelo código de menor privilégio) e/ou a sua pilha, determina que serviço foi requisitado. Quando a chamada termina, o controle retorna para o programa, o estado previamente salvo é restaurado, e o programa continua a sua execução.

Note que em muitos casos, o retorno de fato para o programa não é imediato. Se a chamada de sistema realiza qualquer tipo de operação de entrada/saída mais demorada, um acesso ao disco ou rede, o programa pode ser suspenso ("bloqueado") e retirado da fila de programas "prontos para execução" até que a operação termine, e o sistema operacional o eleja novamente como um candidato para execução.

A biblioteca como um intermediário[editar | editar código-fonte]

Os sistemas operacionais geralmente possuem uma biblioteca que os programas normais chamam com o fim de comunicar com o núcleo. Normalmente esta biblioteca é escrita na linguagem C (libc), como a glibc e MS LibC. Esta biblioteca manipula os detalhes de baixo nível relacionados com a passagem de informação para o núcleo e com a chamada da rotina privilegiada propriamente dita, nomeadamente a conversão de convenções de chamadas. Idealmente, isto reduz a dependência entre o sistema operacional e a aplicação, e aumenta a "portabilidade", pois a ABI pode sofrer alterações significativas sem quebrar a compatibilidade.

Em sistemas baseados em exonúcleo, a biblioteca é especialmente importante como um intermediário. As LibOSes dos exonúcleo blindam as aplicações do usuário das APIs do núcleo de baixo nível, oferecem abstrações e gerenciamento de recursos.

Os sistemas operacionais definem chamadas de sistema para todas as operações envolvendo o acesso a recursos de baixo nível (periféricos, arquivos, alocação de memória, etc) ou abstrações lógicas (criação e finalização de tarefas, por exemplo).

Geralmente as chamadas de sistema são oferecidas para as aplicações em modo usuário através de uma biblioteca do sistema (system library), que prepara os parâmetros, invoca a interrupção de software e retorna à aplicação os resultados obtidos.

Exemplos[editar | editar código-fonte]

Nos sistemas POSIX e similares, as chamadas de sistema mais usadas são close, execve, fork, wait, kill, open, read, write, clone, nice, exit, send, receive, signal e ioctl. Os sistemas operacionais atuais tem centenas de chamadas de sistema. Por exemplo, o Linux tem quase 300 chamadas de sistema diferentes. O FreeBSD tem praticamente o mesmo número (quase 330).

Portal A Wikipédia possui o portal:

Ligações externas[editar | editar código-fonte]