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

11

Eu 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.

    
por Sen 05.02.2011 / 11:10

6 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 é consultado em tempo de execução para determinar a localização da função a ser chamada.

Chamadas de sistema são chamadas de kernel de baixo nível tratadas pelo kernel.

    
por 05.02.2011 / 11:11
8

Se você digitar man man no seu shell, verá a lista das seções do manual

2 System calls (functions provided by the kernel)

3 Library calls (functions within program libraries)

Por exemplo, você encontrará chmod na seção 2 do manual ao digitar man chmod . E fprintf na seção 3.

    
por 05.02.2011 / 22:43
3

As chamadas do sistema são tratadas diretamente pelo kernel.

As chamadas da biblioteca são tratadas por uma biblioteca dinâmica (ou vinculada estaticamente). O programa que faz 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 as chamadas do sistema, para fornecer funcionalidade extra ou facilidade de uso não fornecidas pelo kernel.

    
por 06.02.2011 / 16:38
1

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 tem nada a ver com a interface com o sistema operacional.

    
por 06.02.2011 / 05:58
1

Basicamente, existem dois modos de visualização do kernel do Linux.

  1. Modo de usuário,
  2. Modo do kernel

Qualquer kernel do Linux alterna entre esses dois modos. Geralmente, Chamadas de biblioteca são executadas em Modo de usuário e Chamadas de sistema são executadas no Modo de kernel . Em termos do sistema operacional, o modo Kernel é Atômico na natureza e em seu modo Supervisão. Quase todas as chamadas de biblioteca precisam de ajuda do kernel para executar suas tarefas. Cada chamada de biblioteca, por sua vez, chama a chamada de sistema subjacente. Deixe-nos tornar a ideia mais clara usando o seguinte exemplo

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

Sempre no programa c, você usa fopen () do arquivo de cabeçalho. O ambiente de programação chama o 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, execute as seguintes tarefas

  1. man man : aqui você encontrará a seção manual de 1 a 8, cada uma com um propósito específico.
  2. Do man fopen : você verá uma resposta como FOPEN(3) , aqui 3 indica a seção manual 3 de man pages que é a seção de chamadas da biblioteca c.
  3. Do man open : você verá uma resposta como OPEN(2) , aqui 2 indica a seção manual 2 de man pages que é a seção de chamadas do sistema.

    Espero que você tenha entendido o conceito.

por 06.04.2015 / 09:04
1

Apenas adicionando as diferenças mencionadas aqui em outras respostas.

Como uma chamada de biblioteca é simplesmente uma chamada de função, não ocorre alternância do espaço do usuário para o espaço do kernel. Por outro lado, uma chamada do sistema resulta em uma mudança do espaço do usuário para o espaço do kernel, porque a chamada do sistema opera no modo kernel.

    
por 19.11.2016 / 09:12