Passei pela resposta a essa pergunta, mas não entendi bem a diferença entre chamadas do sistema e funções da biblioteca. Conceitualmente, qual é a diferença entre os dois?
Passei pela resposta a essa pergunta, mas não entendi bem a diferença entre chamadas do sistema e funções da biblioteca. Conceitualmente, qual é a diferença entre os dois?
Respostas:
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 malloc
para 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 brk
função glibc, que por sua vez chama o brk
syscall. 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.
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.
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