2009-06-15 5 views
3

(je demande parce qu'il était avant grave SMP et multicoeur que j'ai étudié OS. Je voudrais avoir une vision de la façon dont le code est en cours d'exécution.)affinité Configuration des processeurs multi-cœurs x86

Si j'ai un processeur multicoeur x86 démarrer directement dans mon programme. Quelqu'un peut-il recommander un site Web qui décrit quelles commandes d'assembleur ai-je pour contrôler l'affinité?

Répondre

5

affinité n'a pas été déterminé par l'état du processeur et ne peut donc pas être modifié par l'assemblage (seul). Vous avez besoin de la participation de l'OS. Et chaque OS aura un appel spécifique pour le faire.

Qu'est-ce que le système d'exploitation va faire: le système d'exploitation aura un planificateur, qui est en effet un programme qui détermine le processus se déroule quand sur ce processeur. En définissant l'affinité en tant qu'utilisateur, vous configurez ce planificateur. Et si vous n'avez pas de système d'exploitation (ce que la question semble impliquer je pense), alors vous écrivez le planificateur vous-même et vous aurez le contrôle de la configuration et vous commencerez probablement avec une runqueue globale et pour chaque processeur (core), regardez cette file d'attente et récupérez les processus pour les exécuter.

Alors, comment cela fonctionne alors? Pendant le démarrage, un seul processeur est en cours d'exécution. Si vous êtes prêt pour le système d'exploitation, vous démarrez les autres processeurs qui commencent à exécuter votre code et qui exécuteront probablement une sorte de planificateur. Pour un exemple de mise en œuvre, voir la version 2.6.29 arch/x86/kernel/smpboot.c de la fonction do_boot_cpu(), qui met plusieurs CPU en ligne en utilisant APIC.

Questions connexes