initp 内核服务

用途

将内核进程的状态从空闲更改为就绪。

语法

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

参数

描述
pid 指定要初始化的流程的流程标识。
函数 指定进程的初始化例程。
初始化参数 指定指向初始化参数的指针。
parms_length 指定初始化参数的时间长度。
名称 指定进程名称。

描述

初始化 内核服务完成 内核进程 从空闲状态到就绪状态的转换。 进程的空闲状态是由 p_status == SIDL表示的。 在调用 初始化 服务之前,会调用 克里特普 服务以创建流程。 克里特普 服务会分配并初始化流程表条目。

初始化 服务创建并初始化 process-private 段。 进程表条目中的 p_flag 字段中设置的位会将该进程标记为内核进程。 此位,即 SKPROC 位,表示该进程是内核进程。

调用 初始化 服务以初始化新创建的进程的进程必须与调用 克里特普 服务以创建新进程的进程相同。

"使用内核进程"内核扩展和设备支持编程概念 进一步说明了 初始化 内核服务如何完成由 克里特普 服务开始的初始化过程。

参数用于标识要初始化的进程。 它必须有效,并标识处于 SIDL (空闲) 状态的进程。

名称 参数指向一个字符串,该字符串指定进程。 此字符串的前导字符将复制到用户结构中。 复制的字符数依赖于实现,但至少有 4 个字符始终复制。

丰克 参数表示进程的主要入口点。 新进程已准备就绪,可以运行此功能。 如果 init_parms 参数不为空,那么它指向传递到此例程的数据。 在初始化过程和初始化过程之间必须一致同意参数结构。 初始化 服务将数据的 初始化参数 参数指定的数据 ( parms_length 参数指定的确切字节数) 复制到新进程的堆栈。

执行环境

仅可从 流程环境 调用 初始化 内核服务。

示例

要初始化运行函数 main_kproc的内核进程,请输入:

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

返回值

描述
重大安全事件数量 指示操作成功。
ENODEV 无法调度该进程,因为它具有一个不包含任何可用处理器的处理器连接。 这可能是由动态处理器释放引起的。
ENOMEM 指示没有足够的内存来初始化该进程。
EINVAL 指定无效的 参数。