Diferença entre chamadas do sistema e funções da biblioteca

10

Eu tenho através da resposta desta questão mas não entendo muito bem a diferença entre as chamadas do sistema e as funções da biblioteca. Conceitualmente, qual é a diferença entre os dois?

    
por Geek 30.11.2012 / 13:18

4 respostas

15

Conceitualmente, uma função de biblioteca faz parte do seu processo.

No tempo de execução, o código executável e o código de quaisquer bibliotecas (como libc.so) dependem e ficam vinculados em um único processo. Assim, quando você chama uma função em tal biblioteca, ela é executada como parte de seu processo, com os mesmos recursos e privilégios. É conceitualmente o mesmo que chamar uma função que você mesmo escreveu (com possíveis exceções, como as funções PLT e / ou trampolim, que você pode procurar se você se importa).

Conceitualmente, uma chamada de sistema é uma interface especial usada para fazer uma chamada de seu código (que geralmente não é privilegiado) para o kernel (que tem o direito de escalar privilégios conforme necessário).

Por exemplo, veja o Linux man brk . Quando um programa em C chama malloc para alocar memória, ele está chamando uma função de biblioteca na glibc.

Se já houver espaço suficiente para a alocação dentro do processo , ele poderá fazer qualquer gerenciamento de heap necessário e retornar a memória ao chamador.

Se não, o glibc precisa solicitar mais memória do kernel: ele (provavelmente) chama a função brk glibc, que por sua vez chama o brk syscall. Somente depois que o controle passar para o kernel, via syscall, o estado da memória virtual global pode ser modificado para reservar mais memória e mapeá-lo para o espaço de endereço do processo.

    
por 30.11.2012 / 14:06
8

Adicionando a inútil 'resposta:
As funções da biblioteca são mais rápidas que as chamadas do sistema e geralmente não contêm considerações de permissão / segurança, pois estão sendo executadas com os privilégios do processo e sua memória.

Por outro lado, os syscalls, já que são executados no kernel, têm acesso a tudo no sistema e precisam controlar o que o processo de chamada pode fazer quando os chama (verifique se ele tem as permissões para abrir um arquivo, por exemplo), além disso, como syscalls estão no kernel, chamá-los requer uma alternância de contexto na CPU, que é um processo muito pesado em relação a apenas chamar uma chamada de biblioteca.

O syscalls geralmente reflete como o uso da CPU do sistema no monitoramento de programas.

    
por 30.11.2012 / 14:29
0
  1. lib fun é compilador suportado enquanto o syscall é suportado pelo SO
  2. Libcall são específicos enquanto syscall são genéricos, como getc a lib fun pode acessar apenas um caractere por vez, não string ou palavra por palavra, mas abra um syscall usado para abrir um arquivo de texto , arquivo binário e muitos outros tipos de arquivos.
por 06.07.2014 / 10:43
0

chamada da biblioteca - chama uma sub-rotina vinculada ao aplicativo (via incluindo ou adicionando biblioteca).

chamada de sistema - transfere o controle para o sistema operacional (sistema operacional do usuário e >) e coloca o processador em modo privilegiado

    
por 08.11.2014 / 22:11