initp-Kernel-Service
Zweck
Ändert den Status eines Kernelprozesses von inaktiv in bereit.
Syntax
#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;
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. |