System calls

All you want to know about System calls

Portal A Wikipédia possui o(s) portal(is):
Portal das tecnologias de informação
{{{Portal2}}}
{{{Portal3}}}
{{{Portal4}}}
{{{Portal5}}}

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 kernel do sistema operacional.

Índice

[editar] Histórico

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 kernel 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.

[editar] Mecanismo

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 maior 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 I/O 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.

[editar] A biblioteca como um intermediário

Os sistemas operacionais geralmente possuem uma biblioteca que os programas normais chamam com o fim de comunicar com o kernel. 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 kernel e com a chamada da rotina previligiada 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 exokernel, a biblioteca é especialmente importante como um intermediário. As LibOSes dos exokernels blindam as aplicações do usuário das APIs do kernel de baixo nível, oferecem abstrações e gerenciamento de recursos.

[editar] Exemplos

Nos sistemas POSIX e similares, as chamadas de sistema mais usadas são close, execve, fork, wait, kill, open, read, write 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).

[editar] Ligações externas


  • Ads

           
eXTReMe Tracker