API sem chamadas do sistema

5

O livro 'Entendendo o Kernel do Linux' diz que 'para algo abstrato, como funções matemáticas, pode não haver razão para fazer chamadas de sistema' . Alguém pode explicar como é que uma chamada de sistema não é necessária em funções matemáticas? A CPU não está envolvida em operações matemáticas? Alguém pode dar um exemplo de tal programa?

    
por Jay 02.01.2014 / 17:25

3 respostas

6

Eu não tenho esse livro para verificar, mas supondo que esteja usando o significado normal de chamadas de sistema , uma chamada de sistema é uma chamada para o kernel para executar alguma operação que o hardware considera privilegiada , ou não tem conhecimento. Isso é usado para impor permissões, etc. no sistema. Então você precisa fazer uma chamada do sistema para (entre muitas outras coisas):

  • lido de um arquivo (o kernel deve verificar se as permissões permitem que você leia o arquivo, e então o kernel executa as instruções reais no disco para ler o arquivo)
  • sinaliza um processo (os processos não existem no que diz respeito ao hardware, eles são uma abstração fornecida pelo kernel, etc.)
  • obtenha memória adicional (o kernel deve garantir que você não exceda o ulimit, certifique-se de que dois processos não reivindiquem a mesma RAM, etc.)

A matemática não é uma dessas coisas. Normalmente, não requer intervenção do kernel.

    
por 02.01.2014 / 17:39
3

Uma "chamada do sistema" é uma chamada para uma função do kernel. Isso é necessário para a funcionalidade gerenciada pelo kernel, como acessar dispositivos. Para operação "normal", como adicionar números, não é necessária ajuda do kernel. Portanto, chamando uma biblioteca que está apenas computando coisas, nenhuma chamada para o espaço do kernel é necessária também.

Você pode usar strace para mostrar todas as chamadas do sistema de um determinado programa.

    
por 02.01.2014 / 17:36
3

A execução de um processo executa as instruções da CPU por definição. Existem algumas instruções da CPU que só podem ser executadas em um modo privilegiado, principalmente instruções relacionadas ao acesso ao hardware fora da CPU, incluindo a RAM ou à modificação de algumas configurações. O kernel é executado em modo privilegiado, processos comuns são executados em modo não privilegiado. Os detalhes do que significa “modo privilegiado” depende da arquitetura da CPU.

Instruções puramente computacionais, como operações inteiras e operações de ponto flutuante, não requerem acesso privilegiado, portanto, elas podem ser executadas por processos comuns.

Quando um processo deseja executar uma operação que requer privilégios, ele precisa invocar algum código do kernel para fazê-lo. Há uma instrução especial da CPU que alterna simultaneamente a CPU para o modo privilegiado e ramifica para um endereço predefinido na memória. Em um sistema operacional unix (e na maioria dos sistemas operacionais em geral), essa ação é chamada de chamada de sistema.

O Unix fornece isolamento entre processos, por isso configura o processador (especificamente, o MMU ) de tal forma que cada processo só pode acessar sua própria memória, e não a memória de outros processos ou do kernel. (Quase) qualquer ação que possa afetar outros processos ou que envolva acesso a hardware fora da CPU principal passa pelo kernel e, portanto, requer uma chamada de sistema. Isso inclui acesso a arquivos e dispositivos de hardware, rede, comunicação entre processos, gerenciamento de privilégios e memória, etc.

Você pode ver a documentação das chamadas do sistema em seu sistema na seção 2 do manual . Você pode ver o que o sistema chama de um processo ao ativá-lo por meio de truss no Solaris e no FreeBSD, < href="http://en.wikipedia.org/wiki/Strace"> strace no Linux, ou equivalentes em outras variantes unix.

    
por 03.01.2014 / 03:02