(57)【要約】【課題】既存のハードウェアを搭載したプロセッサでも正しく動作し、予めアドレスが決定されていないデータに対しても保護情報を細粒度で設定可能とするメモリ管理装置を提供する。【解決手段】メモリ管理装置１００は、細粒度のアクセス制御を行う場合には、アドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入し、当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するアドレス変換部１０２と、フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するフォールト制御部１０３とを備える。【選択図】図１
2006155516.tif 000002
【特許請求の範囲】
【請求項１】
仮想空間に振り付けられたプログラムを実行し、仮想アドレスから物理アドレスへの変換を行うメモリ管理装置であって、
細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入し、当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するアドレス変換部と、
前記フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するフォールト制御部と
を備えることを特徴とするメモリ管理装置。
【請求項２】
前記アドレス変換部は、前記仮想アドレス領域の指定のために、固定または可変サイズのアドレス領域ごとに割り当てる領域番号を用いることを特徴とする請求項１に記載のメモリ管理装置。
【請求項３】
前記アドレス変換部は、前記仮想アドレス領域の指定のために仮想アドレス管理に用いるページ番号を利用することを特徴とする請求項２に記載のメモリ管理装置。
【請求項４】
前記アクセス保護情報として、読み込み、書き込み、実行遷移のいずれか、またはそれらの組み合わせを指定することを特徴とする請求項１〜３のいずれか１項に記載のメモリ管理装置。
【請求項５】
仮想空間に振り付けられたプログラムを実行し、仮想アドレスから物理アドレスへの変換を行うメモリ管理システムであって、
細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入し、当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するアドレス変換部と、前記フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するフォールト制御部とを備えるメモリ管理装置と、
前記アクセス保護情報を変更する際に、前記アクセス保護情報により保護される領域のデータを無効化するキャッシュメモリと
を備えることを特徴とするメモリ管理システム。
【請求項６】
プログラムが使用する変数毎にアクセス可能なアドレス範囲を予め保有する、前記仮想空間に割り付けられるプログラムファイルを生成するプログラム生成装置を更に備え、
前記メモリ管理装置は、当該プログラム生成装置により作成されたプログラムに記述されたアクセス保護情報に基づきメモリを保護することを特徴とする請求項５に記載のメモリ管理システム。
【請求項７】
動的に格納するアドレスが決定されるプログラム中の変数名や関数名のシンボル毎にアクセス可能なアドレス範囲の情報をプログラムファイルに保有することを特徴とする請求項６に記載のメモリ管理システム。
【請求項８】
前記プログラム生成装置は、コンパイル時に１つの関数がアドレス範囲の境界を超えないように生成することを特徴とする請求項６又は７に記載のメモリ管理システム。
【請求項９】
コンパイル時、及び実行時において変数領域を割り当てる際、アドレス範囲の境界を超えないように生成することを特徴とする請求項６〜８のいずれか１項に記載のメモリ管理システム。
【請求項１０】
仮想空間に振り付けられたプログラムを実行し、仮想アドレスから物理アドレスへの変換を行うメモリ管理方法であって、
細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入するステップと、
当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するステップと、
前記フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するステップと
を含むことを特徴とするメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理装置、メモリ管理システム及びメモリ管理方法に関する。
【背景技術】
【０００２】
近年、計算機において実行されるソフトウェアの規模が増大しており、機能毎に独立した複数のプログラムとして協調して動作させることが一般的に行われている。このように複数のプログラムを協調して動作させる場合、ある機能を実現するプログラムに脆弱な部分が存在すれば、悪意を持つ利用者が当該脆弱な部分を利用して計算機に侵入し、他の機能を実現するプログラムの実行を妨げたり、他の機能を実現するプログラムが有する情報を盗用したりすることが可能である（例えば、非特許文献１参照。）。これを防止するため、各プログラムが参照するメモリの仮想アドレス空間を独立にして他のプログラムからは参照できないようにすることで、一つのプログラムに対する侵入が他のプログラムの実行を妨害しないようにし、被害をできるだけ少なくする方法が一般的にとられる。
【０００３】
図２５はこのようなプログラム毎に独立した仮想アドレス空間を実現するメモリ管理装置の構成例である。メモリ管理装置２００はアドレス変換テーブルインデックス２０１と複数のアドレス変換テーブル２０４、２０５と、保護情報判定手段２１０とから構成される。図２５において、アドレス変換テーブルは２０４と２０５の２つのみ記述しているが、アドレス変換テーブルは異なる仮想アドレス空間を持たせるプログラムの数だけ用意する。
【０００４】
アドレス変換テーブルインデックス２０１は、実行するプログラムを切り替える度に外部より値を更新し、複数のアドレス変換テーブルのうちどれを利用するかを指定する。図２５の例では、アドレス変換テーブルインデックス２０１は、アドレス変換テーブル２０４を示している。
【０００５】
アドレス変換テーブルは、プログラム毎の仮想アドレスから物理アドレスへの変換に用いるテーブルであり、仮想アドレスのページ番号から、物理アドレスのページ番号およびそのアクセス保護情報を検索するために用いられ、メモリ管理装置の内部ではなく物理メモリ上に配置されてもよい。
【０００６】
アクセス保護情報は、ページに対するアクセスが許可されているかどうか、アクセス種別毎に記述し、例えば、読み、書き、実行それぞれに対するアクセスが許可されているか否かを記述する。なお、ここでは仮想アドレス、物理アドレスともに連続したアドレスにより指定されるデータをひとまとまりにしたものをページと表現し、ページ番号はアドレスの上位Ｎビットであるとする。
【０００７】
計算機があるプログラムを実行中、ＣＰＵはメモリにアクセスしようとする場合、そのアドレスをプログラム毎に独立な仮想アドレス２０２として、アクセス種別２０８とともにメモリ管理装置２００に与える。仮想アドレス２０２は、メモリ管理装置２００内で仮想ページ番号２０６とオフセット２０７に分離される。この分離は、仮想ページ番号を仮想ページアドレスの上位Ｎビットとし、残りのビットをオフセットとすることで行われる。
【０００８】
メモリ管理装置２００は、アドレス変換テーブルインデックス２０１により指定されたアドレス変換テーブル、すなわちアドレス変換テーブル２０４内を検索し、一致する仮想ページ番号が存在するか検索する。一致する仮想ページ番号がアドレス変換テーブルに存在すれば、その仮想ページ番号と組となる物理ページ番号と保護情報を取り出す。保護情報は当該仮想アドレスに対するアクセス種別毎の保護情報を有しており、例えば読み取りは可、書き込みは不可、実行は不可と記述され、外部よりメモリへのアクセスと同時に与えられるアクセス種別２０８が読み取りであった場合、このページへのアクセスは許可されるため、メモリ管理装置２００はアドレス変換テーブルより取り出された物理ページ番号とオフセットを合成し、これを物理アドレスとして出力する。合成は、例えば物理ページ番号を上位ビット、オフセットを下位ビットとして連結する。ＣＰＵはこの物理メモリを元に物理メモリにアクセスする。
【０００９】
なお、アドレス変換テーブルを仮想アドレスで検索した際、該当するエントリがなかった場合や、アクセス種別２０８で与えられたアクセスが保護情報で許可されていなかった場合などの処理についても開示されている（例えば、非特許文献２参照。）。
【００１０】
このようにプログラム毎にアドレス変換テーブルを用意し、アドレス変換テーブルインデックスの指定を変更しながら複数のプログラムを実行すれば、それぞれのプログラムのアドレス空間は独立したものとなり、他のプログラムから書き換えたり参照したりできなくすることが可能である。しかしながら、上記のような方法は、複数のプログラム間での保護を目的としたものであり、単一のプログラム中での細粒度の制御は実現されていなかった。そのため、プログラム中に一箇所脆弱な部分があれば、同一プログラムの中のデータを盗用したり、書き換えたりされる危険性は依然として残っていた。
【００１１】
この問題を解決するため、同一の仮想アドレス空間、すなわち同一のプログラムにおいて、プログラムの実行中のアドレスを元にメモリへのアクセス制御を行うことで、保護する方法が開示されている（例えば、特許文献１参照。）。
【００１２】
図２６を用いて特許文献１において開示される従来技術の要旨を説明する。
【００１３】
プログラム実行時、プログラムは仮想アドレス空間３００上に展開される。この時、仮想アドレス0xffff番地毎に領域番号1、2、3を割り振り、0x05000番地の命令 bra 0x10 050を実行しようとしているものとする。また、命令bra 0x10050はアドレス0x10050へ実行を遷移せよという命令と解釈するものとする。
【００１４】
アドレス変換テーブル３０６は、仮想ページ番号から物理ページ番号への変換に用いるが、その他、分割された領域番号毎に当該ページに対する読み、書き、実行のアクセスが許可されているか否かがアクセス保護情報として、それぞれR欄、W欄、Ｘ欄に記述されているものとする。図２６の例では、例えば仮想ページ番号0x10は物理ページ番号0x12に相当し、領域1からのメモリアクセスは読み、書きは許可されていないが、実行は許可されていることを表している。
【００１５】
以下、制御の手順を順に説明する。まず、メモリ管理装置は命令のオペランドである0x10050を仮想ページ番号とオフセットに分割する。図２６の例の場合、下位12ビットをオフセット、上位８ビットを仮想ページ番号として扱うこととし、仮想ページ番号は0x10、 オフセットは0x050となる。
【００１６】
次に、仮想ページアドレス0x10をもとにアドレス変換テーブル３０６より仮想ページ番号が0x10である行を検索する。同時に実行中の命令が存在するアドレス0x05000より、該当する領域番号を領域番号検出部３０７により求める。図２６の例の場合、先に割り当てたとおり0x05000は領域1である。アドレス変換テーブル３０６によれば、仮想ページ番号10に対し、領域番号1からは読み、書きは許可されていないが、実行権は許可されている。そのため、物理アドレス/プロテクションフォルト出力部３０８は、この仮想ページ番号10への実行遷移アクセスが許可されているとして、物理ページ番号とオフセットを合成し、 物理アドレス0x12 050を出力する。
【００１７】
例えば、仮想ページ番号10への実行アクセスが許可されていない場合、プロテクションフォルト信号を発生し、アクセス違反があったことを実行中のプログラムに知らせる。
【００１８】
特許文献１が開示する発明は、このように仮想メモリの各ページに対し、実行中の命令が存在するアドレスをもとにアクセス権を設定できるようにすることで、より細かい保護を実現でき、外部から侵入によるデータの漏洩や改竄をより困難にしている。
【特許文献１】特開平５-２５７８１１号公報
【非特許文献１】Exploiting Software, Greg Hoglund & Gary, Mcgraw, Addison-Wesley, ISBN 0-201-78695-8
【非特許文献２】UNIX（登録商標） Systems for Modern Architectures, Curt Schimmel, Addison-Wesley,1994
【発明の開示】
【発明が解決しようとする課題】
【００１９】
特許文献１が開示する方法の第一の問題点は、保護を行うためにはハードウェア装置の変更が必要であり、既存のハードウェアで実現できない点である。特許文献1ではアドレス変換テーブルの各エントリに対し、予め定義した領域毎にアクセス保護情報を記述する構成をとっている。一般にこのような変換を行う装置はMemory Managing Unit(MMU)や、さらにそれを高速化するためのTranslation Lookaside Buffer(TLB)と呼ばれるが、これらの装置を特許文献1が示すアドレス変換テーブルのエントリのフォーマットを理解するよう変更する必要がある。更に、アドレス変換テーブルのエントリの長さはハードウェアで処理することから有限且つ固定長としなければならず、一般には32bitや64bitで構成されるが、アクセス保護をより細かくしようとすると、特許文献1が開示する方法では、アクセス保護情報が膨大になってエントリの長さが大きくなり、ハードウェアで実現することが困難である。
【００２０】
又、第二の問題点は、仮想タグ付けされるキャッシュメモリを搭載したプロセッサではメモリの保護が十分にできない点である。実際の計算機では、物理メモリとして安価で大容量ではあるが低速なDRAMが採用されるため、この速度改善のためにキャッシュメモリが用いられるのが一般的である。しかしながら、特許文献１が開示する方法では、非特許文献２に示されるような仮想メモリのアドレスでタグ付け/インデックス付けを行うようなキャッシュを搭載するプロセッサの場合、仮想アドレスから物理アドレスへ変換する前にキャッシュメモリの検索を行うため、既にキャッシュメモリに格納されたデータの保護情報を変更した場合、その保護情報の変更がキャッシュメモリへのアクセス制御に反映されず、不当なアクセスを許可してしまったり、逆にアクセスできなかったりするという問題点があった。
【００２１】
図２７を用いてこの様子を説明する。図２７は、図２６の構成に仮想キャッシュメモリを追加した構成例である。図２７では、プログラムのメモリ空間の領域への分割の仕方、実行しようとする命令の例は、図２６の場合と同じであるとする。
【００２２】
図２６の例の場合と同様、プログラムの実行を開始したのち、初めて仮想ページ番号10の命令を実行しようとした場合、キャッシュメモリには仮想ページ番号10のデータは保存されていないため、図２６の例と同様、仮想アドレスは物理アドレスへと変換され、物理メモリ0x12050よりデータが取得される。この時、取得されたデータはキャッシュに保存される。
【００２３】
次に、仮想ページ番号10に対し、領域番号1からの実行権限を禁止したのちに、再度仮想アドレス0x05000の命令を実行しようとした時、プロセッサは最初にキャッシュの内容より仮想アドレス0x05000を元に検索する。２度目のアクセスであるため、キャッシュには以前アクセスした物理メモリ0x12050の値が格納されているが、このときは新たに設定した領域番号1からのアクセスを禁止するという設定がキャッシュメモリに反映されないため、実行可能であるとしてキャッシュに格納された物理メモリ0x12050の内容を継続実行してしまう。
【００２４】
更に、第三の問題点は、保護を行うアドレスが動的に決定される場合があるため、予め指定しておくことができない点である。例えばプログラムスタックやヒープに確保される変数領域Ａに対して領域1からのみ読み込みアクセスができるように設定しようとしても、変数領域Aのアドレスは実行時に決定されるため、これをどのように指定するか、特許文献１は具体的な方法を開示していない。
【００２５】
そこで、本発明は、上記の課題に鑑み、既存のハードウェアを搭載したプロセッサでも正しく動作し、予めアドレスが決定されていないデータに対しても保護情報を細粒度で設定可能とするメモリ管理装置、メモリ管理システム及びメモリ管理方法を提供することを目的とする。
【課題を解決するための手段】
【００２６】
上記目的を達成するため、本発明の特徴は、仮想空間に振り付けられたプログラムを実行し、仮想アドレスから物理アドレスへの変換を行うメモリ管理装置であって、（ａ）細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入し、当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するアドレス変換部と、（ｂ）フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するフォールト制御部とを備えるメモリ管理装置であることを要旨とする。
【００２７】
第１の特徴に係るメモリ管理装置によると、既存のハードウェアを搭載したプロセッサでも正しく動作し、予めアドレスが決定されていないデータに対しても保護情報を細粒度で設定することができる。
【００２８】
又、第１の特徴に係るメモリ管理装置において、アドレス変換部は、仮想アドレス領域の指定のために、固定または可変サイズのアドレス領域ごとに割り当てる領域番号を用いてもよい。
【００２９】
又、第１の特徴に係るメモリ管理装置において、アドレス変換部は、仮想アドレス領域の指定のために仮想アドレス管理に用いるページ番号を利用してもよい。
【００３０】
又、第１の特徴に係るメモリ管理装置において、アクセス保護情報として、読み込み、書き込み、実行遷移のいずれか、またはそれらの組み合わせを指定してもよい。
【００３１】
本発明の第２の特徴は、仮想空間に振り付けられたプログラムを実行し、仮想アドレスから物理アドレスへの変換を行うメモリ管理システムであって、（ａ）細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入し、当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するアドレス変換部と、フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するフォールト制御部とを備えるメモリ管理装置と、（ｂ）アクセス保護情報を変更する際に、アクセス保護情報により保護される領域のデータを無効化するキャッシュメモリとを備えるメモリ管理システムであることを要旨とする。
【００３２】
本発明の第２の特徴に係るメモリ管理システムによると、アクセス権の変更を加えた際にキャッシュメモリの内容を無効化するため、次回アクセス時にはキャッシュメモリにデータが存在しなくなり、必ず物理メモリよりデータを取得することになる。よって、仮想ページ毎のアクセス保護情報をプログラム実行中に変更した場合でも、アクセス保護情報を損なうことなくプログラムの実行を継続することができ、正しくアクセス権の変更が反映される。
【００３３】
又、第２の特徴に係るメモリ管理システムは、（ｃ）プログラムが使用する変数毎にアクセス可能なアドレス範囲を予め保有する、仮想空間に割り付けられるプログラムファイルを生成するプログラム生成装置を更に備え、メモリ管理装置は、当該プログラム生成装置により作成されたプログラムに記述されたアクセス保護情報に基づきメモリを保護してもよい。
【００３４】
このメモリ管理システムによると、実行時には未決定である仮想アドレスに関してもアクセス保護情報を設定することができる。
【００３５】
又、第２の特徴に係るメモリ管理システムにおいて、動的に格納するアドレスが決定されるプログラム中の変数名や関数名のシンボル毎にアクセス可能なアドレス範囲の情報をプログラムファイルに保有してもよい。
【００３６】
又、第２の特徴に係るメモリ管理システムにおいて、プログラム生成装置は、コンパイル時に１つの関数がアドレス範囲の境界を超えないように生成してもよい。
【００３７】
又、第２の特徴に係るメモリ管理システムにおいて、コンパイル時、及び実行時において変数領域を割り当てる際、アドレス範囲の境界を超えないように生成してもよい。
【００３８】
本発明の第３の特徴は、仮想空間に振り付けられたプログラムを実行し、仮想アドレスから物理アドレスへの変換を行うメモリ管理方法であって、（ａ）細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入するステップと、（ｂ）当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出するステップと、（ｃ）フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生するステップとを含むメモリ管理方法であることを要旨とする。
【００３９】
第３の特徴に係るメモリ管理方法によると、既存のハードウェアを搭載したプロセッサでも正しく動作し、予めアドレスが決定されていないデータに対しても保護情報を細粒度で設定することができる。
【発明の効果】
【００４０】
本発明によると、既存のハードウェアを搭載したプロセッサでも正しく動作し、予めアドレスが決定されていないデータに対しても保護情報を細粒度で設定可能とするメモリ管理装置、メモリ管理システム及びメモリ管理方法を提供することができる。
【発明を実施するための最良の形態】
【００４１】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００４２】
＜第１の実施の形態＞
（メモリ管理装置）
第１の実施の形態に係るメモリ管理装置１００は、図１に示すように、図示しないＣＰＵより、仮想アドレス１８０とアクセス種別１８１、現在実行中のプログラムのアドレスが変換された領域番号１８２を受け取り、実行中のアドレスからアクセス種別１８１により指定された仮想アドレス１８０に対するアクセスが許可されている場合には、変換した物理アドレス１８３を出力し、アクセスが許可されていない場合は、保護フォールト信号１８４を発生する。
【００４３】
第１の実施の形態では、計算機として一般的なアドレスサイズおよび演算サイズが３２ビットのＣＰＵを想定するが、本発明の要旨はこれに限定されるものではない。メモリ管理装置は、アドレス変換部１０２と、フォールト制御部１０３とを備える。
【００４４】
メモリ管理装置に与えられる領域番号１８２は、実行中のアドレスより変更されたものとし、変換方法としては、第１の実施の形態では、実行中のアドレスのうち上位16ビット+1を領域番号とするものとする。
【００４５】
アドレス変換部１０２は、細粒度のアクセス制御を行う場合には、仮想アドレスから物理アドレスへの変換に用いるアドレス変換テーブル内に記述されるエントリ内に、全ての仮想アドレス領域から当該エントリが表す領域に対し、外部より与えられたアクセス種別のアクセスが許可されているか否かを表すアクセス保護情報にアクセス禁止を表す値を代入し、当該仮想アドレス領域にアクセスが発生した際にはフォールトを検出する。
【００４６】
又、アドレス変換部１０２は、内部にアドレス変換テーブル１０４を有する。アドレス変換テーブル１０４は複数の行、すなわちエントリで構成され、各エントリは、図２に示すように、仮想ページ番号５０２、物理ページ番号５０３、アクセス保護情報５０４、細粒度アクセス権インデックス５０５より構成される。図２に本実施例において用いるアドレス変換テーブルの構成例を示す。図２の構成例では、１行がエントリに該当し、アクセス保護情報５０４、及び細粒度アクセス権インデックス５０５として、それぞれ読み、書き、実行遷移の３つの情報を記述するものとする。
【００４７】
第１の実施の形態においては、アクセス保護情報５０４として１が記述されていればアクセス許可、０が記述されていればアクセス不可であるとし、細粒度アクセス権インデックス５０５は、後述するフォールト制御部１０３が有する細粒度アクセス権インデックス毎にアクセスしてもよい領域のリストを示すテーブル中のインデックスを表す。
【００４８】
一般に、アドレス変換テーブル１０４は、アクセス保護の目的以外にも、プログラム毎に独立した仮想アドレスを実現するため、DRAM等の1次記憶装置と2次記憶装置間のデータ転送にも用いたりする。そのため、通常アドレス変換テーブルのエントリに図１、図２以外の情報の追加が必要である。また、アドレス変換テーブルの大きさを削減するために、アドレス変換テーブルを多段構成にしたりすることもできる。例えば、前者は、“Computer Organization & Design, The hardware/software interface second edition, D. A. Patterson, J. L. Hennessy”（以下において、非特許文献３という。）が示すような構成を第１の実施の形態に示すアドレス変換部１０２に追加することで容易に実現可能である。後者は、全段のアドレス変換テーブル１０４や最終段のアドレス変換テーブル１０４にアクセス保護情報５０４と細粒度アクセス権インデックス５０５が含まれるようにすることで容易に実現可能である。
【００４９】
フォールト制御部１０３は、フォールト検出時に、実行中のプログラムの仮想空間内の、実行中のアドレスからフォールトを発生させたエントリが表す領域に対するアクセスが許可されていない場合、保護フォールトを発生する。又、フォールト制御部１０３は、図３に示すように、細粒度アクセス権インデックス５０５毎にアクセスしてもよい領域のリストを示すテーブルである細粒度アクセス権テーブル１０５を持つ。図３は一例であり、アクセス権インデックスから当該インデックスが示す領域のリストを検索可能なデータ構造であれば、これに限るものではない。
【００５０】
図３に示す、細粒度アクセス権テーブル１０５は、先頭に細粒度アクセス権テーブルのテーブル長、以後、インデックス毎に領域リストへのポインタを有する。領域のリストは、メモリ管理装置外部にある領域番号検出部により変換された領域番号のリストであり、リストの終端として特殊な領域番号”0”を用いている。
【００５１】
領域番号検出部は、プログラム実行時に予め割り当てた仮想アドレスと領域番号を変換するが、第１の実施の形態では、前述のとおり、実行中の仮想アドレスのうち上位16ビット+1を領域番号とするものとする。
【００５２】
第１の実施の形態において、フォールト制御部１０３は、保護フォールト信号の発生手段についてのみ具体的に示すが、その他一般にメモリ管理装置に求められる、まだ物理アドレスが割り当てられていない仮想アドレスが入力された時にページフォールト信号を発生したりさせることについては、非特許文献２に示すような方法で実現すればよい。
【００５３】
尚、第１の実施の形態を実現するおりに、各構成要素をハード、ソフトいずれで実現するかは、様々な方法があるが、例えば、アドレス変換部をハードウェア、フォールト制御部をオペレーティングシステム内のソフトウェアモジュールとして実現すれば既存ハードウェアにおいても実現可能である。
【００５４】
（メモリ管理方法）
次に、第１の実施の形態に係るメモリ管理方法について、図４を用いて説明する。
【００５５】
まず、ステップＳ１０１において、外部より与えられた仮想アドレスはメモリ管理装置内部で上位ビットを仮想ページ番号１１０とページ内のオフセット１１１に分割される。第１の実施の形態では、仮想アドレスが32ビットで与えられるとし、上位20ビットを仮想ページ番号、下位12ビットをオフセットとして分割するが、仮想アドレス長や分割方法は、予め仮想アドレス長や分割するビット数が決まっていればその他のビットサイズに変更してもよい。分割された仮想ページ番号１１０はアドレス変換部１０２に渡される。
【００５６】
次に、ステップＳ１０２において、アドレス変換部１０２は、仮想ページ番号１１０を元にアドレス変換テーブルの中から該当するエントリを検索する。この検索はアドレス変換テーブルのエントリの大きさを固定長とすれば容易に実現可能である。
【００５７】
例えば、エントリの大きさを64ビットとし、アドレス変換テーブルを図２に示すような１段構成にした場合、該当するエントリが格納されているアドレスはアドレス変換テーブルの先頭アドレスＢとし、仮想ページ番号をＸとするとＢ＋６４Ｘで求まる。多段構成にしてメモリを節約したり、Translation Lookaside Bufferを用いて高速化したりする場合は、非特許文献３に示すような方法で検索すればよい。第１の実施の形態の場合、該当するエントリが必ず存在する構成を前提とするが、該当するエントリが存在しない場合、非特許文献３に示すような方法でエントリを追加したのちに、第１の実施の形態と同様の操作を行えばよい。
【００５８】
次に、該当するエントリを検索すると、次に、ステップＳ１０３において、当該エントリが表す領域に対するアクセスが可能か否か、アクセス保護情報と、アクセス種別１８１とをもとに判定する。アクセス保護情報中、アクセス種別と一致する欄にアクセス可を表す１が記述されていれば、ステップＳ１０４において、細粒度のアクセス制御は施されていないと判断し、アドレス変換部１０２はアクセスが許可されているとし、当該ページテーブルエントリの物理ページ番号を出力し、メモリ管理装置１００はオフセット１１１と合成して物理アドレス１８３を出力する。
【００５９】
アクセス保護情報中、アクセス種別と一致する欄にアクセス不可を表す0が記述されていれば、ステップＳ１０５において、アドレス変換部はアクセスが許可されていないとし、フォールト制御部１０３にフォールト信号１８５と細粒度アクセス権インデックス１８６とを伝達する。
【００６０】
次に、ステップＳ１０６において、フォールト制御部１０３は、アドレス変換部よりフォールト信号１８５と細粒度アクセス権インデックス１８６を受信時、細粒度アクセス権インデックス186の値が0であれば、ステップＳ１０７において、全領域からのアクセスが禁止されているとし、保護フォールトを発生させる。
【００６１】
細粒度アクセス権インデックスの値が0以外の時、フォールト制御部１０３は、実行中のアドレスに基づいた更に詳細なアクセス制御を行う。
【００６２】
次に、ステップＳ１０８において、細粒度アクセス権テーブルの中で、細粒度アクセス権インデックスが指定する領域リストの中に、領域番号１８２が含まれているか否かを検索し、含まれていれば、ステップＳ１０９において、現在の仮想アドレスに対するアクセスは許可されているとしてアクセス許可信号をアドレス変換部に伝える。含まれていなければ、ステップＳ１１０において、許可されていないことをアクセス許可信号としてアドレス変換部１０２に伝えるとともに、保護フォールト信号１８４を発生させる。
【００６３】
なお、アドレス変換部１０２のアドレス変換テーブル及びフォールト制御部１０３の細粒度アクセス権テーブルを複数持ち、実行中のプログラム毎に切り替えるものとする。実現方法は例えば特許文献１が示すようにアドレス変換テーブル、細粒度アクセス権テーブルを示すインデックスを用意しておき、その値をプログラムの実行を切り替えるたびに、それぞれのプログラム用のアドレス変換テーブル、細粒度アクセス権テーブルへと変更すればよい。
【００６４】
次に、図５を用いながら、メモリ管理装置１００の具体的な動作について説明する。
【００６５】
図５は、図２６に示すプログラムの実行状況を第１の実施の形態に示すメモリ管理方法で管理する様子を示している。よって、図２６と同様、プログラムは仮想アドレス空間３００上に展開され、仮想アドレス0xffff番地毎に領域番号1、2、3を割り振り、0x05000番地の命令 bra 0x10 050を実行しようとしているものとする。また、命令bra 0x10050はアドレス0x10050へ実行を遷移せよという命令と解釈するものであるから、アクセス種別１８１は実行遷移であるとする。
【００６６】
まず、命令のオペランド0x10050が仮想ページ番号とオフセットに分離され、それぞれ0x10 、0x050となる（図４のステップＳ１０１）。
【００６７】
この時領域番号検出部は命令が格納されているアドレス0x0 5000を領域番号に変換し、領域番号として１を得る。
【００６８】
次に、アドレス変換部１０２は仮想ページ番号0x10を元にアドレス変換テーブルの中から該当する符号８１０に図示するようなエントリを検出する（図４のステップＳ１０２）。
【００６９】
更に、当該エントリが表す領域に対するアクセスが可能か否か、アクセス保護情報と、アクセス種別１８１をもとに判定するが(図４のステップＳ１０３)、アクセス種別が実行遷移であり、符号８１１に図示するアクセス保護情報が0であることから図４のステップＳ１０５、１０６へと進む。
【００７０】
ステップＳ１０６では、符号８１２に示す細粒度アクセス権インデックスが0でないことより、ステップＳ１０８へと進む。
【００７１】
この時、符号８１２に示すように細粒度アクセス権インデックスは1であることから、フォールト制御部は同インデックスの領域リストより、領域番号1を検索する。
【００７２】
符号８１３に図示するように、領域リストに含まれるため、アクセスが許可されているとして、ステップＳ１０９に進み、ステップＳ１０４において、物理アドレス0x012 500を出力する。
【００７３】
第１の実施の形態では細粒度アクセス権インデックスをアドレス変換テーブル１０４の中に直接記述しているが、アドレス変換テーブル１０４の中には細粒度アクセス権インデックスを持つか持たないかの情報を読み、書き、実行それぞれ１ビットで記述し、フォールト制御部１０３内部に仮想ページ番号と細粒度アクセス権インデックスを一意に対応づけるテーブルを用意する構成とすることも可能である。
【００７４】
（作用及び効果）
第１の実施の形態に係るメモリ管理装置、メモリ管理システム及びメモリ管理方法によると、既存のハードウェアを搭載した汎用または組み込み用のプロセッサでも正しく動作し、予めアドレスが決定されていないデータに対しても実行中のプログラムの領域情報をもとに保護情報を設定可能とするメモリ保護方法を提供することが可能となる。これにより、バッファオーバフローなどによる外部からの進入や、プログラム書き換えなどにより、プログラム作成者の意図を外れてプログラムが動作することを防止でき、パーソナルコンピュータや、サーバ、携帯電話などにおいて安全性を高めることができる。
【００７５】
＜第２の実施の形態＞
第２の実施の形態では、従来の第二の問題点を解決するため、第１の実施の形態で示したメモリ管理装置１００を用い、外部からメモリ管理装置１００のアドレス変換テーブルにおけるアクセス保護情報を変更する際、キャッシュメモリをクリアする。
【００７６】
（メモリ管理システム）
第２の実施の形態に係るメモリ管理システムは、キャッシュメモリ９０１と、第１の実施の形態において説明したメモリ管理装置１００と、物理メモリ９０２と、選択部９０３と、キャッシュクリア判定部９０４とを備える。
【００７７】
キャッシュメモリ９０１は、外部から仮想アドレス１８０とアクセス種別１８１を受け取る際に、キャッシュメモリ上にデータが存在すればキャッシュメモリ上にデータが存在したことを表すキャッシュヒット信号９１０として1、およびデータ９１３を出力し、キャッシュ上に存在しなければキャッシュヒット信号９１０として0を出力する。また、キャッシュメモリ９０１は、外部よりキャッシュラインクリア信号９１２が与えられたとき、当該キャッシュライン上にあるデータを無効にする。
【００７８】
第２の実施の形態に係るキャッシュメモリは、図７に示すように、ダイレクトマップ形式、ラインサイズ16、ライン数64の仮想キャッシュを用いるが、非特許文献２に示されるような仮想キャッシュであれば、ラインサイズやセットアソシエイティブの多重数等は問わない。
【００７９】
キャッシュラインクリア信号９１２は、第２の実施の形態では、仮想アドレスより構成されるものとする。
【００８０】
メモリ管理装置１００の構成は、第１の実施の形態と同様であるが、第２の実施の形態においては、外部よりキャッシュヒット信号0が入力されたときに限り動作するものとする。また、外部よりアクセス権変更信号９１１を受信したときに、メモリ管理装置１００内のアドレス変換テーブルの内容を更新するものとする。
【００８１】
第２の実施の形態に係るアクセス権変更信号９１１は、図８に示すように、仮想ページ番号１４０１とアクセス種別１４０２と、保護情報１４０３と、インデックス１４０４と、領域更新フラグ１４０５と、領域リスト１４０６より構成される。領域リスト１４０６は、例えば、図８に示すように、領域数と指定する領域の番号で構成すればよい。仮想ページ番号１４０１は、アクセス権を更新する仮想ページの番号であり、アクセス種別１４０２は、第２の実施の形態の場合、読み、書き、実行遷移のいずれかである。保護情報１４０３及びインデックス１４０４は、仮想ページ番号１４０１のアクセス種別１４０２で指定されたアクセスのアクセス保護情報及び細粒度アクセス権インデックスを置き換えるためのものである。領域更新フラグは、細粒度アクセス権テーブルを更新するならば1を、更新しないならば0を指定し、領域リストは更新後の新しい領域リストである。
【００８２】
物理メモリ９０２は、DRAM等で実現され、入力された物理アドレス１８３に格納されているデータ９１４を出力する。
【００８３】
選択部９０３は、外部より入力されたキャッシュヒット信号９１０が0の時には、物理メモリ９０２より得られるデータ９１４を出力し、キャッシュヒット信号９１０が1の時には、キャッシュメモリ９０１より得られるデータ９１３を出力する。
【００８４】
キャッシュクリア判定部９０４は、アクセス権変更信号９１１が外部より与えられたときにキャッシュラインクリア信号を送信する。
【００８５】
（メモリ管理方法）
次に、図９を用いて、アドレス変換テーブルの更新手順例について説明する。
【００８６】
まず、ステップＳ２０１において、図６に図示しないＣＰＵがある仮想アドレスに対するアクセス権を変更するには、アクセス権変更信号９１１を与える。そして、アクセス権変更信号より仮想ページ番号を取り出し、Ｘとする。
【００８７】
次に、ステップＳ２０２において、アドレス変換テーブルよりＸと一致するエントリを検出し、Ｙとする。
【００８８】
次に、ステップＳ２０３において、アクセス権変更信号のアクセス種別で指定されたＹの保護情報および細粒度アクセス権インデックスをアクセス権変更信号のそれぞれ、保護情報、インデックスで置き換える。
【００８９】
次に、ステップＳ２０４において、領域更新フラグが１であるか否か判断し、１である場合、ステップＳ２０５に進み、アクセス権変更信号のインデックスで指定された領域リストを、アクセス権変更信号に含まれる領域リストに変更する。
【００９０】
次に、図１０を用いて、キャッシュラインのクリアの制御手順例について説明する。キャッシュクリア判定部９０４は、アクセス権変更信号９１１が入力されると、キャッシュラインクリア信号を生成する。
【００９１】
キャッシュメモリ９０１は、キャッシュラインクリア信号を受信すれと、ステップＳ３０１において、仮想アドレスより上位から数え、２３から２８ビットを取り出し、Ｘとする。
【００９２】
そして、ステップＳ３０２において、キャッシュラインを、キャッシュの先頭アドレス＋Ｘ＊（１６＋４）として算出する。
【００９３】
次に、ステップＳ３０３において、キャッシュラインの有効／無効ビットを０にし、キャッシュラインを無効化する。
【００９４】
次に、図１１を用いて、キャッシュからのデータ取り出し手順例について説明する。
【００９５】
まず、図６に図示しないＣＰＵがメモリにアクセスする際、仮想アドレス１８０をキャッシュメモリ９０１に与える。ステップＳ４０１において、キャッシュメモリ９０１は、仮想アドレスより上位２２ビットをＹとする。そして、ステップＳ４０２において、仮想アドレスより上位から数え、２３から２８ビットを取り出し、Ｘとする。次に、ステップＳ４０３において、キャッシュラインを、キャッシュの先頭アドレス＋Ｘ＊（１６＋４）として算出する。
【００９６】
次に、ステップＳ４０４において、キャッシュラインの一致判定情報がＹと一致するか否か、即ち、キャッシュにヒットするか否か判断する。
【００９７】
キャッシュにヒットする場合、ステップＳ４０５において、アクセス種別が許可されているか否か判断する。
【００９８】
許可されている場合は、ステップＳ４０６において、キャッシュメモリは、当該仮想アドレスに一致するデータをデータ９１３として出力し、選択部９０３に送信する。このとき、ステップＳ４０７において、キャッシュメモリは、キャッシュヒット信号９１０として１を出力するので、選択部９０３は、データ９１３を外部に出力する。又、ステップＳ４０５において、アクセス種別が許可されていない場合は、ステップＳ４０８のいて、保護フォールトを発生する。
【００９９】
一方、ステップＳ４０４において、キャッシュにヒットしない場合、ステップＳ４０９において、キャッシュメモリ９０１はキャッシュヒット信号として0を出力する。メモリ管理装置１００が動作し、仮想アドレス１８０、アクセス種別１８１、領域番号１８２を元に、第１の実施の形態と同様に、アクセスが許可されていれば物理アドレス１８３を生成し、物理メモリはデータ９１４を出力し、選択部９０３はこれをデータ９１５として出力する
（作用及び効果）
第２の実施の形態に係るメモリ管理システムおよびメモリ管理方法によると、アクセス権の変更を加えた際にキャッシュメモリの内容を無効化するため、次回アクセス時にはキャッシュメモリにデータが存在しなくなり、必ず物理メモリよりデータを取得することになる。よって、仮想ページ毎のアクセス保護情報をプログラム実行中に変更した場合でも、アクセス保護情報を損なうことなくプログラムの実行を継続することができ、正しくアクセス権の変更が反映される。
【０１００】
＜第３の実施の形態＞
第３の実施の形態では、プログラムを動作させる際、動的に格納されるアドレスが決定されるような変数に対しても、細粒度のアクセス制御を行う。
【０１０１】
（メモリ管理システム）
第３の実施の形態に係るメモリ管理システムは、図１２に示すように、メモリ管理装置１００と、キャッシュメモリ９０１と、物理メモリ９０２と、選択部９０３と、キャッシュクリア判定部９０４と、プログラム生成装置９０５とを備える。
【０１０２】
プログラム生成装置９０５は、プログラムが使用する変数毎にアクセス可能なアドレス範囲を予め保有する、仮想空間に割り付けられるプログラムファイルを生成する。
【０１０３】
メモリ管理装置１００は、当該プログラム生成装置により作成されたプログラムに記述されたアクセス保護情報に基づきメモリを保護する。
【０１０４】
メモリ管理装置１００のその他の機能、キャッシュメモリ９０１、物理メモリ９０２、選択部９０３、キャッシュクリア判定部９０４については、第２の実施の形態と同様であるので、ここでは説明を省略する。
【０１０５】
図１３は、第３の実施の形態で実行するプログラムのソースコード例であり、3つの関数main、 funcA、funcBで構成される。C言語において、/* */で囲まれる箇所はコメント文を表すが、第３の実施の形態においては  /*@ */で囲まれるコメントは特殊なコメントであるとし、第１の実施の形態および第２の実施の形態で示したようなアクセス制御の指定を記述するものとする。図１３の例の場合、関数funcAのローカル変数aは読み込みアクセスをfuncAに、及び書き込みアクセスをmainに、関数funcAの引数xに対する読み込みアクセス、及び書き込みアクセスをfuncAのみに限定している。
【０１０６】
図１４は、第３の実施の形態におけるプログラムファイルの構成例とする。図１４は、説明のために、最小限の情報を記述しており、この他、一般的に用いられるELFやCOFFフォーマットの情報をプログラムファイルに追加してもよい。プログラムファイル１６００は、プログラムヘッダ１６０１と、テキスト領域１６０２とデータ領域１６０３とアクセスリスト領域１６０４より構成される。プログラムヘッダ１６０１は、プログラムファイル中の各領域の大きさとプログラムファイルの先頭からのオフセットアドレスを表す。プログラムヘッダ１６０１は、図１５のように構成され、テキスト領域１６０２、データ領域１６０３、アクセスリスト領域１６０４それぞれのサイズとオフセットアドレスを格納するものとする。
【０１０７】
テキスト領域１６０２は、プログラムの動作を記述した計算機の命令の集合であり、通常はバイト列であるが、第３の実施の形態を説明するため、図１３のソースコードをコンパイルした場合のテキスト領域の内容をアセンブラで記述したものを図１６に示す。図１６に示すテキスト領域は、プログラム実行時にメモリに展開されるが、細粒度のアクセス制御実現のため、各関数は異なる仮想ページに展開されるものとし、符号１８０５が示す部分は領域１へ、符号１８０６が示す部分は領域２へ、符号１８０７が示す部分は領域３へ展開されるとする。
【０１０８】
このように、各関数が同一の仮想ページに存在しないようにすることは、コンパイラがコードを生成する際、各関数定義の先頭で一定アドレス単位に整列せよという意味の命令.align  を仮想ページの単位で指定することで可能である。第３の実施の形態では仮想ページのサイズを4KBとするため、各関数の先頭で。align 4096が指定されている。
【０１０９】
第３の実施の形態においてアセンブラコードを記述する際、spはスタックポインタを、r0は汎用レジスタを表す。アセンブラコードの命令の意味については、当該命令の脇、セミコロンの右にコメントとして逐次記述する。
【０１１０】
図１４のデータ領域１６０３は、格納されるアドレスが静的に確定される変数領域を表す。
【０１１１】
アクセスリスト領域１６０４は、動的にアドレスが決定される変数の格納領域のために細粒度アクセス権を指定する変数をリストし、変数毎に読み、書き、実行可能な領域のリストを格納する。
【０１１２】
図１７に、アクセスリスト領域の構成例を示し、図１８に図１３のソースコードをコンパイルしたときのアクセス制限の例をプログラムファイル中に記述したアクセスリストの構成を示す。図１８では、例えば各欄が4バイトで構成されるとし、先頭欄はアクセスリストの長さ2を示す。次にアクセス制御を行う変数の数だけポインタを有し、アクセスリスト領域の先頭から何バイトのオフセット位置に具体的にアクセス制限を行う領域リストが格納されているかを表す。図１８の例では関数funcAの引数x、関数funcAのローカル変数aがアクセス制限を受けるため、それぞれの領域リストが格納される位置までのオフセット2つがリストされる。
【０１１３】
アクセス制限に用いる領域リストは読み、書き、実行遷移の順に記述し、領域数と領域番号を列記する。
【０１１４】
（メモリ管理方法）
＝プログラムファイル生成方法＝
コンパイラは、図１３に示すソースプログラムより図１４に示すプログラムファイルを生成する。第３の実施の形態ではＣ言語からアセンブラコードの生成のみを記述するが、アセンブラコードからバイナリコードの生成やリンクは、従来のコンパイラと同様の動作で実現可能である。
【０１１５】
第３の実施の形態で用いるコンパイラはテキスト領域の生成の際、一般的なプログラムファイルの生成に加え、次のような処理を行う点が従来のコンパイラと異なる。
【０１１６】
まず、関数の先頭が仮想ページ境界に一致するようにする。これを実現するには、Ｃ言語のソースファイルからアセンブラコードを生成するおり、関数の先頭に.align 仮想ページのサイズを指定する。
【０１１７】
次に、関数呼び出しや、ローカル変数を確保するときのコードを生成する時、以下のような操作を行う。
【０１１８】
コンパイラは通常、関数呼び出しを行うコードを生成する際、引数をスタックに積み、戻り先アドレスとスタックポインタの値をスタックに積んだ後、呼び出し先の関数をコールするようなコードを生成し、関数内で利用するローカル変数領域をスタック中に確保する。これは、例えば図１３に示す関数mainから関数funcAの呼び出しでいえば、図１９に示すようなコードになる。
【０１１９】
図１９では、符号２１０１で示す箇所で引数xを格納するのに必要な4バイト分のスペースをスタック上に確保し、符号２１０２で示す箇所でローカル変数を格納する領域4バイト分をスタック上に確保する。
【０１２０】
＝関数呼び出しコードの生成＝
第３の実施の形態におけるコンパイラは、この関数呼び出しを行うコードの生成を図２０に示すような手順で行う。
【０１２１】
図２０のステップＳ５０１において、コンパイラは関数を呼び出すコードを生成する際、これまでに細粒度のアクセス制御を施した変数の個数を取得しiとし、空のリストＬを作成する。iの取得は、複数ファイルのコンパイルを進める中、常に細粒度のアクセス制御を施す変数の個数を記録しておくことで容易に実現可能である。
【０１２２】
ステップＳ５０２において、もし、関数に引数が存在するならば、ステップＳ５０３において、その引数に細粒度のアクセス制限が施されているか確認し、アクセス制限が施されていなければ、ステップＳ５０４において、当該引数の格納用の領域をスタックに確保するコードを生成し、ステップＳ５０２に戻る。
【０１２３】
ステップＳ５０３の処理は、Ｃ言語のソースコードに図１３に示すようなコメントが付加されているか否かで行うことができる。ステップＳ５０４における領域の確保は、変数を格納するのに必要な大きさをNバイトとすればスタックポインタをN減算すればよい。
【０１２４】
ステップＳ５０３において、引数にアクセス制御の記述があれば、ステップＳ５０５において、iに１を加え、以後、新しいiを当該引数のアクセスリスト領域１６０４におけるインデックスとして利用する。
【０１２５】
次に、ステップＳ５０６において、スタックポインタを仮想ページの境界に揃える。これを実現する方法は幾通りかあるが、例えば、図２１に示すようなコードを利用すればよい。
【０１２６】
次に、ステップＳ５０７において、リストＬにスタックポインタが示す仮想ページの仮想ページ番号を加える。仮想ページ番号は、第３の実施の形態では、仮想アドレスの上位20ビットを利用するとすれば、スタックポインタの上位20ビットを仮想ページ番号とすればよい。
【０１２７】
次に、ステップＳ５０８において、スタック上に細粒度のアクセス制限を行う引数用の領域を確保するが、これはステップＳ５０４と同様に行う。ただし、確保する引数の大きさが仮想ページに入りきらない場合、ステップＳ５０９において、引数が含まれる仮想ページの番号をリストＬに追加する。
【０１２８】
次に、ステップＳ５１０において、再度スタックポインタを仮想ページの境界にそろえるが、先のステップＳ５０６の場合と同様、図２１に示すようなコードを用いればよい。
【０１２９】
次に、ステップＳ５１１において、引数にアクセス制限を行うコードを生成する。本実施の形態では、これはアクセスリスト領域の中のインデックスの番号をレジスタR0に格納し、システムコール関数set_accessを呼ぶコードを生成する。システムコール関数set_accessは、図２２に示す動作をするが、これについては後に詳述する。
【０１３０】
次に、ステップＳ５１２において、通常の関数呼び出しを実行するコードを生成する。第３の実施の形態では、これは呼び出し先関数をＡとすると、call Aと記述することとする。
【０１３１】
関数呼び出し後、ステップＳ５１３において、アクセス制限を解除するため、システムコール関数unset_accessを呼ぶコードを生成する。システムコール関数unset_accessは、例えば図２３に示すような動作をするが、これについては後に詳述する。
【０１３２】
ステップＳ５１１において、システムコール関数set_accessは、図２２に示すように、ステップＳ６０１において、レジスタr0の値をアクセスリスト領域のインデックスIとする。
【０１３３】
そして、ステップＳ６０２において、アクセス領域リストからI番目のアクセス制御リストを取得する。
【０１３４】
次に、ステップＳ６０３において、ユーザ空間の読み、書き、実行のアクセス種別毎に複数の領域のアドレス変換テーブルを更新する。
【０１３５】
又、ステップＳ５１３において、システムコール関数unset_accessは、図２３に示すように、ステップＳ７０１において、読み、書き、実行のアクセス種別毎に複数の領域のアドレス変換テーブルを全てクリアにする。
【０１３６】
＝ローカル変数領域確保コードの生成＝
次に、第３の実施の形態に係るコンパイラは、関数内にローカル変数を確保するときのコード生成を図２１に示すような手順にて行う。基本的な動作は、図２０に示す関数呼び出しコードの生成手順と同一であり、引数をローカル変数に、関数呼び出しのコード生成を関数の実体を関数本体の生成に読み替えればよい。
【０１３７】
＝アクセスリスト領域の生成＝
更に、本実施の形態で用いるコンパイラは、プログラムファイルにアクセスリスト領域を生成する。
【０１３８】
第３の実施の形態では、コンパイラは上述するような変更を加えたテキスト領域を全て生成したのちに、アクセスリスト領域を生成する。これはテキスト領域生成の際、細粒度のアクセス制御をする変数に対しインデックスを割り振るが、このインデックスとソースコード中の記述位置を記録しておき、変数（引数/ローカル変数）毎に、再度Ｃ言語で記述されたソースコードテキスト中のコメントを走査すれば、テキスト領域を生成した時点で各関数が属する領域番号は決定されているため、実現可能である。
【０１３９】
プログラムの脆弱性を低減するために実行時にテキストセグメントの配置を動的に変更するようなシステムにおいては、テキストセグメントの先頭からのオフセットアドレスをもとに領域番号を生成して記録しておき、実行開始時にテキストセグメントの先頭アドレスが決定された段階でこれを領域番号に変換し、アクセスリスト領域に含まれる各領域リストの構成要素に加算してやればよい。
【０１４０】
＝プログラム実行時におけるアクセス権の設定＝
プログラム動作時は、記述されたプログラムを従来と同様に実行する。
【０１４１】
図１３に示すソースコードをコンパイルしたプログラムファイルの実行時、プログラムヘッダに示された各領域のオフセットと大きさ情報をもとに、テキスト領域、データ領域、アクセスリスト領域がメモリに割り当てられたのち、プログラムの実行が開始される。この時、プログラムは図１６のmain関数から実行を始めるとする。
【０１４２】
ｍain関数の実行を進めると、関数funcAを呼び出す位置まで実行が進むが、符号１８０１の位置、すなわち関数funcAの呼び出し直前で引数x用の領域を確保し、引数xへのアクセス制限が実施される。また、関数funcAを呼び出す際、関数funcA内部の符号１８０２の位置においてもローカル変数aへのアクセス制限が実施される。関数funcAの実行が終了する符号１８０３の位置では、ローカル変数や引数として割り当てられたメモリ領域は未使用となるので、アクセス制限を解除する（１８０４、１８０８）。
【０１４３】
関数funcAを実行中、ローカル変数aや引数Xへのアクセスは細粒度に制限されているため、関数funcAより別な関数を呼び出したりして、そこでバッファオーバフローが発生したとしても、当該領域へのアクセスが許可されていないため、値の上書きや読み出しを防止することができる。
【０１４４】
（作用及び効果）
第３の実施の形態に係るメモリ管理システム及びメモリ管理方法によると、実行時には未決定である仮想アドレスに関してもアクセス保護情報を設定することができる。
【図面の簡単な説明】
【０１４５】
【図１】第１の実施の形態に係るメモリ管理装置の構成ブロック図である。
【図２】第１の実施の形態に係るアドレス変換テーブルの一例である。
【図３】第１の実施の形態に係る細粒度アクセス権テーブルの一例である。
【図４】第１の実施の形態に係るメモリ管理方法を示すフローチャートである。
【図５】第１の実施の形態に係るメモリ管理装置の動作を説明するための図である。
【図６】第２の実施の形態に係るメモリ管理システムの構成ブロック図である。
【図７】第２の実施の形態に係るキャッシュメモリの構成例である。
【図８】第２の実施の形態に係るアクセス権変更信号の構成例である。
【図９】第２の実施の形態に係るアドレス変換テーブルの更新方法を示すフローチャートである。
【図１０】第２の実施の形態に係るキャッシュラインのクリア制御方法を示すフローチャートである。
【図１１】第２の実施の形態に係るキャッシュメモリからのデータの取得方法を示すフローチャートである。
【図１２】第３の実施の形態に係るメモリ管理システムの構成ブロック図である。
【図１３】第３の実施の形態に係るプログラムのソースコードの一例である。
【図１４】第３の実施の形態に係るプログラムファイルの構成例である。
【図１５】第３の実施の形態に係るプログラムヘッダの構成例である。
【図１６】図１３のソースコードをコンパイルして作成したアセンブラの例である。
【図１７】第３の実施の形態に係るアクセスリスト領域の構成例である。
【図１８】第３の実施の形態に係るアクセス制限に例である。
【図１９】第３の実施の形態に係る関数呼び出し時のスタック操作を示すプログラムをアセンブラで示した例である。
【図２０】第３の実施の形態に係る関数呼び出しコード生成方法を示すフローチャートである。
【図２１】第３の実施の形態に係るスタックポインタを仮想ページ境界にそろえる方法の例である。
【図２２】第３の実施の形態に係るアクセス制御を行うシステムコールの手順例である。
【図２３】第３の実施の形態に係るアクセス制御を解除するシステムコールの手順例である。
【図２４】第３の実施の形態に係るローカル変数領域を確保する方法を示すフローチャートである。
【図２５】従来のメモリ管理装置の構成ブロック図である（その１）。
【図２６】従来のメモリ管理装置の構成ブロック図である（その２）。
【図２７】図２６において、不具合が発生する場合の例である。
【符号の説明】
【０１４６】
１００…メモリ管理装置
１０２…アドレス変換部
１０３…フォールト制御部
１０４…アドレス変換テーブル
１０５…細粒度アクセス権テーブル
１１０…仮想ページ番号
１１１…オフセット
１８０…仮想アドレス
１８１…アクセス種別
１８２…領域番号
１８３…物理アドレス
１８４…保護フォールト信号
１８５…フォールト信号
186…細粒度アクセス権インデックス
１８６…細粒度アクセス権インデックス
２００…メモリ管理装置
２０１…アドレス変換テーブルインデックス
２０２…仮想アドレス
２０４、２０５…アドレス変換テーブル
２０６…仮想ページ番号
２０７…オフセット
２０８…アクセス種別
２１０…保護情報判定手段
３００…仮想アドレス空間
３０６…アドレス変換テーブル
３０７…領域番号検出部
３０８…物理アドレス/プロテクションフォルト出力部
５０２…仮想ページ番号
５０３…物理ページ番号
５０４…アクセス保護情報
５０５…細粒度アクセス権インデックス
８１０〜８１３…符号
９０１…キャッシュメモリ
９０２…物理メモリ
９０３…選択部
９０４…キャッシュクリア判定部
９０５…プログラム生成装置
９１０…キャッシュヒット信号
９１１…アクセス権変更信号
９１２…キャッシュラインクリア信号
９１３〜９１５…データ
１４０１…仮想ページ番号
１４０２…アクセス種別
１４０３…保護情報
１４０４…インデックス
１４０５…領域更新フラグ
１４０６…領域リスト
１６００…プログラムファイル
１６０１…プログラムヘッダ
１６０２…テキスト領域
１６０３…データ領域
１６０４…アクセスリスト領域
１８０１〜１８０７…符号
２１０１、２１０２…符号
【図１】
2006155516.tif 000003
【図２】
2006155516.tif 000004
【図３】
2006155516.tif 000005
【図４】
2006155516.tif 000006
【図５】
2006155516.tif 000007
【図６】
2006155516.tif 000008
【図７】
2006155516.tif 000009
【図８】
2006155516.tif 000010
【図９】
2006155516.tif 000011
【図１０】
2006155516.tif 000012
【図１１】
2006155516.tif 000013
【図１２】
2006155516.tif 000014
【図１３】
2006155516.tif 000015
【図１４】
2006155516.tif 000016
【図１５】
2006155516.tif 000017
【図１６】
2006155516.tif 000018
【図１７】
2006155516.tif 000019
【図１８】
2006155516.tif 000020
【図１９】
2006155516.tif 000021
【図２０】
2006155516.tif 000022
【図２１】
2006155516.tif 000023
【図２２】
2006155516.tif 000024
【図２３】
2006155516.tif 000025
【図２４】
2006155516.tif 000026
【図２５】
2006155516.tif 000027
【図２６】
2006155516.tif 000028
【図２７】
2006155516.tif 000029