JP5822848B2 - 例外の制御方法、システムおよびプログラム - Google Patents
例外の制御方法、システムおよびプログラム Download PDFInfo
- Publication number
- JP5822848B2 JP5822848B2 JP2012549670A JP2012549670A JP5822848B2 JP 5822848 B2 JP5822848 B2 JP 5822848B2 JP 2012549670 A JP2012549670 A JP 2012549670A JP 2012549670 A JP2012549670 A JP 2012549670A JP 5822848 B2 JP5822848 B2 JP 5822848B2
- Authority
- JP
- Japan
- Prior art keywords
- exception
- control
- register
- value
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/481—Exception handling
Description
本発明は、例外の制御に関し、特に、例外をプログラム制御する方法、システムおよびコンピュータプログラムに関する。
現在のCPUでは、CPU命令の実行に際して、ハードウエア的なエラーが生じたりアクセス違反などが生じたりした場合には、CPU例外が起きるようになっている。CPU例外が起きると、割り込みが発生し、指定されたアドレスの例外処理コードを実行するようになっている。例外処理が完了すると、例外が起きたCPU命令の位置に戻って実行を再開する。ただし、致命的なエラーや特殊な場合は、例外が起きた位置に戻らないこともある。
CPU例外の種類としては、実行時エラー、TLB(Translation Look-aside Buffer:変換索引バッファ)ミス、タイマー割り込みなど様々なものが考えられるが、いずれも用途や例外の発生条件があらかじめ決まっていて、ソフトウエア的に柔軟に条件を変える、即ち、プログラム制御することはできない。即ち、ほとんどの例外はプログラマが指定した位置で意図的に発生するようにはなっていない。
非特権モードのコードから特権モードのコードを呼び出すために使用されるシステムコールや、例えば、2つのレジスタの値の比較によって例外を発生させるかどうかを判定するPowerPC(PowerPCはIBM社の登録商標)のトラップ命令(tw命令)は、指定した位置で例外を起こせる。しかしながら、システムコールの場合は、それによって必ず例外が発生し、例外を無効にすることはできないし、前記のトラップ命令の場合は、実行前に2つのレジスタの値を取得する処理と実行時のレジスタの比較判定処理が必要である。
その他には、CPU命令として条件分岐命令がある。これは、分岐命令を呼び出す前に判定対象となる状態をレジスタの値として反映させておく。そして、その値により分岐するかどうかが決まる。したがって、条件分岐命令は前もって揮発性のレジスタに対する操作が必要であり、かつ、たとえ分岐しなくても条件分岐命令自体は必ず実行されるようになっている。
コンピュータプログラムにおいては、ある条件を満たす時にだけ特別な処理をさせたいことが良くあるが、その場合、通常は条件分岐命令を使用する。即ち、CPU命令で何らかの操作を行ってレジスタの値を更新し、その値に応じて条件分岐命令で処理コードにジャンプするという手順を踏む。しかし、ごく稀にしか成立しない条件を毎回ソフトウエア的に確認するのは効率が悪い。
図1に、従来技術によるごく稀にしか成立しない条件の条件分岐命令10を例示する。タスクAでは、初回とreset()後のfunc()呼び出し時だけのごく稀に初期化関数init()の呼び出しが必要であり、init()はタスクBと同じプロセス空間からしか呼べないとする。このように、ある処理を行う前にリセット状態かどうかを確認して、そうであれば初期化処理をしなければならないが、リセット状態であることがほとんど無いとすると、この確認処理のために費やす時間は毎回無駄になる。特に、タスクBでのリセット状態かどうかを判定する処理を右側に示されたアセンブラ言語レベルで見ると、ちょっとした判定にも、メモリアクセスが発生したりして結構時間を消費することが分かる。例えば、rst_f変数が構造体メンバのポインタ変数が指すアドレス先の変数であったり、即ちメモリを何度も参照したり、条件式がif (A or B or C...)のようにandやorで繋がっていると、消費する時間はさらに長くなる。
特許文献1には、「CALL」その他の命令語により指示される例外処理手続きへその処理を移行する例外処理の制御方式において、例外処理ハンドラ登録手段により登録された例外処理ハンドラ登録リストを走査して、例外条件識別名に対応する例外処理ハンドラに直接例外処理の制御を移行することにより、例外処理への伝播を早めて例外処理を高速化することが、記載されている。
特許文献2には、命令メモリ以外の領域に割り込み要因ごとに割り込みアドレスを設定するアドレス設定手段と、割り込み検出回路により検出された要因を選択信号として、アドレス設定手段の出力をプログラム・カウンタに入力するマルチプレクサとを設けることにより、分岐命令に要するプログラム・メモリの消費を抑制し、またプログラム・メモリの無効空間を削除して、プログラム・メモリの効率化を図り、かつ割り込み処理時間を短縮することができるマイクロ・プロセッサが、記載されている。
特許文献3には、通常処理プログラムおよび複数の例外処理ハンドラのプログラムと共に、各例外処理ハンドラが選択されて実行する必要のある通常処理プログラムの実行状態と例外状況を予めコード化して例外処理ハンドラ毎に用意し、各例外処理ハンドラと結合してプログラムコード中の情報として付加しておき、例外検出時に、例外検出時の通常プログラムの実行状態と各例外処理ハンドラに付加された通常処理プログラムの実行状態の情報とを比較することにより、例外処理ハンドラを選択し、実行制御を行うことで、例外処理ハンドラの有無が通常処理プログラムの処理量に影響を与えない例外処理機構が、記載されている。
これまでは、予め設定されれば、例外は必ず発生し、条件分岐命令自体は必ず実行されるようになっている。即ち、例外を発生させたりさせなかったり、また、条件分岐命令自体を実行させたりさせなかったりする、ソフトウエア的にそれらを制御することはなされておらず、実際には必要のない処理動作もプログラムにより行われている。
本発明は、ソフトウエア的に制御できる例外の実現を目的とする。本発明の目的には、例外をプログラム制御する方法、システムおよびコンピュータプログラムを提供することが含まれる。
本発明による1実施態様の例外プログラム制御方法は、プロセッサが次のステップを実行することを含む。即ち、例外を有効にするか否かの例外制御指定のための制御指定命令を実行して、レジスタに例外の制御指定値を設定するステップと、例外を発生させるか否かの例外制御実行のための制御実行命令を実行して、レジスタに設定された制御指定値が例外を有効にする値か否かを判定し、制御指定値が例外を有効にする値のときは例外を発生させるステップである。また、レジスタに設定された制御指定値が例外を有効にする値でないときには例外を発生させないステップを実行することを含む。
好ましくは、制御指定命令はビットマップインデックス部および制御指定部を有し、レジスタはビットマップレジスタを備え、制御指定値を設定するステップは、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定するステップを実行することを含む。
好ましくは、制御実行命令はビットマップインデックス部を有し、例外を発生させるステップは、当該ビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値のときに、例外を発生させるステップを実行することを含む。
好ましくは、レジスタはリターンアドレスレジスタを備え、例外を発生させるステップは、制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定するステップを実行することを含む。
好ましくは、制御実行命令はキーコード部を有し、レジスタはキーレジスタを備え、例外を発生させるステップは、当該キーコード部の値を、発生させる例外での使用のため、当該キーレジスタに設定するステップを実行することを含む。
好ましくは、レジスタはベクタベースレジスタを備え、例外を発生させるステップは、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプするステップを実行することを含む。
好ましくは、例外を発生させないステップは、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値でないときには、例外を発生させないステップを実行することを含む。また、例外を発生させないステップは、制御実行命令を命令キューの中で破棄するステップを実行することを含む。
本発明の1実施態様により、プロセッサに上記方法の各ステップを実行させる例外プログラム制御のためのコンピュータプログラムが提供される。
本発明による1実施態様の例外プログラム制御システムでは、プロセッサは、例外を有効にするか否かの例外制御指定のための制御指定命令と例外を発生させるか否かの例外制御実行のための制御実行命令とを実行して例外を制御する例外制御部を含む。例外制御部は、レジスタと、制御指定命令を実行して、レジスタに例外の制御指定値を設定する制御指定命令処理部と、制御実行命令を実行して、レジスタに設定された制御指定値が例外を有効にする値か否かを判定し、制御指定値が例外を有効にする値のときは例外を発生させる制御実行命令処理部とを含む。制御実行命令処理部は、レジスタに設定された制御指定値が例外を有効にする値でないときには例外を発生させない。
好ましくは、制御指定命令はビットマップインデックス部および制御指定部を有し、レジスタはビットマップレジスタを含み、制御指定命令処理部は、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定する。
好ましくは、制御実行命令はビットマップインデックス部を有し、制御実行命令処理部は、当該ビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値のときに、例外を発生させる。
好ましくは、レジスタはリターンアドレスレジスタを含み、制御実行命令処理部は、制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定する。
好ましくは、制御実行命令はキーコード部を有し、レジスタはキーレジスタを含み、制御実行命令処理部は、当該キーコード部の値を、発生させる例外での使用のため、当該キーレジスタに設定する。
好ましくは、レジスタはベクタベースレジスタを含み、制御実行命令処理部は、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプする。
好ましくは、制御実行命令処理部は、制御実行命令のビットマップインデックス部の値で特定されるビットマップレジスタのビットに設定された制御指定部の値が例外を有効にする値でないときには、例外を発生させない。
本発明により、発生させたりさせなかったりソフトウエア的に制御できる例外が実現され、例外をプログラム制御する方法、システムおよびコンピュータプログラムが提供される。特に、柔軟に、即ちプログラムで設定した箇所で例外の発生を制御して、CPUによる不要な処理動作を抑え、CPUの処理効率を向上させることができる。
以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明は多くの異なる態様で実施することが可能であり、記載された実施形態の内容に限定して解釈されるべきではない。なお、実施形態の説明の全体を通じて同じ構成部分乃至構成要素には同じ番号を付している。
まず、図2に、本発明の1実施形態においてソフトウエア制御可能な例外実現のため新たに設けられる2種類のCPU命令および当該CPU命令にインデックスされるビットマップレジスタ並びに各例外に対応する3種類のレジスタの概略構成を示す。2種類のCPU命令のうち、一方のexpen命令と示された制御指定命令11は、例外を有効にしたりしなかったり(無効にしたり)する、即ち例外の制御を指定するために設けられる。もう一方のexpc命令と示された制御実行命令12は、例外の有効・無効の条件に応じて例外を発生させたりさせなかったりする、即ち例外の制御を実行するために設けられる。BMレジスタと示されたビットマップレジスタ20は、2種類のCPU命令にインデックスされて例外発生の条件を規定するために設けられる。
3種類のレジスタのうち、VECレジスタと示された複数のベクタベースレジスタ21は、それぞれ、2種類のCPU命令によって発生される例外を処理する例外ハンドラのアドレスaddrを保持し、CPUによる例外ハンドラの起動をサポートする。RETレジスタと示されたリターンアドレスレジスタ22は、それぞれ、その例外が発生したCPU命令の次のリターンアドレスraddrを保持し、CPUによる例外処理からの復帰をサポートする。KEYレジスタと示されたキーレジスタ23は、それぞれ、その例外が発生した時にプログラム指定した値kc、例えばexpc命令のKCの値を保持し、CPUによる例外処理での使用をサポートする。VECレジスタ21は、2種類のCPU命令で処理する例外の数に対応した数分が設けられる。図2では、VECレジスタ21は、256個設けられている。一方、2種類のCPU命令に対応できれば良いRETレジスタ22およびKEYレジスタ23は、それぞれ1個設けられている。
制御指定命令11は、32ビット構成で示されているが、32ビット構成に限定されない。ビット0〜5のOPと記されたオペコード部は、このCPU命令が例外を有効にしたりしなかったり(無効にしたり)、例外の制御を指定する命令であることを示す。ビット8〜15のBMと記されたビットマップインデックス部は、8ビットで表せる256通りのそれぞれについて例外を発生させるかどうかを判定するために設けられる256ビットのBMレジスタ20へのインデックスを示す。例えば、BMのビット8〜15がすべて0であればBMレジスタ20の最初の1ビット目を指し、BMのビット8〜15がすべて1であればBMレジスタ20の最後の256ビット目を指す。ビット31のENと記された制御指定部は、例外を有効にしたりしなかったり(無効にしたり)する、即ち、ENが1のときは例外を有効にし、ENが0のときは例外を有効にしない(無効にする)値を示す。もちろん、ENが0のときに例外を有効にし、ENが1のときに例外を有効にしない(無効にする)ように、ENの値を反対にすることもできる。このENの値は、BMで指定される値に対応付けられる、即ちインデックスされるBMレジスタ20のビットに設定される。例えば、この命令の実行例であるexpen 20, 1は、BM=20およびEN=1であるので、BMレジスタ20の21ビット目に例外を有効にするEN=1をセットする。
制御実行命令12も、32ビット構成で示されているが、32ビット構成に限定されない。ビット0〜5のOPと記されたオペコード部は、このCPU命令が例外を発生させたりさせなかったり、例外の制御を実行する命令であることを示す。ビット8〜15のBMと記されたビットマップインデックス部は、制御指定命令11と同様に、8ビットで表せる256通りのそれぞれについて例外を発生させるかどうかを判定するために設けられている256ビットのBMレジスタ20へのインデックスを示す。BMレジスタ20のインデックスされたビットにEN=1が制御指定命令11のexpen命令によりセットされて例外を発生させるときには、BMレジスタ20におけるそのインデックスされたビットに対応付けられたVECレジスタ21のアドレスaddrが参照され、そこに指定される例外ハンドラのアドレスaddrにジャンプして例外処理が実行される。また、例外処理からの復帰のために、この命令の次のアドレスが、リターンアドレスraddrとして、RETレジスタ22にセットされる。ビット16〜31のKCと記されたキーコード部は、プログラムでセットして使用するデータフィールドであり、KCの値は、KEYレジスタ23に保存される。
例えば、この命令の実行例であるexpc 20, 512は、BM=20およびKC=512であるので、BMレジスタ20の21ビット目を参照する。そこがEN=0になっていれば何もしない。そこがEN=1になっていれば例外を発生する。特に、例外ハンドラへ実行を移すために、21番目のVECレジスタ21が指定する例外ハンドラのアドレスaddrにジャンプする。また、RETレジスタ22にこのexpc命令の次のアドレス、即ちリターンアドレスraddrをセットする。さらに、KEYレジスタ23のビット16〜31に512をkc値としてセットする。指定された例外ハンドラではkcの値512に応じた処理を行う。kcの値はプログラムで自由に設定できるので、例外を発生させたりさせなかったりするばかりでなく、例外ハンドラの処理自体も柔軟に制御することができる。例外ハンドラによる処理が完了すると、CPUアーキテクチャが提供する例外から復帰するためのCPU命令を用いて、RETレジスタ22に保存されたリターンアドレスraddrを参照することにより、例外発生直後の処理に戻ることができる。
図3は、本発明の1実施形態に係る例外プログラム制御システムを有するプロセッサ100を概略的に示すブロック図である。プロセッサ100は、キャッシュ110およびMMU(Memory Management Unit:メモリ管理ユニット)120を有し、MMU120はTLB125を備える。プロセッサ100には、分岐処理のための分岐処理部130および命令格納のための命令キュー140の外に、新たに例外をプログラム制御する例外制御部135が提供される。例外制御部135は、BMレジスタ20、VECレジスタ21、RETレジスタ22およびKEYレジスタ23を含むレジスタに加えて、プログラムに設けられる制御指定命令11を処理する制御指定命令処理部30および同じくプログラムに設けられる制御実行命令12を処理する制御実行命令処理部40を含む。
制御指定命令処理部30はBM処理部31およびEN処理部32を有する。BM処理部31は、制御指定命令11よりBMで指定される値を取得し、その値に対応付けられる、即ちインデックスされるBMレジスタ20のビットを特定する。EN処理部32は、制御指定命令11よりENで指定される値を取得し、その値をBM処理部31により特定されるBMレジスタ20のビットに設定する。
制御実行命令処理部40はBM処理部41、EN判定部42およびKC処理部43を有する。BM処理部41は、制御実行命令12のBMで指定される値を取得し、その値に対応付けられる、即ちインデックスされるBMレジスタ20のビットを特定する。EN判定部42は、BM処理部41により特定されるBMレジスタ20のビットに設定されているENの値を判定し、ENが例外を有効にしない(無効にする)0であるときには、制御実行命令処理部40は処理を終了する。したがって、例外処理は実行されず、命令キュー140から制御実行命令12が取り除かれる。ENが例外を有効にする1であるときには、制御実行命令処理部40は、BM処理部41により特定されるBMレジスタ20のビットに対応付けられたVECレジスタ21のアドレスaddrを参照し、分岐処理部130によりそのアドレスaddrの例外ハンドラにジャンプして例外処理が実行される。また、制御実行命令処理部40は、例外処理からの復帰のために、制御実行命令12のアドレスに例えば32ビットのRISC CPUでは4を加算した次のアドレスをリターンアドレスraddrとして、RETレジスタ22にセットする。例外処理から復帰するときに、そのリターンアドレスraddrを例外制御部135は分岐処理部130へ提供する。さらに、制御実行命令処理部40では、KC処理部43が、制御実行命令12のKCの値をKEYレジスタ23に保存する。KEYレジスタ23に保存したkcの値を例外制御部135は例外ハンドラに提供して、例外ハンドラではkcの値に応じた処理が行われる。
図4は、本発明の1実施形態に係る例外プログラム制御方法を概略的に示すフローチャート(200)図である。この方法は、図3に示されたような例外がソフトウエアにより制御されるプロセッサ100で実施できる。プロセッサ100において、制御指定命令11が命令キュー140に提供されると開始する(ステップ201)。プロセッサ100は、制御指定命令11よりBMおよびENを取得し(ステップ202)、BMで特定されるBMレジスタ20のビットにENの値を設定し(ステップ203)、終了する(ステップ204)。また、プロセッサ100において、制御実行命令12が命令キュー140に提供されると開始する(ステップ205)。プロセッサ100は、制御実行命令12よりBMおよびKCを取得し(ステップ206)、BMで特定されるBMレジスタ20のビットにあるENの値が1か否かを判定する(ステップ207)。判定が「いいえ」の場合、即ち、そのENの値が1でないとき、制御実行命令12は実行されず、命令キュー140の中で破棄される(ステップ208)。判定が「はい」の場合、即ち、そのENの値が1のとき、プロセッサ100は、制御実行命令12のアドレスに例えば32ビットのRISC CPUでは4を加算した次のアドレスをリターンアドレスraddrとして、RETレジスタ22にセットする(ステップ209)。また、プロセッサ100は、KCをKEYレジスタ23にkcとしてセットする(ステップ210)。さらに、プロセッサ100は、BMで特定されるBMレジスタ20のビットに対応付けられたVECレジスタ21のアドレスaddrを参照し、分岐処理部130によりそのアドレスaddrの例外ハンドラにジャンプする、即ち実行を移す(ステップ211)。
図5は、本発明の1実施形態に係る例外プログラム制御方法を実施するために作成される1例のプログラム50を概略的に示す。プログラム50には制御実行命令12のexpc命令が設けてある。expc命令は、制御指定命令11のexpen命令により例外を有効にする指定がされているときには、例外を処理する例外ハンドラへ実行が移り、例外ハンドラにより例外が処理されると、expc命令の次へ実行が戻る。しかし、expc命令は、制御指定命令11のexpen命令により例外を有効にしない(無効にする)指定がされているときには、何もせずに通過され、その次の命令に実行が進む。
図6は、本発明の1実施形態に係る例外プログラム制御方法を実施するために作成される別例のプログラム60を概略的に示す。プログラム60は図1に示したプログラムに対応している。タスクBでのif文は不要になり、初期状態では初期化されていないため(未初期化)、制御指定命令11のexpen 20, 1命令により例外を有効にして初期化する関数が初めに呼び出されている。右側に示されたアセンブラ言語レベルでは、制御実行命令12のexpc 20, 512命令が設けてあり、この命令はほとんどの場合はCPUサイクルを消費することなく命令キューの中で破棄され、稀に例外が有効の時にだけ例外ハンドラにジャンプする命令として実行される。expc 20, 512命令の2番目のオペランド512は呼び出し側がどういう条件あるいは目的で例外を発生させたのかを呼び出された側のプログラムで識別するために使用される。ここでは関数番号512の指定のために使われ、初期化関数init()が呼び出される。例外ハンドラにおいて、その初期化関数の後方には、初期化されたため(初期化済)、制御指定命令11のexpen 20,0命令により例外を無効にする指定がされている。このように、従来技術における確認処理のためのコードを実行することなく、リセット状態の時だけ例外割り込みを発生して初期化処理を行わせることができる。
図7は、本発明の1実施形態に係る例外プログラム制御方法を実施するために作成されるさらに別例のプログラム70を概略的に示す。これは必要になった時にメモリを割り当てるデマンドページングを一般化して任意のソフトウエアオブジェクトの割り当てを行う例である。左側の従来技術では、ページが存在しない領域にCPUがアクセスしようとするとページフォールトが起きて例外処理の中でメモリが割り当てられる。プログラム70では、start:の直後に制御実行命令12のexpc 1, 0命令が設けてあり、初回の実行で例外を発生させて、必要なオブジェクト、例えばメモリヒープの実体化と初期化を行う。その後、2回目のexpc命令による例外の呼び出しでは、既にメモリヒープは実体化されている(制御指定命令11のexpen命令で例外を無効にされる)ので、例外は発生しない。この例はメモリヒープについてであるが、メモリだけでなく、任意のソフトウエアリソース、例えば、セマフォ、ミューテックスなどの同期オブジェクトなどの割り当てと初期化も必要に応じて行うことができるようになる。
図8は、本発明の1実施形態に係る例外プログラム制御方法を実施するために作成されるさらに別例のプログラム80を概略的に示す。これは不正なコード実行からコードを守るコード保護の仕組みを一般化した例である。左側の従来技術では、非特権モードの時に特権モードのコードを実行するアクセス違反に対して例外割り込みが起きるが、これはメモリのページ単位でコードを守ることしかできない。プログラム80では、制御実行命令12を必要な箇所に設けてピンポイントで例外を発生させることができ、コードの一部をある条件を満たす時の保護領域となし得る、即ち、任意のコード単位で不正な実行に対する例外処理を行える。ただし、従来技術と等価にするにはexpen命令およびBMレジスタを拡張して特権モードと非特権モードに関連付けて状態を別個に保持したり、リード可能かどうかなどの属性を必要であれば別途レジスタなどで保持する必要がある。本発明の場合は、プログラムで任意の条件をアクセス違反と定義して例外の発生を有効にしたり無効にしたりして使用することを想定している。プログラム80では、プログラム実行パスの先頭に制御実行命令12のexpc 3, 0命令を設けることにより、指定のコード領域(cond==Bの時)を例外発生領域にしている。制御指定命令11のexpen 3, 1で例外を有効にすることにより、制御実行命令12のexpc 3, xを含むコード領域はすべて一斉に例外の発生領域となる。
その他にも、本発明の1実施形態に係る例外プログラム制御方法を様々に実施することができる。例えば、デバッグ目的でプログラムの実行をトレースする場合である。プログラムのトレースしたい場所に、制御実行命令12のexpc命令を設けておき、例外ハンドラにログ用のコードを記述する。そして、トレースを開始したい時に、制御指定命令11のexpen命令で例外を有効にし、設けておいたexpc命令によりプログラムの実行がトレースされる。また、プロセス間通信の手段として用いる例の場合には、受信側のタスクにexpc命令を設けておき、送信側でexpen命令を実行する。その実行で設けておいたexpc命令が例外ハンドラを起動することにより、受信側はメッセージが送られたことを知る。さらに、システムコールの応用例として、条件が成立する場合だけ実行を行うシステムコールを実現できる。例えば、オープン(open)状態にある場合にだけシステムコールを実行するようなリード(read)システムコールを本発明を用いて作成することができる。プログラム次第で様々な応用が可能である。
プログラムに設けられる制御指定命令11のexpen命令および制御実行命令12のexpc命令については、例外が発生しない場合にexpc命令はexpen命令以外に他のCPU命令とはレジスタファイルを介して依存関係を持つことはないので、命令パイプラインの中で実行ステージに到達する前に命令キューからexpc命令を削除しても良い。その場合、expc命令を設けなかった場合と比較して、余分なCPUサイクルを消費することなくCPU命令を実行可能である。条件分岐命令の場合には、条件レジスタを更新する命令の実行が完了するまで、分岐するかどうかの判断はできない。一方、expc命令はそのようなレジスタとの依存関係はないので、expen命令が直前にない場合、例外を発生するかどうかは、命令キューに読み込まれてすぐに判断できる。
このように、条件分岐命令と比較した場合、分岐判定のための前処理が不要なため、例外が発生しない場合、制御実行命令12のexpc命令は高速に処理される。例外が発生する場合、コンテキストの同期処理が伴うため低速な処理になるかも知れない。そこで、高速な処理が必要な場合は、コンテキストの同期処理を行わず、例外が発生した位置にも戻らないように、つまり無条件分岐命令と同じ動作をするようにしても良い。上記の例の場合には256通りであるが、多数の例外処理を扱えるので、あるものはコンテキストの同期処理を必要とするものとして、また、あるものは高速に分岐処理を行うものとして、それぞれ割り当てることができる。
以上、実施態様を用いて本発明の説明をしたが、本発明の技術的範囲は実施態様について記載した範囲には限定されない。実施態様に種々の変更又は改良を加えることが可能であり、そのような変更又は改良を加えた態様も当然に本発明の技術的範囲に含まれる。
Claims (12)
- 例外をプログラム制御する方法であって、プロセッサが、
例外を有効にするか否かの例外制御指定のための制御指定命令を実行して、レジスタに前記例外の制御指定値を設定するステップと、
例外を発生させるか否かの例外制御実行のための制御実行命令を実行して、前記レジスタに設定された前記制御指定値が前記例外を有効にする値か否かを判定し、当該制御指定値が前記例外を有効にする値のときは前記例外を発生させるステップと、
を実行することを含み、
前記制御指定命令はビットマップインデックス部および制御指定部を有し、前記レジスタはビットマップレジスタを備え、前記制御指定値を設定するステップは、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定するステップを実行することを含み、
前記制御実行命令はビットマップインデックス部を有し、前記例外を発生させるステップは、当該ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値のときに、前記例外を発生させるステップを実行することを含む、
例外プログラム制御方法。 - 前記ビットマップレジスタのビットに設定された前記制御指定値が前記例外を有効にする値でないときには前記例外を発生させないステップを実行することを含む、請求項1に記載の方法。
- 前記レジスタはリターンアドレスレジスタを備え、前記例外を発生させるステップは、前記制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定するステップを実行することを含む、請求項1または2に記載の方法。
- 前記制御実行命令はキーコード部を有し、前記レジスタはキーレジスタを備え、前記例外を発生させるステップは、当該キーコード部の値を、当該発生させる前記例外での使用のため、当該キーレジスタに設定するステップを実行することを含む、請求項1〜3のいずれか1項に記載の方法。
- 前記レジスタはベクタベースレジスタを備え、前記例外を発生させるステップは、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプするステップを実行することを含む、請求項1〜4のいずれか1項に記載の方法。
- 前記例外を発生させないステップは、前記制御実行命令を命令キューの中で破棄するステップを実行することを含む、請求項2に記載の方法。
- プロセッサに、請求項1〜6のいずれか1項に記載の方法の各ステップを実行させる例外プログラム制御のためのコンピュータプログラム。
- 例外をプログラム制御するシステムであって、
プロセッサが、例外を有効にするか否かの例外制御指定のための制御指定命令と例外を発生させるか否かの例外制御実行のための制御実行命令とを実行して例外を制御する例外制御部を含み、
当該例外制御部が、
レジスタと、
前記制御指定命令を実行して、前記レジスタに前記例外の制御指定値を設定する制御指定命令処理部と、
前記制御実行命令を実行して、前記レジスタに設定された前記制御指定値が前記例外を有効にする値か否かを判定し、当該制御指定値が前記例外を有効にする値のときは前記例外を発生させる制御実行命令処理部とを含み、
前記制御指定命令はビットマップインデックス部および制御指定部を有し、前記レジスタはビットマップレジスタを含み、前記制御指定命令処理部は、当該ビットマップインデックス部の値で特定される当該ビットマップレジスタのビットに当該制御指定部の値を設定し、
前記制御実行命令はビットマップインデックス部を有し、前記制御実行命令処理部は、当該ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに設定された前記制御指定部の値が前記例外を有効にする値のときに、前記例外を発生させる、
例外プログラム制御システム。 - 前記制御実行命令処理部は、前記ビットマップレジスタのビットに設定された前記制御指定値が前記例外を有効にする値でないときには前記例外を発生させない、請求項8に記載のシステム。
- 前記レジスタはリターンアドレスレジスタを含み、前記制御実行命令処理部は、前記制御実行命令の次のアドレスを、当該リターンアドレスレジスタに設定する、請求項8または9に記載のシステム。
- 前記制御実行命令はキーコード部を有し、前記レジスタはキーレジスタを含み、前記制御実行命令処理部は、当該キーコード部の値を、発生させる前記例外での使用のため、当該キーレジスタに設定する、請求項8〜10のいずれか1項に記載のシステム。
- 前記レジスタはベクタベースレジスタを含み、前記制御実行命令処理部は、前記制御実行命令の前記ビットマップインデックス部の値で特定される前記ビットマップレジスタのビットに対応付けられた当該ベクタベースレジスタに保持する例外ハンドラのアドレスを参照し、当該アドレスの例外ハンドラにジャンプする、請求項8〜11のいずれか1項に記載のシステム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012549670A JP5822848B2 (ja) | 2010-12-20 | 2011-10-04 | 例外の制御方法、システムおよびプログラム |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010283459 | 2010-12-20 | ||
JP2010283459 | 2010-12-20 | ||
PCT/JP2011/072876 WO2012086288A1 (ja) | 2010-12-20 | 2011-10-04 | 例外の制御方法、システムおよびプログラム |
JP2012549670A JP5822848B2 (ja) | 2010-12-20 | 2011-10-04 | 例外の制御方法、システムおよびプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2012086288A1 JPWO2012086288A1 (ja) | 2014-05-22 |
JP5822848B2 true JP5822848B2 (ja) | 2015-11-25 |
Family
ID=46313572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012549670A Expired - Fee Related JP5822848B2 (ja) | 2010-12-20 | 2011-10-04 | 例外の制御方法、システムおよびプログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP5822848B2 (ja) |
WO (1) | WO2012086288A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9710270B2 (en) | 2010-12-20 | 2017-07-18 | International Business Machines Corporation | Exception control method, system, and program |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0496167A (ja) * | 1990-08-09 | 1992-03-27 | Oki Electric Ind Co Ltd | マルチプロセッサシステムの割込み方式 |
JPH04230533A (ja) * | 1991-01-07 | 1992-08-19 | Nec Corp | 割込制御回路 |
JPH04287231A (ja) * | 1991-03-18 | 1992-10-12 | Nec Corp | マイクロプロセッサ |
JPH0535499A (ja) * | 1991-07-29 | 1993-02-12 | Fujitsu Ltd | データ処理装置及びデータ処理方法 |
JPH0744398A (ja) * | 1993-07-30 | 1995-02-14 | Sony Corp | 情報処理装置 |
JP2001166950A (ja) * | 1999-12-07 | 2001-06-22 | Matsushita Electric Ind Co Ltd | 割り込み管理装置及び割り込み管理方法 |
JP2002196938A (ja) * | 2000-12-11 | 2002-07-12 | Faraday Technology Corp | 例外処理フロー用の装置及びその処理実行方法 |
JP2002323983A (ja) * | 2002-03-25 | 2002-11-08 | Matsushita Electric Ind Co Ltd | 命令生成方法、命令生成方法及び情報処理装置 |
JP2004272939A (ja) * | 1994-09-09 | 2004-09-30 | Renesas Technology Corp | 1チップデータプロセッサ |
JP2008015883A (ja) * | 2006-07-07 | 2008-01-24 | Matsushita Electric Ind Co Ltd | マスタ装置、スレーブ装置、並びにそれらの通信方法、及び通信システム |
JP2010092273A (ja) * | 2008-10-08 | 2010-04-22 | Panasonic Corp | 情報処理装置 |
-
2011
- 2011-10-04 JP JP2012549670A patent/JP5822848B2/ja not_active Expired - Fee Related
- 2011-10-04 WO PCT/JP2011/072876 patent/WO2012086288A1/ja active Application Filing
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0496167A (ja) * | 1990-08-09 | 1992-03-27 | Oki Electric Ind Co Ltd | マルチプロセッサシステムの割込み方式 |
JPH04230533A (ja) * | 1991-01-07 | 1992-08-19 | Nec Corp | 割込制御回路 |
JPH04287231A (ja) * | 1991-03-18 | 1992-10-12 | Nec Corp | マイクロプロセッサ |
JPH0535499A (ja) * | 1991-07-29 | 1993-02-12 | Fujitsu Ltd | データ処理装置及びデータ処理方法 |
JPH0744398A (ja) * | 1993-07-30 | 1995-02-14 | Sony Corp | 情報処理装置 |
JP2004272939A (ja) * | 1994-09-09 | 2004-09-30 | Renesas Technology Corp | 1チップデータプロセッサ |
JP2001166950A (ja) * | 1999-12-07 | 2001-06-22 | Matsushita Electric Ind Co Ltd | 割り込み管理装置及び割り込み管理方法 |
JP2002196938A (ja) * | 2000-12-11 | 2002-07-12 | Faraday Technology Corp | 例外処理フロー用の装置及びその処理実行方法 |
JP2002323983A (ja) * | 2002-03-25 | 2002-11-08 | Matsushita Electric Ind Co Ltd | 命令生成方法、命令生成方法及び情報処理装置 |
JP2008015883A (ja) * | 2006-07-07 | 2008-01-24 | Matsushita Electric Ind Co Ltd | マスタ装置、スレーブ装置、並びにそれらの通信方法、及び通信システム |
JP2010092273A (ja) * | 2008-10-08 | 2010-04-22 | Panasonic Corp | 情報処理装置 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2012086288A1 (ja) | 2014-05-22 |
WO2012086288A1 (ja) | 2012-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102116571B1 (ko) | 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법 | |
JP5335887B2 (ja) | アドレスに基づく条件付きデバッグ命令を認証するデバッグ方法、制御方法、およびデバッグ装置 | |
JP6006248B2 (ja) | 命令エミュレーションプロセッサ、方法、およびシステム | |
US7730463B2 (en) | Efficient generation of SIMD code in presence of multi-threading and other false sharing conditions and in machines having memory protection support | |
JP6195571B2 (ja) | 低特権状態からのランタイム・インストルメンテーション制御の変更 | |
US7620802B2 (en) | Instruction execution device, debugging method, debugging device, and debugging program | |
GB2529777A (en) | Processor with granular add immediates capability and methods | |
KR20020022068A (ko) | 향상된 마이크로프로세서에서의 스케줄링을 향상시키는방법 및 장치 | |
TW201719389A (zh) | 處理用於向量算術指令的例外狀況 | |
JP7136888B2 (ja) | 例外マスク更新命令後のトランザクションの非アボート処理の許可 | |
JP2020518910A (ja) | 機能の使用を管理するための装置および方法 | |
CN109416632B (zh) | 用于处理数据的装置和方法 | |
US20060095726A1 (en) | Independent hardware based code locator | |
NL2030804B1 (en) | Flexible return and event delivery | |
JP5318197B2 (ja) | ホストデータ処理装置内におけるデバイスエミュレーションのサポート | |
KR100308512B1 (ko) | 편집 기능을 위한 전문 밀리코드 지시 | |
CN111771188A (zh) | 带链接分支指令的分支目标变体 | |
JP5822848B2 (ja) | 例外の制御方法、システムおよびプログラム | |
KR19990082747A (ko) | 압축기억된십진수나눗셈에대한전문밀리코드명령 | |
KR19990082748A (ko) | 번역및테스트를위한전문밀리코드명령 | |
US11216280B2 (en) | Exception interception | |
US9710270B2 (en) | Exception control method, system, and program | |
KR20220139917A (ko) | 캐퍼빌리티 기반 프로세싱을 위한 장치 및 방법 | |
KR20040058228A (ko) | 낮은 오버헤드의 예외 체킹 | |
US11704127B2 (en) | Marking current context data to control a context-data-dependent processing operation to save current or default context data to a data location |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140218 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20140513 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20151006 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5822848 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |