CPUが起動したときにマルチコアプロセッサのどのコアが最初に初期化されるか知りたいですか?(つまり、ブートローダーレベルで)最初のコアですか?またはランダムコア?
3 に答える
「ボリューム2a」で読むことができるローカルアピックを読みたいと思います。
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
各プロセッサには対応するローカルアピックがあり、各ローカルアピックにはアピックIDレジスタがあり、システムの初期化時に一意の値が割り当てられます。
オンラインになる最初のコアはブートストラッププロセッサ(BSP)と呼ばれ、実際にはダイ上の任意の物理コアにすることができます。詳細については、「ボリューム3a」を参照してください。ここでは、ブートストラッププロセッサの選択プロセスについて説明しています。
これがvol3aからの抜粋です。
8.4.1BSPおよびAPプロセッサ
MP初期化プロトコルは、ブートストラッププロセッサ(BSP)とアプリケーションプロセッサ(AP)の2つのクラスのプロセッサを定義します。MPシステムの電源投入またはリセットに続いて、システムハードウェアはシステムバス上のプロセッサの1つをBSPとして動的に選択します。残りのプロセッサはAPとして指定されます。
BSP選択メカニズムの一部として、BSPフラグがBSPのIA32_APIC_BASE MSR(図10-5を参照)に設定され、それがBSPであることを示します。このフラグは、他のすべてのプロセッサではクリアされます。
BSPは、BIOSのブートストラップコードを実行してAPIC環境を構成し、システム全体のデータ構造を設定し、APを起動して初期化します。BSPとAPが初期化されると、BSPはオペレーティングシステム初期化コードの実行を開始します。
これは、プロセッサ自体のアーキテクチャによって異なります。このようなものの標準は実際にはありません。たとえば、PS3コアには9つのコアがあり、1つは他の8にタスクをスケジュールします。この場合、1つのコアが他の8の前に命令を処理するという観点から考えるのが妥当です。他のプロセッサに関する限り、これは識別するのがより難しいこと。ブートローダーがその命令をコアのセットに送信し、その時点で、どの論理ゲートがコアに命令を割り当てるかは、常にどのような方法で行うかを想定するのが賢明です。ほとんどの場合、起動時と他の時間でのタスクのスケジューリングに実際には違いがないことを私は知っています。最も基本的なタスクスケジューリングハードウェアは、最初に利用可能なコアを選択するだけです。これは通常、「最初の」と見なされるコアのいずれかです。機械によるもの。しかし、私が言い続けているように、マシンが異なればそれも異なるので、使用しているコアを見つけて、そのコアが何をしているのかを確認することをお勧めします。幸運を。
各プロセッサには、関連するローカルAPIC IDを持つ独自のローカルAPICがあり、これはローカルAPICレジスタから読み取ることができます(同じプロセッサが各プロセッサで異なるIDを提供します)