異なるプロセッサでコードを実行する(x86アセンブリ)
-
06-07-2019 - |
質問
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マルチプロセッサ仕様を参照してください。
所属していません StackOverflow