Compartir a través de


Arquitectura de MCDM

En este artículo se describen los conceptos de arquitectura del modelo de controlador de proceso de Microsoft (MCDM). Un controlador MCDM o un controlador de solo proceso tiene un controlador en modo kernel ( controlador.sys ) y una biblioteca de vínculos dinámicos en modo de usuario (DLL).

Consulte también:

Cola de comandos

Una cola de comandos es una construcción DirectCompute utilizada para el envío de trabajo. El controlador es responsable de crear uno o varios contextos que usará para llevar a cabo la ejecución del trabajo enviado. El controlador es responsable de convertir el trabajo expresado a través de llamadas a su DDI en búferes DMA que luego envía a un contexto para su ejecución.

Context

Un contexto es una cola de trabajo computacional enviado por un controlador destinado a un motor con estado específico de la instancia. El trabajo computacional se expresa como búferes DMA que se mantienen en una cola SW en espera de su envío al motor.

Cola SW

Los búferes DMA enviados para su ejecución a un contexto se mantienen en una cola sw. La longitud de una cola de SW solo está limitada por los recursos. Hay una asociación uno a uno entre un contexto y su cola sw correspondiente. Es responsabilidad del programador quitar los búferes DMA de la cola sw y enviar los búferes al motor adecuado que, a su vez, coloca el búfer en su propia cola de HW.

Scheduler

El sistema operativo implementa el programador y el controlador no tiene control sobre esta programación.

Scheduler es responsable de programar el trabajo en cola en colas sw que se dirigen a los motores. Garantiza un uso justo de los recursos limitados del motor en todas las colas de SW y funcionará según sea necesario para garantizar esta equidad y asegurarse de que el trabajo de mayor prioridad se completa de forma oportuna.

Cuando el programador adelanta el trabajo, es responsable de volver a poner en cola el trabajo que se adelantó.

Motor

Un motor ejecuta las acciones necesarias para completar el trabajo expresado en una secuencia de búferes DMA. Cada búfer DMA se ejecuta en un contexto y un espacio de direcciones determinado. El motor debe indicar cuándo se completa la ejecución de un búfer DMA y estas indicaciones deben proporcionarse en el mismo orden en el que se recibieron los búferes DMA .

Se espera que un motor pueda avanzar de forma independiente en ausencia de dependencias explícitas o implícitas expresadas en los búferes DMA. Si existen dos o más motores , se programarán con la suposición de que el trabajo de cada motor continuará de forma oportuna y sin deterioro del trabajo realizado en otros motores.

Dado que un búfer DMA se ejecuta con un espacio de direcciones determinado, solo se pueden admitir varios motores si cada motor es capaz de ejecutar búferes DMA en diferentes espacios de direcciones.

Un controlador determina cuántos motores notifica y cómo usan el contexto que crea estos motores.

Cola de HW

Un motor recibirá una secuencia de búferes DMA que se colocan conceptualmente en una cola denominada cola de HW. Actualmente, esta cola solo se rellena con como máximo dos entradas de búfer DMA . Un motor debe completar los búferes DMA en el orden de envío.

Adelantamiento

Un motor debe ser capaz de adelantarse, lo que permite interrumpir o cancelar la ejecución de búferes DMA completados parcialmente.

Cuando se solicita que preempte el trabajo pendiente, un motor debe admitir mínimamente la finalización de los búferes DMA completados parcialmente y cancelar todos los búferes DMA que aún no se han iniciado.

La indicación de finalización o adelantamiento de los búferes DMA debe realizarse en el orden en que se enviaron los búferes DMA . Si se adelanta un búfer DMA , todos los búferes DMA subsiguientes (actualmente como máximo un otro búfer) también se adelanten.

Si se ejecuta parcialmente un búfer DMA , el controlador debe guardar suficiente información para la reanudación de su ejecución.

Búfer DMA

El controlador convierte el trabajo enviado a través de llamadas a su DDI en búferes DMA que luego se envían para su ejecución. Un motor ejecuta las acciones necesarias para completar el trabajo expresado en una secuencia de búferes DMA. Cada búfer DMA se ejecuta en un contexto y un espacio de direcciones determinado. El motor debe indicar cuándo se completa la ejecución de un búfer DMA y estas indicaciones deben proporcionarse en el mismo orden en el que se recibieron los búferes DMA .

Espacio de direcciones

Un espacio de direcciones se usa para asignar direcciones de dispositivo virtual a direcciones de dispositivo físico. Se usa un único espacio de direcciones para cada proceso del lado host.

Los motores son un recurso compartido entre procesos y, por tanto, deben admitir el cambio entre espacios de direcciones , ya que los búferes DMA se ejecutan desde diferentes procesos.

Los dispositivos que solo admiten un espacio de direcciones deben restringirse en cómo se usan. Solo se permitirá un proceso a la vez para usar el dispositivo. Mientras un proceso usa el dispositivo, se producirá un error en todos los intentos realizados por otros procesos para acceder al dispositivo. Los dispositivos que solo pueden admitir el acceso mediante un único proceso se conocen como dispositivos de uso único .

Un espacio de direcciones se especifica mediante un único puntero a la tabla de página raíz del espacio de direcciones. Un cambio en un espacio de direcciones diferente solo requiere especificar una dirección de tabla de página raíz diferente.

El sistema operativo administra una tabla de páginas de espacio de direcciones. Para realizar cambios en la tabla de páginas, el sistema operativo realiza solicitudes al controlador para registrar estos cambios en búferes DMA que se envían posteriormente al motor adecuado en el momento adecuado.