Respostas:
Não existe realmente uma "chamada de biblioteca". Você pode chamar uma função vinculada a uma biblioteca compartilhada. E isso significa apenas que o caminho da biblioteca é pesquisado em tempo de execução para determinar o local da função a ser chamada.
As chamadas do sistema são chamadas de baixo nível do kernel tratadas pelo kernel.
Se você digitar man man
seu shell, verá a lista das seções do manual
2 Chamadas do sistema (funções fornecidas pelo kernel)
3 Chamadas de biblioteca (funções nas bibliotecas de programas)
Por exemplo, você encontrará chmod
na seção 2 do manual ao digitar man chmod
. E fprintf
na seção 3.
As chamadas do sistema são tratadas diretamente pelo kernel.
As chamadas de biblioteca são tratadas por uma biblioteca dinâmica (ou vinculada estaticamente). O programa que está fazendo a chamada da biblioteca deve primeiro importar essa biblioteca, antes que a chamada funcione. As chamadas da biblioteca podem usar chamadas do sistema.
Às vezes, as bibliotecas são fornecidas como "front-ends" para chamadas do sistema, para fornecer funcionalidade extra ou facilidade de uso não fornecida pelo kernel.
As chamadas do sistema são funções que o sistema operacional fornece para os aplicativos usarem. Considerando que funções como as de math.h, string.h, etc, são aquelas que não têm nada a ver com a interface com o sistema operacional.
Basicamente, existem dois modos de viz linux do kernel.
Qualquer kernel do linux alterna entre esses dois modos. Geralmente, as chamadas de biblioteca são executadas no modo Usuário e as chamadas de sistema são executadas no modo Kernel . Em termos de sistema operacional, o modo Kernel é de natureza atômica e está no modo de supervisão. Quase todas as chamadas de biblioteca precisam de ajuda do kernel para executar suas tarefas. Cada chamada da biblioteca, por sua vez, chama a chamada do sistema subjacente. Vamos deixar a ideia mais clara usando o seguinte exemplo
Sempre que no programa c, você usa fopen () do arquivo de cabeçalho. O ambiente de programação chama a chamada de sistema open () do kernel e executa sua tarefa de abertura de arquivo. Novamente após a execução, o fluxo de controle retorna ao modo de usuário.
Para ilustrar isso, execute as seguintes tarefas
man man
: aqui você encontrará a seção manual de 1 a 8, cada uma com finalidade específica.man fopen
: você verá o respose como FOPEN(3)
, aqui 3 indicam a seção manual 3 das páginas de manual, que é a seção de chamadas da c-library.Faça man open
: você verá o respose como OPEN(2)
, aqui 2 indicam a seção manual 2 das páginas de manual, que é a seção de chamadas do sistema.
Espero que você tenha entendido o conceito.
Apenas adicionando às diferenças mencionadas aqui em outras respostas.
Como uma chamada de biblioteca é simplesmente uma chamada de função, nenhuma mudança do espaço do usuário para o espaço do kernel ocorre. Por outro lado, uma chamada do sistema resulta em uma troca do espaço do usuário para o espaço do kernel porque a chamada do sistema opera no modo kernel.