Sous Linux, quelles sont les options de gestion des interruptions de périphérique dans le code espace utilisateur plutôt que dans l'espace noyau?Gestion des interruptions Linux dans l'espace utilisateur
Répondre
Il existe , mais le doit toujours être utilisé dans l'espace noyau pour la gestion. OTOH, si vous avez juste besoin de remarquer l'interruption, vous n'avez pas besoin de la partie noyau.
Vous pouvez jeter un oeil à CHAPTER 10: Interrupt Handling du livre Linux Device Drivers, Third Edition.
L'expérience indique qu'il est possible d'écrire des pilotes d'espace utilisateur stables et de bonne qualité pour presque toutes les cartes PCI. Cela nécessite juste une certaine sophistication et une petite couche de proxy dans le noyau. UIO est un pas dans cette direction, mais si vous voulez gérer correctement les interruptions dans l'espace utilisateur, UIO peut ne pas suffire, par exemple si le périphérique ne prend pas en charge le bit de désactivation d'interruption de PCI sur lequel UIO s'appuie. Notez que les latences de réveil de processus sont de quelques microsecondes, donc si votre implémentation nécessite une latence très faible, alors l'espace utilisateur peut être un frein.
Si je devais mettre en œuvre un pilote de l'espace utilisateur, je réduirais le ISR du noyau juste une opération « désactiver & ack & réveil-userpace », gérer l'interruption dans le processus waked-up, et puis réactivez l'interruption (bien sûr, en écrivant à la mémoire PCI mappée à partir du processus de l'espace utilisateur).
Avoir à déclencher le code de l'utilisateur indirectement. Noyau ISR indique une interruption en écrivant un fichier/un registre/une signalisation de réglage. L'application d'espace utilisateur interroge ceci et continue avec le code approprié. Cas de limites: plus ou moins d'interruptions que prévu (délai dépassé/trop d'interruptions par intervalle de temps)
L'abstraction de fichier Linux est utilisée pour connecter le noyau et l'espace utilisateur. Ceci est effectué par des dispositifs de caractères et ioctl()
appels. Certains peuvent préférer les entrées sysfs à cette fin. Cela peut sembler étrange car les notifications de périphériques déclenchées par un événement (interruptions) sont associées à l'interrogation «déclenchée par le temps», mais il s'agit en réalité d'un blocage asynchrone (lecture/sélection). Quoi qu'il en soit, certaines questions se posent en fonction de la performance.
Les interruptions ne peuvent donc pas être gérées directement en dehors du noyau. E.g. La mémoire partagée peut se trouver dans l'espace utilisateur et, avec certains paramètres d'autorisation d'E/S, les adresses peuvent être mappées, donc l'E/S fonctionne, mais pas pour la gestion directe des interruptions.
J'ai trouvé qu'un seul 'rapport minoritaire' dans le sujet vfio (http://lxr.free-electrons.com/source/Documentation/vfio.txt): https://stackoverflow.com/a/21197797/5349798
des questions similaires:
Running user thread in context of an interrupt in linux
Is it possible in linux to register a interrupt handler from any user-space program?
Linux Kernel: invoke call back function in user space from kernel space
How do I inform a user space application that the driver has received an interrupt in linux?
- 1. gestion des interruptions (Linux/General)
- 2. Gestion des interruptions simultanées sous Linux
- 3. Goupilles GPIO Gestion des interruptions dans linux (bras)
- 4. Gestion des interruptions et notification de l'espace utilisateur
- 5. Gestion des interruptions en C++
- 6. Question concernant la gestion des interruptions et des interruptions
- 7. noyau Linux - priorités des interruptions
- 8. Gestion des interruptions gpio dans u-boot
- 9. Programmation d'assemblage et gestion des interruptions
- 10. Gestion des événements/interruptions personnalisés en C++
- 11. Gestion des interruptions SERIRQ des périphériques connectés au LPC
- 12. Interruptions dans UART 16550 et Linux Kernel
- 13. Traitement des interruptions dans Windows
- 14. Linux Userspace GPIO Interruptions utilisant sysfs
- 15. Problème lors de la gestion du signal et de la gestion des interruptions
- 16. Gestion des interruptions avec la file d'attente audio
- 17. Meilleures pratiques relatives aux interruptions Linux pour &&
- 18. Pilote Linux - Comment éviter les interruptions
- 19. Gestion des exceptions sous Linux
- 20. Gestion des ressources par Linux
- 21. Gestion des profils utilisateur ASP.NET
- 22. Gestion des profils utilisateur dans asp.net MVC2
- 23. queue-chaînage des interruptions
- 24. Gestion des interruptions à faible latence (délai avg attendu pour le retour du noyau vers l'espace utilisateur)?
- 25. Le module du noyau Linux meurt après 100 000 interruptions
- 26. Générer PWM avec des interruptions
- 27. Gestion non destructive des messages utilisateur Django
- 28. Gestion des paramètres utilisateur avec doctrine
- 29. Interruptions distribuées
- 30. Application Web NHibernate - Gestion des préférences utilisateur
Quand nous faisons pilote userspace, est-il logique d'effacer interruption dans le noyau ou dans l'espace utilisateur? Je pense qu'il devrait être clair lorsque la manipulation est terminée (donc dans l'espace utilisateur), non? – ransh