3

(私が OS を勉強したのは本格的な SMP とマルチコアの前だったので、質問します。コードがどのように実行されているかについてのビジョンを持つのが好きです。)

プログラムに直接起動するマルチコア x86 CPU がある場合。アフィニティを制御するために必要なアセンブラ コマンドについて説明している Web サイトを誰かが推奨できますか?

4

2 に答える 2

5

アフィニティは CPU の状態によって決定されないため、アセンブリによって (単独で) 変更することはできません。OSの参加が必要です。そして、各 OS には、これを行うための特定の呼び出しがあります。

OS が行うこと: OS にはスケジューラがあり、これは実際には、どのプロセスがいつどのプロセッサで実行されるかを決定するプログラムです。アフィニティをユーザーとして設定すると、このスケジューラーが構成されます。

また、OS を持っていない場合 (質問が暗示しているように思われます)、自分でスケジューラを作成していて、構成を独自に制御でき、おそらくグローバルなランキューとプロセッサごとに開始することになります。 (コア) このランキューを監視し、そこから実行するプロセスを取得します。

では、これはどのように機能しますか?ブート中は、1 つの CPU のみが実行されます。OSとしての準備ができている場合は、コードの実行を開始し、おそらく一種のスケジューラを実行する他のCPUを「起動」します。

実装例については、Linux 2.6.29 arch/x86/kernel/smpboot.c function do_boot_cpu() を参照してください。APIC を使用していくつかの方法で CPU をオンラインにします。

于 2009-06-15T06:59:39.710 に答える
0

これは、QNX がどのようにそれを行うかについてのかなり良い説明です。必要な ASM (とにかくプラットフォームに依存します) を提供するまでには至りませんが、概念には役立つ場合があります。

http://www.embedded.com/columns/technicalinsights/183702309?_requestid=408789

および同じサイトのさまざまな記事

http://www.embedded.com/products/integratedcircuits/173400008?_requestid=409058

于 2009-06-15T07:23:55.660 に答える