Las interrupciones en el vector de modo protegido para la Tabla del Descriptor de Interrupciones [Interrupt Descriptor Table (IDT)]. VMM supervisa la IDTs de VMs con la ayuda de VxDs. Normalmente VMM maneja casi todas las entradas en IDTs. Suministra manejadores de interrupciones de primer nivel que salvan en la pila el estado del programa interrumpido y transfieren el control al manejador de interrupciones del segundo nivel el cual puede ser suministrado por varias VxDs para su actual procesamiento. Cuando termina la tarea del manejador del segundo nivel, se transfiere el control a la rutina de reiteración de despacho [redispatch routine] que restaurará el estado del programa interrumpido y resumirá la ejecución en el punto de interrupción.
La descripción anterior está supersimplificada. La reiteración del despacho [redispatch] no puede ser inmediato debido a que el lapso de tiempo de la VM interrumpida puede expirar. Las VxDs pueden instalar manejadores de interrupción a través de servicios VMM tales como Set_PM_Int o Hook_V86_Int_Chain. Las VxDs no deben modificar las entradas IDT directamente (pero puedes hacerlo si estás seguro de que sabes lo que estás haciendo)
La tarea del planificador primario es escoger el hilo con mayor prioridad de ejecución para correr. Esta selección ocurre mientras la VMM está sirviendo una interrupción (tales como interrupciones del temporizador). El lado exterior determina a cuál hilo/VM le será entregado el control cuando la VMM regrese de servir la interrupción. El planificador primario trabaja bajo la regla de todo o nada. Sea que un hilo va a ser corrido o sea que no. Sólo se elige un hilo. VMM y otras VxDs pueden aumentar/ajustar la prioridad de ejecución de los servicios de los hilos a través de los servicios VMM. Por ejemplo, si ocurre una interrupción de hardware, VMM aumentará la prioridad de ejecución del manejador de interrupciones de manera que tenga la más alta probabilidad de terminación en el tiempo más corto posible.
El planificador secundario usa los servicios del planificador primario para localizar tiempo de CPU entre los hilos que comparten la más alta prioridad de ejecución dando a cada hilo un lapso de tiempo. Cuando ejecuta un hilo hasta que el lapso de tiempo expira, el planificador secundario aumenta la prioridad de ejecución del siguiente hilo de manera que será elegido por el planificador primario para que corra.
Puedes obtener mayores detalles
sobre estos temas leyendo Walter Oney's Systems Programming
for Windows 95 y la documentación de la Windows
95 DDK.
[Iczelion's Win32 Assembly Homepage]
n u M I T_o r's Programming Page
Este tutorial, original de Iczelion, ha sido traducido por: n u M I T_o r