質問

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マルチプロセッサ仕様を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top