¿Qué son las llamadas a procedimientos diferidos?

Una llamada a procedimiento diferido (DPC) es un mecanismo de manejo de interrupciones en el sistema operativo Microsoft Windows al que los controladores pueden hacer referencia cuando ejecutan ciertos procesos. DPC permite que una tarea se active, pero no se ejecute, desde un nivel de solicitud de interrupción de alta prioridad (IRQL). Esto permite que un controlador procese una rutina de servicio de interrupción de alto nivel (ISR) rápidamente mientras pospone la ejecución de códigos IRQL de nivel inferior. Los controladores utilizan DPC para programar operaciones de entrada / salida (E / S). Los controladores son software que utiliza Windows para comunicarse con dispositivos de hardware.

Traslados

Un controlador de dispositivo en modo kernel maneja convencionalmente la transferencia de un flujo de datos de audio o video desde o hacia un dispositivo externo. El procesamiento de datos de los controladores de dispositivo está controlado por interrupciones. El hardware externo genera interrupciones de forma rutinaria para solicitar al controlador del dispositivo que transfiera el siguiente lote de datos. Un controlador de dispositivo no puede procesar datos instantáneamente en su rutina de interrupción; por lo tanto, el sistema operativo necesita activar una rutina de devolución de llamada, que es el DPC. El modo de núcleo, o modo de sistema, y ​​el modo de usuario son los modos de operación de su unidad central de procesamiento. El kernel controla todas las actividades de procesamiento del sistema.

Planificación

El concepto de llamada a procedimiento diferido existe solo en modo kernel. El sistema operativo mantiene los DPC programados por los controladores de dispositivo en una cola. Si su sistema necesita procesar interrupciones, el kernel verifica la cola DPC y ejecuta la primera DPC si no hay interrupciones ni procesos DPC en ejecución. El DPC es el subproceso de mayor prioridad en el sistema, ya que el procesamiento de la cola de DPC se produce antes de que el despachador elija un subproceso y lo asigne a la CPU. Los CPD tienen tres niveles de prioridad: bajo, medio y alto.

Procesos

Cada DPC está vinculado con un objeto DPC definido por el sistema. Cuando un controlador registra una rutina DPCForslr, el sistema inicializa el objeto DPC previamente definido. Si se requiere más de un DPC, un controlador crea objetos DPC adicionales conocidos como rutinas CustomDPC. La rutina DPCForlsr maneja varios procesos; completa la operación de E / S descrita por los paquetes de solicitud de entrada / salida (IRP), desactiva el siguiente IRP, establece el estado de entrada / salida en el IRP recibido y el proceso para completar la solicitud.

Rutinas

Normalmente, un controlador de dispositivo que tiene una rutina de servicio de interrupción tiene al menos una rutina DPCForIsr o CustomDPC para completar el procesamiento de operaciones de E / S controladas por interrupciones. Según Open Systems Resources, Inc., la razón fundamental por la que un controlador tiene una única rutina DPCForlsr, un conjunto de rutinas CustomDPC o ambas depende de la naturaleza de su dispositivo subyacente y del conjunto de solicitudes de E / S que debe admitir. El ISR de un controlador debe llamar a IoRequestDPC para operaciones de E / S controladas por interrupciones mediante rutinas DPCForlsr. Por el contrario, para operaciones superpuestas, operaciones de E / S controladas por interrupciones que utilizan rutinas CustomDPC, ISR necesita llamar a KeInsertQueueDPC.