Resultado do kernel retornado para qual processo?

Resultado do kernel retornado para qual processo?

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

Responder1

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


Deesselink, encontrei as informações abaixo.

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

Usando a chamada do sistema

Vejamos o que é necessário para usá-los em um aplicativo de espaço do usuário. Existem duas maneiras de usar novas chamadas de sistema do kernel. O primeiro é um método conveniente (não algo que você provavelmente gostaria de 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 identificadas por seu índice por meio da função syscall. Com a função syscall, você pode chamar uma chamada de sistema especificando seu índice de chamada e um conjunto de argumentos. Por exemplo, o pequeno aplicativo mostrado abaixo chama você sys_getjiffiesusando 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 chamadas do sistema a ser usada. Se houvesse algum argumento a ser passado, ele seria fornecido após o índice de chamada. A maioria das chamadas de sistema inclui uma constante simbólica SYS_ para especificar seu mapeamento para _NRíndices. 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 de _Índices NR para SYSsímbolos fornecidos por /usr/include/bits/syscall.h(definidos quando a libc é construída). Nunca faça referência direta a esse arquivo; em vez disso, use /usr/include/sys/syscall.h.

informação relacionada