web-dev-qa-db-ja.com

マイクロコードはどのようにプロセッサにロードされますか?

再起動するたびにマイクロコードがプロセッサにロードされることを読みました。フラッシュメモリに常駐し、マシンが起動するとCPUにコピーされます。または、Linuxの場合、OS自体にプロセッサのマイクロコードコピーがあります。しかし、マイクロコードはどのようにしてプロセッサにコピーされますか?すべてのデータは、CPUの同意によりコンピューター内を移動します。 CPUには機械語で命令が与えられます。これらの機械語命令の実行にはマイクロコードが不可欠であるため、プロセッサにマイクロコードが存在しない場合、フラッシュメモリにアクセスしてその結果の操作を実行するための命令はCPUによってどのように実行されますか?これは、ハードワイヤードのマイクロコード化されていない命令がマイクロコードをリアルモードでコピーすることを意味しますか?

5
Kraken

再起動するたびにマイクロコードがプロセッサにロードされることを読みました。

BIOSは、起動中にマイクロコードの更新を発行できます。オペレーティングシステムもそうです。多くの場合、特に後のIntel CPUでは、これらの更新が必要になります。

フラッシュメモリに常駐し、マシンが起動するとCPUにコピーされます。または、Linuxの場合、OS自体にプロセッサのマイクロコードコピーがあります。しかし、マイクロコードはどのようにしてプロセッサにコピーされますか?

最新のIntelとCPUには、「モデル固有のレジスタ」と呼ばれるメカニズムと、それらを読み取るための特別なCPU命令(RDMSR)とそれらに書き込むための特別なCPU命令(WRMSR)があります。これらのレジスタはCPU設定に影響を与えますが、新しいマイクロコードのアドレスを使用して特定のレジスタに書き込むと、CPUはメモリの領域を読み取り、既存のマイクロコードに適用するように指示されます。

すべてのデータは、CPUの同意によりコンピューター内を移動します。 CPUには機械語で命令が与えられます。これらの機械語命令の実行にはマイクロコードが不可欠であるため、プロセッサにマイクロコードが存在しない場合、フラッシュメモリにアクセスしてその結果の操作を実行するための命令はCPUによってどのように実行されますか?

常にマイクロコードがあります。上記のメカニズムはマイクロコードを更新します。 Intel/AMDは、それがどのように機能するかについての詳細を実際に公開するのではなく、更新メカニズムを提供するだけです。明らかにどういうわけかそれはROMマイクロコードをある種のCPU内部メモリにコピーしています。しかしCPUが起動するとそこにいくつかのマイクロコードがあります。最近の一部のIntelおよびおそらくAMDCPUは起動後に確実に動作しませんBIOSによるマイクロコードの更新がなくても、最初のマイクロコードの更新を実行するのに十分に機能することは明らかです。

これは、ハードワイヤードのマイクロコード化されていない命令がマイクロコードをリアルモードでコピーすることを意味しますか?

マイクロコードの初期設定はCPUによって内部的に行われ、それを実現するための命令は実行されません。最初のCPU命令が実行される前にセットアップされます。

BIOSを更新するには、適切なRDMSRおよびWRMSR命令を実行する必要があります。

参照 : "この命令は特権レベル0またはリアルアドレスモードで実行する必要があります。そうしないと、一般保護例外#GP(0)が生成されます。"リアルモードで実行されない場合は、リング0またはカーネルモードで実行する必要があります。マイクロコードはいつでも更新できます。

9
LawrenceC

最新のCPUには、完全なマイクロコードがすでにインストールされています。このマイクロコードは、CPU自体の特別なROM領域にあり、変更/消去することはできません。したがって、CPUはそのままで機能できます。

システムBIOSおよび/またはオペレーティングシステムは、マイクロコードupdateのCPUへのロードを開始できます。このような更新は、完全なマイクロコードではなく、バグに対処するための小さなパッチです。 CPUには、この目的のために揮発性RAMの小さな領域が含まれています。

役立つリファレンス: https://www.dcddcc.com/pubs/paper_microcode.pdf

9
misha256

マイクロコードの更新は、ROM永続的に焼き付けられる既存のCPUマイクロコードへのパッチのみです。CPUには永続的なROMとパッチRAMこれには新しいコードを含めることができます。RAMには「一致」値のテーブルもあります。このテーブルには、ROMのパッチ可能な部分ごとのエントリがあります。CPUがパッチ可能な命令を実行すると、チェックが行われます。このテーブル。エントリがある場合は、RAM内のコードを使用します。デフォルト値がある場合は、ROMにジャンプします。したがって、CPUにパッチを適用するには、新しいコードをRAM次に、一致テーブルのエントリを適切に変更します。これを行う手順は、おおまかに次のとおりです。

  1. EAXをクリアし、CPUIDを使用して現在のプロセッサ署名を読み取り、一致するマイクロコードの更新をカーネルメモリにロードします。

  2. EAXとEBXをクリアし、リビジョン一致固有のレジスタからRDMSR命令を使用して現在のマイクロコードリビジョンを読み取ります。

  3. WRMSR命令を使用して、マイクロコード更新のメモリアドレスを更新一致固有のレジスタに書き込みます。

  4. 新しいマイクロコードリビジョンを読み取り、更新のリビジョンと一致する場合は成功を返します。それ以外の場合は、失敗を返します。

Linuxベースのオペレーティングシステムでは、このプロセスは「マイクロコード」と呼ばれる特定のカーネルモジュールによって起動時に実行されます。このモジュールのソースコードを読んで、正確なプロセスを確認できます。

パッチファイルには文書化されたヘッダーがありますが、パッチデータ自体、つまり実際のコードは、プロセッサにハードコードされた秘密鍵によって暗号化されていることに注意してください。このキーを知らない限り、独自のパッチを作成する方法はありません。

4
Tyler Durden

質問は定式化されていません。最新のx86/IA64 CPUには多くの「マイクロコード」があり、「マイクロコードパッチ」とマイクロコードには違いがあります。

新しいシリコン/ RTLの場合、CPUの多くの世代に沿ってバグを修正しないままにする理由がないため、(長いCPU命令の実行の段階的な要素としての)古典的な理解のマイクロコードはほぼ確実にシリコンに刻まれていますすべての新しい製造ノードでコンパイルされます。

ただし、最近のすべてのCPUには、x86CPUチップ内に組み込まれた独立したマイクロプロセッサによって制御されるいくつかの内部ユニットがあります。

最も注目に値する/知られているのは、CPUの動的な電源管理を制御するいわゆる "P-unit"、プロセッサ です。 CPUトランジスタのさらなる小型化によりコア周波数が上昇し、リークが増加したため、電力を妥当な制限に保つ唯一の方法は、積極的なクロックスロットリングと動的パワーゲーティングによるものです。問題は、CPUが無限の種類のソフトウェアコードを実行でき、それぞれが特定の消費電力のピークに達することです。 「パワーウイルス」のいくつかのパターンは、CPUが小売用に完成した時点では不明である可能性があり、アルゴリズムを管理するためのいくつかのパラメーターを修正する必要があります。これは、専用の「マイクロコードパッチ」を介して行われます。

他のCPUブロック グラフィックスなど およびメモリを制御するこの種のマイクロプロセッサがさらにいくつかあります。

パッチ適用プロセスの詳細は、悪意のある干渉を防ぐために極秘です。これがメカニズムのリバースエンジニアリングの試みに関するいくつかの ハッカーのレポート です。

つまり、x86アーキテクチャのマイクロコードは最新のCPUにはロードされていませんが、さまざまな補助組み込みマイクロプロセッサのマイクロコードにパッチを適用できます。

4
Ale..chenski