(57)【特許請求の範囲】
【請求項１】
プロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理システムであって、
実行中の命令に非同期な外部割込みを検出する手段と、
検出された外部割込みに対応する割込み処理ルーチンの命令フェッチが完了するまでの間、該外部割込みを受理せず前記現在の命令列の実行を継続させる手段と、
を具備することを特徴とする例外処理システム。
【請求項２】
プロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理システムであって、
実行中の命令に非同期な外部割込みを検出する手段と、
検出された外部割込みに対応する割込み処理ルーチンの命令フェッチを行う手段と、
該割込み処理ルーチンの命令フェッチが完了したか否かの状態を保持する状態保持手段と、
該割込み処理ルーチンの命令フェッチが完了する前は該外部割込みを受理せず前記現在の命令列の実行を継続し、該命令フェッチの完了に応答して該外部割込みを受理する手段と、
を具備することを特徴とする例外処理システム。
【請求項３】
命令列を一時保持する命令キャッシュと、
該当する割込み処理ルーチンが前記命令キャッシュ中に存在するか否かを判定する判定手段と、
前記判定手段による判定結果に応じて前記現在の命令列の実行継続範囲を調整する調整手段と、
をさらに備えることを特徴とする請求項２に記載の例外処理システム。
【請求項４】
該外部割込みを受理した後は前記現在の命令列を破棄することを特徴とする請求項２に記載の例外処理システム。
【請求項５】
該外部割込みを受理した後も前記現在の命令列の実行を継続することを特徴とする請求項２に記載の例外処理システム。
【請求項６】
前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該命令列の実行を中断することを特徴とする請求項２に記載の例外処理システム。
【請求項７】
前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該割込み処理ルーチンの命令フェッチを中断することを特徴とする請求項２に記載の例外処理システム。
【請求項８】
前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該例外事象の処理ルーチンに実行を移すことを特徴とする請求項２に記載の例外処理システム。
【請求項９】
前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、要求が保留になっていた割込み処理ルーチンに実行を移すことを特徴とする請求項２に記載の例外処理システム。
【請求項１０】
前記現在の命令列の実行を継続している期間中に実行中の命令列のキャッシュ・ミスが発生したことに応答して、要求が保留になっていた割込み処理ルーチンに実行を移すことを特徴とする請求項２に記載の例外処理システム。
【請求項１１】
例外処理手段を備えるプロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理方法であって、
前記例外処理手段が、実行中の命令に非同期な外部割込みを検出するステップと、
前記例外処理手段が、検出された外部割込みに対応する割込み処理ルーチンの命令フェッチが完了するまでの間、該外部割込みを受理せず前記現在の命令列の実行を継続させるステップと、
を有することを特徴とする例外処理方法。
【請求項１２】
例外処理手段を備えるプロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理方法であって、
前記例外処理手段が、実行中の命令に非同期な外部割込みを検出するステップと、
前記例外処理手段が、検出された外部割込みに対応する割込み処理ルーチンの命令フェッチを行うステップと、
該割込み処理ルーチンの命令フェッチが完了したか否かの状態を保持する状態保持ステップと、
前記例外処理手段が、該割込み処理ルーチンの命令フェッチが完了する前は該外部割込みを受理せず前記現在の命令列の実行を継続し、該命令フェッチの完了に応答して該外部割込みを受理するステップと、
を有することを特徴とする例外処理方法。
【請求項１３】
前記例外処理手段が、該当する割込み処理ルーチンが前記プロセッサに付随する命令キャッシュ中に存在するか否かを判定する判定ステップと、
前記例外処理手段が、前記判定ステップによる判定結果に応じて前記現在の命令列の実行継続範囲を調整する調整ステップと、
をさらに有することを特徴とする請求項１２に記載の例外処理方法。
【請求項１４】
前記例外処理手段は、該外部割込みを受理した後は前記現在の命令列を破棄することを特徴とする請求項１２に記載の例外処理方法。
【請求項１５】
前記例外処理手段が、該外部割込みを受理した後も前記現在の命令列の実行を継続することを特徴とする請求項１２に記載の例外処理方法。
【請求項１６】
前記例外処理手段が、前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該命令列の実行を中断することを特徴とする請求項１２に記載の例外処理方法。
【請求項１７】
前記例外処理手段が、前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該割込み処理ルーチンの命令フェッチを中断することを特徴とする請求項１２に記載の例外処理方法。
【請求項１８】
前記例外処理手段が、前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該例外事象の処理ルーチンに実行を移すことを特徴とする請求項１２に記載の例外処理方法。
【請求項１９】
前記例外処理手段が、前記現在の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、要求が保留になっていた割込み処理ルーチンに実行を移すことを特徴とする請求項１２に記載の例外処理方法。
【請求項２０】
前記例外処理手段が、前記現在の命令列の実行を継続している期間中に実行中の命令列のキャッシュ・ミスが発生したことに応答して、要求が保留になっていた割込み処理ルーチンに実行を移すことを特徴とする請求項１２に記載の例外処理方法。
【請求項２１】
システム・インターフェース経由でメイン・メモリにアクセスするとともにキャッシュ・コントローラ経由でキャッシュ・メモリにアクセスするプロセッサであって、
実行中の命令に非同期な外部割込みを検出する手段と、
外部割込みの検出に応答して、前記キャッシュ・メモリに対して該当する割込み処理ルーチンのキャッシュ・ヒット判定を行う判定手段と、
キャッシュ・ヒット判定の結果キャッシュ・ミスしたことに応答して、前記メイン・メモリに対して該当する割込み処理ルーチンを要求するメモリ要求手段と、
該当する割込み処理ルーチンのキャッシュ・ミスに応答して不確定状態を保持する状態レジスタと、
を具備することを特徴とするプロセッサ。
【請求項２２】
前記状態レジスタは該当する割込みルーチンが前記メイン・メモリから到着したことに応答して通常状態に復帰することを特徴とする請求項２１に記載のプロセッサ。
【請求項２３】
前記状態レジスタが不確定状態の期間中は外部割込みを受理しないことを特徴とする請求項２１に記載のプロセッサ。
【請求項２４】
該外部割込みを受理した後は元の命令列を破棄することを特徴とする請求項２１に記載のプロセッサ。
【請求項２５】
該外部割込みを受理した後も元の命令列の実行を継続することを特徴とする請求項２１に記載のプロセッサ。
【請求項２６】
前記状態レジスタが不確定状態のときに実行中の命令列に同期した例外事象が発生したことに応答して、該命令列の実行を中断することを特徴とする請求項２１に記載のプロセッサ。
【請求項２７】
前記状態レジスタが不確定状態のときに実行中の命令列に同期した例外事象が発生したことに応答して、該割込み処理ルーチンのメモリ要求を中断することを特徴とする請求項２１に記載のプロセッサ。
【請求項２８】
前記状態レジスタが不確定状態のとき実行中の命令列に同期した例外事象が発生したことに応答して、前記状態レジスタを通常状態に戻して、該例外事象の処理ルーチンに実行を移すことを特徴とする請求項２１に記載のプロセッサ。
【請求項２９】
前記状態レジスタが不確定状態のときに実行中の命令列に同期した例外事象が発生したことに応答して、前記状態レジスタを通常状態に戻して、要求が保留になっていた割込み処理ルーチンに実行を移すことを特徴とする請求項２１に記載のプロセッサ。
【請求項３０】
前記状態レジスタが不確定状態のときに実行中の命令列のキャッシュ・ミスが発生したことに応答して、前記状態レジスタを通常状態に戻して、要求が保留になっていた割込み処理ルーチンに実行を移すことを特徴とする請求項２１に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理システム及び方法に係り、特に、各ステージに分けられた複数の命令をオーバーラップして実行するパイプライン方式を採用したプロセッサのための例外処理システム及び方法に関する。
【０００２】
更に詳しくは、本発明は、例外や割込みが発生した場合も元の命令列を効率的に実行する例外処理システム及び方法に係り、例外や割込みの発生に伴うパイプラインの停止（ストール）などによる無駄なサイクルを極力抑えた例外処理システム及び方法に関する。
【０００３】
【従来の技術】
プロセッサ処理の高速化のために「パイプライン」という方式が広く採用されている。パイプライン方式によれば、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）などの各ステージに分けられた複数の命令をオーバーラップして、全体として処理を高速化することができる。
【０００４】
図１には、ＲＩＳＣ（Reduced Instruction Set Computer：縮小命令セット・コンピュータ）プロセッサにおける典型的な５段パイプライン構成を模式的に図解している。また、パイプライン処理の詳細に関しては、例えば、" Computer Architecture: A Quantitative Approach (Second Edition)"（John L. Hennessy and David A. Patterson, Morgan Kaufmann Publishers, Inc., 1996.）や、" Computer Organization & Design (Second Edition)"（David A. Patterson and John L. Hennessy, Morgan Kaufmann Publishers, Inc., 1998）、『コンピュータの構成と設計 第2版 （上／下）』（パターソン＆ヘネシー、日経ＢＰ、1999）などの文献にも記載されている。
【０００５】
ところで、プロセッサの処理動作の１つとして、命令列の実行中に（同期的、あるいは、非同期的に）発生した例外的な事象をとらえて現在の命令列（ルーチン）の実行を中断し、その事象を処理する別のルーチンへ分岐して、その実行後、再びもとのルーチンへ戻って実行を継続するという機構、すなわち「割込み」がある。
【０００６】
割込みを認識すると、命令列の実行が中断され、あらかじめ定められた特定の番地（割込み処理ルーチン）に制御が移る。割込み処理ルーチンの番地は、割込み要因に拘わらず一定である例もあり、また、割込み要因に応じて異なるような例もある。
【０００７】
中断された命令の番地（プログラムカウンタ（ＰＣ）の値）が特別のレジスタ（ＥＰＣ："Exception PC"などと称する）に記録される。割込み処理が終了した際に、元の命令列に復帰するために、そのＥＰＣレジスタの値が使用される。また、中断した原因（割込み要因）を原因レジスタに保存する。割込み処理ルーチンではこの原因レジスタを見て、各割込みに対応した処理を行う。
【０００８】
図２には、パイプライン処理における割り込み制御ブロックを示している。命令キャッシュ、命令デコーダ、実行ユニット、データキャッシュ、レジスタファイルがそれぞれパイプラインのＩＦ、ＩＤ、ＥＸ、ＭＥＭ、ＷＢの各ステージに対応する。プログラム・カウンタ（ＰＣ）及び例外発生フラグはパイプラインとともに流れ、ＭＥＭステージで例外発生フラグが立っていた場合はＰＣをＥＰＣに設定する。ＥＰＣはシステム・コプロセッサ内部に存在する。
【０００９】
また、図３には、システム・コプロセッサの内部構成を図解している。システム・コプロセッサは、例外処理システム、メモリ管理システム、及び、これらに利用される各種レジスタを持っており、プロセッサの補助を行う。例外処理システムは、例外の管理、原因分析、エラーからの復帰を行う。ＥＰＣはレジスタの１つとして存在する。
【００１０】
ここで、システムにおいて発生する割込みは、「内部例外（同期割込み、内部割込み）」と、「外部割込み（非同期割込み）」に分類することができる。
【００１１】
内部例外は、命令の実行に起因する（又は同期する）割込みであり、例えば、演算オーバーフローや不正なアドレスへのアクセス時などに発生する。プログラムの概念的な逐次実行性を保証するためには、命令列の実行は、内部例外の発生原因となった命令において中断されなければならない。
【００１２】
他方、外部割込みは、実行中の命令とは無関係に発生する（すなわち非同期の）割込みであり、例えば、入出力機器の状態変化（キーボードやマウスに対するユーザ入力など）に起因して発生する。この結果、たまたま実行中であった命令が割り込まれて中断する。
【００１３】
パイプライン処理において内部例外を検出した場合、プログラムの概念的な逐次実行性を保証するためには、命令列の実行は、内部例外の発生原因となった命令において中断されなければならない。例えば、パイプライン中の該当する命令並びに後続の命令をパイプライン中で廃棄することにより、逐次実行性を保証することができる。
【００１４】
内部例外が発生した命令より前の命令を実行し終えるために、内部例外が発生した場合は、そのステージで内部例外発生フラグを設定し、ＭＥＭステージまでパイプラインを流した後に、そのフラグを見て内部例外を検出するという方法が多く取り入れられている。このような方法によれば、内部例外だけでなく外部割込みもＭＥＭステージで検出される。その後は同様の処理が行われる。
【００１５】
図４には、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが検出された場合のパイプラインの動きを図解している。同図に示すように、検出信号によりＭＥＭ、ＥＸ、ＩＤ、ＩＦの各ステージに存在する命令が廃棄（ａｂｏｒｔ）される。また、ＥＰＣにはＰＣの値ｎがセットされる。さらに、ＰＣに割り込み処理ルーチンの値がセットされ、新たにＩＦステージが開始される。
【００１６】
ところで、内部例外や外部割込みなどの割込み処理ルーチンは命令キャッシュに存在しない可能性が高い。そうすると、割込み処理ルーチンの実行が始まった途端にパイプラインが停止（ストール）する。図５には、このような場合のパイプラインの動きを図解している。図示のように、内部例外や外部割込みが発生すると、処理が実行されない無駄なサイクルが多数生じるという問題がある。
【００１７】
従来は、内部例外も外部割込みも同様の扱いが行われていたため、外部割込みに関しても同様の問題を被っていた。
【００１８】
また、現在のプロセッサは、マルチタスク動作時には一定時間毎にタイマ割込みが発生するようになっているため、その度にストール・サイクルが発生している（タイマ割込みは、実行中の命令に同期しない外部割込みである）。また、プロセッサが多数の外部割込みを扱っている場合にも、同様に大量のストール・サイクルが発生していた。そのため、本来プロセッサが持っている理論上の処理能力に比し、実際の処理能力が大幅に下回るという結果に陥っている。
【００１９】
なお、特開平８−２２１２７０号公報には、割込みが発生してプロセッサが内部状態の待避を行っている間に，並行してプリフェッチを行うことで、割込み処理ルーチンの読み出しを実効的に速めることができるデータ処理装置について開示されている。しかしながら、同公報に記載のデータ処理装置は、ＣＩＳＣ（Complex Instruction Set Computer：複雑命令セット・コンピュータ）プロセッサ向けに提案されたものであり、ＲＩＳＣプロセッサのように割込み時の内部状態の待避（の大部分）を割込み処理ルーチンの命令列で実行するようなものに対しては、あまり効果は期待できない。
【００２０】
【発明が解決しようとする課題】
本発明の目的は、プロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する、優れた例外処理システム及び方法を提供することにある。
【００２１】
本発明の更なる目的は、各ステージに分けられた複数の命令をオーバーラップして実行するパイプライン方式を採用したプロセッサ（とりわけＲＩＳＣ型プロセッサ）のための、優れた例外処理システム及び方法を提供することにある。
【００２２】
本発明の更なる目的は、例外や割込みが発生した場合も元の命令列を効率的に実行することができる、優れた例外処理システム及び方法を提供することにある。
【００２３】
本発明の更なる目的は、例外や割込みの発生に伴うパイプラインの停止（ストール）などによる無駄なサイクルを抑制することができる、優れた例外処理システムを提供することにある。
【００２４】
【課題を解決するための手段】
本発明は、上記課題を参酌してなされたものであり、その第１の側面は、プロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理システム又は方法であって、
実行中の命令に非同期な外部割込みを検出する手段又はステップと、
検出された外部割込みに対応する割込み処理ルーチンの命令フェッチが完了するまでの間、元の命令列の実行を継続させる手段又はステップと、
を具備することを特徴とする例外処理システム又は方法である。
【００２５】
また、本発明の第２の側面は、プロセッサが命令列の実行中に発生した例外的な事象をとらえて現在の命令列の実行を中断して、その事象を処理する別のルーチンを実行する例外処理システム又は方法であって、
実行中の命令に非同期な外部割込みを検出する手段又はステップと、
検出された外部割込みに対応する割込み処理ルーチンの命令フェッチを行う手段又はステップと、
該割込み処理ルーチンの命令フェッチが完了したか否かの状態を保持する状態保持手段又はステップと、
該割込み処理ルーチンの命令フェッチが完了する前は該外部割込みを受理せず元の命令列の実行を継続し、該命令フェッチの完了に応答して該外部割込みを受理する手段又はステップと、
を具備することを特徴とする例外処理システム又は方法である。
【００２６】
本発明の第２の側面に係る例外処理システム又は方法において、命令列を一時保持する命令キャッシュをプロセッサに付随して備えていてもよい。このような場合、該当する割込み処理ルーチンが前記命令キャッシュ中に存在するか否かを判定する判定手段又はステップと、前記判定手段又はステップによる判定結果に応じて元の命令列の実行継続範囲を調整する調整手段又はステップとをさらに備えていてもよい。
【００２７】
また、該外部割込みを受理した後は元の命令列を破棄するようにしてもよい。あるいは、該外部割込みを受理した後も元の命令列の実行を継続するようにしてもよい。
【００２８】
また、元の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該命令列の実行を中断するようにしてもよいし、該割込み処理ルーチンの命令フェッチを中断するようにしてもよい。
【００２９】
また、元の命令列の実行を継続している期間中に該命令に同期した例外事象が発生したことに応答して、該例外事象の処理ルーチンに実行を移すようにしてもよいし、あるいは、要求が保留になっていた割込み処理ルーチンに実行を移すようにしてもよい。
【００３０】
また、元の命令列の実行を継続している期間中に実行中の命令列のキャッシュ・ミスが発生したことに応答して、要求が保留になっていた割込み処理ルーチンに実行を移すようにしてもよい。
【００３１】
また、本発明の第３の側面は、システム・インターフェース経由でメイン・メモリにアクセスするとともにキャッシュ・コントローラ経由でキャッシュ・メモリにアクセスするプロセッサであって、
実行中の命令に非同期な外部割込みを検出する手段と、
外部割込みの検出に応答して、前記キャッシュ・メモリに対して該当する割込み処理ルーチンのキャッシュ・ヒット判定を行う判定手段と、
キャッシュ・ヒット判定の結果キャッシュ・ミスしたことに応答して、前記メイン・メモリに対して該当する割込み処理ルーチンを要求するメモリ要求手段と、
該当する割込み処理ルーチンのキャッシュ・ミスに応答して不確定状態を保持する状態レジスタと、
を具備することを特徴とするプロセッサである。
【００３２】
本発明の第３の側面に係るプロセッサにおいて、前記状態レジスタは、該当する割込みルーチンが前記メイン・メモリから到着したことに応答して通常状態に復帰するようにしてもよい。
【００３３】
また、該プロセッサは、前記状態レジスタが不確定状態の期間中は外部割込みを受理しないようにしてもよい。
【００３４】
また、該プロセッサは、該外部割込みを受理した後は元の命令列を破棄するようにしてもよいし、あるいは、該外部割込みを受理した後も元の命令列の実行を継続するようにしてもよい。
【００３５】
また、該プロセッサは、前記状態レジスタが不確定状態のときに実行中の命令列に同期した例外事象が発生したことに応答して、該命令列の実行を中断するようにしてもよいし、該割込み処理ルーチンのメモリ要求を中断するようにしてもよい。
【００３６】
また、該プロセッサは、前記状態レジスタが不確定状態のとき実行中の命令列に同期した例外事象が発生したことに応答して、前記状態レジスタを通常状態に戻して、該例外事象の処理ルーチンに実行を移すようにしてもよいし、あるいは、要求が保留になっていた割込み処理ルーチンに実行を移すようにしてもよい。
【００３７】
また、該プロセッサは、前記状態レジスタが不確定状態のときに実行中の命令列のキャッシュ・ミスが発生したことに応答して、前記状態レジスタを通常状態に戻して、要求が保留になっていた割込み処理ルーチンに実行を移すようにしてもよい。
【００３８】
【作用】
本発明に係るプロセッサの例外処理においては、システムに発生する割込みを、内部例外と外部割込みとを区別して処理するようにした。
【００３９】
実行中の命令に同期する内部例外については、命令列の実行は、内部例外の発生原因となった命令において中断されなければならない。これに対し、実行中の命令とは非同期である外部割込みは、実行中の命令には無関係に発生するから、たまたま実行中の命令を直ちに中断する必要はなく、なるべく速く割込み処理ルーチンの実行を開始できればそれでよい。すなわち、割込み処理ルーチンの（先頭の）命令を読み終わる直前までは元の命令列を実行していて、その時点で中断したような扱いにすることができる。
【００４０】
ここで、割込み処理ルーチンの（先頭の）命令を読み終わるまでの時間は、割込み処理ルーチンが命令キャッシュに存在するか否かによって大きく異なる。したがって、割込み処理ルーチンが命令キャッシュに存在するか否かを調べて、元の命令列の実行継続範囲を調節することが有効である。割込み処理ルーチンが命令キャッシュに存在しない場合は、直ちにメイン・メモリからの読み出しを起動する。しかし、読み終わって命令が得られるまでには相当の時間がかかるので、その間に、元の命令列を比較的多数実行することができる訳である。従来はストールしていたサイクルを、本発明では有効に利用することができるので、プロセッサの処理効率が向上する。
【００４１】
したがって、本発明によれば、このような無駄なストール・サイクルを削除することにより、プロセッサの本来の処理能力を引き出すことができる。
【００４２】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【００４３】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施例を詳解する。
【００４４】
図６には、本発明の実施に供される割込み処理システムの機能構成を模式的に示している。本発明に係る割込み処理はシステム・コプロセッサにおいて扱われる。システム・コプロセッサは、内部例外や外部割込みなどの例外処理を実行する例外処理システムと、割込みの原因を記憶する原因レジスタ、例外プログラム・カウンタ（ＥＰＣ）などの各種レジスタ群、及び、メモリ空間へのアクセスを管理するメモリ管理システムで構成される。メモリ管理システムは、キャッシュ・コントローラ経由で命令キャッシュやデータ・キャッシュにアクセスするとともに、システム・インターフェース経由でメモリ・コントローラ及びメイン・メモリにアクセスすることができる。本発明は、例えば、例外処理システムにおける機能拡張という形態で実現される。
【００４５】
本発明では、システムに発生する割込みを、内部例外と外部割込みとを区別して処理するようにした。
【００４６】
実行中の命令に同期する内部例外については、命令列の実行は、内部例外の発生原因となった命令において中断されなければならない。これに対し、実行中の命令に非同期である外部割込みは、実行中の命令には無関係に発生するから、たまたま実行中の命令を直ちに中断する必要はなく、なるべく速く割込み処理ルーチンの実行を開始できればそれでよい。すなわち、割込み処理ルーチンの（先頭の）命令を読み終わる直前までは元の命令列を実行していて、その時点で中断したような扱いにすることができる。
【００４７】
ここで、割込み処理ルーチンの（先頭の）命令を読み終わるまでの時間は、割込み処理ルーチンが命令キャッシュに存在するか否かによって大きく異なる。したがって、割込み処理ルーチンが命令キャッシュに存在するか否かを調べて、元の命令列の実行継続範囲を調節することが有効である。割込み処理ルーチンが命令キャッシュに存在しない場合は、直ちにメイン・メモリからの読み出しを起動する。しかし、読み終わって命令が得られるまでには相当の時間がかかるので、その間に、元の命令列を比較的多数実行することができる。
【００４８】
本発明では、以下の機能拡張を施すことにより、割込みが検出されてから割込み処理ルーチンが得られるまでに要する時間を有効活用するようにした。
【００４９】
（１）外部割込みを検出しても、割込み処理ルーチンの命令が実行できる状態になるまで、外部割込みを受理しない。
【００５０】
（２）割込み処理ルーチンの命令が実行できる状態になった場合、ＥＰＣを確定して割込み処理ルーチンの実行に移る（プログラム・カウンタを割込み処理ルーチンの先頭にする）。この場合、外部割込みを受理した後は、従来のようにパイプライン中の命令を破棄（ａｂｏｒｔ）してしまう方式と、パイプライン中の命令をそのまま実行し続ける方式とが考えられる。
【００５１】
図７には、割込み処理ルーチンの命令が命令キャッシュ（若しくはプリフェッチ・バッファ）中に存在しないうちには外部割込み要求を受理しないように動作するパイプラインの動きを図解している。各パイプラインでは、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）という各ステージに分けられて、複数の命令がオーバーラップして実行される。そして、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが検出されたとする。
【００５２】
従来は、図５（前述）に示したように、外部割込み要求を検出するとすぐに例外処理ルーチンへ実行を移していた。これに対し、本実施例では、例外処理システムが、キャッシュ・コントローラに対して割込みルーチンのキャッシュ・ビット判定の問合せを行う（図７中の１０）。このとき、パイプライン側とシステム・コプロセッサ側でキャッシュタグを同時に参照することができない場合には、命令キャッシュ・ビジー（ＩＣＢ）でパイプラインがストールする。
【００５３】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。他方、キャッシュ・ミスした場合は（図７中の１１）、図示のように、例外処理システムの状態をＥＰＣ不確定状態にするとともに（図７中の１２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（図７中の１３）。
【００５４】
割込み処理の命令列を要求するメモリ・リクエストを発行した後も、現在実行している命令列を引き続き実行し続ける。図５に示すチャートでは、外部割込みが検出されたＰＣ＝ｎ番地の命令のＭＥＭステージ以降に相当する各パイプラインのステージが破棄（ａｂｏｒｔ）されているのに対して、図７では、ＰＣ＝ｎ番地のＭＥＭステージ以降に相当する各パイプライン上のステージの実行が継続されている点に留意されたい。
【００５５】
そして、割込み処理ルーチンの命令列がシステム・インターフェース経由でメイン・メモリから到着したら、この時点で外部割込みを受理する（図７中の１４）。外部割込みを受理した時点が、例えば図７に示すようにＰＣ＝ｎ＋ｍ＋４番地の命令のＭＥＭステージ以降に相当する各パイプラインのステージが破棄される。そして、ＭＥＭステージの命令のアドレス（ＰＣ＝ｎ＋ｍ＋４）をＥＰＣに記録して（図７中の１５）、例外処理システムの状態を通常に戻して（図７中の１６）、割込み処理を実行する。
【００５６】
図８には、このときの例外処理システムが実行する処理手順をフローチャートの形式で図解している。以下、このフローチャートに従って説明する。
【００５７】
例外処理システムが外部割込み要求を検出すると、まず、キャッシュ・コントローラの命令キャッシュ・タグにアクセスして（ステップ１０）、キャッシュ・ヒット判定の問合せを行う（ステップ１１）。
【００５８】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。
【００５９】
他方、キャッシュ・ミスした場合は、例外処理システムの状態をＥＰＣ不確定状態にして（ステップ１２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（ステップ１３）。そして、割込み処理の命令列を要求するメモリ・リクエストを発行した後も、現在実行している命令列を引き続き実行し続ける（ステップ１４）。
【００６０】
割込み処理ルーチンの命令列がシステム・インターフェース経由でメイン・メモリから到着したら、この時点で外部割込みを受理して、ＥＰＣを確定し（ステップ１５）、例外処理システムの状態を通常に戻して（ステップ１６）、割込み処理を受け付けてこれを実行する（ステップ１７）。
【００６１】
図７及び図８に示す例では、外部割込みを受理した後は、従来のようにパイプライン中の命令を破棄するようになっている。これに対し、外部割込みを受理した後も、パイプライン中の命令をそのまま実行し続けるような機能拡張も考えられる。
【００６２】
図９には、割込み処理ルーチンの命令が命令キャッシュ（若しくはプリフェッチ・バッファ）中に存在しないうちには外部割込み要求を受理しないように動作するとともに、外部割込みを受理した後もパイプライン中の命令をそのまま実行し続けるように動作する（すなわち従来の命令列と割込み処理ルーチンの命令列を重ねて実行する）パイプラインの動きを図解している。
【００６３】
従来は、図５（前述）に示したように割込み処理を開始する場合は割込みを検出した時点でパイプライン中の命令をすべて破棄していたが、図９に示す本実施例ではできる限りの命令を破棄せずに実行する。
【００６４】
各パイプラインでは、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）という各ステージに分けられて、複数の命令がオーバーラップして実行される。そして、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが受理されたとする。
【００６５】
外部割込みが受理されたときに、各パイプラインの該当ステージでＥＰＣ不確定実行フラグ（以下、"ＥＰＣＵＥ  ｆｌａｇ"とする）をセットする。
【００６６】
また、この時点でＩＦステージにあったＰＣ＝ｎ＋１２番地の命令に対して擬似内部例外発生フラグをセットすることにより、内部例外が発生した命令としてＮＯＰ化する。
【００６７】
ＥＰＣ不確定実行フラグは、内部例外発生フラグと同様に、命令とともにパイプライン中を流れる。
【００６８】
そして、状態をＥＰＣ不確定にしてパイプラインを進行させ、ＮＯＰ化された命令をＭＥＭステージで検出して、そのアドレスすなわちＰＣ＝ｎ＋１２をＥＰＣに記録して状態を通常に戻す。
【００６９】
また、図１０には、図９と同様に従来の命令列と割込み処理ルーチンの命令列を重ねて実行している命令中に、内部例外が発生した場合のパイプラインの動きを図解している。
【００７０】
各パイプラインでは、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）という各ステージに分けられて、複数の命令がオーバーラップして実行される。そして、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが受理されたとする。
【００７１】
外部割込みが受理されたときに、各パイプラインの該当ステージでＥＰＣ不確定実行フラグをセットする。
【００７２】
また、この時点でＩＤステージにあったＰＣ＝ｎ＋８番地の命令に対して内部例外が発生したとする。このような場合には、従来の場合と同様、その命令に内部例外発生フラグをセットすることにより、ＮＯＰ化する。
【００７３】
ＥＰＣ不確定実行フラグは、内部例外発生フラグと同様に、命令とともにパイプライン中を流れる。
【００７４】
そして、状態をＥＰＣ不確定にしてパイプラインを進行させ、ＮＯＰ化された命令をＭＥＭステージで検出して、そのアドレスすなわちＰＣ＝ｎ＋８をＥＰＣに記録し、ＥＰＣ不確定フラグがセットされている命令のみを破棄して、状態を通常に戻す。
【００７５】
以上説明したように、（１）並びに（２）のような機能拡張を施すことにより、割込みが検出されてから割込み処理ルーチンが得られるまでに要する時間を有効活用することができる。但し、外部割込みを受理せず保留している状態で、現命令列で内部例外やキャッシュ・ミスが発生する可能性がある。このような場合を想定して、さらに以下に示す機能拡張を例外処理システムに行うようにすればよい。
【００７６】
（３）割込み処理ルーチンの命令がメモリから届くまで待つ状態で内部例外が発生した場合にパイプラインの実行を中断して適切な処理ルーチンに実行を移す。例えば、内部例外処理ルーチンに実行を移したり、要求が保留になっていた外部割込み処理ルーチンへ実行を移す。
【００７７】
（４）割込み処理ルーチンの命令がメモリから届くまで待つ状態でキャッシュ・ミスが発生したときには、要求が保留になっていた外部割込み処理ルーチンへ実行を移す。
【００７８】
図１１には、割込み処理ルーチンの命令がメモリから届くまで待つ状態、すなわちＥＰＣ不確定状態で内部例外が生じ、その内部例外処理を実行する場合のパイプラインの動きを図解している。
【００７９】
各パイプラインでは、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）という各ステージに分けられて、複数の命令がオーバーラップして実行される。
【００８０】
そして、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが検出されて、ＥＰＣ不確定により元の命令列の実行を継続している最中に、さらにｎ＋１６番地の命令の実行のＩＦステージにおいて内部例外が発生したとする。このような場合、先に検出された外部割込み要求の処理よりも先に内部例外処理を行う必要がある。
【００８１】
外部割込み要求があった場合、外部割込み処理ルーチンについて命令キャッシュ・タグをアクセスして（図１１中の２０）、キャッシュ・ヒット判定の問合せを行う（図１１中の２１）。
【００８２】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。他方、キャッシュ・ミスした場合は、図示のように、例外処理システムの状態をＥＰＣ不確定状態にするとともに（図１１中の２２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（図１１中の２３）。そして、要求した命令が到着するまで、割込み要求の受理を保留して、現命令列でパイプラインを実行し続ける。
【００８３】
割込み処理ルーチンの命令を待っている状態、すなわちＥＰＣ不確定状態で内部例外が検出されたとする。図示の例では、内部例外が発生したＰＣ＝ｎ＋１６番地の命令列がＭＥＭステージまで進行したときに内部例外が検出される（図１１中の２８）。このような場合、メイン・メモリに対する命令要求を破棄する（図１１中の２９）。そして、従来と同様に、内部例外を発生した命令のアドレス（ＰＣ＝ｎ＋１６）をＥＰＣに記録し（図１１中の２５）、例外処理システムの状態を通常に戻し（図１１中の２６）、ＰＣ＝ｎ＋１６番地の命令のＭＥＭステージ以降に相当する残りのパイプラインを破棄して、例外処理ルーチンの実行を開始する。
【００８４】
なお、メイン・メモリに要求した命令列が届いた場合は、破棄するかバッファ（図示しない）に格納しておけばよい。
【００８５】
また、図１２には、ＥＰＣ不確定状態で内部例外が生じ、その内部例外処理を実行する場合の例外処理システムにおける処理手順をフローチャートの形式で示している。以下、このフローチャートに従って説明する。
【００８６】
例外処理システムが外部割込み要求を検出すると、まず、キャッシュ・コントローラの命令キャッシュ・タグにアクセスして（ステップ２０）、キャッシュ・ヒット判定の問合せを行う（ステップ２１）。
【００８７】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。
【００８８】
他方、キャッシュ・ミスした場合は、例外処理システムの状態をＥＰＣ不確定状態にして（ステップ２２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（ステップ２３）。そして、割込み処理の命令列を要求するメモリ・リクエストを発行した後も、現在実行している命令列を引き続き実行し続ける。
【００８９】
割込み処理ルーチンの命令を待っている状態、すなわちＥＰＣ不確定状態の期間中、内部例外が発生したか否かを常時監視する（ステップ２８及びステップ２４）。
【００９０】
ＥＰＣ不確定期間中に内部例外が発生しなかった場合には、図８に示した場合と同様に、割込み処理ルーチンの命令列がシステム・インターフェース経由でメイン・メモリから到着した時点で外部割込みを受理して、ＥＰＣを確定し（ステップ２５）、例外処理システムの状態を通常に戻して（ステップ２６）、割込み処理を受け付けてこれを実行する（ステップ２７）。
【００９１】
他方、ＥＰＣ不確定状態の期間中に内部例外が検出された場合には、メイン・メモリに対する命令要求を破棄する（ステップ２９）。
【００９２】
そして、従来と同様に、内部例外を発生した命令のアドレスをＥＰＣに記録し（ステップ２５）、例外処理システムの状態を通常に戻し（ステップ２６）、残りのパイプラインを破棄して、例外処理ルーチンの実行を開始する（ステップ２７）。
【００９３】
図１１及び図１２を参照しながら説明したような、ＥＰＣ不確定状態で内部例外が生じたときにはその内部例外を実行するという手法は、内部例外の処理手順が従来方式と略同一なので、実装が容易である。
【００９４】
図１３には、割込み処理ルーチンの命令がメモリから届くまで待つ状態、すなわちＥＰＣ不確定状態で内部例外が生じたときに、保留となっている割込み処理を実行する場合のパイプラインの動きを図解している。
【００９５】
各パイプラインでは、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）という各ステージに分けられて、複数の命令がオーバーラップして実行される。
【００９６】
そして、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが検出されて、ＥＰＣ不確定により元の命令列の実行を継続している最中に、さらにｎ＋１６番地の命令の命令実行のＩＦステージにおいて内部例外が発生したとする。
【００９７】
このような場合、内部例外を発生したｎ＋１６番地の命令の実行のＭＥＭステージにおいて、内部例外が検出されるが、外部割込みが検出されたものとして、本実施例に係る例外処理システムは外部割込み処理を開始する。
【００９８】
外部割込み要求があった場合、外部割込み処理ルーチンについて命令キャッシュ・タグをアクセスして（図１３中の３０）、キャッシュ・ヒット判定の問合せを行う（図１３中の３１）。
【００９９】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。他方、キャッシュ・ミスした場合は、図示のように、例外処理システムの状態をＥＰＣ不確定状態にするとともに（図１３中の３２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（図１３中の３３）。そして、要求した命令が到着するまで、割込み要求の受理を保留して、現命令列でパイプラインを実行し続ける。
【０１００】
割込み処理ルーチンの命令を待っている状態、すなわちＥＰＣ不確定状態で内部例外が検出されたとする。図示の例では、内部例外が発生したＰＣ＝ｎ＋１６番地の命令列がＭＥＭステージまで進行したときに内部例外が検出される（図１３中の３８）。このような場合、内部例外を発生した命令のアドレス（ＰＣ＝ｎ＋１６）をＥＰＣに記録するが（図１３中の３５）、原因レジスタには外部割込みを記録する（図１３中の３９）。
【０１０１】
そして、例外処理システムを通常の状態に戻して（図１３中の３６）、例外処理ルーチンの実行を開始する。
【０１０２】
ＥＰＣ不確定状態であったので、大抵の場合、命令キャッシュ・ミスにより実行が停止（ｓｔａｌｌ）する。
【０１０３】
また、図１４には、ＥＰＣ不確定状態で内部例外が生じたときに、保留となっている割込み処理を実行する場合の例外処理システムにおける処理手順をフローチャートの形式で示している。以下、このフローチャートに従って説明する。
【０１０４】
例外処理システムが外部割込み要求を検出すると、まず、キャッシュ・コントローラの命令キャッシュ・タグにアクセスして（ステップ３０）、キャッシュ・ヒット判定の問合せを行う（ステップ３１）。
【０１０５】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。
【０１０６】
他方、キャッシュ・ミスした場合は、例外処理システムの状態をＥＰＣ不確定状態にして（ステップ３２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（ステップ３３）。そして、割込み処理の命令列を要求するメモリ・リクエストを発行した後も、現在実行している命令列を引き続き実行し続ける。
【０１０７】
割込み処理ルーチンの命令を待っている状態、すなわちＥＰＣ不確定状態の期間中、内部例外が発生したか否かを常時監視する（ステップ３８及びステップ３４）。
【０１０８】
ＥＰＣ不確定期間中に内部例外が発生しなかった場合には、図８に示した場合と同様に、割込み処理ルーチンの命令列がシステム・インターフェース経由でメイン・メモリから到着した時点で外部割込みを受理して、ＥＰＣを確定し（ステップ３５）、例外処理システムの状態を通常に戻して（ステップ３６）、割込み処理を受け付けてこれを実行する（ステップ３７）。
【０１０９】
他方、ＥＰＣ不確定状態の期間中に内部例外が検出された場合には（ステップ３８）、原因レジスタに内部例外ではなく外部割込みをセットして、割込みの原因を外部割込みとして扱う（ステップ３９）。
【０１１０】
そして、従来と同様に、内部例外を発生した命令のアドレスをＥＰＣに記録し（ステップ３５）、例外処理システムの状態を通常に戻し（ステップ３６）、残りのパイプラインを破棄して、例外処理ルーチンの実行を開始する（ステップ３７）。
【０１１１】
図１３及び図１４を参照しながら説明した実施例は、図１１及び図１２に示した場合に比し、ハードウェアの実装が多少複雑化するが、イベントの発生順序が従来のものと同じに再現され、割込みのスタベーションも回避することができる。また、外部割込みの処理が終了した際に、中断した時点から命令列の実行を再開すると、改めて内部例外が認識されることになる。また、図１１及び図１２に示した例では内部例外処理で長時間割込み禁止状態が続く可能性があるが、この実施例によれば外部割込みに対する応答時間を従来と同じにできるという利点もある。
【０１１２】
図１５には、割込み処理ルーチンの命令がメモリから届くまで待つ状態でキャッシュ・ミスが発生したときに、要求が保留になっていた外部割込み処理ルーチンへ実行を移す場合のパイプラインの動きを図解している。
【０１１３】
各パイプラインでは、命令フェッチ（ＩＦ）、命令デコード（ＩＤ）、演算実行（ＥＸ）、メモリ・アクセス（ＭＥＭ）、ライトバック（ＷＢ）という各ステージに分けられて、複数の命令がオーバーラップして実行される。
【０１１４】
そして、ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが検出されて、ＥＰＣ不確定により元の命令列の実行を継続している最中に、さらにｎ＋１６番地の命令の命令実行のＩＦステージにおいてキャッシュ・ミスが発生したとする。
【０１１５】
元の命令列の実行を継続している間にキャッシュ・ミスが生じた場合も、その時点で命令列の実行を中断する。これは、既に割込み処理ルーチンのメイン・メモリからの読み出し動作が起動されているので、これに続くメイン・メモリ要求を出したとしても、その応答を待っている間に、割込み処理ルーチンの読み出しが完了して割込み処理ルーチンの実行が開始できるようになる可能性が高いからである。
【０１１６】
外部割込み要求があった場合、外部割込み処理ルーチンについて命令キャッシュ・タグをアクセスして、キャッシュ・ヒット判定の問合せを行う。
【０１１７】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。他方、キャッシュ・ミスした場合は、図示のように、例外処理システムの状態をＥＰＣ不確定状態にするとともに、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う。そして、要求した命令が到着するまで、割込み要求の受理を保留して、現命令列でパイプラインを実行し続ける。
【０１１８】
割込み処理ルーチンの命令を待っている状態、すなわちＥＰＣ不確定状態でキャッシュ・ミスが検出されたとする。図示の例では、内部例外が発生したＰＣ＝ｎ＋１６番地の命令列のＩＦステージにおいてキャッシュ・ミスが検出される（図１５中の５０）。
【０１１９】
このような場合、それ以前の命令を完了するために、内部例外発生フラグをセットして（図１５中の５１）、キャッシュ・ミスを発生した命令をＮＯＰ化し、そのままパイプラインの動作を続行する。
【０１２０】
キャッシュ・ミスを起こした命令はＭＥＭステージで内部例外として検出されるが（図１５中の４８）、その原因フラグに外部割込みをセットし（図１５中の４９）、その命令のアドレス（ＰＣ＝ｎ＋１６）をＥＰＣに記録し、状態を通常に戻して割込み受付処理を行う（図１５中の４６）。
【０１２１】
また、図１６には、割込み処理ルーチンの命令がメモリから届くまで待つ状態でキャッシュ・ミスが発生したときに、要求が保留になっていた外部割込み処理ルーチンへ実行を移す場合の例外処理システムにおける処理手順をフローチャートの形式で示している。以下、このフローチャートに従って説明する。
【０１２２】
例外処理システムが外部割込み要求を検出すると、まず、キャッシュ・コントローラの命令キャッシュ・タグにアクセスして（ステップ４０）、キャッシュ・ヒット判定の問合せを行う（ステップ４１）。
【０１２３】
割込み処理ルーチンのキャッシュ・ヒット判定でキャッシュ・ヒットした場合は従来通り割込み処理ルーチンへ実行を移す。
【０１２４】
他方、キャッシュ・ミスした場合は、例外処理システムの状態をＥＰＣ不確定状態にして（ステップ４２）、システム・インターフェースを介してメイン・メモリに対して命令列の要求すなわちメモリ・リクエストを行う（ステップ４３）。そして、割込み処理の命令列を要求するメモリ・リクエストを発行した後も、現在実行している命令列を引き続き実行し続ける。
【０１２５】
割込み処理ルーチンの命令を待っている状態、すなわちＥＰＣ不確定状態の期間中、内部例外が発生したか否か、並びに、キャッシュ・ミスが発生したか否かを常時監視する（ステップ４８、ステップ５０、及びステップ４４）。
【０１２６】
ＥＰＣ不確定期間中に内部例外もキャッシュ・ミスも発生しなかった場合には、図８に示した場合と同様に、割込み処理ルーチンの命令列がシステム・インターフェース経由でメイン・メモリから到着した時点で外部割込みを受理して、ＥＰＣを確定し（ステップ４５）、例外処理システムの状態を通常に戻して（ステップ４６）、割込み処理を受け付けてこれを実行する（ステップ４７）。
【０１２７】
他方、ＥＰＣ不確定状態の期間中に内部例外が検出された場合には（ステップ４８）、原因レジスタに内部例外ではなく外部割込みをセットして、割込みの原因を外部割込みとして扱う（ステップ４９）。
【０１２８】
また、ＥＰＣ不確定状態の期間中にキャッシュ・ミスが検出された場合には（ステップ５０）、内部例外発生フラグを設定して（ステップ５１）、前ステップＳ４８に戻る。この結果、キャッシュ・ミスを発生した命令はＮＯＰ化され、そのままパイプラインの動作が続行し、それ以前の命令が完了する。
【０１２９】
キャッシュ・ミスを起こした命令はＭＥＭステージで内部例外として検出されるが（ステップ４８）、その原因フラグに外部割込みがセットされる（ステップ４９）。
【０１３０】
そして、従来と同様に、内部例外を発生した命令のアドレスをＥＰＣに記録し（ステップ４５）、例外処理システムの状態を通常に戻し（ステップ４６）、残りのパイプラインを破棄して、例外処理ルーチンの実行を開始する（ステップ４７）。
【０１３１】
［追補］
以上、特定の実施例を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本発明の要旨を判断するためには、冒頭に記載した特許請求の範囲の欄を参酌すべきである。
【０１３２】
【発明の効果】
以上詳記したように、本発明によれば、各ステージに分けられた複数の命令をオーバーラップして実行するパイプライン方式を採用したプロセッサ（とりわけＲＩＳＣ型プロセッサ）のための、優れた例外処理システム及び方法を提供することができる。
【０１３３】
また、本発明によれば、例外や割込みが発生した場合も元の命令列を効率的に実行することができる、優れた例外処理システム及び方法を提供することができる。
【０１３４】
また、本発明によれば、例外や割込みの発生に伴うパイプラインの停止（ストール）などによる無駄なサイクルを抑制することができる、優れた例外処理システム及び方法を提供することができる。
【０１３５】
本発明に係る例外処理によれば、従来は例外処理実行時にストールしていたサイクルを有効に利用することができ、処理効率が向上する。
【０１３６】
例えば、現在のプロセッサは、マルチタスク動作時には一定時間毎にタイマ割込みが発生するようになっているため、その度にストール・サイクルが発生していた。また、プロセッサが多数の外部割込みを扱っている場合にも、同様に大量のストール・サイクルが発生していた。そのため、本来プロセッサが持っている理論上の処理能力に比し、実際の処理能力が大幅に下回るという結果に陥っていた。これに対し、本発明によれば、このような無駄なストール・サイクルを削除することにより、プロセッサの本来の処理能力を引き出すことができる。
【図面の簡単な説明】
【図１】ＲＩＳＣ（Reduced Instruction Set Computer：縮小命令セット・コンピュータ）プロセッサにおける典型的な５段パイプライン構成を模式的に示した図（従来例）である。
【図２】パイプライン処理における割り込み制御ブロックを示した図である。
【図３】システム・コプロセッサの内部構成を示した図である。
【図４】ｎ番地の命令（すなわちプログラム・カウンタ（ＰＣ）の値がｎ）の命令実行のＭＥＭステージにおいて外部割込みが検出されたときのパイプラインの動作を示したチャートである。
【図５】割込み処理ルーチンが命令キャッシュに存在しないために、割込み処理ルーチンの実行が始まった途端にパイプラインが停止（ストール）するときのパイプラインの動作を示したチャートである。
【図６】本発明の実施に供される割込み処理システムの機能構成を模式的に示した図である。
【図７】割込み処理ルーチンの命令が命令キャッシュ（若しくはプリフェッチ・バッファ）中に存在しないうちには外部割込み要求を受理しないように動作するパイプラインの動きを示したチャートである。
【図８】割込み処理ルーチンの命令が命令キャッシュ（若しくはプリフェッチ・バッファ）中に存在しないうちには外部割込み要求を受理しないようにパイプラインを動作せしめるための例外処理システムの処理手順を示したフローチャートである。
【図９】割込み処理ルーチンの命令が命令キャッシュ（若しくはプリフェッチ・バッファ）中に存在しないうちには外部割込み要求を受理しないように動作するとともに、外部より込みを受理した後もパイプライン中の命令をそのまま実行し続けるように動作するパイプラインの動きを示したチャートである。
【図１０】割込み処理ルーチンの命令が命令キャッシュ（若しくはプリフェッチ・バッファ）中に存在しないうちには外部割込み要求を受理しないように動作するとともに、外部より込みを受理した後もパイプライン中の命令をそのまま実行し続けるように動作するパイプラインの動きを示したチャートであり、より具体的には、従来の命令列と割込み処理ルーチンの命令列を重ねて実行している命令中に内部例外が発生した場合のパイプラインの動きを示したチャートである。
【図１１】ＥＰＣ不確定状態で内部例外が生じ、その内部例外処理を実行する場合のパイプラインの動きを示したチャートである。
【図１２】ＥＰＣ不確定状態で内部例外が生じ、その内部例外処理を実行する場合の例外処理システムにおける処理手順を示したフローチャートである。
【図１３】ＥＰＣ不確定状態で内部例外が生じたときに、保留となっている割込み処理を実行する場合のパイプラインの動きを示したチャートである。
【図１４】ＥＰＣ不確定状態で内部例外が生じたときに、保留となっている割込み処理を実行する場合の例外処理システムにおける処理手順を示したフローチャートである。
【図１５】割込み処理ルーチンの命令がメモリから届くまで待つ状態でキャッシュミスが発生したときに要求が保留になっていた外部割込み処理ルーチンへ実行を移す場合のパイプラインの動きを示したチャートである。
【図１６】割込み処理ルーチンの命令がメモリから届くまで待つ状態でキャッシュミスが発生したときに要求が保留になっていた外部割込み処理ルーチンへ実行を移す場合の例外処理システムの処理手順を示したフローチャートである。
【図１】
0004423757.tif 000002
【図２】
0004423757.tif 000003
【図３】
0004423757.tif 000004
【図４】
0004423757.tif 000005
【図５】
0004423757.tif 000006
【図６】
0004423757.tif 000007
【図７】
0004423757.tif 000008
【図８】
0004423757.tif 000009
【図９】
0004423757.tif 000010
【図１０】
0004423757.tif 000011
【図１１】
0004423757.tif 000012
【図１２】
0004423757.tif 000013
【図１３】
0004423757.tif 000014
【図１４】
0004423757.tif 000015
【図１５】
0004423757.tif 000016
【図１６】
0004423757.tif 000017