Compartir a través de


Modo de usuario frente al modo kernel

Se puede escribir un sintetizador personalizado para que se ejecute en modo de usuario o en modo kernel. En general, los sintetizadores de software son más fáciles de implementar en modo de usuario, pero con frecuencia pueden lograr una menor latencia en el modo kernel. Los componentes de hardware solo se pueden admitir en modo kernel. Sin embargo, existen buenas razones para comenzar el desarrollo en modo de usuario aunque la implementación final se ejecute en modo kernel.

La creación de sintetizadores de software (y receptores de onda) es mucho más sencillo en el modo de usuario. Las interfaces en modo de usuario son fáciles de usar y se simplifica la depuración. Otra ventaja es que el componente resultante es un archivo ejecutable de Microsoft Windows. Dado que este archivo ejecutable es un objeto COM, instalarlo es simplemente una cuestión de autoregistrarse desde la línea de comandos con regsvr32.exe. (La aplicación del sistema RegSvr32 llama a la función DllRegisterServer de la DLL. Para obtener más información, consulte la documentación de Microsoft Windows SDK).

Si una implementación en modo de usuario es todo lo que necesita, puede entregar el producto con un programa de aplicación en lugar de un controlador. El usuario evita un proceso complicado de instalación de controladores y no se necesita ningún reinicio después de la instalación. Después, el componente en modo de usuario se puede enumerar como uno de los puertos disponibles, en función de si desea que otras aplicaciones puedan usarla. Para obtener más información, consulte Registro del sintetizador.

La ventaja de una implementación de software en modo kernel es una latencia menor. Sin embargo, con la llegada de mensajes con marca de tiempo, esta ventaja no es tan grande como solía ser. Las API MIDI heredadas no tenían marca de tiempo, por lo que cuando jugaste una nota, que era exactamente cuando estaba en cola para jugar. La marca de tiempo permite poner notas en cola para reproducir en momentos especificados en el futuro. El uso de la marca de tiempo significa que la nota se reproduce en el momento correcto a menos que la advertencia anticipada sea menor que la latencia inherente al sistema.

La latencia es solo un problema cuando los sonidos se ponen en cola para reproducir con poca o ninguna advertencia anticipada. Por lo tanto, las implementaciones en modo kernel solo se recomiendan cuando hay una limitación no deseada a una implementación de software en modo de usuario o al admitir la aceleración de hardware.

Si decide realizar una implementación en modo kernel, el mejor enfoque es seguir iniciando el desarrollo en modo de usuario. El código fuente de la sintaxis en modo de usuario de Microsoft se proporciona en el Kit de controladores de Microsoft Windows (WDK), por lo que no tiene que escribir un nuevo sintetizador desde cero. Puede usar el código existente para comprender cómo se analizan las descargas de sonidos descargables (DLS). A continuación, puede agregar cualquier nueva funcionalidad (por ejemplo, analizar fragmentos adicionales) y depurar esta lógica en el modo de usuario en primer lugar, mediante el código auxiliar de las rutinas que acceden al hardware. (Una rutina de código auxiliar puede hacer nada o emular la función de hardware en el software). Para obtener más información sobre DLS, consulte la documentación de Windows SDK.

Cuando la implementación funcione en modo de usuario, puede bajarla al modo kernel y hacer que funcione allí. Después de que la versión de software funcione en modo kernel, el siguiente paso es empezar a mover la funcionalidad al hardware. Los sintetizadores de software en modo de usuario y modo kernel sirven como pasos intermedios útiles en el proceso de poner en funcionamiento el sintetizador de hardware.

Para resumir las recomendaciones anteriores:

  • En el caso de los componentes de solo software, implemente primero los componentes en modo de usuario (para solucionar los problemas de diseño con interfaces sencillas, depuración, instalación y eliminación) y, a continuación, convierta en modo kernel si es necesario debido a la latencia u otras consideraciones.

  • En el caso de los componentes de hardware, primero implemente una versión de software en modo de usuario (con el fin de resolver los problemas de diseño con interfaces sencillas, depuración, instalación y eliminación) y, a continuación, conviértala en una versión de software en modo kernel. Por último, conecte el componente en modo kernel al hardware, una característica a la vez, hasta que todo funcione según lo deseado.