説明

マイクロプロセッサを識別する識別装置およびマイクロプロセッサを識別する方法

【課題】動作中にマイクロプロセッサを識別するための識別装置および方法を得る。
【解決手段】マイクロプロセッサ10は、識別命令に応答して、自身を識別するためのマイクロプロセッサIDデータを記憶している読出し専用メモリ31からマイクロプロセッサIDデータを読出し、プログラマにより選択的に読出すことができるレジスタ20,22に記憶させる。マイクロプロセッサ10が識別されると、特定のマイクロプロセッサに適切な機能を可動状態にでき、ワーク・アラウンド・プログラムをインストールできる。識別装置を有しないマイクロプロセッサにおけるID命令の実行は阻止される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は始動中および動作中にコンピュータ・マイクロプロセッサを識別するための方法および装置に関するものである。ひとたび識別されると、識別されたコンピュータ・マイクロプロセッサに適切な機能を可能状態にできる。
【背景技術】
【0002】
コンピュータの動作中は、特定のコンピュータシステムにおけるプロセッサを識別することが有用である。初期化動作およびブートアップ動作中は、初期化ソフトウェアにより特定の機能をインストールできるようにマイクロプロセッサを識別することが重要である。更に、ソフトウェアをインストールまたは実行している間にマイクロプロセッサを識別することが有用なことがある。ソフトウェアが利用できるマイクロプロセッサの機能はマイクロプロセッサのファミリイおよび型に高度に依存し、ひとたび識別されると、それらの機能をより良く利用できる。
【0003】
マイクロプロセッサのファミリイおよび型に加えて、マイクロプロセッサのバージョン、または「ステッピング」を知ることが有用なことがある。マイクロプロセッサの「ステッピングID」はそのバージョンを識別する。たとえば、マイクロプロセッサはいくつかの異なるバージョンで製造されたことがある。各バージョンは異なるステッピングIDで識別される。マイクロプロセッサが製造されている時は、初期バージョンにおいて現れたバグその他のマイクロプロセッサ問題を修正するために、マイクロプロセッサのいくつかのバージョンがしばしば導入される。それらのバグは、修正には遅すぎるマイクロプロセッサが製造された後でのみ見つかることがある。バグはある命令またはある命令シーケンスに対するマイクロプロセッサの応答に影響を及ぼすことがある。マイクロプロセッサのステッピングIDを知ることは有用であるから、そのバグにより影響を受ける命令および機能は可能状態にされない。更に、マイクロプロセッサがステッピングIDによりひとたび識別されると、それのバグが知られ、補償ソフトウェアをインストールできる。バグの存在を補償するソフトウェア修正は時には「ワーク・アラウンド(work−around)」と呼ばれる。たとえば、「POPA」が後に続く「PUSHA」が例外を生ずることが知られているものとすると、解決は2つの命令の間に「NOP」(動作なし)を挿入することである。
【0004】
コンピュータの初期化中にマイクロプロセッサを識別するために、従来のマイクロプロセッサにはIDコードを有する定数ROMを埋め込んでいた。そのIDコードはパワーアップ中にマイクロプロセッサのレジスタへ読み込まれる。IDコードが読み込まれた後で、レジスタの内容が初期化ソフトウェアにより重ね書きされる。更に、定数ROMの内容は、部分的には互換性要求のために、他の全ての要求のためには利用できない。この手法の問題は、初期化中にだけこのIDコードを利用できて、その他の時には利用できないことである。
【0005】
マイクロプロセッサを識別する従来の方法はケースバイケース、その場限りの手法を基にしている。たとえば、最初の型が特定のビットを常に零へセットし、2番目の型がこの特定のビットを一般に常に1にセットするものとすれば、このビットを試験して、そのマイクロプロセッサが最初の型か2番目の型であるかを判定できる。ステッピングIDを判定するために、より複雑な手法をしばしば必要としていた。たとえば、バグの存在を検出する一連のプログラム・ステップを実行でき、それによりマイクロプロセッサが特定のステッピングを有するものとして識別できる。バグを判定するためのしばしば一貫しない広い範囲の方法が種々のソフトウェア会社によって開発されている。マイクロプロセッサの初期の世代のために開発されたそれらの方法は、後の世代に使用された時に悪い結果を生ずることがある。
【0006】
ある年月にわたって新しいファミリイおよび新しい型を導入するには、インストールされたマイクロプロセッサを識別するソフトウェアがますます複雑かつ時間を要するようになることを求められる。たとえば、インテルx86マイクロプロセッサ・ファミリイは8086、80286、インテル386(登録商標)(「i386(登録商標)」)およびインテル486(登録商標)(「i486(登録商標)」)のファミリイを含む。それらの各ファミリイ中には、「SX(登録商標)」または「DX(登録商標)」のような2つまたはそれ以上の型が存在することがある。各型には3つ、4つ、またはそれ以上のバージョンが付随することがあり、各バージョンは異なるステッピングIDを有する。
【0007】
過去のインテルx86マイクロプロセッサにおいてファミリイ、型、およびステッピングIDを識別するために、一連の命令が順次実行される。たとえば、マイクロプロセッサが8086マイクロプロセッサであるか、80286マイクロプロセッサであるか、あるいはそれより高度のマイクロプロセッサであるかをコードで最初に検出できる。消去法によりマイクロプロセッサはそれが8026マイクロプロセッサではなかったこと、したがって、マイクロプロセッサは80286マイクロプロセッサまたはそれより高度のものであることをまず判定する。マイクロプロセッサの正しい型およびステッピングが知られる前に、動作シーケンスが進み、しばしば多数のステップおよび長い時間を費やす。この複雑なプロセスは極めて多数のプログラマの時間および慎重な実行を要する。更に、動作シーケンスはプロセッサの識別においては完全に信頼できるものではない。とくにマイクロプロセッサの将来の世代では、それらの方法は予測されるほどには機能しないかもしれない。たとえば、以前の世代において命令タイミングに依存していたシーケンスは、開発されるであろう将来の世代において予測される結果を生じないことがある。
【0008】
最新のマイクロプロセッサでは、マイクロプロセッサを区別するその場限りの方法は、見分けることができ、信頼できる差異がなかったため、成功しなかった。インテル・マイクロプロセッサでは、i486(登録商標)マイクロプロセッサと、現在開発中である将来のマイクロプロセッサ・ファミリイとの間の差異を検出するためにその場限りの方法を使用することは困難であるか、不可能であることすらあるかもしれない。
【0009】
マイクロプロセッサを識別し、マイクロプロセッサを識別するためのメカニズムを開発する際における付加的な問題はコンパティビリティの要求である。コンピュータ・ソフトウェアの販売業者は所有するソフトウェアのただ1つのバージョンを販売する事を好む。この1つのバージョンは、特定のマイクロプロセッサ・ファミリイまたはファミリイのグループに含まれるどのような型のプロセッサにおいても動作できなければならない。とくに、インテルマイクロプロセッサの上記ファミリイの任意の1つに対して開発されたソフトウェアを、まだ開発されていないマイクロプロセッサを含めて、そのグループ中の全てのマイクロプロセッサで実行できるものとすると、極めて有利である。いいかえると、後で開発されたソフトウェアは初期に開発されたマイクロプロセッサで動作できなければならず、初期に開発されたソフトウェアは後で開発されたマイクロプロセッサで動作できねばならない。そのマイクロプロセッサに対して定められていない命令をソフトウェアが処理することを企てるものとすると、「違法操作コード」例外が通常生ずる。その種の例外が生ずると、それ以降の処理の全てを停止する事以外に何を行うかをマイクロプロセッサは一般に知らない。
【0010】
その場限りの方法に依存しないでマイクロプロセッサ及びそのステッピングIDを識別するために信頼できる命令、または一連の命令を持つ事は有利であろう。そのような命令、または一連の命令を用いて、マイクロプロセッサで使用できる将来の機能を明確に決定することができる。更に、その命令を実行しない以前のマイクロプロセッサ世代で実行しようとした時には、この命令シーケンスが、もし避けられなければプログラムを早期に終了させるであろう破滅的な障害(たとえば、許容されていない演算符号)を避けるならば有利であろう。
【発明の開示】
【発明が解決しようとする課題】
【0011】
本発明の目的は、動作中にマイクロプロセッサを識別するための識別装置および方法を得ることである。
【課題を解決するための手段】
【0012】
マイクロプロセッサは、マイクロプロセッサのファミリイ、型およびIDステッピングのような情報を要求に応じて供給できる。諸機能を直接示す情報も含むことができる。システム・レベル・プログラマ、アプリケーション・プログラマ、ユーザー、およびその他の者は、識別情報をすぐアクセスできることの利益を得ることができる。マイクロプロセッサを特別に識別することにより、この方法は利用可能なアーキテクチャ機能を判定できる簡単かつ信頼できる方法を提供する。したがって、特定のマイクロプロセッサに適切な機能が使用でき、バグをワーク・アラウンドのためのプログラムまたはコード・シーケンスをインストールできる。マイクロプロセッサが動作中、たとえば、システム・ソフトウェアの初期化中、プログラムのインストール中、またはプログラムの実行中の任意の時刻にこの方法を利用できる。それが実行されるマイクロプロセッサに対しては、従来用いられていた広い範囲の方法とは対照的に、マイクロプロセッサを識別するための標準的な方法が提供される。
【0013】
より新しい型およびファミリイを導入して開発が常に進んでいるマイクロプロセッサ・ファミリイにおいて実現される場合には、この識別装置はとくに有用である。この識別法はソフトウェアでプログラムでき、かつ、識別回路を構成する新しいファミリイはもちろん、古いファミリイとも互換できる。いいかえると、識別装置および識別方法を実現しなかった古いプロセッサで例外を生じさせる事なしにその識別ソフトウェアを実行できる。更に、識別情報を供給するための識別回路をいくつかの古い型の新しいバージョンに後から取り付けることができる。この識別装置は多重モード・マイクロプロセッサにおいて有用であり、マイクロプロセッサの動作の任意のモードで使用できる。この装置は拡張でき、将来の型においては、ID情報の量を増加できる。
【0014】
この識別装置はデータの記憶および読出しのためのレジスタと、マイクロプロセッサを識別するためのデータ・フィールドを含むマイクロプロセッサIDデータを記憶するための読出し専用メモリ手段と、ID命令を受けるためのデコーダと、このデコーダから受けたID命令を実行するための制御回路とを備える。この制御回路は、マイクロプロセッサIDデータを読出し専用メモリから読出し、それを第1のレジスタに記憶するための手段を含む。この識別装置は制御回路の存在を示すIDフラッグを含む読出し/書込みメモリ素子と、IDフラッグを試験するための試験手段とを含む。
【0015】
読出し専用メモリは、マイクロプロセッサIDを保持するマイクロプロセッサ中に形成されたプロセッサIDレジスタを含むことができる。あるいは、マイクロコードROMに記憶されているマイクロコード命令により用いられるデータを保持する定数ROMにマイクロプロセッサ・データを記憶できる。マイクロプロセッサID情報をプロセッサIDレジスタに記憶することが好ましい。そのレジスタは、定数ROMよりも以後の型において一層容易に修正できる別々のレジスタである。読出し専用メモリ手段は、場所を割り当てられているが、データを含むために実行できない保留されているビットを含むことができる。プロセッサIDレジスタのサイズが将来のマイクロプロセッサにおいて拡大されるならば遭遇するであろう互換性の問題を避けるために、保留されているビットが供給される。読出し専用メモリ中のデータ・フィールドは、マイクロプロセッサのファミリイを示すファミリイ・フィールドと、マイクロプロセッサの型を示す型フィールドと、マイクロプロセッサの誤りまたはステッピングIDを示す改訂フィールドとを含むことができる。
【0016】
より特定の実施例においては、マイクロプロセッサのための識別装置は、データの記憶および読出しのための1つまたは複数の汎用レジスタと、マイクロプロセッサを識別するデータ・フィールドを含むマイクロプロセッサIDメモリ素子と、命令を受けるデコーダと、デコーダから受けて、CPUID命令を含む命令を実行するための制御手段と、CPUID命令の存在を示すIDフラッグを含む読出し/書込みメモリ素子と、IDフラッグを試験する一連の命令を供給するための試験プログラムと、CPUID命令を供給するためのプログラムとを備える。
【0017】
マイクロプロセッサを識別するためのコンピュータが実行する方法は、第1のグループのマイクロプロセッサと第2のグループ中のマイクロプロセッサとを区別することを含む。第1のグループ中のマイクロプロセッサはマイクロプロセッサID命令を実行しないが、第2のグループ中のマイクロプロセッサはマイクロプロセッサID命令を有する。この方法は、マイクロプロセッサが第1のグループと第2のグループのどれにあるかを判定するために、IDフラッグを試験するフラッグ試験命令シーケンスを実行する過程を含む。CPUID命令を実行しない従来のマイクロプロセッサで実行することをID命令が企てるものとすると、その過程は違法操作コード例外の発生を避ける。CPUID命令が実行されなかったことをフラッグ試験命令シーケンスの実行が示すものとすると、マイクロプロセッサは第1のグループのメンバーとして識別され、プログラム・ステップが実行されてCPUID命令の実行を避ける。しかし、ID命令が実行されたことをフラッグ試験命令シーケンスの実行が示すものとすると、マイクロプロセッサは第2のグループのメンバーとして識別され、プログラムはCPUID命令の実行を許す。これによりマイクロプロセッサIDメモリ素子の内容を汎用レジスタへ供給する。プロセッサIDデータの将来の拡張の余地を認めるために、付加汎用レジスタがクリヤされて付加IDデータのために潜在的な宛先を供給する。
【0018】
マイクロプロセッサを識別するためのコンピュータが実行するより具体的な方法は、IDフラッグを試験する前に、ファミリイの基本セットとファミリイの進んだセットをまず区別する。ファミリイの基本セットはフラッグ・レジスタ内にIDフラッグのためのビット場所を持たないから、IDフラッグを試験するためノードのような企ても違法操作コード例外を形成することがある。マイクロプロセッサがファミリイの基本セットのメンバーとして識別されたとすると、CPUID命令の実行はもちろん、試験フラッグ命令シーケンスも避けられる。それから、基本マイクロプロセッサをより具体的に識別するために適切なように他の試験を実行できる。ファミリイの進んだセットはIDフラッグのためのビット場所を有するから、マイクロプロセッサがそのセットのメンバーとして識別されるものとすると、マイクロプロセッサが第1のグループと第2のグループのいずれにあるかを識別するために試験フラッグ命令シーケンスを実行でき、それに従ってCPUIDが実行される。
【0019】
この明細書で説明する構成および利点は必ずしも包括的なものではなく、とくに、当業者は図面、明細書および請求項を読むことにより、多くの付加構成および利点が明らかであろう。更に、明細書において使用した用語は読みやすさおよび指示を目的として主として選択され、発明の要旨を述べるためには選択されなかったかもしれない。発明の要旨を決定するためには請求項に頼ることが必要である。
【実施例】
【0020】
図1〜図4は説明のためだけの本発明の種々の実施例を示すものである。当業者は、本発明の原理を逸脱する事なしに、ここで説明する構造および方法の別の実施例を採用できることが以下の説明から容易にわかるであろう。
【0021】
まず、マイクロプロセッサ10と、12で全体的に示されている関連するソフトウェアとのブロック図である図1を参照する。マイクロプロセッサ10は読出し/書込みメモリ素子14(フラッグ・レジスタ)を含む複数のレジスタを含む。フラッグ・レジスタ14はACフラッグ16とIDフラッグ18を含む。ACフラッグ16とIDフラッグ18はフラッグ・レジスタ14内で単一ビットであることが好ましい。初期化中は、フラッグ・レジスタ14はソフトウェアおよびハードウェアにそれぞれ特有の値が典型的にロードされる。マイクロプロセッサ10は第1の汎用レジスタ20と第2の汎用レジスタ22も含む。レジスタ20、22はマイクロプロセッサにおいて一般に用いられる標準的な任意の読出し/書込みレジスタを含むことができる。一般に、フラッグ・レジスタ14と汎用レジスタ20、22はアセンブリ言語におけるプログラマには「見ることができる」。いいかえると、プログラマはそれらのレジスタに他の任意のレジスタまたはメモリから書込むことができ、またはプログラマはこのレジスタから他の任意のレジスタまたはメモリへ読出すことができる。選択されたビットを読出したり、書込んだりできるように、それらのレジスタを操作できる。それらのレジスタ中のデータを「マスク可能」と名付けることができる。マイクロプロセッサ10はいくつかの付加レジスタを含むこともできる。それらのレジスタはプロセッサを動作させるために有用である目的のために使用できる。
【0022】
マイクロプロセッサ10はプロセッサIDメモリ素子、たとえば、プロセッサIDレジスタ30も含む。そのレジスタ内部でID情報31が符号化される。このIDメモリ素子はプログラマには見えない、すなわち、IDメモリ素子は直接操作できない。たとえば、汎用レジスタ20、22とは異なって、IDメモリ素子は他の任意の選択されたレジスタへ直接読込むことができない。本発明の原理に従って構成されたマイクロプロセッサの一実施例の製作中に、プロセッサIDレジスタ30は読出し専用レジスタとしてマイクロプロセッサ10に形成される。別の実施例においては、プロセスID情報31を定数ROM(すなわち、マイクロコードにより使用されるデータ用の読出し専用メモリ)33に記憶できるが、製造上の理由から、以後の型においては、密構造であるために変更が困難である定数ROM33より一層容易に変更できる別々のレジスタ30に記憶することが好ましい。更に別の実施例においては、プロセスIDレジスタ30は2つ以上のレジスタで構成できるから、等しい目的を果たすいくつかのレジスタ内にID情報を配置できる。
【0023】
プロセッサIDレジスタ30内で実行されるプロセッサID情報31は、識別されたマイクロプロセッサのファミリイを示すファミリイ・フィールド32を含む。アプリケーション・プログラマおよびシステム・プログラマへ付加機能を提供するアーキテクチャの大きな差異により種々のファミリイが識別される。プロセッサIDレジスタ30は、ファミリイ内のマイクロプロセッサの型を示すデータを含む型フィールド34も含むことができる。たとえば、インテル・マイクロプロセッサにおいては、文字「SX」(登録商標)と「DX」(登録商標)は同じマイクロプロセッサ・ファミリイ内の種々の型を表す。種々のファミリイは、アプリケーション・プログラマとシステム・プログラマにとって通常は明らかである種々の構成を含むが、マイクロプロセッサの型の間の違いがシステム・プログラマだけに同様に影響を及ぼす。
【0024】
プロセッサIDレジスタ30は改訂フィールド36も含む。この改訂フィールドはマイクロプロセッサのステッピングIDを示すデータを含む。マイクロプロセッサが製造される時は、マイクロプロセッサのバージョンを表す特定のステッピングIDで識別される。予測されないのにしばしば生じてマイクロプロセッサの動作に悪影響を及ぼす誤り、すなわち、「バグ」のために種々のバージョンを必要とするのである。それらの誤りは、必ずしも全ての可能性をしばしば予測できない開発過程の不幸な結果であることがあり、あるいはマイクロプロセッサの動作に影響する製造の誤りを単に表すことがある。それらのバグは後の型では固定できることがあるが、初期の型では依然として生きている。したがって、マイクロプロセッサの種々のバージョンを識別するためにステッピングIDが実現される。一般に、誤りはシステム・プログラマにとって明らかなだけであるが、ある場合にはアプリケーション・プログラマにより供給される複雑な一連の命令が問題を生ずる。一般に、バグの存在がひとたび識別されると、ソフトウェア修正がバグを回避するものが開発される。それらのプログラムは「ワーク・アラウンド」または「ワーク・アラウンド・プログラム」としばしば呼ばれる。それらのプログラムは一般的かつ有用であるが、とくにマイクロプロセッサの最も初期に製造されたバージョンでは、複雑な命令シーケンスを要求することがある。
【0025】
別の実施例におけるプロセッサID30は、特定のマイクロプロセッサの一連番号を示す、または特定の機能の存在を指定する機能フィールド37のような、識別のために有用な別の情報を示すフィールドのような付加フィールドを含むことができる。将来実現できる付加フィールドを取り扱う際に使用するために、保留されているビット38がプロセスIDレジスタ30に含まれる。保留されているビット38は、実行されるのでなければ、どのような意味も割り当てられない。ビットが保留されているとして、または定められていないとしてマークされると、それは将来のプロセッサとの互換性のためには、それらのビットを将来の未知の効果を有するものとしてソフトウェアが取り扱うことが重要である。保留されているビットにはソフトウェア依存性が存在してはならない。
【0026】
マイクロプロセッサ10は制御器40も含む。この制御器40は、情報を受けてそれを復号するための通常のデコーダ回路41を含む。また、プロセッサ10はデコーダ回路41から供給された命令を実行するための制御論理42も含む。この制御論理は命令を実行するために必要に応じてマイクロコード43を用いる。好適な実施例においては、マイクロコード43はCPUID命令を実行するためのCPUID命令マイクロコード44も含む。これについては後で詳しく説明する。別の実施例においては、CPUID命令を実行するための回路を制御論理42内に完全に配置できる。
【0027】
制御器40において実行する、プログラム12により全体的に示されているソフトウェアは主プログラム50を含む。それは任意の数のプログラムを示す。たとえば、主プログラム50は、オペレーティングシステムを初期化するプログラム、すなわち、BIOS初期化ソフトウェア、またはアプリケーション・プログラムを含むことができる。主プログラム50は制御器40へ命令を供給し、あるいは命令を制御器40へ供給するために別のプログラムを選択できる。それらのプログラムはIDフラッグ18を試験するための試験フラッグ命令シーケンス52とCPUID命令54を含む。このCPUID命令はたとえば単一命令とすることができる。また、プログラム12は、マイクロプロセッサが基本的なものであるか、進んだものであるかを試験するための予備試験命令56を含む。付加プログラム(図示せず)も利用できる。
【0028】
マイクロプロセッサIDメモリ素子はマイクロプロセッサCPUID命令54を介してアクセスされる。CPUID命令54は制御器40内の適切な回路で実行される。その回路はデコーダ41においてCPUID命令54の演算符号を認識し、制御論理42において適切なステップを実行して、IDメモリ素子内の識別情報31を、プログラマが見る事ができる汎用レジスタ20、22へ供給する。それから識別情報31をプログラマは利用でき、希望する任意の目的のためにプログラマによりその識別情報を取り扱うことができる。たとえば、そのプログラマは、識別されているマイクロプロセッサにとってどの機能が適切であるかを確認するために、各フィールドからデータを読出すことができる。
【0029】
ID情報がプロセッサIDレジスタ30に記憶され、マイクロコード43がCPUID命令マイクロコード44を含むような実施例においては、マイクロコード・シーケンスがプロセッサIDレジスタ30の内容を呼び出すためにそこに含まれ、その内容を第1の汎用レジスタ20または第2の汎用レジスタ22のような汎用レジスタに記憶させる。プロセッサIDレジスタ30内の情報の量に応じて、それらの内容を2つ以上の汎用レジスタに記憶できる。マイクロコード44はCPUID命令54のためのレジスタを指定するように機能する。
【0030】
制御器40に対する指示を読出し、または供給するために、ユーザー・プログラマ・インタフェース58をマイクロプロセッサ10へ接続できる。たとえば、レジスタ20、22、24の1つに記憶されている情報をビデオ端子へ読出すためにインタフェース58を使用できる。更に、ユーザー・インタフェースすなわちプログラマ・インタフェース58はレジスタ20、22、24の内容を手動でアクセスするためのキーボードを含むことができる。
【0031】
次に、好適な実施例のコンピュータで実行する方法を示す図2を参照する。この方法のための環境を説明するために、コンピュータにインストールされているマイクロプロセッサを識別するという目標をボックス60がセットする。インストールされたマイクロプロセッサはファミリイの基本セットのメンバーかまたはファミリイの発展したセットのメンバーである。全てのファミリイは相互に互換できるが、発展したファミリイにおいては、ファミリイの基本セットより多くの機能及びより多くの命令を利用できる。ファミリイの基本セットはフラッグ・レジスタ14内のIDフラッグ18のためのビット場所を持たないから、IDフラッグ18を試験するどのような企ても違法操作コード例外を生ずることがある。ファミリイの発展したセットはIDフラッグ18のためのビット場所を有する。ファミリイの発展したセット中には、プロセッサID命令を持たない第1のグループと、プロセッサID命令を実行する第2のグループとの2つのグループが存在する。CPUID命令54は発展したファミリイの第2のグループ内でのみ使用でき、基本ファミリイおよび発展したファミリイの第1のグループ内では使用できない。基本ファミリイまたは発展したファミリイの第1のグループにおいてCPUID命令54の実行が企てられたとすると、CPUID命令54の実行の企てが違法操作コード例外を不幸に生じ、例外ハンドラへ制御を送ろうとする。それは恐らくプログラムを終了させる。違法操作コード例外が発生される可能性を避けるために、以下のステップが提供される。
【0032】
実行ボックス62においては、プロセッサがファミリイの基本セットからのものか、ファミリイの発展したセットからのものかを判定するために試験命令シーケンス56が実行される。判定ボックス64に示されているように、プロセッサがファミリイの基本セットからのものとすると、動作はボックス66へ進み、そこで、基本プロセッサを更に識別するために必要に応じて別の従来の試験を行うことができる。もちろん、ボックス60における動作を開始する前に、既にプロセッサがファミリイの発展したセットのメンバーであると判定されると、動作はボックス68へ直接飛び越すことができる。そのボックスはプロセッサがCPUID命令を実行したかどうかを試験する。
【0033】
ボックス64から別の向きへ分岐して、プロセッサがファミリイの発展したセットからのものとすると、プロセッサがプロセッサID命令を有するかどうかを判定するために、ボックス68に示すように試験IDフラッグ命令シーケンス52を実行することにより、別の試験を行う。判定ボックス70に示すように、IDフラッグ18がセットされていないと判定されたとすると、ボックス72に示すように、プロセッサはファミリイの発展したセットのものであると判定されるが、CPUID命令54は実行されていないからそれは使用できない。したがって、以後のCPUID命令54を実行してはならない。しかし、ボックス72でIDフラッグ18がセットされていると判定されたとすると、プロセッサ10はCPUID命令54を実行する。したがって、ボックス74に示すように、CPUID命令54がプロセッサID情報31をレジスタ20、22、24のような汎用レジスタへ読込む。このようにして、インストールされたマイクロプロセッサのファミリイ、型、およびステッピングIDが識別される。機能フィールド37をレジスタ20、22、24の1つへも読込んで、そのマイクロプロセッサで使用できる機能を更に識別できる。将来の拡張のために、第2の汎用レジスタ22の内容をクリヤして保留されているビット38(図1)、または将来の型で実現できる他の任意の場所に記憶できる付加識別データを受けるようにする。好的な実施例においては、別のレジスタ24(図1)に含むことができる2つの付加レジスタの内容がクリヤされて将来の実行のための機会を提供する。それに続いて、ボックス76に示すように、マイクロプロセッサに適切な機能が可能にされる。機能しない機能が不能にされ、適切なワーク・アラウンドも可能にされる。これについては図3と図4を参照して詳しく説明する。それから動作は継続される。
【0034】
図2を再び参照する。インテルファミリイについての以下の説明は、ファミリイの基本セットの例、およびファミリイの発展したセットの第1のグループおよび第2のグループの例についてのものである。番号80286またはそれ以下の番号を持つインテルマイクロプロセッサのようなファミリイの基本セットにおいては、IDビット18が含まれているEFLAGSレジスタがより小さい16ビットサイズを有するから、そのIDビット18は物理的には存在しない。したがって、それらの基本ファミリイにおいてID試験ビット命令シーケンスを実行する企てが、違法操作コードを発生する傾向がある。しかし、i386(登録商標)マイクロプロセッサ・ファミリイおよびi486(登録商標)マイクロプロセッサ・ファミリイのような発展したファミリイにおいては、EFLAGSレジスタが32ビットサイズへ拡張された。ある数のそれらのビットが将来の型すなわちファミリイのために保留されているから、それらのビットはセットできない。保留されたビットは例外を生ずることなしに依然として読出し、または書込むことができるが、それらは常に同じ値へ戻る。保留されているビットをセットまたはリセットする企ては単になんらの効果も生じない。保留されているビットは物理的に存在するから、それらの発展したファミリイにおいてID試験ビット命令シーケンスを実行する企ては例外を生じない。
【0035】
インテルアーキテクチャにおける好適な実施例においては、IDビット18は、i386(登録商標)マイクロプロセッサ・ファミリイおよびi486(登録商標)マイクロプロセッサ・ファミリイにもともと保留されていたビットで、EFLAGSレジスタにおいて実行される。したがって、ID試験ビット命令シーケンス52は、それらのファミリイにおいて実行される時は、例外を発生しない。更に、ID試験ビット命令シーケンス52の実行はCPUID命令54を使用できるか否かを示す。この開示のために、IDビットを実行されなかったi386(登録商標)ファミリイおよびi486(登録商標)ファミリイのようなファミリイが、「発展したファミリイの第1のグループ」の例である。IDビット18を実行し、CPUID命令54を実行するマイクロプロセッサは「発展したファミリイの第2のグループ」の例である。後で製造されるi386(登録商標)マイクロプロセッサおよびi486(登録商標)マイクロプロセッサの後のバージョンが、CPUID命令およびプロセッサIDレジスタと共同してIDビット18を含むことができる。それらの後で製造されるマイクロプロセッサは第2のグループのメンバーである。
【0036】
次に、ここで説明するプロセッサ識別法の種々の使用を示す流れ図が示されている図3を参照する。マイクロプロセッサ10の識別が必要である動作の開始時においては図3左側のブロック80から始まる。たとえば、動作の開始は、マイクロプロセッサ10のパワーアップに続いて実行されるBIOSコードを利用できる。それに続いて、ボックス82に示すように、マイクロプロセッサ10は識別される。それから、ボックス84においてマイクロプロセッサの構成が決定される。それから、ボックス86に示すようにそれぞれ適切に、機能がそのマイクロプロセッサに適当であるように可能にされ、ワーク・アラウンド・プログラムが実行され、機能しない機能が不能にされる。プロセッサおよびワーク・アラウンド・プログラムに依存して可能状態にされるマイクロプロセッサの機能の例を、図4を参照して以下に説明する。
【0037】
動作開始のマイクロプロセッサ10の識別の必要性に加えて、外部ハードウェアの装置ドライバが初期化される時はマイクロプロセッサを識別することが常に必要となる。たとえば、プリンタ・ドライバはそれを動作させるマイクロプロセッサを知ること、すなわち識別することを希望する。この場合には、それに、マイクロプロセッサ10を識別し、適切な機能を可能状態にするための一連の動作82、84、86が続く。装置ドライバ初期化がボックス92に示されている。更に、ボックス92に示すようにオペレーティングシステムが起動すると、ボックス82、84、86に示すようにマイクロプロセッサを識別し、機能を可能状態にすることも必要である。同様に、アプリケーション・プログラムが起動すると、ボックス82、84、86に示すようにマイクロプロセッサを識別し、機能を可能状態にすることも必要である。
【0038】
ボックス80、90、92、94を含めた、マイクロプロセッサ10を識別するために有用である例は、ここで説明する識別法を使用することの例にすぎない。この方法はマイクロプロセッサの動作中の任意の時刻に利用できる。たとえば、特定の命令または特定の命令シーケンスを使用できるか否か、または別の命令を実行できるかを確かめるために、プログラムの実行中にプロセッサを識別することが有用である。その場合には、ボックス82、84、86のステップを実行してマイクロプロセッサ10を識別し、適切な機能を可能にすることが有用である。
【0039】
次に、高性能マイクロプロセッサを含む好適な実施例における機能の可能化を示す流れ図である図4を参照する。ボックス100において、CPUID命令54が実行され、1つまたは複数の汎用レジスタにおいてID情報を利用できると仮定する。ボックス100において、機能を使用できるようにするためのプログラムの実行が開始される。ボックス102において、ファミリイ・フィールド32と型フィールド34が読出されてマイクロプロセッサのアーキテクチャ性能の指示を与える。ボックス104において、指示されたファミリイと型に適切な命令が可能にされる。次のボックス106においては、ステッピングIDフィールド(改訂フィールド36)が読出されて、マイクロプロセッサの識別されたバージョンに現れる誤りについての情報を供給する。次のボックス108においては、機能が可能にされ、不能にされ、かつ変更されて、識別された誤りを補償する。このステップ108は必要に応じてワーク・アラウンド・プログラムをインストールすることを含むことができる。このように、高性能マイクロプロセッサの性能を効果的に利用できる。
【0040】
ボックス102および104においては、マイクロプロセッサは識別され、それの適切な命令が可能にされる。たとえば、改良されたインテルマイクロプロセッサが、型に特定のレジスタからの読出しのために、シンタックス「RDMSR」を持つ命令を実行する。動作時には、RDMSR命令が第1の汎用レジスタ(「ecx」レジスタ)で指定された型に特定のレジスタから値を取り、第2の汎用レジスタ(「edx」レジスタ)に上位ビットを置き、下位ビットを第3の汎用レジスタ(「eax」レジスタ)に置く。「WRMSR」命令が同じレジスタを用いて型に特定のレジスタからの書込みを実行する。型に特定のレジスタの例がキャッシュ試験レジスタのようなレジスタである。初期のインテルマイクロプロセッサ、i486(登録商標)マイクロプロセッサ、においては、それらの試験レジスタは別々の専用「TR」コマンドによりアクセスされていた。したがって、プログラマがそれらの試験レジスタをアクセスする必要があるものとすると、プログラマはマイクロプロセッサをまず識別しなければならない。そうすると、そのプログラマはRDMSR命令がプログラマへ必要とする情報を供給するかどうかを知る。マイクロプロセッサが改良されたマイクロプロセッサであることが識別されると、RDMSR命令とWRMSR命令が選択される。しかし、マイクロプロセッサがi486(登録商標)マイクロプロセッサであると識別されると、専用TRコマンドが選択される。
【0041】
ボックス106および108においてはステッピングIDが供給され、プログラムが開始されて誤りをマイクロプロセッサ内部でワーク・アラウンドさせる。ワーク・アラウンド・プログラムの例が、i386(登録商標)DX(登録商標)マイクロプロセッサで生ずる問題の文脈において続く。与えられたマイクロプロセッサにおいては、それらの誤りは多数存在することがある。
【0042】
POPAまたはPOPAD命令が用いられる時のようなある条件の下では、i386(登録商標)DX(登録商標)マイクロプロセッサが不適切に実行する。POPAまたはPOPAD命令に、ベース・アドレス・レジスタAND、およびEAXまたはAX以外の付加レジスタを、インデックス・レジスタの実行アドレスを形成するためにインデックス・レジスタとして使用する命令が直ちに続く時には、i386(登録商標)DX(登録商標)マイクロプロセッサはEAXレジスタを意図しないのに損なう。
【0043】
下記のサンプル・コードは問題の例である。
MOVE EDX,4
POPAD
MOV EBX,dword ptr[EDX+EBX★4]
【0044】
更に、POPA(16ビット・バージョン)命令のすぐ後に、EAX(32ビットレジスタ)をその実効アドレスを形成するためにベース・レジスタまたはインデックス・レジスタとして使用する命令が続く時には、i386(登録商標)DX(登録商標)マイクロプロセッサが常に待つ(hang)。
【0045】
下記のサンプル・コードは問題の例である。
MOVE EAX,4
POPA
MOV EBX,dword ptr[EAX]
【0046】
上の条件に応じて、EAXレジスタは定められていない値を含み、またはプロセッサは実行を停止する。この動作が行われた後ではハードウェアがリセットされるまでマイクロプロセッサの適切な動作を保証できない。この命令シーケンスはi386(登録商標)DX(登録商標)マイクロプロセッサの実モード、保護モードおよび仮想モード86で生ずることができる。
【0047】
したがって、説明した命令シーケンスを決して実行しないことが重要である。あらゆる場合に成功することが判明しているワーク・アラウンド・コード・シーケンスは、各POPA(D)命令の後NINOP命令を挿入することである。例を下に示す。
【0048】
例1
MOVE EDX,4
POPAD
NOP
MOV EBX,dword ptr[EDX+EBX★4]
【0049】
例2
MOVE EDX,4
POPA
NOP
MOV EBX,dword ptr[EAX]
【0050】
要約すれば、違法操作コード例外を発生しない識別方法および装置が得られる。この方法は基本マイクロプロセッサおよび発展したマイクロプロセッサの両方に互換できる。マイクロプロセッサが発展していると判定されたら、それらのマイクロプロセッサがID命令を実行しない第1のグループのメンバーであるか、またはID命令を実行する第2のグループのメンバーであるかを判定する。プログラマその他の、それらの情報を知ることを希望する人は誰でも容易に識別できるようにするために本発明の装置を全ての発展したマイクロプロセッサにおいて実現できる。マイクロプロセッサが発展したファミリイの第1のグループのメンバーとしてもともと製造されており、したがって、マイクロプロセッサID命令を実行できないとしても、そのマイクロプロセッサのその後の製造にこの識別装置を組み込むことができる。マイクロプロセッサがひとたび識別されると、プログラムはマイクロプロセッサの構成をより良く利用できる。とくに、マイクロプロセッサが正確に識別されるとすると、マイクロプロセッサのより大きい性能に釣り合わせて付加機能を可能にできる。したがって、マイクロプロセッサの機能を効率的かつ迅速に利用できる。
【0051】
付録1は、i386(登録商標)マイクロプロセッサと、i486(登録商標)マイクロプロセッサと、改良されたマイクロプロセッサとを識別するために欠かれたプログラムの例を示すものである。それらのマイクロプロセッサは全て前記定義により「発展している」ものである。i386(登録商標)マイクロプロセッサi486(登録商標)マイクロプロセッサは、32ビットEFLAGSレジスタを有するが、CPUID命令54を実行しないから、第1のグループに含まれ、改良されたマイクロプロセッサは、CPUID命令54を実行するから、第2のグループに含まれる。マイクロプロセッサが改良されたマイクロプロセッサとして識別されたとすると、ステッピングIDと、型およびファミリイを含めた変数を識別するために、識別情報が移動される。
【0052】
付録2は、基本プロセッサと発展したプロセッサを識別するために書かれたプログラムの例を示す。このプログラムに関して、基本プロセッサは80286マイクロプロセッサと8086マイクロプロセッサを含み、発展したプロセッサはi386(登録商標)マイクロプロセッサを含む。プロセッサが80286マイクロプロセッサと8086マイクロプロセッサであるとプログラムが判定すると、そのプロセッサは基本プロセッサである。しかし、プロセッサがi386(登録商標)マイクロプロセッサであるとプログラムが判定すると、そのプロセッサは「発展し」おり、実際にはi486(登録商標)マイクロプロセッサであるか、将来のファミリイからのものである。付録2はプロセッサの型を判定するために用いられてきたその場限りのプログラムの例である。
[付録1]
【0053】


[付録2]
【0054】


【図面の簡単な説明】
【0055】
【図1】識別情報を記憶するためのマイクロプロセッサIDレジスタを含むマイクロプロセッサのアーキテクチャのブロック図である。
【図2】マイクロプロセッサIDを判定するための方法ステップの流れ図である。
【図3】いくつかの文脈におけるマイクロプロセッサの識別および機能可能化を示す流れ図である。
【図4】識別情報を得る事に続くマイクロプロセッサにおいて生ずることがある方法ステップの流れ図である。
【符号の説明】
【0056】
10 マイクロプロセッサ
14 フラッグ・レジスタ
20、22 汎用レジスタ
30 プロセッサIDレジスタ
33 定数ROM
40 制御器
42 制御論理

【特許請求の範囲】
【請求項1】
プロセッサのタイプを規定するフィールドを有する、装置の識別を記憶する記憶素子と、
レジスタと、
上記の記憶素子とレジスタとに結合し、複数の命令実行資源を含み、識別命令に応答して上記の装置の識別を上記のレジスタに記憶させる制御ユニットとからなるプロセッサ。
【請求項2】
さらに、第2のレジスタを含み、前記制御ユニットは、識別命令に応答して装置の識別の第1の部分を前記第1のレジスタに記憶させ、装置の識別の第2の部分を前記第2のレジスタに記憶させる請求項1に記載のプロセッサ。
【請求項3】
前記第1のレジスタは汎用レジスタであり、前記記憶素子はプログラマには見えず、それがため直接操作することができない請求項1または2に記載のプロセッサ。
【請求項4】
記憶素子は読み出し専用のメモリからなる請求項1〜3の何れか1項に記載のプロセッサ。
【請求項5】
装置の識別はモデルフィールドを含む請求項1〜4の何れか1項に記載のプロセッサ。
【請求項6】
装置の識別は改版フィールドを含む請求項1〜5の何れか1項に記載のプロセッサ。
【請求項7】
装置の識別はファミリーフィールドを含む請求項1〜5の何れか1項に記載のプロセッサ。
【請求項8】
制御ユニットは識別命令を実行するためのマイクロコードを含む請求項1〜7の何れか1項に記載のプロセッサ。
【請求項9】
制御ユニットは識別命令を実行するための制御ロジックを含む請求項1〜7の何れか1項に記載のプロセッサ。
【請求項10】
さらに、識別レジスタを実行することができるということを表すフラグビットを有するフラグレジスタを含む請求項1〜9の何れか1項に記載のプロセッサ。
【請求項11】
前記プロセッサは単一の集積回路に配置される請求項1〜10の何れか1項に記載のプロセッサ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2006−53943(P2006−53943A)
【公開日】平成18年2月23日(2006.2.23)
【国際特許分類】
【出願番号】特願2005−275267(P2005−275267)
【出願日】平成17年9月22日(2005.9.22)
【分割の表示】特願平5−237310の分割
【原出願日】平成5年8月31日(1993.8.31)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】