JP2005316599A - 割込制御装置 - Google Patents

割込制御装置 Download PDF

Info

Publication number
JP2005316599A
JP2005316599A JP2004131692A JP2004131692A JP2005316599A JP 2005316599 A JP2005316599 A JP 2005316599A JP 2004131692 A JP2004131692 A JP 2004131692A JP 2004131692 A JP2004131692 A JP 2004131692A JP 2005316599 A JP2005316599 A JP 2005316599A
Authority
JP
Japan
Prior art keywords
interrupt
level
cpu
execution
information
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.)
Pending
Application number
JP2004131692A
Other languages
English (en)
Inventor
Masanobu Kuboshima
昌伸 久保島
Toshiya Kai
俊也 甲斐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2004131692A priority Critical patent/JP2005316599A/ja
Priority to CN200510066132.5A priority patent/CN1690971A/zh
Priority to US11/115,270 priority patent/US20050240701A1/en
Publication of JP2005316599A publication Critical patent/JP2005316599A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】 ユーザレベルの割込処理プログラムにより不正に特権レベルの乗っ取りがなされないように制御する割込制御装置を提供する。
【解決手段】 割込制御装置100の割込情報記憶部120は、割込要因毎に、割込処理プログラムを示す情報ADと、実行レベルELIR(高い特権レベルか低いユーザレベル)とを記憶しており、比較部140は、割込要因が発生した場合に、ELIRとCPUにおけるPSW中の実行レベルELとを比較し、ELIRの方が低くない場合には制御部170は、退避部150にCPU情報130を退避させ、情報ADの示す割込処理プログラムをELIRの実行レベルで実行してから、復元部160にCPU情報を復元させる。復元部160は、退避されているCPU情報を読み出し、PSWのELがユーザレベルなら読み出したCPU情報中のELをユーザレベルに強制してから、CPU情報のCPUへの復元を行う。
【選択図】 図1

Description

本発明は、コンピュータにおける割込制御に関し、特に、割込処理プログラムの実行前後にCPU状態を示すデータを退避及び復元する技術に関する。
従来、コンピュータ資源の管理等を行うオペレーティングシステム(OS)のアプリケーションプログラム(AP)による破壊を防ぐ等のために、少なくとも2種類の動作モードで動作する中央演算処理装置(CPU)を活用して動作モードの制御を行うコンピュータシステムが普及している。
この動作モードは、特権モード、カーネルモード、スーパバイザコール(SVC)モード等と称されるコンピュータ資源の利用が制限されないモードと、ユーザモード、非特権モード、プロブレムモード等と称されるコンピュータ資源の利用が制限されるモードとに大別できる。OSやAPの各プログラムには、どちらの動作モードで実行されるべきかを示す実行レベルが何らかの手法により割り当てられる。以下、メモリ、入出力装置等であるコンピュータ資源の利用が制限されないモードで実行されるべきプログラムの実行レベルを特権レベルといい、利用が制限されるモードで実行されるべきプログラムの実行レベルをユーザレベルという。
通常、特権レベルはOSの中核を構成するプログラムに予め割り当てられるものであり、その他のプログラム、つまりAPやOSの中核でない部分を構成するプログラムは、ユーザレベルとして取り扱われている。
従来のコンピュータシステムは、CPUのプロセッサステータスワード(PSW)中の特定ビットで、現在の動作モードつまり現在実行されているプログラムの実行レベルを表し、特権レベルのプログラムのみに、PSW中の実行レベルを表す部分の書き換えや、いわゆるリング保護等により保護されたメモリ領域へのアクセスを許容し、ユーザレベルのプログラムにはPSW中の実行レベルを表す部分やその保護されたメモリ領域へのアクセスを禁止し、そのアクセスが実行されるとシステムエラーとして扱う。
ところで、従来、コンピュータシステムは、いわゆる割込制御を行う。以下、割込制御を簡単に説明する。
コンピュータシステムにおいて、割込要因毎に、割込レベルと割込処理プログラムとを定めておき、あるプログラムの実行中に割込要因が発生すると、発生した割込要因に対応する割込レベルが現在のPSW中の1フラグである割込マスクレベルフラグより高いレベルを示す場合に、そのプログラムの実行を中断し、その発生した割込要因に対応する割込レベルと等しくなるように割込マスクレベルフラグを更新してから割込処理プログラムを一時的に実行することで割込要因に対応した動作を実現し、その後に、中断していたもとのプログラムの実行を再開する。

コンピュータシステムは、この中断及び再開を可能にするために、割込処理プログラムの実行開始直前に、CPUのPSWの内容及びプログラムカウンタ(PC)の内容(以下、これらの内容を「CPU情報」という。)を、特定のメモリ領域に退避しておき、割込処理プログラムの実行終了時点で、退避していたそのCPU情報を復元、つまりそのCPU情報をCPUのPSW及びPCに再設定する。
なお、コンピュータシステムは、割込処理プログラムが実行されている間においても、その実行中の割込処理プログラムより高い割込レベルが定められている割込要因が発生した場合には、実行中の割込処理プログラムを中断して、その発生した割込要因に対応する割込処理プログラムを実行することで、多重割込に対応する。また、多重に割込が生じた場合には、ラストインファーストアウト(LIFO)方式で特定のメモリ領域つまりスタック領域へのCPU情報の退避及び復元を行う。
なお、割込要因の発生に対し割込処理プログラムを実行する従来の割込制御技術として、例えば特許文献1記載の割込応答処理方式が知られている。
特開平6-83640号公報(第2−4頁、第1,2,3図)
ところで、ユーザレベルの割込処理プログラムの実行を許容することとした割込制御方式を想定した場合に、割込が生じてスタック領域内に退避されたCPU情報の一部をユーザレベルの割込処理プログラムが書き換えできるようにすると便利になる。例えば、スタック領域に退避されたCPU情報中のPCの値を変更すると、ユーザレベルの割込処理プログラムから復帰するユーザレベルのプログラム上の位置を任意に変化させることができ、ユーザレベルの割込制御プログラムによって柔軟な割込制御アルゴリズムの実現が可能になる。
しかしながら、ユーザレベルのプログラムは、OSの中核部分等にあたり信頼性の高い特権レベルの割込処理プログラムと異なり、信頼性が低く、いわゆるウィルス等の不正なプログラムを包含している可能性がある。
従って、ユーザレベルの割込処理プログラムがスタック領域内のCPU情報を書き換えられるようにすると次のような問題が生じる。
不正なユーザレベルの割込処理プログラムが、スタック領域内に退避されているCPU情報のうち特権レベルのプログラムの実行状態に係るCPU情報を自由に変更してしまう危険性がある問題や、不正なユーザレベルの割込処理プログラムがCPU情報中のPSWの実行レベルを示す部分を特権レベルを示すように書き換えておき、割込処理プログラムの実行終了時にその書き換えたCPU情報がCPUに復元されることを利用して、特権レベルを乗っ取ってしまうという問題である。
そこで、本発明は、これら問題のいずれかを解決すべくなされたものであり、ユーザレベルの割込処理プログラムの実行を許容した上でユーザレベルの割込処理プログラムにより不正なCPU情報の操作がなされないように割込制御を行う割込制御装置を提供することを目的とする。
上記課題を解決するために、本発明に係る割込制御装置は、多重割込の制御を行う割込制御装置であって、複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、割込要因が発生した場合に、当該割込要因に対応するレベル情報が示す実行レベルと、CPUにおけるプロセッサステータスワードにより示される実行レベルとを比較する比較手段と、CPUにおけるプロセッサステータスワード及びプログラムカウンタの内容であるCPU情報をメモリ内のスタック領域に退避する退避手段と、前記スタック領域から退避されているCPU情報を読み出して、CPU情報をCPUに復元する復元手段と、前記比較手段により割込要因に対応するレベル情報が示す実行レベルの方が低くないという比較結果が得られた場合には、前記退避手段にCPU情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを該当の実行レベルで実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該CPU情報の復元を行わせる割込制御手段とを備えることを特徴とする。
本発明に係る割込制御装置は、上記構成を備えることにより、低レベルつまりユーザレベルの割込処理プログラムの実行中にスタック領域内部に退避されているCPU情報を変更可能であるが、そのユーザレベルの割込処理プログラムの実行中には、スタック領域内部には特権レベルのプログラムの実行状態に係るCPU情報は一切格納されていないため、ユーザレベルの割込処理プログラムが不正に特権レベルの割込処理プログラムの実行状態に係る退避データの書き換えを行うことは不可能となる。
なお、ユーザレベルの割込処理プログラムが実行中に、スタック領域内に退避されているユーザレベルのプログラムの実行状態に係るCPU情報中のPCにアクセスして、戻りアドレスを任意のアドレスに変更することが可能になり、割込処理プログラムのみに閉じない柔軟な割込対応処理を実現することが可能になる。また、特権レベルの割込処理プログラムの実行を、ユーザレベルの割込処理プログラムに対応する割込要因の発生によって、中断されることなく、迅速に行うことができるようになる。
また、前記復元手段は、前記スタック領域から退避されているCPU情報を読み出した後に、CPUにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合には読み出したCPU情報を低レベルを示すように強制してから、CPU情報のCPUへの前記復元を行うこととしてもよい。
これにより、ユーザレベルの割込処理プログラムが、スタック領域に退避されているCPU情報のうちの一部、例えば、割込処理プログラムの実行終了時にCPU情報の復元によりPCに設定されるはずの部分を更新することができるが、もしCPU情報中の実行レベルの部分まで書き換え特権レベルを示す値にしたとしても、その部分はその割込処理プログラムの実行終了後のCPU情報の復元の際に強制的にユーザレベルを示す値に書き戻されることになるので、ユーザレベルのプログラムによる特権レベルの乗っ取りが防止できる。
また、前記割込制御装置は更に、CPUにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合において、前記復元手段が前記スタック領域から読み出したCPU情報が高レベルを示すときには、異常発生の旨を外部に出力する異常検出手段を備えることとしてもよい。
これにより、ユーザレベルの割込処理プログラムが、スタック領域に退避されているCPU情報のうち実行レベルの部分を書き換えて、本来ユーザレベルのプログラムを特権レベルで動作させようと企てた場合に、本割込制御装置を備えるコンピュータシステムはそのことを異常発生として検知できるようになる。
また、本発明に係る割込制御装置は、多重割込の制御を行う割込制御装置であって、 複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、CPUにおけるプロセッサステータスワード及びプログラムカウンタの内容であるCPU情報を、所定レジスタが指し示すメモリ内のスタック領域とメモリ内の所定の保護領域との両方に退避し、当該所定レジスタの内容であるスタックポインタを当該保護領域に退避する退避手段と、前記保護領域からスタックポインタを読み出して所定レジスタに設定し、退避されているCPU情報を前記保護領域から読み出して、当該保護領域からのCPU情報のうち実行レベルの部分が低レベルを示す場合には当該実行レベルの部分と、当該所定レジスタが指し示すスタック領域に退避されているCPU情報のうち実行レベル以外の部分とをCPUに復元し、当該保護領域からのCPU情報のうち実行レベルの部分が高レベルを示す場合には当該保護領域からのCPU情報をCPUに復元する復元手段と、CPUにおける実行レベルが低レベルである場合には前記保護領域へデータを書き込む命令の実行を抑止する保護手段と、割込要因が発生した場合に、前記退避手段にCPU情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段にCPU情報の復元を行わせる割込制御手段とを備えることを特徴とする。
これにより、特権レベルのプログラムの実行中であってもユーザレベルの割込処理プログラムの実行が可能である上、ユーザレベルの割込処理プログラムからユーザレベルのプログラムに制御が移行する場合の移行先アドレス等の書き換えは可能だが、実行レベルの書き換えは不可能になるので、ユーザレベルのプログラムによる特権レベルの乗っ取りが防止できる。
また、本発明に係る割込制御装置は、多重割込の制御を行う割込制御装置であって、複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、CPUにおけるプロセッサステータスワード及びプログラムカウンタの内容であるCPU情報を、所定レジスタが指し示すメモリ内のスタック領域に退避し、当該所定レジスタの内容であるスタックポインタを、メモリ内の保護領域に退避する退避手段と、前記保護領域からスタックポインタを読み出して所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からCPU情報を読み出して、当該CPU情報をCPUに復元する復元手段と、CPUにおける実行レベルが低レベルである場合には、前記保護領域へデータを書き込む命令の実行を抑止する第1保護手段と、CPUにおける実行レベルが低レベルである場合には、前記保護領域に退避されて読み出されていないスタックポインタが指し示すスタック領域に対して、データを書き込む命令の実行を抑止する第2保護手段と、割込要因が発生した場合に、前記退避手段にCPU情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該CPU情報の復元を行わせる割込制御手段とを備えることを特徴とする。
これにより、CPU情報が退避されたメモリ領域を動的に特権保護し、そのメモリ領域に退避されたCPU情報をユーザレベルの割込処理プログラムが書き換えることが防止されるようになる。
また、前記退避手段は、更に、前記スタックポインタと対にして、CPUにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、前記第2保護手段は、前記保護領域に退避されて読み出されていないスタックポインタのうち、高レベルを示す実行レベルと対にされているスタックポインタが指し示すスタック領域に対しての場合に限って、スタック領域にデータを書き込む命令の実行について前記抑止を行い、前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からCPU情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをCPUに復元することとしてもよい。
これにより、ユーザレベルのプログラムの実行状態に係る退避されたCPU情報のうち実行レベル以外の部分に限りユーザレベルの割込処理プログラムによって書き換えられるようになる。
また、前記退避手段は、更に、前記スタックポインタと対にして、CPUにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、前記第2保護手段は、前記保護領域に直前に退避されて読み出されていないスタックポインタが、高レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスから所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、低レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスを所定アドレス側に所定量進めたアドレスから、所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からCPU情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをCPUに復元することとしてもよい。
これにより、割込により実行が中断されたユーザレベルのプログラムについてのスタック領域に退避されたCPU情報中のPC部分の位置に相当する部分を、ユーザレベルの割込処理プログラムによって書き換え可能なように、退避するCPU情報のデータ構造と第2保護手段における所定量とを予め定めておきさえすれば、その部分だけをユーザレベルの割込処理プログラムが書き換えられ、他の部分はユーザレベルの割込処理プログラムでは書き換えられないようにすることができる。
<実施の形態1>
以下、本発明の実施の形態1に係る割込制御装置について説明する。
<構成>
図1は、実施の形態1に係る割込制御装置100の機能ブロック図である。
割込制御装置100は、CPU、メモリ等を備えるコンピュータの一部であり、割込制御を実現する装置である。なお、割込制御は、CPUがあるプログラムを実行中に、特定の割込要因が生じた時に、そのプログラムの実行を中断してその割込要因に対応して特別な割込処理を実行し、その割込処理が終了した時点で、中断していたもとのプログラムの実行を再開するという制御である。
同図に示すように、割込制御装置100は、機能的に見れば、スタック領域110、割込情報記憶部120、比較部140、退避部150、復元部160及び制御部170を有する。
ここで、スタック領域110は、メモリの一領域であり、スタックポインタ(SP)139は、このスタック領域110における現在のデータ格納位置を指し示すレジスタ又はメモリの一領域である。
割込情報記憶部120は、割込要因毎に、割込処理プログラムを特定するためのアドレス等の割込処理情報ADと、特権レベルかユーザレベルのいずれかを示す実行レベルELIRと、多重割込の優先度を示す割込レベルLVと、割込要因が発生した場合にハイレベル(H)にセットされてその割込要因に対する割込処理プログラムが実行される直前にローレベル(L)にリセットされる割込要求フラグIRとを対応付けて保持する記憶領域であり、専用の割込制御レジスタ等により構成される。なお、実行レベルELIRは、ハイレベル(H)によりユーザレベルを表し、ローレベル(L)により特権レベルを表す。また、この割込情報記憶部120の内容は、OSによりシステム起動時等に予め設定される。
退避部150は、制御部170の指示に従いCPU情報130をスタック領域110の現在のデータ格納位置に格納する機能を有する。
ここで、CPU情報130は、CPUの現在状態を示すレジスタであるプロセッサステータスワード(PSW)132とプログラムの実行アドレスを示すレジスタであるプログラムカウンタ(PC)131との内容である。なお、PSW132は、現在の動作モードつまり現在実行しているプログラムの実行レベルを示す実行レベルフラグELと、多重割込の拒否判断に用いるための割込マスクレベルフラグIMとを含んでいる。実行レベルは、プログラムに付与されるコンピュータ資源についての利用権限の程度を表し、高い実行レベルつまりコンピュータ資源の利用に特に制限のない実行レベルが、特権レベルであり、低い実行レベルつまり利用できるコンピュータ資源に制限がある実行レベルがユーザレベルである。
比較部140は、割込要因が発生した場合に、その割込要因に対応する割込レベルLV及び実行レベルELIRと、PSW132の割込マスクレベルフラグIM及び実行レベルフラグELとを比較し、その比較結果を制御部170に伝える機能を有する。
また、制御部170は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合に比較部140による比較結果に応じて、割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部150に指示してCPU情報を退避させてから、割込要因に対応する割込処理情報ADにより特定される割込処理プログラムを対応する実行レベルELIRで実行し、その割込処理プログラムの実行を終了した後に、復元部160に指示してその退避していたCPU情報の復元を行わせる機能を有する。
また、復元部160は、制御部170の指示に従いスタック領域110から直前に退避されたCPU情報130をCPUに復元する機能を有し、この復元に際して、スタック領域110に格納されていたCPU情報を読み出した後に、CPUにおけるPSW132中の実行レベルフラグELがユーザレベル(H)である場合には、読み出したCPU情報中の実行レベルフラグを、ユーザレベル(H)を示すように強制してから、CPU情報のCPUへの復元を行う。なお、この強制は、もとの値が何であるかに拘らず特定の値を設定することであり、復元部160内に、PSW132中の実行レベルフラグELとスタック領域から読み出されたCPU情報中の実行レベルフラグとを入力として出力をPSW132中の実行レベルフラグELに与えるOR論理ゲート161を設けることにより実現される。
<動作>
以下、上述の構成を備える割込制御装置100の動作について説明する。
図2は、割込制御装置100の行う割込制御処理を示すフローチャートである。
まず、割込要因が発生すると、例えばCPU外部の割込コントローラ等により、割込情報記憶部120におけるその割込要因に対応する割込要求フラグIRがHレベルにセットされる。
続いて制御部170は、割込要因の発生を検知すると、比較部140により割込情報記憶部120に記憶されておりその発生した割込要因に対応する割込レベルLVと、PSW132中の割込マスクレベルフラグIMとを比較させ(ステップS11)、割込レベルLVの方が高い優先度を示すレベルである場合には、その割込要因に対応する実行レベルELIRと、PSW132中の実行レベルフラグELとを比較させ(ステップS12)、実行レベルELIRが実行レベルフラグEL以上の実行レベルを示すときには、割込を受け付けると決定して割込要求フラグIRをLレベルにリセットする(ステップS13)。なお、ステップS12の比較において、実行レベルELIRが実行レベルフラグEL以上の実行レベルを示すのは、実行レベルELIRが特権レベルである場合か、或いは、実行レベルELIRがユーザレベルであってかつ実行レベルフラグELがユーザレベルである場合に限られる。
また、ステップS11の比較において割込レベルLVの方が割込マスクレベルフラグIMより高い優先度を示すレベルでないとき、或いは、ステップS12の比較において実行レベルELIRの方が低い実行レベルを示すときには、割込を受け付けないと決定する。
割込要求を受け付けた後、制御部170は、退避部150にCPUのCPU情報130をスタック領域110に退避させる(ステップS14)。なお、退避部150においては、スタック領域110のうちSP139により特定できる部分にCPU情報130を格納して、その格納した分だけSP139を変化させる。
CPU情報130の退避がなされた後、制御部170は、CPU情報130を更新する(ステップS15)。即ち、制御部170は、割込要求を受け付けた割込要因に対応する実行レベルELIRと同値をPSW132の実行レベルフラグELに設定し、その割込要因に対応する割込レベルLVと同値をPSW132の割込マスクレベルフラグIMに設定し、その割込要因に対応する割込処理情報ADに基づいて割込処理プログラムのアドレスをPC131に設定する。
ステップS15に続いて、制御部170は、PC131に従って、割込処理プログラムの実行を行う(ステップS16)。この際に割込処理プログラムは対応する実行レベルELIRで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部170は、復帰命令を読み出したら、ステップS16を終了する。
なお、制御部170がある割込処理プログラムを実行している間において(ステップS16)、別の割込要因が発生した場合には、その割込要因に対して図2に示すステップS11からの一連の処理を行うことで、割込制御装置100は、多重割込に対応している。
割込処理プログラムの実行を終了した後には、制御部170は、復元部160にスタック領域110にステップS14において退避していたCPU情報を復元させる。
この際、まず復元部160は、スタック領域110のうちSP139により特定できる部分からCPU情報を読み出して、そのCPU情報の分量だけSP139を変化させ(ステップS17)、そのCPU情報中の実行レベルフラグとPSW132中の実行レベルフラグELの示す現在の実行レベルとを参照したOR論理ゲート161の働きにより、現在の実行レベルフラグELがユーザレベル(H)を示す場合には(ステップS18)、CPUに復元すべき実行レベルフラグをユーザレベル(H)に強制し(ステップS19)、CPU情報をCPUに復元する(ステップS20)。
CPU情報が復元された後に、制御部170は、Hレベルにセットされた割込要求フラグIRに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップS11からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える(ステップS21)。
以下、割込制御装置100における割込制御の具体的動作について説明する。
ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクa及びタスクcと、特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクbとがあり、割込レベルの示す優先度はタスクcが最も高く、続いてタスクb、タスクaの順であることとし、まずタスクaに対応する割込要因が発生し、続いて、タスクb、タスクcの順で、対応する割込要因が発生することとして説明する。
図3は、割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。
まず、ユーザレベルのタスクaが実行されており、これに対応してPSW132中の割込マスクレベルフラグIMは低い優先度を示しており、実行レベルフラグELはユーザレベル(H)を示している。
時刻T200において、タスクbに対応する割込要因Bが発生して、その割込要因Bに対応する割込要求フラグIRがHレベルにセットされ、時刻T201において、割込要因Bに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示し、かつ、タスクbに対応する実行レベルELIRは特権レベル(L)を示しており実行レベルELより高い実行レベルであるため、割込が受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、CPU情報130がスタック領域110に退避され、割込マスクレベルIMを更新し実行レベルフラグELを特権レベル(L)にしてタスクbの割込処理プログラムが実行される。
時刻T202において、タスクbの割込処理プログラムが実行されている間に、タスクcに対応する割込要因Cが発生し、割込要因Cに対応する割込要求フラグIRがHレベルにセットされたとする。この割込要因Cに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示すが、割込要因Cに対応する実行レベルELIRはユーザレベル(H)を示しておりこの時点での実行レベルELより低いため、割込は受け付けられず保留される。
時刻T203において、タスクbの割込処理プログラム中の復帰命令が実行されると、スタック領域110に退避されていたCPU情報が、CPUに復元される。この復元の際には、実行レベルは退避されていたままのユーザレベル(H)となる。
その後、時刻T205において、保留されていた割込要因Cに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示し、かつ、割込要因Cに対応する実行レベルELIRはユーザレベル(H)を示しておりこの時点での実行レベルELもユーザレベル(H)を示しているため、制御部170によるステップS12の判断の結果として、割込は受け付けられ、その割込要求フラグIRはLレベルにリセットされ、CPU情報130がスタック領域110に退避され、割込マスクレベルIMを更新し実行レベルELをユーザレベル(H)にしてタスクcの割込処理プログラムが実行される。
時刻T206において、タスクcの割込処理プログラム中の復帰命令が実行されると、スタック領域110に退避されていたCPU情報が、復元部160により読み出され、その時点でのPSW132中の実行レベルフラグELがユーザレベル(H)であるため、OR論理ゲート161の作用によりCPU情報中の実行レベルフラグは必ずユーザレベル(H)を示すようにして、そのCPU情報のCPUへの復元がなされる。
従って、タスクcに対応するユーザレベルの割込処理プログラムが、実行中にスタック領域110の内容を、つまり退避されているCPU情報を、書き換えたとしても、実行レベルフラグについては、ユーザレベル(H)に強制されて、CPUに復元される。即ち、信頼性の低いユーザレベルの割込処理プログラムによるスタック領域へのアクセス或いはノイズによって、結果的に不正に、CPUのPSWにおける実行レベルフラグELに特権レベル(L)が設定されるようなことは生じないようになっている。なお、ユーザレベルのプログラムによって、PSWにおける実行レベルフラグELを直接更新することは許容されておらず、この更新操作はシステムエラーとして扱われる。
以上説明したように、割込制御装置100は、信頼性の高い特権レベルの割込処理プログラムの実行中においては、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付けないこととし、また、ユーザレベルの割込処理プログラムの実行後のCPU情報の復元においては実行レベルフラグELを特権レベルに設定することがないように強制している。この結果、例えばユーザレベルの割込処理プログラムは、スタック領域に退避されたCPU情報におけるPCの値を変更して、割込処理の終了後において任意のプログラムを実行させるような柔軟な制御を行うことができるものの、特権レベルを乗っ取るようなことはできないようになる。
即ち、割込制御装置100では、比較部140による実行レベルの比較やOR論理ゲート161等の作用により、簡易に特権レベルの乗っ取りを防止するフェールセーフ機能が実現され、CPU情報の退避先を、特権レベルのプログラムしかアクセスできないようなメモリ中の特権保護領域にしなくても良いようになっている。
<変形例>
以下、割込制御装置100の一部を変形した割込制御装置200について説明する。
図4は、実施の形態1の変形例に係る割込制御装置200の機能ブロック図である。
同図に示すように、割込制御装置200は、機能的に見れば、スタック領域110、割込情報記憶部120、比較部140、退避部150、復元部260、異常検出部262及び制御部170を有する。同図において、割込制御装置200の構成要素のうち、割込制御装置100の構成要素と同一のものには、同一の符号を付しており、その同一の構成要素についてはここでは説明を省略する。
復元部260は、制御部170の指示に従いスタック領域110から直前に退避されたCPU情報130を単純にCPUに復元する機能を有する。
また、異常検出部262は、復元部260が復元を行う際に、スタック領域110から読み出されたCPU情報のうち実行レベルフラグを示す部分と、その時点でのPSW132内の実行レベルフラグELとを入力としてNOTゲート及びAND論理ゲートにより、一定の場合にエラー発生の旨を割込制御装置200の外部に出力する機能を有する。
このように復元部260と異常検出部262とが割込制御装置100と相違する割込制御装置200は、基本的に図2に示した割込制御処理と同様の処理を行うが、ステップS18及びステップS19に代えて、次の処理を行う。即ち、この処理は、異常検出部262により、スタック領域110から読み出されたCPU情報のうち実行レベルフラグを示す部分が、特権レベル(L)を示しており、かつ、その時点でのPSW132内の実行レベルフラグELがユーザレベル(H)を示している場合に限り、NOTゲート及びAND論理ゲートによりHレベルでもってエラー発生の旨を割込制御装置200の外部に出力する処理である。
従って、割込制御装置200は、信頼性の高い特権レベルの割込処理プログラムつまり実行レベルの高い割込処理プログラムの実行中においては、信頼性の低いユーザレベルの割込処理プログラムつまり実行レベルの低い割込処理プログラムに対応する割込要因に係る割込を受け付けないこととし、また、ユーザレベルの割込処理プログラムの実行後のCPU情報の復元に際して、復元用の実行レベルフラグを不正に特権レベルに設定されていることを検出しエラーと扱うようにしている。この結果、割込制御装置100における場合と同様に、ユーザレベルの割込処理プログラムは、スタック領域に退避されたCPU情報におけるPCの値を変更して、割込処理の終了後において任意のプログラムを実行させるような柔軟な制御を行うことができるものの、特権レベルを乗っ取るようなことはできない。
<実施の形態2>
以下、本発明の実施の形態2に係る割込制御装置について説明する。
<構成>
図5は、実施の形態2に係る割込制御装置300の機能ブロック図である。
割込制御装置300は、CPU、メモリ等を備えるコンピュータの一部であり、機能的に見れば、同図に示すように、スタック領域110、割込情報記憶部120、退避部350、復元部360、制御部370及び保護領域380を有する。
この割込制御装置300は、実施の形態1で示した割込制御装置100と同等の構成要素を含むが、特権レベルの割込処理プログラムの実行中であっても、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付け得るようにしていながら、ユーザレベルのプログラムによる特権レベルの乗っ取りを防止するという特有な機構を有するものである。なお、割込制御装置300の構成要素のうち、割込制御装置100と同一の構成要素については図5中に図1と同一の符号を付して示しており、ここでは詳しい説明を省略する。
退避部350は、制御部370の指示に従い、実施の形態1で示したものと同様のCPU情報130をスタック領域110の現在のデータ格納位置に格納するとともにそのCPU情報130とSP139とを保護領域380に格納する機能を有する。
復元部360は、制御部370の指示に従い、保護領域380から直前に退避されたSP139の内容をSP139に復元し、また保護領域380及びスタック領域110から直前に退避されたCPU情報を読み出して、保護領域380から読み出したCPU情報のうちの実行レベルフラグの部分が特権レベルを示す場合にはその保護領域380から読み出したCPU情報をCPUに復元し、その実行レベルフラグの部分がユーザレベルを示す場合にはその保護領域380から読み出したCPU情報のうちの実行レベルフラグの部分と、スタック領域110から読み出したCPU情報の実行レベルフラグ以外の部分とを、CPUに復元する機能を有する。
制御部370は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合その割込要因に対応する割込レベルLVと、PSW132の割込マスクレベルフラグIMとを比較することで割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部350に指示してCPU情報を退避させてから、割込要因に対応する割込処理情報ADにより特定される割込処理プログラムを対応する実行レベルELIRで実行し、その割込処理プログラムの実行を終了した後に、復元部360に指示してその退避していたCPU情報の復元を行わせる機能を有する。
また、保護領域380は、特権レベルのプログラムしか書き込みできないように保護され、ラストインファーストアウト(LIFO)方式で読み書きが制御されるメモリ中の記憶領域である。この保護は、CPU及びOSにより従来なされるいわゆるリング保護等で実現され、制御部370は、プログラムを解釈し実行する際にこの保護領域380に対してユーザレベルのプログラムがデータを書き込もうとすると、その書き込みを抑止し、システムエラーと扱う。
<動作>
以下、上述の構成を備える割込制御装置300の動作について説明する。
図6は、割込制御装置300の行う割込制御処理を示すフローチャートである。
まず、割込要因が発生すると、例えばCPU外部の割込コントローラ等により、割込情報記憶部120におけるその割込要因に対応する割込要求フラグIRがHレベルにセットされる。
続いて制御部370は、割込要因の発生を検知すると、割込情報記憶部120に記憶されておりその発生した割込要因に対応する割込レベルLVと、PSW132中の割込マスクレベルフラグIMとを比較し(ステップS31)、割込レベルLVの方が高い優先度を示すレベルである場合には、割込を受け付けると決定して割込要求フラグIRをLレベルにリセットする(ステップS32)。なお、ステップS31の比較において割込レベルLVの方が割込マスクレベルフラグIMより高い優先度を示すレベルでないときには、割込を受け付けないと決定する。
割込要求を受け付けた後、制御部370は、退避部350に、CPUのCPU情報130をスタック領域110に退避させ、CPU情報130及びSP139を保護領域380に退避させる(ステップS33)。なお、退避部350においては、スタック領域110のうちSP139により特定できる部分にCPU情報130を格納して、その格納した分だけSP139を変化させる。
CPU情報130の退避がなされた後、制御部370は、CPU情報130を更新する(ステップS34)。即ち、制御部370は、割込要求を受け付けた割込要因に対応する実行レベルELIRと同値をPSW132の実行レベルフラグELに設定し、その割込要因に対応する割込レベルLVと同値をPSW132の割込マスクレベルフラグIMに設定し、その割込要因に対応する割込処理情報ADに基づいて割込処理プログラムのアドレスをPC131に設定する。
ステップS34に続いて、制御部370は、PC131に従って、割込処理プログラムの実行を行う(ステップS35)。この際に割込処理プログラムは対応する実行レベルELIRで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部370は、復帰命令を読み出したら、ステップS35を終了する。
なお、制御部370がある割込処理プログラムを実行している間において(ステップS35)、別の割込要因が発生した場合には、その割込要因に対して図6に示すステップS31からの一連の処理を行うことで、割込制御装置300は、多重割込に対応している。
割込処理プログラムの実行を終了した後には、制御部370は、復元部360に保護領域380及びスタック領域110にステップS33において退避していたCPU情報を復元させる。
この際、まず復元部360は、保護領域380からSPを読み出してCPUに復元し、保護領域380及びスタック領域110からCPU情報を読み出して(ステップS36)、読み出した分だけSP139を更新して、保護領域380から読み出されたCPU情報中の実行レベルフラグがユーザレベルを示すか否かを判定し(ステップS37)、ユーザレベルでなければつまり特権レベルであれば、保護領域380から読み出したCPU情報をCPUに復元する(ステップS38)。
また、ステップS37においてユーザレベルであると判定した場合には、復元部360は、保護領域380から読み出した実行レベルフラグをPSW132中の実行レベルフラグELとしてCPUに復元するとともに、スタック領域110から読み出したCPU情報のうち実行レベルフラグ以外の部分をPSW132の内容としてCPUに復元する(ステップS39)。
ステップS38又はステップS39によりCPU情報が復元された後、制御部370は、Hレベルにセットされた割込要求フラグIRに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップS31からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える(ステップS40)。
以下、割込制御装置300における割込制御の具体的動作について説明する。
特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクbと、ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクc及びタスクdとがあり、割込レベルの示す優先度はタスクdが最も高く、続いてタスクc、タスクbの順であることとし、まずタスクbに対応する割込要因が発生してタスクbに対応する割込処理プログラムが実行されている間に、タスクc、タスクdの順で、対応する割込要因が発生することとして説明する。
図7は、割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。
まず、特権レベルのタスクbが実行されており、これに対応してPSW132中の割込マスクレベルフラグIMは低い優先度を示しており、実行レベルフラグELは特権レベルを示している。
時刻T400において、タスクcに対応する割込要因Cが発生して、その割込要因Cに対応する割込要求フラグIRがHレベルにセットされ、時刻T401において、割込要因Bに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示しているため制御部370のステップS31の判定の結果、割込が受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、SPが保護領域380に退避され、CPU情報130がスタック領域110及び保護領域380に退避され、その退避分だけSPが更新され、制御部370は、割込マスクレベルIMを更新し実行レベルフラグELをユーザレベルにしてタスクcの割込処理プログラムを実行し始める。
時刻T402において、タスクcの割込処理プログラムが実行されている間に、タスクdに対応する割込要因Dが発生し、割込要因Dに対応する割込要求フラグIRがHレベルにセットされたとする。この割込要因Dに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示すため、制御部370のステップS31の判定の結果、割込は受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、SPが保護領域380に退避され、タスクcの実行に関連していたCPU情報130は、スタック領域110及び保護領域380に退避され、その退避分だけSPが更新され、制御部370は、割込マスクレベルIMを更新し実行レベルフラグELをユーザレベルにしてタスクdの割込処理プログラムを実行し始める。従って、タスクcの割込処理プログラムの実行は一時的に中断されることになる。
その後、時刻T404において、タスクdの割込処理プログラム中の復帰命令が実行されると、復元部360は、保護領域380から、退避されていたSPを読み出してCPUに復元し、また保護領域380及びスタック領域110から、退避されていたCPU情報を読み出して、その保護領域380から読み出した実行レベルフラグがユーザレベルを示すため、ステップS39により、その実行レベルフラグと、スタック領域110から読み出したCPU情報のうち実行レベルフラグ以外の部分とを合わせて、CPUに復元する。これにより、以後、タスクcの割込処理プログラムの実行が再開されることになる。
その後、タスクcの割込処理プログラム中の復帰命令が実行されると、復元部360は、保護領域380から、退避されていたSPを読み出してCPUに復元し、また保護領域380及びスタック領域110から、退避されていたCPU情報を読み出して、その保護領域380から読み出した実行レベルフラグが特権レベルを示すため、ステップS38により、保護領域380から読み出したCPU情報をCPUに復元する。これにより、タスクbに対応する特権レベルの割込処理プログラムの実行が再開されることになる。
なお、タスクdに対応するユーザレベルの割込処理プログラムは、実行中にスタック領域110に退避されているCPU情報のうち、例えば復帰アドレス等を任意のアドレスと書き換えることができ、これは有効にPC等としてCPUに復元されるようになる。しかしながら、もし、タスクdに対応するユーザレベルの割込処理プログラムがスタック領域110の内容であるCPU情報のうち実行レベルまで書き換えて特権レベルの乗っ取りを行おうとしても、その割込処理プログラムからの復帰時に、実行レベルフラグについては保護領域380に退避されている内容がCPUに復元されるので、その乗っ取りは行えない。また、ユーザレベルの割込処理プログラムによっては、保護領域380の内容を書き換えることはできない。
また、タスクcに対応する割込処理プログラムが、実行中にスタック領域110に退避されているCPU情報を書き換えたとしても有効に働かず、その割込処理プログラムからの復帰時には、復帰先のタスクbに対応する割込処理プログラムが特権レベルであるため、保護領域380に退避されているCPU情報がCPUに復元されることになり、タスクbの割込処理プログラムについては、中断されたときのCPU状態のまま、その実行が再開されることになる。
このように、割込制御装置300は、ユーザレベルのプログラムの実行中において、割込が発生してユーザレベルの割込処理プログラムが実行されるようになった場合に、その割込処理プログラムがスタック領域にアクセスして有効に復帰アドレスを書き換える等を許容するものの、実行レベルフラグを不正に特権レベルに書き換えることについては抑止する。
<実施の形態3>
以下、本発明の実施の形態3に係る割込制御装置について説明する。
<構成>
図8は、実施の形態3に係る割込制御装置500の機能ブロック図である。
割込制御装置500は、CPU、メモリ等を備えるコンピュータの一部であり、機能的に見れば、同図に示すように、スタック領域110、割込情報記憶部120、退避部550、復元部560、制御部570、保護領域580及び保護範囲管理部590を有する。
この割込制御装置500は、実施の形態1で示した割込制御装置100と同等の構成要素を含むが、実施の形態2で示した割込制御装置300とはまた異なる構成により、特権レベルの割込処理プログラムの実行中であっても、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付け得るようにしていながら、ユーザレベルのプログラムによる特権レベルの乗っ取りを防止するという機能を実現するものである。なお、割込制御装置500の構成要素のうち、割込制御装置100と同一の構成要素については図8中に図1と同一の符号を付して示しており、ここでは詳しい説明を省略する。
保護範囲管理部590は、特権レベルのプログラムしか書き込みできないようにしたメモリ領域であって、保護終了アドレスEDA591、保護開始アドレスSTA592及び保護フラグNPE593を内容とする。各初期値は予めOSにより設定され、例えば、保護終了アドレスEDA591及び保護開始アドレスSTA592の初期値は共にスタック領域110にデータが格納されていない場合におけるSP139の値であり、保護フラグNPE593の初期値はLレベルである。
この保護範囲管理部590の内容は制御部570により参照され、保護フラグNPE593がLレベルである場合には、保護開始アドレスSTA592で示されるスタック領域内メモリアドレスから保護終了アドレスEDA591で示されるスタック領域内メモリアドレスまでの範囲が、特権レベルのプログラムしか書き込みできないように保護され、保護フラグNPE593がHレベルである場合には、保護開始アドレスSTA592が示すスタック領域内メモリアドレス+1から保護終了アドレスEDA591で示されるスタック領域内メモリアドレスまでの範囲が、特権レベルのプログラムしか書き込みできないように保護される。
退避部550は、制御部570の指示に従い、保護範囲管理部590内の保護開始アドレスSTAと保護フラグNPEとを保護領域580に移し、実施の形態1で示したものと同様のCPU情報130をスタック領域110の現在のデータ格納位置つまりSP139の示す位置に格納するとともに、その格納した分だけSP139を更新し、そのSP139の内容を保護開始アドレスSTA592として保護範囲管理部590に格納し、またCPU情報130の実行レベルフラグELの内容を保護フラグNPE593として保護範囲管理部590に格納する機能を有する。
復元部560は、制御部570の指示に従い、保護範囲管理部590内の保護開始アドレスSTA592をSP139に設定し、スタック領域110から直前に退避されたCPU情報を読み出して実行レベルフラグ以外の部分をCPUに復元し、保護範囲管理部590内の保護フラグNPE593をCPUのPSW132における実行レベルフラグELとして復元し、保護領域580から直前に格納された保護開始アドレス及び保護フラグの組を読み出して保護範囲管理部590における保護開始アドレスSTA592及び保護フラグNPE593として設定する機能を有する。
制御部570は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合その割込要因に対応する割込レベルLVと、PSW132の割込マスクレベルフラグIMとを比較することで割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部550に指示してCPU情報を退避させてから、割込要因に対応する割込処理情報ADにより特定される割込処理プログラムを対応する実行レベルELIRで実行し、その割込処理プログラムの実行を終了した後に、復元部560に指示してその退避していたCPU情報の復元を行わせる機能を有する。なお、制御部570は、プログラムを解釈し実行するに際して、後述する命令実行処理を繰り返し行うことにより、スタック領域110内の特定範囲における内容の、ユーザレベルのプログラムによる書き換えを抑止する。
また、保護領域580は、特権レベルのプログラムしか書き込みできないように保護され、後書き先読み型(LIFO:Last In First Out)として読み書きが制御されるメモリ中の記憶領域である。この保護は、CPU及びOSにより従来なされるいわゆるリング保護等で実現され、制御部570は、プログラムを解釈し実行する際にこの保護領域580に対してユーザレベルのプログラムがデータを書き込もうとすると、その書き込みを抑止し、システムエラーと扱う。
<動作>
以下、上述の構成を備える割込制御装置500の動作について説明する。
まず、図9を用いて割込制御処理について説明し、次に図10を用いて制御部570による命令実行処理について説明する。
図9は、割込制御装置500の行う割込制御処理を示すフローチャートである。
まず、割込要因が発生すると、例えばCPU外部の割込コントローラ等により、割込情報記憶部120におけるその割込要因に対応する割込要求フラグIRがHレベルにセットされる。
続いて制御部570は、割込要因の発生を検知すると、割込情報記憶部120に記憶されておりその発生した割込要因に対応する割込レベルLVと、PSW132中の割込マスクレベルフラグIMとを比較し(ステップS51)、割込レベルLVの方が高い優先度を示すレベルである場合には、割込を受け付けると決定して割込要求フラグIRをLレベルにリセットする(ステップS52)。なお、ステップS51の比較において割込レベルLVの方が割込マスクレベルフラグIMより高い優先度を示すレベルでないときには、割込を受け付けないと決定する。
割込要求を受け付けた後、制御部570は、退避部550に、CPUのCPU情報130をスタック領域110に退避させるよう指示する(ステップS53)。この指示を受けて退避部550は、スタック領域110のうちSP139により特定できる部分にCPU情報130を格納して、その格納した分だけSP139を変化させ、保護範囲管理部590内の保護開始アドレスSTA及び保護フラグNPEを保護領域580に退避し(ステップS54)、SP139の内容を、保護範囲管理部590内に保護開始アドレスSTA592として設定し、CPU情報130中の実行レベルフラグの値を、保護範囲管理部590内に保護フラグNPE593として設定する(ステップS55)。
なお、この割込制御装置500において特権レベルはLレベルで表現され、ユーザレベルはHレベルで表現される。従って、割込要求が受け付けられた時点で実行されていたプログラムの実行レベルが特権レベル(L)であれば、ステップS55により保護フラグNPE593はLレベルに設定され、割込要求が受け付けられた時点で実行されていたプログラムの実行レベルがユーザレベル(H)であれば、ステップS55により保護フラグNPE593はHレベルに設定される。
退避部550によりCPU情報130の退避がなされた後、制御部570は、CPU情報130を更新する(ステップS56)。即ち、制御部570は、割込要求を受け付けた割込要因に対応する実行レベルELIRと同値をPSW132の実行レベルフラグELに設定し、その割込要因に対応する割込レベルLVと同値をPSW132の割込マスクレベルフラグIMに設定し、その割込要因に対応する割込処理情報ADに基づいて割込処理プログラムのアドレスをPC131に設定する。
ステップS56に続いて、制御部570は、PC131に従って、割込処理プログラムの実行を行う(ステップS57)。この際に割込処理プログラムは対応する実行レベルELIRで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部570は、復帰命令を読み出したら、ステップS57を終了する。
なお、制御部570がある割込処理プログラムを実行している間において(ステップS57)、別の割込要因が発生した場合には、その割込要因に対して図9に示すステップS51からの一連の処理を行うことで、割込制御装置500は、多重割込に対応している。
割込処理プログラムの実行を終了した後には、制御部570は、復元部560に、スタック領域110に退避していたCPU情報を復元するよう指示する。
この指示を受けて、まず復元部560は、保護範囲管理部590内の保護開始アドレスSTA592をSP139に復元し、保護範囲管理部590内の保護フラグNPE593をPSW132の実行レベルフラグELに設定し(ステップS58)、保護領域580に直前に退避されていた保護開始アドレスSTA及び保護フラグNPEを保護範囲管理部590に復元し(ステップS59)、SP139の示すスタック領域に退避されているCPU情報を読み出して、その読み出した分だけSP139を更新し、そのCPU情報のうち実行レベルフラグ以外の部分をCPUに復元する(ステップS60)。
CPU情報が復元された後、制御部570は、Hレベルにセットされた割込要求フラグIRに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップS51からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える(ステップS61)。
図10は、割込制御装置500の行う命令実行処理を示すフローチャートである。
制御部570は、プログラムを解釈して実行する際に、プログラム中の1命令毎について同図に示す命令実行処理を行う。
まず、制御部570は、PC131に示されるメモリアドレスに位置している命令を読み出して解読し(ステップS71)、続いて、PSW132の実行レベルフラグELはユーザレベル(H)であるか否かを判定し(ステップS72)、ユーザレベル(H)でなく特権レベル(L)であればその解読した命令を解読結果に応じて実行する(ステップS78)。なお、ステップS71の命令読出し機能及びステップS78の命令実行機能は従来のCPUの有する機能と同一である。
また、ステップS72においてPSW132の実行レベルフラグELがユーザレベル(H)であった場合には、制御部570は、ステップS71で解読した命令がメモリへデータを書き込む命令であるか否かを判定し(ステップS73)、書き込む命令でなければ、命令を解読結果に応じて実行するが(ステップS78)、書き込む命令であれば、保護範囲管理部590内の保護フラグNPE593がHレベルつまりユーザレベル(H)を示しているか否かを判定する(ステップS74)。
ステップS74において保護フラグNPE593がユーザレベル(H)を示していると判定した場合には、制御部570は、そのメモリに書き込む命令の書き込み対象のメモリアドレスが、保護範囲管理部590内の保護開始アドレスSTA592が示すアドレス+1から保護終了アドレスEDA591が示すアドレスの範囲内に含まれているか否かを判定し(ステップS77)、その範囲内に含まれていると判定したときにはシステムエラーと扱う等の異常処理を行い(ステップS76)、その範囲内に含まれていないと判定したときには、そのデータを書き込む命令を実行する(ステップS78)。
また、ステップS74において保護フラグNPE593がユーザレベル(H)でなく特権レベル(L)を示していると判定した場合には、制御部570は、ステップS71で解読したメモリにデータを書き込む命令の書き込み対象のメモリアドレスが、保護範囲管理部590内の保護開始アドレスSTA592が示すアドレスから保護終了アドレスEDA591が示すアドレスの範囲内に含まれているか否かを判定し(ステップS75)、その範囲内に含まれていると判定したときにはシステムエラーと扱う等の異常処理を行い(ステップS76)、その範囲内に含まれていないと判定したときには、そのデータを書き込む命令を実行する(ステップS78)。
以下、実施の形態2で割込制御装置300の動作説明に用いた図7を、再び参照して割込制御装置500における割込制御の具体的動作について説明する。
特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクbと、ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクc及びタスクdとがあり、割込レベルの示す優先度はタスクdが最も高く、続いてタスクc、タスクbの順であることとし、まずタスクbに対応する割込要因が発生してタスクbに対応する割込処理プログラムが実行されている間に、タスクc、タスクdの順で、対応する割込要因が発生することとして説明する。
まず、特権レベルのタスクbが実行されており、これに対応してPSW132中の割込マスクレベルフラグIMは低い優先度を示しており、実行レベルフラグELは特権レベルを示している。
時刻T400において、タスクcに対応する割込要因Cが発生して、その割込要因Cに対応する割込要求フラグIRがHレベルにセットされ、時刻T401において、割込要因Bに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示しているため制御部570のステップS51の判定の結果、割込が受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、CPU情報130がスタック領域110に退避され、保護範囲管理部590内の保護フラグはLレベルに設定され、保護開始アドレスSTAから保護終了アドレスEDAまでがその退避されたCPU情報を含むように設定され、制御部570は、割込マスクレベルIMを更新し実行レベルフラグELをユーザレベルにしてタスクcの割込処理プログラムを実行し始める。
このタスクcの割込処理プログラムは、保護範囲管理部590に基づく制御部570の命令実行処理(図10)により、スタック領域110に退避されたCPU情報を書き換えることができない。
続いて、時刻T402において、タスクcの割込処理プログラムが実行されている間に、タスクdに対応する割込要因Dが発生し、割込要因Dに対応する割込要求フラグIRがHレベルにセットされたとする。この割込要因Dに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示すため、制御部570のステップS51の判定の結果、割込は受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、タスクcの実行に関連していたCPU情報130は、スタック領域110に退避され、保護範囲管理部590内の保護フラグはHレベルに設定され、保護開始アドレスSTAから保護終了アドレスEDAまでが、それまでに退避された全てのCPU情報を含むように設定され、制御部570は、割込マスクレベルIMを更新し実行レベルフラグELをユーザレベルにしてタスクdの割込処理プログラムを実行し始める。従って、タスクcの割込処理プログラムの実行は一時的に中断されることになる。
このとき実行され始めたタスクdの割込処理プログラムは、保護範囲管理部590に基づく制御部570の命令実行処理(図10)により、スタック領域110に最後に退避されたCPU情報のうちの一部だけを書き換えることができるだけで、他の部分や他のCPU情報を書き換えることはできない。その書き換えることのできるCPU情報の一部が例えば、PCから退避された復帰アドレスである。
その後、時刻T404において、タスクdの割込処理プログラム中の復帰命令が実行されると、復元部560は、保護範囲管理部590内の保護開始アドレスSTA592をSP139に復元し、保護範囲管理部590内の保護フラグNPE593をPSW132の実行レベルフラグELに設定し、保護領域580に直前に退避されていた保護開始アドレスSTA及び保護フラグNPEを保護範囲管理部590に復元し、SP139の示すスタック領域に退避されているCPU情報を読み出して、その読み出した分だけSP139を更新し、そのCPU情報のうち実行レベルフラグ以外の部分をCPUに復元する。これにより、以後、タスクcの割込処理プログラムの実行が再開されることになる。
その後、タスクcの割込処理プログラム中の復帰命令が実行されると、復元部560は、前回と同様にCPU情報のCPUへの復元を行う。これにより、以後、タスクbに対応する特権レベルの割込処理プログラムの実行が再開されることになる。
なお、タスクdに対応するユーザレベルの割込処理プログラムは、実行中にスタック領域110に退避されているCPU情報のうちの一部、例えば復帰アドレス等を任意のアドレスと書き換えることができ、これは有効にPC等としてCPUに復元されるようになる。しかしながら、もし、タスクdに対応するユーザレベルの割込処理プログラムがスタック領域110の内容であるCPU情報のうち実行レベルまで書き換えて特権レベルの乗っ取りを行おうとしても、その割込処理プログラムからの復帰時に、実行レベルフラグについては保護範囲管理部590に退避されている内容がCPUに復元されるので、その乗っ取りは行えない。また、ユーザレベルの割込処理プログラムによっては、保護範囲管理部590及び保護領域580の内容を書き換えることはできない。
また、タスクdに対応する割込処理プログラムとタスクcに対応する割込処理プログラムとの両方とも、スタック領域110に退避されているタスクbに係るCPU情報を書き換えることはできず、ユーザレベルの割込処理プログラムによって特権レベルのプログラムの実行用の情報が不正に書き換えられることはない。
<実施の形態4>
以下、本発明の実施の形態4に係る割込制御装置について説明する。
<構成>
図11は、実施の形態4に係る割込制御装置700の機能ブロック図である。
割込制御装置700は、CPU、メモリ等を備えるコンピュータの一部であり、機能的に見れば、同図に示すように、スタック領域110、割込情報記憶部120、退避部750、復元部760、制御部770及び保護領域780を有する。
この割込制御装置700は、実施の形態3で示した割込制御装置500の一部だけを変形したものであり、割込制御装置500と同様に、特権レベルの割込処理プログラムの実行中であっても、ユーザレベルの割込処理プログラムに対応する割込要因に係る割込を受け付け得るようにしていながら、ユーザレベルのプログラムによる特権レベルの乗っ取りを防止するという機能を実現するものである。なお、割込制御装置700の構成要素のうち、割込制御装置500と同一の構成要素については図11中に図1或いは図8と同一の符号を付して示しており、ここでは詳しい説明を省略する。
保護領域780は、退避部750によりSP139の内容とPSW132の実行レベルフラグELの値とが対にして退避されための記憶領域であり、この記憶領域は、特権レベルのプログラムしか書き込みできないように保護され、後書き先読み型(LIFO:Last In First Out)として読み書きが制御されるメモリ中の記憶領域である。この保護は、CPU及びOSにより従来なされるいわゆるリング保護等で実現され、制御部770は、プログラムを解釈し実行する際にこの保護領域780に対してユーザレベルのプログラムがデータを書き込もうとすると、その書き込みを抑止し、システムエラーと扱う。
退避部750は、制御部770の指示に従い、実施の形態3で示したものと同様のCPU情報130をスタック領域110の現在のデータ格納位置つまりSP139の示す位置に退避するとともに、その退避した分だけSP139の値を更新し、そのSP139の内容とPSW132の実行レベルフラグELの値とを対にして保護領域780に退避する機能を有する。
復元部760は、制御部770の指示に従い、保護領域780に直前に退避されているSPの値と実行レベルフラグELの値との対を読み出して、それぞれSP139とPSW132中の実行レベルフラグELとに設定し、スタック領域110内でSP139の指し示す部分に退避されているCPU情報を読み出して実行レベルフラグ以外の部分をCPUに復元し、CPU情報を読み出した分だけSP139を更新する機能を有する。
制御部770は、プログラムをメモリから読み出して解釈し実行する機能を有するとともに、割込要因が発生した場合その割込要因に対応する割込レベルLVと、PSW132の割込マスクレベルフラグIMとを比較することで割込を受け付けるか否かを決定し、割込を受け付ける場合には、退避部750に指示してCPU情報を退避させてから、割込要因に対応する割込処理情報ADにより特定される割込処理プログラムを対応する実行レベルELIRで実行し、その割込処理プログラムの実行を終了した後に、復元部760に指示してその退避していたCPU情報の復元を行わせる機能を有する。なお、制御部770は、プログラムを解釈し実行するに際して、後述する命令実行処理を繰り返し行うことにいより、保護領域780において、特権レベルを示す実行レベルフラグと対にして退避されたSPが示すスタック領域110内のCPU情報についての、ユーザレベルのプログラムによる書き換えを抑止する。
<動作>
以下、上述の構成を備える割込制御装置700の動作について説明する。
まず、図12を用いて割込制御処理について説明し、次に図13を用いて制御部770による命令実行処理について説明する。
図12は、割込制御装置700の行う割込制御処理を示すフローチャートである。
まず、割込要因が発生すると、例えばCPU外部の割込コントローラ等により、割込情報記憶部120におけるその割込要因に対応する割込要求フラグIRがHレベルにセットされる。
続いて制御部770は、割込要因の発生を検知すると、割込情報記憶部120に記憶されておりその発生した割込要因に対応する割込レベルLVと、PSW132中の割込マスクレベルフラグIMとを比較し(ステップS81)、割込レベルLVの方が高い優先度を示すレベルである場合には、割込を受け付けると決定して割込要求フラグIRをLレベルにリセットする(ステップS82)。なお、ステップS81の比較において割込レベルLVの方が割込マスクレベルフラグIMより高い優先度を示すレベルでないときには、割込を受け付けないと決定する。
割込要求を受け付けた後、制御部770は、退避部750に、CPUのCPU情報130をスタック領域110に退避させるよう指示する(ステップS83)。この指示を受けて退避部750は、スタック領域110のうちSP139により特定できる部分にCPU情報130を退避して(ステップS83)、その格納した分だけSP139を変化させ、SP139の内容とPSW132の実行レベルフラグELの値とを対にして保護領域780に退避する(ステップS84)。
退避部750によりCPU情報130の退避がなされた後、制御部770は、CPU情報130を更新する(ステップS85)。即ち、制御部770は、割込要求を受け付けた割込要因に対応する実行レベルELIRと同値をPSW132の実行レベルフラグELに設定し、その割込要因に対応する割込レベルLVと同値をPSW132の割込マスクレベルフラグIMに設定し、その割込要因に対応する割込処理情報ADに基づいて割込処理プログラムのアドレスをPC131に設定する。
ステップS85に続いて、制御部770は、PC131に従って、割込処理プログラムの実行を行う(ステップS86)。この際に割込処理プログラムは対応する実行レベルELIRで示された動作モードで動作することになる。即ち、ユーザレベルの割込処理プログラムはユーザモードで、特権レベルの割込処理プログラムは特権モードで動作することになる。
この割込処理プログラムは処理を終了したところに復帰命令を設けておくことを前提として、制御部770は、復帰命令を読み出したら、ステップS86を終了する。
なお、制御部770がある割込処理プログラムを実行している間において(ステップS86)、別の割込要因が発生した場合には、その割込要因に対して図12に示すステップS81からの一連の処理を行うことで、割込制御装置700は、多重割込に対応している。
割込処理プログラムの実行を終了した後には、制御部770は、復元部760に、スタック領域110に退避していたCPU情報を復元するよう指示する。
この指示を受けて、まず復元部760は、保護領域780内に退避されているSPの値をSP139に設定し、退避されている実行レベルフラグの値をPSW132の実行レベルフラグELに設定し(ステップS87)、SP139が指し示すスタック領域110内のCPU情報のうち実行レベルフラグ以外の部分をCPUに復元する(ステップS88)。
CPU情報が復元された後、制御部770は、Hレベルにセットされた割込要求フラグIRに対応する割込要因が存在すれば、その割込要因に着目して引き続きステップS81からの一連の処理を行い、そのような割込要因が存在しなければ、割込制御処理を終える(ステップS89)。
図13は、割込制御装置700の行う命令実行処理を示すフローチャートである。
制御部770は、プログラムを解釈して実行する際に、プログラム中の1命令毎について同図に示す命令実行処理を行う。
まず、制御部770は、PC131に示されるメモリアドレスに位置している命令を読み出して解読し(ステップS91)、続いて、PSW132の実行レベルフラグELはユーザレベルであるか否かを判定し(ステップS92)、ユーザレベルでなく特権レベルであればその解読した命令を解読結果に応じて実行する(ステップS96)。なお、ステップS91の命令読出し機能及びステップS96の命令実行機能は従来のCPUの有する機能と同一である。
また、ステップS92においてPSW132の実行レベルフラグELがユーザレベルであった場合には、制御部770は、ステップS91で解読した命令がメモリへデータを書き込む命令であるか否かを判定し(ステップS93)、書き込む命令でなければ、命令を解読結果に応じて実行するが(ステップS96)、書き込む命令であれば、その命令の書き込み対象のメモリアドレスが、保護領域780内において特権レベルを示す実行レベルフラグと対にして格納されているSPの内容で示されるところのCPU情報の分量のスタック領域110の範囲内に含まれているか否かを判定する(ステップS94)。
ステップS94において、その範囲内に書き込み対象のメモリアドレスが含まれていると判定したときには、制御部770は、システムエラーと扱う等の異常処理を行い(ステップS95)、その範囲内に書き込み対象のメモリアドレスが含まれていないと判定したときには、制御部770は、その書き込み命令を実行する(ステップS96)。
このステップS94に基づく制御により、スタック領域110に退避されているCPU情報のうち、割込により実行が一時的に中断されている特権レベルのプログラムの実行状態を示すCPU情報については、ユーザレベルの割込処理プログラムによる書き換えが抑止されるが、そのスタック領域110に退避されているCPU情報のうち、割込により実行が一時的に中断されているユーザレベルのプログラムの実行状態を示すCPU情報については、ユーザレベルの割込処理プログラムによる書き換えが許容されることになる。
以下、実施の形態3で割込制御装置500の動作説明に用いた図7を、再び参照して割込制御装置700における割込制御の具体的動作について説明する。
特権レベルの割込要因に対応する割込処理プログラムで構成されるタスクbと、ユーザレベルの割込要因に対応する割込処理プログラムで構成されるタスクc及びタスクdとがあり、割込レベルの示す優先度はタスクdが最も高く、続いてタスクc、タスクbの順であることとし、まずタスクbに対応する割込要因が発生してタスクbに対応する割込処理プログラムが実行されている間に、タスクc、タスクdの順で、対応する割込要因が発生することとして説明する。
まず、特権レベルのタスクbが実行されており、これに対応してPSW132中の割込マスクレベルフラグIMは低い優先度を示しており、実行レベルフラグELは特権レベルを示している。
時刻T400において、タスクcに対応する割込要因Cが発生して、その割込要因Cに対応する割込要求フラグIRがHレベルにセットされ、時刻T401において、割込要因Bに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示しているため制御部770のステップS81の判定の結果、割込が受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、CPU情報130がスタック領域110に退避され、保護領域780内にSPと特権レベルを示す実行レベルフラグとが対にして退避され、制御部770は、割込マスクレベルIMを更新し実行レベルフラグELをユーザレベルにしてタスクcの割込処理プログラムを実行し始める。
このタスクcの割込処理プログラムは、制御部770の命令実行処理(図13)により、スタック領域110に退避されたタスクbに係るCPU情報を書き換えることができない。
続いて、時刻T402において、タスクcの割込処理プログラムが実行されている間に、タスクdに対応する割込要因Dが発生し、割込要因Dに対応する割込要求フラグIRがHレベルにセットされたとする。この割込要因Dに対応する割込レベルLVは割込マスクレベルIMより高い優先度を示すため、制御部770のステップS81の判定の結果、割込は受け付けられ、その割込要求フラグIRはLレベルにリセットされる。その後、タスクcの実行に関連していたCPU情報130は、スタック領域110に退避され、保護領域780内にSPとユーザレベルを示す実行レベルフラグとが対にして退避され、制御部770は、割込マスクレベルIMを更新し実行レベルフラグELをユーザレベルにしてタスクdの割込処理プログラムを実行し始める。従って、タスクcの割込処理プログラムの実行は一時的に中断されることになる。
このとき実行され始めたタスクdの割込処理プログラムは、制御部770の命令実行処理(図13)により、スタック領域110に最後に退避されたタスクcに係るCPU情報を書き換えることができるだけで、タスクbに係るCPU情報を書き換えることはできない。
その後、時刻T404において、タスクdの割込処理プログラム中の復帰命令が実行されると、復元部760は、保護領域780内からSP139とPSW132の実行レベルフラグELとを復元し、SP139の指し示すスタック領域110内のCPU情報のうち実行レベルフラグ以外の部分をCPUに復元する。これにより、以後、タスクcの割込処理プログラムの実行が再開されることになる。
その後、タスクcの割込処理プログラム中の復帰命令が実行されると、復元部760は、前回と同様にCPU情報のCPUへの復元を行う。これにより、以後、タスクbに対応する特権レベルの割込処理プログラムの実行が再開されることになる。
なお、タスクdに対応するユーザレベルの割込処理プログラムは、実行中にスタック領域110に退避されているCPU情報のうち、タスクcに係るCPU情報を書き換えることができ、これにより、例えば復帰アドレス等を任意のアドレスと書き換えることができ、これは有効にPC等としてCPUに復元されるようになる。しかしながら、もし、タスクdに対応するユーザレベルの割込処理プログラムがスタック領域110の内容であるCPU情報のうち実行レベルまで書き換えて特権レベルの乗っ取りを行おうとしても、その割込処理プログラムからの復帰時に、実行レベルフラグについては保護領域780に退避されている内容がCPUに復元されるので、その乗っ取りは行えない。また、ユーザレベルの割込処理プログラムによっては、保護領域780の内容を書き換えることはできない。
また、タスクdに対応する割込処理プログラムとタスクcに対応する割込処理プログラムとの両方とも、スタック領域110に退避されているタスクbに係るCPU情報を書き換えることはできず、ユーザレベルの割込処理プログラムによって特権レベルのプログラムの実行用の情報が不正に書き換えられることはない。
<補足>
以上、本発明に係る割込制御装置の実施の形態1〜4について説明したが、実施の形態で示した割込制御装置を以下に示すように部分的に変形することもできる。
(1)実施の形態に係る割込制御装置を構成する各機能部の機能分担は、実施の形態で示したものに限定されるものではない。例えば、制御部、退避部及び復元部は、一体となってCPU内の一機能ブロックとして実装されることとしてもよいし、その機能の一部をOS等の特権レベルのプログラムのCPUでの実行により実現してもよい。
(2)実施の形態に係る割込制御装置においては、割込情報記憶部120の内容は、OSによりシステム起動時等に設定されることとしたが、OS等において、ユーザレベルのプログラムからの、ユーザレベルの割込処理プログラムの登録要求を受け付けて、その登録要求に従って、割込情報記憶部120の内容を更新することとしてもよい。但し、このような登録要求に対してOS等は、割込情報記憶部120内に登録する実行レベルELIRを必ずユーザレベルにする必要がある。
(3)実施の形態では、割込に際して退避及び復元の対象となるCPU情報を、PSW及びPCとしたが、CPU情報に、CPUのいくらかの汎用レジスタ或いは特殊レジスタの内容を含めることとしてもよい。
(4)実施の形態1〜4では、実行レベルとしては、ユーザレベルと特権レベルとの2段階のみを示したが、3段階以上の実行レベルが存在することとしてもよい。その3段階以上の実行レベルは、実行レベルが高いほどコンピュータ資源の利用に係る権限範囲が広く、多くのコンピュータ資源を利用できる。この3段階以上の実行レベルも、高レベルと低レベルとに大別することが可能であり、この場合、高レベルはOS等の信頼性の高いプログラムに付与されている実行レベルの総称となり、低レベルは、不正プログラムが含まれ得るユーザプログラムに対して付与されている実行レベルの総称となる。
(5)実施の形態1に係る割込処理装置は、割込マスクレベルフラグIMと割込レベルLVとの比較み優先度を比較することとしたが、この優先度の比較は、実行レベルフラグELと実行レベルELIRとが一致する場合に限って行うこととしてもよいし、この優先度の比較を省略して本発明に係る割込処理装置を実現してもよい。
(6)実施の形態3では、保護範囲管理部590内の保護フラグNPEがユーザレベルを示す場合にはスタック領域中、保護開始アドレスSTAが示すアドレス+1から保護終了アドレスEDAが示すアドレスまでを、ユーザレベルのプログラムからは書き換えられないように保護したが、保護開始アドレスSTAが示すアドレスにCPU情報の分量を加えて得られるアドレスから保護終了アドレスEDAが示すアドレスまでを、ユーザレベルのプログラムからは書き換えられないように保護することとしてもよい。
(7)実施の形態4では、保護領域内にSPと実行レベルELとを対にして退避することとしたが、実行レベルELの退避を省略し、実行レベルに関わらず、保護領域内に格納されたSPが指し示すスタック領域内のCPU情報のユーザレベルプログラムによる書き換えを抑止することとしてもよい。
本発明は、プログラムを複数の実行レベルに区分してコンピュータ資源の利用可能範囲に差を設けたコンピュータシステムにおける割込制御に利用できる。
本発明の実施の形態1に係る割込制御装置100の機能ブロック図である。 割込制御装置100の行う割込制御処理を示すフローチャートである。 割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。 実施の形態1の変形例に係る割込制御装置200の機能ブロック図である。 実施の形態2に係る割込制御装置300の機能ブロック図である。 割込制御装置300の行う割込制御処理を示すフローチャートである。 割込要因の発生と割込処理プログラムの実行との関係を示すタイミングチャートである。 実施の形態3に係る割込制御装置500の機能ブロック図である。 割込制御装置500の行う割込制御処理を示すフローチャートである。 割込制御装置500の行う命令実行処理を示すフローチャートである。 実施の形態3の変形例に係る割込制御装置700の機能ブロック図である。 割込制御装置700の行う割込制御処理を示すフローチャートである。 割込制御装置700の行う命令実行処理を示すフローチャートである。
符号の説明
100、200、300、500、700 割込制御装置
150、350、550、750 退避部
160、260、360、560、760 復元部
170、370、570、770 制御部
380、580、780 保護領域
110 スタック領域
120 割込情報記憶部
130 CPU情報
131 PC
132 PSW
139 SP
140 比較部
161 OR論理ゲート
262 異常検出部
590 保護範囲管理部

Claims (7)

  1. 多重割込の制御を行う割込制御装置であって、
    複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、
    割込要因が発生した場合に、当該割込要因に対応するレベル情報が示す実行レベルと、CPUにおけるプロセッサステータスワードにより示される実行レベルとを比較する比較手段と、
    CPUにおけるプロセッサステータスワード及びプログラムカウンタの内容であるCPU情報をメモリ内のスタック領域に退避する退避手段と、
    前記スタック領域から退避されているCPU情報を読み出して、CPU情報をCPUに復元する復元手段と、
    前記比較手段により割込要因に対応するレベル情報が示す実行レベルの方が低くないという比較結果が得られた場合には、前記退避手段にCPU情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを該当の実行レベルで実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該CPU情報の復元を行わせる割込制御手段とを備える
    ことを特徴とする割込制御装置。
  2. 前記復元手段は、前記スタック領域から退避されているCPU情報を読み出した後に、CPUにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合には読み出したCPU情報を低レベルを示すように強制してから、CPU情報のCPUへの前記復元を行う
    ことを特徴とする請求項1記載の割込制御装置。
  3. 前記割込制御装置は更に、CPUにおけるプロセッサステータスワードにより示される実行レベルが低レベルである場合において、前記復元手段が前記スタック領域から読み出したCPU情報が高レベルを示すときには、異常発生の旨を外部に出力する異常検出手段を備える
    ことを特徴とする請求項1記載の割込制御装置。
  4. 多重割込の制御を行う割込制御装置であって、
    複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、
    CPUにおけるプロセッサステータスワード及びプログラムカウンタの内容であるCPU情報を、所定レジスタが指し示すメモリ内のスタック領域とメモリ内の所定の保護領域との両方に退避し、当該所定レジスタの内容であるスタックポインタを当該保護領域に退避する退避手段と、
    前記保護領域からスタックポインタを読み出して所定レジスタに設定し、退避されているCPU情報を前記保護領域から読み出して、当該保護領域からのCPU情報のうち実行レベルの部分が低レベルを示す場合には当該実行レベルの部分と、当該所定レジスタが指し示すスタック領域に退避されているCPU情報のうち実行レベル以外の部分とをCPUに復元し、当該保護領域からのCPU情報のうち実行レベルの部分が高レベルを示す場合には当該保護領域からのCPU情報をCPUに復元する復元手段と、
    CPUにおける実行レベルが低レベルである場合には前記保護領域へデータを書き込む命令の実行を抑止する保護手段と、
    割込要因が発生した場合に、前記退避手段にCPU情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段にCPU情報の復元を行わせる割込制御手段とを備える
    ことを特徴とする割込制御装置。
  5. 多重割込の制御を行う割込制御装置であって、
    複数の割込要因それぞれについて、当該割込要因の発生に対して実行されるべき割込処理プログラムを特定する割込処理情報と、当該割込処理プログラムの実行レベルが高レベルか低レベルかを示すレベル情報とを予め記憶している割込情報記憶手段と、
    CPUにおけるプロセッサステータスワード及びプログラムカウンタの内容であるCPU情報を、所定レジスタが指し示すメモリ内のスタック領域に退避し、当該所定レジスタの内容であるスタックポインタを、メモリ内の保護領域に退避する退避手段と、
    前記保護領域からスタックポインタを読み出して所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からCPU情報を読み出して、当該CPU情報をCPUに復元する復元手段と、
    CPUにおける実行レベルが低レベルである場合には、前記保護領域へデータを書き込む命令の実行を抑止する第1保護手段と、
    CPUにおける実行レベルが低レベルである場合には、前記保護領域に退避されて読み出されていないスタックポインタが指し示すスタック領域に対して、データを書き込む命令の実行を抑止する第2保護手段と、
    割込要因が発生した場合に、前記退避手段にCPU情報の退避を行わせた後に当該割込要因に対応する割込処理情報により特定される割込処理プログラムを実行しその割込処理プログラムの実行を終了した後に前記復元手段に当該CPU情報の復元を行わせる割込制御手段とを備える
    ことを特徴とする割込制御装置。
  6. 前記退避手段は、更に、前記スタックポインタと対にして、CPUにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、
    前記第2保護手段は、前記保護領域に退避されて読み出されていないスタックポインタのうち、高レベルを示す実行レベルと対にされているスタックポインタが指し示すスタック領域に対しての場合に限って、スタック領域にデータを書き込む命令の実行について前記抑止を行い、
    前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からCPU情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをCPUに復元する
    ことを特徴とする請求項5記載の割込制御装置。
  7. 前記退避手段は、更に、前記スタックポインタと対にして、CPUにおけるプロセッサステータスワードにより示される実行レベルを、前記保護領域に退避し、
    前記第2保護手段は、前記保護領域に直前に退避されて読み出されていないスタックポインタが、高レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスから所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、低レベルを示す実行レベルと対にされている場合には、そのスタックポインタが示すアドレスを所定アドレス側に所定量進めたアドレスから、所定アドレスまでの範囲内にデータを書き込む命令の実行について前記抑止を行い、
    前記復元手段は、前記保護領域からスタックポインタと実行レベルとの対を読み出して、読み出したスタックポインタを所定レジスタに設定し、当該所定レジスタが指し示すスタック領域からCPU情報のうち実行レベル以外の部分を読み出して当該部分と読み出した実行レベルとをCPUに復元する
    ことを特徴とする請求項5記載の割込制御装置。
JP2004131692A 2004-04-27 2004-04-27 割込制御装置 Pending JP2005316599A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2004131692A JP2005316599A (ja) 2004-04-27 2004-04-27 割込制御装置
CN200510066132.5A CN1690971A (zh) 2004-04-27 2005-04-21 中断控制装置
US11/115,270 US20050240701A1 (en) 2004-04-27 2005-04-27 Interrupt control apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004131692A JP2005316599A (ja) 2004-04-27 2004-04-27 割込制御装置

Publications (1)

Publication Number Publication Date
JP2005316599A true JP2005316599A (ja) 2005-11-10

Family

ID=35137785

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004131692A Pending JP2005316599A (ja) 2004-04-27 2004-04-27 割込制御装置

Country Status (3)

Country Link
US (1) US20050240701A1 (ja)
JP (1) JP2005316599A (ja)
CN (1) CN1690971A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008176637A (ja) * 2007-01-19 2008-07-31 Toshiba Corp 情報処理装置
WO2023144939A1 (ja) * 2022-01-26 2023-08-03 三菱電機株式会社 コンピュータ、制御方法及び制御プログラム

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4357442B2 (ja) * 2005-03-23 2009-11-04 株式会社東芝 プラン実行装置、プラン実行方法およびプログラム
US8125243B1 (en) * 2007-03-12 2012-02-28 Cypress Semiconductor Corporation Integrity checking of configurable data of programmable device
GB2461851A (en) * 2008-07-10 2010-01-20 Cambridge Consultants Processor, which stores interrupt enable flags in a location used for other functions
CN103294544B (zh) * 2012-02-27 2016-08-17 展讯通信(上海)有限公司 嵌入式***及其中断处理方法与装置
US9530008B2 (en) * 2013-05-29 2016-12-27 Infineon Technologies Ag System and method for a processing device with a priority interrupt
CN103414525B (zh) * 2013-07-18 2015-04-01 中国电子科技集团公司第四十一研究所 超外差接收分析仪器通道输出电平的自动调节***及方法
US9734326B2 (en) * 2014-02-04 2017-08-15 Nxp Usa, Inc. Dynamic interrupt stack protection
US9921984B2 (en) * 2014-12-23 2018-03-20 Intel Corporation Delivering interrupts to user-level applications
GB2538091B (en) 2015-05-07 2018-03-14 Advanced Risc Mach Ltd Verifying correct code execution context
JP6955858B2 (ja) * 2016-10-17 2021-10-27 オークマ株式会社 制御装置
JP2018180768A (ja) * 2017-04-07 2018-11-15 ルネサスエレクトロニクス株式会社 半導体装置
CN107861763B (zh) * 2017-12-01 2022-03-11 麒麟软件有限公司 一种面向飞腾处理器休眠过程的中断路由环境恢复方法
CN109283906A (zh) * 2018-11-10 2019-01-29 国网电力科学研究院武汉南瑞有限责任公司 一种叠堆过程的监控***及方法
CN113486356B (zh) * 2021-06-30 2024-05-07 佛山职业技术学院 一种控制中断源的运行方法、装置、终端设备及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4349873A (en) * 1980-04-02 1982-09-14 Motorola, Inc. Microprocessor interrupt processing
JP3176093B2 (ja) * 1991-09-05 2001-06-11 日本電気株式会社 マイクロプロセッサの割込み制御装置
US5659759A (en) * 1992-09-21 1997-08-19 Kabushiki Kaisha Toshiba Data processing device having improved interrupt controller to process interrupts of different priority levels
JPH0713772A (ja) * 1993-06-29 1995-01-17 Mitsubishi Electric Corp データ処理装置
US5497494A (en) * 1993-07-23 1996-03-05 International Business Machines Corporation Method for saving and restoring the state of a CPU executing code in protected mode
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
JPH08305585A (ja) * 1995-05-11 1996-11-22 Matsushita Electric Ind Co Ltd 割込制御装置
US20040168078A1 (en) * 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
US20050138263A1 (en) * 2003-12-23 2005-06-23 Mckeen Francis X. Method and apparatus to retain system control when a buffer overflow attack occurs

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008176637A (ja) * 2007-01-19 2008-07-31 Toshiba Corp 情報処理装置
WO2023144939A1 (ja) * 2022-01-26 2023-08-03 三菱電機株式会社 コンピュータ、制御方法及び制御プログラム
JP7418670B2 (ja) 2022-01-26 2024-01-19 三菱電機株式会社 コンピュータ、制御方法及び制御プログラム

Also Published As

Publication number Publication date
CN1690971A (zh) 2005-11-02
US20050240701A1 (en) 2005-10-27

Similar Documents

Publication Publication Date Title
US20050240701A1 (en) Interrupt control apparatus
KR101740224B1 (ko) 불법 모드 변경처리
JP4759059B2 (ja) メモリページをプログラムに対応付けるページカラーリング
US10083040B2 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
JP6204479B2 (ja) 安全なドメインとより安全性の低いドメインの間で切り替えるときに安全ではないアクセスから安全なデータ及びプログラム・コードを保護するためのデータ処理装置及び方法
US8850573B1 (en) Computing device with untrusted user execution mode
US7437759B1 (en) Kernel mode overflow attack prevention system and method
JP2007304954A (ja) メモリ保護機能を有するコンピュータシステム
JP2001325150A (ja) アクセス監視装置及びアクセス監視方法
WO2007040228A1 (ja) 情報処理装置、情報処理方法およびプログラム
JP2009157542A (ja) 情報処理装置及びそのスタックポインタ更新方法
JP7432586B2 (ja) スタック・ポインタを検証すること
CN112818327A (zh) 基于TrustZone的用户级代码和数据安全可信保护方法及装置
KR20220108176A (ko) 도메인 전이 디스에이블 구성 파라미터
JP2009009232A (ja) コンピュータとカーネル保護方法並びにコンピュータソフトウエア
US11500982B2 (en) Systems and methods for reliably injecting control flow integrity into binaries by tokenizing return addresses
JP2004326331A (ja) 不正メモリアクセス検知方法及びそのプログラム
JP4627266B2 (ja) 未知のマルウェアによる情報漏洩防止システム
US20220171851A1 (en) Firmware version corruption attack prevention
JP2009230479A (ja) マイクロプロセッサ
JP5081280B2 (ja) 可搬記憶媒体
JP2018036695A (ja) 情報処理監視装置、情報処理監視方法、監視プログラム、記録媒体及び情報処理装置
JP2005209178A (ja) メモリ保護装置、メモリ保護方法及びメモリ保護プログラム
JP2005235071A (ja) 情報処理装置、情報処理方法、プログラム及び記録媒体
KR20220108175A (ko) 모드간 호출 분기 명령어