あなたの習慣について教えてください!!

マルチコアCPUでは、プロセスが使うコアをOSが管理し、ユーザーもタスクマネージャからその指定をできるということはわかったのですが、ではOSはどうやってCPUに使うべきコアを指示しているのでしょうか?
コアを指定するCPU命令があるのでしょうか?
特にx86、x64でどうなっているのか知りたいです。

質問者からの補足コメント

  • わかりました
    http://stackoverflow.com/questions/980999/what-d …
    x86ではブートストラップ(電源投入時)に
    1.ブートストラップ・スレッド(プロセッサ0番のコア0番のスレッド0番)がアドレス0xfffffff0から命令のフェッチを開始する。
    2.他のスレッドはWait-for-SIPIと呼ばれるスリープ状態で開始する
    3.ブートストラップ・スレッドはAPIC上でSIPI(Startup IPC)というIPI(プロセス間割込み)を他のスレッドに送る
    4.そのSIPIは受信側のスレッドがどこから命令のフェッチを開始するかのアドレスを含んでいる

    ということで、ブートストラップ時に実装されているコアを全て初期化してしまえば、あとは「コアの切り替え命令」などは必要ない。

      補足日時:2015/03/02 14:41

A 回答 (1件)

既に自己解決している感じもしますが・・・



> コアを指定するCPU命令があるのでしょうか?
そういうCPU命令はないでしょう。CPU命令としてあるのはIPI(プロセス間割込み)ですね。あとはスケジューラでどのプロセスがどのコア上でどういった優先順位で実行されるべきかを決定して記録しておき、各コアは自分が実行すべきプロセスを調べて実行する。
補足ではブートストラップ時に初期化するとだけ書いてますが、省エネのためには仕事がなくなったコアはスリープ状態にする。仕事が増えてきたらスケジューラで必要な数のコアを(IPIで)起こす。といったことも必要ですし、最近のOSならやっていると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
自己解決していたのですが、回答がない状態では質問を閉じる方法が見つからなかったもので…
ご回答も参考になりました。ありがとうございます。

お礼日時:2015/03/04 16:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!