1. ホーム
  2. linux

インテルのマイクロコードとは何ですか?

2023-08-02 15:48:21

質問

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

どなたか、それらについての詳細な情報をお持ちですか。マイクロコードで何ができるのか、どのように使用できるのかに関するドキュメントはありますか?


EDITです。 私はwikipediaの記事を読みました。どうやったら自分で書けるのか、どんな使い道があるのかがわかりませんでした。

どのように解決するのですか?

古い時代、マイクロコードは CPU で多用されていました。すべての命令がマイクロコードに分割されていました。これにより、控えめな CPU で比較的複雑な命令セットが可能になりました (たとえば モトローラ 68000 を考えると、多くのオペランド モードと 8 つの 32 ビット レジスタを備えた 40000 トランジスタに収まるのに対し、シングルコアの最新の x86 は 100 個を超える 数百万 ). これはもう真実ではありません。パフォーマンス上の理由から、ほとんどの命令は現在では「ハードワイヤード」になっています。

最近の x86 では、次のようないくつかの複雑な命令はもっともらしいです。 fsin (浮動小数点値に対してサイン関数を計算する) のような複雑な命令はマイクロコードで実装されていますが、単純な命令 (たとえば imul を使った整数倍算は実装されていません。このため、カスタム マイクロコードで実現できることは限られています。

とはいえ、マイクロコードの形式は特定のプロセッサ モデルに非常に特有であるだけでなく (たとえば、Pentium III と Pentium IV のマイクロコードは互いに自由に交換できません。もちろん、AMD プロセッサに Intel のマイクロコードを使用することは論外です)、厳重に保護された秘密でもあります。インテルは、オペレーティングシステムやマザーボードBIOSがマイクロコードを更新する方法を公開していますが(ハードリセットのたびに行う必要があり、更新は揮発性RAMに保存されます)、マイクロコードには、次のような特徴があります。 コンテンツ は文書化されていません。そのため インテル® 64 および IA-32 アーキテクチャー ソフトウェア開発者向けマニュアル (Volume 3a) では、アップデート手順 (セクション 9.11 "microcode update facilities") が説明されていますが、実際のマイクロコードは暗号化され、チェックサムがクロックフルになると記載されています。この表現は曖昧なので、あらゆる種類の暗号化保護が隠されている可能性がありますが、要するに、Intel 以外の人がカスタム マイクロコードを書いて試してみることは現在不可能だということです。

暗号化にデジタル (非対称) 署名が含まれていない場合、および/または Intel の人々が何らかの形で保護システムを失敗させた場合、次のような驚くべきリバース エンジニアリングの努力も考えられます。 可能性があります。 しかし、おそらく適用範囲が限られている (ほとんどの命令がハードワイヤードされているため) ことを考えると、プログラミング能力に関する限り、これはあまり意味のないことだと思われます。