web-dev-qa-db-ja.com

Intelマイクロコードとは何ですか?

私が読んだことから、それはBIOSを変更せずにCPUのバグを修正するために使用されています。アセンブリに関する基本的な知識から、アセンブリ命令はCPUによって内部的にマイクロコードに分割され、それに応じて実行されることがわかります。しかし、インテルは、システムの稼働中に何らかの方法で更新を行うためのアクセスを提供します。

誰もそれらについての情報を持っていますか?マイクロコードで何ができ、どのように使用できるかについてのドキュメントはありますか?


編集:私はウィキペディアの記事を読んだ:私は自分でいくつかを書くことができる方法と、それが何を持っているのかを理解していませんでした。

75
Quamis

昔は、CPUでマイクロコードが頻繁に使用されていました。すべての命令がマイクロコードに分割されていました。これにより、控えめなCPUで比較的複雑な命令セットが可能になりました(多くのオペランドモードと8つの32ビットレジスタを備えた Motorola 680 は、40000トランジスタに収まるのに対し、シングルコアの最新のx86は100百万)これはもう事実ではありません。パフォーマンス上の理由から、ほとんどの命令は「ハードワイヤード」になっています。それらの解釈は、マイクロコード以外の柔軟性のない回路によって実行されます。

最近のx86では、fsin(浮動小数点値の正弦関数を計算する)などのいくつかの複雑な命令はマイクロコードで実装されていますが、単純な命令(imulとの整数乗算を含む)ありません。これにより、カスタムマイクロコードで何が達成できるかが制限されます。

そうは言っても、マイクロコード形式は特定のプロセッサモデルに非常に固有なだけではありません(たとえば、Pentium IIIとPentium IVのマイクロコードは互いに自由に交換することはできません。もちろん、AMDプロセッサにIntelマイクロコードを使用することはできません。質問)、しかしそれは厳しく保護された秘密でもあります。 Intelは、オペレーティングシステムまたはマザーボードBIOSがマイクロコードを更新する方法を公開しています(ハードリセットごとに行う必要があります。更新は揮発性RAMに保持されます)が、マイクロコードcontentsは文書化されていません。 Intel®64およびIA-32アーキテクチャソフトウェア開発者マニュアル (第3a巻)は、更新手順(セクション9.11「マイクロコード更新機能」)について説明していますが、実際のマイクロコードは「暗号化」され、フルクロックであると述べていますチェックサムの。言葉遣いはあいまいで、ほぼすべての種類の暗号保護が隠されている可能性がありますが、最終的には、Intel以外の人がカスタムマイクロコードを書いて試すことは現在不可能です。

「暗号化」にデジタル(非対称)署名が含まれていない場合、および/またはIntelの人々が何らかの形で保護システムを破った場合、いくつかの顕著なリバースエンジニアリングの努力が考えられます潜在的にそのようなマイクロコードを生成することを可能にしますが、おそらく限られた適用可能性を考慮すると(ほとんどの命令はハードワイヤードされているため)、プログラミング力に関する限り、これはあまり買わない可能性があります。

76
Thomas Pornin

たとえば、qemu-armがx86ホストのアームプロセッサをシミュレートできる仮想マシンまたはシミュレータについて大まかに考えてください。理想的には、シミュレートされたアームで実行されているソフトウェアは実際のアームではないことを認識しません。このアイデアを、チップ全体がx86のように常に見えるように設計されているレベルに持って行き、ソフトウェアはチップ内にプログラム可能なアイテムがあることを決して知りません。また、内部のその他のプロセッサは、x86の実装/シミュレーションを目的として設計されています。おそらく、ハードウェアチームとおそらくプロセッサ/コアが初期のx86クローンの根幹になったため、人気のあるAMD 29000製品ラインはなくなりました。 Linusが働いていたTransmetaには、低消費電力のx86になるように作られたvliwプロセッサがありました。その場合、翻訳層は(ほとんど)秘密ではありませんでした。 VSCは、RISCを極端に長く使用した非常に長い指示語であり、この種のタスクのために作成するものです。

いいえ、それは私が暗示しているほどのエミュレーション層ではありません。各チップ内でqemuプログラムを実行しているLinuxはありません。中間にソフトウェア/マイクロコードがないハードワイヤードとフルブローエミュレーションの間のどこかにあります。プログラマブルビットはfpga、プログラマブルゲートのようなものであるか、ソフトウェアまたはプログラマブルステートマシンである可能性があります。つまり、プログラマブルゲートではなく、ゲートで実行されるのはプログラマブルです。

非x86、非big ironタイプのプロセッサ。 ARMはハードコードされており、マイクロコードはありません。マイクロコントローラー、PIC、MSP430、AVRは、これらがマイクロコード化されていないと仮定します。私たちがPCで扱っているのは、今も昔も今もそうであるかもしれないからです。

このマイクロコードで遊ぶのは楽しいかもしれませんが、プロセッサフ​​ァミリに非常に固有のものである可能性が高く、IntelまたはAMD(それぞれ独自の内部構造を持っている可能性があります)で働いていない限り、その動作にアクセスすることはできません。そのため、2つのうちの1つで仕事を得てから、trenchを通り抜けて、この仕事を行うエリートチームの1つになる必要があります。そして、これまでのところ、あなたのキャリアが閉じ込められていると、あなたのスキルは1つの会社で1つの仕事に制限されるかもしれません。ビデオカードに個別のGPUをプログラミングすることはもっと楽しいかもしれません。ドキュメント化されているか、少なくともツールを備えています。AMDやIntelに10年も費やさずに今日できることで、どこにも行かないかもしれません。

17
old_timer

通常、マイクロコードを書くことはありません。これを行うには、CPUマイクロアーキテクチャの詳細な知識が必要です。 Intelは、マイクロアーキテクチャまたはマイクロコードに関する情報を一般公開していません。

9
Paul R