A biblioteca compartilhada vdso (linux-vdso.so) é a biblioteca que contém o código de objeto do kernel (chamadas do sistema)?

1

Notei que todos os meus programas compilados para o gcc estão ligados à biblioteca vdso. Esta é a biblioteca que contém as chamadas do sistema para o kernel, como mmap () e fork () e outras chamadas do sistema?

Eu sei que chamadas de sistema não são funções da biblioteca padrão GNU C, então seu código de objeto deve estar em alguma biblioteca que esteja vinculada à aplicação na compilação?

Então o vdso é essa biblioteca?

    
por yoyo_fun 09.10.2017 / 13:12

1 resposta

3

As chamadas do sistema são implementadas no kernel, conforme mencionado na resposta à sua pergunta de acompanhamento . vDSO, o objeto compartilhado dinâmico virtual, é uma pequena biblioteca virtual, também implementada pelo kernel, que o kernel mapeia em todos os processos. Como syscalls, é encapsulado pela biblioteca C.

A principal diferença entre o syscalls e o vDSO é de privilégio. As chamadas do sistema são executadas no espaço do kernel, e a troca entre o espaço do usuário e o espaço do kernel é cara. Como uma otimização, algumas chamadas do sistema que não precisam realmente ser executadas no espaço do kernel são fornecidas no vDSO, que é executado no espaço do usuário. Um exemplo é gettimeofday , que costuma ser chamado com bastante frequência e pode ser implementado pelo kernel sem mudar para o espaço do kernel.

A vdso página de man tem mais detalhes. Para uma discussão detalhada das chamadas do sistema no Linux em geral, incluindo vDSO, veja Anatomia de uma chamada de sistema parte 1 e parte 2 .

    
por 09.10.2017 / 14:48