serviço do kernel do xmemout

Propósito

Executa um movimento de memória cruzada, copiando dados da memória global do kernel para um espaço de endereço especificado.

Sintaxe

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/xmem.h>
int xmemout (kaddr, uaddr, count, dp)
caddr_t * kaddr;
caddr_t * uaddr;
int  count;
struct xmem * dp;

Parâmetros

Item Descrição
kaddr Especifica o endereço na memória do kernel.
uaddr Especifica o endereço na memória especificado por um descritor de memória cruzada.
count Especifica o número de bytes a copiar.
DP Especifica o descritor de memória cruzada.

Descrição

O serviço kernel xmemout executa um movimento de memória cruzada. Um movimento de memória cruzada ocorre quando dados são deslocados para ou a partir de um espaço de endereço diferente do espaço de endereço que o programa está executando em. O serviço kernel xmemout copia dados da memória global do kernel para o espaço de endereço especificado.

O serviço kernel xmemout é fornecido para que os processos do kernel e manipuladores de interrupção possam acessar com segurança um buffer dentro de um processo de usuário. Chamar o serviço de kernel xmattach prepara o buffer de usuário para o movimento de memória cruzada.

O serviço kernel xmemout difere dos serviços kernel copyin e copyout na qual ele é usado para acessar um buffer de usuário quando não executar sob o processo do usuário. Em contraste, os serviços do kernel copyin e copyout são usados apenas para acessar um buffer de usuário enquanto executa sob o processo do usuário.

Ambiente de Execução

O serviço kernel xmemout pode ser chamado a partir do ambiente processo ou interrupção .

Valores De Retorno

Item Descrição
XMEM_SUCC Indica conclusão bem-sucedida.
XMEM_FAIL Indica um dos seguintes erros:
  • O usuário não tem a autoridade de acesso adequada para o buffer de usuário.
  • O buffer do usuário está localizado em uma faixa de endereço que não é válida.
  • O segmento contendo o buffer de usuário foi excluído.
  • O descritor de memória cruzada não é válido.
  • Ocorreu um erro de E/S de paginação enquanto o buffer do usuário estava sendo acessado.

    Se o buffer do usuário não estiver na memória, o serviço xmemout também retornará um erro XMEM_FAIL ao executar em um nível de interrupção.