Muy chulo. WSL9x no convierte Linux en un driver; lo que hace es usar un VxD como loader y runtime para ejecutar un kernel Linux directamente en ring 0 dentro de Windows 9x.
El flujo real es bastante claro mirando el código:
El VxD implementa un loader ELF mínimo (loader.c + elf.h) que abre vmlinux.elf vía interrupciones DOS, parsea las secciones y las mapea en memoria en una dirección fija (0xd0000000).
La memoria se reserva con APIs internas del VMM (PageReserve, PageCommit), o sea, Linux vive en memoria del sistema, no como proceso ni como módulo “formal”.
Luego el driver crea un hilo en la System VM, le asigna una pila (16 KiB) y hace un salto directo al entrypoint del kernel (_start).
A partir de ahí no hay virtualización: ambos kernels comparten ring 0. El VxD mantiene un bucle de control (ver entry.c) que se encarga de:
entrar/salir de Linux
despachar IRQs (hay una máscara de pendientes tipo pending_irqs)
idle/scheduling cooperativo
El flujo real es bastante claro mirando el código:
El VxD implementa un loader ELF mínimo (loader.c + elf.h) que abre vmlinux.elf vía interrupciones DOS, parsea las secciones y las mapea en memoria en una dirección fija (0xd0000000).
La memoria se reserva con APIs internas del VMM (PageReserve, PageCommit), o sea, Linux vive en memoria del sistema, no como proceso ni como módulo “formal”.
Luego el driver crea un hilo en la System VM, le asigna una pila (16 KiB) y hace un salto directo al entrypoint del kernel (_start).
A partir de ahí no hay virtualización: ambos kernels comparten ring 0. El VxD mantiene un bucle de control (ver entry.c) que se encarga de:
entrar/salir de Linux
despachar IRQs (hay una máscara de pendientes tipo pending_irqs)
idle/scheduling cooperativo
El handling de syscalls es especialmente… » ver todo el comentario