Service de noyau kra_thread_create

Objectif

Crée une unité d'exécution de noyau dans le processus appelant et connecte la nouvelle unité d'exécution de noyau à un ensemble de ressources.

Syntaxe

#include <sys/rset.h> 
tid_t kra_thread_create (rstype, rsid, flags)
rstype_t rstype; 
rsid_t rsid;
unsigned int flags;

Descriptif

Le service de noyau Kra_thread_create crée une nouvelle unité d'exécution noyau uniquement dans le processus de noyau appelant et connecte la nouvelle unité d'exécution de noyau à un ensemble de ressources comme indiqué dans les paramètres Rstype et Rsid . Une fois l'unité d'exécution du noyau créée, l'ID de l'unité d'exécution du noyau est renvoyé. L'ID renvoyé de l'unité d'exécution du nouveau noyau est unique dans tout le système.

Le service de noyau Kra_thread_create peut être utilisé comme le service de noyau Création d'unités d'exécution pour créer une nouvelle unité d'exécution de noyau dans le processus appelant.

La nouvelle unité d'exécution du noyau ne démarre pas immédiatement après sa création et l'état de la nouvelle unité d'exécution du noyau est défini sur TSIDL. La nouvelle unité d'exécution du noyau démarre après un appel au service de noyau Kthread_start . Si le nouveau processus d'unité d'exécution du noyau se ferme avant le démarrage de l'unité d'exécution du noyau, les ressources de l'unité d'exécution du nouveau noyau sont libérées immédiatement. Le masque de signal de la nouvelle unité d'exécution du noyau est hérité de l'unité d'exécution appelante et l'ensemble des signaux en attente de l'unité d'exécution du noyau est effacé. Si la nouvelle unité d'exécution du noyau est à l'état TSIDL , tous les signaux envoyés à la nouvelle unité d'exécution du noyau sont marqués comme En attente.

Pour associer une unité d'exécution de noyau à un jeu de ressources, les conditions suivantes doivent être remplies:
  • L'ensemble de ressources doit contenir des processeurs disponibles dans le système.
  • Le processus appelant doit posséder les droits d'accès root ou posséder la fonction CAP_NUM_CONNEXION .
  • Le processus appelant doit avoir l'autorité racine ou avoir le même ID utilisateur effectif que celui du processus cible.
  • L'unité d'exécution appelante ne doit pas avoir de liaisons bindprocessor sur un processeur.
  • L'ensemble de ressources doit être contenu dans l'ensemble de ressources de partition du processus appelant.

Paramètres

Article Descriptif
Rstype Indique le type de jeu de ressources auquel la nouvelle unité d'exécution de noyau du processus appelant sera associée. Les valeurs admises sont les suivantes :
  • R_RSET: ensemble de ressources.
  • R_SRADIDÉS: Identificateur de domaine d'allocation de ressources du planificateur (ID SRAD).
Rsid Indique l'ensemble de ressources associé au paramètre Rstype . Les valeurs admises sont les suivantes :
  • Jeu de ressources (lorsque Rstype = R_RSET): définissez la zone Rsid_t at_rset sur l'ensemble de ressources que vous souhaitez.
  • SRADID (lorsque Rstype = R_SRADID): Définissez la zone Rsid_t at_sradid sur l'ID SRAD que vous souhaitez.
Flags Réservé pour une utilisation future. Vous pouvez indiquer la valeur 0.

Valeurs renvoyées

Une fois l'exécution terminée, le service de noyau Kra_thread_create renvoie une valeur de zéro (0). En cas d'échec, le service de noyau kra_thread_create renvoie l'une des erreurs suivantes:

Article Descriptif
EINVAL Indique l'une des conditions suivantes:
  • Le paramètre Rstype contient un identificateur de type non valide.
  • Le paramètre Indicateurs contient une valeur non valide.
ENODEV L'ensemble de ressources spécifié ne contient pas de processeur disponible dans le système.
EDÉFAUT Adresse non valide.
EPERM Indique l'une des conditions suivantes:
  • Le processus appelant n'a ni l'autorité racine, ni le privilège de connexion CAP_NUM_CONNEXION .
  • Le processus d'appel contient une ou plusieurs unités d'exécution avec une liaison bindprocessor au processeur.
  • L'ensemble de ressources spécifié n'est pas inclus dans l'ensemble de ressources de partition du processus appelant.
ENOMEM La mémoire disponible n'est pas suffisante pour créer l'unité d'exécution du noyau.
ENCORE UNE FOIS

Le nombre total d'unités d'exécution de noyau en cours d'exécution à l'échelle du système ou le nombre maximal d'unités d'exécution de noyau par processus serait dépassé.

ENOTSUP Le service de noyau Kra_thread_create est appelé directement à partir d'une extension de noyau.