Qual é a diferença entre uma chamada de biblioteca e uma chamada de sistema no Linux?

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.

Sen
fonte

Respostas:

9

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.

Falmarri
fonte
Portanto, se alguém fizer a pergunta acima, posso interpretá-la como a diferença entre uma chamada do sistema e uma chamada de função.
Sen
"Homem ltrace" dá a minha "Um rastreador de chamadas de biblioteca" :)
ysdx
8

Se você digitar man manseu 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á chmodna seção 2 do manual ao digitar man chmod. E fprintfna seção 3.

uloBasEI
fonte
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.

LawrenceC
fonte
As chamadas de biblioteca não são necessariamente tratadas por uma biblioteca dinâmica. As bibliotecas podem ser vinculadas estaticamente, portanto, nenhuma importação (carga) é necessária.
Jlliagre
Verdade. Eu adicionei essa informação.
21816 Lawrence-C
Apenas metade dele ...
jlliagre
não deve funcionar apenas no arquivo head também faz parte das chamadas da biblioteca?
陳力
1

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.

yasouser
fonte
1

Basicamente, existem dois modos de viz linux do kernel.

  1. Modo de usuário,
  2. Modo 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

  1. fopen (): é uma chamada de biblioteca,
  2. open (): é uma chamada do sistema.

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

  1. man man: aqui você encontrará a seção manual de 1 a 8, cada uma com finalidade específica.
  2. Faça 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.
  3. 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.

alpha9eek
fonte
O kernel possui apenas um modo, o modo kernel. Os processos do usuário têm dois modos operacionais: alternam entre o usuário e o kernel.
Jlliagre
1

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.

cout_display_name
fonte