kra_thread_create Kernel Service

Finalidad

Crea una nueva hebra de kernel en el proceso de llamada y adjunta la nueva hebra de kernel a un conjunto de recursos.

Sintaxis

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

Descripción

El servicio de kernel de kra_thread_create crea una nueva hebra de sólo kernel en el proceso de kernel que llama y adjunta la nueva hebra de kernel a un conjunto de recursos tal como se especifica en los parámetros rstype y rsid . Después de crear la hebra de kernel, se devuelve el ID de la nueva hebra de kernel. El ID devuelto de la nueva hebra de kernel es exclusivo en todo el sistema.

El servicio de kernel de kra_thread_create se puede utilizar de forma similar al servicio de kernel de thread_create para crear una nueva hebra de kernel en el proceso de llamada.

La nueva hebra de kernel no se inicia inmediatamente después de que se cree y el estado de la nueva hebra de kernel se establece en TSIDL. La nueva hebra de kernel se inicia después de una llamada al servicio de kernel de kthread_start . Si el nuevo proceso de hebra de kernel sale antes de que se inicie la nueva hebra de kernel, los recursos de la nueva hebra de kernel se liberan inmediatamente. La máscara de señal de la nueva hebra de kernel se hereda de la hebra de llamada y se borra el conjunto de señales pendientes de la hebra de kernel. Si la nueva hebra del kernel está en el estado TSIDL , todas las señales que se envían a la nueva hebra de kernel se marcan como Pendiente.

Para conectar correctamente una hebra de kernel a un conjunto de recursos, deben cumplirse las condiciones siguientes:
  • El conjunto de recursos debe contener procesadores que están disponibles en el sistema.
  • El proceso de llamada debe tener la autorización root o tener la capacidad CAP_NUMA_ATTACH .
  • El proceso de llamada debe tener la autorización root o tener el mismo ID de usuario efectivo que el del proceso de destino.
  • La hebra de llamada no debe tener enlaces de procesador bindprocessor con un procesador.
  • El conjunto de recursos debe estar contenido en el conjunto de recursos de partición del proceso de llamada.

Parámetros

Elemento Descripción
RSTYPE Especifica el tipo de conjunto de recursos al que se adjuntará la nueva hebra de kernel del proceso de llamada. Los valores válidos son:
  • R_RSET: conjunto de recursos.
  • R_SRADID: Identificador de dominio de asignación de recursos del planificador (ID SRAD).
rsid Especifica el conjunto de recursos que está asociado al parámetro rstype . Los valores válidos son:
  • Conjunto de recursos (cuando rstype = R_RSET): Establezca el campo rsid_t at_rset en el conjunto de recursos que desee.
  • SRADID (cuando rstype = R_SRADID): Establezca el campo rsid_t at_sradid en el ID de SRAD que desee.
distintivos (Reservado) Reservado para uso futuro. Puede especificar el valor como 0.

Valores de retorno

Tras la finalización satisfactoria, el servicio de kernel de kra_thread_create devuelve un valor de cero (0). Si no es satisfactorio, el servicio de kernel kra_thread_create devuelve uno de los siguientes errores:

Elemento Descripción
EINVAL Indica una de las condiciones siguientes:
  • El parámetro rstype contiene un identificador de tipo no válido.
  • El parámetro Banderas contiene un valor no válido.
ENDEV El conjunto de recursos especificado no contiene un procesador que esté disponible en el sistema.
EFAULT Dirección no válida.
EPERM Indica una de las condiciones siguientes:
  • El proceso de llamada no tiene la autorización raíz ni el privilegio de conexión de CAP_NUMA_ATTACH .
  • El proceso de llamada contiene una o más hebras con un enlace de procesador de enlace al procesador.
  • El conjunto de recursos especificado no se incluye en el conjunto de recursos de partición del proceso de llamada.
ENOMEM La memoria disponible no es suficiente para crear la hebra del kernel.
FEAGA

El número total de hebras de kernel que se ejecutan en todo el sistema o el número máximo de hebras de kernel por proceso se superarían.

ENOTSUP El servicio de kernel de kra_thread_create se llama directamente desde una extensión de kernel.