Service de noyau initp

Objectif

Permet de modifier l'état d'un processus de noyau, de l'inactivité à la fin.

Syntaxe

#include <sys/types.h>
#include <sys/errno.h>
int initp
(
pid, func, init_parms,
parms_length
, name)
pid_t  pid;
void ( func) (int
flag,
void* init_parms, int parms_length );
void * init_parms;
int  parms_length;
char * name;

Paramètres

Article Descriptif
PID Indique l'identificateur de processus du processus à initialiser.
Fonction Indique la routine d'initialisation du processus.
Parm Spécifie le pointeur vers les paramètres d'initialisation.
Londonn_paramètre Indique la longueur des paramètres d'initialisation.
nom Indique le nom du processus.

Descriptif

Le service de noyau Initp termine la transition d'un Processus de noyau de l'inactivité à la fin. L'état inactif d'un processus est représenté par P_status == SIDL. Avant d'appeler le service Initp , le service Creatp est appelé pour créer le processus. Le service Creatp alloue et initialise une entrée de table de processus.

Le service Initp crée et initialise le segment de processus-privé. Le processus est marqué comme un processus de noyau par un bit défini dans la zone P_flag de l'entrée de la table de processus. Ce bit, le bit SKPROC, signifie que le processus est un processus de noyau.

Le processus appelant le service Initp pour initialiser un processus nouvellement créé doit être le même que celui qui a appelé le service Creatp pour créer le nouveau processus.

"Utilisation de processus de noyau" Dans Concepts de programmation de prise en charge des extensions et des périphériques du noyau explique également comment le service de noyau Initp termine le processus d'initialisation lancé par le service Creatp .

Le paramètre Pid identifie le processus à initialiser. Il doit être valide et identifier un processus dans l'état SIDL (inactif).

Le paramètre Nom pointe vers une chaîne de caractères qui nomme le processus. Les principaux caractères de cette chaîne sont copiés dans la structure utilisateur. Le nombre de caractères copiés dépend de l'implémentation, mais au moins quatre sont toujours copiés.

Le paramètre Func indique le point d'entrée principal du processus. Le nouveau processus est prêt à exécuter cette fonction. Si le paramètre Par_init_initialisation n'est pas null, il pointe vers les données transmises à cette routine. La structure de paramètre doit être convenue entre le processus d'initialisation et d'initialisation. Le service Initp copie les données spécifiées par le paramètre Parm (avec le nombre exact d'octets spécifiés par le paramètre Londonn_paramètre ) des données dans la pile du nouveau processus.

Environnement d'exécution

Le service de noyau Initp peut être appelé à partir de Environnement de processus uniquement.

Exemple

Pour initialiser le processus de noyau exécutant la fonction _kproc, entrez:

{ 
.
.
.
pid = creatp();
initp(pid, main_kproc, &node_num, sizeof(int), "tkproc");         
.
.
}
void
main_kproc(int flag, void* init_parms, int parms_length)
{
        .
        .
        .
        int i;
        i = *( (int *)init_parms );
        .
        .
        .
} 

Valeurs renvoyées

Article Descriptif
0 % Indique une opération réussie.
ENODEV Le processus n'a pas pu être planifié car il possède une pièce jointe de processeur qui ne contient pas de processeurs disponibles. Cela peut être dû à la répartition dynamique du processeur.
ENOMEM Indique que la mémoire est insuffisante pour initialiser le processus.
EINVAL Indique un paramètre Pid non valide.