Métodos de invocação do sistema no novo kernel

4

Eu li que nos kernels mais recentes, as chamadas do sistema são chamadas usando a instrução INT X80 e também usando a instrução sysenter. E também a instrução sysenter dá uma invocação mais rápida em comparação com o outro método.

Como posso verificar quais todas as chamadas do sistema são invocadas por esse método?

    
por user3539 02.01.2012 / 10:17

1 resposta

2

A menos que você esteja executando um kernel pré-2.6, você não estará usando o método int x80 para invocar a maioria das chamadas do sistema. Eles foram substituídos em favor do método systenter/sysexit desde o kernel 2.6 (iniciado na série 2.5) para as coisas que importam.

Note que se você tiver binários antigos que foram construídos em kernels mais antigos, eles ainda podem estar usando o método int x80 - a única coisa que você pode fazer é reconstruí-los (ou obter binários atualizados). Execute ldd your_exe no programa que você está preocupado. Se ele listar linux-gate.so.1 ou linux-vdso.so.1 , ele está usando o novo syscalls. Se não, é (muito provavelmente) usando o método antigo.
Para binários estáticos, é mais difícil dizer. Uma maneira seria objdump your_exe | less e procurar invólucros de chamadas do sistema ( __gettimeofday é um bom candidato). Você verá a partir da desmontagem se estiver usando uma interrupção ou não.

Um bom resumo de como as antigas chamadas do INT 80 funcionaram e como a nova interface syscall veio a ser e é a configuração pode ser encontrada aqui: System calls (de Andries Brouwer).
Outra boa leitura: O que é linux-gate.so.1? .

Ambos os artigos estão vinculados a este outro: Mecanismo de Chamada do Sistema Baseado em Sysenter no Linux 2.6 , e aponta para o Noções básicas sobre o kernel do Linux livro de Daniel P. Bovet, Marco Cesati, que é bom para informações mais gerais.

Então, em suma: não se preocupe com isso. Se você tem um sistema recente o suficiente (CPU, kernel e distribuição), você está usando as chamadas de sistema "rápidas".

    
por 02.01.2012 / 21:28