(57)【要約】【課題】制御レジスタ群の内容を主記憶へ直接に転送するデータパス及び命令セットを有しないプロセッサにおいて、割込み発生時に汎用レジスタおよび制御レジスタの内容を主記憶へ高速に退避し得るようにする。【解決手段】演算ユニット６で演算例外が発生するなどの割込みが発生すると、命令制御部４は、命令発行制御を停止させ、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になるのを待つ。そして、スカラレジスタ（汎用レジスタ）群１の内容を主記憶５へ退避する制御と制御レジスタ群３の内容をリネーミングレジスタ群２に退避する制御とを並行して実行し、汎用レジスタ群１の内容を退避完了後、速やかにリネーミングレジスタ群２上の制御レジスタ群３の内容を主記憶５へ退避する制御を実行する。【選択図】　図１
2004110608.tif 000002
【特許請求の範囲】
【請求項１】
レジスタリネーミングを行いアウトオブオーダで命令実行が可能なプロセッサにおいて割込みが発生したとき、ａ）汎用レジスタの内容を主記憶へ退避する動作と制御レジスタの内容をリネーミングレジスタに退避する動作とを並行して行わせ、ｂ）汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する動作を行わせることを特徴とするプロセッサにおける割込み発生時のレジスタ退避方法。
【請求項２】
命令発行制御を停止させ、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になった後に、前記ａ、ｂの処理を行わせることを特徴とする請求項１記載のプロセッサにおける割込み発生時のレジスタ退避方法。
【請求項３】
前記プロセッサがＲＩＳＣプロセッサであることを特徴とする請求項１または２記載のプロセッサにおける割込み発生時のレジスタ退避方法。
【請求項４】
演算器と、汎用レジスタと、リネーミングレジスタと、制御レジスタと、割込処理部および命令発行制御部を有する命令制御部と、主記憶とを備え、レジスタリネーミングを行いアウトオブオーダで命令実行が可能なＲＩＳＣプロセッサにおいて、割込処理部は、割込み発生時に命令発行制御部に対して命令処理の停止要求を送出する手段と、命令発行制御部から割込み処理が開始可能となった旨の通知を受信したときに汎用レジスタの内容を主記憶へストアする要求および制御レジスタの内容をリネーミングレジスタへ退避する要求を命令発行制御部に送出する手段とを含み、前記命令発行制御部は、割込処理部から命令処理の停止要求を受信したときに命令発行制御を停止し、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になった時点で割込処理部に対して割込み処理が開始可能となった旨の通知を送出する手段と、割込処理部から前記ストアおよび退避にかかる要求を受信したときに、汎用レジスタの内容を主記憶へストアする制御を実行すると共にそれと並行して制御レジスタの内容をリネーミングレジスタに退避する制御を行い、且つ、汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する制御を行う手段とを含むことを特徴とするプロセッサにおける割込み発生時のレジスタ退避装置。
【請求項５】
演算器と、汎用レジスタと、リネーミングレジスタと、制御レジスタと、割込処理部および命令発行制御部を有する命令制御部と、主記憶とを備え、レジスタリネーミングを行いアウトオブオーダで命令実行が可能なＲＩＳＣプロセッサにおいて、割込処理部を、割込み発生時に命令発行制御部に対して命令処理の停止要求を送出する手段、命令発行制御部から割込み処理が開始可能となった旨の通知を受信したときに汎用レジスタの内容を主記憶へストアする要求および制御レジスタの内容をリネーミングレジスタへ退避する要求を命令発行制御部に送出する手段、として機能させ、命令発行制御部を、割込処理部から命令処理の停止要求を受信したときに命令発行制御を停止し、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になった時点で割込処理部に対して割込み処理が開始可能となった旨の通知を送出する手段、割込処理部から前記ストアおよび退避にかかる要求を受信したときに、汎用レジスタの内容を主記憶へストアする制御を実行すると共にそれと並行して制御レジスタの内容をリネーミングレジスタに退避する制御を行い、且つ、汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する制御を行う手段、として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプロセッサにおける割込み発生時のレジスタ退避技術に関し、特にスカラレジスタ等の汎用レジスタおよび動作環境を保持する制御レジスタの記憶内容を主記憶へ退避する方法および装置に関する。
【０００２】
【従来の技術】
ＲＩＳＣ（Ｒｅｄｕｃｅｄ　Ｉｎｓｔｒｕｃｔｉｏｎ　Ｓｅｔ　Ｃｏｍｐｕｔｅｒ）プロセッサは、命令を単純にして動作周波数を上げたプロセッサであり、基本的に高速動作が可能であるが、近年においてはより一層の高速化を図るために、スーパースカラ機能を備え、複数の命令をパイプライン方式で同時に発行処理するようにしている。また、多くのＲＩＳＣプロセッサはｏｕｔ−ｏｆ−ｏｒｄｅｒ機能を実現しており、ハードウェアリソースの状況等に応じて命令実行の追越制御を行っている。ｏｕｔ−ｏｆ−ｏｒｄｅｒ機能を有するＲＩＳＣプロセッサでは、命令発行順序の入れ替えが発生するため、各命令で処理された結果を命令発行順でなく命令出現順に保証する制御機能が必要になる。この制御機能を実現する方式の一つとして、レジスタリネーミング方式がある。レジスタリネーミング方式では、書き込みレジスタ名をシステム中でユニークになるようにリネーミングして汎用レジスタの競合を解消し、リネーミングされたレジスタの結果を汎用レジスタに直接書き込むのではなく、一旦、リネーミングレジスタと呼ばれるレジスタに格納しておき、実行順序が保証される時点で、リネーミングレジスタから汎用レジスタへの書き込みを行う（例えば、後述する特許文献１参照）。
【０００３】
ところで、ＲＩＳＣプロセッサにおいて、プログラム要因で発生する例外やシステム要因で発生する例外などの割込みが発生した場合、通常のプロセッサと同様に、前処理、割込み処理、後処理の順に一連の割り込み処理が実行される。割込み処理の前処理では、汎用レジスタおよび制御レジスタの主記憶への退避や割込みの分析、サービス機能（例えば、ページフォールトの処理）の決定などが行われる。ここで、制御レジスタとは、プロセッサの動作環境を保持する専用のレジスタを意味する。プロセッサの動作環境には、プログラムの実行状態（インストラクションカウンタ（プログラムカウンタ）値、条件コード、タイマ値など）、実行環境（割込みマスク、割込み要因、実行モードなど）が含まれる。前処理の次に実施される割込み処理では、前処理で決定されたサービス機能が実行され、次の後処理で、割込まれたプロセスを再開する処理あるいは別プロセスへの切替処理が実行される。
【０００４】
汎用レジスタおよび制御レジスタの数が多い場合、一連の割込み処理に要する時間の中で、それらのレジスタの内容を主記憶へ退避するのに要する時間が大きなウエイトを占める。このため、この退避に要する時間が長くなると、割込み時のプロセス切替時間が長期化し、プロセッサの性能が低下する。
【０００５】
【特許文献１】
特開平１１−２４９２６号公報
【０００６】
【発明が解決しようとする課題】
一般にレジスタリネーミング方式のＲＩＳＣプロセッサは、汎用レジスタおよびリネーミングレジスタの内容を主記憶へ書き込むためのデータパスおよび命令セットを備えており、また、制御レジスタの内容を汎用レジスタおよびリネーミングレジスタに移送するデータパスおよび命令セットを備えている。しかし、命令セット数の削減およびハードウェア量の削減を図るなどのために、制御レジスタの内容を主記憶へ直接書き込むためのデータパスおよび命令セットを備えていないものがある（このようなＲＩＳＣプロセッサとして、例えば日本電気株式会社製のＳＸ−５で使われるスカラユニットがある）。
【０００７】
このように、制御レジスタの内容を主記憶へ直接書き込むためのデータパスおよび命令セットを備えていないＲＩＳＣプロセッサでは、割込み発生時に汎用レジスタおよび制御レジスタを主記憶へ退避するには、例えば図４（ａ）に示すように、まず退避が必要な汎用レジスタの内容を主記憶へセーブした後、空いた汎用レジスタに制御レジスタの内容を移送し、しかる後に汎用レジスタから主記憶へ制御レジスタの内容をセーブする方法を採らざるを得ない。
【０００８】
しかし、このような方法では、汎用レジスタの内容を主記憶へ退避するのに要する時間と、制御レジスタの内容を汎用レジスタへ移送するのに要する時間と、汎用レジスタに移送された制御レジスタの内容を主記憶へ退避するのに要する時間とを合計した時間が必要となり、汎用レジスタおよび制御レジスタの数が多い場合にはかなりの時間を要する。このため、割込み時のプロセス切替に時間がかかり、プロセッサの性能が低下する。
【０００９】
本発明はこのような事情に鑑みて提案されたものであり、その目的は、プロセッサにおける割込み発生時に汎用レジスタおよび制御レジスタの内容を主記憶へ高速に退避し得るようにすることにある。
【００１０】
【課題を解決するための手段】
本発明のプロセッサにおける割込み発生時のレジスタ退避方法は、レジスタリネーミングを行いアウトオブオーダで命令実行が可能なスーパースカラ型ＲＩＳＣプロセッサ等のプロセッサにおいて割込みが発生したとき、ａ）汎用レジスタの内容を主記憶へ退避する動作と制御レジスタの内容をリネーミングレジスタに退避する動作とを並行して行わせ、ｂ）汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する動作を行わせることを特徴とする。より具体的には、命令発行制御を停止させ、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になった後に、前記ａ、ｂの処理を行わせることを特徴とする。
【００１１】
本発明のプロセッサにおける割込み発生時のレジスタ退避装置は、演算器と、汎用レジスタと、リネーミングレジスタと、制御レジスタと、割込処理部および命令発行制御部を有する命令制御部と、主記憶とを備え、レジスタリネーミングを行いアウトオブオーダで命令実行が可能なＲＩＳＣプロセッサにおいて、割込処理部は、割込み発生時に命令発行制御部に対して命令処理の停止要求を送出する手段と、命令発行制御部から割込み処理が開始可能となった旨の通知を受信したときに汎用レジスタの内容を主記憶へストアする要求および制御レジスタの内容をリネーミングレジスタへ退避する要求を命令発行制御部に送出する手段とを含み、前記命令発行制御部は、割込処理部から命令処理の停止要求を受信したときに命令発行制御を停止し、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になった時点で割込処理部に対して割込み処理が開始可能となった旨の通知を送出する手段と、割込処理部から前記ストアおよび退避にかかる要求を受信したときに、汎用レジスタの内容を主記憶へストアする制御を実行すると共にそれと並行して制御レジスタの内容をリネーミングレジスタに退避する制御を行い、且つ、汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する制御を行う手段とを含むことを特徴とする。
【００１２】
【作用】
一般に割込みが発生した時点では、命令パイプラインの仕掛かり中の命令によってリネーミングレジスタが使用されている可能性があるが、命令発行制御を停止し、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になると、リネーミングレジスタの内容は本来の汎用レジスタに書き込まれており、リネーミングレジスタは空き状態になる。本発明はこの点に着目し、リネーミングの目的だけにしか利用されていなかったリネーミングレジスタを制御レジスタの一時待避場所に利用し、汎用レジスタの内容を主記憶へ退避する動作と制御レジスタの内容をリネーミングレジスタに退避する動作とを並行して行わせ、汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する動作を行わせる。
【００１３】
【発明の実施の形態】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１４】
図１を参照すると、本発明を適用したプロセッサは、レジスタリネーミングを行いアウトオブオーダで命令実行が可能なスーパースカラ型のＲＩＳＣプロセッサであり、複数のスカラレジスタＳ０〜Ｓｎで構成されるスカラレジスタ群１と、複数のリネーミングレジスタＲＲ０〜ＲＲｍで構成されるリネーミングレジスタ群２と、複数の制御レジスタＣ０〜Ｃｉで構成される制御レジスタ群３と、プロセッサ内を制御する命令制御部４と、主記憶５と、演算ユニット６とを備えている。ここで、制御レジスタ群３はプロセッサの動作環境を示すＰＳＷ（Ｐｒｏｇｒａｍ　Ｓｔａｔｕｓ　Ｗｏｒｄ）などを保持するレジスタであり、インストラクションカウンタ（プログラムカウンタ）値、条件コード、タイマ値などのプログラムの実行状態や、割込みマスク、割込み要因、実行モードなどの実行環境が、それぞれの制御レジスタＣ０〜Ｃｉに格納される。
【００１５】
また本実施の形態のプロセッサは、命令制御部４によって制御される幾つかのセレクタ７〜１０を備えている。セレクタ７は、制御レジスタＣ０〜Ｃｉの出力の何れかを選択してセレクタ８およびセレクタ９へ出力する。セレクタ８は、演算ユニット６の出力およびセレクタ７の出力の何れかを選択してリネーミングレジスタ群２へ出力する。セレクタ９は、演算ユニット６の出力、セレクタ７の出力およびリネーミングレジスタ群２の出力の何れかを選択してスカラレジスタ群１へ出力する。セレクタ１０は、スカラレジスタ群１の出力およびリネーミングレジスタ群２の出力の何れかを選択して主記憶５へ出力する。
【００１６】
命令制御部４は、例えば図２に示すように、命令フェッチ部４１と命令発行制御部４２と割込処理部４３とを含んで構成される。
【００１７】
次に本実施の形態のプロセッサの動作を説明する。先ず、通常動作時について以下に説明する。
【００１８】
命令制御部４の命令フェッチ部４１は、主記憶５から１以上の命令を含む命令列を取り込み、取り込んだ命令列を命令発行制御部４２に送出する。命令発行制御部４２は、受信した命令列の各命令をデコードし、命令の実行制御を行う。本実施の形態のプロセッサはスーパースカラ機能を備えており、複数の命令を同時に発行する。また、ｏｕｔ−ｏｆ−ｏｒｄｅｒ機能を備えており、ハードウェアリソースの状況等に応じて命令実行の追越制御を行う。本実施の形態のプロセッサは、スカラレジスタＳ０〜Ｓｎの競合による性能低下を回避するために、対象とするスカラレジスタがビジー状態のときにリネーミングレジスタ群２の空きのリネーミングレジスタを使用してリネーミングを行うことで、命令実行の追越制御を実現する。例えば、先行命令のオペランドを格納しているスカラレジスタＳ０と、後続命令の演算結果を格納するスカラレジスタＳ０が競合し、先行命令を追い越して後続命令が実行された場合、後続命令の演算結果を一旦、例えばリネーミングレジスタＲＲ０に格納し、先行命令との競合が解消された後にリネーミングレジスタＲＲ０に格納した後続命令の演算結果を対象となるスカラレジスタＳ０へ格納する。
【００１９】
次に、プログラム例外やシステム例外などの割込み要因がプロセッサに発生した場合の動作を説明する。
【００２０】
割込み要因が発生した場合、割り込み前のスカラレジスタ群１および制御レジスタ群３の内容を主記憶５のプロセス状態格納域に格納し、割込み処理が完了した時点でスカラレジスタ群１および制御レジスタ群３を次プロセッサ状態に更新する必要がある。
【００２１】
以下では、演算ユニット６において演算例外が発生した場合を例にして、本実施の形態において、スカラレジスタ群１および制御レジスタ群３の内容を主記憶５に退避する際の動作を説明する。図３はその際の割込処理部４３および命令発行制御部４２の動作フローチャートである。
【００２２】
演算ユニット６は、演算例外を検出すると、割込処理部４３へ割込み通知を送信する。割込処理部４３は、割込み通知を受信すると（Ｓ４３１）、命令発行制御部４２に対して命令処理の停止要求を送出する（Ｓ４３２）。
【００２３】
命令発行制御部４２は、割込処理部４３から停止要求を受信すると、命令発行制御を停止し（Ｓ４２１）、命令パイプラインに仕掛かり中の命令が完了してプロセッサ内状態が静的な状態になるのを待つ（Ｓ４２２）。若し、仕掛かり中の命令がリネーミングレジスタ群２の何れかのリネーミングレジスタを使用している場合、その命令が完了することにより、当該リネーミングレジスタの内容が本来のスカラレジスタにセレクタ９を通じて移送される。これにより、プロセッサ内状態が静的な状態になった時点ではリネーミングレジスタ群２の全てのリネーミングレジスタは空き状態となる。命令発行制御部４２は、プロセッサ内状態が静的状態になったことを検出すると、割込み処理が開始可能となったことを割込処理部４３へ通知する（Ｓ４２３）。
【００２４】
割込処理部４３は、命令発行制御部４２から前記通知を受信すると、スカラレジスタ群１に格納されたデータを主記憶５へストアする要求を命令発行制御部４２へ送信し、その要求の送信直後に制御レジスタ群３をリネーミングレジスタ群２へ退避する要求を続けて命令発行制御部４２へ送出する。ここで、制御レジスタ群３に含まれる制御レジスタＣ０〜Ｃｉの個数を例えば４（つまり、ｉ＝３）とすると、例えば４個のリネーミングレジスタＲＲ０〜ＲＲ３が退避場所として使われる。
【００２５】
命令発行制御部４２は、割込処理部４３からの前記要求を受信すると、まず、スカラレジスタ群１に格納されたデータを主記憶５にストアするリクエストを生成し、この生成したリクエストに従ってスカラレジスタ群１のデータをセレクタ１０を通じて主記憶５へ転送する制御を実行する。更に、命令発行制御部４２は、スカラレジスタ群１のデータの退避を行うのと並行して、制御レジスタ群３をリネーミングレジスタ群２へ退避するリクエストを生成し、この生成したリクエストに従って制御レジスタ群３をセレクタ７およびセレクタ８を通じてリネーミングレジスタ群２へ転送する制御を実行する（Ｓ４２４）。
【００２６】
次に、命令発行制御部４２は、スカラレジスタ群１のデータの退避が完了した直後に、リネーミングレジスタ群２に退避した制御レジスタ群３をスカラレジスタ群１を介さずにセレクタ１０経由で直接に主記憶５へストアするリクエストを生成し、この生成したリクエストに従ってリネーミングレジスタ群２上の制御レジスタ群３の内容を主記憶５へストアする（Ｓ４２５）。そして、全ての制御レジスタ群３の主記憶５への退避を完了すると、その旨を割込処理部４３に通知する（Ｓ４２６）。割込処理部４３は、この通知を受けて一連の割込み処理の残りの処理を続行する（Ｓ４３４）。
【００２７】
図４（ｂ）は本実施の形態におけるスカラレジスタ群１および制御レジスタ群３の退避シーケンスを示す。スカラレジスタ（汎用レジスタ）群の主記憶への退避と制御レジスタ群のリネーミングレジスタ群への移送とが並行して実行されている分だけ、同図（ａ）に示した退避シーケンスに比べて、スカラレジスタ群１および制御レジスタ群３を主記憶５へ退避するのに要する時間を短縮することができる。
【００２８】
以上本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。例えば、以上の実施の形態ではＲＩＳＣプロセッサに対して本発明を適用したが、ＣＩＳＣ（ＣｏｍｐｌｅｘＩｎｓｔｒｕｃｔｉｏｎ　Ｓｅｔ　Ｃｏｍｐｕｔｅｒ）に対しても適用可能である。また、命令発行制御部４２および割込処理部４３の図３に示した割込み制御はハードウェア的に実現することは勿論、プログラム（ファームウェア）で実現することも可能である。
【００２９】
【効果の説明】
以上説明したように本発明によれば、割込み処理で使用されないリネーミングレジスタを制御レジスタの一時的な退避場所として利用し、汎用レジスタの内容を主記憶へ退避する動作と制御レジスタの内容をリネーミングレジスタに退避する動作とを並行して行わせ、汎用レジスタの内容を退避完了後に速やかにリネーミングレジスタ上の制御レジスタの内容を主記憶へ退避する動作を行わせたことにより、汎用レジスタおよび制御レジスタを主記憶へ退避するのに要する時間を短縮することができ、割込み時のプロセス切り替え時間の短縮化が可能になり、システムの性能を向上させることができる。また、制御レジスタ群の内容を主記憶へ直接転送する特別なデータパスや命令セットを設ける場合に比べて、ハードウェア量および命令セット数の削減が可能である。
【図面の簡単な説明】
【図１】本発明を適用したプロセッサの要部ブロック図である。
【図２】本発明を適用したプロセッサにおける命令制御部のブロック図である。
【図３】本発明を適用したプロセッサにおける命令制御部内の命令発行制御部および割込処理部の処理例を示すフローチャートである。
【図４】汎用レジスタ（スカラレジスタ）および制御レジスタの主記憶への退避シーケンスを示す図である。
【符号の説明】
１…スカラレジスタ群
２…リネーミングレジスタ群
３…制御レジスタ群
４…命令制御部
５…主記憶
６…演算ユニット
７〜１０…セレクタ
【図１】
2004110608.tif 000003
【図２】
2004110608.tif 000004
【図３】
2004110608.tif 000005
【図４】
2004110608.tif 000006