kra_thread_create 内核服务

用途

在调用进程中创建新的内核线程,并将新的内核线程连接到资源集。

语法

#include <sys/rset.h> 
tid_t kra_thread_create (rstype, rsid, flags)
rstype_t rstype; 
rsid_t rsid;
unsigned int flags;

描述

kra_thread_create 内核服务在调用内核进程中创建一个新的仅内核线程,并将新内核线程连接到 雷斯特佩Rsid 参数中指定的资源集。 在创建内核线程之后,将返回新内核线程的标识。 新内核线程的返回标识在整个系统中是唯一的。

kra_thread_create 内核服务可以与 thread_create 内核服务类似使用,以在调用进程中创建新的内核线程。

创建新内核线程后,它不会立即启动,并且新内核线程的状态设置为 TSIDL。 在调用 kthread_start 内核服务后,新内核线程将启动。 如果新内核线程进程在新内核线程启动之前退出,那么将立即释放新内核线程的资源。 从调用线程继承新内核线程的信号掩码,并清除内核线程的暂挂信号集。 如果新内核线程处于 TSIDL 状态,那么会将发送到新内核线程的所有信号标记为 暂挂

要成功将内核线程连接到资源集,必须满足以下条件:
  • 该资源集必须包含在系统中可用的处理器。
  • 调用过程必须具有 root 用户权限或者具有 CAP_NUMA_ATTACH 功能。
  • 调用进程必须具有 root 用户权限,或者具有与目标进程相同的有效用户标识。
  • 调用线程不能具有到处理器的 bindprocessor 绑定。
  • 该资源集必须包含在调用进程的分区资源集内。

参数

描述
雷斯特佩 指定资源集类型,调用进程的新内核线程将连接到该资源集类型。 有效值为:
  • R_RSET: 资源集。
  • R_SRADID: 调度程序资源分配域标识 (SRAD ID)。
Rsid 指定与 雷斯特佩 参数相关联的资源集。 有效值为:
  • 资源集 (当 雷斯特佩 = R_RSET 时): 将 rsid_t at_rset 字段设置为您需要的资源集。
  • SRADID (当 雷斯特佩 = R_SRADID 时):rsid_t at_sradid 字段设置为您需要的 SRAD 标识。
标志 保留以供将来使用。 您可以将值指定为 0。

返回值

在成功完成时, kra_thread_create 内核服务会返回值零 (0)。 如果不成功,那么 kra_thread_create 内核服务将返回下列其中一个错误:

描述
EINVAL 指示下列其中一种情况:
  • 雷斯特佩 参数包含无效的类型标识。
  • 标志 参数包含无效的值。
ENODEV 指定的资源集不包含在系统中可用的处理器。
EFAULT 地址无效。
EPERM 指示下列其中一种情况:
  • 调用进程既不具有 root 用户权限,也不具有 CAP_NUMA_ATTACH 连接特权。
  • 调用进程包含一个或多个具有与处理器绑定的绑定处理器的线程。
  • 指定的资源集未包含在调用进程的分区资源集中。
ENOMEM 没有足够的可用内存来创建内核线程。
EAGAIN

将超过执行系统范围内的内核线程总数或每个进程的最大内核线程数。

ENOTSUP kra_thread_create 内核服务是直接从内核扩展调用的。