マルチプロセッサプログラミングを語るスレ
■ このスレッドは過去ログ倉庫に格納されています
0026デフォルトの名無しさん
NGNGそんな命令はありません。SMP では、基本的に複数のプロセッサはそれどれ独立して勝手に動いています
から、あるプロセッサに処理を割り振りたければ、そのプロセッサが処理を行うように「仕向ける」必要があり
ます。
今 2CPU からなる SMP システム (CPU をそれぞれ CPU#0, CPU#1 とする) で
- すべてのプロセッサ間で共有されるスレッドキューが、主記憶上のあるアドレスに存在する
- ある特定の割り込みが発生すると、スレッドの切り替え(キューにある最も優先度が高いスレッドに
処理が移る)が起こる
というプログラムが、各プロセッサで実行されているとしましょう。これで CPU#1 に特定のスレッドを実行さ
せたければ、
1. 自分が CPU#1 であれば、そのスレッドを直接実行
2. 自分が CPU#0 であれば
- スレッドキューをロックする
- 目的のスレッドの優先度を最高にする
- CPU#1 に特定の割り込みをかける CPU#1 は割り込みルーチンに入り、スレッドキューのアンロックを
待つ
- CPU#0 がスレッドキューをアンロックする
というようなコードを書いて、走らせておけば良いわけです(実際にはもっと複雑)。
いずれにせよアプリケーションレベルでどうこうできる話ではなく、OS のプロセス管理サブシステムの設
計マターです。x86 固有のマルチプロセッサ制御について知りたければ、Intel の Web サイトから
「インテル・アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル 下巻」
というタイトルの PDF ファイルを入手して、関連する章(とくに APIC の解説)を読んでください。言うまでも
ないですが、シングルプロセッサ/マルチタスク OS でのプロセス管理サブシステムに関して、十分な知
識があることは前提です。
■ このスレッドは過去ログ倉庫に格納されています