initp-Kernel-Service

Zweck

Ändert den Status eines Kernelprozesses von inaktiv in bereit.

Syntax

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

Parameter

Element Beschreibung
pid Gibt die Prozess-ID des zu initialisierenden Prozesses an.
func Gibt die Initialisierungsroutine des Prozesses an.
init_parameter Gibt den Zeiger auf die Initialisierungsparameter an.
Parameterlänge Gibt die Länge der Initialisierungsparameter an
Name Gibt den Prozessnamen an.

Beschreibung

Der Initialisierung -Kernel-Service schließt den Übergang eines Kernelprozess s von inaktiv in bereit ab. Der Inaktivitätsstatus für einen Prozess wird durch p_status == SIDLdargestellt. Vor dem Aufrufen des Service Initialisierung wird der Service Kreatp aufgerufen, um den Prozess zu erstellen. Der Kreatp -Service ordnet einen Prozesstabelleneintrag zu und initialisiert ihn.

Der Initialisierung -Service erstellt und initialisiert das private Prozesssegment. Der Prozess wird durch ein Bit im Feld P_Flag im Prozesstabelleneintrag als Kernelprozess markiert. Dieses Bit, das SKPROC-Bit, gibt an, dass der Prozess ein Kernelprozess ist.

Der Prozess, der den Initialisierung -Service zum Initialisieren eines neu erstellten Prozesses aufruft, muss mit dem Prozess identisch sein, der den Kreatp -Service zum Erstellen des neuen Prozesses aufgerufen hat.

In "Kernelprozesse verwenden" in Programmierkonzepte für Kernelerweiterungen und Einheitenunterstützung wird weiter erläutert, wie der Initialisierung -Kernel-Service den vom Kreatp -Service begonnenen Initialisierungsprozess ausführt.

Der Parameter Pid gibt den zu initialisierenden Prozess an. Sie muss gültig sein und einen Prozess angeben, der sich im SIDL-Status (Leerlauf) befindet.

Der Parameter Name verweist auf eine Zeichenfolge, die den Prozess benennt. Die führenden Zeichen dieser Zeichenfolge werden in die Benutzerstruktur kopiert. Die Anzahl der kopierten Zeichen ist implementierungsabhängig, aber mindestens vier werden immer kopiert.

Der Parameter Funktion gibt den Haupteingangspunkt des Prozesses an. Der neue Prozess wird für die Ausführung dieser Funktion vorbereitet. Wenn der Init_Parms -Parameter nicht null ist, verweist er auf Daten, die an diese Routine übergeben wurden. Die Parameterstruktur muss zwischen dem initialisierten und initialisierten Prozess vereinbart werden. Der Initialisierung -Service kopiert die Daten, die durch den Parameter init_parameter angegeben werden (mit der exakten Anzahl der Byte, die durch den Parameter Parameterlänge angegeben werden), in den Stack des neuen Prozesses.

Ausführungsumgebung

Der Kernel-Service Initialisierung kann nur über Prozessumgebung aufgerufen werden.

Beispiel

Geben Sie Folgendes ein, um den Kernelprozess zu initialisieren, der die Funktion Haupt_kprocausführt:

{ 
.
.
.
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 );
        .
        .
        .
} 

Rückgabewerte

Element Beschreibung
0 Zeigt eine erfolgreiche Operation an.
ENODEW Der Prozess konnte nicht geplant werden, da er über einen Prozessoranschluss verfügt, der keine verfügbaren Prozessoren enthält. Dies kann durch die dynamische Prozessorfreigabe verursacht werden.
ENOMEM Gibt an, dass nicht genügend Speicher zum Initialisieren des Prozesses vorhanden war.
EINVAL Gibt einen ungültigen Parameter Pid an.