10

x86 のリアル モードで、マルチプロセッサ システムの別のプロセッサでコードを実行するには、どの命令を使用する必要がありますか?

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

4

1 に答える 1

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 を実行するには、APIC を有効にする必要があります。APIC は、起動時に有効になっていない PC アーキテクチャの割り込みコントローラー拡張機能です。そのため、コードはどのような ICU バージョンで実行されているかが気になります。これらはすべて、かなり深いカーネル マジックです。例として、Linux、NetBSD、またはその他の *BSD ソース コードを調べてみることもできますが、簡単には読めません。本当に勝てば、どこかで小さなカーネルまたはスタンドアロンの SMP テスト プログラムを見つけることができるかもしれません。

詳細については、Intel マルチプロセッサの仕様を参照してください。

于 2009-10-26T00:01:20.790 に答える