(57)【要約】ソフトウエア的に制御できる例外を実現する。例外をプログラム制御する方法では、プロセッサが次のステップを実行することを含む。即ち、例外を有効にするか否かの例外制御指定のための制御指定命令を実行して、レジスタに例外の制御指定値を設定するステップと、例外を発生させるか否かの例外制御実行のための制御実行命令を実行して、レジスタに設定された制御指定値が例外を有効にする値か否かを判定し、制御指定値が例外を有効にする値のときは例外を発生させるステップとである。また、レジスタに設定された制御指定値が例外を有効にする値でないときには例外を発生させないステップを実行することを含む。
2012086288.tif 000002
【特許請求の範囲】
【請求項１】
例外をプログラム制御する方法であって、プロセッサが、
例外を有効にするか否かの例外制御指定のための制御指定命令を実行して、レジスタに前記例外の制御指定値を設定するステップと、
例外を発生させるか否かの例外制御実行のための制御実行命令を実行して、前記レジスタに設定された前記制御指定値が前記例外を有効にする値か否かを判定し、当該制御指定値が前記例外を有効にする値のときは前記例外を発生させるステップと、
を実行することを含む、例外プログラム制御方法。
【請求項２】
前記レジスタに設定された前記制御指定値が前記例外を有効にする値でないときには前記例外を発生させないステップを実行することを含む、請求項１に記載の方法。
【請求項３】
前記制御指定命令はビットマップインデックス部および制御指定部を有し、前記レジスタはビットマップレジスタを備え、前記制御指定値を設定するステップは、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定するステップを実行することを含む、請求項１または２に記載の方法。
【請求項４】
前記制御実行命令はビットマップインデックス部を有し、前記例外を発生させるステップは、当該ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値のときに、前記例外を発生させるステップを実行することを含む、請求項３に記載の方法。
【請求項５】
前記レジスタはリターンアドレスレジスタを備え、前記例外を発生させるステップは、前記制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定するステップを実行することを含む、請求項４に記載の方法。
【請求項６】
前記制御実行命令はキーコード部を有し、前記レジスタはキーレジスタを備え、前記例外を発生させるステップは、当該キーコード部の値を、当該発生させる前記例外での使用のため、当該キーレジスタに設定するステップを実行することを含む、請求項４または５に記載の方法。
【請求項７】
前記レジスタはベクタベースレジスタを備え、前記例外を発生させるステップは、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプするステップを実行することを含む、請求項４〜６のいずれか１項に記載の方法。
【請求項８】
前記例外を発生させないステップは、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値でないときには、前記例外を発生させないステップを実行することを含む、請求項４に記載の方法。
【請求項９】
前記例外を発生させないステップは、前記制御実行命令を命令キューの中で破棄するステップを実行することを含む、請求項８に記載の方法。
【請求項１０】
プロセッサに、請求項１〜９のいずれか１項に記載の方法の各ステップを実行させる例外プログラム制御のためのコンピュータプログラム。
【請求項１１】
例外をプログラム制御するシステムであって、
プロセッサが、例外を有効にするか否かの例外制御指定のための制御指定命令と例外を発生させるか否かの例外制御実行のための制御実行命令とを実行して例外を制御する例外制御部を含み、
当該例外制御部が、
レジスタと、
前記制御指定命令を実行して、前記レジスタに前記例外の制御指定値を設定する制御指定命令処理部と、
前記制御実行命令を実行して、前記レジスタに設定された前記制御指定値が前記例外を有効にする値か否かを判定し、当該制御指定値が前記例外を有効にする値のときは前記例外を発生させる制御実行命令処理部とを含む、
例外プログラム制御システム。
【請求項１２】
前記制御実行命令処理部は、前記レジスタに設定された前記制御指定値が前記例外を有効にする値でないときには前記例外を発生させない、請求項１１に記載のシステム。
【請求項１３】
前記制御指定命令はビットマップインデックス部および制御指定部を有し、前記レジスタはビットマップレジスタを含み、前記制御指定命令処理部は、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定する、請求項１１または１２に記載のシステム。
【請求項１４】
前記制御実行命令はビットマップインデックス部を有し、前記制御実行命令処理部は、当該ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値のときに、前記例外を発生させる、請求項１３に記載のシステム。
【請求項１５】
前記レジスタはリターンアドレスレジスタを含み、前記制御実行命令処理部は、前記制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定する、請求項１４に記載のシステム。
【請求項１６】
前記制御実行命令はキーコード部を有し、前記レジスタはキーレジスタを含み、前記制御実行命令処理部は、当該キーコード部の値を、発生させる前記例外での使用のため、当該キーレジスタに設定する、請求項１４または１５に記載のシステム。
【請求項１７】
前記レジスタはベクタベースレジスタを含み、前記制御実行命令処理部は、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプする、請求項１４〜１６のいずれか１項に記載のシステム。
【請求項１８】
前記制御実行命令処理部は、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値でないときには、前記例外を発生させない、請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例外の制御に関し、特に、例外をプログラム制御する方法、システムおよびコンピュータプログラムに関する。
【背景技術】
【０００２】
現在のＣＰＵでは、ＣＰＵ命令の実行に際して、ハードウエア的なエラーが生じたりアクセス違反などが生じたりした場合には、ＣＰＵ例外が起きるようになっている。ＣＰＵ例外が起きると、割り込みが発生し、指定されたアドレスの例外処理コードを実行するようになっている。例外処理が完了すると、例外が起きたＣＰＵ命令の位置に戻って実行を再開する。ただし、致命的なエラーや特殊な場合は、例外が起きた位置に戻らないこともある。【０００３】
ＣＰＵ例外の種類としては、実行時エラー、ＴＬＢ（Translation Look-aside Buffer：変換索引バッファ）ミス、タイマー割り込みなど様々なものが考えられるが、いずれも用途や例外の発生条件があらかじめ決まっていて、ソフトウエア的に柔軟に条件を変える、即ち、プログラム制御することはできない。即ち、ほとんどの例外はプログラマが指定した位置で意図的に発生するようにはなっていない。【０００４】
非特権モードのコードから特権モードのコードを呼び出すために使用されるシステムコールや、例えば、２つのレジスタの値の比較によって例外を発生させるかどうかを判定するPowerPC（PowerPCはＩＢＭ社の登録商標）のトラップ命令(tw命令)は、指定した位置で例外を起こせる。しかしながら、システムコールの場合は、それによって必ず例外が発生し、例外を無効にすることはできないし、前記のトラップ命令の場合は、実行前に２つのレジスタの値を取得する処理と実行時のレジスタの比較判定処理が必要である。【０００５】
その他には、ＣＰＵ命令として条件分岐命令がある。これは、分岐命令を呼び出す前に判定対象となる状態をレジスタの値として反映させておく。そして、その値により分岐するかどうかが決まる。したがって、条件分岐命令は前もって揮発性のレジスタに対する操作が必要であり、かつ、たとえ分岐しなくても条件分岐命令自体は必ず実行されるようになっている。【０００６】
コンピュータプログラムにおいては、ある条件を満たす時にだけ特別な処理をさせたいことが良くあるが、その場合、通常は条件分岐命令を使用する。即ち、ＣＰＵ命令で何らかの操作を行ってレジスタの値を更新し、その値に応じて条件分岐命令で処理コードにジャンプするという手順を踏む。しかし、ごく稀にしか成立しない条件を毎回ソフトウエア的に確認するのは効率が悪い。【０００７】
図１に、従来技術によるごく稀にしか成立しない条件の条件分岐命令１０を例示する。タスクＡでは、初回とreset()後のfunc()呼び出し時だけのごく稀に初期化関数init()の呼び出しが必要であり、init()はタスクＢと同じプロセス空間からしか呼べないとする。このように、ある処理を行う前にリセット状態かどうかを確認して、そうであれば初期化処理をしなければならないが、リセット状態であることがほとんど無いとすると、この確認処理のために費やす時間は毎回無駄になる。特に、タスクＢでのリセット状態かどうかを判定する処理を右側に示されたアセンブラ言語レベルで見ると、ちょっとした判定にも、メモリアクセスが発生したりして結構時間を消費することが分かる。例えば、rst_f変数が構造体メンバのポインタ変数が指すアドレス先の変数であったり、即ちメモリを何度も参照したり、条件式がif (A or B or C...)のようにandやorで繋がっていると、消費する時間はさらに長くなる。【０００８】
特許文献１には、「ＣＡＬＬ」その他の命令語により指示される例外処理手続きへその処理を移行する例外処理の制御方式において、例外処理ハンドラ登録手段により登録された例外処理ハンドラ登録リストを走査して、例外条件識別名に対応する例外処理ハンドラに直接例外処理の制御を移行することにより、例外処理への伝播を早めて例外処理を高速化することが、記載されている。【０００９】
特許文献２には、命令メモリ以外の領域に割り込み要因ごとに割り込みアドレスを設定するアドレス設定手段と、割り込み検出回路により検出された要因を選択信号として、アドレス設定手段の出力をプログラム・カウンタに入力するマルチプレクサとを設けることにより、分岐命令に要するプログラム・メモリの消費を抑制し、またプログラム・メモリの無効空間を削除して、プログラム・メモリの効率化を図り、かつ割り込み処理時間を短縮することができるマイクロ・プロセッサが、記載されている。【００１０】
特許文献３には、通常処理プログラムおよび複数の例外処理ハンドラのプログラムと共に、各例外処理ハンドラが選択されて実行する必要のある通常処理プログラムの実行状態と例外状況を予めコード化して例外処理ハンドラ毎に用意し、各例外処理ハンドラと結合してプログラムコード中の情報として付加しておき、例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された通常処理プログラムの実行状態の情報とを比較することにより、例外処理ハンドラを選択し、実行制御を行うことで、例外処理ハンドラの有無が通常処理プログラムの処理量に影響を与えない例外処理機構が、記載されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開昭６２−２１２７３２号公報
【特許文献２】特開平４−１６９９３７号公報
【特許文献３】特開平７−４４３９８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
これまでは、予め設定されれば、例外は必ず発生し、条件分岐命令自体は必ず実行されるようになっている。即ち、例外を発生させたりさせなかったり、また、条件分岐命令自体を実行させたりさせなかったりする、ソフトウエア的にそれらを制御することはなされておらず、実際には必要のない処理動作もプログラムにより行われている。【００１３】
本発明は、ソフトウエア的に制御できる例外の実現を目的とする。本発明の目的には、例外をプログラム制御する方法、システムおよびコンピュータプログラムを提供することが含まれる。
【課題を解決するための手段】
【００１４】
本発明による１実施態様の例外プログラム制御方法は、プロセッサが次のステップを実行することを含む。即ち、例外を有効にするか否かの例外制御指定のための制御指定命令を実行して、レジスタに例外の制御指定値を設定するステップと、例外を発生させるか否かの例外制御実行のための制御実行命令を実行して、レジスタに設定された制御指定値が例外を有効にする値か否かを判定し、制御指定値が例外を有効にする値のときは例外を発生させるステップである。また、レジスタに設定された制御指定値が例外を有効にする値でないときには例外を発生させないステップを実行することを含む。【００１５】
好ましくは、制御指定命令はビットマップインデックス部および制御指定部を有し、レジスタはビットマップレジスタを備え、制御指定値を設定するステップは、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定するステップを実行することを含む。【００１６】
好ましくは、制御実行命令はビットマップインデックス部を有し、例外を発生させるステップは、当該ビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値のときに、例外を発生させるステップを実行することを含む。【００１７】
好ましくは、レジスタはリターンアドレスレジスタを備え、例外を発生させるステップは、制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定するステップを実行することを含む。【００１８】
好ましくは、制御実行命令はキーコード部を有し、レジスタはキーレジスタを備え、例外を発生させるステップは、当該キーコード部の値を、発生させる例外での使用のため、当該キーレジスタに設定するステップを実行することを含む。【００１９】
好ましくは、レジスタはベクタベースレジスタを備え、例外を発生させるステップは、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプするステップを実行することを含む。【００２０】
好ましくは、例外を発生させないステップは、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値でないときには、例外を発生させないステップを実行することを含む。また、例外を発生させないステップは、制御実行命令を命令キューの中で破棄するステップを実行することを含む。【００２１】
本発明の１実施態様により、プロセッサに上記方法の各ステップを実行させる例外プログラム制御のためのコンピュータプログラムが提供される。【００２２】
本発明による１実施態様の例外プログラム制御システムでは、プロセッサは、例外を有効にするか否かの例外制御指定のための制御指定命令と例外を発生させるか否かの例外制御実行のための制御実行命令とを実行して例外を制御する例外制御部を含む。例外制御部は、レジスタと、制御指定命令を実行して、レジスタに例外の制御指定値を設定する制御指定命令処理部と、制御実行命令を実行して、レジスタに設定された制御指定値が例外を有効にする値か否かを判定し、制御指定値が例外を有効にする値のときは例外を発生させる制御実行命令処理部とを含む。制御実行命令処理部は、レジスタに設定された制御指定値が例外を有効にする値でないときには例外を発生させない。【００２３】
好ましくは、制御指定命令はビットマップインデックス部および制御指定部を有し、レジスタはビットマップレジスタを含み、制御指定命令処理部は、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定する。【００２４】
好ましくは、制御実行命令はビットマップインデックス部を有し、制御実行命令処理部は、当該ビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値のときに、例外を発生させる。【００２５】
好ましくは、レジスタはリターンアドレスレジスタを含み、制御実行命令処理部は、制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定する。【００２６】
好ましくは、制御実行命令はキーコード部を有し、レジスタはキーレジスタを含み、制御実行命令処理部は、当該キーコード部の値を、発生させる例外での使用のため、当該キーレジスタに設定する。【００２７】
好ましくは、レジスタはベクタベースレジスタを含み、制御実行命令処理部は、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプする。【００２８】
好ましくは、制御実行命令処理部は、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値でないときには、例外を発生させない。
【発明の効果】
【００２９】
本発明により、発生させたりさせなかったりソフトウエア的に制御できる例外が実現され、例外をプログラム制御する方法、システムおよびコンピュータプログラムが提供される。特に、柔軟に、即ちプログラムで設定した箇所で例外の発生を制御して、ＣＰＵによる不要な処理動作を抑え、ＣＰＵの処理効率を向上させることができる。
【図面の簡単な説明】
【００３０】
【図１】従来技術によるごく稀にしか成立しない条件の条件分岐命令を例示するプログラムの概略図である。
【図２】本発明の１実施形態においてソフトウエア制御可能な例外実現のため新たに設けられる２種類のＣＰＵ命令および当該ＣＰＵ命令にインデックスされるビットマップレジスタ並びに各例外に対応する３種類のレジスタの概略構成図である。
【図３】本発明の１実施形態に係る例外プログラム制御システムを有するプロセッサを概略的に示すブロック図である。
【図４】本発明の１実施形態に係る例外プログラム制御方法を概略的に示すフローチャート図である。
【図５】本発明の１実施形態に係る例外プログラム制御方法を実施するために作成されるプログラム例の概略図である。
【図６】本発明の１実施形態に係る例外プログラム制御方法を実施するために作成される別のプログラム例の概略図である。
【図７】本発明の１実施形態に係る例外プログラム制御方法を実施するために作成されるさらに別のプログラム例の概略図である。
【図８】本発明の１実施形態に係る例外プログラム制御方法を実施するために作成されるさらに別のプログラム例の概略図である。
【発明を実施するための形態】
【００３１】
以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明は多くの異なる態様で実施することが可能であり、記載された実施形態の内容に限定して解釈されるべきではない。なお、実施形態の説明の全体を通じて同じ構成部分乃至構成要素には同じ番号を付している。
【００３２】
まず、図２に、本発明の１実施形態においてソフトウエア制御可能な例外実現のため新たに設けられる２種類のＣＰＵ命令および当該ＣＰＵ命令にインデックスされるビットマップレジスタ並びに各例外に対応する３種類のレジスタの概略構成を示す。２種類のＣＰＵ命令のうち、一方のexpen命令と示された制御指定命令１１は、例外を有効にしたりしなかったり（無効にしたり）する、即ち例外の制御を指定するために設けられる。もう一方のexpc命令と示された制御実行命令１２は、例外の有効・無効の条件に応じて例外を発生させたりさせなかったりする、即ち例外の制御を実行するために設けられる。ＢＭレジスタと示されたビットマップレジスタ２０は、２種類のＣＰＵ命令にインデックスされて例外発生の条件を規定するために設けられる。
【００３３】
３種類のレジスタのうち、ＶＥＣレジスタと示された複数のベクタベースレジスタ２１は、それぞれ、２種類のＣＰＵ命令によって発生される例外を処理する例外ハンドラのアドレスａｄｄｒを保持し、ＣＰＵによる例外ハンドラの起動をサポートする。ＲＥＴレジスタと示されたリターンアドレスレジスタ２２は、それぞれ、その例外が発生したＣＰＵ命令の次のリターンアドレスｒａｄｄｒを保持し、ＣＰＵによる例外処理からの復帰をサポートする。ＫＥＹレジスタと示されたキーレジスタ２３は、それぞれ、その例外が発生した時にプログラム指定した値ｋｃ、例えばexpc命令のＫＣの値を保持し、ＣＰＵによる例外処理での使用をサポートする。ＶＥＣレジスタ２１は、２種類のＣＰＵ命令で処理する例外の数に対応した数分が設けられる。図２では、ＶＥＣレジスタ２１は、２５６個設けられている。一方、２種類のＣＰＵ命令に対応できれば良いＲＥＴレジスタ２２およびＫＥＹレジスタ２３は、それぞれ１個設けられている。
【００３４】
制御指定命令１１は、３２ビット構成で示されているが、３２ビット構成に限定されない。ビット０〜５のＯＰと記されたオペコード部は、このＣＰＵ命令が例外を有効にしたりしなかったり（無効にしたり）、例外の制御を指定する命令であることを示す。ビット８〜１５のＢＭと記されたビットマップインデックス部は、８ビットで表せる２５６通りのそれぞれについて例外を発生させるかどうかを判定するために設けられる２５６ビットのＢＭレジスタ２０へのインデックスを示す。例えば、ＢＭのビット８〜１５がすべて０であればＢＭレジスタ２０の最初の１ビット目を指し、ＢＭのビット８〜１５がすべて１であればＢＭレジスタ２０の最後の２５６ビット目を指す。ビット３１のＥＮと記された制御指定部は、例外を有効にしたりしなかったり（無効にしたり）する、即ち、ＥＮが１のときは例外を有効にし、ＥＮが０のときは例外を有効にしない（無効にする）値を示す。もちろん、ＥＮが０のときに例外を有効にし、ＥＮが１のときに例外を有効にしない（無効にする）ように、ＥＮの値を反対にすることもできる。このＥＮの値は、ＢＭで指定される値に対応付けられる、即ちインデックスされるＢＭレジスタ２０のビットに設定される。例えば、この命令の実行例であるexpen 20, 1は、ＢＭ＝２０およびＥＮ＝１であるので、ＢＭレジスタ２０の２１ビット目に例外を有効にするＥＮ＝１をセットする。
【００３５】
制御実行命令１２も、３２ビット構成で示されているが、３２ビット構成に限定されない。ビット０〜５のＯＰと記されたオペコード部は、このＣＰＵ命令が例外を発生させたりさせなかったり、例外の制御を実行する命令であることを示す。ビット８〜１５のＢＭと記されたビットマップインデックス部は、制御指定命令１１と同様に、８ビットで表せる２５６通りのそれぞれについて例外を発生させるかどうかを判定するために設けられている２５６ビットのＢＭレジスタ２０へのインデックスを示す。ＢＭレジスタ２０のインデックスされたビットにＥＮ＝１が制御指定命令１１のexpen命令によりセットされて例外を発生させるときには、ＢＭレジスタ２０におけるそのインデックスされたビットに対応付けられたＶＥＣレジスタ２１のアドレスａｄｄｒが参照され、そこに指定される例外ハンドラのアドレスａｄｄｒにジャンプして例外処理が実行される。また、例外処理からの復帰のために、この命令の次のアドレスが、リターンアドレスｒａｄｄｒとして、ＲＥＴレジスタ２２にセットされる。ビット１６〜３１のＫＣと記されたキーコード部は、プログラムでセットして使用するデータフィールドであり、ＫＣの値は、ＫＥＹレジスタ２３に保存される。
【００３６】
例えば、この命令の実行例であるexpc 20, 512は、ＢＭ＝２０およびＫＣ＝５１２であるので、ＢＭレジスタ２０の２１ビット目を参照する。そこがＥＮ＝０になっていれば何もしない。そこがＥＮ＝１になっていれば例外を発生する。特に、例外ハンドラへ実行を移すために、２１番目のＶＥＣレジスタ２１が指定する例外ハンドラのアドレスａｄｄｒにジャンプする。また、ＲＥＴレジスタ２２にこのexpc命令の次のアドレス、即ちリターンアドレスｒａｄｄｒをセットする。さらに、ＫＥＹレジスタ２３のビット１６〜３１に５１２をｋｃ値としてセットする。指定された例外ハンドラではｋｃの値５１２に応じた処理を行う。ｋｃの値はプログラムで自由に設定できるので、例外を発生させたりさせなかったりするばかりでなく、例外ハンドラの処理自体も柔軟に制御することができる。例外ハンドラによる処理が完了すると、ＣＰＵアーキテクチャが提供する例外から復帰するためのＣＰＵ命令を用いて、ＲＥＴレジスタ２２に保存されたリターンアドレスｒａｄｄｒを参照することにより、例外発生直後の処理に戻ることができる。
【００３７】
図３は、本発明の１実施形態に係る例外プログラム制御システムを有するプロセッサ１００を概略的に示すブロック図である。プロセッサ１００は、キャッシュ１１０およびＭＭＵ（Memory Management Unit：メモリ管理ユニット）１２０を有し、ＭＭＵ１２０はＴＬＢ１２５を備える。プロセッサ１００には、分岐処理のための分岐処理部１３０および命令格納のための命令キュー１４０の外に、新たに例外をプログラム制御する例外制御部１３５が提供される。例外制御部１３５は、ＢＭレジスタ２０、ＶＥＣレジスタ２１、ＲＥＴレジスタ２２およびＫＥＹレジスタ２３を含むレジスタに加えて、プログラムに設けられる制御指定命令１１を処理する制御指定命令処理部３０および同じくプログラムに設けられる制御実行命令１２を処理する制御実行命令処理部４０を含む。
【００３８】
制御指定命令処理部３０はＢＭ処理部３１およびＥＮ処理部３２を有する。ＢＭ処理部３１は、制御指定命令１１よりＢＭで指定される値を取得し、その値に対応付けられる、即ちインデックスされるＢＭレジスタ２０のビットを特定する。ＥＮ処理部３２は、制御指定命令１１よりＥＮで指定される値を取得し、その値をＢＭ処理部３１により特定されるＢＭレジスタ２０のビットに設定する。
【００３９】
制御実行命令処理部４０はＢＭ処理部４１、ＥＮ判定部４２およびＫＣ処理部４３を有する。ＢＭ処理部４１は、制御実行命令１２のＢＭで指定される値を取得し、その値に対応付けられる、即ちインデックスされるＢＭレジスタ２０のビットを特定する。ＥＮ判定部４２は、ＢＭ処理部４１により特定されるＢＭレジスタ２０のビットに設定されているＥＮの値を判定し、ＥＮが例外を有効にしない（無効にする）０であるときには、制御実行命令処理部４０は処理を終了する。したがって、例外処理は実行されず、命令キュー１４０から制御実行命令１２が取り除かれる。ＥＮが例外を有効にする１であるときには、制御実行命令処理部４０は、ＢＭ処理部４１により特定されるＢＭレジスタ２０のビットに対応付けられたＶＥＣレジスタ２１のアドレスａｄｄｒを参照し、分岐処理部１３０によりそのアドレスａｄｄｒの例外ハンドラにジャンプして例外処理が実行される。また、制御実行命令処理部４０は、例外処理からの復帰のために、制御実行命令１２のアドレスに例えば３２ビットのＲＩＳＣ  ＣＰＵでは４を加算した次のアドレスをリターンアドレスｒａｄｄｒとして、ＲＥＴレジスタ２２にセットする。例外処理から復帰するときに、そのリターンアドレスｒａｄｄｒを例外制御部１３５は分岐処理部１３０へ提供する。さらに、制御実行命令処理部４０では、ＫＣ処理部４３が、制御実行命令１２のＫＣの値をＫＥＹレジスタ２３に保存する。ＫＥＹレジスタ２３に保存したｋｃの値を例外制御部１３５は例外ハンドラに提供して、例外ハンドラではｋｃの値に応じた処理が行われる。
【００４０】
図４は、本発明の１実施形態に係る例外プログラム制御方法を概略的に示すフローチャート（２００）図である。この方法は、図３に示されたような例外がソフトウエアにより制御されるプロセッサ１００で実施できる。プロセッサ１００において、制御指定命令１１が命令キュー１４０に提供されると開始する（ステップ２０１）。プロセッサ１００は、制御指定命令１１よりＢＭおよびＥＮを取得し（ステップ２０２）、ＢＭで特定されるＢＭレジスタ２０のビットにＥＮの値を設定し（ステップ２０３）、終了する（ステップ２０４）。また、プロセッサ１００において、制御実行命令１２が命令キュー１４０に提供されると開始する（ステップ２０５）。プロセッサ１００は、制御実行命令１２よりＢＭおよびＫＣを取得し（ステップ２０６）、ＢＭで特定されるＢＭレジスタ２０のビットにあるＥＮの値が１か否かを判定する（ステップ２０７）。判定が「いいえ」の場合、即ち、そのＥＮの値が１でないとき、制御実行命令１２は実行されず、命令キュー１４０の中で破棄される（ステップ２０８）。判定が「はい」の場合、即ち、そのＥＮの値が１のとき、プロセッサ１００は、制御実行命令１２のアドレスに例えば３２ビットのＲＩＳＣ  ＣＰＵでは４を加算した次のアドレスをリターンアドレスｒａｄｄｒとして、ＲＥＴレジスタ２２にセットする（ステップ２０９）。また、プロセッサ１００は、ＫＣをＫＥＹレジスタ２３にｋｃとしてセットする（ステップ２１０）。さらに、プロセッサ１００は、ＢＭで特定されるＢＭレジスタ２０のビットに対応付けられたＶＥＣレジスタ２１のアドレスａｄｄｒを参照し、分岐処理部１３０によりそのアドレスａｄｄｒの例外ハンドラにジャンプする、即ち実行を移す（ステップ２１１）。
【００４１】
図５は、本発明の１実施形態に係る例外プログラム制御方法を実施するために作成される１例のプログラム５０を概略的に示す。プログラム５０には制御実行命令１２のexpc命令が設けてある。expc命令は、制御指定命令１１のexpen命令により例外を有効にする指定がされているときには、例外を処理する例外ハンドラへ実行が移り、例外ハンドラにより例外が処理されると、expc命令の次へ実行が戻る。しかし、expc命令は、制御指定命令１１のexpen命令により例外を有効にしない（無効にする）指定がされているときには、何もせずに通過され、その次の命令に実行が進む。
【００４２】
図６は、本発明の１実施形態に係る例外プログラム制御方法を実施するために作成される別例のプログラム６０を概略的に示す。プログラム６０は図１に示したプログラムに対応している。タスクＢでのｉｆ文は不要になり、初期状態では初期化されていないため（未初期化）、制御指定命令１１のexpen 20, 1命令により例外を有効にして初期化する関数が初めに呼び出されている。右側に示されたアセンブラ言語レベルでは、制御実行命令１２のexpc 20, 512命令が設けてあり、この命令はほとんどの場合はＣＰＵサイクルを消費することなく命令キューの中で破棄され、稀に例外が有効の時にだけ例外ハンドラにジャンプする命令として実行される。expc 20, 512命令の２番目のオペランド512は呼び出し側がどういう条件あるいは目的で例外を発生させたのかを呼び出された側のプログラムで識別するために使用される。ここでは関数番号512の指定のために使われ、初期化関数init()が呼び出される。例外ハンドラにおいて、その初期化関数の後方には、初期化されたため（初期化済）、制御指定命令１１のexpen 20,0命令により例外を無効にする指定がされている。このように、従来技術における確認処理のためのコードを実行することなく、リセット状態の時だけ例外割り込みを発生して初期化処理を行わせることができる。
【００４３】
図７は、本発明の１実施形態に係る例外プログラム制御方法を実施するために作成されるさらに別例のプログラム７０を概略的に示す。これは必要になった時にメモリを割り当てるデマンドページングを一般化して任意のソフトウエアオブジェクトの割り当てを行う例である。左側の従来技術では、ページが存在しない領域にＣＰＵがアクセスしようとするとページフォールトが起きて例外処理の中でメモリが割り当てられる。プログラム７０では、start:の直後に制御実行命令１２のexpc 1, 0命令が設けてあり、初回の実行で例外を発生させて、必要なオブジェクト、例えばメモリヒープの実体化と初期化を行う。その後、2回目のexpc命令による例外の呼び出しでは、既にメモリヒープは実体化されている（制御指定命令１１のexpen命令で例外を無効にされる）ので、例外は発生しない。この例はメモリヒープについてであるが、メモリだけでなく、任意のソフトウエアリソース、例えば、セマフォ、ミューテックスなどの同期オブジェクトなどの割り当てと初期化も必要に応じて行うことができるようになる。
【００４４】
図８は、本発明の１実施形態に係る例外プログラム制御方法を実施するために作成されるさらに別例のプログラム８０を概略的に示す。これは不正なコード実行からコードを守るコード保護の仕組みを一般化した例である。左側の従来技術では、非特権モードの時に特権モードのコードを実行するアクセス違反に対して例外割り込みが起きるが、これはメモリのページ単位でコードを守ることしかできない。プログラム８０では、制御実行命令１２を必要な箇所に設けてピンポイントで例外を発生させることができ、コードの一部をある条件を満たす時の保護領域となし得る、即ち、任意のコード単位で不正な実行に対する例外処理を行える。ただし、従来技術と等価にするにはexpen命令およびＢＭレジスタを拡張して特権モードと非特権モードに関連付けて状態を別個に保持したり、リード可能かどうかなどの属性を必要であれば別途レジスタなどで保持する必要がある。本発明の場合は、プログラムで任意の条件をアクセス違反と定義して例外の発生を有効にしたり無効にしたりして使用することを想定している。プログラム８０では、プログラム実行パスの先頭に制御実行命令１２のexpc 3, 0命令を設けることにより、指定のコード領域（cond==Bの時）を例外発生領域にしている。制御指定命令１１のexpen 3, 1で例外を有効にすることにより、制御実行命令１２のexpc 3, xを含むコード領域はすべて一斉に例外の発生領域となる。
【００４５】
その他にも、本発明の１実施形態に係る例外プログラム制御方法を様々に実施することができる。例えば、デバッグ目的でプログラムの実行をトレースする場合である。プログラムのトレースしたい場所に、制御実行命令１２のexpc命令を設けておき、例外ハンドラにログ用のコードを記述する。そして、トレースを開始したい時に、制御指定命令１１のexpen命令で例外を有効にし、設けておいたexpc命令によりプログラムの実行がトレースされる。また、プロセス間通信の手段として用いる例の場合には、受信側のタスクにexpc命令を設けておき、送信側でexpen命令を実行する。その実行で設けておいたexpc命令が例外ハンドラを起動することにより、受信側はメッセージが送られたことを知る。さらに、システムコールの応用例として、条件が成立する場合だけ実行を行うシステムコールを実現できる。例えば、オープン（open）状態にある場合にだけシステムコールを実行するようなリード（read）システムコールを本発明を用いて作成することができる。プログラム次第で様々な応用が可能である。
【００４６】
プログラムに設けられる制御指定命令１１のexpen命令および制御実行命令１２のexpc命令については、例外が発生しない場合にexpc命令はexpen命令以外に他のＣＰＵ命令とはレジスタファイルを介して依存関係を持つことはないので、命令パイプラインの中で実行ステージに到達する前に命令キューからexpc命令を削除しても良い。その場合、expc命令を設けなかった場合と比較して、余分なＣＰＵサイクルを消費することなくＣＰＵ命令を実行可能である。条件分岐命令の場合には、条件レジスタを更新する命令の実行が完了するまで、分岐するかどうかの判断はできない。一方、expc命令はそのようなレジスタとの依存関係はないので、expen命令が直前にない場合、例外を発生するかどうかは、命令キューに読み込まれてすぐに判断できる。
【００４７】
このように、条件分岐命令と比較した場合、分岐判定のための前処理が不要なため、例外が発生しない場合、制御実行命令１２のexpc命令は高速に処理される。例外が発生する場合、コンテキストの同期処理が伴うため低速な処理になるかも知れない。そこで、高速な処理が必要な場合は、コンテキストの同期処理を行わず、例外が発生した位置にも戻らないように、つまり無条件分岐命令と同じ動作をするようにしても良い。上記の例の場合には２５６通りであるが、多数の例外処理を扱えるので、あるものはコンテキストの同期処理を必要とするものとして、また、あるものは高速に分岐処理を行うものとして、それぞれ割り当てることができる。
【００４８】
以上、実施態様を用いて本発明の説明をしたが、本発明の技術的範囲は実施態様について記載した範囲には限定されない。実施態様に種々の変更又は改良を加えることが可能であり、そのような変更又は改良を加えた態様も当然に本発明の技術的範囲に含まれる。
【図１】
2012086288.tif 000003
【図２】
2012086288.tif 000004
【図３】
2012086288.tif 000005
【図４】
2012086288.tif 000006
【図５】
2012086288.tif 000007
【図６】
2012086288.tif 000008
【図７】
2012086288.tif 000009
【図８】
2012086288.tif 000010
【手続補正書】
【提出日】平成26年2月18日(2014.2.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
例外をプログラム制御する方法であって、プロセッサが、
例外を有効にするか否かの例外制御指定のための制御指定命令を実行して、レジスタに前記例外の制御指定値を設定するステップと、
例外を発生させるか否かの例外制御実行のための制御実行命令を実行して、前記レジスタに設定された前記制御指定値が前記例外を有効にする値か否かを判定し、当該制御指定値が前記例外を有効にする値のときは前記例外を発生させるステップと、
を実行することを含み、
前記制御指定命令はビットマップインデックス部および制御指定部を有し、前記レジスタはビットマップレジスタを備え、前記制御指定値を設定するステップは、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定するステップを実行することを含み、
前記制御実行命令はビットマップインデックス部を有し、前記例外を発生させるステップは、当該ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値のときに、前記例外を発生させるステップを実行することを含む、
例外プログラム制御方法。
【請求項２】
前記ビットマップレジスタのビットに設定された前記制御指定値が前記例外を有効にする値でないときには前記例外を発生させないステップを実行することを含む、請求項１に記載の方法。
【請求項３】
前記レジスタはリターンアドレスレジスタを備え、前記例外を発生させるステップは、前記制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定するステップを実行することを含む、請求項１または２に記載の方法。
【請求項４】
前記制御実行命令はキーコード部を有し、前記レジスタはキーレジスタを備え、前記例外を発生させるステップは、当該キーコード部の値を、当該発生させる前記例外での使用のため、当該キーレジスタに設定するステップを実行することを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記レジスタはベクタベースレジスタを備え、前記例外を発生させるステップは、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプするステップを実行することを含む、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記例外を発生させないステップは、前記制御実行命令を命令キューの中で破棄するステップを実行することを含む、請求項２に記載の方法。
【請求項７】
プロセッサに、請求項１〜６のいずれか１項に記載の方法の各ステップを実行させる例外プログラム制御のためのコンピュータプログラム。
【請求項８】
例外をプログラム制御するシステムであって、
プロセッサが、例外を有効にするか否かの例外制御指定のための制御指定命令と例外を発生させるか否かの例外制御実行のための制御実行命令とを実行して例外を制御する例外制御部を含み、
当該例外制御部が、
レジスタと、
前記制御指定命令を実行して、前記レジスタに前記例外の制御指定値を設定する制御指定命令処理部と、
前記制御実行命令を実行して、前記レジスタに設定された前記制御指定値が前記例外を有効にする値か否かを判定し、当該制御指定値が前記例外を有効にする値のときは前記例外を発生させる制御実行命令処理部とを含み、
前記制御指定命令はビットマップインデックス部および制御指定部を有し、前記レジスタはビットマップレジスタを含み、前記制御指定命令処理部は、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定し、
前記制御実行命令はビットマップインデックス部を有し、前記制御実行命令処理部は、当該ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値のときに、前記例外を発生させる、
例外プログラム制御システム。
【請求項９】
前記制御実行命令処理部は、前記ビットマップレジスタのビットに設定された前記制御指定値が前記例外を有効にする値でないときには前記例外を発生させない、請求項８に記載のシステム。
【請求項１０】
前記レジスタはリターンアドレスレジスタを含み、前記制御実行命令処理部は、前記制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定する、請求項８または９に記載のシステム。
【請求項１１】
前記制御実行命令はキーコード部を有し、前記レジスタはキーレジスタを含み、前記制御実行命令処理部は、当該キーコード部の値を、発生させる前記例外での使用のため、当該キーレジスタに設定する、請求項８〜１０のいずれか１項に記載のシステム。
【請求項１２】
前記レジスタはベクタベースレジスタを含み、前記制御実行命令処理部は、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプする、請求項８〜１１のいずれか１項に記載のシステム。
【国際調査報告】
2012086288.tif 000011
2012086288.tif 000012