Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una abstracción para un subproceso de hardware en el que un proxy del subproceso puede ejecutarse.
Sintaxis
struct IVirtualProcessorRoot : public IExecutionResource;
Miembros
Métodos públicos
| Nombre | Descripción |
|---|---|
| IVirtualProcessorRoot::Activate | Hace que el hilo proxy asociado con la interfaz de contexto de ejecución pContext comience a ejecutarse en este núcleo del procesador virtual. |
| IVirtualProcessorRoot::Deactivate | Hace que el proxy de hilo que se ejecuta actualmente en esta raíz del procesador virtual deje de despachar el contexto de ejecución. El proxy de hilo reanudará la ejecución cuando se llame al método Activate. |
| IVirtualProcessorRoot::EnsureAllTasksVisible | Hace que los datos almacenados en la jerarquía de memoria de los procesadores individuales sean visibles para todos los procesadores del sistema. Garantiza que se ha ejecutado una barrera de memoria completa en todos los procesadores antes de que se devuelva el método. |
| IVirtualProcessorRoot::GetId | Devuelve un identificador único para la raíz del procesador virtual. |
Comentarios
Cada raíz del procesador virtual tiene un recurso de ejecución asociado. La interfaz IVirtualProcessorRoot hereda de la interfaz IExecutionResource. Varias raíces del procesador virtual pueden corresponder al mismo subproceso de hardware subyacente.
El Administrador de Recursos concede raíces del procesador virtual a los planificadores en respuesta a las solicitudes de recursos. Un planificador puede usar una raíz de procesador virtual para llevar a cabo el trabajo activándolo con un contexto de ejecución.
Jerarquía de herencia
IVirtualProcessorRoot
Requisitos
Encabezado: concrtrm.h
Espacio de nombres: simultaneidad
IVirtualProcessorRoot::Activate (Método)
Hace que el proxy del hilo, asociado a la interfaz de contexto de ejecución pContext, comience a ejecutarse en esta raíz del procesador virtual.
virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;
Parámetros
pContext
Interfaz al contexto de ejecución que se enviará en esta raíz del procesador virtual.
Comentarios
El Administrador de Recursos proporcionará un proxy de subproceso si no hay uno asociado a la interfaz del contexto de ejecución pContext.
El método Activate se puede usar para empezar a ejecutar trabajo en una nueva raíz del procesador virtual devuelta por Resource Manager, o para reanudar el proxy de subproceso en una raíz del procesador virtual que se ha desactivado o está a punto de desactivarse. Consulte IVirtualProcessorRoot::Deactivate para más información sobre la desactivación. Al reanudar una raíz de procesador virtual desactivada, el parámetro pContext debe ser el mismo que el parámetro usado para desactivar la raíz del procesador virtual.
Una vez que una raíz del procesador virtual se ha activado por primera vez, los pares posteriores de llamadas a Deactivate y Activate pueden competir entre sí. Esto significa que es aceptable que Resource Manager reciba una llamada a Activate antes de recibir la llamada a Deactivate que estaba prevista.
Al activar una raíz del procesador virtual, se indica a Resource Manager que esta raíz del procesador virtual está ocupada actualmente con trabajo. Si el programador no encuentra ningún trabajo para ejecutar en esta raíz, se espera que invoque el método Deactivate que informa a Resource Manager de que la raíz del procesador virtual está inactiva. Resource Manager usa estos datos para equilibrar la carga del sistema.
Se emite invalid_argument si el argumento pContext tiene el valor NULL.
Se lanza invalid_operation si el argumento pContext no representa el contexto de ejecución que ha sido despachado más recientemente por esta raíz del procesador virtual.
La acción de activar un núcleo virtual del procesador aumenta el nivel de suscripción del subproceso de hardware subyacente en uno. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::Desactivar (Método)
Hace que el proxy de hilo que se ejecuta actualmente en esta raíz del procesador virtual deje de despachar el contexto de ejecución. El proxy de hilo reanudará la ejecución cuando se llame al método Activate.
virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;
Parámetros
pContext
Contexto que esta raíz envía actualmente.
Valor devuelto
Un valor booleano. Un valor de true indica que el proxy de subproceso ha sido devuelto del método Deactivate en respuesta a una llamada al método Activate. Un valor de false indica que el proxy de subproceso se ha devuelto del método en respuesta a un evento de notificación en Resource Manager. En un programador de subprocesos programables en modo de usuario (UMS), indica que los elementos han aparecido en la lista de finalización del programador y es necesario que el programador los controle.
Comentarios
Utilice este método para detener temporalmente la ejecución de un núcleo de procesador virtual cuando no haya trabajo disponible en el programador. Una llamada al método Deactivate debe originarse en el método Dispatch del contexto de ejecución con el que se activó por última vez la raíz del procesador virtual. Es decir, el proxy de subproceso que invoca al método Deactivate debe ser el que se está ejecutando actualmente en el núcleo del procesador virtual. Llamar al método en una raíz del procesador virtual en la que no se está ejecutando podría dar lugar a un comportamiento indefinido.
Se puede reactivar una raíz del procesador virtual desactivada con una llamada al método Activate, con el mismo argumento que se pasó al método Deactivate. El programador es responsable de garantizar que se emparejan las llamadas a los métodos Activate y Deactivate, pero no es necesario que se reciban en un orden específico. Resource Manager puede controlar la recepción de una llamada al método Activate antes de recibir una llamada al método Deactivate para el que estaba destinado.
Si se reactiva una raíz del procesador virtual y el valor devuelto del método Deactivate es false, el programador debe consultar la lista de finalización de UMS a través del método IUMSCompletionList::GetUnblockNotifications, actuar sobre esa información y, a continuación, llamar al método Deactivate de nuevo. Esto debe repetirse hasta que el método Deactivate devuelva el valor true.
Se emite invalid_argument si el argumento pContext tiene el valor NULL.
Se emite invalid_operation si la raíz del procesador virtual nunca se ha activado o el argumento pContext no representa el contexto de ejecución que esta raíz del procesador virtual envió más recientemente.
La acción de desactivar un núcleo virtual del procesador disminuye el nivel de asignación del subproceso de hardware subyacente en uno. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::EnsureAllTasksVisible (Método)
Hace que los datos almacenados en la jerarquía de memoria de los procesadores individuales sean visibles para todos los procesadores del sistema. Garantiza que se ha ejecutado una barrera de memoria completa en todos los procesadores antes de que se devuelva el método.
virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;
Parámetros
pContext
El contexto que está siendo enviado actualmente por esta raíz del procesador virtual.
Comentarios
Es posible que este método le resulte útil cuando quiera sincronizar la desactivación de una raíz del procesador virtual con la adición de un nuevo trabajo al programador. Por motivos de rendimiento, puede decidir agregar elementos de trabajo al programador sin ejecutar una barrera de memoria, lo que significa que los elementos de trabajo agregados por un subproceso que se ejecuta en un procesador no son visibles inmediatamente para todos los demás procesadores. Al usar este método junto con el método Deactivate, puede asegurarse de que su planificador no desactiva sus raíces del procesador virtual cuando haya elementos de trabajo en sus colecciones de planificador.
Una llamada al método EnsureAllTasksVisibleThe debe originarse en el método Dispatch del contexto de ejecución con el que se activó por última vez la raíz del procesador virtual. Es decir, el proxy del hilo que invoca al método EnsureAllTasksVisible debe ser aquel que esté ejecutándose actualmente en la raíz del procesador virtual. Llamar al método en una raíz del procesador virtual en la que no se está ejecutando podría dar lugar a un comportamiento indefinido.
Se emite invalid_argument si el argumento pContext tiene el valor NULL.
Se emite invalid_operation si la raíz del procesador virtual nunca se ha activado o el argumento pContext no representa el contexto de ejecución que esta raíz del procesador virtual envió más recientemente.
Método IVirtualProcessorRoot::GetId
Devuelve un identificador único para la raíz del procesador virtual.
virtual unsigned int GetId() const = 0;
Valor devuelto
Identificador entero.