(57)【特許請求の範囲】
【請求項１】
プログラムを構成する要素がアクセス可能なメモリ領域を記述したリージョン切替表及び前記プログラムを構成する要素間で制御移行可能なアドレスを記述したドメイン切替表を格納する記憶手段と、
前記リージョン切替表と直前にアクセスしたアドレスを含むリージョンの番号と保護ドメインを識別するドメイン番号とを保持する制御レジスタと、
前記プログラムを構成する要素が要求するメモリ操作コード及びアドレス、前記制御レジスタが保持する前記リージョンの番号及び前記ドメイン番号が入力され、前記プログラムを構成する要素が要求するアドレスが前記直前にアクセスしたアドレスを含むリージョンに含まれるかを検査し、含まれない場合にはリージョン境界フォルトを発生して前記プログラムを中断し、含まれる場合には前記ドメイン番号を調べて前記プログラムを構成する要素が要求するメモリ操作コードの許可の有無を検査し、許可がない場合にドメイン境界フォルトを発生して前記プログラムを中断するアクセス検査ユニットと、
前記アクセス検査ユニットが前記リージョン境界フォルトまたは前記ドメイン境界フォルトを発生する場合に、前記プログラムを構成する要素が要求する前記メモリ操作コードを記録する操作コードレジスタ、及び前記アドレスを記録するアドレスレジスタと、
前記アクセス検査ユニットが前記リージョン境界フォルトを発生する場合に、前記制御レジスタが記録する前記リージョン番号を、前記操作コードレジスタが記録する前記アドレスを含むリージョン番号に更新するリージョン切替手段と、
前記アクセス検査ユニットが前記ドメイン境界フォルトを発生する場合に、前記アドレスレジスタが保持する前記メモリ操作コード、前記操作コードレジスタが記録する前記アドレス、前記ドメイン切替表、および前記制御レジスタが保持する前記ドメイン番号が入力され、アクセス違反およびドメイン切替違反を検出する場合にはアクセスを制限し、検出しない場合には前記制御レジスタが保持するドメイン番号を更新して前記プログラムを再開するドメイン切替手段と、
を具備することを特徴とするメモリアクセス制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアクセス制御装置に関する。
【背景技術】
【０００２】
ＣＰＵなどの計算機は、プログラムに対してフラット（単一の整数で指定したメモリ番地が対等なこと）にアドレスすることが可能なメモリ空間を提供している。フラットにアドレスすることが可能なメモリ空間を利用するとポインタ（メモリ番地を格納した変数のこと、プログラミング言語によるメモリ番地の抽象化方法）を用いてデータ構造を構築する方法やコピーを必要としないデータの共有が可能となり、効率の高いプログラムを作成できる。しかしながらプログラムの一部に欠陥や悪意のあるコードが存在するとプログラム全体について信頼性が低下するという問題がある。
【０００３】
そこで信頼性が問題となるような大規模なプログラムでは、複数のプログラム部品（ここでは構成要素）を結合することで、プログラムを作成する。各プログラム部品は、明確に定義された公開インターフェイスを有してそれぞれ連携し、また各プログラム部品間でのメモリのアクセスリージョンや関数コールには必要な範囲に制限するようにしてプログラムが作成される。
【０００４】
このようにプログラム部品ごとのメモリアクセスや関数コールに一定の制限を加えることで、プログラム部品に欠陥や悪意のあるコードが存在してもその影響を一定の範囲に抑えることができる。こうしてプログラム全体の信頼性を向上させることができる。
【０００５】
ここでプログラム部品ごとのメモリアクセスについては、アクセス可能なアドレス領域とそれぞれの操作の種類が規定された許可マップを作成する。この許可マップを参照することによってアクセス制限を行っている。この許可マップに記載されたメモリ領域は、記憶装置のアドレス空間上に散在し、メモリ領域の開始及び終了となる番地はページ境界ごとに整列していない。また、プログラムを変更してプログラム部品を交換するとこれに対応させる許可マップを大幅に変更しなければならないという問題が生じる。
【０００６】
このような許可マップを利用したアクセス制御方法として、従来ＰＴＥ方式、ＡＢＲ方式、混合方式がある。
【０００７】
ＰＴＥ方式は、メモリ管理ユニット（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）が管理するページ表エントリ（Ｐａｇｅ  Ｔａｂｌｅ  Ｅｎｔｒｙ）に許可ビットを設け、ページ単位でアクセス制限を行うものである。アクセス制御単位となるページ（４キロバイト程度）は、ソフトウエアと比較しても大きな単位であり、プログラム内の保護対象をページ境界に整列させると、ページ内でのフラグメンテーションが生じメモリの利用効率が低くなる。通常は、ページ表エントリに格納する許可ビットは少数のセットに限られ、実行中のプログラム部品に応じた許可マップの多重化を効率よくできないという問題がある。
【０００８】
また、ＡＢＲ方式は、アクセス可能なメモリ領域の上下限を指定するアドレス境界レジスタ（Ａｄｄｒｅｓｓ  Ｂｏｕｎｄａｒｙ  Ｒｅｇｉｓｔｅｒ）やセグメント記述子（Ｓｅｇｍｅｎｔ  Ｄｅｓｃｒｉｐｔｏｒ）を設け、アクセス可能なアドレス値の範囲を制限するものである。アクセス制御単位は任意の場所及びサイズに定義できるが、同時に指定可能なメモリ領域の数はアドレス境界レジスタの数で制限されるという問題がある。
【０００９】
また、混合方式は、アドレス上下限、許可ビット及び優先度の組で構成される情報を数セット同時に定義し、要求アドレスを含む最高優先度の区間の許可ビットに基づきアクセス制御するものである。アドレス区間に関しては、アドレスの上位ビット列で指定する方式や特許文献１に記載されているようなアドレス境界レジスタで指定する方式がある。これらの方式ではアドレス上位ビット列による指定は、アドレス区間のサイズ及び配置に関して制限が強いという問題がある。ここで言う強い制限とは、指定可能なアドレス区間が２のべき乗サイズに限定され、区間のアドレスがサイズの倍数に限られることを意味する。
【特許文献１】特開２００３−６０４６公報。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
このような方法では、プログラムコードを改変することなく、各プログラム部品のアクセスメモリ領域を効率よく制限することができなかった。
【００１１】
本発明は、プログラムコードを改変することなく、格プログラム部品のアクセスメモリ領域を効率よく制限することを可能とするメモリアクセス制限装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明は、プログラムを構成する要素がアクセス可能なメモリ領域を記述したリージョン切替表及び前記プログラムを構成する要素間で制御移行可能なアドレスを記述したドメイン切替表を格納する記憶手段と、
前記リージョン切替表と直前にアクセスしたアドレスを含むリージョンの番号と保護ドメインを識別するドメイン番号とを保持する制御レジスタと、
前記プログラムを構成する要素が要求するメモリ操作コード及びアドレス、前記制御レジスタが保持する前記リージョンの番号及び前記ドメイン番号が入力され、前記プログラムを構成する要素が要求するアドレスが前記直前にアクセスしたアドレスを含むリージョンに含まれるかを検査し、含まれない場合にはリージョン境界フォルトを発生して前記プログラムを中断し、含まれる場合には前記ドメイン番号を調べて前記プログラムを構成する要素が要求するメモリ操作コードの許可の有無を検査し、許可がない場合にドメイン境界フォルトを発生して前記プログラムを中断するアクセス検査ユニットと、
前記アクセス検査ユニットが前記リージョン境界フォルトまたは前記ドメイン境界フォルトを発生する場合に、前記プログラムを構成する要素が要求する前記メモリ操作コードを記録する操作コードレジスタ、及び前記アドレスを記録するアドレスレジスタと、
前記アクセス検査ユニットが前記リージョン境界フォルトを発生する場合に、前記制御レジスタが記録する前記リージョン番号を、前記操作コードレジスタが記録する前記アドレスを含むリージョン番号に更新するリージョン切替手段と、
前記アクセス検査ユニットが前記ドメイン境界フォルトを発生する場合に、前記アドレスレジスタが保持する前記メモリ操作コード、前記操作コードレジスタが記録する前記アドレス、前記ドメイン切替表、および前記制御レジスタが保持する前記ドメイン番号が入力され、アクセス違反およびドメイン切替違反を検出する場合にはアクセスを制限し、検出しない場合には前記制御レジスタが保持するドメイン番号を更新して前記プログラムを再開するドメイン切替手段と、
を具備することを特徴とするメモリアクセス制御装置を提供する。
【発明の効果】
【００１３】
本発明では、保護対象となるプログラムの構造を反映したアクセス制御表を作成し、このアクセス制御表をプログラム実行前にプロセッサに登録する。そしてプロセッサがアクセス制御表を参照して、許可マップの設定や切替を行う。こうすることでプログラムの設定によらず許可マップの設定及び切替を行うことができるので、各プログラム部品のアクセスメモリ領域を効率よく制限することを可能とする。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の好ましい実施形態について図面を用いて説明する。なお、本発明は以下にあげる実施形態に限定されるものではなく、種々応用して用いることができる。
【００１５】
先ず、本発明のアクセス制御装置をコンピュータシステムに設けた場合の概略について図１を用いて説明する。
【００１６】
図１に示すように、このコンピュータシステムは、メインの計算を行うプロセッサコア１１と、情報を記録するためのメインメモリ１９と、プロセッサコア１１への割込みを制御する割込みコントローラ１３（ＩＮＴＣ）と、メインメモリ１９の動作を管理するためのメモリ管理ユニット１２（ＭＭＵ）と命令／データ用キャッシュメモリ１５と、プロセッサをバス１８へ接続するためのバスインターフェイスユニット１６（ＢＩＵ）と、メインメモリ１９をバス１８へ接続するためのメモリコントローラ２０と、プロセッサコア１１と割り込みコントローラ１３へ接続し実行中のプログラムに応じたアクセス制御を行うアクセス検査ユニット１４（ＡＣＵ）を有している。メモリシステムとは、プロセッサコア１１からメインメモリ１９へ至る経路上の要素から構成され、メモリ管理ユニット１２や命令／データ用キャッシュメモリ１５やメモリコントローラ２０やメインメモリ１９などで階層的に構成される。アクセス検査ユニット１４は、プロセッサコア１１とメモリシステムの間に位置し、プロセッサコア１１のメモリシステムへのアクセスを監視する。具体的にはプロセッサコア１１がメモリシステムへ要求する番地と操作コードを入力とし、実行中のプログラムに関するアクセス制御情報を参照する。そしてプログラムがメモリシステムへアクセス要求した場合にそのアクセスについて許可或いは不許可を与える。
【００１７】
図２は、図１で示したアクセス検査ユニット１４及びメインメモリ１９上に配置したアクセス制御装置の詳細を示すブロック図である。
【００１８】
図２に示すように、このアクセス制御装置は、アクセス検査ユニット１４（ＡＣＵ）と、ＡＣＵ制御レジスタ３０（ＲＥＧ）と、ＡＣＵ初期化装置２３（ＩＮＩ）と、リージョン切替装置２４（ＲＳＣ）と、ドメイン切替装置２５（ＤＳＣ）を有している。また、メインメモリ１９は、ドメイン切替スタック２７（ＤＳＳ）と、リージョン切替表２８（ＲＳＴ）と、ドメイン切替表２９（ＤＳＴ）を格納有している。なお、管理プログラム２２は、ブロック２３と２４と２５を有している。アクセス制御情報２６は、ブロック２７と２８と２９を有している。アクセス制御情報は、アクセス制御情報２６のうちリージョン切替表２８とドメイン切替表２９を含む。
【００１９】
このアクセス制御装置では、保護対象となる応用プログラム２１の構造を反映したアクセス制御表（２８および２９）を用いて、ＡＣＵ初期化装置２３（ＩＮＩ）が、このアクセス制御表をプログラム実行前にメインメモリ１９へ格納する。そしてリージョン切替表２８（ＲＳＴ）をＡＣＵ制御レジスタ（ＲＥＧ）へ格納し、応用プログラム２１を開始する。次に、アクセス検査ユニット１４が、リージョン切替表２８（ＲＳＴ）を参照して応用プログラム２１のメモリアクセスを監視する。そして異常を検出するとプロセッサコア１１へ割込みを発生し、管理プログラム２４（ＲＳＣ）および２５（ＤＳＣ）へ制御を移す。リージョン切替装置２４（ＲＳＣ）およびドメイン切替装置２５（ＤＳＣ）が、許可マップの設定及び切替えを応用プログラム２１によらずに行う。
【００２０】
こうすることで、アクセス制御表の記述内容を変更することにより、信頼性と性能とのトレードオフを考慮したチューニングが可能である。
【００２１】
実行中のプログラムが要求するアドレスに空間的な局所性が存在する場合には、アクセス制御装置の利用頻度が低くなる機能（具体的には２４及び２５）をソフトウエアにより実装する。こうして性能を大幅に低下させることなくプロセッサコア１１を低コスト化、省電力化させることができる。
【００２２】
ここでアクセス制御表は、プログラムがメモリへアクセスすることを許可する許可マップと、プログラムがメモリへアクセスする領域を切替える切替許可情報を定義するデータであり、リージョン切替表とドメイン切替表を具備する。
【００２３】
図２の矢印３１が示すようにプロセッサコア１１から、要求コード及び要求アドレスの信号が、ＣＰＵクロックに同期してアクセス検査装置１４に入力される。また、ＡＣＵ制御レジスタ３０からリージョン番号（図３のＲＮ＃）と、ドメイン番号（図３のＤＮ１）と、リージョン切替表２８（図３のＴＡＢ）がアクセス検査ユニット１４（ＡＣＵ）へ入力される。アクセス検査ユニット１４が、応用プログラムのメモリアクセスに異常を検出すると、プロセッサコア１１へ例外を送信する。例外発生時は、アクセス検査ユニットが、例外コード（図３のＩＮＴ）と、例外発生時のコア要求コード（図３のＯＰＣ）及びコア要求アドレス（図３のＡＤＲ）をレジスタ３０へ保存する。操作要求コードは、メモリ操作の種別（Ｒ｜Ｗ｜Ｘ）と、制御移行の要因（ｃａｌｌ｜ｒｅｔｎ｜ｏｔｈｒ）と、アクセス要求時のアドレスレジスタ番号の三つの成分を含む。メモリ操作の種別は、メモリ読み出し（Ｒ）か、メモリ書き込み（Ｗ）か、命令読み出し（Ｘ）かである。制御移行要因は、手続き呼出し（ｃａｌｌ）か、手続き戻り（ｒｅｔｎ）か、その他（ｏｔｈｒ）である。
【００２４】
次に、アクセス検査ユニット１４からの割り込みを受けたプロセッサコア１１は、応用プログラム２１の実行を中断し、あらかじめ登録されたソフトウエア実装（可能）部２２のリージョン切替装置２４またはドメイン切替装置２５を開始する。リージョン切替装置２４は、割込み要因をＡＣＵ制御レジスタ３０から読み込み、リージョン切替表２８を参照してリージョン番号（図３のＲＮ＃）を更新する。ドメイン切替装置２５は、割込み要因をＡＣＵ制御レジスタ３０から読み込み、ドメイン切替表２９（図４）及びドメイン切替スタック２７（図４）を参照してドメイン番号（図３のＤＮ１）を更新する。ドメイン切替装置２５は、メモリへのアクセス違反（ＩＮＴ３）やドメイン切替違反（ＩＮＴ４）を検出することがある。管理プログラム２４または２５が違反を検出することなく終了すると、プロセッサコア１１は応用プログラムを例外が発生した命令から再開する。
【００２５】
本発明によるアクセス制御装置では、プログラム実行中にプロセッサコア１１が要求するメモリへのアクセスを制限する方法であって、プログラムの静的構造と対応するアクセス制御表２８及び２９（図４）を用い、プログラムの動的状態と対応するＡＣＵ制御レジスタ３０とドメイン切替スタック２７を用い、アクセス制御表と制御レジスタを参照しながらプログラムのアクセス可否を判定している。
【００２６】
本発明によるアクセス制御装置では、アクセス制御表の構成及び配置に関して、プログラム部品ごとの許可マップを記述するリージョン切替表２８とプログラム部品間の制御移行の関係を記述するドメイン切替表２９とに分離し、頻繁にアクセスするリージョン切替表２８をＡＣＵ制御レジスタファイル３０（ＲＥＧ）に配置することで高速化と信頼性の向上を図っている。
【００２７】
次に、図４を用いて本発明のリージョン切替表２８（ＲＳＴ）、ドメイン切替表２９（ＤＳＴ）及びドメイン切替スタック２７（ＤＳＳ）について説明する。
【００２８】
図４に示すように、本発明のリージョン切替表２８（ＤＳＳ）は行方向にアドレス、列方向にドメインで表されている。ここではドメインdom-0のアドレスrst.addr[0]からアドレスrst.addr[1]までは命令領域（'r-x'例えば０ｘ５）、ドメインdom-0のrst.addr[1]からアドレスrst.addr[2]はアクセス禁止領域（'---'例えば０ｘ０）、ドメインdom-0のアドレスrst.addr[2]からアドレスrst.addr[3]は読み出し専用領域（'r--'例えば０ｘ１）、ドメインdom-0のアドレスrst.addr[3]からアドレスrst.addr[4]は読み書き可能領域（'rw-'例えば０ｘ３）、ドメインdom-0のアドレスrst.addr[4]からアドレスrst.addr[5]はアクセス禁止領域（'---'例えば０ｘ０）ドメインdom-0のアドレスrst.addr[5]以降もアクセス禁止領域（'---'例えば０ｘ０）となっている。また、ドメインdom-1のアドレスrst.addr[0]からアドレスrst.addr[1]まではアクセス禁止領域（'---'例えば０ｘ０）、ドメインdom-1のrst.addr[1]からアドレスrst.addr[2]は命令領域（'r-x'例えば０ｘ５）、ドメインdom-1のアドレスrst.addr[2]からアドレスrst.addr[3]は読み出し専用領域（'r--'例えば０ｘ１）、ドメインdom-1のアドレスrst.addr[3]からアドレスrst.addr[4]はアクセス禁止領域（'---'例えば０ｘ０）、ドメインdom-1のアドレスrst.addr[4]からアドレスrst.addr[5]はＲＷ（読み書き可例えば０ｘ３）、ドメインdom-1のアドレスrst.addr[5]以降は全アクセス許可領域（'rwx'例えば０ｘ７）となっている。
【００２９】
また、ドメイン切替表２９（ＤＳＴ）は、それぞれドメインdom-0、ドメインdom-1の入り口dst.addr[0],dst.addr[1],dst.addr[2],dst.addr[3]の場所を示している。ドメイン切替スタック２７（ＤＳＳ）は図４に示すとおりである。
【００３０】
保護ドメインと呼ぶ論理的な単位を定義し、プログラムの実行可能コードをいずれかの保護ドメインに割り当てる。同じ保護ドメインの実行可能コードに対しては、共通のアクセス許可マップを用いる。実行可能コードに欠陥や悪意のある部分が存在する際に、影響が及び範囲が保護ドメインとなる。
【００３１】
保護ドメインは、プログラムを構成する部品ごとの割り当てを想定しているが、関係する（製造者が同じ）複数の部品に対しひとつの保護ドメインを割り当てることも可能である。プログラムは複数のドメインを有し、プログラム部品に存在する欠陥は、各ドメイン内で隔離される。保護ドメインは番号で一意的に識別されるものとし、この識別子を以下ではドメイン番号と称す。
【００３２】
また、プログラムのすべての保護ドメイン間で許可属性の共通したアドレスを同じクラスとし、各アドレスをクラスに分けた後、同じクラスに属しアドレス値の連続した最大の区間を保護リージョンと称す。この定義に従ってリージョン切替表を表すと、リージョン最小性が保障される。
【００３３】
定義からリージョン全体の集合は、アドレス空間全体を互いに重なることなく覆い、保護ドメインと要求アドレスを与えると、アドレス区間への可能な操作が決まる。各リージョンはアドレスによる整列順序で一意的に（１対１に）識別可能であり、この識別子を以下ではリージョン番号と呼ぶ。
【００３４】
次に、図３を用いてアクセス検査ユニット１４（ＡＣＵ）の動作を制御するＡＣＵ制御レジスタ３０（ＲＥＧ）について説明する。
【００３５】
まず、制御レジスタ（ＣＴＲ）は、アクセス検査の有無を指定するレジスタであり、プロセッサコア１１からのアクセス検査オン／オフを切り替えるために使用する。アクセス検査ユニット１４が例外を検出して例外ハンドラを開始する際は、アクセス検査装置１４が、制御レジスタ（ＣＴＲ）の値をオンからオフへ切り替える。
【００３６】
要求アドレスレジスタ（ＡＤＲ）は、例外発生時にプロセッサコア１１の要求する番地を記録するレジスタであり、アクセス検査ユニット１４が書き込む。ＡＣＵ管理プログラム２２を実行中のプロセッサコア１１が読み出す。
【００３７】
要求操作コードレジスタ（ＯＰＣ）は、例外発生時にプロセッサコア１１の要求する操作コードを記録するレジスタであり、アクセス検査ユニット１４が書き込む。ＡＣＵ管理プログラム２２を実行中のプロセッサコア１１が読み出す。
【００３８】
操作要求コードレジスタ（ＯＰＣ）の値は、メモリ操作の種別（ｏｐｃ［０］：：＝Ｒ｜Ｗ｜Ｘ）と、制御移行の要因（ｏｐｃ［１］：：＝ｃａｌｌ｜ｒｅｔｎ｜ｏｔｈｒ）と、アクセス要求時のアドレスレジスタ番号（ｏｐｃ［２］）の三成分を含む。メモリ操作の種別は、メモリ読み出し（Ｒ）か、メモリ書き込み（Ｗ）か、命令読み出し（Ｘ）かである。制御移行要因は、手続き呼出し（ｃａｌｌ）か、手続き戻り（ｒｅｔｎ）か、その他（ｏｔｈｒ）である。
【００３９】
例外コードレジスタ（ＩＮＴ）は、アクセス検査ユニット１４が、例外検出時に更新して、例外処理コード実行中にプロセッサコア１１が参照する。例外コードには、リージョン切替例外（ＩＮＴ１）、ドメイン切替例外（ＩＮＴ２）がある。
【００４０】
アドレス境界配列ベースレジスタ（ＴＰ１）は、リージョン切替表のアドレス配列（rst.addr[]）先頭のＡＣＵ制御レジスタ番号を保持するレジスタで、同じ応用プログラムを実行する間は、レジスタ値の変更は必要ない。
【００４１】
パーミッション配列ベースレジスタ（ＴＰ２）は、リージョン切替表のパーミッション配列（rst.perm[]）先頭のＡＣＵ制御レジスタ番号を保持するレジスタで、同じ応用プログラムを実行する間は、レジスタ値の変更は必要ない。  
ドメイン番号レジスタ（ＤＮ１）は、応用プログラムの実行中の保護ドメインを識別するドメイン番号を保持する。保護ドメインが変化する際は、後述のドメイン切替装置２５がドメイン番号レジスタを更新する。
【００４２】
リージョン番号レジスタ（ＲＮ＃）は、プロセッサコア１１のアドレスレジスタと対に、直前にアクセスしたアドレスを含むリージョン番号を保持する。アドレスがリージョン外に変化する際は、後述のリージョン切替装置２４がリージョン番号レジスタを更新する。メモリアクセスに空間的な局所性が存在する場合、リージョン番号レジスタをアドレスレジスタ毎に多重化すると、リージョン切替装置２４の実行回数を減らす効果がある。
【００４３】
リージョン切替表２８のエンコード例を図５のＲＳＴに示す。フラットなメモリ空間を覆う複数のアドレス区域（リージョン）を定め、各ドメインのメモリ領域へのアクセス可能な操作を列挙する。リージョン切替表は境界アドレスの配列rst.addr[]と許可ビットマップの配列rst.perm[]から構成される。リージョン表領域の先頭ワードは、表のサイズＮを記録する。アドレス配列rst.addr[]は、リージョンの境界アドレスをアドレス値の順番に整列して格納し、配列の先頭rst.addr[0]および末尾rst.addr[M]の要素にアドレス空間の下限（３２ビット番地なら0x00000000）および上限（３２ビット番地なら0xffffffff）を格納する。リージョン番号iのリージョンは、rst.addr[i]以上rst.addr[i+1]未満のアドレス領域と約束する。なお、ここで用いた記号x.y[z]とは「変数xから名前yの成分を取得し、取得したyを配列と見なした時のz番目の成分」の約束とする。
【００４４】
ビットマップ配列rst.perm[]は、i番目要素rst.perm[i]にリージョン番号iの許可属性をビットマップ形式で格納し、ドメイン番号jに対する許可属性は同ビットマップのj番目のスロットrst.perm[i][j]に格納する。このエンコード例では、各スロットは４ビットとしドメインを８個まで記述できる。
【００４５】
ドメイン切替表ＤＳＴのエンコード例を図５に示す。ドメイン切替表は、アドレス配列dst.addr[]とビットマップ配列dst.perm[]から構成される。ドメイン切替表領域の先頭ワードは、表のサイズMを格納する。アドレス配列dst.addr[]は、保護ドメインの入口となるアドレス一覧をアドレスの順番に整列して格納する。成分dst.perm[k].dom及びdst.perm[k].callは、k番目の要素にエントリポイントdst.addr[k]の所属ドメイン番号および他ドメインからの呼出し可否を示すビットマップを保持する。
【００４６】
通常、保護ドメインのエントリポイント（入口）とは、プログラム部品が外部へ公開するインターフェイス関数アドレス（Application Programming Interfaceの開始番地）とする。
【００４７】
プロセッサコア１１は、応用プログラム２１を実行する利用者モード以外に、管理プログラム２２を実行する特権モードを有し、リージョン切替装置２４及びドメイン切替装置２５は特権モードで実行し、特権モードではメモリへのアクセスを検査しない約束とする。アクセス検査ユニット１４がフォルトを発生すると、プロセッサコア１１は応用プログラム２１の実行を中断し、実行モードを利用者モードから特権モードへ切り替え、あらかじめ例外ハンドラとして登録された管理プログラムを開始する。
【００４８】
このプロセッサへ登録する例外ハンドラは、リージョン切替装置２４やドメイン切替装置２５自身であるか、これら管理プログラム２２をフォルトの種別に応じて起動する管理用プログラムとする。上記の特権モードにおけるアクセス検査の中断は、先程の制御レジスタCTRをオフとすれば実現可能である。
【００４９】
次に、図３、図６、図７、図８、図９、図１０を用いてアクセス検査装置の動作ついて説明する。
【００５０】
図２の様に、アクセス検査ユニット１４は、ＡＣＵ制御レジスタ群３０と、プロセッサコアの要求（図２の３１）するアドレスＶＡと操作コードＯＰを入力とし動作し、例外発生時のアドレスＡＤＲと操作コードＯＰＣと例外要因コードＩＮＴを出力とする。
【００５１】
図３と図６の様に、リージョン番号レジスタ（ＲＮ＃）からアドレス境界値を決定し、コア要求アドレスＶＡがアドレス境界に含まれることを検査し、ドメイン番号レジスタの値からリージョンへの許可ビットを決定し、当該リージョンにアクセス可能なことを検査する。前段の検査に不合格となるとアドレス境界フォルト（ＩＮＴ１）を発生し、後段の検査に不合格となるとドメイン境界フォルト（ＩＮＴ２）を発生する。
【００５２】
図１０の様に、アクセス検査ユニット１４をハードウエア回路として実装し、ＣＰＵサイクルに同期して応用プログラムのアクセス違反を検査し、フォルトが発生しない限り、アクセス検査に伴う処理遅延を発生しない。
【００５３】
アクセス検査ユニット１４は、制御レジスタＣＴＲがオンの場合に限り、プロセッサコア１１がメインメモリ１９へアクセスする前に可否を判定する。アクセス検査装置１４は、リージョン切替表ＴＰ１のリージョン番号ＲＮ＃に対応するエントリを調べ、要求アドレスＶＡがリージョン境界に収まらない場合は、リージョン境界フォルト（ＩＮＴ1）を発生する。次に、当該アドレスＶＡを含むリージョンエントリのドメインＤＮ１に対応する許可属性を調べ、要求コードＯＰの許可がない場合に（ＩＮＴ２）を発生する。例外発生時は、例外を発生した命令の要求アドレスＶＡをＡＤＲに、操作コードＯＰをＯＰＣに保存し、例外要因をＩＮＴへ保存し、制御レジスタＣＴＲをオフにして、プロセッサコア１１へ割込みを発生する。プロセッサコア１１は、応用プログラムを中断して、管理プログラム（リージョン切替装置２４、ドメイン切替装置２５）を開始する。なお、管理プログラムから復帰すると制御レジスタＣＴＲをオンにし、応用プログラムを例外を発生した命令アドレスから再開する。
【００５４】
次に、図３、図８を用いてリージョン切替装置２４の動作について説明する。
【００５５】
プロセッサコア１１の要求するメモリ番地が、現在のリージョン番号の示すリージョン境界の外へ出ると、アクセス検査装置１４がアドレス境界フォルト（ＩＮＴ1）を発生し、プロセッサコア１１を特権モードへ切り替え、リージョン切替コードを開始する。
【００５６】
リージョン切替装置２４は、例外発生時の要因がＩＮＴ１の場合に開始され、例外発生時のコア要求アドレスＡＤＲ、当該プロセスのリージョン切替表ＴＰ１を入力とし、要求アドレスＡＤＲを含む新たなリージョン番号ＲＮ＃を出力する。リージョン番号を格納すべきレジスタは、コア要求操作コードＯＰＣからプロセッサコア１１のＩＳＡ（命令セットアーキテクチャ）と対応したアドレスレジスタ番号により決定する。
【００５７】
リージョン切替装置２４は、要求アドレスＶＡを含むリージョン番号をリージョン切替表２８から二分探索を用いて検索し、新しいリージョン番号をリージョン番号レジスタＲＮ＃に設定した後、例外ハンドラから復帰する。プロセッサは、アドレス境界フォルトを発生したプログラム命令から再開する。リージョン切替装置２４実行直後に再開した命令では、ＩＮＴ１は発生しない。
【００５８】
次に、図３、図８を用いてドメイン切替装置２５について説明する。
【００５９】
ドメイン切替装置２５は、例外発生時の要因コードがＩＮＴ２の場合に起動され、例外発生時の要求アドレス（図３のＡＤＲ）、当該プロセスのドメイン切替表２９（ＤＳＴ）、現在のドメイン番号（図３のＤＮ１）、ドメイン切替スタック（ＤＳＳ）を入力とし、新たなドメイン番号か例外（ＩＮＴ３またはＩＮＴ４）を出力する。
【００６０】
ドメイン切替装置２５は、コア要求操作コードの種別が命令読み出し（op[0]=ｘ）以外の場合はアクセス違反（ＩＮＴ３）と判定する。命令読み出し（ｘ）の場合に限り、ドメイン切替の可能性がある。次に、制御移行の要因がリターン（op[1]=retn）によるとき、ドメイン切替装置は、ドメイン切替スタック２７（ＤＳＳ）から降ろした戻り番地と要求番地を比較し、一致の時はドメイン番号を切り替え、不一致の時はドメイン切替違反（ＩＮＴ４）と判定する。
【００６１】
制御移行の要因がコール（op[1]=call）によるとき、コア要求アドレスＡＤＲをキーにドメイン切替表２９（ＤＳＴ）を検索（結果k）し、エントリポイントが存在し（va=e[$dn1]）、かつ現ドメインから呼び出し許可である（c[k][$dn1]=1）ならば、現在のドメイン番号と関数の戻り番地をドメイン切替スタック２７（ＤＳＳ）に積み、エントリポイントが属するドメインに切り替え（ドメイン番号レジスタＤＮ１を更新し）、管理プログラムを終了する。プロセッサは、ドメイン境界フォルトを発生した応用プログラムの命令を再開する。
【００６２】
アクセス保護違反（ＩＮＴ３）やドメイン切替違反（ＩＮＴ４）の発生時に、当該プログラムの回復制御等を行う管理プログラムが登録されている時は、リカバリ用の管理プログラムへ制御を移し、それ以外の場合はプログラムを停止する。
【００６３】
次に、アクセス局所性とチューニングについて、図２、図３、図４、図１０を用いて説明する。
【００６４】
プログラム実行中にプロセッサの要求するアドレスの系列には、「先に要求したアドレスの近くを次も要求する」空間的な局所性が存在する。空間的な局所性が存在すると、レジスタ値の変化する頻度に観点からは、アドレスレジスタよりもドメイン番号レジスタ（ＤＮ１）の変化頻度は小さく、ドメイン番号レジスタよりもリージョン番号レジスタ（ＲＮ＃）の変化頻度が小さくなる傾向が存在する。また、プロセッサコアのアドレスレジスタごとにリージョン番号レジスタ（ＲＮ＃）を保持することで、リージョン番号を変更する頻度が少なくなる。
【００６５】
図２で提案するアクセス制御装置においては、アクセス検査ユニットを図１０のようにハードウエア回路で実装し、ＣＰＵサイクルに同期して応用プログラムを監視するため、制御オーバーヘッドが顕在化するのは、アドレス及びドメインが変化するタイミングで管理プログラムを実行する箇所に限られるため、アクセスの局所性が強く、管理プログラム実行のための割込み頻度が低いほど、アクセス制御に伴うオーバーヘッドが小さい。極端な例として、単一のドメインを定義し、全アドレスを単一リージョンとしフルアクセス('rwx')に設定することで、一切のオーバーヘッドを生ずることなくプログラムを実行できる。
【００６６】
必要に応じてリージョンおよびドメインの粒度を変更すると、信頼性と性能のトレードオフを考慮することが可能となる。チューニングに際しては、アクセス制御対象となるプログラムコード自体の改変は不要であり、保護ドメインを記述したアクセス制御表のみの変更を要する。
【００６７】
図２のアクセス制御装置の実現において必要な機能のうち、高頻度で利用するアクセス検査ユニット１４のみをハードウエア回路で実装し、各フォルト発生時の低頻度で利用するリージョン切替装置２４及びドメイン切替装置２５を管理プログラムとしてソフトウエアで実装することで、アクセス制御装置の実現に必要となるハードウエアの量が抑えられ、プロセッサの低コスト化や省電力化にも寄与する。
【００６８】
管理プログラムは、オペレーティングシステムが存在するシステム上では、オペレーティングシステム上のＡＣＵドライバ用プログラムとして登録する。オペレーティングシステムを持たないシステム上では、応用プログラムにリンクする形態と取る。
【００６９】
オペレーティングシステムが存在する時は、保護対象プログラムをユーザ領域メモリに読み込む際、対応するアクセス制御表を所定のディレクトリから探してカーネル領域へ読み込む。対応するアクセス制御表が存在しない場合は、標準のアクセス制御表を作成して利用する。プログラムの開始前に、リージョン番号とドメイン番号の初期値を設定し、対象プログラムに対するアクセス制御を開始する。
【００７０】
図１１の様に、オペレーティングの存在するシステムで、別の応用プログラムを実行するなどの事情から保護対象の応用プログラムを中断する場合は、カーネル領域の当該プログラム管理ブロックに、ＡＣＵ制御レジスタ群３０を退避し、再開時に復元するものと約束する。なお、ＡＣＵ制御レジスタのリージョン切替表ＲＳＴ格納領域ＴＡＢに余裕がある場合は、複数の応用プログラムのＲＳＴを同時にレジスタに配置して、ＲＳＴ先頭を示すレジスタ
ＴＰ１とＴＰ２を切り替える効率的な実装も可能である。
【００７１】
本発明の応用例として、応用プログラムに動的にリンクして実行する拡張（プラグイン）コードに対して、あらかじめ専用のドメインを割り当て、拡張コードが呼び出すシステムコール等のエントリポイントを個別に指定することで、拡張コードに対して安全なサンドボックス実行環境を容易に実現できる。
【００７２】
本発明の応用例として、ドメイン切替装置２４がソフトウエアで提供される場合に、システム利用者はドメイン切替コードの変更により、元のプログラムを修正することなく、ドメイン入口の関数が呼ばれるたびに実行可能なフック関数を登録することが可能である。このようなフック関数は、引数の検査を追加、プログラムのデバッグや運用時のログ保存等に有効である。
【００７３】
同様にドメイン切替装置２４の変更により、応用プログラムの部品（構成要素）のアクセス違反が生じた場合に、プログラム内の特定のハンドルコードを呼び出すよう登録することが可能となる。この様なハンドルコードには、応用プログラムの部品単位の回復制御（リカバリハンドラ）などを記述することが可能である。
【図面の簡単な説明】
【００７４】
【図１】本発明のアクセス制御装置を含むコンピュータシステムの構成図。
【図２】本発明のアクセス制御装置の構成を示す機能ブロック図。
【図３】本発明のアクセス検査ユニットの制御レジスタ図。
【図４】本発明のリージョン切替表とドメイン切替表の図。
【図５】本発明のリージョン切替表とドメイン切替表の符号化例。
【図６】本発明のアクセス検査ユニット初期化装置のフローチャート。
【図７】本発明のアクセス検査ユニットの動作の流れを示すフローチャート。
【図８】本発明のリージョン切替え装置のフローチャート。
【図９】本発明のドメイン切替え装置のフローチャート。
【図１０】本発明のアクセス検査ユニットの構成図。
【図１１】本発明のプログラムの開始、中断及び終了の動作を示すフローチャート。
【符号の説明】
【００７５】
１１・・・プロセッサコア
１２・・・メモリ管理ユニット
１３・・・割込みコントローラ
１４・・・アクセス検査ユニット
１５・・・命令／データ用キャッシュメモリ
１６・・・バスインターフェイスユニット
１７・・・ＤＭＡコントローラ
１８・・・バス
１９・・・メインメモリ
２０・・・メモリコントローラ
２１・・・応用プログラム
２２・・・管理プログラム
２３・・・ＡＣＵ初期化装置
２３・・・リージョン切替装置
２５・・・ドメイン切替装置
２６・・・アクセス制御情報
２７・・・ドメイン切替スタック
２８・・・リージョン切替表
２９・・・ドメイン切替表
３０・・・ＡＣＵ制御レジスタ
３１・・・コア要求信号
【図１】
0004519738.tif 000002
【図２】
0004519738.tif 000003
【図３】
0004519738.tif 000004
【図４】
0004519738.tif 000005
【図５】
0004519738.tif 000006
【図６】
0004519738.tif 000007
【図７】
0004519738.tif 000008
【図８】
0004519738.tif 000009
【図９】
0004519738.tif 000010
【図１０】
0004519738.tif 000011
【図１１】
0004519738.tif 000012