Quels contextes sont softirq et tasklet?
Je sais qu'il existe des processus de contexte et de l'interruption de contexte, mais je ne comprends pas lors de l'exécution de softirq ou tasklet, dont le contexte est-il exécuter.
J'ai vu certaines personnes utilisent le terme "bas-les moitiés de contexte", si il y a un tel terme, quelle est la différence en comparant avec les autres.
Une autre question à softirq et tasklet est que pourquoi le sommeil ne sont pas autorisés au cours de l'exécution??
Quelqu'un peut-il m'aider à identifier ces questions, merci!!
source d'informationauteur kai
Vous devez vous connecter pour publier un commentaire.
Les softirq et tasklet sont les deux bas-moitiés mécanisme. Le sommeil n'est pas permis parce qu'ils s'exécuter sous contexte pour ne pas interrompre le processus de contexte. Si le sommeil est autorisée, linux ne peut pas planifier et, enfin, provoquer une panique du noyau avec un dequeue_task erreur. L'interruption contexte ne dispose même pas d'une structure de données décrivant le registre de l'info, de sorte qu'ils ne peuvent jamais être prévue par linux. Si il est conçu pour avoir la structure et peuvent être programmées, la performance pour interrompre le processus de traitement sera effectué.
@kai: votre qs reg quel contexte bas-moitiés exécuter?
Techniquement, softirq de ne exécuter dans une interruption du contexte de la "softirq" contexte; c'est juste que c'est pas "dur-irq" contexte (le contexte est-il lorsqu'une interruption matérielle se produit).
Donc, dans un softirq gestionnaire, en termes de "recherche" macros Linux fournit:
in_interrupt: oui | in_irq: non | in_softirq: oui | in_serving_softirq: oui
Mais être conscient (attention!!! :):
"toutes les restrictions qui s'appliquent aux gestionnaires d'interruption s'appliquent également pour les moitiés inférieures. Ainsi, les moitiés inférieures ne peut pas dormir, ne peut pas accéder à l'espace utilisateur, et ne peut pas invoquer le planificateur." -- LDD3.
Jermaine réponses le reste de votre question.
[Mise à jour]
En outre, je tiens à souligner que l'on peut définir simple et élégant macros qui aident à imprimer les informations de débogage comme et quand nécessaire. Au fil des ans, j'ai mis ces macros et la commodité des routines dans un fichier d'en-tête; vous pouvez le vérifier et télécharger ici: "Un en-Tête de Complaisance".
Il y a des macros /fonctions:
printk() ou trace_printk()) et seulement si le mode DEBUG est activé
Ouf 🙂
Je suis d'accord avec la accepté de répondre et Kaiwan de réponse, mais ils n'ont pas mentionné ksoftirqd. Si le CPU est sous une charge lourde de softirqs et/ou tasklets, il planifie ses ksfotirqd thread du processus qui l'a soulevé softirqs et tasklets dans le contexte de processus.
Donc je suppose que la réponse à la discussion de la question serait: softirqs peut s'exécuter en mode d'interruption ou de contextes de processus.