Lorsque vous effectuez un contexte basculant sur un processeur monocœur, le code responsable est exécuté sur la seule CPU qui s'occupe de la commutation des threads. P>
Mais comment est-ce fait quand nous avons plusieurs processeurs? Y a-t-il un processeur maître qui fait tout le contexte basculant de tous les CPU esclaves? Chaque CPU est-il responsable de son propre contexte commutant? Si tel est le cas, comment la commutation est synchronisée de sorte que deux processeurs n'exécute pas le même thread? Ou y a-t-il un autre mécanisme en place? P>
3 Réponses :
Les CPU ne font pas de contexte basculant. Les systèmes d'exploitation font. p>
Essentiellement, un système d'exploitation exécute un interrupteur de contexte en chargeant un nouveau contexte (registres, mappages de mémoire, etc.) dans un noyau de la CPU. Les threads sont une structure de système d'exploitation dans laquelle de tels contextes peuvent être enregistrés. Par conséquent, le système d'exploitation est également responsable de la sélection d'un thread non confilé pour charger le contexte de la CPU. p>
Si le système d'exploitation devait choisir un thread en marche, deux noyaux essaient d'exécuter le même fil. C'est lié à la confusion car ils partagent la même mémoire et que le thread unique ne s'attend pas à être exécuté en parallèle avec lui-même (!) Donc, aucun système d'exploitation ne ferait une telle chose. P>
Je n'ai jamais dit que la CPU effectue le contexte basculant. J'ai dit que le Code i> responsable (c'est-à-dire le système d'exploitation) pour effectuer le commutateur de contexte est exécuté sur une CPU. Mais comment est-ce traité quand nous avons plus d'un processeur? Le code de commutation de contexte est-il exécuté sur tous i> cpus?
Le noyau est multi-fileté. Il peut exécuter sur n'importe quel noyau. Lorsqu'un noyau a besoin de swap pour échanger des threads, il appelle la partie du noyau responsable de la sélection du prochain thread qu'il devrait exécuter. P>
Le noyau est multi-fileté; Ce qui est à dire, il est écrit pour être en sécurité exécutant simultanément sur plusieurs cœurs. En tant que telle, une seule CPU finit à exécuter un thread donné, car le code est construit de manière à ce que, si plusieurs processeurs reproduisent simultanément, le résultat correct se produit. P>
suppose que nous avons deux processus P1 et P2, la séquence approximative d'étapes devrait être comme celle-ci. Remarque, la CPU n'envoie que les intempédés au système d'exploitation pour effectuer le commutateur de contexte. P > p>