2009-10-25 10 views
10

マルチプロセッサシステムで異なるプロセッサ上でコードを実行するには、どのような命令を使用する必要がありますか?異なるプロセッサ(x86アセンブリ)でコードを実行する

(私は実際のオペレーティングシステムが起動する前に、特定のCPUレジスタを設定し、システム内のすべてのCPU上でこれを実行する必要がアセンブラでのいくつかの事前ブートコードを書いています。)

+1

リアルモードでMPを実行できますか? – Draemon

+0

理由はありません。 MPにはモード特有のものはありません。 –

+1

http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-likeのように見える –

答えて

9

だからあなたが持っていますブートローダのようなスタンドアロン(あなたは「プレブート」と言った)プログラムは、リアルモードで動作していますか?これは通常のBIOSを搭載したPeeCeeにありますか?

この場合、実行するCPUは1つだけです。スピンアップするために、他のCPUユニットを、オペレーティング・システムは、一般的にこのように書きユニバーサルスタートアップアルゴリズムと呼ばれるものを実行しますために:

BSP sends AP an INIT IPI 
BSP DELAYs (10mSec) 
If (APIC_VERSION is not an 82489DX) { 
    BSP sends AP a STARTUP IPI 
    BSP DELAYs (200μSEC) 
    BSP sends AP a STARTUP IPI 
    BSP DELAYs (200μSEC) 
} 
BSP verifies synchronization with executing AP 

BSPは、ブート・プロセッサです。 APはアプリケーションプロセッサです。 IPIは、プロセッサ間割り込みです。 IPIを実行するには、起動時に有効になっていないPCアーキテクチャの割り込みコントローラ拡張機能であるAPICを有効にする必要があります。だからこそ、ICUのどのバージョンが動作しているのか心配しているのです。これらはすべて、かなり深いカーネルの魔法です。 Linux、NetBSD、または他の* BSDのソースコードを見てみることもできますが、読むのは簡単ではありません。あなたが本当に勝ったら、小さなカーネルやスタンドアロンのSMPテストプログラムがどこかにあるかもしれません。

詳細については、Intel Multiprocessor Specificationを参照してください。

+0

ありがとう、それは私が必要とする情報です!これは挑戦でなければなりません... –

関連する問題