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, 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 | 指定无效的 平 参数。 |