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> (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. |