(57)【要約】【課題】  ユーザレベルの割込処理プログラムにより不正に特権レベルの乗っ取りがなされないように制御する割込制御装置を提供する。【解決手段】  割込制御装置１００の割込情報記憶部１２０は、割込要因毎に、割込処理プログラムを示す情報ＡＤと、実行レベルＥＬＩＲ（高い特権レベルか低いユーザレベル）とを記憶しており、比較部１４０は、割込要因が発生した場合に、ＥＬＩＲとＣＰＵにおけるＰＳＷ中の実行レベルＥＬとを比較し、ＥＬＩＲの方が低くない場合には制御部１７０は、退避部１５０にＣＰＵ情報１３０を退避させ、情報ＡＤの示す割込処理プログラムをＥＬＩＲの実行レベルで実行してから、復元部１６０にＣＰＵ情報を復元させる。復元部１６０は、退避されているＣＰＵ情報を読み出し、ＰＳＷのＥＬがユーザレベルなら読み出したＣＰＵ情報中のＥＬをユーザレベルに強制してから、ＣＰＵ情報のＣＰＵへの復元を行う。【選択図】  図１
2005316599.tif 000002
【特許請求の範囲】
【請求項１】
多重割込の制御を行う割込制御装置であって、
複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、
割込要因が発生した場合に、当該割込要因に対応するレベル情報が示す実行レベルと、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルとを比較する比較手段と、
ＣＰＵにおけるプロセッサステータスワード及びプログラムカウンタの内容であるＣＰＵ情報をメモリ内のスタック領域に退避する退避手段と、
前記スタック領域から退避されているＣＰＵ情報を読み出して、ＣＰＵ情報をＣＰＵに復元する復元手段と、
前記比較手段により割込要因に対応するレベル情報が示す実行レベルの方が低くないという比較結果が得られた場合には、前記退避手段にＣＰＵ情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを該当の実行レベルで実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該ＣＰＵ情報の復元を行わせる割込制御手段とを備える
ことを特徴とする割込制御装置。
【請求項２】
前記復元手段は、前記スタック領域から退避されているＣＰＵ情報を読み出した後に、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合には読み出したＣＰＵ情報を低レベルを示すように強制してから、ＣＰＵ情報のＣＰＵへの前記復元を行う
ことを特徴とする請求項１記載の割込制御装置。
【請求項３】
前記割込制御装置は更に、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合において、前記復元手段が前記スタック領域から読み出したＣＰＵ情報が高レベルを示すときには、異常発生の旨を外部に出力する異常検出手段を備える
ことを特徴とする請求項１記載の割込制御装置。
【請求項４】
多重割込の制御を行う割込制御装置であって、
複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、
ＣＰＵにおけるプロセッサステータスワード及びプログラムカウンタの内容であるＣＰＵ情報を、所定レジスタが指し示すメモリ内のスタック領域とメモリ内の所定の保護領域との両方に退避し、当該所定レジスタの内容であるスタックポインタを当該保護領域に退避する退避手段と、
前記保護領域からスタックポインタを読み出して所定レジスタに設定し、退避されているＣＰＵ情報を前記保護領域から読み出して、当該保護領域からのＣＰＵ情報のうち実行レベルの部分が低レベルを示す場合には当該実行レベルの部分と、当該所定レジスタが指し示すスタック領域に退避されているＣＰＵ情報のうち実行レベル以外の部分とをＣＰＵに復元し、当該保護領域からのＣＰＵ情報のうち実行レベルの部分が高レベルを示す場合には当該保護領域からのＣＰＵ情報をＣＰＵに復元する復元手段と、
ＣＰＵにおける実行レベルが低レベルである場合には前記保護領域へデータを書き込む命令の実行を抑止する保護手段と、
割込要因が発生した場合に、前記退避手段にＣＰＵ情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段にＣＰＵ情報の復元を行わせる割込制御手段とを備える
ことを特徴とする割込制御装置。
【請求項５】
多重割込の制御を行う割込制御装置であって、
複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、
ＣＰＵにおけるプロセッサステータスワード及びプログラムカウンタの内容であるＣＰＵ情報を、所定レジスタが指し示すメモリ内のスタック領域に退避し、当該所定レジスタの内容であるスタックポインタを、メモリ内の保護領域に退避する退避手段と、
前記保護領域からスタックポインタを読み出して所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からＣＰＵ情報を読み出して、当該ＣＰＵ情報をＣＰＵに復元する復元手段と、
ＣＰＵにおける実行レベルが低レベルである場合には、前記保護領域へデータを書き込む命令の実行を抑止する第１保護手段と、
ＣＰＵにおける実行レベルが低レベルである場合には、前記保護領域に退避されて読み出されていないスタックポインタが指し示すスタック領域に対して、データを書き込む命令の実行を抑止する第２保護手段と、
割込要因が発生した場合に、前記退避手段にＣＰＵ情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該ＣＰＵ情報の復元を行わせる割込制御手段とを備える
ことを特徴とする割込制御装置。
【請求項６】
前記退避手段は、更に、前記スタックポインタと対にして、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、
前記第２保護手段は、前記保護領域に退避されて読み出されていないスタックポインタのうち、高レベルを示す実行レベルと対にされているスタックポインタが指し示すスタック領域に対しての場合に限って、スタック領域にデータを書き込む命令の実行について前記抑止を行い、
前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からＣＰＵ情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをＣＰＵに復元する
ことを特徴とする請求項５記載の割込制御装置。
【請求項７】
前記退避手段は、更に、前記スタックポインタと対にして、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、
前記第２保護手段は、前記保護領域に直前に退避されて読み出されていないスタックポインタが、高レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスから所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、低レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスを所定アドレス側に所定量進めたアドレスから、所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、
前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からＣＰＵ情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをＣＰＵに復元する
ことを特徴とする請求項５記載の割込制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにおける割込制御に関し、特に、割込処理プログラムの実行前後にＣＰＵ状態を示すデータを退避及び復元する技術に関する。
【背景技術】
【０００２】
従来、コンピュータ資源の管理等を行うオペレーティングシステム（ＯＳ）のアプリケーションプログラム（ＡＰ）による破壊を防ぐ等のために、少なくとも２種類の動作モードで動作する中央演算処理装置（ＣＰＵ）を活用して動作モードの制御を行うコンピュータシステムが普及している。
この動作モードは、特権モード、カーネルモード、スーパバイザコール（ＳＶＣ）モード等と称されるコンピュータ資源の利用が制限されないモードと、ユーザモード、非特権モード、プロブレムモード等と称されるコンピュータ資源の利用が制限されるモードとに大別できる。ＯＳやＡＰの各プログラムには、どちらの動作モードで実行されるべきかを示す実行レベルが何らかの手法により割り当てられる。以下、メモリ、入出力装置等であるコンピュータ資源の利用が制限されないモードで実行されるべきプログラムの実行レベルを特権レベルといい、利用が制限されるモードで実行されるべきプログラムの実行レベルをユーザレベルという。
【０００３】
通常、特権レベルはＯＳの中核を構成するプログラムに予め割り当てられるものであり、その他のプログラム、つまりＡＰやＯＳの中核でない部分を構成するプログラムは、ユーザレベルとして取り扱われている。
従来のコンピュータシステムは、ＣＰＵのプロセッサステータスワード（ＰＳＷ）中の特定ビットで、現在の動作モードつまり現在実行されているプログラムの実行レベルを表し、特権レベルのプログラムのみに、ＰＳＷ中の実行レベルを表す部分の書き換えや、いわゆるリング保護等により保護されたメモリ領域へのアクセスを許容し、ユーザレベルのプログラムにはＰＳＷ中の実行レベルを表す部分やその保護されたメモリ領域へのアクセスを禁止し、そのアクセスが実行されるとシステムエラーとして扱う。
【０００４】
ところで、従来、コンピュータシステムは、いわゆる割込制御を行う。以下、割込制御を簡単に説明する。
コンピュータシステムにおいて、割込要因毎に、割込レベルと割込処理プログラムとを定めておき、あるプログラムの実行中に割込要因が発生すると、発生した割込要因に対応する割込レベルが現在のＰＳＷ中の１フラグである割込マスクレベルフラグより高いレベルを示す場合に、そのプログラムの実行を中断し、その発生した割込要因に対応する割込レベルと等しくなるように割込マスクレベルフラグを更新してから割込処理プログラムを一時的に実行することで割込要因に対応した動作を実現し、その後に、中断していたもとのプログラムの実行を再開する。
コンピュータシステムは、この中断及び再開を可能にするために、割込処理プログラムの実行開始直前に、ＣＰＵのＰＳＷの内容及びプログラムカウンタ（ＰＣ）の内容（以下、これらの内容を「ＣＰＵ情報」という。）を、特定のメモリ領域に退避しておき、割込処理プログラムの実行終了時点で、退避していたそのＣＰＵ情報を復元、つまりそのＣＰＵ情報をＣＰＵのＰＳＷ及びＰＣに再設定する。
【０００５】
なお、コンピュータシステムは、割込処理プログラムが実行されている間においても、その実行中の割込処理プログラムより高い割込レベルが定められている割込要因が発生した場合には、実行中の割込処理プログラムを中断して、その発生した割込要因に対応する割込処理プログラムを実行することで、多重割込に対応する。また、多重に割込が生じた場合には、ラストインファーストアウト（ＬＩＦＯ）方式で特定のメモリ領域つまりスタック領域へのＣＰＵ情報の退避及び復元を行う。
【０００６】
なお、割込要因の発生に対し割込処理プログラムを実行する従来の割込制御技術として、例えば特許文献１記載の割込応答処理方式が知られている。
【特許文献１】特開平６-８３６４０号公報（第２−４頁、第１，２，３図）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、ユーザレベルの割込処理プログラムの実行を許容することとした割込制御方式を想定した場合に、割込が生じてスタック領域内に退避されたＣＰＵ情報の一部をユーザレベルの割込処理プログラムが書き換えできるようにすると便利になる。例えば、スタック領域に退避されたＣＰＵ情報中のＰＣの値を変更すると、ユーザレベルの割込処理プログラムから復帰するユーザレベルのプログラム上の位置を任意に変化させることができ、ユーザレベルの割込制御プログラムによって柔軟な割込制御アルゴリズムの実現が可能になる。
【０００８】
しかしながら、ユーザレベルのプログラムは、ＯＳの中核部分等にあたり信頼性の高い特権レベルの割込処理プログラムと異なり、信頼性が低く、いわゆるウィルス等の不正なプログラムを包含している可能性がある。
従って、ユーザレベルの割込処理プログラムがスタック領域内のＣＰＵ情報を書き換えられるようにすると次のような問題が生じる。
【０００９】
不正なユーザレベルの割込処理プログラムが、スタック領域内に退避されているＣＰＵ情報のうち特権レベルのプログラムの実行状態に係るＣＰＵ情報を自由に変更してしまう危険性がある問題や、不正なユーザレベルの割込処理プログラムがＣＰＵ情報中のＰＳＷの実行レベルを示す部分を特権レベルを示すように書き換えておき、割込処理プログラムの実行終了時にその書き換えたＣＰＵ情報がＣＰＵに復元されることを利用して、特権レベルを乗っ取ってしまうという問題である。
【００１０】
そこで、本発明は、これら問題のいずれかを解決すべくなされたものであり、ユーザレベルの割込処理プログラムの実行を許容した上でユーザレベルの割込処理プログラムにより不正なＣＰＵ情報の操作がなされないように割込制御を行う割込制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明に係る割込制御装置は、多重割込の制御を行う割込制御装置であって、複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、割込要因が発生した場合に、当該割込要因に対応するレベル情報が示す実行レベルと、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルとを比較する比較手段と、ＣＰＵにおけるプロセッサステータスワード及びプログラムカウンタの内容であるＣＰＵ情報をメモリ内のスタック領域に退避する退避手段と、前記スタック領域から退避されているＣＰＵ情報を読み出して、ＣＰＵ情報をＣＰＵに復元する復元手段と、前記比較手段により割込要因に対応するレベル情報が示す実行レベルの方が低くないという比較結果が得られた場合には、前記退避手段にＣＰＵ情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを該当の実行レベルで実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該ＣＰＵ情報の復元を行わせる割込制御手段とを備えることを特徴とする。
【発明の効果】
【００１２】
本発明に係る割込制御装置は、上記構成を備えることにより、低レベルつまりユーザレベルの割込処理プログラムの実行中にスタック領域内部に退避されているＣＰＵ情報を変更可能であるが、そのユーザレベルの割込処理プログラムの実行中には、スタック領域内部には特権レベルのプログラムの実行状態に係るＣＰＵ情報は一切格納されていないため、ユーザレベルの割込処理プログラムが不正に特権レベルの割込処理プログラムの実行状態に係る退避データの書き換えを行うことは不可能となる。
【００１３】
なお、ユーザレベルの割込処理プログラムが実行中に、スタック領域内に退避されているユーザレベルのプログラムの実行状態に係るＣＰＵ情報中のＰＣにアクセスして、戻りアドレスを任意のアドレスに変更することが可能になり、割込処理プログラムのみに閉じない柔軟な割込対応処理を実現することが可能になる。また、特権レベルの割込処理プログラムの実行を、ユーザレベルの割込処理プログラムに対応する割込要因の発生によって、中断されることなく、迅速に行うことができるようになる。
【００１４】
また、前記復元手段は、前記スタック領域から退避されているＣＰＵ情報を読み出した後に、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合には読み出したＣＰＵ情報を低レベルを示すように強制してから、ＣＰＵ情報のＣＰＵへの前記復元を行うこととしてもよい。
これにより、ユーザレベルの割込処理プログラムが、スタック領域に退避されているＣＰＵ情報のうちの一部、例えば、割込処理プログラムの実行終了時にＣＰＵ情報の復元によりＰＣに設定されるはずの部分を更新することができるが、もしＣＰＵ情報中の実行レベルの部分まで書き換え特権レベルを示す値にしたとしても、その部分はその割込処理プログラムの実行終了後のＣＰＵ情報の復元の際に強制的にユーザレベルを示す値に書き戻されることになるので、ユーザレベルのプログラムによる特権レベルの乗っ取りが防止できる。
【００１５】
また、前記割込制御装置は更に、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合において、前記復元手段が前記スタック領域から読み出したＣＰＵ情報が高レベルを示すときには、異常発生の旨を外部に出力する異常検出手段を備えることとしてもよい。
これにより、ユーザレベルの割込処理プログラムが、スタック領域に退避されているＣＰＵ情報のうち実行レベルの部分を書き換えて、本来ユーザレベルのプログラムを特権レベルで動作させようと企てた場合に、本割込制御装置を備えるコンピュータシステムはそのことを異常発生として検知できるようになる。
【００１６】
また、本発明に係る割込制御装置は、多重割込の制御を行う割込制御装置であって、  複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、ＣＰＵにおけるプロセッサステータスワード及びプログラムカウンタの内容であるＣＰＵ情報を、所定レジスタが指し示すメモリ内のスタック領域とメモリ内の所定の保護領域との両方に退避し、当該所定レジスタの内容であるスタックポインタを当該保護領域に退避する退避手段と、前記保護領域からスタックポインタを読み出して所定レジスタに設定し、退避されているＣＰＵ情報を前記保護領域から読み出して、当該保護領域からのＣＰＵ情報のうち実行レベルの部分が低レベルを示す場合には当該実行レベルの部分と、当該所定レジスタが指し示すスタック領域に退避されているＣＰＵ情報のうち実行レベル以外の部分とをＣＰＵに復元し、当該保護領域からのＣＰＵ情報のうち実行レベルの部分が高レベルを示す場合には当該保護領域からのＣＰＵ情報をＣＰＵに復元する復元手段と、ＣＰＵにおける実行レベルが低レベルである場合には前記保護領域へデータを書き込む命令の実行を抑止する保護手段と、割込要因が発生した場合に、前記退避手段にＣＰＵ情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段にＣＰＵ情報の復元を行わせる割込制御手段とを備えることを特徴とする。
【００１７】
これにより、特権レベルのプログラムの実行中であってもユーザレベルの割込処理プログラムの実行が可能である上、ユーザレベルの割込処理プログラムからユーザレベルのプログラムに制御が移行する場合の移行先アドレス等の書き換えは可能だが、実行レベルの書き換えは不可能になるので、ユーザレベルのプログラムによる特権レベルの乗っ取りが防止できる。
【００１８】
また、本発明に係る割込制御装置は、多重割込の制御を行う割込制御装置であって、複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、ＣＰＵにおけるプロセッサステータスワード及びプログラムカウンタの内容であるＣＰＵ情報を、所定レジスタが指し示すメモリ内のスタック領域に退避し、当該所定レジスタの内容であるスタックポインタを、メモリ内の保護領域に退避する退避手段と、前記保護領域からスタックポインタを読み出して所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からＣＰＵ情報を読み出して、当該ＣＰＵ情報をＣＰＵに復元する復元手段と、ＣＰＵにおける実行レベルが低レベルである場合には、前記保護領域へデータを書き込む命令の実行を抑止する第１保護手段と、ＣＰＵにおける実行レベルが低レベルである場合には、前記保護領域に退避されて読み出されていないスタックポインタが指し示すスタック領域に対して、データを書き込む命令の実行を抑止する第２保護手段と、割込要因が発生した場合に、前記退避手段にＣＰＵ情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該ＣＰＵ情報の復元を行わせる割込制御手段とを備えることを特徴とする。
【００１９】
これにより、ＣＰＵ情報が退避されたメモリ領域を動的に特権保護し、そのメモリ領域に退避されたＣＰＵ情報をユーザレベルの割込処理プログラムが書き換えることが防止されるようになる。
また、前記退避手段は、更に、前記スタックポインタと対にして、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、前記第２保護手段は、前記保護領域に退避されて読み出されていないスタックポインタのうち、高レベルを示す実行レベルと対にされているスタックポインタが指し示すスタック領域に対しての場合に限って、スタック領域にデータを書き込む命令の実行について前記抑止を行い、前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からＣＰＵ情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをＣＰＵに復元することとしてもよい。
【００２０】
これにより、ユーザレベルのプログラムの実行状態に係る退避されたＣＰＵ情報のうち実行レベル以外の部分に限りユーザレベルの割込処理プログラムによって書き換えられるようになる。
また、前記退避手段は、更に、前記スタックポインタと対にして、ＣＰＵにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、前記第２保護手段は、前記保護領域に直前に退避されて読み出されていないスタックポインタが、高レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスから所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、低レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスを所定アドレス側に所定量進めたアドレスから、所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からＣＰＵ情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをＣＰＵに復元することとしてもよい。
【００２１】
これにより、割込により実行が中断されたユーザレベルのプログラムについてのスタック領域に退避されたＣＰＵ情報中のＰＣ部分の位置に相当する部分を、ユーザレベルの割込処理プログラムによって書き換え可能なように、退避するＣＰＵ情報のデータ構造と第２保護手段における所定量とを予め定めておきさえすれば、その部分だけをユーザレベルの割込処理プログラムが書き換えられ、他の部分はユーザレベルの割込処理プログラムでは書き換えられないようにすることができる。
【発明を実施するための最良の形態】
【００２２】
＜実施の形態１＞
以下、本発明の実施の形態１に係る割込制御装置について説明する。
＜構成＞
図１は、実施の形態１に係る割込制御装置１００の機能ブロック図である。
割込制御装置１００は、ＣＰＵ、メモリ等を備えるコンピュータの一部であり、割込制御を実現する装置である。なお、割込制御は、ＣＰＵがあるプログラムを実行中に、特定の割込要因が生じた時に、そのプログラムの実行を中断してその割込要因に対応して特別な割込処理を実行し、その割込処理が終了した時点で、中断していたもとのプログラムの実行を再開するという制御である。
【００２３】
同図に示すように、割込制御装置１００は、機能的に見れば、スタック領域１１０、割込情報記憶部１２０、比較部１４０、退避部１５０、復元部１６０及び制御部１７０を有する。
ここで、スタック領域１１０は、メモリの一領域であり、スタックポインタ（ＳＰ）１３９は、このスタック領域１１０における現在のデータ格納位置を指し示すレジスタ又はメモリの一領域である。
【００２４】
割込情報記憶部１２０は、割込要因毎に、割込処理プログラムを特定するためのアドレス等の割込処理情報ＡＤと、特権レベルかユーザレベルのいずれかを示す実行レベルＥＬＩＲと、多重割込の優先度を示す割込レベルＬＶと、割込要因が発生した場合にハイレベル（Ｈ）にセットされてその割込要因に対する割込処理プログラムが実行される直前にローレベル（Ｌ）にリセットされる割込要求フラグＩＲとを対応付けて保持する記憶領域であり、専用の割込制御レジスタ等により構成される。なお、実行レベルＥＬＩＲは、ハイレベル（Ｈ）によりユーザレベルを表し、ローレベル（Ｌ）により特権レベルを表す。また、この割込情報記憶部１２０の内容は、ＯＳによりシステム起動時等に予め設定される。
【００２５】
退避部１５０は、制御部１７０の指示に従いＣＰＵ情報１３０をスタック領域１１０の現在のデータ格納位置に格納する機能を有する。
ここで、ＣＰＵ情報１３０は、ＣＰＵの現在状態を示すレジスタであるプロセッサステータスワード（ＰＳＷ）１３２とプログラムの実行アドレスを示すレジスタであるプログラムカウンタ（ＰＣ）１３１との内容である。なお、ＰＳＷ１３２は、現在の動作モードつまり現在実行しているプログラムの実行レベルを示す実行レベルフラグＥＬと、多重割込の拒否判断に用いるための割込マスクレベルフラグＩＭとを含んでいる。実行レベルは、プログラムに付与されるコンピュータ資源についての利用権限の程度を表し、高い実行レベルつまりコンピュータ資源の利用に特に制限のない実行レベルが、特権レベルであり、低い実行レベルつまり利用できるコンピュータ資源に制限がある実行レベルがユーザレベルである。
【００２６】
比較部１４０は、割込要因が発生した場合に、その割込要因に対応する割込レベルＬＶ及び実行レベルＥＬＩＲと、ＰＳＷ１３２の割込マスクレベルフラグＩＭ及び実行レベルフラグＥＬとを比較し、その比較結果を制御部１７０に伝える機能を有する。
また、制御部１７０は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合に比較部１４０による比較結果に応じて、割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部１５０に指示してＣＰＵ情報を退避させてから、割込要因に対応する割込処理情報ＡＤにより特定される割込処理プログラムを対応する実行レベルＥＬＩＲで実行し、その割込処理プログラムの実行を終了した後に、復元部１６０に指示してその退避していたＣＰＵ情報の復元を行わせる機能を有する。
【００２７】
また、復元部１６０は、制御部１７０の指示に従いスタック領域１１０から直前に退避されたＣＰＵ情報１３０をＣＰＵに復元する機能を有し、この復元に際して、スタック領域１１０に格納されていたＣＰＵ情報を読み出した後に、ＣＰＵにおけるＰＳＷ１３２中の実行レベルフラグＥＬがユーザレベル（Ｈ）である場合には、読み出したＣＰＵ情報中の実行レベルフラグを、ユーザレベル（Ｈ）を示すように強制してから、ＣＰＵ情報のＣＰＵへの復元を行う。なお、この強制は、もとの値が何であるかに拘らず特定の値を設定することであり、復元部１６０内に、ＰＳＷ１３２中の実行レベルフラグＥＬとスタック領域から読み出されたＣＰＵ情報中の実行レベルフラグとを入力として出力をＰＳＷ１３２中の実行レベルフラグＥＬに与えるＯＲ論理ゲート１６１を設けることにより実現される。
【００２８】
＜動作＞
以下、上述の構成を備える割込制御装置１００の動作について説明する。
図２は、割込制御装置１００の行う割込制御処理を示すフローチャートである。
まず、割込要因が発生すると、例えばＣＰＵ外部の割込コントローラ等により、割込情報記憶部１２０におけるその割込要因に対応する割込要求フラグＩＲがＨレベルにセットされる。
【００２９】
続いて制御部１７０は、割込要因の発生を検知すると、比較部１４０により割込情報記憶部１２０に記憶されておりその発生した割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２中の割込マスクレベルフラグＩＭとを比較させ（ステップＳ１１）、割込レベルＬＶの方が高い優先度を示すレベルである場合には、その割込要因に対応する実行レベルＥＬＩＲと、ＰＳＷ１３２中の実行レベルフラグＥＬとを比較させ（ステップＳ１２）、実行レベルＥＬＩＲが実行レベルフラグＥＬ以上の実行レベルを示すときには、割込を受け付けると決定して割込要求フラグＩＲをＬレベルにリセットする（ステップＳ１３）。なお、ステップＳ１２の比較において、実行レベルＥＬＩＲが実行レベルフラグＥＬ以上の実行レベルを示すのは、実行レベルＥＬＩＲが特権レベルである場合か、或いは、実行レベルＥＬＩＲがユーザレベルであってかつ実行レベルフラグＥＬがユーザレベルである場合に限られる。
【００３０】
また、ステップＳ１１の比較において割込レベルＬＶの方が割込マスクレベルフラグＩＭより高い優先度を示すレベルでないとき、或いは、ステップＳ１２の比較において実行レベルＥＬＩＲの方が低い実行レベルを示すときには、割込を受け付けないと決定する。
割込要求を受け付けた後、制御部１７０は、退避部１５０にＣＰＵのＣＰＵ情報１３０をスタック領域１１０に退避させる（ステップＳ１４）。なお、退避部１５０においては、スタック領域１１０のうちＳＰ１３９により特定できる部分にＣＰＵ情報１３０を格納して、その格納した分だけＳＰ１３９を変化させる。
【００３１】
ＣＰＵ情報１３０の退避がなされた後、制御部１７０は、ＣＰＵ情報１３０を更新する（ステップＳ１５）。即ち、制御部１７０は、割込要求を受け付けた割込要因に対応する実行レベルＥＬＩＲと同値をＰＳＷ１３２の実行レベルフラグＥＬに設定し、その割込要因に対応する割込レベルＬＶと同値をＰＳＷ１３２の割込マスクレベルフラグＩＭに設定し、その割込要因に対応する割込処理情報ＡＤに基づいて割込処理プログラムのアドレスをＰＣ１３１に設定する。
【００３２】
ステップＳ１５に続いて、制御部１７０は、ＰＣ１３１に従って、割込処理プログラムの実行を行う（ステップＳ１６）。この際に割込処理プログラムは対応する実行レベルＥＬＩＲで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
【００３３】
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部１７０は、復帰命令を読み出したら、ステップＳ１６を終了する。
なお、制御部１７０がある割込処理プログラムを実行している間において（ステップＳ１６）、別の割込要因が発生した場合には、その割込要因に対して図２に示すステップＳ１１からの一連の処理を行うことで、割込制御装置１００は、多重割込に対応している。
【００３４】
割込処理プログラムの実行を終了した後には、制御部１７０は、復元部１６０にスタック領域１１０にステップＳ１４において退避していたＣＰＵ情報を復元させる。
この際、まず復元部１６０は、スタック領域１１０のうちＳＰ１３９により特定できる部分からＣＰＵ情報を読み出して、そのＣＰＵ情報の分量だけＳＰ１３９を変化させ（ステップＳ１７）、そのＣＰＵ情報中の実行レベルフラグとＰＳＷ１３２中の実行レベルフラグＥＬの示す現在の実行レベルとを参照したＯＲ論理ゲート１６１の働きにより、現在の実行レベルフラグＥＬがユーザレベル（Ｈ）を示す場合には（ステップＳ１８）、ＣＰＵに復元すべき実行レベルフラグをユーザレベル（Ｈ）に強制し（ステップＳ１９）、ＣＰＵ情報をＣＰＵに復元する（ステップＳ２０）。
【００３５】
ＣＰＵ情報が復元された後に、制御部１７０は、Ｈレベルにセットされた割込要求フラグＩＲに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップＳ１１からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える（ステップＳ２１）。
以下、割込制御装置１００における割込制御の具体的動作について説明する。
【００３６】
ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクａ及びタスクｃと、特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクｂとがあり、割込レベルの示す優先度はタスクｃが最も高く、続いてタスクｂ、タスクａの順であることとし、まずタスクａに対応する割込要因が発生し、続いて、タスクｂ、タスクｃの順で、対応する割込要因が発生することとして説明する。
【００３７】
図３は、割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。
まず、ユーザレベルのタスクａが実行されており、これに対応してＰＳＷ１３２中の割込マスクレベルフラグＩＭは低い優先度を示しており、実行レベルフラグＥＬはユーザレベル（Ｈ）を示している。
【００３８】
時刻Ｔ２００において、タスクｂに対応する割込要因Ｂが発生して、その割込要因Ｂに対応する割込要求フラグＩＲがＨレベルにセットされ、時刻Ｔ２０１において、割込要因Ｂに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示し、かつ、タスクｂに対応する実行レベルＥＬＩＲは特権レベル（Ｌ）を示しており実行レベルＥＬより高い実行レベルであるため、割込が受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、ＣＰＵ情報１３０がスタック領域１１０に退避され、割込マスクレベルＩＭを更新し実行レベルフラグＥＬを特権レベル（Ｌ）にしてタスクｂの割込処理プログラムが実行される。
【００３９】
時刻Ｔ２０２において、タスクｂの割込処理プログラムが実行されている間に、タスクｃに対応する割込要因Ｃが発生し、割込要因Ｃに対応する割込要求フラグＩＲがＨレベルにセットされたとする。この割込要因Ｃに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示すが、割込要因Ｃに対応する実行レベルＥＬＩＲはユーザレベル（Ｈ）を示しておりこの時点での実行レベルＥＬより低いため、割込は受け付けられず保留される。
【００４０】
時刻Ｔ２０３において、タスクｂの割込処理プログラム中の復帰命令が実行されると、スタック領域１１０に退避されていたＣＰＵ情報が、ＣＰＵに復元される。この復元の際には、実行レベルは退避されていたままのユーザレベル（Ｈ）となる。
その後、時刻Ｔ２０５において、保留されていた割込要因Ｃに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示し、かつ、割込要因Ｃに対応する実行レベルＥＬＩＲはユーザレベル（Ｈ）を示しておりこの時点での実行レベルＥＬもユーザレベル（Ｈ）を示しているため、制御部１７０によるステップＳ１２の判断の結果として、割込は受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされ、ＣＰＵ情報１３０がスタック領域１１０に退避され、割込マスクレベルＩＭを更新し実行レベルＥＬをユーザレベル（Ｈ）にしてタスクｃの割込処理プログラムが実行される。
【００４１】
時刻Ｔ２０６において、タスクｃの割込処理プログラム中の復帰命令が実行されると、スタック領域１１０に退避されていたＣＰＵ情報が、復元部１６０により読み出され、その時点でのＰＳＷ１３２中の実行レベルフラグＥＬがユーザレベル（Ｈ）であるため、ＯＲ論理ゲート１６１の作用によりＣＰＵ情報中の実行レベルフラグは必ずユーザレベル（Ｈ）を示すようにして、そのＣＰＵ情報のＣＰＵへの復元がなされる。
【００４２】
従って、タスクｃに対応するユーザレベルの割込処理プログラムが、実行中にスタック領域１１０の内容を、つまり退避されているＣＰＵ情報を、書き換えたとしても、実行レベルフラグについては、ユーザレベル（Ｈ）に強制されて、ＣＰＵに復元される。即ち、信頼性の低いユーザレベルの割込処理プログラムによるスタック領域へのアクセス或いはノイズによって、結果的に不正に、ＣＰＵのＰＳＷにおける実行レベルフラグＥＬに特権レベル（Ｌ）が設定されるようなことは生じないようになっている。なお、ユーザレベルのプログラムによって、ＰＳＷにおける実行レベルフラグＥＬを直接更新することは許容されておらず、この更新操作はシステムエラーとして扱われる。
【００４３】
以上説明したように、割込制御装置１００は、信頼性の高い特権レベルの割込処理プログラムの実行中においては、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付けないこととし、また、ユーザレベルの割込処理プログラムの実行後のＣＰＵ情報の復元においては実行レベルフラグＥＬを特権レベルに設定することがないように強制している。この結果、例えばユーザレベルの割込処理プログラムは、スタック領域に退避されたＣＰＵ情報におけるＰＣの値を変更して、割込処理の終了後において任意のプログラムを実行させるような柔軟な制御を行うことができるものの、特権レベルを乗っ取るようなことはできないようになる。
【００４４】
即ち、割込制御装置１００では、比較部１４０による実行レベルの比較やＯＲ論理ゲート１６１等の作用により、簡易に特権レベルの乗っ取りを防止するフェールセーフ機能が実現され、ＣＰＵ情報の退避先を、特権レベルのプログラムしかアクセスできないようなメモリ中の特権保護領域にしなくても良いようになっている。
＜変形例＞
以下、割込制御装置１００の一部を変形した割込制御装置２００について説明する。
【００４５】
図４は、実施の形態１の変形例に係る割込制御装置２００の機能ブロック図である。
同図に示すように、割込制御装置２００は、機能的に見れば、スタック領域１１０、割込情報記憶部１２０、比較部１４０、退避部１５０、復元部２６０、異常検出部２６２及び制御部１７０を有する。同図において、割込制御装置２００の構成要素のうち、割込制御装置１００の構成要素と同一のものには、同一の符号を付しており、その同一の構成要素についてはここでは説明を省略する。
【００４６】
復元部２６０は、制御部１７０の指示に従いスタック領域１１０から直前に退避されたＣＰＵ情報１３０を単純にＣＰＵに復元する機能を有する。
また、異常検出部２６２は、復元部２６０が復元を行う際に、スタック領域１１０から読み出されたＣＰＵ情報のうち実行レベルフラグを示す部分と、その時点でのＰＳＷ１３２内の実行レベルフラグＥＬとを入力としてＮＯＴゲート及びＡＮＤ論理ゲートにより、一定の場合にエラー発生の旨を割込制御装置２００の外部に出力する機能を有する。
【００４７】
このように復元部２６０と異常検出部２６２とが割込制御装置１００と相違する割込制御装置２００は、基本的に図２に示した割込制御処理と同様の処理を行うが、ステップＳ１８及びステップＳ１９に代えて、次の処理を行う。即ち、この処理は、異常検出部２６２により、スタック領域１１０から読み出されたＣＰＵ情報のうち実行レベルフラグを示す部分が、特権レベル（Ｌ）を示しており、かつ、その時点でのＰＳＷ１３２内の実行レベルフラグＥＬがユーザレベル（Ｈ）を示している場合に限り、ＮＯＴゲート及びＡＮＤ論理ゲートによりＨレベルでもってエラー発生の旨を割込制御装置２００の外部に出力する処理である。
【００４８】
従って、割込制御装置２００は、信頼性の高い特権レベルの割込処理プログラムつまり実行レベルの高い割込処理プログラムの実行中においては、信頼性の低いユーザレベルの割込処理プログラムつまり実行レベルの低い割込処理プログラムに対応する割込要因に係る割込を受け付けないこととし、また、ユーザレベルの割込処理プログラムの実行後のＣＰＵ情報の復元に際して、復元用の実行レベルフラグを不正に特権レベルに設定されていることを検出しエラーと扱うようにしている。この結果、割込制御装置１００における場合と同様に、ユーザレベルの割込処理プログラムは、スタック領域に退避されたＣＰＵ情報におけるＰＣの値を変更して、割込処理の終了後において任意のプログラムを実行させるような柔軟な制御を行うことができるものの、特権レベルを乗っ取るようなことはできない。
＜実施の形態２＞
以下、本発明の実施の形態２に係る割込制御装置について説明する。
【００４９】
＜構成＞
図５は、実施の形態２に係る割込制御装置３００の機能ブロック図である。
割込制御装置３００は、ＣＰＵ、メモリ等を備えるコンピュータの一部であり、機能的に見れば、同図に示すように、スタック領域１１０、割込情報記憶部１２０、退避部３５０、復元部３６０、制御部３７０及び保護領域３８０を有する。
【００５０】
この割込制御装置３００は、実施の形態１で示した割込制御装置１００と同等の構成要素を含むが、特権レベルの割込処理プログラムの実行中であっても、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付け得るようにしていながら、ユーザレベルのプログラムによる特権レベルの乗っ取りを防止するという特有な機構を有するものである。なお、割込制御装置３００の構成要素のうち、割込制御装置１００と同一の構成要素については図５中に図１と同一の符号を付して示しており、ここでは詳しい説明を省略する。
【００５１】
退避部３５０は、制御部３７０の指示に従い、実施の形態１で示したものと同様のＣＰＵ情報１３０をスタック領域１１０の現在のデータ格納位置に格納するとともにそのＣＰＵ情報１３０とＳＰ１３９とを保護領域３８０に格納する機能を有する。
復元部３６０は、制御部３７０の指示に従い、保護領域３８０から直前に退避されたＳＰ１３９の内容をＳＰ１３９に復元し、また保護領域３８０及びスタック領域１１０から直前に退避されたＣＰＵ情報を読み出して、保護領域３８０から読み出したＣＰＵ情報のうちの実行レベルフラグの部分が特権レベルを示す場合にはその保護領域３８０から読み出したＣＰＵ情報をＣＰＵに復元し、その実行レベルフラグの部分がユーザレベルを示す場合にはその保護領域３８０から読み出したＣＰＵ情報のうちの実行レベルフラグの部分と、スタック領域１１０から読み出したＣＰＵ情報の実行レベルフラグ以外の部分とを、ＣＰＵに復元する機能を有する。
【００５２】
制御部３７０は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合その割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２の割込マスクレベルフラグＩＭとを比較することで割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部３５０に指示してＣＰＵ情報を退避させてから、割込要因に対応する割込処理情報ＡＤにより特定される割込処理プログラムを対応する実行レベルＥＬＩＲで実行し、その割込処理プログラムの実行を終了した後に、復元部３６０に指示してその退避していたＣＰＵ情報の復元を行わせる機能を有する。
【００５３】
また、保護領域３８０は、特権レベルのプログラムしか書き込みできないように保護され、ラストインファーストアウト（ＬＩＦＯ）方式で読み書きが制御されるメモリ中の記憶領域である。この保護は、ＣＰＵ及びＯＳにより従来なされるいわゆるリング保護等で実現され、制御部３７０は、プログラムを解釈し実行する際にこの保護領域３８０に対してユーザレベルのプログラムがデータを書き込もうとすると、その書き込みを抑止し、システムエラーと扱う。
【００５４】
＜動作＞
以下、上述の構成を備える割込制御装置３００の動作について説明する。
図６は、割込制御装置３００の行う割込制御処理を示すフローチャートである。
まず、割込要因が発生すると、例えばＣＰＵ外部の割込コントローラ等により、割込情報記憶部１２０におけるその割込要因に対応する割込要求フラグＩＲがＨレベルにセットされる。
【００５５】
続いて制御部３７０は、割込要因の発生を検知すると、割込情報記憶部１２０に記憶されておりその発生した割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２中の割込マスクレベルフラグＩＭとを比較し（ステップＳ３１）、割込レベルＬＶの方が高い優先度を示すレベルである場合には、割込を受け付けると決定して割込要求フラグＩＲをＬレベルにリセットする（ステップＳ３２）。なお、ステップＳ３１の比較において割込レベルＬＶの方が割込マスクレベルフラグＩＭより高い優先度を示すレベルでないときには、割込を受け付けないと決定する。
【００５６】
割込要求を受け付けた後、制御部３７０は、退避部３５０に、ＣＰＵのＣＰＵ情報１３０をスタック領域１１０に退避させ、ＣＰＵ情報１３０及びＳＰ１３９を保護領域３８０に退避させる（ステップＳ３３）。なお、退避部３５０においては、スタック領域１１０のうちＳＰ１３９により特定できる部分にＣＰＵ情報１３０を格納して、その格納した分だけＳＰ１３９を変化させる。
【００５７】
ＣＰＵ情報１３０の退避がなされた後、制御部３７０は、ＣＰＵ情報１３０を更新する（ステップＳ３４）。即ち、制御部３７０は、割込要求を受け付けた割込要因に対応する実行レベルＥＬＩＲと同値をＰＳＷ１３２の実行レベルフラグＥＬに設定し、その割込要因に対応する割込レベルＬＶと同値をＰＳＷ１３２の割込マスクレベルフラグＩＭに設定し、その割込要因に対応する割込処理情報ＡＤに基づいて割込処理プログラムのアドレスをＰＣ１３１に設定する。
【００５８】
ステップＳ３４に続いて、制御部３７０は、ＰＣ１３１に従って、割込処理プログラムの実行を行う（ステップＳ３５）。この際に割込処理プログラムは対応する実行レベルＥＬＩＲで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
【００５９】
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部３７０は、復帰命令を読み出したら、ステップＳ３５を終了する。
なお、制御部３７０がある割込処理プログラムを実行している間において（ステップＳ３５）、別の割込要因が発生した場合には、その割込要因に対して図６に示すステップＳ３１からの一連の処理を行うことで、割込制御装置３００は、多重割込に対応している。
【００６０】
割込処理プログラムの実行を終了した後には、制御部３７０は、復元部３６０に保護領域３８０及びスタック領域１１０にステップＳ３３において退避していたＣＰＵ情報を復元させる。
この際、まず復元部３６０は、保護領域３８０からＳＰを読み出してＣＰＵに復元し、保護領域３８０及びスタック領域１１０からＣＰＵ情報を読み出して（ステップＳ３６）、読み出した分だけＳＰ１３９を更新して、保護領域３８０から読み出されたＣＰＵ情報中の実行レベルフラグがユーザレベルを示すか否かを判定し（ステップＳ３７）、ユーザレベルでなければつまり特権レベルであれば、保護領域３８０から読み出したＣＰＵ情報をＣＰＵに復元する（ステップＳ３８）。
【００６１】
また、ステップＳ３７においてユーザレベルであると判定した場合には、復元部３６０は、保護領域３８０から読み出した実行レベルフラグをＰＳＷ１３２中の実行レベルフラグＥＬとしてＣＰＵに復元するとともに、スタック領域１１０から読み出したＣＰＵ情報のうち実行レベルフラグ以外の部分をＰＳＷ１３２の内容としてＣＰＵに復元する（ステップＳ３９）。
【００６２】
ステップＳ３８又はステップＳ３９によりＣＰＵ情報が復元された後、制御部３７０は、Ｈレベルにセットされた割込要求フラグＩＲに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップＳ３１からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える（ステップＳ４０）。
以下、割込制御装置３００における割込制御の具体的動作について説明する。
【００６３】
特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクｂと、ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクｃ及びタスクｄとがあり、割込レベルの示す優先度はタスクｄが最も高く、続いてタスクｃ、タスクｂの順であることとし、まずタスクｂに対応する割込要因が発生してタスクｂに対応する割込処理プログラムが実行されている間に、タスクｃ、タスクｄの順で、対応する割込要因が発生することとして説明する。
【００６４】
図７は、割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。
まず、特権レベルのタスクｂが実行されており、これに対応してＰＳＷ１３２中の割込マスクレベルフラグＩＭは低い優先度を示しており、実行レベルフラグＥＬは特権レベルを示している。
【００６５】
時刻Ｔ４００において、タスクｃに対応する割込要因Ｃが発生して、その割込要因Ｃに対応する割込要求フラグＩＲがＨレベルにセットされ、時刻Ｔ４０１において、割込要因Ｂに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示しているため制御部３７０のステップＳ３１の判定の結果、割込が受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、ＳＰが保護領域３８０に退避され、ＣＰＵ情報１３０がスタック領域１１０及び保護領域３８０に退避され、その退避分だけＳＰが更新され、制御部３７０は、割込マスクレベルＩＭを更新し実行レベルフラグＥＬをユーザレベルにしてタスクｃの割込処理プログラムを実行し始める。
【００６６】
時刻Ｔ４０２において、タスクｃの割込処理プログラムが実行されている間に、タスクｄに対応する割込要因Ｄが発生し、割込要因Ｄに対応する割込要求フラグＩＲがＨレベルにセットされたとする。この割込要因Ｄに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示すため、制御部３７０のステップＳ３１の判定の結果、割込は受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、ＳＰが保護領域３８０に退避され、タスクｃの実行に関連していたＣＰＵ情報１３０は、スタック領域１１０及び保護領域３８０に退避され、その退避分だけＳＰが更新され、制御部３７０は、割込マスクレベルＩＭを更新し実行レベルフラグＥＬをユーザレベルにしてタスクｄの割込処理プログラムを実行し始める。従って、タスクｃの割込処理プログラムの実行は一時的に中断されることになる。
【００６７】
その後、時刻Ｔ４０４において、タスクｄの割込処理プログラム中の復帰命令が実行されると、復元部３６０は、保護領域３８０から、退避されていたＳＰを読み出してＣＰＵに復元し、また保護領域３８０及びスタック領域１１０から、退避されていたＣＰＵ情報を読み出して、その保護領域３８０から読み出した実行レベルフラグがユーザレベルを示すため、ステップＳ３９により、その実行レベルフラグと、スタック領域１１０から読み出したＣＰＵ情報のうち実行レベルフラグ以外の部分とを合わせて、ＣＰＵに復元する。これにより、以後、タスクｃの割込処理プログラムの実行が再開されることになる。
【００６８】
その後、タスクｃの割込処理プログラム中の復帰命令が実行されると、復元部３６０は、保護領域３８０から、退避されていたＳＰを読み出してＣＰＵに復元し、また保護領域３８０及びスタック領域１１０から、退避されていたＣＰＵ情報を読み出して、その保護領域３８０から読み出した実行レベルフラグが特権レベルを示すため、ステップＳ３８により、保護領域３８０から読み出したＣＰＵ情報をＣＰＵに復元する。これにより、タスクｂに対応する特権レベルの割込処理プログラムの実行が再開されることになる。
【００６９】
なお、タスクｄに対応するユーザレベルの割込処理プログラムは、実行中にスタック領域１１０に退避されているＣＰＵ情報のうち、例えば復帰アドレス等を任意のアドレスと書き換えることができ、これは有効にＰＣ等としてＣＰＵに復元されるようになる。しかしながら、もし、タスクｄに対応するユーザレベルの割込処理プログラムがスタック領域１１０の内容であるＣＰＵ情報のうち実行レベルまで書き換えて特権レベルの乗っ取りを行おうとしても、その割込処理プログラムからの復帰時に、実行レベルフラグについては保護領域３８０に退避されている内容がＣＰＵに復元されるので、その乗っ取りは行えない。また、ユーザレベルの割込処理プログラムによっては、保護領域３８０の内容を書き換えることはできない。
【００７０】
また、タスクｃに対応する割込処理プログラムが、実行中にスタック領域１１０に退避されているＣＰＵ情報を書き換えたとしても有効に働かず、その割込処理プログラムからの復帰時には、復帰先のタスクｂに対応する割込処理プログラムが特権レベルであるため、保護領域３８０に退避されているＣＰＵ情報がＣＰＵに復元されることになり、タスクｂの割込処理プログラムについては、中断されたときのＣＰＵ状態のまま、その実行が再開されることになる。
【００７１】
このように、割込制御装置３００は、ユーザレベルのプログラムの実行中において、割込が発生してユーザレベルの割込処理プログラムが実行されるようになった場合に、その割込処理プログラムがスタック領域にアクセスして有効に復帰アドレスを書き換える等を許容するものの、実行レベルフラグを不正に特権レベルに書き換えることについては抑止する。
＜実施の形態３＞
以下、本発明の実施の形態３に係る割込制御装置について説明する。
【００７２】
＜構成＞
図８は、実施の形態３に係る割込制御装置５００の機能ブロック図である。
割込制御装置５００は、ＣＰＵ、メモリ等を備えるコンピュータの一部であり、機能的に見れば、同図に示すように、スタック領域１１０、割込情報記憶部１２０、退避部５５０、復元部５６０、制御部５７０、保護領域５８０及び保護範囲管理部５９０を有する。
【００７３】
この割込制御装置５００は、実施の形態１で示した割込制御装置１００と同等の構成要素を含むが、実施の形態２で示した割込制御装置３００とはまた異なる構成により、特権レベルの割込処理プログラムの実行中であっても、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付け得るようにしていながら、ユーザレベルのプログラムによる特権レベルの乗っ取りを防止するという機能を実現するものである。なお、割込制御装置５００の構成要素のうち、割込制御装置１００と同一の構成要素については図８中に図１と同一の符号を付して示しており、ここでは詳しい説明を省略する。
【００７４】
保護範囲管理部５９０は、特権レベルのプログラムしか書き込みできないようにしたメモリ領域であって、保護終了アドレスＥＤＡ５９１、保護開始アドレスＳＴＡ５９２及び保護フラグＮＰＥ５９３を内容とする。各初期値は予めＯＳにより設定され、例えば、保護終了アドレスＥＤＡ５９１及び保護開始アドレスＳＴＡ５９２の初期値は共にスタック領域１１０にデータが格納されていない場合におけるＳＰ１３９の値であり、保護フラグＮＰＥ５９３の初期値はＬレベルである。
【００７５】
この保護範囲管理部５９０の内容は制御部５７０により参照され、保護フラグＮＰＥ５９３がＬレベルである場合には、保護開始アドレスＳＴＡ５９２で示されるスタック領域内メモリアドレスから保護終了アドレスＥＤＡ５９１で示されるスタック領域内メモリアドレスまでの範囲が、特権レベルのプログラムしか書き込みできないように保護され、保護フラグＮＰＥ５９３がＨレベルである場合には、保護開始アドレスＳＴＡ５９２が示すスタック領域内メモリアドレス＋１から保護終了アドレスＥＤＡ５９１で示されるスタック領域内メモリアドレスまでの範囲が、特権レベルのプログラムしか書き込みできないように保護される。
【００７６】
退避部５５０は、制御部５７０の指示に従い、保護範囲管理部５９０内の保護開始アドレスＳＴＡと保護フラグＮＰＥとを保護領域５８０に移し、実施の形態１で示したものと同様のＣＰＵ情報１３０をスタック領域１１０の現在のデータ格納位置つまりＳＰ１３９の示す位置に格納するとともに、その格納した分だけＳＰ１３９を更新し、そのＳＰ１３９の内容を保護開始アドレスＳＴＡ５９２として保護範囲管理部５９０に格納し、またＣＰＵ情報１３０の実行レベルフラグＥＬの内容を保護フラグＮＰＥ５９３として保護範囲管理部５９０に格納する機能を有する。
【００７７】
復元部５６０は、制御部５７０の指示に従い、保護範囲管理部５９０内の保護開始アドレスＳＴＡ５９２をＳＰ１３９に設定し、スタック領域１１０から直前に退避されたＣＰＵ情報を読み出して実行レベルフラグ以外の部分をＣＰＵに復元し、保護範囲管理部５９０内の保護フラグＮＰＥ５９３をＣＰＵのＰＳＷ１３２における実行レベルフラグＥＬとして復元し、保護領域５８０から直前に格納された保護開始アドレス及び保護フラグの組を読み出して保護範囲管理部５９０における保護開始アドレスＳＴＡ５９２及び保護フラグＮＰＥ５９３として設定する機能を有する。
【００７８】
制御部５７０は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合その割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２の割込マスクレベルフラグＩＭとを比較することで割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部５５０に指示してＣＰＵ情報を退避させてから、割込要因に対応する割込処理情報ＡＤにより特定される割込処理プログラムを対応する実行レベルＥＬＩＲで実行し、その割込処理プログラムの実行を終了した後に、復元部５６０に指示してその退避していたＣＰＵ情報の復元を行わせる機能を有する。なお、制御部５７０は、プログラムを解釈し実行するに際して、後述する命令実行処理を繰り返し行うことにより、スタック領域１１０内の特定範囲における内容の、ユーザレベルのプログラムによる書き換えを抑止する。
【００７９】
また、保護領域５８０は、特権レベルのプログラムしか書き込みできないように保護され、後書き先読み型（ＬＩＦＯ：Last In First Out）として読み書きが制御されるメモリ中の記憶領域である。この保護は、ＣＰＵ及びＯＳにより従来なされるいわゆるリング保護等で実現され、制御部５７０は、プログラムを解釈し実行する際にこの保護領域５８０に対してユーザレベルのプログラムがデータを書き込もうとすると、その書き込みを抑止し、システムエラーと扱う。
【００８０】
＜動作＞
以下、上述の構成を備える割込制御装置５００の動作について説明する。
まず、図９を用いて割込制御処理について説明し、次に図１０を用いて制御部５７０による命令実行処理について説明する。
図９は、割込制御装置５００の行う割込制御処理を示すフローチャートである。
【００８１】
まず、割込要因が発生すると、例えばＣＰＵ外部の割込コントローラ等により、割込情報記憶部１２０におけるその割込要因に対応する割込要求フラグＩＲがＨレベルにセットされる。
続いて制御部５７０は、割込要因の発生を検知すると、割込情報記憶部１２０に記憶されておりその発生した割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２中の割込マスクレベルフラグＩＭとを比較し（ステップＳ５１）、割込レベルＬＶの方が高い優先度を示すレベルである場合には、割込を受け付けると決定して割込要求フラグＩＲをＬレベルにリセットする（ステップＳ５２）。なお、ステップＳ５１の比較において割込レベルＬＶの方が割込マスクレベルフラグＩＭより高い優先度を示すレベルでないときには、割込を受け付けないと決定する。
【００８２】
割込要求を受け付けた後、制御部５７０は、退避部５５０に、ＣＰＵのＣＰＵ情報１３０をスタック領域１１０に退避させるよう指示する（ステップＳ５３）。この指示を受けて退避部５５０は、スタック領域１１０のうちＳＰ１３９により特定できる部分にＣＰＵ情報１３０を格納して、その格納した分だけＳＰ１３９を変化させ、保護範囲管理部５９０内の保護開始アドレスＳＴＡ及び保護フラグＮＰＥを保護領域５８０に退避し（ステップＳ５４）、ＳＰ１３９の内容を、保護範囲管理部５９０内に保護開始アドレスＳＴＡ５９２として設定し、ＣＰＵ情報１３０中の実行レベルフラグの値を、保護範囲管理部５９０内に保護フラグＮＰＥ５９３として設定する（ステップＳ５５）。
【００８３】
なお、この割込制御装置５００において特権レベルはＬレベルで表現され、ユーザレベルはＨレベルで表現される。従って、割込要求が受け付けられた時点で実行されていたプログラムの実行レベルが特権レベル（Ｌ）であれば、ステップＳ５５により保護フラグＮＰＥ５９３はＬレベルに設定され、割込要求が受け付けられた時点で実行されていたプログラムの実行レベルがユーザレベル（Ｈ）であれば、ステップＳ５５により保護フラグＮＰＥ５９３はＨレベルに設定される。
【００８４】
退避部５５０によりＣＰＵ情報１３０の退避がなされた後、制御部５７０は、ＣＰＵ情報１３０を更新する（ステップＳ５６）。即ち、制御部５７０は、割込要求を受け付けた割込要因に対応する実行レベルＥＬＩＲと同値をＰＳＷ１３２の実行レベルフラグＥＬに設定し、その割込要因に対応する割込レベルＬＶと同値をＰＳＷ１３２の割込マスクレベルフラグＩＭに設定し、その割込要因に対応する割込処理情報ＡＤに基づいて割込処理プログラムのアドレスをＰＣ１３１に設定する。
【００８５】
ステップＳ５６に続いて、制御部５７０は、ＰＣ１３１に従って、割込処理プログラムの実行を行う（ステップＳ５７）。この際に割込処理プログラムは対応する実行レベルＥＬＩＲで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
【００８６】
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部５７０は、復帰命令を読み出したら、ステップＳ５７を終了する。
なお、制御部５７０がある割込処理プログラムを実行している間において（ステップＳ５７）、別の割込要因が発生した場合には、その割込要因に対して図９に示すステップＳ５１からの一連の処理を行うことで、割込制御装置５００は、多重割込に対応している。
【００８７】
割込処理プログラムの実行を終了した後には、制御部５７０は、復元部５６０に、スタック領域１１０に退避していたＣＰＵ情報を復元するよう指示する。
この指示を受けて、まず復元部５６０は、保護範囲管理部５９０内の保護開始アドレスＳＴＡ５９２をＳＰ１３９に復元し、保護範囲管理部５９０内の保護フラグＮＰＥ５９３をＰＳＷ１３２の実行レベルフラグＥＬに設定し（ステップＳ５８）、保護領域５８０に直前に退避されていた保護開始アドレスＳＴＡ及び保護フラグＮＰＥを保護範囲管理部５９０に復元し（ステップＳ５９）、ＳＰ１３９の示すスタック領域に退避されているＣＰＵ情報を読み出して、その読み出した分だけＳＰ１３９を更新し、そのＣＰＵ情報のうち実行レベルフラグ以外の部分をＣＰＵに復元する（ステップＳ６０）。
【００８８】
ＣＰＵ情報が復元された後、制御部５７０は、Ｈレベルにセットされた割込要求フラグＩＲに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップＳ５１からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える（ステップＳ６１）。
図１０は、割込制御装置５００の行う命令実行処理を示すフローチャートである。
【００８９】
制御部５７０は、プログラムを解釈して実行する際に、プログラム中の１命令毎について同図に示す命令実行処理を行う。
まず、制御部５７０は、ＰＣ１３１に示されるメモリアドレスに位置している命令を読み出して解読し（ステップＳ７１）、続いて、ＰＳＷ１３２の実行レベルフラグＥＬはユーザレベル（Ｈ）であるか否かを判定し（ステップＳ７２）、ユーザレベル（Ｈ）でなく特権レベル（Ｌ）であればその解読した命令を解読結果に応じて実行する（ステップＳ７８）。なお、ステップＳ７１の命令読出し機能及びステップＳ７８の命令実行機能は従来のＣＰＵの有する機能と同一である。
【００９０】
また、ステップＳ７２においてＰＳＷ１３２の実行レベルフラグＥＬがユーザレベル（Ｈ）であった場合には、制御部５７０は、ステップＳ７１で解読した命令がメモリへデータを書き込む命令であるか否かを判定し（ステップＳ７３）、書き込む命令でなければ、命令を解読結果に応じて実行するが（ステップＳ７８）、書き込む命令であれば、保護範囲管理部５９０内の保護フラグＮＰＥ５９３がＨレベルつまりユーザレベル（Ｈ）を示しているか否かを判定する（ステップＳ７４）。
【００９１】
ステップＳ７４において保護フラグＮＰＥ５９３がユーザレベル（Ｈ）を示していると判定した場合には、制御部５７０は、そのメモリに書き込む命令の書き込み対象のメモリアドレスが、保護範囲管理部５９０内の保護開始アドレスＳＴＡ５９２が示すアドレス＋１から保護終了アドレスＥＤＡ５９１が示すアドレスの範囲内に含まれているか否かを判定し（ステップＳ７７）、その範囲内に含まれていると判定したときにはシステムエラーと扱う等の異常処理を行い（ステップＳ７６）、その範囲内に含まれていないと判定したときには、そのデータを書き込む命令を実行する（ステップＳ７８）。
【００９２】
また、ステップＳ７４において保護フラグＮＰＥ５９３がユーザレベル（Ｈ）でなく特権レベル（Ｌ）を示していると判定した場合には、制御部５７０は、ステップＳ７１で解読したメモリにデータを書き込む命令の書き込み対象のメモリアドレスが、保護範囲管理部５９０内の保護開始アドレスＳＴＡ５９２が示すアドレスから保護終了アドレスＥＤＡ５９１が示すアドレスの範囲内に含まれているか否かを判定し（ステップＳ７５）、その範囲内に含まれていると判定したときにはシステムエラーと扱う等の異常処理を行い（ステップＳ７６）、その範囲内に含まれていないと判定したときには、そのデータを書き込む命令を実行する（ステップＳ７８）。
【００９３】
以下、実施の形態２で割込制御装置３００の動作説明に用いた図７を、再び参照して割込制御装置５００における割込制御の具体的動作について説明する。
特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクｂと、ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクｃ及びタスクｄとがあり、割込レベルの示す優先度はタスクｄが最も高く、続いてタスクｃ、タスクｂの順であることとし、まずタスクｂに対応する割込要因が発生してタスクｂに対応する割込処理プログラムが実行されている間に、タスクｃ、タスクｄの順で、対応する割込要因が発生することとして説明する。
【００９４】
まず、特権レベルのタスクｂが実行されており、これに対応してＰＳＷ１３２中の割込マスクレベルフラグＩＭは低い優先度を示しており、実行レベルフラグＥＬは特権レベルを示している。
時刻Ｔ４００において、タスクｃに対応する割込要因Ｃが発生して、その割込要因Ｃに対応する割込要求フラグＩＲがＨレベルにセットされ、時刻Ｔ４０１において、割込要因Ｂに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示しているため制御部５７０のステップＳ５１の判定の結果、割込が受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、ＣＰＵ情報１３０がスタック領域１１０に退避され、保護範囲管理部５９０内の保護フラグはＬレベルに設定され、保護開始アドレスＳＴＡから保護終了アドレスＥＤＡまでがその退避されたＣＰＵ情報を含むように設定され、制御部５７０は、割込マスクレベルＩＭを更新し実行レベルフラグＥＬをユーザレベルにしてタスクｃの割込処理プログラムを実行し始める。
【００９５】
このタスクｃの割込処理プログラムは、保護範囲管理部５９０に基づく制御部５７０の命令実行処理（図１０）により、スタック領域１１０に退避されたＣＰＵ情報を書き換えることができない。
続いて、時刻Ｔ４０２において、タスクｃの割込処理プログラムが実行されている間に、タスクｄに対応する割込要因Ｄが発生し、割込要因Ｄに対応する割込要求フラグＩＲがＨレベルにセットされたとする。この割込要因Ｄに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示すため、制御部５７０のステップＳ５１の判定の結果、割込は受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、タスクｃの実行に関連していたＣＰＵ情報１３０は、スタック領域１１０に退避され、保護範囲管理部５９０内の保護フラグはＨレベルに設定され、保護開始アドレスＳＴＡから保護終了アドレスＥＤＡまでが、それまでに退避された全てのＣＰＵ情報を含むように設定され、制御部５７０は、割込マスクレベルＩＭを更新し実行レベルフラグＥＬをユーザレベルにしてタスクｄの割込処理プログラムを実行し始める。従って、タスクｃの割込処理プログラムの実行は一時的に中断されることになる。
【００９６】
このとき実行され始めたタスクｄの割込処理プログラムは、保護範囲管理部５９０に基づく制御部５７０の命令実行処理（図１０）により、スタック領域１１０に最後に退避されたＣＰＵ情報のうちの一部だけを書き換えることができるだけで、他の部分や他のＣＰＵ情報を書き換えることはできない。その書き換えることのできるＣＰＵ情報の一部が例えば、ＰＣから退避された復帰アドレスである。
【００９７】
その後、時刻Ｔ４０４において、タスクｄの割込処理プログラム中の復帰命令が実行されると、復元部５６０は、保護範囲管理部５９０内の保護開始アドレスＳＴＡ５９２をＳＰ１３９に復元し、保護範囲管理部５９０内の保護フラグＮＰＥ５９３をＰＳＷ１３２の実行レベルフラグＥＬに設定し、保護領域５８０に直前に退避されていた保護開始アドレスＳＴＡ及び保護フラグＮＰＥを保護範囲管理部５９０に復元し、ＳＰ１３９の示すスタック領域に退避されているＣＰＵ情報を読み出して、その読み出した分だけＳＰ１３９を更新し、そのＣＰＵ情報のうち実行レベルフラグ以外の部分をＣＰＵに復元する。これにより、以後、タスクｃの割込処理プログラムの実行が再開されることになる。
【００９８】
その後、タスクｃの割込処理プログラム中の復帰命令が実行されると、復元部５６０は、前回と同様にＣＰＵ情報のＣＰＵへの復元を行う。これにより、以後、タスクｂに対応する特権レベルの割込処理プログラムの実行が再開されることになる。
なお、タスクｄに対応するユーザレベルの割込処理プログラムは、実行中にスタック領域１１０に退避されているＣＰＵ情報のうちの一部、例えば復帰アドレス等を任意のアドレスと書き換えることができ、これは有効にＰＣ等としてＣＰＵに復元されるようになる。しかしながら、もし、タスクｄに対応するユーザレベルの割込処理プログラムがスタック領域１１０の内容であるＣＰＵ情報のうち実行レベルまで書き換えて特権レベルの乗っ取りを行おうとしても、その割込処理プログラムからの復帰時に、実行レベルフラグについては保護範囲管理部５９０に退避されている内容がＣＰＵに復元されるので、その乗っ取りは行えない。また、ユーザレベルの割込処理プログラムによっては、保護範囲管理部５９０及び保護領域５８０の内容を書き換えることはできない。
【００９９】
また、タスクｄに対応する割込処理プログラムとタスクｃに対応する割込処理プログラムとの両方とも、スタック領域１１０に退避されているタスクｂに係るＣＰＵ情報を書き換えることはできず、ユーザレベルの割込処理プログラムによって特権レベルのプログラムの実行用の情報が不正に書き換えられることはない。
＜実施の形態４＞
以下、本発明の実施の形態４に係る割込制御装置について説明する。
【０１００】
＜構成＞
図１１は、実施の形態４に係る割込制御装置７００の機能ブロック図である。
割込制御装置７００は、ＣＰＵ、メモリ等を備えるコンピュータの一部であり、機能的に見れば、同図に示すように、スタック領域１１０、割込情報記憶部１２０、退避部７５０、復元部７６０、制御部７７０及び保護領域７８０を有する。
【０１０１】
この割込制御装置７００は、実施の形態３で示した割込制御装置５００の一部だけを変形したものであり、割込制御装置５００と同様に、特権レベルの割込処理プログラムの実行中であっても、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付け得るようにしていながら、ユーザレベルのプログラムによる特権レベルの乗っ取りを防止するという機能を実現するものである。なお、割込制御装置７００の構成要素のうち、割込制御装置５００と同一の構成要素については図１１中に図１或いは図８と同一の符号を付して示しており、ここでは詳しい説明を省略する。
【０１０２】
保護領域７８０は、退避部７５０によりＳＰ１３９の内容とＰＳＷ１３２の実行レベルフラグＥＬの値とが対にして退避されための記憶領域であり、この記憶領域は、特権レベルのプログラムしか書き込みできないように保護され、後書き先読み型（ＬＩＦＯ：Last In First Out）として読み書きが制御されるメモリ中の記憶領域である。この保護は、ＣＰＵ及びＯＳにより従来なされるいわゆるリング保護等で実現され、制御部７７０は、プログラムを解釈し実行する際にこの保護領域７８０に対してユーザレベルのプログラムがデータを書き込もうとすると、その書き込みを抑止し、システムエラーと扱う。
【０１０３】
退避部７５０は、制御部７７０の指示に従い、実施の形態３で示したものと同様のＣＰＵ情報１３０をスタック領域１１０の現在のデータ格納位置つまりＳＰ１３９の示す位置に退避するとともに、その退避した分だけＳＰ１３９の値を更新し、そのＳＰ１３９の内容とＰＳＷ１３２の実行レベルフラグＥＬの値とを対にして保護領域７８０に退避する機能を有する。
【０１０４】
復元部７６０は、制御部７７０の指示に従い、保護領域７８０に直前に退避されているＳＰの値と実行レベルフラグＥＬの値との対を読み出して、それぞれＳＰ１３９とＰＳＷ１３２中の実行レベルフラグＥＬとに設定し、スタック領域１１０内でＳＰ１３９の指し示す部分に退避されているＣＰＵ情報を読み出して実行レベルフラグ以外の部分をＣＰＵに復元し、ＣＰＵ情報を読み出した分だけＳＰ１３９を更新する機能を有する。
【０１０５】
制御部７７０は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合その割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２の割込マスクレベルフラグＩＭとを比較することで割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部７５０に指示してＣＰＵ情報を退避させてから、割込要因に対応する割込処理情報ＡＤにより特定される割込処理プログラムを対応する実行レベルＥＬＩＲで実行し、その割込処理プログラムの実行を終了した後に、復元部７６０に指示してその退避していたＣＰＵ情報の復元を行わせる機能を有する。なお、制御部７７０は、プログラムを解釈し実行するに際して、後述する命令実行処理を繰り返し行うことにいより、保護領域７８０において、特権レベルを示す実行レベルフラグと対にして退避されたＳＰが示すスタック領域１１０内のＣＰＵ情報についての、ユーザレベルのプログラムによる書き換えを抑止する。
【０１０６】
＜動作＞
以下、上述の構成を備える割込制御装置７００の動作について説明する。
まず、図１２を用いて割込制御処理について説明し、次に図１３を用いて制御部７７０による命令実行処理について説明する。
図１２は、割込制御装置７００の行う割込制御処理を示すフローチャートである。
【０１０７】
まず、割込要因が発生すると、例えばＣＰＵ外部の割込コントローラ等により、割込情報記憶部１２０におけるその割込要因に対応する割込要求フラグＩＲがＨレベルにセットされる。
続いて制御部７７０は、割込要因の発生を検知すると、割込情報記憶部１２０に記憶されておりその発生した割込要因に対応する割込レベルＬＶと、ＰＳＷ１３２中の割込マスクレベルフラグＩＭとを比較し（ステップＳ８１）、割込レベルＬＶの方が高い優先度を示すレベルである場合には、割込を受け付けると決定して割込要求フラグＩＲをＬレベルにリセットする（ステップＳ８２）。なお、ステップＳ８１の比較において割込レベルＬＶの方が割込マスクレベルフラグＩＭより高い優先度を示すレベルでないときには、割込を受け付けないと決定する。
【０１０８】
割込要求を受け付けた後、制御部７７０は、退避部７５０に、ＣＰＵのＣＰＵ情報１３０をスタック領域１１０に退避させるよう指示する（ステップＳ８３）。この指示を受けて退避部７５０は、スタック領域１１０のうちＳＰ１３９により特定できる部分にＣＰＵ情報１３０を退避して（ステップＳ８３）、その格納した分だけＳＰ１３９を変化させ、ＳＰ１３９の内容とＰＳＷ１３２の実行レベルフラグＥＬの値とを対にして保護領域７８０に退避する（ステップＳ８４）。
【０１０９】
退避部７５０によりＣＰＵ情報１３０の退避がなされた後、制御部７７０は、ＣＰＵ情報１３０を更新する（ステップＳ８５）。即ち、制御部７７０は、割込要求を受け付けた割込要因に対応する実行レベルＥＬＩＲと同値をＰＳＷ１３２の実行レベルフラグＥＬに設定し、その割込要因に対応する割込レベルＬＶと同値をＰＳＷ１３２の割込マスクレベルフラグＩＭに設定し、その割込要因に対応する割込処理情報ＡＤに基づいて割込処理プログラムのアドレスをＰＣ１３１に設定する。
【０１１０】
ステップＳ８５に続いて、制御部７７０は、ＰＣ１３１に従って、割込処理プログラムの実行を行う（ステップＳ８６）。この際に割込処理プログラムは対応する実行レベルＥＬＩＲで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
【０１１１】
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部７７０は、復帰命令を読み出したら、ステップＳ８６を終了する。
なお、制御部７７０がある割込処理プログラムを実行している間において（ステップＳ８６）、別の割込要因が発生した場合には、その割込要因に対して図１２に示すステップＳ８１からの一連の処理を行うことで、割込制御装置７００は、多重割込に対応している。
【０１１２】
割込処理プログラムの実行を終了した後には、制御部７７０は、復元部７６０に、スタック領域１１０に退避していたＣＰＵ情報を復元するよう指示する。
この指示を受けて、まず復元部７６０は、保護領域７８０内に退避されているＳＰの値をＳＰ１３９に設定し、退避されている実行レベルフラグの値をＰＳＷ１３２の実行レベルフラグＥＬに設定し（ステップＳ８７）、ＳＰ１３９が指し示すスタック領域１１０内のＣＰＵ情報のうち実行レベルフラグ以外の部分をＣＰＵに復元する（ステップＳ８８）。
【０１１３】
ＣＰＵ情報が復元された後、制御部７７０は、Ｈレベルにセットされた割込要求フラグＩＲに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップＳ８１からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える（ステップＳ８９）。
図１３は、割込制御装置７００の行う命令実行処理を示すフローチャートである。
【０１１４】
制御部７７０は、プログラムを解釈して実行する際に、プログラム中の１命令毎について同図に示す命令実行処理を行う。
まず、制御部７７０は、ＰＣ１３１に示されるメモリアドレスに位置している命令を読み出して解読し（ステップＳ９１）、続いて、ＰＳＷ１３２の実行レベルフラグＥＬはユーザレベルであるか否かを判定し（ステップＳ９２）、ユーザレベルでなく特権レベルであればその解読した命令を解読結果に応じて実行する（ステップＳ９６）。なお、ステップＳ９１の命令読出し機能及びステップＳ９６の命令実行機能は従来のＣＰＵの有する機能と同一である。
【０１１５】
また、ステップＳ９２においてＰＳＷ１３２の実行レベルフラグＥＬがユーザレベルであった場合には、制御部７７０は、ステップＳ９１で解読した命令がメモリへデータを書き込む命令であるか否かを判定し（ステップＳ９３）、書き込む命令でなければ、命令を解読結果に応じて実行するが（ステップＳ９６）、書き込む命令であれば、その命令の書き込み対象のメモリアドレスが、保護領域７８０内において特権レベルを示す実行レベルフラグと対にして格納されているＳＰの内容で示されるところのＣＰＵ情報の分量のスタック領域１１０の範囲内に含まれているか否かを判定する（ステップＳ９４）。
【０１１６】
ステップＳ９４において、その範囲内に書き込み対象のメモリアドレスが含まれていると判定したときには、制御部７７０は、システムエラーと扱う等の異常処理を行い（ステップＳ９５）、その範囲内に書き込み対象のメモリアドレスが含まれていないと判定したときには、制御部７７０は、その書き込み命令を実行する（ステップＳ９６）。
このステップＳ９４に基づく制御により、スタック領域１１０に退避されているＣＰＵ情報のうち、割込により実行が一時的に中断されている特権レベルのプログラムの実行状態を示すＣＰＵ情報については、ユーザレベルの割込処理プログラムによる書き換えが抑止されるが、そのスタック領域１１０に退避されているＣＰＵ情報のうち、割込により実行が一時的に中断されているユーザレベルのプログラムの実行状態を示すＣＰＵ情報については、ユーザレベルの割込処理プログラムによる書き換えが許容されることになる。
【０１１７】
以下、実施の形態３で割込制御装置５００の動作説明に用いた図７を、再び参照して割込制御装置７００における割込制御の具体的動作について説明する。
特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクｂと、ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクｃ及びタスクｄとがあり、割込レベルの示す優先度はタスクｄが最も高く、続いてタスクｃ、タスクｂの順であることとし、まずタスクｂに対応する割込要因が発生してタスクｂに対応する割込処理プログラムが実行されている間に、タスクｃ、タスクｄの順で、対応する割込要因が発生することとして説明する。
【０１１８】
まず、特権レベルのタスクｂが実行されており、これに対応してＰＳＷ１３２中の割込マスクレベルフラグＩＭは低い優先度を示しており、実行レベルフラグＥＬは特権レベルを示している。
時刻Ｔ４００において、タスクｃに対応する割込要因Ｃが発生して、その割込要因Ｃに対応する割込要求フラグＩＲがＨレベルにセットされ、時刻Ｔ４０１において、割込要因Ｂに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示しているため制御部７７０のステップＳ８１の判定の結果、割込が受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、ＣＰＵ情報１３０がスタック領域１１０に退避され、保護領域７８０内にＳＰと特権レベルを示す実行レベルフラグとが対にして退避され、制御部７７０は、割込マスクレベルＩＭを更新し実行レベルフラグＥＬをユーザレベルにしてタスクｃの割込処理プログラムを実行し始める。
【０１１９】
このタスクｃの割込処理プログラムは、制御部７７０の命令実行処理（図１３）により、スタック領域１１０に退避されたタスクｂに係るＣＰＵ情報を書き換えることができない。
続いて、時刻Ｔ４０２において、タスクｃの割込処理プログラムが実行されている間に、タスクｄに対応する割込要因Ｄが発生し、割込要因Ｄに対応する割込要求フラグＩＲがＨレベルにセットされたとする。この割込要因Ｄに対応する割込レベルＬＶは割込マスクレベルＩＭより高い優先度を示すため、制御部７７０のステップＳ８１の判定の結果、割込は受け付けられ、その割込要求フラグＩＲはＬレベルにリセットされる。その後、タスクｃの実行に関連していたＣＰＵ情報１３０は、スタック領域１１０に退避され、保護領域７８０内にＳＰとユーザレベルを示す実行レベルフラグとが対にして退避され、制御部７７０は、割込マスクレベルＩＭを更新し実行レベルフラグＥＬをユーザレベルにしてタスクｄの割込処理プログラムを実行し始める。従って、タスクｃの割込処理プログラムの実行は一時的に中断されることになる。
【０１２０】
このとき実行され始めたタスクｄの割込処理プログラムは、制御部７７０の命令実行処理（図１３）により、スタック領域１１０に最後に退避されたタスクｃに係るＣＰＵ情報を書き換えることができるだけで、タスクｂに係るＣＰＵ情報を書き換えることはできない。
その後、時刻Ｔ４０４において、タスクｄの割込処理プログラム中の復帰命令が実行されると、復元部７６０は、保護領域７８０内からＳＰ１３９とＰＳＷ１３２の実行レベルフラグＥＬとを復元し、ＳＰ１３９の指し示すスタック領域１１０内のＣＰＵ情報のうち実行レベルフラグ以外の部分をＣＰＵに復元する。これにより、以後、タスクｃの割込処理プログラムの実行が再開されることになる。
【０１２１】
その後、タスクｃの割込処理プログラム中の復帰命令が実行されると、復元部７６０は、前回と同様にＣＰＵ情報のＣＰＵへの復元を行う。これにより、以後、タスクｂに対応する特権レベルの割込処理プログラムの実行が再開されることになる。
なお、タスクｄに対応するユーザレベルの割込処理プログラムは、実行中にスタック領域１１０に退避されているＣＰＵ情報のうち、タスクｃに係るＣＰＵ情報を書き換えることができ、これにより、例えば復帰アドレス等を任意のアドレスと書き換えることができ、これは有効にＰＣ等としてＣＰＵに復元されるようになる。しかしながら、もし、タスクｄに対応するユーザレベルの割込処理プログラムがスタック領域１１０の内容であるＣＰＵ情報のうち実行レベルまで書き換えて特権レベルの乗っ取りを行おうとしても、その割込処理プログラムからの復帰時に、実行レベルフラグについては保護領域７８０に退避されている内容がＣＰＵに復元されるので、その乗っ取りは行えない。また、ユーザレベルの割込処理プログラムによっては、保護領域７８０の内容を書き換えることはできない。
【０１２２】
また、タスクｄに対応する割込処理プログラムとタスクｃに対応する割込処理プログラムとの両方とも、スタック領域１１０に退避されているタスクｂに係るＣＰＵ情報を書き換えることはできず、ユーザレベルの割込処理プログラムによって特権レベルのプログラムの実行用の情報が不正に書き換えられることはない。
＜補足＞
以上、本発明に係る割込制御装置の実施の形態１〜４について説明したが、実施の形態で示した割込制御装置を以下に示すように部分的に変形することもできる。
（１）実施の形態に係る割込制御装置を構成する各機能部の機能分担は、実施の形態で示したものに限定されるものではない。例えば、制御部、退避部及び復元部は、一体となってＣＰＵ内の一機能ブロックとして実装されることとしてもよいし、その機能の一部をＯＳ等の特権レベルのプログラムのＣＰＵでの実行により実現してもよい。
（２）実施の形態に係る割込制御装置においては、割込情報記憶部１２０の内容は、ＯＳによりシステム起動時等に設定されることとしたが、ＯＳ等において、ユーザレベルのプログラムからの、ユーザレベルの割込処理プログラムの登録要求を受け付けて、その登録要求に従って、割込情報記憶部１２０の内容を更新することとしてもよい。但し、このような登録要求に対してＯＳ等は、割込情報記憶部１２０内に登録する実行レベルＥＬＩＲを必ずユーザレベルにする必要がある。
（３）実施の形態では、割込に際して退避及び復元の対象となるＣＰＵ情報を、ＰＳＷ及びＰＣとしたが、ＣＰＵ情報に、ＣＰＵのいくらかの汎用レジスタ或いは特殊レジスタの内容を含めることとしてもよい。
（４）実施の形態１〜４では、実行レベルとしては、ユーザレベルと特権レベルとの２段階のみを示したが、３段階以上の実行レベルが存在することとしてもよい。その３段階以上の実行レベルは、実行レベルが高いほどコンピュータ資源の利用に係る権限範囲が広く、多くのコンピュータ資源を利用できる。この３段階以上の実行レベルも、高レベルと低レベルとに大別することが可能であり、この場合、高レベルはＯＳ等の信頼性の高いプログラムに付与されている実行レベルの総称となり、低レベルは、不正プログラムが含まれ得るユーザプログラムに対して付与されている実行レベルの総称となる。
（５）実施の形態１に係る割込処理装置は、割込マスクレベルフラグＩＭと割込レベルＬＶとの比較み優先度を比較することとしたが、この優先度の比較は、実行レベルフラグＥＬと実行レベルＥＬＩＲとが一致する場合に限って行うこととしてもよいし、この優先度の比較を省略して本発明に係る割込処理装置を実現してもよい。
（６）実施の形態３では、保護範囲管理部５９０内の保護フラグＮＰＥがユーザレベルを示す場合にはスタック領域中、保護開始アドレスＳＴＡが示すアドレス＋１から保護終了アドレスＥＤＡが示すアドレスまでを、ユーザレベルのプログラムからは書き換えられないように保護したが、保護開始アドレスＳＴＡが示すアドレスにＣＰＵ情報の分量を加えて得られるアドレスから保護終了アドレスＥＤＡが示すアドレスまでを、ユーザレベルのプログラムからは書き換えられないように保護することとしてもよい。
（７）実施の形態４では、保護領域内にＳＰと実行レベルＥＬとを対にして退避することとしたが、実行レベルＥＬの退避を省略し、実行レベルに関わらず、保護領域内に格納されたＳＰが指し示すスタック領域内のＣＰＵ情報のユーザレベルプログラムによる書き換えを抑止することとしてもよい。
【産業上の利用可能性】
【０１２３】
本発明は、プログラムを複数の実行レベルに区分してコンピュータ資源の利用可能範囲に差を設けたコンピュータシステムにおける割込制御に利用できる。
【図面の簡単な説明】
【０１２４】
【図１】本発明の実施の形態１に係る割込制御装置１００の機能ブロック図である。
【図２】割込制御装置１００の行う割込制御処理を示すフローチャートである。
【図３】割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。
【図４】実施の形態１の変形例に係る割込制御装置２００の機能ブロック図である。
【図５】実施の形態２に係る割込制御装置３００の機能ブロック図である。
【図６】割込制御装置３００の行う割込制御処理を示すフローチャートである。
【図７】割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。
【図８】実施の形態３に係る割込制御装置５００の機能ブロック図である。
【図９】割込制御装置５００の行う割込制御処理を示すフローチャートである。
【図１０】割込制御装置５００の行う命令実行処理を示すフローチャートである。
【図１１】実施の形態３の変形例に係る割込制御装置７００の機能ブロック図である。
【図１２】割込制御装置７００の行う割込制御処理を示すフローチャートである。
【図１３】割込制御装置７００の行う命令実行処理を示すフローチャートである。
【符号の説明】
【０１２５】
１００、２００、３００、５００、７００    割込制御装置
１５０、３５０、５５０、７５０    退避部
１６０、２６０、３６０、５６０、７６０    復元部
１７０、３７０、５７０、７７０    制御部
３８０、５８０、７８０    保護領域
１１０    スタック領域
１２０    割込情報記憶部
１３０    ＣＰＵ情報
１３１    ＰＣ
１３２    ＰＳＷ
１３９    ＳＰ
１４０    比較部
１６１    ＯＲ論理ゲート
２６２    異常検出部
５９０    保護範囲管理部
【図１】
2005316599.tif 000003
【図２】
2005316599.tif 000004
【図３】
2005316599.tif 000005
【図４】
2005316599.tif 000006
【図５】
2005316599.tif 000007
【図６】
2005316599.tif 000008
【図７】
2005316599.tif 000009
【図８】
2005316599.tif 000010
【図９】
2005316599.tif 000011
【図１０】
2005316599.tif 000012
【図１１】
2005316599.tif 000013
【図１２】
2005316599.tif 000014
【図１３】
2005316599.tif 000015