マルチプロセッサシステムで異なるプロセッサ上でコードを実行するには、どのような命令を使用する必要がありますか?異なるプロセッサ(x86アセンブリ)でコードを実行する
(私は実際のオペレーティングシステムが起動する前に、特定のCPUレジスタを設定し、システム内のすべてのCPU上でこれを実行する必要がアセンブラでのいくつかの事前ブートコードを書いています。)
マルチプロセッサシステムで異なるプロセッサ上でコードを実行するには、どのような命令を使用する必要がありますか?異なるプロセッサ(x86アセンブリ)でコードを実行する
(私は実際のオペレーティングシステムが起動する前に、特定のCPUレジスタを設定し、システム内のすべてのCPU上でこれを実行する必要がアセンブラでのいくつかの事前ブートコードを書いています。)
だからあなたが持っていますブートローダのようなスタンドアロン(あなたは「プレブート」と言った)プログラムは、リアルモードで動作していますか?これは通常の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を参照してください。
ありがとう、それは私が必要とする情報です!これは挑戦でなければなりません... –
リアルモードでMPを実行できますか? – Draemon
理由はありません。 MPにはモード特有のものはありません。 –
http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-likeのように見える –