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

Respostas:

19

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

No tempo de execução, seu código executável e o código de qualquer biblioteca (como a libc.so) da qual depende, são vinculados a um único processo. Portanto, quando você chama uma função em uma biblioteca, ela é executada como parte do seu processo, com os mesmos recursos e privilégios. É a mesma idéia que chamar uma função que você mesmo escreveu (com possíveis exceções, como funções PLT e / ou trampolim, que você pode procurar se quiser).

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


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

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

Caso contrário, o glibc precisa solicitar mais memória do kernel: (provavelmente) chama a brkfunção glibc, que por sua vez chama o brksyscall. Somente depois que o controle é passado para o kernel, via syscall, o estado global da memória virtual pode ser modificado para reservar mais memória e mapeá-lo no espaço de endereço do processo.

Sem utilidade
fonte
11

Adicionando à resposta do Useless: 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, uma vez que são executados no kernel, têm acesso a tudo no sistema e, portanto, precisam controlar o que o processo de chamada pode fazer ao chamá-los (verifique se ele tem permissões para abrir um arquivo, por exemplo). exemplo), além disso, como os syscalls estão no kernel, chamá-los requer uma troca de contexto na CPU, que é um processo muito pesado em relação a apenas chamar uma chamada de biblioteca.

Syscalls geralmente refletem como o uso da CPU do sistema nos programas de monitoramento.

Didi Kohen
fonte
0
  1. lib diversão são suportados pelo compilador enquanto syscall são suportados pelo sistema operacional
  2. Libcall é específico, enquanto syscall é genérico, como o getc a lib fun pode acessar apenas um caracter por vez, não string ou palavra por palavra, mas abrir um syscall pode ser usado para abrir arquivos de texto, arquivos binários e muitos outros tipos de arquivos.
preet
fonte
0

chamada de biblioteca - chama uma sub-rotina vinculada ao aplicativo (via inclusão ou adição de biblioteca).

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

Vedhas Deshpande
fonte