Gostaria de saber qual é a diferença entre uma chamada de biblioteca e uma chamada de sistema no Linux. Qualquer indicação para uma boa compreensão dos conceitos por trás de ambos será muito apreciada.
13
Gostaria de saber qual é a diferença entre uma chamada de biblioteca e uma chamada de sistema no Linux. Qualquer indicação para uma boa compreensão dos conceitos por trás de ambos será muito apreciada.
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 manualPor exemplo, você encontrará
chmod
na seção 2 do manual ao digitarman chmod
. Efprintf
na seção 3.fonte
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.
fonte
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.
fonte
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 comoFOPEN(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 comoOPEN(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.
fonte
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.
fonte