Mode utilisateur par rapport au mode noyau
Un synthé personnalisé peut être écrit pour s’exécuter en mode utilisateur ou en mode noyau. En général, les synthés logiciels sont plus faciles à implémenter en mode utilisateur, mais ils peuvent souvent obtenir une latence plus faible en mode noyau. Les composants matériels ne peuvent être pris en charge qu’en mode noyau. Toutefois, il existe de bonnes raisons de commencer le développement en mode utilisateur, même si l’implémentation finale est de s’exécuter en mode noyau.
La création de synthétiseurs logiciels (et de récepteurs d’ondes) est beaucoup plus simple en mode utilisateur. Les interfaces en mode utilisateur sont faciles à utiliser et le débogage est simplifié. Un autre avantage est que le composant résultant est un fichier exécutable Microsoft Windows. Étant donné que ce fichier exécutable est un objet COM, son installation est simplement une question d’inscription automatique à partir de la ligne de commande avec regsvr32.exe. (L’application système RegSvr32 appelle la fonction DllRegisterServer de votre DLL. Pour plus d’informations, consultez la documentation Microsoft Windows SDK.)
Si une implémentation en mode utilisateur est tout ce dont vous avez besoin, vous pouvez fournir votre produit avec un programme d’application au lieu d’un pilote. L’utilisateur évite un processus d’installation de pilote complexe et aucun redémarrage n’est nécessaire après l’installation. Votre composant en mode utilisateur peut ensuite être énuméré comme l’un des ports disponibles, selon que vous souhaitez que d’autres applications puissent l’utiliser. Pour plus d’informations, consultez Inscription de votre synthétiseur.
L’avantage d’une implémentation logicielle en mode noyau est une latence plus faible. Avec l’avènement des messages horodatés, cet avantage n’est pas aussi grand qu’auparavant. Les API MIDI héritées n’avaient pas d’horodatage. Par conséquent, lorsque vous liez une note, c’était exactement à ce moment-là qu’elle était mise en file d’attente pour la lecture. L’horodatage permet de mettre en file d’attente les notes à lire à des heures spécifiées à l’avenir. L’utilisation de l’horodatage signifie que la note est lue au bon moment, sauf si l’avertissement préalable est inférieur à la latence inhérente au système.
La latence n’est un problème que lorsque les sons sont mis en file d’attente pour être lus avec peu ou pas d’avertissement préalable. Ainsi, les implémentations en mode noyau sont recommandées uniquement lorsqu’il existe une limitation indésirable à une implémentation logicielle en mode utilisateur ou lors de la prise en charge de l’accélération matérielle.
Si vous décidez d’effectuer une implémentation en mode noyau, la meilleure approche consiste toujours à commencer le développement en mode utilisateur. Le code source du synthé en mode utilisateur de Microsoft est fourni dans microsoft Windows Driver Kit (WDK), vous n’avez donc pas besoin d’écrire un nouveau synthé à partir de zéro. Vous pouvez utiliser le code existant pour comprendre comment les téléchargements de sons téléchargeables (DLS) sont analysés. Ensuite, vous pouvez ajouter de nouvelles fonctionnalités (telles que l’analyse de segments supplémentaires) et déboguer cette logique en mode utilisateur, en commençant par extraire les routines qui accèdent au matériel. (Une routine strottée ne peut rien faire ou émuler la fonction matérielle dans le logiciel.) Pour plus d’informations sur DLS, consultez la documentation du Kit de développement logiciel (SDK) Windows.
Lorsque votre implémentation fonctionne en mode utilisateur, vous pouvez la déplacer vers le mode noyau et la faire fonctionner. Une fois que la version du logiciel fonctionne en mode noyau, l’étape suivante consiste à commencer à déplacer les fonctionnalités vers votre matériel. Les synthés logiciels en mode utilisateur et en mode noyau constituent des étapes intermédiaires utiles dans le processus d’exécution de votre synthé matériel.
Pour résumer les recommandations ci-dessus :
Pour les composants logiciels uniquement, implémentez d’abord les composants en mode utilisateur (afin de résoudre les problèmes de conception avec des interfaces faciles, le débogage, l’installation et la suppression), puis convertissez en mode noyau si nécessaire en raison de la latence ou d’autres considérations.
Pour les composants matériels, implémentez d’abord une version logicielle en mode utilisateur (afin de résoudre les problèmes de conception avec des interfaces faciles, le débogage, l’installation et la suppression), puis convertissez-la en version logicielle en mode noyau. Enfin, connectez le composant en mode noyau au matériel, une fonctionnalité à la fois, jusqu’à ce que tout fonctionne comme vous le souhaitez.