(57)【要約】【課題】  サブルーチンの誤動作によるメモリの不正な書き換えを防止することができるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムを提供する。【解決手段】  メモリ保護装置は、少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性がメモリ領域ごとに設定可能なメモリ１０１と、処理要求を実行するサブルーチンを選択するサブルーチン選択部１０３と、サブルーチンが使用するメモリ領域を特定するメモリ領域特定部１０４と、特定したメモリ領域の書き込み属性を書き込み許可に設定し、選択したサブルーチンを呼び出し、サブルーチンの実行が終了した後に、メモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出部１０５とを備える。【選択図】      図１
2005209178.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能なメモリと、
処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、
前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、
前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段とを備えることを特徴とするメモリ保護装置。
【請求項２】
前記メモリは、前記処理要求と、当該処理要求に対応するサブルーチンとを対応付けるサブルーチン管理テーブルを記憶しており、
前記サブルーチン選択手段は、処理要求を受け取り、受け取った処理要求に対応するサブルーチンを、前記サブルーチン管理テーブルを参照することにより選択することを特徴とする請求項１記載のメモリ保護装置。
【請求項３】
前記メモリは、前記サブルーチンと、当該サブルーチンが使用するメモリ領域とを対応付けるメモリ領域管理テーブルを記憶しており、
前記メモリ領域特定手段は、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を、前記メモリ領域管理テーブルを参照することにより特定することを特徴とする請求項１又は２記載のメモリ保護装置。
【請求項４】
前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定した後、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、呼び出した割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えることを特徴とする請求項１記載のメモリ保護装置。
【請求項５】
前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、前記割り込み応答処理の実行中の任意のタイミングで、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、前記割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えることを特徴とする請求項１記載のメモリ保護装置。
【請求項６】
前記割り込み応答処理は、前半部分の処理と後半部分の処理とに予め分割されており、
前記割り込み応答処理手段は、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理の前半部分の処理を呼び出して実行し、前記前半部分の処理の実行が終了した後、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、書き込み属性が書き込み禁止に設定された後、前記割り込み応答処理の後半部分の処理を呼び出して実行し、前記後半部分の処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定することを特徴とする請求項５記載のメモリ保護装置。
【請求項７】
前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、例外処理を実行するためのメモリ保護例外を発生させるメモリ保護例外発生手段をさらに備えることを特徴とする請求項１記載のメモリ保護装置。
【請求項８】
前記メモリは、夫々が少なくとも１つのサブルーチンを含む複数のモジュールと、当該サブルーチンが使用する少なくとも１つのメモリ領域とを備え、
前記メモリ保護例外発生手段は、前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたサブルーチンを特定し、前記特定したサブルーチンが含まれるモジュールを特定し、前記特定したモジュールを初期化する例外処理を実行する例外処理手段をさらに含むことを特徴とする請求項７記載のメモリ保護装置。
【請求項９】
前記メモリは、前記サブルーチンと、当該サブルーチンが含まれるモジュールとを対応付けるモジュール管理テーブルを記憶しており、
前記例外処理手段は、特定したサブルーチンが含まれるモジュールを、前記モジュール管理テーブルを参照することにより特定することを特徴とする請求項８記載のメモリ保護装置。
【請求項１０】
メモリは、少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護方法であって、
処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択ステップと、
前記サブルーチン選択ステップにおいて選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定ステップと、
前記メモリ領域特定ステップにおいて特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択ステップにおいて選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出ステップとを含むことを特徴とするメモリ保護方法。
【請求項１１】
少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護プログラムであって、
処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、
前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、
前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段としてコンピュータを機能させることを特徴とするメモリ保護プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムのメモリ管理に関するものであり、特にメモリの不正書き換えに対してメモリを保護するためのメモリ保護装置、メモリ保護方法及びメモリ保護プログラムに関するものである。
【背景技術】
【０００２】
オペレーティングシステムにおけるメモリ管理、特にメモリ保護に関する技術として、システムで動作するアプリケーションを複数のプロセスに分割し、プロセスごとに仮想アドレス空間を割り当てる方法が従来から存在している。
【０００３】
プロセスは、１つのアドレス空間を持ち、そのアドレス空間内のメモリ領域を読み書きしながら実行を行う処理単位である。１つのプロセスと１つのアドレス空間は一対一に対応する。また、スレッドとは、１つのアドレス空間を共用しながら実行する処理単位である。複数のスレッドが１つのアドレス空間内のデータを読み書きしながら並行に動作する事ができる。
【０００４】
プロセスごとに仮想アドレス空間を割り当てる方法では、それぞれのプロセスごとに１つの仮想アドレス空間が割り当てられる。メモリ管理ユニット（ＭＭＵ）により、それぞれの仮想アドレス空間は独立しているようにふるまい、１つの仮想アドレス空間を割り当てられて動作しているプロセスから、他のプロセスの仮想アドレス空間のメモリ領域にアクセスする事はできない。
【０００５】
これはプロセスが誤動作を起こしても、誤動作を起こしたプロセスに割り当てられている仮想アドレス空間にしかアクセスできないため、誤動作の影響が他のプロセスの仮想アドレス空間に及ぶことがないからである。この事から、ソフトウェアに不具合があっても、その誤動作による影響範囲をプロセス単位にまで抑え込むことができ、システム全体の安定性及び堅牢性が向上する。
【０００６】
しかし、前記のプロセスごとに仮想アドレス空間を割り当てる方法だと、実行するプロセスを切り替えるたびにメモリ管理ユニットが使用する仮想アドレス空間も切り替えなければならず、仮想アドレス空間の切り替えにかかるオーバーヘッドの大きさから、システム全体のパフォーマンスが低下してしまう虞がある。
【０００７】
携帯電話、デジタルテレビや家電機器などのいわゆる組み込み機器では、このパフォーマンス低下の影響は特に著しい。このために、組み込み機器の制御を司るオペレーティングシステムでは、プロセスごとに仮想アドレス空間を割り当てる方法は採用し難いものである。
【０００８】
そこで、システム全体に１つのアドレス空間だけが存在するようにし、全ての実行単位をプロセスではなくスレッドにする方法が組み込み機器の制御で採用される事が多い。この方法では、全てのスレッドが同じアドレス空間を共用している。このため、１つのスレッドが誤動作を起こした場合、その誤動作による影響は他のスレッドが使用するメモリ領域に波及する事があり得る。
【０００９】
そこで、システムで動作しているスレッドをグループ化し、アドレス空間をドメインという単位に分割し、グループごとに特定のドメインを割り当てる技術が開示されている（例えば、特許文献１参照）。スレッドは自身が所属しているグループに割り当てられたドメインのメモリ領域に対してアクセスする事はできるが、他のドメインのメモリ領域に対してアクセスする事ができない。したがって、特許文献１の技術では、単一のアドレス空間で複数のスレッドが動作するシステムにおいて、誤動作による範囲をドメイン単位にまで抑え込むことができ、システムの安全性及び堅牢性を向上させることができる。
【特許文献１】特表平１１−５０５６５２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、前記従来の技術における１つまたは少数のスレッドから構成されるシステムの場合は、メモリを細かくドメイン単位に区切ることがほとんどできない。特にＬｉｎｕｘ（登録商標）などのモノリシックカーネル構造のオペレーティングシステムでは、カーネルが実質的に１つのドメインで構成され、複数の細かいドメインには分割されない。このような構成のときにプログラムの一部のサブルーチンで誤動作が発生したとき、その誤動作が影響しうる範囲はドメイン内全域になる。前記従来技術は、プログラム内で正常に動作している箇所が、異常動作を引き起こした箇所の影響を受けないようにするための技術であるが、１つまたは少数のドメインしか存在しない環境においてはドメイン内での誤動作による影響範囲が大きく、メモリの不正書き換えを防ぎ難い。
【００１１】
このため、前記のスレッドをグループ化してグループごとにドメインを割り当てる方法では、複数のサブルーチンによって１つまたは少数のスレッドが構成されるシステムにおいて、あるサブルーチンが誤動作をした場合、その影響が同一スレッド内で動作する他のサブルーチンが使用するメモリ領域に及ぶ事を防げないという課題があった。
【００１２】
本発明は、前記従来の課題を解決するためになされたもので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムを提供することを目的とするものである。
【課題を解決するための手段】
【００１３】
本発明に係るメモリ保護装置は、少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能なメモリと、処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段とを備える。
【００１４】
この構成によれば、あるサブルーチンが実行される前にそのサブルーチンが使用するメモリ領域の書き込み属性のみを書き込み許可に設定した後、サブルーチンを呼び出して実行する。そして、サブルーチンの実行が終了した後、書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定する。したがって、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができる。
【００１５】
また、上記のメモリ保護装置において、前記メモリは、前記処理要求と、当該処理要求に対応するサブルーチンとを対応付けるサブルーチン管理テーブルを記憶しており、前記サブルーチン選択手段は、処理要求を受け取り、受け取った処理要求に対応するサブルーチンを、前記サブルーチン管理テーブルを参照することにより選択することが好ましい。
【００１６】
この構成によれば、受け取った処理要求に対応するサブルーチンが、処理要求と、当該処理要求に対応するサブルーチンとを対応付けるサブルーチン管理テーブルを参照することにより選択されるので、処理要求に対応するサブルーチンを容易に選択することができ、サブルーチンの選択に要する処理速度を向上させることができる。
【００１７】
また、上記のメモリ保護装置において、前記メモリは、前記サブルーチンと、当該サブルーチンが使用するメモリ領域とを対応付けるメモリ領域管理テーブルを記憶しており、前記メモリ領域特定手段は、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を、前記メモリ領域管理テーブルを参照することにより特定することが好ましい。
【００１８】
この構成によれば、選択されたサブルーチンが使用するメモリ領域が、サブルーチンと、当該サブルーチンが使用するメモリ領域とを対応付けるメモリ領域管理テーブルを参照することにより特定されるので、実行するサブルーチンが使用するメモリ領域を容易に特定することができ、メモリ領域の特定に要する処理速度を向上させることができる。
【００１９】
また、上記のメモリ保護装置において、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定した後、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、呼び出した割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えることが好ましい。
【００２０】
この構成によれば、サブルーチンの実行中に割り込み処理要求が発生したとき、実行中のサブルーチンが使用しているメモリ領域の書き込み属性が書き込み許可から書き込み禁止に設定された後、割り込み処理要求に応答する割り込み応答処理が呼び出されて実行される。そして、呼び出した割り込み応答処理の実行が終了した後に、書き込み禁止に設定したメモリ領域の書き込み属性が書き込み許可に再設定される。したがって、割り込み応答処理の間に誤動作が起きて、割り込み前に実行していたサブルーチンが使用していたメモリ領域の内容が書き換えられてしまうことを防止することができる。
【００２１】
また、上記のメモリ保護装置において、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、前記割り込み応答処理の実行中の任意のタイミングで、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、前記割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えてもよい。
【００２２】
この構成によれば、サブルーチンの実行中に割り込み処理要求が発生したとき、割り込み処理要求に応答する割り込み応答処理が呼び出されて実行され、割り込み応答処理中の任意のタイミングで、実行中のサブルーチンが使用しているメモリ領域の書き込み属性が書き込み許可から書き込み禁止に設定される。そして、割り込み応答処理の実行が終了した後に、書き込み禁止に設定したメモリ領域の書き込み属性が書き込み許可に再設定される。
【００２３】
したがって、割り込み処理要求があった場合、すぐに書き込み属性を設定し直すのではなく、割り込み応答処理をある程度実行した後に任意のタイミングで書き込み属性を設定することで、割り込みに対して速やかに応答することができる。
【００２４】
また、上記のメモリ保護装置において、前記割り込み応答処理は、前半部分の処理と後半部分の処理とに予め分割されており、前記割り込み応答処理手段は、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理の前半部分の処理を呼び出して実行し、前記前半部分の処理の実行が終了した後、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、書き込み属性が書き込み禁止に設定された後、前記割り込み応答処理の後半部分の処理を呼び出して実行し、前記後半部分の処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定することが好ましい。
【００２５】
この構成によれば、サブルーチンの実行中に割り込み処理要求が発生したとき、割り込み処理要求に応答する割り込み応答処理の前半部分の処理が呼び出される。そして、前半部分の処理の実行が終了した後、実行中のサブルーチンが使用しているメモリ領域の書き込み属性が書き込み許可から書き込み禁止に設定される。書き込み属性が書き込み禁止に設定された後、割り込み応答処理の後半部分の処理が呼び出されて実行される。続いて、後半部分の処理の実行が終了した後、書き込み禁止に設定したメモリ領域の書き込み属性が書き込み許可に再設定される。
【００２６】
したがって、割り込み処理要求があった場合、すぐに書き込み属性を設定し直すのではなく、割り込み応答処理の前半部分を実行した後に書き込み属性を設定し、書き込み属性を設定した後、割り込み応答処理の後半部分を実行することで、割り込みに対して速やかに応答することができ、特に迅速に対応する必要のある割り込み応答処理の前半部分を迅速に実行することができる。
【００２７】
また、上記のメモリ保護装置において、前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、例外処理を実行するためのメモリ保護例外を発生させるメモリ保護例外発生手段をさらに備えることが好ましい。
【００２８】
この構成によれば、書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、例外処理を実行するためのメモリ保護例外が発生されるので、書き込みが禁止されているメモリ領域には書き込みが行われず、実行中のサブルーチンが使用するメモリ領域以外のメモリ領域の内容が書き換えられることを防止することができる。なお、例外処理とは、サブルーチンの実行中に発生する通常の処理手続きが継続できないような事象が発生した際に、その時点で実行中の処理手続きを一旦中断して、その事象に応じて実行する特別な処理のことである。
【００２９】
また、上記のメモリ保護装置において、前記メモリは、夫々が少なくとも１つのサブルーチンを含む複数のモジュールと、当該サブルーチンが使用する少なくとも１つのメモリ領域とを備え、前記メモリ保護例外発生手段は、前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたサブルーチンを特定し、前記特定したサブルーチンが含まれるモジュールを特定し、前記特定したモジュールを初期化する例外処理を実行する例外処理手段をさらに含むことが好ましい。
【００３０】
この構成によれば、書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、当該書き込み命令が発行されたサブルーチンが特定され、特定されたサブルーチンが含まれるモジュールが特定され、特定されたモジュールを初期化する例外処理が実行される。このように、書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行された場合、モジュール単位で初期化が行われるので、処理が途中で停止してしまう、いわゆるフリーズ状態になることを防止することができる。
【００３１】
また、上記のメモリ保護装置において、前記メモリは、前記サブルーチンと、当該サブルーチンが含まれるモジュールとを対応付けるモジュール管理テーブルを記憶しており、前記例外処理手段は、特定したサブルーチンが含まれるモジュールを、前記モジュール管理テーブルを参照することにより特定することが好ましい。
【００３２】
この構成によれば、特定したサブルーチンが含まれるモジュールが、サブルーチンと、当該サブルーチンが含まれるモジュールとを対応付けるモジュール管理テーブルを参照することにより特定されるので、書き込み属性が書き込み禁止に設定されているメモリ領域にアクセスしたサブルーチンが含まれるモジュールを容易に特定することができ、モジュールの特定に要する処理速度を向上させることができる。
【００３３】
本発明に係るメモリ保護方法は、メモリは、少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護方法であって、処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択ステップと、前記サブルーチン選択ステップにおいて選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定ステップと、前記メモリ領域特定ステップにおいて特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択ステップにおいて選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出ステップとを含む。
【００３４】
この構成によれば、あるサブルーチンが実行される前にそのサブルーチンが使用するメモリ領域の書き込み属性のみを書き込み許可に設定した後、サブルーチンを呼び出して実行する。そして、サブルーチンの実行が終了した後、書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定する。したがって、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができる。
【００３５】
本発明に係るメモリ保護プログラムは、少なくとも１つのサブルーチンが使用する少なくとも１つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護プログラムであって、処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段としてコンピュータを機能させる。
【００３６】
この構成によれば、あるサブルーチンが実行される前にそのサブルーチンが使用するメモリ領域の書き込み属性のみを書き込み許可に設定した後、サブルーチンを呼び出して実行する。そして、サブルーチンの実行が終了した後、書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定する。したがって、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができる。
【発明の効果】
【００３７】
本発明によれば、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えの発生を防止することができ、オペレーティングシステムの安全性を向上させることができる。また、プロセスごとに仮想アドレス空間を割り当てた場合と比べて、仮想アドレス空間の切り替えにかかるオーバーヘッドが発生せず、システム全体のパフォーマンスの低下を防ぐことができる。
【発明を実施するための最良の形態】
【００３８】
以下、本発明の一実施の形態によるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムについて図面を参照しながら説明する。
【００３９】
（実施の形態１）
図１は、本発明の実施の形態１におけるメモリ保護装置の構成を示す図である。ここでは、Ｌｉｎｕｘオペレーティングシステムの場合を例に説明する。なお、本発明は、ＵＮＩＸ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）やトロン（登録商標）など、Ｌｉｎｕｘ以外のオペレーティングシステムに用いてもよい。
【００４０】
図１に示すメモリ保護装置は、ＣＰＵ（中央演算処理装置）１００、メモリ１０１及びメモリ管理ユニット（ＭＭＵ）１０２を備えて構成される。ＣＰＵ１００とメモリ１０１とメモリ管理ユニット１０２とは、例えばバスを介して相互にデータを送受信することが可能である。
【００４１】
メモリ１０１には、複数のサブルーチン＃１、＃２、…＃Ｎ（１１１、１１２、１１３）が格納される領域と、サブルーチンが使用するサブルーチン用メモリ領域１０６とが割り当てられている。メモリ１０１としては、例えばＲＡＭ（ランダムアクセスメモリ）やフラッシュメモリのような任意のタイプのものを使用することができる。また、メモリ１０１は、単一のメモリで構成されている必要はなく、同種の複数のメモリ又はＲＯＭ（リードオンリメモリ）を含む、異なる種類のメモリの組み合わせであってもよい。さらに、外部記憶装置を利用することも可能である。また、メモリ１０１にはサブルーチン用ではないメモリ領域が含まれても良い。
【００４２】
サブルーチン＃１、＃２、…＃Ｎ（１１１、１１２、１１３）は、メモリ内に書かれた機械語命令列である。例えば、Ｌｉｎｕｘカーネル内の関数などがサブルーチンに相当する。
【００４３】
サブルーチン用メモリ領域１０６には、さらに複数のメモリ領域１２１、１２２、１２３が割り当てられている。例えば、Ｌｉｎｕｘのそれぞれのカーネルモジュールが使用するメモリ領域がこれらのメモリ領域に相当する。また、メモリ領域毎に書き込み属性情報（１３１、１３２、１３３）を備えている。書き込み属性情報は、それぞれメモリ領域１２１、１２２、１２３に対する書き込みが許可されているのか禁止されているのかを表わす情報である。例えば、ページング機構を備えたコンピュータアーキテクチャにおいて、１つのメモリ領域を１つ以上のメモリページの集合として構成することができる。このとき、それぞれのメモリページの属性情報を持っているページテーブル記述子が、メモリ領域の書き込み属性情報となる。なお、本発明は、ページング機構以外に、セグメント機構などを備えたコンピュータアーキテクチャで実現してもよい。
【００４４】
サブルーチン用メモリ領域１０６に含まれるメモリ領域はサブルーチンと対応しており、サブルーチン１１１とメモリ領域１２１とを結ぶ破線、サブルーチン１１２とメモリ領域１２２とを結ぶ破線、サブルーチン１１３とメモリ領域１２２とを結ぶ破線が、それぞれサブルーチンとメモリ領域の対応の例を示している。この例は、サブルーチン１１１が使用するメモリ領域がメモリ領域１２１で、サブルーチン１１２とサブルーチン１１３とが使用するメモリ領域がメモリ領域１２２であるという事を示している。なお、ここでは１つのサブルーチンに対して１つのメモリ領域が対応している例を示しているが、それだけに限定されず、１つのサブルーチンに対して複数個のメモリ領域を割り当ててもよい。
【００４５】
メモリ管理ユニット（ＭＭＵ）１０２は、メモリ領域への書き込みの管理を行う。サブルーチン実行中にメモリ領域への書き込み命令が発行されると、メモリ管理ユニット１０２は、当該書き込み命令に対応するメモリ領域への書き込みを制御する。例えば、書き込み属性情報が書き込み許可に設定されているメモリ領域への書き込み命令が発行されると、対応するメモリ領域への書き込みを実行させ、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されると、メモリ保護例外を発生する。なお、このメモリ保護例外については、実施の形態４で詳細に説明する。
【００４６】
ＣＰＵ１００は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部１０３、メモリ領域特定部１０４及びサブルーチン呼出部１０５として機能する。
【００４７】
サブルーチン選択部１０３は、システムコールやＬｉｎｕｘカーネル内からの処理要求に対して、適切に応答できるサブルーチンを選択する。サブルーチン選択部１０３は、例えば、システムコールや処理要求毎に対応するサブルーチンを関連付けたサブルーチン管理テーブルを保持しており、このサブルーチン管理テーブルを用いて複数のサブルーチンの中から所定のサブルーチンを選択する。サブルーチン選択部１０３は、選択したサブルーチンの情報をメモリ領域特定部１０４へ出力する。ここでのサブルーチンの情報は、例えばサブルーチンのメモリ空間内におけるアドレスや、サブルーチンを識別するための識別情報（ＩＤ）などで表現される。
【００４８】
図２は、サブルーチン管理テーブルの一例を示す図である。図２のサブルーチン管理テーブル８０１では、処理要求＃１にサブルーチン＃１が対応し、処理要求＃２にサブルーチン＃２が対応し、処理要求＃Ｎにサブルーチン＃Ｎが対応する例を示している。この例の場合にサブルーチン選択部１０３が処理要求＃１を受けたとき、サブルーチン選択部１０３は、サブルーチン管理テーブル８０１に基づいて、対応するサブルーチン＃１を選択する。なお、本実施の形態では、サブルーチン選択部１０３がサブルーチン管理テーブル８０１を保持しているとしているが、メモリ１０１に格納されていてもよい。また、各サブルーチンが、当該サブルーチンに対応するシステムコールや処理要求に関する情報を保持していてもよい。
【００４９】
図１に戻って、メモリ領域特定部１０４は、サブルーチン選択部１０３によって選択されたサブルーチンの情報を受け取り、このサブルーチンに対応するメモリ領域を調べて、メモリ領域を特定する。メモリ領域特定部１０４は、特定したメモリ領域の情報をサブルーチン呼出部１０５へ出力する。例えば、サブルーチン１１１に対応するメモリ領域がメモリ領域１２１である場合、メモリ領域特定部１０４は、サブルーチン１１１の情報が入力されるとメモリ領域１２１の情報を出力する。ここでのメモリ領域の情報は、例えばメモリ領域のメモリ空間内におけるアドレスや、メモリ領域を識別するための識別情報（ＩＤ）などで表現される。
【００５０】
メモリ領域特定部１０４は、例えば、サブルーチン毎に対応するメモリ領域を関連付けたメモリ領域管理テーブルを保持しており、このメモリ領域管理テーブルを用いてメモリ領域を決定する。図３は、メモリ領域管理テーブルの一例を示す図である。図３のメモリ領域管理テーブル９０１では、サブルーチン＃１にメモリ領域１２１が対応し、サブルーチン＃２にメモリ領域１２２が対応し、サブルーチン＃Ｎにメモリ領域１２２が対応している。なお、図示していないサブルーチン＃３〜サブルーチン＃（Ｎ−１）についてもサブルーチン用メモリ領域１０６内の図示していないメモリ領域が夫々割り当てられている。なお、本実施の形態では、メモリ領域特定部１０４がメモリ領域管理テーブル９０１を保持しているとしたが、メモリ１０１に格納されていてもよい。また、各サブルーチンが、当該サブルーチンに対応するメモリ領域に関する情報を保持していてもよい。また、メモリ領域管理テーブル９０１では１つのサブルーチンに対して複数のメモリ領域が対応してもよい。
【００５１】
図１に戻って、サブルーチン呼出部１０５は、サブルーチン選択部１０３が出力したサブルーチンの情報及びメモリ領域特定部１０４が出力したメモリ領域の情報を受け取り、受け取ったメモリ領域の書き込み属性情報を書き込み許可に設定し、受け取ったサブルーチンを呼び出す。なお、初期状態において、各メモリ領域の書き込み属性情報は、全て書き込み禁止に設定されている。そして、サブルーチン呼出部１０５は、呼び出したサブルーチンの実行が終了した後に、書き込み許可に設定したメモリ領域の書き込み属性情報を書き込み禁止に再設定する。また、前述したように、サブルーチン実行中のメモリ領域への書き込み命令はメモリ管理ユニット１０２に通知され、メモリ管理ユニット１０２がメモリ領域への書き込み制御を行う。
【００５２】
なお、全てのサブルーチンを保護対象とするのではなく、保護が必要であると前もって設定されているサブルーチンのみを保護対象としてもよい。また、ダウンロードなどにより、ソフトウェアをアップデートした際など、新規登録・更新することにより、メモリ保護対象のサブルーチンを変更することが可能である。
【００５３】
次に、本発明の実施の形態１におけるメモリ保護装置の動作について説明する。図４は、本発明の実施の形態１におけるメモリ保護装置の処理手順について説明するためのフローチャートである。ユーザプログラムからのシステムコールや、カーネル内からの関数呼び出しなどの所定のサブルーチンを呼び出す処理要求が発生した場合に、メモリ保護装置はメモリ保護処理を開始する（ステップＳ２０１）。
【００５４】
ユーザプログラムからのシステムコールや、カーネル内からの関数呼び出しなどの処理要求を、サブルーチン選択部１０３が受け取る。サブルーチン選択部１０３は、サブルーチン管理テーブル８０１を参照することによって、その処理要求に応答するサブルーチンを選択する。そして、サブルーチン選択部１０３は、選択したサブルーチンの情報をメモリ領域特定部１０４へ出力する（ステップＳ２０２）。ここでのサブルーチンの情報は、例えばサブルーチンのメモリ空間内におけるアドレスや、サブルーチンを識別するためのＩＤなどで表現される。例えば、ここではサブルーチン１１１が選択されたものとして説明をする。
【００５５】
次に、メモリ領域特定部１０４は、ステップＳ２０２で出力されたサブルーチンの情報を受け取り、メモリ領域管理テーブル９０１を参照することによって、そのサブルーチンに対応するメモリ領域を特定する。そして、メモリ領域特定部１０４は、特定したメモリ領域の情報を取得し、取得したメモリ領域の情報をサブルーチン呼出部１０５へ出力する（ステップＳ２０３）。ここでのメモリ領域の情報は、例えばメモリ領域のメモリ空間内におけるアドレスや、メモリ領域を識別するためのＩＤなどで表現される。例えば、ステップＳ２０２で出力されたサブルーチン情報がサブルーチン１１１で、サブルーチン１１１に対応するメモリ領域がメモリ領域１２１である場合、メモリ領域特定部１０４はメモリ領域１２１の情報を出力する。
【００５６】
次に、サブルーチン呼出部１０５は、ステップＳ２０２で出力されたサブルーチンの情報とステップＳ２０３で出力されたメモリ領域の情報とを受け取り、受け取ったメモリ領域の情報が示すメモリ領域の書き込み属性情報を書き込み許可に書き換える（ステップＳ２０４）。例えば、ステップＳ２０３で出力されたメモリ領域情報がメモリ領域１２１である場合、サブルーチン呼出部１０５は、メモリ領域１２１に対応する書き込み属性情報１３１の内容を書き込み許可に書き換える。なお、本実施の形態において、どのサブルーチンを実行するかを表すサブルーチン情報は、メモリ領域特定部１０４を介してサブルーチン呼出部１０５に送られるが、特にこれに限らず、サブルーチン選択部１０３からサブルーチン情報をサブルーチン呼出部１０５に送ってもよい。
【００５７】
次に、サブルーチン呼出部１０５は、受け取ったサブルーチンの情報に基づいて、実行するサブルーチンを特定し、特定したサブルーチンを呼び出すことで、サブルーチンを実行する（ステップＳ２０５）。例えば、ステップＳ２０２で出力されたサブルーチンの情報がサブルーチン１１１である場合、サブルーチン呼出部１０５は、サブルーチン１１１をメモリ１０１から呼び出して実行する。
【００５８】
呼び出されたサブルーチンの実行が終了した後、サブルーチン呼出部１０５は、ステップＳ２０４で書き込み許可に設定したメモリ領域の書き込み属性情報を書き込み禁止に再設定する（ステップＳ２０６）。例えば、ステップＳ２０３で出力されたメモリ領域情報がメモリ領域１２１である場合、サブルーチン呼出部１０５は、メモリ領域１２１に対応する書き込み属性情報１３１の内容を書き込み禁止に設定する。
【００５９】
次に、正常なメモリ書き込みの場合の例について説明する。ここでは、図５、図６及び図７の状態から処理が始まる場合を考える。
【００６０】
図５は、本発明の実施の形態１におけるメモリ領域と書き込み属性情報との一例を示す図である。図５におけるメモリ領域１００１は、図１に示すメモリ領域１２１等と同様であり、書き込み属性情報１００２は、図１に示す書き込み属性情報１３１等と同様である。書き込み属性情報１００２は、メモリ領域１００１への書き込みが許可されているのか禁止されているのかを表す書き込み属性であり、この時点では書き込み禁止に設定されている。図６は、サブルーチン管理テーブルの状態の一例を示す図である。図６に示すサブルーチン管理テーブル１１０１では、処理要求＃１に対応するサブルーチンがサブルーチン＃１に設定されており、処理要求＃２に対応するサブルーチンがサブルーチン＃２に設定されている。図７は、メモリ領域管理テーブルの状態の一例を示す図である。図７に示すメモリ領域管理テーブル１２０１では、サブルーチン＃１に対応するメモリ領域がメモリ領域１２１に設定されており、サブルーチン＃２に対応するメモリ領域がメモリ領域１２２に設定されている。
【００６１】
この状態で、サブルーチン選択部１０３が処理要求＃１を受け取ったとする。図４のステップＳ２０２において、サブルーチン選択部１０３は、サブルーチン管理テーブル１１０１に基づいて処理要求＃１に対応するサブルーチン＃１を選択する。次に、図４のステップＳ２０３において、メモリ領域特定部１０４は、メモリ領域管理テーブル１２０１に基づいてサブルーチン＃１に対応するメモリ領域としてメモリ領域１２１を特定する。メモリ領域１２１はサブルーチン＃１に対応する領域であり、サブルーチン＃１が読み書きを行うメモリ領域であるという事を表わす。このとき、サブルーチン＃１が実行される前に、ステップＳ２０４において、サブルーチン呼出部１０５によって、メモリ領域１２１の書き込み属性情報が書き込み可能に設定される。このときの状態が図８である。
【００６２】
図８は、書き込み属性情報が書き込み許可に設定された場合におけるメモリ領域と書き込み属性情報との一例を示す図である。図５の状態から変化したのは、書き込み属性情報１００２が書き込み禁止から書き込み許可に設定されていることである。
【００６３】
その後、ステップＳ２０５において、サブルーチン呼出部１０５によって、サブルーチン＃１が呼び出される。サブルーチン＃１が実行中にメモリ領域１２１に対する書き込み命令が実行されるとき、メモリ領域１２１への書き込みは許可されているので、正常に書き込みが行われる。サブルーチン＃１が実行し終わった後、ステップＳ２０６において、サブルーチン呼出部１０５によって、メモリ領域１２１の書き込み属性情報が書き込み禁止に設定され、メモリ領域１００１の状態は図５の状態に戻る。したがって、メモリ領域１２１に対応するサブルーチン＃１が実行されるとき、メモリ領域１２１への書き込みは正常に行われる。
【００６４】
次に、異常なメモリ書き込みの場合の例について説明する。前記正常の場合と同様に図５、図６及び図７の状態から処理が始まる場合を考える。このとき、サブルーチン＃２が実行されている間に、サブルーチン呼出部１０５がメモリ領域１２１への書き込みを試みたとする。メモリ領域１２１は、サブルーチン＃１に対応するメモリ領域であり、サブルーチン＃１が実行するときにのみ書き込みが許可されている。メモリ領域１２１に対応しないサブルーチン＃２が実行している間はメモリ領域１２１への書き込みは禁止されている。このことから、サブルーチン＃２の実行中にメモリ領域１２１への書き込み命令が発行されたときにメモリ管理ユニット１０２により、メモリ保護例外が発生されて、書き込みが行われない。したがって、メモリ領域１２１に対応しないサブルーチンが実行されるとき、メモリ領域１２１への書き込みは行われず、メモリ領域１２１のデータが誤動作から保護される可能性が向上する。
【００６５】
以上により、サブルーチンは対応しないメモリ領域への書き込みが行えず、誤動作による不正なメモリ書き換えを防止することができる。このことにより、オペレーティングシステムの安全性を向上させることができる。また、プロセスごとに仮想アドレス空間を割り当てた場合と比べて、プロセス空間の切り替えが発生しないため、仮想アドレス空間の切り替えにかかるオーバーヘッドが発生せず、システム全体のパフォーマンスの低下を防ぐことができる。
【００６６】
（実施の形態２）
図９は、本発明の実施の形態２におけるメモリ保護装置の構成を示す図である。図９に示すメモリ保護装置は、ＣＰＵ（中央演算処理装置）１００、メモリ１０１及びメモリ管理ユニット（ＭＭＵ）１０２を備えて構成される。ＣＰＵ１００とメモリ１０１とメモリ管理ユニット１０２とは、例えばバスを介して相互にデータを送受信することが可能である。ＣＰＵ１００は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部１０３、メモリ領域特定部１０４、サブルーチン呼出部１０５及び第１の割り込み応答処理部３０１として機能する。図９において、図１と同じ構成については同じ符号を用い説明を省略する。図９において、図１と異なる個所は、第１の割り込み応答処理部３０１である。
【００６７】
第１の割り込み応答処理部３０１は、割り込みが発生したときに、サブルーチン呼出部１０５が書き込み許可に設定したメモリ領域の書き込み属性情報を取得し、取得したメモリ領域の書き込み属性情報を書き込み禁止に設定して、割り込みに応答する処理を実行する。そして、第１の割り込み応答処理部３０１は、割り込みに応答する処理が終了した後、書き込み禁止に設定したメモリ領域の書き込み属性情報を取得し、取得したメモリ領域の書き込み属性情報を書き込み許可に再設定する。
【００６８】
一般のコンピュータアーキテクチャでは、割り込みが発生したとき、予め設定されている割り込み応答処理を開始し、適切な応答処理を実行し、その後割り込み前に実行していた処理に復帰する。割り込みが禁止されている場合、割り込み禁止が解除されたときに割り込みに応答する処理が行われる。図１０は、一般的なコンピュータアーキテクチャでの割り込みに関する一連の処理の例を説明するための図である。最初に、通常の処理が実行されており、適当なタイミングで割り込み処理要求が発生し、割り込み応答処理が実行される。割り込み応答処理が実行し終わったら通常の処理の続きが行われる。本発明の実施の形態２では、割り込み処理要求が発生したときに、通常の処理のために書き込み許可になっていたメモリ領域の書き込み属性情報を書き込み禁止に設定してから割り込み応答処理を実行し、割り込み応答処理が実行し終わった後に、通常の処理のためのメモリ領域の書き込み属性情報を再び書き込み許可に設定する。
【００６９】
図１１は、本発明の実施の形態２において割り込みが発生したときの処理手順を説明するためのフローチャートである。まず、割り込み処理要求が発生し、第１の割り込み応答処理部３０１は、割り込み応答処理を開始する（ステップＳ５０１）。
【００７０】
第１の割り込み応答処理部３０１は、割り込み処理要求を受け取る。そして、第１の割り込み応答処理部３０１は、サブルーチン呼出部１０５が書き込み許可に設定したメモリ領域の書き込み属性情報を取得し、そのメモリ領域の書き込み属性情報を書き込み禁止に設定する（ステップＳ５０２）。
【００７１】
次に、第１の割り込み応答処理部３０１は、受け取った割り込みに応答する処理を呼び出し、実行する。例えばＬｉｎｕｘの場合は、登録されている割り込みハンドラ関数が呼び出され、実行される（ステップＳ５０３）。
【００７２】
呼び出された割り込みに応答する処理が終了した後、第１の割り込み応答処理部３０１は、ステップＳ５０２で書き込み禁止に設定したメモリ領域の書き込み属性情報を書き込み許可に再設定する（ステップＳ５０４）。なお、第１の割り込み応答処理部３０１は、書き込み禁止に設定したメモリ領域のアドレスを記憶しており、割り込み応答処理が終了した後、記憶しているアドレスを読み出し、読み出したアドレスのメモリ領域に対応する書き込み属性情報を書き込み許可に設定する。
【００７３】
割り込み応答の処理が終わった後、割り込みが発生する前に実行されていた処理が復帰して実行され、割り込み処理を終了する（ステップＳ５０５）。
【００７４】
実施の形態２では、図４のステップＳ２０５でサブルーチンが実行されている間に割り込みが発生すると、実行していたサブルーチンのために書き込みが許可されていたメモリ領域が、書き込み禁止に設定されてから割り込み応答処理が行われる。このため、割り込み応答処理の間に誤動作が起きて、割り込み前に実行していたサブルーチンのために書き込みが許可されていたメモリ領域が不正に書き換えられてしまうことを防止することができる。
【００７５】
（実施の形態３）
図１２は、本発明の実施の形態３におけるメモリ保護装置の構成を示す図である。図１２に示すメモリ保護装置は、ＣＰＵ（中央演算処理装置）１００、メモリ１０１及びメモリ管理ユニット（ＭＭＵ）１０２を備えて構成される。ＣＰＵ１００とメモリ１０１とメモリ管理ユニット１０２とは、例えばバスを介して相互にデータを送受信することが可能である。ＣＰＵ１００は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部１０３、メモリ領域特定部１０４、サブルーチン呼出部１０５及び第２の割り込み応答処理部４０１として機能する。図１２において、図９と同じ構成については同じ符号を用い説明を省略する。図１２において、図９と異なる個所は、第２の割り込み応答処理部４０１である。
【００７６】
第２の割り込み応答処理部４０１は、割り込みが発生したときに、サブルーチン呼出部１０５が書き込み許可に設定したメモリ領域を取得し、割り込みに応答する処理を前半部分と後半部分の２つの処理に分けたうちの前半部分を実行し、割り込みに応答する処理の前半部分が終了した後、取得したメモリ領域の書き込み属性情報を書き込み禁止に設定する。そして、第２の割り込み応答処理部４０１は、割り込みに応答する処理の後半部分を実行し、割り込みに応答する処理の後半部分が終了した後、取得したメモリ領域の書き込み属性情報を書き込み許可に再設定する。ここで、割り込み応答処理の前半部分の処理は、割り込み応答処理を受け付ける処理であり、後半部分の処理は、割り込み応答処理を実行する処理である。例えばＬｉｎｕｘの場合、前半部分の処理がトップハーフの処理であり、後半部分の処理がボトムハーフの処理である。
【００７７】
図１３は、本発明の実施の形態３において割り込みが発生したときの処理手順を説明するためのフローチャートである。まず、割り込み処理要求が発生し、第２の割り込み応答処理部４０１は、割り込み応答処理を開始する（ステップＳ７０１）。なお、割り込みに応答する処理は、前半部分と後半部分の２つに予め分けられているものとする。
【００７８】
第２の割り込み応答処理部４０１は、割り込み処理要求を受け取る。そして、第２の割り込み応答処理部４０１は、割り込みに応答する処理の前半部分を呼び出し、実行する（ステップＳ７０２）。このとき、実行中であったサブルーチンが使用していたメモリ領域の書き込み属性情報は、書き込み許可に設定されたままである。
【００７９】
呼び出された処理（割り込みに応答する処理の前半部分）が終了した後、第２の割り込み応答処理部４０１は、サブルーチン呼出部１０５が書き込み許可に設定したメモリ領域を取得し、そのメモリ領域の書き込み属性情報を書き込み禁止に設定する（ステップＳ７０３）。
【００８０】
次に、第２の割り込み応答処理部４０１は、割り込みに応答する処理の後半部分を呼び出し、実行する（ステップＳ７０４）。
【００８１】
呼び出された処理（割り込みに応答する処理の後半部分）が終了した後、第２の割り込み応答処理部４０１は、ステップＳ７０３で書き込み禁止に設定したメモリ領域の書き込み属性情報を書き込み許可に再設定する（ステップＳ７０５）。なお、第２の割り込み応答処理部４０１は、書き込み禁止に設定したメモリ領域のアドレスを記憶しており、割り込み応答処理の後半部分が終了した後、記憶しているアドレスを読み出し、読み出したアドレスのメモリ領域に対応する書き込み属性情報を書き込み許可に設定する。
【００８２】
割り込み応答の処理が終わった後、割り込みが発生する前に実行されていた処理が復帰して実行され、割り込み処理を終了する（ステップＳ７０６）。
【００８３】
実施の形態３では、図４のステップＳ２０５でサブルーチンが実行されている間に割り込みが発生すると、最初に割り込みに応答する処理の前半部分が実行され、その後に、実行していたサブルーチンのために書き込みが許可されていたメモリ領域が書き込み禁止に設定されてから、割り込み応答処理の後半部分が呼び出される。
【００８４】
組み込み機器の制御においては、割り込みに対して速やかに応答する必要がある事が多いが、割り込みが発生したときに速やかに実行しないといけない重要な処理を割り込み応答処理の前半部分と設定し、多少の遅延が発生しても良い処理を割り込み応答処理の後半部分と設定する実装が考えられる。実施の形態３では、割り込みに応答する処理の前半部分は速やかに実行される。また、割り込みに応答する処理の後半部分が誤動作を起こしても、割り込み前に実行していたサブルーチンのために書き込みが許可されていたメモリ領域が不正に書き換えられてしまう可能性は低減される。
【００８５】
割り込みに応答する処理の前半部分が実行されている間、割り込み前に実行していたサブルーチンのために書き込みが許可されていたメモリ領域は書き込み許可のままになっており、不正書き換えが起きる可能性はある。しかし、割り込みに速やかに応答する処理は通常は単純なものであり（例えば、割り込みを待っていた処理を再開するだけなど）、誤動作を引き起こす可能性が小さい。このため、割り込みに応答する処理の前半部分が速やかに実行されるようにして、安全性と割り込み応答速度による実行パフォーマンスの両方をバランスよく実現することができる。
【００８６】
なお、ここでは割り込みに応答する処理を前半部分と後半部分の２つに分けた場合を説明したが、任意の数に分けてもよい。
【００８７】
（実施の形態４）
次に、本発明の実施の形態４について説明する。図１４は、本発明の実施の形態４におけるメモリ保護装置の構成を示す図である。図１４に示すメモリ保護装置は、ＣＰＵ（中央演算処理装置）１００、メモリ１０１及びメモリ管理ユニット（ＭＭＵ）１０２を備えて構成される。ＣＰＵ１００とメモリ１０１とメモリ管理ユニット１０２とは、例えばバスを介して相互にデータを送受信することが可能である。ＣＰＵ１００は、予めＲＯＭなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部１０３、メモリ領域特定部１０４、サブルーチン呼出部１０５及び例外ハンドラ５０１として機能する。図１４において、図１と同じ構成については同じ符号を用い説明を省略する。図１４において、図１と異なる個所は、例外ハンドラ５０１とモジュール２０１，２０２とである。
【００８８】
メモリ１０１には、複数のモジュール２０１，２０２，・・・が記憶されている。モジュールは、少なくとも１つのサブルーチンと、少なくとも１つのサブルーチン用メモリ領域とで構成される。例えば、モジュール２０１は、サブルーチン＃１、＃２、・・・（２１１、２１２、・・・）と、メモリ領域２２１、２２２、・・・とで構成され、モジュール２０２は、サブルーチン＃Ｎ、＃Ｎ＋１、・・・（２１３、２１４、・・・）と、メモリ領域２２３、２２４、・・・とで構成される。
【００８９】
例外ハンドラ５０１は、メモリ管理ユニット１０２によってメモリ保護例外が発生すると、メモリ保護例外が発生したサブルーチンを含むモジュールを初期化する例外処理を実行する。メモリ管理ユニット１０２は、メモリ保護例外が発生した場合、例外ハンドラ５０１に対して例外処理要求を出力する。この例外処理要求には、メモリ保護例外が発生したサブルーチンを特定する情報が含まれる。例外ハンドラ５０１は、サブルーチンに対応するモジュールを関連付けたモジュール管理テーブルを保持しており、このモジュール管理テーブルを用いてメモリ保護例外が発生したサブルーチンに対応するモジュールを特定する。なお、例外処理としては、モジュールを初期化する処理のほかに、モジュールを復旧する処理等であってもよい。すなわち、例外処理としては、サブルーチンの実行中に発生する通常の処理手続きが継続できないような事象が発生した際に、その時点で実行中の処理手続きを一旦中断して、その事象に応じて実行する特別な処理であればよい。なお、例外ハンドラ５０１が例外処理手段の一例に相当する。
【００９０】
図１５は、モジュール管理テーブルの一例を示す図である。図１５のモジュール管理テーブル６０１では、サブルーチン＃１にモジュール＃１が対応し、サブルーチン＃２にモジュール＃１が対応し、サブルーチン＃Ｎにモジュール＃２が対応する例を示している。
この例の場合に例外ハンドラ５０１が例外処理要求を受けたとき、例外ハンドラ５０１は、モジュール管理テーブル６０１を参照し、メモリ保護例外が発生したサブルーチンに対応するモジュールを特定する。なお、本実施の形態では、例外ハンドラ５０１がモジュール管理テーブル６０１を保持しているとしているが、メモリ１０１に格納されていてもよい。また、各サブルーチンが、当該サブルーチンに対応するモジュールに関する情報（サブルーチンがどのモジュールに属しているかに関する情報）を保持していてもよい。
【００９１】
次に、本発明の実施の形態４におけるメモリ保護装置の動作について説明する。図１６は、本発明の実施の形態４におけるメモリ保護装置の処理手順について説明するためのフローチャートである。なお、図１６において、図４に示す実施の形態１の処理と同じ処理については、同じ符号を付し、説明を省略する。
【００９２】
ステップＳ２０８において、メモリ管理ユニット１０２は、サブルーチンの実行中に、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み指示があったか否かを判断する。ここで、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み指示がない場合（ステップＳ２０８でＹＥＳ）、そのままサブルーチンを実行し、ステップＳ２０６の処理に移行する。一方、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み指示があった場合（ステップＳ２０８でＮＯ）、ステップＳ２０９の処理に移行する。すなわち、サブルーチン呼出部１０５によるサブルーチンの実行中に、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み命令が実行された場合、メモリ管理ユニット１０２は、メモリ保護例外を発生させ、例外処理要求を例外ハンドラ５０１に出力する。
【００９３】
次に、ステップＳ２０９において、例外ハンドラ５０１は例外処理を実行する。そして、例外処理が実行された後、ステップＳ２０７の処理に移行する。
【００９４】
ここで、図１６のステップＳ２０９の例外処理について説明する。図１７は、本発明の実施の形態４におけるメモリ保護装置による例外処理について説明するためのフローチャートである。
【００９５】
まず、例外ハンドラ５０１は、メモリ保護例外が発生したサブルーチンを特定する（ステップＳ８０１）。メモリ管理ユニット１０２は、現在実行中のサブルーチンを認識している。そのため、メモリ管理ユニット１０２は、現在どのサブルーチンを実行しているかを表す実行サブルーチン情報を例外ハンドラ５０１に出力する。なお、例えば、実行サブルーチン情報は、サブルーチンを識別するための識別情報（ＩＤ）などで表現される。例外ハンドラ５０１は、入力された実行サブルーチン情報に基づいて、現在実行中のサブルーチンを特定する。
【００９６】
次に、例外ハンドラ５０１は、ステップＳ８０１において特定したサブルーチンを含むモジュールを特定する（ステップＳ８０２）。例外ハンドラ５０１は、モジュール管理テーブルを参照し、ステップＳ８０１において特定したサブルーチンに対応するモジュールを特定する。なお、特定したモジュールに関する情報は、例えばモジュールのメモリ空間内におけるアドレスや、モジュールを識別するためのＩＤなどで表現される。
【００９７】
次に、例外ハンドラ５０１は、ステップＳ８０２において特定したモジュールを初期化し（ステップＳ８０３）、例外処理を終了する。
【００９８】
ここで、図１４において、サブルーチン＃２が使用するメモリ領域２２２の書き込み属性情報２３２のみが書き込み許可に設定されている場合（他のメモリ領域の書き込み属性情報は書き込み禁止に設定されている）の例外処理について具体的に説明する。
【００９９】
メモリ管理ユニット１０２によって、サブルーチン＃２を実行中に他のモジュール＃２のメモリ領域２２３へ書き込みが指示されたとする。このとき、メモリ領域２２３の書き込み属性情報２３３は、書き込み禁止に設定されているので、メモリ管理ユニット１０２は、メモリ領域２２３への書き込みを行うことができず、メモリ保護例外を発生させる。メモリ保護例外が発生した場合、メモリ管理ユニット１０２は、例外処理要求を例外ハンドラ５０１へ出力する。例外処理要求には、メモリ保護例外を発生させたサブルーチンを特定するための情報が含まれている。そのため、メモリ管理ユニット１０２は、サブルーチン＃２を実行中にメモリ保護例外が発生したことを例外ハンドラ５０１へ通知する。
【０１００】
例外ハンドラ５０１は、例外処理要求が入力されると、メモリ保護例外を発生させたサブルーチンを特定する。ここでは、メモリ保護例外を発生させたサブルーチンがサブルーチン＃２であると特定される。そして、例外ハンドラ５０１は、モジュール管理テーブルを参照して、サブルーチン＃２に対応するモジュールを特定する。図１５に示すモジュール管理テーブル６０１では、サブルーチン＃２にはモジュール＃１が対応付けられているので、例外ハンドラ５０１は、サブルーチン＃２に対応するモジュールがモジュール＃１であると特定する。次に、例外ハンドラ５０１は、特定されたモジュール＃１を初期化する。例外ハンドラ５０１は、モジュール単位で初期化を実行する。モジュールが初期化された後、ユーザプログラムからのシステムコールや、カーネル内からの関数呼び出しなどの処理要求が再度発生し、処理が開始される。
【０１０１】
このように、サブルーチンの実行中に、書き込みが禁止されているメモリ領域への書き込みが指示された場合、当該サブルーチンが含まれるモジュールを初期化する例外処理を行うことにより、処理が途中で停止してしまうという不具合を解消することができる。
【０１０２】
なお、本発明は、上述の実施の形態１〜４をそれぞれ組み合わせてもよい。例えば、図１に示す実施の形態１のメモリ保護装置は、実施の形態２における第１の割り込み応答処理部３０１、実施の形態３における第２の割り込み応答処理部４０１及び実施の形態４における例外ハンドラ５０１のうちの少なくとも１つを備えてもよい。
【産業上の利用可能性】
【０１０３】
本発明にかかるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムは、１つのメモリアドレス空間内で動作するプログラムにおける不正なメモリの書き換えを防止することができ、安全性を必要とする組み込み機器などのオペレーティングシステムなどに有用である。また、本発明にかかるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムは、コンピュータのみならず、各種家電機器、情報処理機器、携帯電話、又は産業機器などでも利用可能である。
【図面の簡単な説明】
【０１０４】
【図１】本発明の実施の形態１におけるメモリ保護装置の構成を示す図である。
【図２】サブルーチン管理テーブルの一例を示す図である。
【図３】メモリ領域管理テーブルの一例を示す図である。
【図４】本発明の実施の形態１におけるメモリ保護装置の処理手順について説明するためのフローチャートである。
【図５】本発明の実施の形態１におけるメモリ領域と書き込み属性情報との一例を示す図である。
【図６】本発明の実施の形態１におけるサブルーチン管理テーブルの一例を示す図である。
【図７】本発明の実施の形態１におけるメモリ領域管理テーブルの一例を示す図である。
【図８】書き込み属性情報が書き込み許可に設定された場合におけるメモリ領域と書き込み属性情報の一例を示す図である。
【図９】本発明の実施の形態２におけるメモリ保護装置の構成を示す図である。
【図１０】コンピュータアーキテクチャでの割り込みに関する一連の処理の例を説明するための図である。
【図１１】本発明の実施の形態２におけるメモリ保護装置に割り込みが発生したときの処理手順を説明するためのフローチャートである。
【図１２】本発明の実施の形態３におけるメモリ保護装置の構成を示す図である。
【図１３】本発明の実施の形態３におけるメモリ保護装置に割り込みが発生したときの処理手順を説明するためのフローチャートである。
【図１４】本発明の実施の形態４におけるメモリ保護装置の構成を示す図である。
【図１５】モジュール管理テーブルの一例を示す図である。
【図１６】本発明の実施の形態４におけるメモリ保護装置の処理手順について説明するためのフローチャートである。
【図１７】本発明の実施の形態４におけるメモリ保護装置による例外処理について説明するためのフローチャートである。
【符号の説明】
【０１０５】
１００    ＣＰＵ
１０１    メモリ
１１１，１１２，１１３    サブルーチン
１２１，１２２，１２３    メモリ領域
１３１，１３２，１３３    書き込み属性情報
１０２    メモリ管理ユニット
１０３    サブルーチン選択部
１０４    メモリ領域特定部
１０５    サブルーチン呼出部
１０６    サブルーチン用メモリ領域
３０１    第１の割り込み応答処理部
４０１    第２の割り込み応答処理部
５０１    例外ハンドラ
６０１    モジュール管理テーブル
８０１    サブルーチン管理テーブル
９０１    メモリ領域管理テーブル
１００１    メモリ領域
１００２    書き込み属性情報
１１０１    サブルーチン管理テーブル
１２０１    メモリ領域管理テーブル
【図１】
2005209178.tif 000003
【図２】
2005209178.tif 000004
【図３】
2005209178.tif 000005
【図４】
2005209178.tif 000006
【図５】
2005209178.tif 000007
【図６】
2005209178.tif 000008
【図７】
2005209178.tif 000009
【図８】
2005209178.tif 000010
【図９】
2005209178.tif 000011
【図１０】
2005209178.tif 000012
【図１１】
2005209178.tif 000013
【図１２】
2005209178.tif 000014
【図１３】
2005209178.tif 000015
【図１４】
2005209178.tif 000016
【図１５】
2005209178.tif 000017
【図１６】
2005209178.tif 000018
【図１７】
2005209178.tif 000019