Je voudrais faire la queue plusieurs struct task_struct
s dans mon pilote de périphérique de bloc. Ici, chaque task_struct
correspond à un thread de niveau utilisateur qui utilise l'appel système ioctl()
pour envoyer un tampon d'espace utilisateur à mon pilote de périphérique de bloc. Une fois que je fais la queue plusieurs task_struct
s, je voudrais les garder dans la file d'attente jusqu'à ce qu'une condition particulière soit rencontrée (c'est-à-dire, le tampon a été écrit sur le disque). Donc, ma question est, comment mettre en file d'attente plusieurs task_struct
s, les mettre en veille, puis réactiver un sous-ensemble de la task_struct
s en attente lorsque certaines conditions sont remplies?Mettre en file d'attente plusieurs structures task_struct?
0
A
Répondre
0
Vous pouvez appeler kthread_create
autant de fois que vous le souhaitez pour créer de nouveaux threads, puis appeler wake_up
sur le sous-ensemble de threads souhaité.
Questions connexes
- 1. file d'attente et structures prioritaires
- 2. Comment gérer/mettre en file d'attente plusieurs messages ajax?
- 3. Tri d'une file d'attente de structures
- 4. Utilisation de task_struct dans Linsched
- 5. Mettre en file d'attente un fichier .net
- 6. IntentService: Comment mettre en file d'attente correctement?
- 7. Mise en file d'attente de plusieurs fichiers
- 8. Structures de données en Java pour mettre en œuvre
- 9. mettre en œuvre des structures de données en java
- 10. Mettre en file d'attente ASIHTTPRequêtes en mode hors connexion?
- 11. mettre en file d'attente plusieurs requêtes SQL en tant que chaîne unique, comportement du serveur?
- 12. Stockage de plusieurs structures dans l'état gen_server
- 13. make file plusieurs exécutables
- 14. spécifique du task_struct dans le Linux 2.6.30.5
- 15. structures pour l'initialisation de la file d'attente de retour multiniveau
- 16. Où et comment mettre des structures typedefed?
- 17. Comment mettre en file d'attente les notifications système?
- 18. Comment faire pour mettre en file d'attente plusieurs événements à un seul eventHandler dans actionscript 3?
- 19. Comment mettre en file d'attente des commandes FTP dans Twisted?
- 20. Ajout à une file d'attente
- 21. mettre en place plusieurs datatables?
- 22. Comment puis-je atomiquement "mettre en file d'attente si l'espace libre OU dequeue puis mettre en file d'attente" pour une file/liste Java?
- 23. File d'attente pour plusieurs consommateurs
- 24. Définition de plusieurs structures struct machine_desc
- 25. Quand mettre en mémoire malloc les structures renvoyées par un pointeur?
- 26. Déclaration des structures dans plusieurs fichiers
- 27. Structures de données distribuées en Java
- 28. Utilisation de Javascript pour mettre en file d'attente les cookies
- 29. Service WCF pour mettre en file d'attente toutes les demandes
- 30. Mettre en file d'attente des rappels de fonction
Je ne crée aucun thread de noyau. Les threads d'Userland appellent 'ioctl()'. Je veux bloquer l'appel à 'ioctl()' fait par chaque thread. Puisque des appels simultanés seront faits à 'ioctl()' par plusieurs threads, je veux mettre en file d'attente le task_struct correspondant à chacun de ces threads d'utilisateur et appeler une forme de sleep interruptible. Une fois qu'une condition est remplie, je veux réveiller ces threads (au moins un sous-ensemble d'entre eux). J'espère que cela rend ma question plus claire? – user745878
Bien sûr, chacun des threads utilisateur entre dans votre fonction 'ioctl', et vous pouvez les faire aller dormir avec' wait_event_interruptible() 'ou quoi que ce soit. Chaque invocation de 'ioctl' alloue quel que soit le contexte que vous voulez conserver (ou alloue du contexte par fichier, ou autre), placez-le sur la file d'attente interne souhaitée (créez une liste et' list_add') ou comme vous voulez implémentez-le), puis appelez 'wake_up' pour chaque contexte d'utilisateur quand il devient prêt. – Roland
Merci pour votre contribution, Roland! Le prochain problème est le _context_ lui-même. Dans mon code, plusieurs buffers de 256 octets sont fusionnés en une seule page de 4 Ko. Plusieurs de ces pages de 4 Ko font partie d'une seule «structure bio» (jusqu'à un maximum de 8 pages de 4 Ko) et sont ensuite soumises au disque. Une fois que cette BIO a été traitée, j'ai besoin de réveiller ** tous ** les task_struct qui ont contribué 256 octets vers l'IOB. Alors, comment est-ce que je garde la trace des threads dont j'ai besoin pour me réveiller car il pourrait y avoir beaucoup plus de threads mis en file d'attente simultanément. – user745878