O resultado do kernel retornou a qual processo?

3

Quando um processo requer ações que exigem o modo kernel, ele usa uma chamada do sistema. Então, como os resultados retornam ao processo?

    
por Ron Vince 27.03.2014 / 04:34

1 resposta

3

NOTA: TODAS AS INFORMAÇÕES ABAIXO SÃO DO SITE REFERENCIADO

De este link , encontrei as informações abaixo.

Uma chamada do sistema é uma interface entre um aplicativo de espaço do usuário e um serviço que o kernel fornece. Como o serviço é fornecido no kernel, uma chamada direta não pode ser executada; em vez disso, você deve usar um processo de cruzar o limite do espaço do usuário / kernel.

Usando a chamada do sistema

Vamos ver o que é necessário para usá-los a partir de um aplicativo de espaço do usuário. Existem duas maneiras de usar novas chamadas do sistema kernel. O primeiro é um método de conveniência (não algo que você provavelmente desejaria fazer no código de produção), e o segundo é o método tradicional que requer um pouco mais de trabalho. Com o primeiro método, você chama suas novas funções conforme identificadas pelo índice através da função syscall. Com a função syscall, você pode chamar uma chamada de sistema especificando seu índice de chamadas e um conjunto de argumentos. Por exemplo, o aplicativo curto mostrado abaixo chama seu sys_getjiffies usando seu índice.

#include <linux/unistd.h>
#include <sys/syscall.h>

#define __NR_getjiffies     320

int main()
{
  long jiffies;

  jiffies = syscall( __NR_getjiffies );

  printf( "Current jiffies is %lx\n", jiffies );

  return 0;
}

Como você pode ver, a função syscall inclui como primeiro argumento o índice da tabela de chamada do sistema a ser usada. Se houvesse algum argumento para passar, isso seria fornecido após o índice de chamadas. A maioria das chamadas de sistema inclui uma constante simbólica SYS_ para especificar seu mapeamento para os índices _ NR . Por exemplo, você invoca o índice __NR_getpid com syscall como:

syscall( SYS_getpid )

A função syscall é específica da arquitetura, mas usa um mecanismo para transferir o controle para o kernel. O argumento é baseado em um mapeamento dos símbolos _ NR para SYS símbolos fornecidos por /usr/include/bits/syscall.h (definido quando a libc é construída). Nunca faça referência a este arquivo diretamente; Em vez disso, use /usr/include/sys/syscall.h .

    
por 27.03.2014 / 04:51