4コア/8コアなのにBIOSがシングルスレッドである理由を知りたいのですが。最新のUEFIテクノロジーにより、GUIユーティリティが可能になります。マルチスレッドBIOSを実装しない特別な理由はありますか?
3 に答える
簡単な答えは次のとおりです。収穫逓減
ほとんどのPCでは、BIOS / UEFIの起動シーケンスが機能するのに約5秒しかかかりません(HDDスピンアップ遅延はカウントされません)。ほとんどの人にとって、それは十分に速いです。(より速くしたい場合は、PCの電源を切るのではなく、スリープ状態にしてください。)
BIOSで実行されるタスクの多くは並列化できないことに注意してください。最初にメモリコントローラを初期化する必要があります。後続のデバイス(USB、SATA、ビデオなど)をチェックする前に、PCI/PCIeバスを列挙する必要があります。ディスクがスピンアップするまで起動できません。
時間がかかり、並行して実行できる初期化項目がいくつかあります。
- IDE / SATA-通常、機械的なディスクの待ち時間のために時間がかかります。
- USB-一部のUSBデバイスは、電源を入れてから数百ミリ秒を必要とします。
- ビデオ(その他のサードパーティBIOS拡張機能)-ディスプレイとの通信と同期には時間がかかります。
これらのタスクは並行して実行できるため、PCの起動時間が短縮される可能性があります。そこに到達するには、カーネルとタスクスケジューラを作成する必要があることに注意してください。レガシーBIOS(純粋なx86アセンブラー)では、これはきれいではありません。UEFI(ほとんどがCソース)では、これはもう少し実現可能です。ただし、わずかな利益(おそらく起動時間の1〜2秒)のために、それでも重要なエンジニアリング作業が必要です。
フェニックスは以前、マルチスレッドBIOS初期化を導入しようとしました。私の知る限り、それは決して離陸しませんでした。
必要がないからです。BIOSは重い計算を行いません。調整を行ってから(永久に)終了します。
UEFIは、マルチプロセッシング機能については説明していません。ただし、PI仕様(これもUEFI Forumによって作成されています)は機能し、EDK2はEFI_MP_SERVICES_PROTOCOL
(現在IA32 / X64のみ)を提供します。
正確にはpthreadではありませんが、ブートストラッププロセッサがシングルスレッドのUEFIインスタンスを提供し続けている間に、アプリケーションプロセッサで実行するタスクをスケジュールできます。
DXEフェーズのインターフェイスは、v1.5 PI仕様のボリューム3、セクションMPサービスプロトコル(13.4)で説明されています。
PEI中に使用可能な機能は、ボリューム2、EFI MPサービスPPI(8.3.9)で説明されています。