Service de noyau xmemout

Objectif

Effectua un déplacement de mémoire croisée en copiant les données de la mémoire globale du noyau vers un espace adresse spécifié.

Syntaxe

#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;

Paramètres

Article Descriptif
Kaddr Indique l'adresse dans la mémoire du noyau.
Uaddr Indique l'adresse en mémoire spécifiée par un descripteur de mémoire croisée.
count Indique le nombre d'octets à copier.
dp Indique le descripteur de mémoire croisée.

Descriptif

Le service de noyau Xmemout effectue une opération de mémoire croisée. Une opération de mémoire croisée se produit lorsque les données sont déplacées vers ou à partir d'un espace adresse autre que l'espace adresse dans lequel le programme s'exécute. Le service de noyau Xmemout copie les données de la mémoire globale du noyau dans l'espace adresse spécifié.

Le service de noyau Xmemout est fourni afin que les processus de noyau et les gestionnaires d'interruptions puissent accéder en toute sécurité à une mémoire tampon dans un processus utilisateur. L'appel du service de noyau Xmattach prépare la mémoire tampon de l'utilisateur pour le déplacement intermémoire.

Le service de noyau Xmemout diffère des services de noyau Copyin et Copyout en ce qu'il est utilisé pour accéder à un tampon utilisateur lorsqu'il n'est pas exécuté sous le processus utilisateur. En revanche, les services de noyau Copyin et Copyout ne sont utilisés que pour accéder à une mémoire tampon utilisateur lors de l'exécution sous le processus utilisateur.

Environnement d'exécution

Le service de noyau Xmemout peut être appelé à partir de l'environnement Processus ou Interruption .

Valeurs renvoyées

Article Descriptif
SUCC. XMEM_MEC Indique que l'exécution a réussi.
ECHEC DE XMEM_FAIL Indique l'une des erreurs suivantes:
  • L'utilisateur ne dispose pas des droits d'accès appropriés pour la mémoire tampon utilisateur.
  • La mémoire tampon utilisateur se trouve dans une plage d'adresses non valide.
  • Le segment contenant la mémoire tampon utilisateur a été supprimé.
  • Le descripteur de mémoire croisée n'est pas valide.
  • Une erreur d'E-S de pagination s'est produite lors de l'accès à la mémoire tampon de l'utilisateur.

    Si la mémoire tampon de l'utilisateur n'est pas en mémoire, le service Xmemout renvoie également une erreur ECHEC DE XMEM_FAIL lors de l'exécution sur un niveau d'interruption.