Service de noyau xmemin

Objectif

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

Syntaxe

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

Paramètres

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

Descriptif

Le service de noyau Xmemin 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 Xmemin copie les données de l'espace adresse spécifié vers la mémoire globale du noyau.

Le service de noyau Xmemin 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 Xmemin 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 sont utilisés uniquement 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 Xmemin 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 de noyau Xmemin renvoie également une erreur ECHEC DE XMEM_FAIL lors de l'exécution sur un niveau d'interruption.