(57)【特許請求の範囲】
【請求項１】
時期尚早な早期例外の通知を防止する計算システムにおいて、
命令キャッシュからの命令を取り込むための、命令フェッチ・ユニットであって、
前記命令が実行された場合に、結果として早期例外条件になるかどうかを判定するための早期例外検出手段と、
前記命令が実行された場合に、結果として早期例外条件になると前記早期例外検出手段が判定する場合には、早期例外メッセージとして符号化された命令コードを命令バッファの中に挿入するための及び、前記命令が実行された場合に、結果として早期例外条件にはならないと前記早期例外検出手段が判定する場合には、前記命令として符号化された命令コードを前記命令バッファの中に挿入するための挿入手段
とを含む、命令フェッチ・ユニットと、
前記命令コードが、前記命令として符号化された場合に、前記命令コードを実行するための実行ユニットと、
命令撤回ユニットであって、
前記命令バッファからプログラム順に前記命令コードを削除するための命令削除手段と、
前記命令コードを復号するための復号手段と、
前記命令コードが復号された早期例外メッセージの場合に、早期例外を通知するための早期例外通知手段
とを含む、命令撤回ユニット
とを備える、計算システム。
【請求項２】
所与のページ上の少なくとも１つの命令が実行される場合にのみ、プログラム・メモリ内の前記所与のページから命令キャッシュへの命令の移動を許可する命令キャッシュ移動ルールに従う計算システムにおいて、
命令を取り込むための、命令フェッチ・ユニットであって、前記命令は前記命令キャッシュか、前記プログラム・メモリかのどちらか一方から取り込まれるものであり、次の命令が前記命令キャッシュの中に存在しない場合に、前記プログラム・メモリから命令を取り込むためのプログラム・メモリ取り込み手段を含む、命令フェッチ・ユニットと、
非常駐のページ上に前記命令が存在するかどうかを判定するための、早期ページ交差例外検出手段であって、前記非常駐のページは、命令がまだ実行されていないプログラム・メモリの中のページを含むことからなる、早期ページ交差例外検出手段と、
前記早期ページ交差例外検出手段が、命令がまだ実行されていないページ上に前記命令が存在すると判定する場合に、移動例外メッセージとして符号化された命令コードを命令バッファに挿入するための挿入手段と、
前記命令バッファに含まれる、実行可能な命令として符号化された命令コードを実行するための実行ユニットと、
命令撤回ユニットであって、
プログラム順に前記命令バッファから命令コードを削除するための命令削除手段と、
前記命令コードが、前記移動例外メッセージとして符号化された場合に、前記所与のページから前記命令キャッシュへと、命令を移動させるよう、前記命令フェッチ・ユニットに通知するための  早期ページ交差例外通知手段
とを含む、命令撤回ユニット
とを備える、計算システム。
【請求項３】
マイクロプロセッサ・システムにおける時期尚早な早期例外の通知を防止する方法であって、２つの同時実行するプロセスを含み、
第1のプロセスが、
(a)  命令キャッシュから命令を取り込むステップと、
(b)  取り込まれた命令を実行した場合に、結果として例外条件となるかどうかを判定するステップと、
(c)  取り込まれた命令を実行した場合に、結果として例外条件となる場合には、符号化された例外メッセージからなる命令コードを命令バッファに挿入するステップと、
(d)  取り込まれた命令を実行した場合に、結果として例外条件とならない場合には、取り込まれた命令からなる命令コードを命令バッファに挿入するステップ
とを含み、
第２のプロセスが、
(e)  命令バッファから実行された命令コードをプログラム順に削除するステップと、
(f)  符号化された例外メッセージからなる命令コードを検出し、符号化された例外メッセージからなる命令コードが検出されると、適切な例外信号を通知するステップ
とを含む方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般には、マイクロプロセッサ・システムに関し、詳細には、特殊命令符号化の手段によって、早期例外を追跡するシステム及び方法に関する。
【０００２】
【従来の技術】
当技術分野では汎用マイクロプロセッサ・システムが知られている。通常、マイクロプロセッサは、ノイマン型モデル上に構築され、その場合、データ及び命令は、位置によってアドレス指定可能であるシステム・メモリに記憶され、中央演算処理装置（ＣＰＵ）が命令を順次インライン式に実行する。
【０００３】
命令は通常、２進数の形で表される。単一の命令は一般に、少なくともｏｐｃｏｄｅ、すなわち特定の命令コードの２進表現を含む。ｏｐｃｏｄｅは、特定の命令に応じて、１つ又は複数のオペランドを含むこともできる。最後に、大部分の命令は、処理に必要な追加情報の追跡を維持するために、１つ又は複数の制御ビットを含む。
【０００４】
命令の実行は通常、下記の３つの段階からなる。
【０００５】
１．命令フェッチ段階
２．演算段階
３．メモリ・アクセス段階
命令フェッチ段階中には、メモリから命令が取り出される。演算段階時には、命令が復号され、（アドレス計算を含む）算術演算が実行される。メモリ・アクセス段階中には、データがシステム・メモリから読み出され、あるいはシステム・メモリに書き込まれる。一般に、ＣＰＵ中の異なる機能ハードウェア・ユニットが、別個に３つの段階の演算を実行する。多くの場合、これらの機能ユニットはそれぞれ、命令フェッチ・ユニット、実行ユニット、メモリ管理ユニットと呼ばれる。したがって、各命令の実行には、少なくとも３クロック・サイクルが必要である。各段階を完了するには、少なくとも１クロック・サイクル全体が必要なので、大部分の現代のマイクロプロセッサ・システムは、命令パイプラインを利用している。命令のパイプライン化は、命令の実行を重複できるようにする、当技術分野における既知の方法である。
【０００６】
下記に示した表１は、命令パイプラインの典型的な従来技術の演算を示す。
【０００７】
【表１】
0003762816.tif 000002
【０００８】
表１に示すように、３つの命令実行段階は、それぞれ、各クロック・サイクル中に単一の演算を実行可能な、３つの別々の機能ユニットへと区画される。表１は、命令Ｉ0、Ｉ1、Ｉ2、Ｉ3及びＩ17が開始される、５つの実行サイクルを示す。図示のように、命令Ｉ0及びＩ1は、完了するために各段階を循環する。したがって、各命令を完了するのに、３クロック・サイクルが必要であるとしても、理想的には、クロック・サイクルごとに１つの命令が完了すべきである。したがって、ＡＬＵ命令（たとえば、ＡＤＤ、ＳＵＢ、ＡＮＤ、ＯＲ等）及びメモリ・アクセス命令（たとえば、ＬＯＡＤ、ＳＴＯＲＥ）を用いた場合、命令のパイプライン化は最大限に動作する。しかし、条件付きプログラム制御命令（たとえば、ＢＲＥ（等しい場合に分岐）、ＢＲＧ（大きい場合に分岐）、ＢＲＬ（小さい場合に分岐）、等）によって、パイプライン・シーケンスは複雑になる。
【０００９】
条件付きプログラム制御命令は、条件付き分岐命令とも呼ばれ、プログラム・データのリアルタイム条件に依存する、プログラム・フローの１つの代替例を与える。したがって、フローの方向は、条件が分かるリアルタイムでしか判定できない。その結果、命令フェッチ・ユニットは、条件付き分岐命令が完了し、それによって命令パイプラインで「バブル」を発生するまで待機し、あるいは誤って予想し、したがって命令パイプラインで「バブル」を発生させる危険を冒して、フローの方向を予想しなければならない。後者は、「投機的実行」として知られている方法の１つの形態であり、当技術分野でよく知られている。
【００１０】
さらに一般的には、投機的実行は、命令が実際に完了するかどうかが分かる前に、命令の処理が開始するといつでも生じると言える。投機的実行は、命令の実行を最適化して性能を向上させるために使用される。いくつかのシステムでは、命令はプログラム順から外れて実行される。これらのシステムでは、投機的実行は、古い方の命令が首尾良く完了する（すなわち、例外条件を発生させる）かどうかをシステムが知る前に、新しい方の命令を実行するように動作することができる。実行に基づき、古い方の命令によって例外条件が発生した場合、すべての新しい方の命令は、命令バッファから破棄される。他の状況では、実行されていない古い方の記憶命令が、同じ位置にアクセスするかどうかが分かる前に、ロード命令を実行することによって、投機的実行が生じることもある。実行に基づき、新しい方の命令がロードされたのと同じ位置に、古い方の命令が記憶されていることが分かった場合、古い方の記憶命令よりも新しいすべての命令が、命令バッファから削除され、それらの命令が実行された結果が破棄される。
【００１１】
投機的実行の他の使用の場合、命令フェッチ・ユニットが、条件付き分岐命令の結果を「推測」又は予想し、目標アドレスか、又は予想による次のインライン・プログラム・アドレスから条件が分かる前に、命令を取り出すべく進める。条件が分かったときに、予想が誤りであったと判定された場合、すでに取り出されている誤った命令が破棄され、命令の取り出しは、正しいアドレスから再開する。たとえば、表１を参照すると、命令Ｉ2は、条件付き分岐命令ＩBである。命令フェッチ・ユニットは、この分岐がとられないであろうと予想し、その代わり、サイクルＴ3中に次のインライン・プログラム命令Ｉ3を取り出す。リアルタイム演算時に、実際にはこの分岐がとられ、命令フェッチ・ユニットの予想は誤りになる。したがって、命令Ｉ3の取り出しは誤りであり（すなわち、ＩBは「誤って予想された分岐」である）、その結果、サイクルＴ3の実行段階に示したように、パイプライン・シーケンス中にバブルが発生する。命令Ｉ3は破棄され、命令の取り出しは、正しいアドレス（すなわち、分岐目標アドレス）において、命令Ｉ17のフェッチによって再開する。
【００１２】
時には、命令フェッチ・ユニットは、実行することができ、あるいは実行できない命令を取り出す間に、実行されると、結果として例外条件となる命令に出会う。例外条件とは通常、パイプライン・シーケンス中で、機能停止又はバブルを引き起こし、ＣＰＵに強制的にプログラム実行フローを変更させる恐れのある条件である。この機能停止又はバブルは通常、例外条件を示す多数の信号によってＣＰＵ内で伝達される。一般に、例外条件により、割込みハンドラによって優先付けられ処理される割込みが発生する。割込みハンドラは、いくつかのパイプ段階の実行を中断し、システム位置で新しい命令の実行を開始し、しかるべく特権演算モードを変更することができる。第１段階（すなわち、命令フェッチ段階）中に発生する例外は、命令の実行の早期に検出されるので、早期例外と呼ばれる。通常の例外条件には、メモリ保護違反、キャッシュ・ミス、命令バッファ・ミス、ページ・フォルト、変換索引バッファ（ＴＬＢ）ミスが含まれる。
【００１３】
早期例外の１つの例として、マイクロプロセッサが保護メモリから命令を実行しようとした場合、この事実は、第１実行段階で命令フェッチ・ユニットによって検出することができる。メモリ保護違反の検出は、メモリ違反が早期に検出され、例外信号が返され、違反命令が、完了しないうちに中断されるように、命令処理の「早期」に生じる。
【００１４】
早期例外の他の例は、変換索引バッファ・ミスである。仮想メモリを有するシステムではしばしば、「変換索引バッファ」（ＴＬＢ）と呼ばれる高速連想メモリを使用して、仮想アドレスが、迅速に物理メモリ・アドレス相当物へと変換される。当技術分野で知られているように、変換バッファは、最後に使用された仮想／物理アドレス変換をキャッシュに格納する。所望の変換が変換バッファに存在しない場合（すなわち、ＴＬＢ「ミス」）、変換プロセスは停止しなければならず、したがって、失敗したメモリ・アクセスを要求した命令も停止しなければならない。所望の変換は次いで、メモリ中のより低速の変換テーブルから読み取られ、ＴＬＢにロードされる。プロセス中の変換が命令フェッチのためのものである場合、命令フェッチ・ユニットは、ミスを検出して、早期例外を知らせることができる。
【００１５】
【発明が解決しようとする課題】
上記のように、命令フェッチ・ユニットはしばしば、実行されると結果として例外条件となる命令に出会う。しかし、投機的実行のために、例外を発生させる可能性のある命令が実行されるかどうかは、命令フェッチ・ユニットには分からないので、命令が取り出されるときに例外を知らせるのは時期尚早である。したがって、どの命令が実行されたときに例外条件を発生させるかと、それがどのタイプの例外を生成するかを実行ユニットに知らせる手段が必要である。この問題に対する１つの解決策は、命令が実行される際にこの情報を追跡する、各命令に関連付けられた余分の記憶ビットを追加することであろう。しかし、この解決策は、プロセッサに余分の論理を追加し、面積及びコストを増大させる。
【００１６】
したがって、例外を追跡するために必要な追加論理を最小限に抑え、例外の時期尚早な「間違った」合図をなくする、早期例外を追跡する方法を使用することが望ましい。
【００１７】
【課題を解決するための手段】
本発明の好ましい実施例によれば、マイクロプロセッサ・システムにおける早期例外を追跡するシステム及び方法が提供される。このシステムは一般に、プログラム・メモリから命令を取り出し、取り出した命令が、実行されると結果として例外条件になると判定された場合には、例外メッセージを命令バッファに挿入し、取り出した命令が、実行されると結果として例外条件にはならないと判定された場合には、取り出した命令を命令バッファに挿入するための命令フェッチ・ユニットを含む。本発明のシステムは、命令バッファに含まれる命令を実行するための実行ユニットも含む。更に、本発明のシステムは、命令を、実行ユニットによって処理された後にプログラム順に命令バッファから削除し、その命令を復号し、命令が例外メッセージである場合に例外を知らせるための命令撤回ユニットを含む。
【００１８】
本発明の好ましい実施例は、命令フェッチ・ユニット内の投機的実行手段と、実行ユニット内の命令バッファ管理ユニットも含む。投機的実行手段は、条件付き分岐命令を検出し、条件付き分岐命令の目標アドレスを予想し、予想した目標アドレスに従って次の命令を取り出す。命令バッファ管理ユニットは、条件付き分岐命令を検出し、実行に基づいて、条件付き分岐命令の計算された目標アドレスを検出し、計算された目標アドレスと、投機的実行手段からの予想された目標アドレスを比較する。計算された目標アドレスと予想された目標アドレスが合致しないとき、命令バッファ管理ユニットは、命令バッファに条件付き分岐命令が挿入された後に挿入されたすべての命令を命令バッファから削除する。
【００１９】
本発明の好ましい実施例では、命令バッファは、独立のＡＬＵ命令バッファと、独立のメモリ・アクセス命令バッファとを備え、例外メッセージが挿入されるのは、ＡＬＵ命令バッファだけである。このため、ＡＬＵ命令バッファから削除された場合に、命令撤回ユニットが例外メッセージであると認識するメモリ・アクセス命令コードを使用して、例外メッセージを符号化することが可能になる。
【００２０】
本発明は、未使用命令コードを例外メッセージとして使用することも意図するものである。複数の例外メッセージを実施し、各例外メッセージが特定の例外タイプを示すことが好ましい。
【００２１】
本発明の目的及び利点は、添付図面と関連してなされる、本発明の現在のところ好ましい例示的な実施例の下記の詳細な説明から、更に明らかになり、かつ更に容易に理解されよう。
【００２２】
【発明の実施の形態】
図１は、本発明が動作する計算システム１００の一部のブロック図である。計算システム１００は、中央演算処理装置（ＣＰＵ）１１０と、命令キャッシュ１６０と、データ・キャッシュ１７０とを含む。通常、命令キャッシュ１６０及びデータ・キャッシュ１７０は、ＣＰＵ１１０とは別個の高速ＳＲＡＭを使用して実施される。ＣＰＵ１１０は、命令フェッチ・ユニット１１２と、命令バッファ１１６と、実行ユニット１１４とを含む。実行ユニット１１４は、算術演算論理ユニット１１８と、メモリ管理ユニット１２０と、撤回ユニット１２２とを含む。
【００２３】
動作時には、命令フェッチ・ユニット１１２は、命令キャッシュ１６０から命令を取り出して復号する。命令フェッチ・ユニット１１２は次いで、復号済み命令を実行すると、結果として例外条件になるかどうかを判定する。取り出した命令が潜在的な例外生成命令である場合、命令フェッチ・ユニット１１２は、好ましくは特定のタイプの例外を示し、好ましくは未使用命令コードを使用する例外メッセージを、命令バッファ１１６に挿入する。そうでない場合、命令フェッチ・ユニット１１２は、取り出した命令自体を命令バッファ１１６に挿入する。実行ユニット１１４は、命令バッファ１１６に含まれる命令を実行する。算術演算命令は、算術演算論理ユニット１１８によって実行され、メモリ命令は、メモリ管理ユニット１２０によって実行される。メモリ管理ユニット１２０は、データ・キャッシュ１７０中のメモリとの間で読み書きを行う。撤回ユニット１２２は、実行した命令をプログラム順に命令バッファ１１６から削除し、その命令が、特殊符号化例外メッセージである場合に、例外信号１２４を生成する。
【００２４】
図２は、本発明による方法２００を示すフローチャートである。図２に示すように、方法２００は３つの別々のプロセス２１０、２２０、２３０に区画される。第１のプロセス２１０は、命令フェッチ・ユニット１１２において実行され、命令キャッシュ１６０から命令を取り出して復号する、第１のステップ２１２を含む。第１のプロセス２１０は、取り出した命令を実行すると、結果として例外条件になるかどうかを判定する第２のステップ２１４を含む。この命令を実行すると例外が生成されると判定された場合、第１のプロセス２１０は、命令バッファ１１６に例外メッセージを挿入する第３のステップ２１６を実行する。一方、この命令を実行しても例外条件は発生しないと判定された場合、第４のステップ２１８で、命令バッファ１１６に命令自体が挿入される。命令を実行することによって生成される特定のタイプの例外を実行ユニットに示すために、命令メッセージを符号化することが好ましい。命令メッセージは、未使用命令コードを使用して実施される。このため、早期例外を追跡するための命令コード中の追加ビットは不要になる。
【００２５】
本発明の方法２００は、実行ユニット１１４で実行される第２のプロセス２２０を含む。第２のプロセス２２０は、誤って予想された分岐を追跡し、それに応じて命令バッファ１１６を管理する。第２のプロセス２２０は、現在実行中の命令が、条件付き分岐命令であるかどうかを判定する、第５のステップ２２２を含む。第２のプロセスは、現命令が条件付き分岐命令である場合、予想された分岐が、実際の分岐結果に合致するかどうかを判定する、第６のステップ２２４を含む。第２のプロセス２２０は、分岐が誤って予想された場合、誤って予想された分岐命令が、命令バッファ１１６に挿入された後に挿入された、命令バッファ１１６中のすべての命令を破棄する、第７のステップ２２６を含む。第７のステップ２２６間に、計算された正しいアドレス（分岐目標アドレスか、又はインライン・プログラム・アドレス）が、命令フェッチ・ユニット１１２へ送られ、そこで正しいアドレスから命令取り出しが再開する。
【００２６】
本発明の方法２００は、例外を検出し知らせるために、撤回ユニット１２２において実行される第３のプロセス２３０を含む。第３のプロセス２３０は、完了した命令を命令バッファ１１６から削除する、第８のステップ２３２を含む。第９のステップ２３４において、削除した命令が復号され、削除した命令が例外メッセージである場合は、例外が通知される。
【００２７】
図２に示した方法２００の上記の説明から、例外が通知されるのは、例外生成命令が実際に実行されるときだけなので、本発明が、時期尚早な例外通知の問題を解消することが理解されよう。実行されると例外を生成するであろう命令が、取り出されて命令バッファ１１６に挿入されるが、誤って予想された分岐のために、実際には実行されない場合、例外メッセージが撤回され、かつ撤回ユニット１２２によって例外が検出、及び通知される前に、特殊符号化例外メッセージが、実行ユニットによって命令バッファ１１６から削除されることになる。また、未使用命令コードを使用して命令メッセージが実施されるので、本発明の方法２００には、時期尚早な例外通知の問題を解消するために、追加命令ビットも追加ハードウェアも必要とされないことが理解されよう。
【００２８】
図３は、本発明によるシステム３００の好ましい実施例を示す。図３に示すように、好ましい実施例のシステム３００は、中央演算処理装置（ＣＰＵ）３１０と、チップ未搭載命令キャッシュ３６０と、チップ未搭載データ・キャッシュ３７０とを含む。好ましい実施例のシステム３００では、命令キャッシュ３６０及びデータ・キャッシュ３７０は、ＣＰＵ３１０とは別個の高速スタティックＲＡＭチップを使用して実施される。ＣＰＵ３１０は、命令フェッチ・ユニット３１２と、命令仕分けユニット３４０と、命令順序変更バッファ（ＩＲＢ）３１６と、実行ユニット３１４とを含む。命令フェッチ・ユニット３１２は、投機的実行ユニット３５２と、潜在的例外検出ユニット３５４とを含む。実行ユニット３１４は、算術演算論理ユニット（ＡＬＵ）３１８と、メモリ管理ユニット（ＭＭＵ）３２０と、命令順序変更バッファ（ＩＲＢ）管理ユニット３２８と、撤回ユニット３２２とを含む。図３に又示されるように、命令順序変更バッファ３１６は、ＡＬＵ命令バッファ３４２、及びメモリ・アクセス命令バッファ３４４を含む、２つの別々のバッファに分離される。
【００２９】
動作時には、命令フェッチ・ユニット３１２が、命令キャッシュ３６０から命令を取り出す。投機的実行ユニット３５２は、この命令を復号して、それが条件付き分岐命令であるかどうかを判定する。この命令が条件付き分岐命令である場合、投機的実行ユニット３５２は、分岐がなされるかどうかを予想し、それに応じて、次に取り込むべき命令のアドレスを更新する。
【００３０】
潜在的例外検出ユニット３５４は、取り出した命令が、実行されると例外条件を発生するかどうかを判定する。取り出した命令が潜在的な例外生成命令である場合、特殊符号化例外メッセージが、ＡＬＵ命令バッファ３４２に挿入される。そうでない場合、すなわち取り出した命令が潜在的な例外生成命令ではない場合、取り出した命令自体が、仕分けユニット３４０へ送られる。
【００３１】
仕分けユニット３４０は、命令フェッチ・ユニット３１２から命令を受け取り、ＡＬＵ命令バッファ３４２とメモリ・アクセス命令バッファ３４４との間で命令を仕分けする。一般に、整数演算や浮動小数点演算などのＡＬＵ演算を必要とする命令は、ＡＬＵ命令バッファ３４２に挿入され、ロード動作及び記憶動作を必要とする命令は、メモリ・アクセス命令バッファ３４４に挿入される。撤回ユニット３２４は、各命令を、その実行後にプログラム順に、ＡＬＵ命令バッファ３４２及びメモリ・アクセス命令バッファ３４４から削除する。
【００３２】
図３の好ましい実施例のシステム３００では、命令仕分けユニット３４０によってＡＬＵ命令バッファ３４２に仕分けされることがないロード命令コード及び記憶命令コードを使用して、特殊符号化例外メッセージが実施される。更に、好ましい実施例のシステム３００では、ＡＬＵ命令バッファ３４２から削除されたロード／記憶命令は、撤回ユニット３２２によって例外コードとして認識され、適当な例外信号３２４を発信するように復号される。図３に示す好ましい実施例のシステム３００のアーキテクチャを使用し、特に命令バッファ３１６を特殊化命令バッファ（すなわち、ＡＬＵ命令バッファ３４２、及びメモリ・アクセス命令バッファ３４４）へと分離することにより、命令コードは、それぞれの異なる条件の下で２つの別々の意味を有することによって、重複機能を有することができる。この特徴によって、単一の命令コードによって与えられる情報量が最大になり、また、未使用命令コードを有さないシステムに本発明を使用することが可能になる。
【００３３】
図３のシステム３００は、命令バッファ管理ユニット３２８も含む。命令バッファ管理ユニット３２８は、条件付き分岐命令の実行時にその結果を監視し、予想と比較する。結果が予想に合致しない場合、命令バッファ管理ユニット３２８は、条件付き分岐命令が入力された後に入力されたすべての命令を命令バッファ３１６から削除し、条件付き分岐命令の実行に基づき計算された正しいアドレスを命令フェッチ・ユニット３１２へ送って、正しいアドレスからの取り出しを再開する。
【００３４】
図４−図６は、実行されると例外条件を発生させたであろう、誤って予想された分岐命令に出会ったときの、図３の命令バッファ管理ユニット３２８の動作を示すために、サンプル命令を備えた命令バッファ４００を示すものである。図３の好ましい実施例のシステム３００において、命令バッファ３１６は、まず、前の命令の結果を待っていない命令が、実行へと放たれるように、パイプライン効率を最大にするようにハードウェアによって順序変更される。命令を実行へと放つ方法、及び命令を実行へと放つために調停する方法は、撤回ユニット３２２が、命令をプログラム順に命令バッファ３１６から削除するかぎり、実現可能な任意の方式を使用して実施することができる。言い換えると、命令順序変更を行うマイクロプロセッサ・システムにも、あるいはそれを行わないマイクロプロセッサ・システムにも本発明を使用できるが、撤回ユニット３２２は、命令をプログラム順に命令バッファ３１６から削除しなければならない。したがって、命令バッファ管理ユニット３２８の動作を容易に図示するために、図４の命令バッファ４００は、命令順序変更が実行されない、先入れ先出し（ＦＩＦＯ）方式を仮定している。
【００３５】
したがって、図４を参照すると、命令Ｉ0，Ｉ1，．．．，ＩN-1，ＩNは、命令バッファ４００に下付き数字順に挿入されている。言い換えると、Ｉ0は、命令バッファ４００に最初に挿入された命令であり、命令バッファ４００から最初に削除される命令である。Ｉ1は、命令バッファ４００に２番目に挿入された命令であり、命令バッファから２番目に削除される命令である。以下同様である。図４に示すように、命令は、ＡＬＵ命令バッファ４１０とメモリ・アクセス・バッファ４２０との間で仕分けされる。しかし、命令は、通常のプログラム・シーケンスの下で、Ｉ3がＩ2の後に撤回され、Ｉ8がＩ7の直ぐ後に撤回され、以下同様であるように依然としてＦＩＦＯ式に撤回される。図４に又示されるように、命令バッファ４００は、誤って予想された分岐命令ＩBRANCHを含み、その後に、命令ＩEXCEPTION を含む、誤った目標アドレスから得た命令が続き、その後に、予想されたプログラム順の命令ＩJ，．．．，ＩKが続く。命令ＩEXCEPTION は、実行されると例外を生成するものであり、図３の潜在的例外検出ユニット３５４によって挿入される、特殊符号化例外メッセージである。
【００３６】
図４に示す時点では、命令Ｉ0 が、次に撤回すべき予定の命令であることが、撤回ポインタＰＴＲRETIREによって示され、条件付き分岐命令ＩBRANCH が、次に実行すべきものであることが、実行ポインタＰＴＲEXECUTIONによって示される。次いで、条件付き分岐命令ＩBRANCHが実行されると、実行ユニットは、誤って予想された分岐命令ＩEXCEPTION とは異なる実際の目標アドレス結果を計算する。図３の命令バッファ管理ユニット３２８は次いで、図５に示すように、命令ＩBRANCHが挿入された後に挿入されたすべての命令を、命令バッファ４００から削除する。次いで、図３の実行ユニット３１４によって計算された正しい分岐アドレスが、図３の命令フェッチ・ユニット３１２へ送られ、図６に示すように、命令ＩTARGETを含む正しい分岐アドレスにおいて、取り出しが再開する。やはり図６で分かるように、命令Ｉ0が撤回され（すなわち、命令バッファ４００から削除され）ており、撤回ポインタＰＴＲRETIREによって示されるように、命令Ｉ1が次に撤回される予定である。
【００３７】
図４−図６は、本発明がどのように時期尚早な例外信号を防止するかを示す。図４において、誤って予想された分岐のために、潜在的な例外生成命令ＩＥＸＣＥＰＴＩＯＮ  が命令バッファ４００に挿入された。したがって、命令ＩＥＸＣＥＰＴＩＯＮは実行されなかったはずである。条件付き分岐命令ＩＢＲＡＮＣＨの実行に基づいて、誤って予想された分岐が発見されたとき、図５に示すように、予想に従って取り出されたすべての命令（すなわち、ＩＥＸＣＥＰＴＩＯＮ，ＩＪ，．．．，ＩＫ）が、命令バッファ４００から削除、及び破棄された。したがって、本発明が、時期尚早な例外通知を回避する効率的なシステム、及び方法を提供することが理解されよう。例外生成命令が実際に実行された場合、その特殊符号化例外メッセージは、正規の命令と同様にしてプログラム順に撤回され、したがって、プログラム順に検出、及び通知される。
【００３８】
本発明に関し意図した用途は、命令のキャッシングを制御する機構を実施することである。具体的には、そのページ上のある命令が実際に実行されないかぎり、マイクロプロセッサが、命令をキャッシュ内へ移動できないようにすると有利である。その点からは、命令を、そのページからキャッシュ内へ移動することが認められる。本発明を用いると、これは次のように達成することができる。すなわち、図３の命令フェッチ・ユニット３１２が、ページ交差が必要になると「推測」したときに、ＡＬＵ命令バッファ３４２に例外メッセージを挿入する。実行ユニット３１４が、プログラム・シーケンスが実際にページを交差すると判定した場合、例外が通知され、それによって、引き続き命令をそのページからキャッシュ内へ移動できることを、命令フェッチ・ユニットに示すべく信号がもたらされる。
【００３９】
本明細書において、本発明の例示的で、且つ現在のところ好ましい実施例を詳しく説明したが、発明性のある概念を、別態様で各種具体化し使用することができ、且つ従来技術により限定される範囲を除いて、特許請求の範囲が、かかる変形を含むと見なすことを意図したものであることを理解されたい。
【００４０】
以下に、本発明の実施態様を列挙する。
【００４１】
１．マイクロプロセッサにおける早期例外を追跡するシステムにおいて、
プログラム・メモリから命令を取り出し、該取り出した命令が、実行されると結果として例外条件になると判定された場合には、例外メッセージを命令バッファに挿入し、上記取り出した命令が、実行されても結果として例外条件にならないと判定された場合には、上記取り出した命令を命令バッファに挿入するための命令フェッチ・ユニットと、
命令バッファに含まれる命令を実行するための実行ユニットと、
命令を、実行ユニットによって処理された後に、プログラム順に命令バッファから削除し、その命令を復号し、命令が例外メッセージである場合に、例外を知らせるための命令撤回ユニットと、
からなることを特徴とするシステム。
【００４２】
２．将来の実行条件を予想し、該予想した条件に基づいて、命令を事前に取り出し、又は事前に実行することによって、命令実行を最適化するための投機的実行手段と、
上記事前に取り出され、又は事前に実行された命令を検出し、実行に基づき実際の条件を監視し、実際の条件と予想された条件を比較し、実際の条件と予想された将来の条件が合致しない場合、実行条件が予想された後に挿入されたすべての命令を、命令バッファから削除するための命令バッファ管理ユニットと、
から更になることを特徴とする、前項１に記載のシステム。
【００４３】
３．前記例外メッセージは、特定の例外タイプを示すことを特徴とする、前項１又は２に記載のシステム。
【００４４】
４．前記例外メッセージは、未使用の命令コードを使用して符号化されることを特徴とする、前項１から３のいずれか一項に記載のシステム。
【００４５】
５．前記命令バッファは更に、多数の命令バッファからなることを特徴とする、前項１から４のいずれか一項に記載のシステム。
【００４６】
６．前記命令フェッチ・ユニットは、例外メッセージを１つの命令バッファにしか挿入しないことを特徴とする、前項５に記載のシステム。
【００４７】
７．前記例外メッセージは、誤り命令バッファから削除された場合に、前記命令撤回ユニットが、例外メッセージであると認識する命令コードを使用して、符号化されることを特徴とする、前項５又は６に記載のシステム。
【００４８】
８．マイクロプロセッサ・システムにおける早期例外を追跡する方法であって、同時に実行する２つのプロセスを含み、
第１のプロセスが、
（ａ）命令キャッシュから命令を取り出すステップと、
（ｂ）該取り出した命令が実行されると、結果として例外条件になるかどうかを判定するステップと、
（ｃ）上記取り出した命令が実行されると、結果として例外条件になる場合に、例外メッセージを命令バッファに挿入するステップと、
（ｄ）上記取り出した命令が実行されても、結果として例外条件にはならない場合に、上記取り出した命令を命令バッファに挿入するステップとを含み、
第２のプロセスが、
（ｅ）実行された命令を、プログラム順に命令バッファから削除するステップと、
（ｆ）例外メッセージを検出し、適切な例外信号を送出するステップとを含むことを特徴とする方法。
【００４９】
９．前記第１のプロセスは更に、
（ｇ）将来の実行条件を必要とする命令を検出するステップと、
（ｈ）該将来の実行条件を予想するステップと、
（ｉ）該予想した条件に基づいて、命令を事前に取り出す、又は事前に実行するステップとを含み、
前記方法は更に、同時に実行する第３のプロセスを含み、該第３のプロセスは、
（ｊ）上記事前に取り出され、又は事前に実行された命令を検出するステップと、
（ｋ）実行に基づき実際の条件を監視するステップと、
（ｌ）実際の条件と予想された将来の条件を比較するステップと、
（ｍ）実際の条件と予想された将来の条件が合致しない場合、実行条件が予想された後に挿入されたすべての命令を、命令バッファから削除するステップとを含むことを特徴とする、前項８に記載の方法。
【００５０】
１０．前記例外メッセージは、未使用命令コードを使用して符号化されることを特徴とする、前項８に記載の方法。
【００５１】
【発明の効果】
本発明は上述のように、例外が通知されるのは、例外生成命令が実際に実行されるときだけなので、本発明の方法２００によって、時期尚早な例外通知の問題が解消される。実行されると例外を生成するであろう命令が、取り出されて命令バッファ１１６に挿入されるが、誤って予想された分岐のために、実際には実行されない場合、例外メッセージが撤回され、かつ撤回ユニット１２２によって例外が検出、及び通知される前に、特殊符号化例外メッセージが、実行ユニットによって命令バッファ１１６から削除されることになる。
【００５２】
また、未使用命令コードを使用して命令メッセージが実施されるので、本発明の方法２００には、時期尚早な例外通知の問題を解消するために、追加命令ビットも追加ハードウェアも必要とされない
更に、システム３００のアーキテクチャを使用し、特に命令バッファ３１６を特殊化命令バッファ（すなわち、ＡＬＵ命令バッファ３４２、及びメモリ・アクセス命令バッファ３４４）へと分離することにより、命令コードは、それぞれの異なる条件の下で２つの別々の意味を有することによって、重複機能を有することができる。この特徴によって、単一の命令コードによって与えられる情報量が最大になり、また、未使用命令コードを有さないシステムにも本発明を使用することが可能になる。
【図面の簡単な説明】
【図１】本発明が動作するマイクロプロセッサ・システムのブロック図である。
【図２】本発明の方法を示すフローチャートである。
【図３】本発明が動作する好ましい実施例のマイクロプロセッサ・システムのブロック図である。
【図４】実行された場合に例外を生成したであろう、誤って予想された分岐命令に出会う命令バッファ管理ユニットの動作を示すための命令バッファの内部図である。
【図５】実行された場合に例外を生成したであろう、誤って予想された分岐命令に出会う命令バッファ管理ユニットの動作を示すための命令バッファの内部図である。
【図６】実行された場合に例外を生成したであろう、誤って予想された分岐命令に出会う命令バッファ管理ユニットの動作を示すための命令バッファの内部図である。
【符号の説明】
１００、３００    計算システム
１１２、３１２    命令フェッチ・ユニット
１１４、３１４    実行ユニット
１１６            命令バッファ
３１６            命令順序変更バッファ
１２０、３２０    メモリ管理ユニット
１２２、３２２    命令撤回ユニット
１６０、３６０    プログラム・メモリ（命令キャッシュ）
１７０、３７０    データ・キャッシュ
【図１】
0003762816.tif 000003
【図２】
0003762816.tif 000004
【図３】
0003762816.tif 000005
【図４】
0003762816.tif 000006
【図５】
0003762816.tif 000007
【図６】
0003762816.tif 000008