JP2005209178A - メモリ保護装置、メモリ保護方法及びメモリ保護プログラム - Google Patents

メモリ保護装置、メモリ保護方法及びメモリ保護プログラム Download PDF

Info

Publication number
JP2005209178A
JP2005209178A JP2004372030A JP2004372030A JP2005209178A JP 2005209178 A JP2005209178 A JP 2005209178A JP 2004372030 A JP2004372030 A JP 2004372030A JP 2004372030 A JP2004372030 A JP 2004372030A JP 2005209178 A JP2005209178 A JP 2005209178A
Authority
JP
Japan
Prior art keywords
subroutine
memory
memory area
write
interrupt
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
JP2004372030A
Other languages
English (en)
Inventor
Kenji Ejima
賢司 江島
Masashige Mizuyama
正重 水山
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 JP2004372030A priority Critical patent/JP2005209178A/ja
Publication of JP2005209178A publication Critical patent/JP2005209178A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】 サブルーチンの誤動作によるメモリの不正な書き換えを防止することができるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムを提供する。
【解決手段】 メモリ保護装置は、少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性がメモリ領域ごとに設定可能なメモリ101と、処理要求を実行するサブルーチンを選択するサブルーチン選択部103と、サブルーチンが使用するメモリ領域を特定するメモリ領域特定部104と、特定したメモリ領域の書き込み属性を書き込み許可に設定し、選択したサブルーチンを呼び出し、サブルーチンの実行が終了した後に、メモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出部105とを備える。
【選択図】 図1

Description

本発明は、オペレーティングシステムのメモリ管理に関するものであり、特にメモリの不正書き換えに対してメモリを保護するためのメモリ保護装置、メモリ保護方法及びメモリ保護プログラムに関するものである。
オペレーティングシステムにおけるメモリ管理、特にメモリ保護に関する技術として、システムで動作するアプリケーションを複数のプロセスに分割し、プロセスごとに仮想アドレス空間を割り当てる方法が従来から存在している。
プロセスは、1つのアドレス空間を持ち、そのアドレス空間内のメモリ領域を読み書きしながら実行を行う処理単位である。1つのプロセスと1つのアドレス空間は一対一に対応する。また、スレッドとは、1つのアドレス空間を共用しながら実行する処理単位である。複数のスレッドが1つのアドレス空間内のデータを読み書きしながら並行に動作する事ができる。
プロセスごとに仮想アドレス空間を割り当てる方法では、それぞれのプロセスごとに1つの仮想アドレス空間が割り当てられる。メモリ管理ユニット(MMU)により、それぞれの仮想アドレス空間は独立しているようにふるまい、1つの仮想アドレス空間を割り当てられて動作しているプロセスから、他のプロセスの仮想アドレス空間のメモリ領域にアクセスする事はできない。
これはプロセスが誤動作を起こしても、誤動作を起こしたプロセスに割り当てられている仮想アドレス空間にしかアクセスできないため、誤動作の影響が他のプロセスの仮想アドレス空間に及ぶことがないからである。この事から、ソフトウェアに不具合があっても、その誤動作による影響範囲をプロセス単位にまで抑え込むことができ、システム全体の安定性及び堅牢性が向上する。
しかし、前記のプロセスごとに仮想アドレス空間を割り当てる方法だと、実行するプロセスを切り替えるたびにメモリ管理ユニットが使用する仮想アドレス空間も切り替えなければならず、仮想アドレス空間の切り替えにかかるオーバーヘッドの大きさから、システム全体のパフォーマンスが低下してしまう虞がある。
携帯電話、デジタルテレビや家電機器などのいわゆる組み込み機器では、このパフォーマンス低下の影響は特に著しい。このために、組み込み機器の制御を司るオペレーティングシステムでは、プロセスごとに仮想アドレス空間を割り当てる方法は採用し難いものである。
そこで、システム全体に1つのアドレス空間だけが存在するようにし、全ての実行単位をプロセスではなくスレッドにする方法が組み込み機器の制御で採用される事が多い。この方法では、全てのスレッドが同じアドレス空間を共用している。このため、1つのスレッドが誤動作を起こした場合、その誤動作による影響は他のスレッドが使用するメモリ領域に波及する事があり得る。
そこで、システムで動作しているスレッドをグループ化し、アドレス空間をドメインという単位に分割し、グループごとに特定のドメインを割り当てる技術が開示されている(例えば、特許文献1参照)。スレッドは自身が所属しているグループに割り当てられたドメインのメモリ領域に対してアクセスする事はできるが、他のドメインのメモリ領域に対してアクセスする事ができない。したがって、特許文献1の技術では、単一のアドレス空間で複数のスレッドが動作するシステムにおいて、誤動作による範囲をドメイン単位にまで抑え込むことができ、システムの安全性及び堅牢性を向上させることができる。
特表平11−505652号公報
しかしながら、前記従来の技術における1つまたは少数のスレッドから構成されるシステムの場合は、メモリを細かくドメイン単位に区切ることがほとんどできない。特にLinux(登録商標)などのモノリシックカーネル構造のオペレーティングシステムでは、カーネルが実質的に1つのドメインで構成され、複数の細かいドメインには分割されない。このような構成のときにプログラムの一部のサブルーチンで誤動作が発生したとき、その誤動作が影響しうる範囲はドメイン内全域になる。前記従来技術は、プログラム内で正常に動作している箇所が、異常動作を引き起こした箇所の影響を受けないようにするための技術であるが、1つまたは少数のドメインしか存在しない環境においてはドメイン内での誤動作による影響範囲が大きく、メモリの不正書き換えを防ぎ難い。
このため、前記のスレッドをグループ化してグループごとにドメインを割り当てる方法では、複数のサブルーチンによって1つまたは少数のスレッドが構成されるシステムにおいて、あるサブルーチンが誤動作をした場合、その影響が同一スレッド内で動作する他のサブルーチンが使用するメモリ領域に及ぶ事を防げないという課題があった。
本発明は、前記従来の課題を解決するためになされたもので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムを提供することを目的とするものである。
本発明に係るメモリ保護装置は、少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能なメモリと、処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段とを備える。
この構成によれば、あるサブルーチンが実行される前にそのサブルーチンが使用するメモリ領域の書き込み属性のみを書き込み許可に設定した後、サブルーチンを呼び出して実行する。そして、サブルーチンの実行が終了した後、書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定する。したがって、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができる。
また、上記のメモリ保護装置において、前記メモリは、前記処理要求と、当該処理要求に対応するサブルーチンとを対応付けるサブルーチン管理テーブルを記憶しており、前記サブルーチン選択手段は、処理要求を受け取り、受け取った処理要求に対応するサブルーチンを、前記サブルーチン管理テーブルを参照することにより選択することが好ましい。
この構成によれば、受け取った処理要求に対応するサブルーチンが、処理要求と、当該処理要求に対応するサブルーチンとを対応付けるサブルーチン管理テーブルを参照することにより選択されるので、処理要求に対応するサブルーチンを容易に選択することができ、サブルーチンの選択に要する処理速度を向上させることができる。
また、上記のメモリ保護装置において、前記メモリは、前記サブルーチンと、当該サブルーチンが使用するメモリ領域とを対応付けるメモリ領域管理テーブルを記憶しており、前記メモリ領域特定手段は、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を、前記メモリ領域管理テーブルを参照することにより特定することが好ましい。
この構成によれば、選択されたサブルーチンが使用するメモリ領域が、サブルーチンと、当該サブルーチンが使用するメモリ領域とを対応付けるメモリ領域管理テーブルを参照することにより特定されるので、実行するサブルーチンが使用するメモリ領域を容易に特定することができ、メモリ領域の特定に要する処理速度を向上させることができる。
また、上記のメモリ保護装置において、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定した後、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、呼び出した割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えることが好ましい。
この構成によれば、サブルーチンの実行中に割り込み処理要求が発生したとき、実行中のサブルーチンが使用しているメモリ領域の書き込み属性が書き込み許可から書き込み禁止に設定された後、割り込み処理要求に応答する割り込み応答処理が呼び出されて実行される。そして、呼び出した割り込み応答処理の実行が終了した後に、書き込み禁止に設定したメモリ領域の書き込み属性が書き込み許可に再設定される。したがって、割り込み応答処理の間に誤動作が起きて、割り込み前に実行していたサブルーチンが使用していたメモリ領域の内容が書き換えられてしまうことを防止することができる。
また、上記のメモリ保護装置において、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、前記割り込み応答処理の実行中の任意のタイミングで、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、前記割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えてもよい。
この構成によれば、サブルーチンの実行中に割り込み処理要求が発生したとき、割り込み処理要求に応答する割り込み応答処理が呼び出されて実行され、割り込み応答処理中の任意のタイミングで、実行中のサブルーチンが使用しているメモリ領域の書き込み属性が書き込み許可から書き込み禁止に設定される。そして、割り込み応答処理の実行が終了した後に、書き込み禁止に設定したメモリ領域の書き込み属性が書き込み許可に再設定される。
したがって、割り込み処理要求があった場合、すぐに書き込み属性を設定し直すのではなく、割り込み応答処理をある程度実行した後に任意のタイミングで書き込み属性を設定することで、割り込みに対して速やかに応答することができる。
また、上記のメモリ保護装置において、前記割り込み応答処理は、前半部分の処理と後半部分の処理とに予め分割されており、前記割り込み応答処理手段は、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理の前半部分の処理を呼び出して実行し、前記前半部分の処理の実行が終了した後、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、書き込み属性が書き込み禁止に設定された後、前記割り込み応答処理の後半部分の処理を呼び出して実行し、前記後半部分の処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定することが好ましい。
この構成によれば、サブルーチンの実行中に割り込み処理要求が発生したとき、割り込み処理要求に応答する割り込み応答処理の前半部分の処理が呼び出される。そして、前半部分の処理の実行が終了した後、実行中のサブルーチンが使用しているメモリ領域の書き込み属性が書き込み許可から書き込み禁止に設定される。書き込み属性が書き込み禁止に設定された後、割り込み応答処理の後半部分の処理が呼び出されて実行される。続いて、後半部分の処理の実行が終了した後、書き込み禁止に設定したメモリ領域の書き込み属性が書き込み許可に再設定される。
したがって、割り込み処理要求があった場合、すぐに書き込み属性を設定し直すのではなく、割り込み応答処理の前半部分を実行した後に書き込み属性を設定し、書き込み属性を設定した後、割り込み応答処理の後半部分を実行することで、割り込みに対して速やかに応答することができ、特に迅速に対応する必要のある割り込み応答処理の前半部分を迅速に実行することができる。
また、上記のメモリ保護装置において、前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、例外処理を実行するためのメモリ保護例外を発生させるメモリ保護例外発生手段をさらに備えることが好ましい。
この構成によれば、書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、例外処理を実行するためのメモリ保護例外が発生されるので、書き込みが禁止されているメモリ領域には書き込みが行われず、実行中のサブルーチンが使用するメモリ領域以外のメモリ領域の内容が書き換えられることを防止することができる。なお、例外処理とは、サブルーチンの実行中に発生する通常の処理手続きが継続できないような事象が発生した際に、その時点で実行中の処理手続きを一旦中断して、その事象に応じて実行する特別な処理のことである。
また、上記のメモリ保護装置において、前記メモリは、夫々が少なくとも1つのサブルーチンを含む複数のモジュールと、当該サブルーチンが使用する少なくとも1つのメモリ領域とを備え、前記メモリ保護例外発生手段は、前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたサブルーチンを特定し、前記特定したサブルーチンが含まれるモジュールを特定し、前記特定したモジュールを初期化する例外処理を実行する例外処理手段をさらに含むことが好ましい。
この構成によれば、書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、当該書き込み命令が発行されたサブルーチンが特定され、特定されたサブルーチンが含まれるモジュールが特定され、特定されたモジュールを初期化する例外処理が実行される。このように、書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行された場合、モジュール単位で初期化が行われるので、処理が途中で停止してしまう、いわゆるフリーズ状態になることを防止することができる。
また、上記のメモリ保護装置において、前記メモリは、前記サブルーチンと、当該サブルーチンが含まれるモジュールとを対応付けるモジュール管理テーブルを記憶しており、前記例外処理手段は、特定したサブルーチンが含まれるモジュールを、前記モジュール管理テーブルを参照することにより特定することが好ましい。
この構成によれば、特定したサブルーチンが含まれるモジュールが、サブルーチンと、当該サブルーチンが含まれるモジュールとを対応付けるモジュール管理テーブルを参照することにより特定されるので、書き込み属性が書き込み禁止に設定されているメモリ領域にアクセスしたサブルーチンが含まれるモジュールを容易に特定することができ、モジュールの特定に要する処理速度を向上させることができる。
本発明に係るメモリ保護方法は、メモリは、少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護方法であって、処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択ステップと、前記サブルーチン選択ステップにおいて選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定ステップと、前記メモリ領域特定ステップにおいて特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択ステップにおいて選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出ステップとを含む。
この構成によれば、あるサブルーチンが実行される前にそのサブルーチンが使用するメモリ領域の書き込み属性のみを書き込み許可に設定した後、サブルーチンを呼び出して実行する。そして、サブルーチンの実行が終了した後、書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定する。したがって、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができる。
本発明に係るメモリ保護プログラムは、少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護プログラムであって、処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段としてコンピュータを機能させる。
この構成によれば、あるサブルーチンが実行される前にそのサブルーチンが使用するメモリ領域の書き込み属性のみを書き込み許可に設定した後、サブルーチンを呼び出して実行する。そして、サブルーチンの実行が終了した後、書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定する。したがって、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えを防止することができる。
本発明によれば、サブルーチンが実行している間のみ、当該サブルーチンに対応するメモリ領域の書き込みが許可され、他のメモリ領域への書き込みが禁止されるので、サブルーチンの誤動作によるメモリの不正な書き換えの発生を防止することができ、オペレーティングシステムの安全性を向上させることができる。また、プロセスごとに仮想アドレス空間を割り当てた場合と比べて、仮想アドレス空間の切り替えにかかるオーバーヘッドが発生せず、システム全体のパフォーマンスの低下を防ぐことができる。
以下、本発明の一実施の形態によるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムについて図面を参照しながら説明する。
(実施の形態1)
図1は、本発明の実施の形態1におけるメモリ保護装置の構成を示す図である。ここでは、Linuxオペレーティングシステムの場合を例に説明する。なお、本発明は、UNIX(登録商標)、Windows(登録商標)やトロン(登録商標)など、Linux以外のオペレーティングシステムに用いてもよい。
図1に示すメモリ保護装置は、CPU(中央演算処理装置)100、メモリ101及びメモリ管理ユニット(MMU)102を備えて構成される。CPU100とメモリ101とメモリ管理ユニット102とは、例えばバスを介して相互にデータを送受信することが可能である。
メモリ101には、複数のサブルーチン#1、#2、…#N(111、112、113)が格納される領域と、サブルーチンが使用するサブルーチン用メモリ領域106とが割り当てられている。メモリ101としては、例えばRAM(ランダムアクセスメモリ)やフラッシュメモリのような任意のタイプのものを使用することができる。また、メモリ101は、単一のメモリで構成されている必要はなく、同種の複数のメモリ又はROM(リードオンリメモリ)を含む、異なる種類のメモリの組み合わせであってもよい。さらに、外部記憶装置を利用することも可能である。また、メモリ101にはサブルーチン用ではないメモリ領域が含まれても良い。
サブルーチン#1、#2、…#N(111、112、113)は、メモリ内に書かれた機械語命令列である。例えば、Linuxカーネル内の関数などがサブルーチンに相当する。
サブルーチン用メモリ領域106には、さらに複数のメモリ領域121、122、123が割り当てられている。例えば、Linuxのそれぞれのカーネルモジュールが使用するメモリ領域がこれらのメモリ領域に相当する。また、メモリ領域毎に書き込み属性情報(131、132、133)を備えている。書き込み属性情報は、それぞれメモリ領域121、122、123に対する書き込みが許可されているのか禁止されているのかを表わす情報である。例えば、ページング機構を備えたコンピュータアーキテクチャにおいて、1つのメモリ領域を1つ以上のメモリページの集合として構成することができる。このとき、それぞれのメモリページの属性情報を持っているページテーブル記述子が、メモリ領域の書き込み属性情報となる。なお、本発明は、ページング機構以外に、セグメント機構などを備えたコンピュータアーキテクチャで実現してもよい。
サブルーチン用メモリ領域106に含まれるメモリ領域はサブルーチンと対応しており、サブルーチン111とメモリ領域121とを結ぶ破線、サブルーチン112とメモリ領域122とを結ぶ破線、サブルーチン113とメモリ領域122とを結ぶ破線が、それぞれサブルーチンとメモリ領域の対応の例を示している。この例は、サブルーチン111が使用するメモリ領域がメモリ領域121で、サブルーチン112とサブルーチン113とが使用するメモリ領域がメモリ領域122であるという事を示している。なお、ここでは1つのサブルーチンに対して1つのメモリ領域が対応している例を示しているが、それだけに限定されず、1つのサブルーチンに対して複数個のメモリ領域を割り当ててもよい。
メモリ管理ユニット(MMU)102は、メモリ領域への書き込みの管理を行う。サブルーチン実行中にメモリ領域への書き込み命令が発行されると、メモリ管理ユニット102は、当該書き込み命令に対応するメモリ領域への書き込みを制御する。例えば、書き込み属性情報が書き込み許可に設定されているメモリ領域への書き込み命令が発行されると、対応するメモリ領域への書き込みを実行させ、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されると、メモリ保護例外を発生する。なお、このメモリ保護例外については、実施の形態4で詳細に説明する。
CPU100は、予めROMなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部103、メモリ領域特定部104及びサブルーチン呼出部105として機能する。
サブルーチン選択部103は、システムコールやLinuxカーネル内からの処理要求に対して、適切に応答できるサブルーチンを選択する。サブルーチン選択部103は、例えば、システムコールや処理要求毎に対応するサブルーチンを関連付けたサブルーチン管理テーブルを保持しており、このサブルーチン管理テーブルを用いて複数のサブルーチンの中から所定のサブルーチンを選択する。サブルーチン選択部103は、選択したサブルーチンの情報をメモリ領域特定部104へ出力する。ここでのサブルーチンの情報は、例えばサブルーチンのメモリ空間内におけるアドレスや、サブルーチンを識別するための識別情報(ID)などで表現される。
図2は、サブルーチン管理テーブルの一例を示す図である。図2のサブルーチン管理テーブル801では、処理要求#1にサブルーチン#1が対応し、処理要求#2にサブルーチン#2が対応し、処理要求#Nにサブルーチン#Nが対応する例を示している。この例の場合にサブルーチン選択部103が処理要求#1を受けたとき、サブルーチン選択部103は、サブルーチン管理テーブル801に基づいて、対応するサブルーチン#1を選択する。なお、本実施の形態では、サブルーチン選択部103がサブルーチン管理テーブル801を保持しているとしているが、メモリ101に格納されていてもよい。また、各サブルーチンが、当該サブルーチンに対応するシステムコールや処理要求に関する情報を保持していてもよい。
図1に戻って、メモリ領域特定部104は、サブルーチン選択部103によって選択されたサブルーチンの情報を受け取り、このサブルーチンに対応するメモリ領域を調べて、メモリ領域を特定する。メモリ領域特定部104は、特定したメモリ領域の情報をサブルーチン呼出部105へ出力する。例えば、サブルーチン111に対応するメモリ領域がメモリ領域121である場合、メモリ領域特定部104は、サブルーチン111の情報が入力されるとメモリ領域121の情報を出力する。ここでのメモリ領域の情報は、例えばメモリ領域のメモリ空間内におけるアドレスや、メモリ領域を識別するための識別情報(ID)などで表現される。
メモリ領域特定部104は、例えば、サブルーチン毎に対応するメモリ領域を関連付けたメモリ領域管理テーブルを保持しており、このメモリ領域管理テーブルを用いてメモリ領域を決定する。図3は、メモリ領域管理テーブルの一例を示す図である。図3のメモリ領域管理テーブル901では、サブルーチン#1にメモリ領域121が対応し、サブルーチン#2にメモリ領域122が対応し、サブルーチン#Nにメモリ領域122が対応している。なお、図示していないサブルーチン#3〜サブルーチン#(N−1)についてもサブルーチン用メモリ領域106内の図示していないメモリ領域が夫々割り当てられている。なお、本実施の形態では、メモリ領域特定部104がメモリ領域管理テーブル901を保持しているとしたが、メモリ101に格納されていてもよい。また、各サブルーチンが、当該サブルーチンに対応するメモリ領域に関する情報を保持していてもよい。また、メモリ領域管理テーブル901では1つのサブルーチンに対して複数のメモリ領域が対応してもよい。
図1に戻って、サブルーチン呼出部105は、サブルーチン選択部103が出力したサブルーチンの情報及びメモリ領域特定部104が出力したメモリ領域の情報を受け取り、受け取ったメモリ領域の書き込み属性情報を書き込み許可に設定し、受け取ったサブルーチンを呼び出す。なお、初期状態において、各メモリ領域の書き込み属性情報は、全て書き込み禁止に設定されている。そして、サブルーチン呼出部105は、呼び出したサブルーチンの実行が終了した後に、書き込み許可に設定したメモリ領域の書き込み属性情報を書き込み禁止に再設定する。また、前述したように、サブルーチン実行中のメモリ領域への書き込み命令はメモリ管理ユニット102に通知され、メモリ管理ユニット102がメモリ領域への書き込み制御を行う。
なお、全てのサブルーチンを保護対象とするのではなく、保護が必要であると前もって設定されているサブルーチンのみを保護対象としてもよい。また、ダウンロードなどにより、ソフトウェアをアップデートした際など、新規登録・更新することにより、メモリ保護対象のサブルーチンを変更することが可能である。
次に、本発明の実施の形態1におけるメモリ保護装置の動作について説明する。図4は、本発明の実施の形態1におけるメモリ保護装置の処理手順について説明するためのフローチャートである。ユーザプログラムからのシステムコールや、カーネル内からの関数呼び出しなどの所定のサブルーチンを呼び出す処理要求が発生した場合に、メモリ保護装置はメモリ保護処理を開始する(ステップS201)。
ユーザプログラムからのシステムコールや、カーネル内からの関数呼び出しなどの処理要求を、サブルーチン選択部103が受け取る。サブルーチン選択部103は、サブルーチン管理テーブル801を参照することによって、その処理要求に応答するサブルーチンを選択する。そして、サブルーチン選択部103は、選択したサブルーチンの情報をメモリ領域特定部104へ出力する(ステップS202)。ここでのサブルーチンの情報は、例えばサブルーチンのメモリ空間内におけるアドレスや、サブルーチンを識別するためのIDなどで表現される。例えば、ここではサブルーチン111が選択されたものとして説明をする。
次に、メモリ領域特定部104は、ステップS202で出力されたサブルーチンの情報を受け取り、メモリ領域管理テーブル901を参照することによって、そのサブルーチンに対応するメモリ領域を特定する。そして、メモリ領域特定部104は、特定したメモリ領域の情報を取得し、取得したメモリ領域の情報をサブルーチン呼出部105へ出力する(ステップS203)。ここでのメモリ領域の情報は、例えばメモリ領域のメモリ空間内におけるアドレスや、メモリ領域を識別するためのIDなどで表現される。例えば、ステップS202で出力されたサブルーチン情報がサブルーチン111で、サブルーチン111に対応するメモリ領域がメモリ領域121である場合、メモリ領域特定部104はメモリ領域121の情報を出力する。
次に、サブルーチン呼出部105は、ステップS202で出力されたサブルーチンの情報とステップS203で出力されたメモリ領域の情報とを受け取り、受け取ったメモリ領域の情報が示すメモリ領域の書き込み属性情報を書き込み許可に書き換える(ステップS204)。例えば、ステップS203で出力されたメモリ領域情報がメモリ領域121である場合、サブルーチン呼出部105は、メモリ領域121に対応する書き込み属性情報131の内容を書き込み許可に書き換える。なお、本実施の形態において、どのサブルーチンを実行するかを表すサブルーチン情報は、メモリ領域特定部104を介してサブルーチン呼出部105に送られるが、特にこれに限らず、サブルーチン選択部103からサブルーチン情報をサブルーチン呼出部105に送ってもよい。
次に、サブルーチン呼出部105は、受け取ったサブルーチンの情報に基づいて、実行するサブルーチンを特定し、特定したサブルーチンを呼び出すことで、サブルーチンを実行する(ステップS205)。例えば、ステップS202で出力されたサブルーチンの情報がサブルーチン111である場合、サブルーチン呼出部105は、サブルーチン111をメモリ101から呼び出して実行する。
呼び出されたサブルーチンの実行が終了した後、サブルーチン呼出部105は、ステップS204で書き込み許可に設定したメモリ領域の書き込み属性情報を書き込み禁止に再設定する(ステップS206)。例えば、ステップS203で出力されたメモリ領域情報がメモリ領域121である場合、サブルーチン呼出部105は、メモリ領域121に対応する書き込み属性情報131の内容を書き込み禁止に設定する。
次に、正常なメモリ書き込みの場合の例について説明する。ここでは、図5、図6及び図7の状態から処理が始まる場合を考える。
図5は、本発明の実施の形態1におけるメモリ領域と書き込み属性情報との一例を示す図である。図5におけるメモリ領域1001は、図1に示すメモリ領域121等と同様であり、書き込み属性情報1002は、図1に示す書き込み属性情報131等と同様である。書き込み属性情報1002は、メモリ領域1001への書き込みが許可されているのか禁止されているのかを表す書き込み属性であり、この時点では書き込み禁止に設定されている。図6は、サブルーチン管理テーブルの状態の一例を示す図である。図6に示すサブルーチン管理テーブル1101では、処理要求#1に対応するサブルーチンがサブルーチン#1に設定されており、処理要求#2に対応するサブルーチンがサブルーチン#2に設定されている。図7は、メモリ領域管理テーブルの状態の一例を示す図である。図7に示すメモリ領域管理テーブル1201では、サブルーチン#1に対応するメモリ領域がメモリ領域121に設定されており、サブルーチン#2に対応するメモリ領域がメモリ領域122に設定されている。
この状態で、サブルーチン選択部103が処理要求#1を受け取ったとする。図4のステップS202において、サブルーチン選択部103は、サブルーチン管理テーブル1101に基づいて処理要求#1に対応するサブルーチン#1を選択する。次に、図4のステップS203において、メモリ領域特定部104は、メモリ領域管理テーブル1201に基づいてサブルーチン#1に対応するメモリ領域としてメモリ領域121を特定する。メモリ領域121はサブルーチン#1に対応する領域であり、サブルーチン#1が読み書きを行うメモリ領域であるという事を表わす。このとき、サブルーチン#1が実行される前に、ステップS204において、サブルーチン呼出部105によって、メモリ領域121の書き込み属性情報が書き込み可能に設定される。このときの状態が図8である。
図8は、書き込み属性情報が書き込み許可に設定された場合におけるメモリ領域と書き込み属性情報との一例を示す図である。図5の状態から変化したのは、書き込み属性情報1002が書き込み禁止から書き込み許可に設定されていることである。
その後、ステップS205において、サブルーチン呼出部105によって、サブルーチン#1が呼び出される。サブルーチン#1が実行中にメモリ領域121に対する書き込み命令が実行されるとき、メモリ領域121への書き込みは許可されているので、正常に書き込みが行われる。サブルーチン#1が実行し終わった後、ステップS206において、サブルーチン呼出部105によって、メモリ領域121の書き込み属性情報が書き込み禁止に設定され、メモリ領域1001の状態は図5の状態に戻る。したがって、メモリ領域121に対応するサブルーチン#1が実行されるとき、メモリ領域121への書き込みは正常に行われる。
次に、異常なメモリ書き込みの場合の例について説明する。前記正常の場合と同様に図5、図6及び図7の状態から処理が始まる場合を考える。このとき、サブルーチン#2が実行されている間に、サブルーチン呼出部105がメモリ領域121への書き込みを試みたとする。メモリ領域121は、サブルーチン#1に対応するメモリ領域であり、サブルーチン#1が実行するときにのみ書き込みが許可されている。メモリ領域121に対応しないサブルーチン#2が実行している間はメモリ領域121への書き込みは禁止されている。このことから、サブルーチン#2の実行中にメモリ領域121への書き込み命令が発行されたときにメモリ管理ユニット102により、メモリ保護例外が発生されて、書き込みが行われない。したがって、メモリ領域121に対応しないサブルーチンが実行されるとき、メモリ領域121への書き込みは行われず、メモリ領域121のデータが誤動作から保護される可能性が向上する。
以上により、サブルーチンは対応しないメモリ領域への書き込みが行えず、誤動作による不正なメモリ書き換えを防止することができる。このことにより、オペレーティングシステムの安全性を向上させることができる。また、プロセスごとに仮想アドレス空間を割り当てた場合と比べて、プロセス空間の切り替えが発生しないため、仮想アドレス空間の切り替えにかかるオーバーヘッドが発生せず、システム全体のパフォーマンスの低下を防ぐことができる。
(実施の形態2)
図9は、本発明の実施の形態2におけるメモリ保護装置の構成を示す図である。図9に示すメモリ保護装置は、CPU(中央演算処理装置)100、メモリ101及びメモリ管理ユニット(MMU)102を備えて構成される。CPU100とメモリ101とメモリ管理ユニット102とは、例えばバスを介して相互にデータを送受信することが可能である。CPU100は、予めROMなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部103、メモリ領域特定部104、サブルーチン呼出部105及び第1の割り込み応答処理部301として機能する。図9において、図1と同じ構成については同じ符号を用い説明を省略する。図9において、図1と異なる個所は、第1の割り込み応答処理部301である。
第1の割り込み応答処理部301は、割り込みが発生したときに、サブルーチン呼出部105が書き込み許可に設定したメモリ領域の書き込み属性情報を取得し、取得したメモリ領域の書き込み属性情報を書き込み禁止に設定して、割り込みに応答する処理を実行する。そして、第1の割り込み応答処理部301は、割り込みに応答する処理が終了した後、書き込み禁止に設定したメモリ領域の書き込み属性情報を取得し、取得したメモリ領域の書き込み属性情報を書き込み許可に再設定する。
一般のコンピュータアーキテクチャでは、割り込みが発生したとき、予め設定されている割り込み応答処理を開始し、適切な応答処理を実行し、その後割り込み前に実行していた処理に復帰する。割り込みが禁止されている場合、割り込み禁止が解除されたときに割り込みに応答する処理が行われる。図10は、一般的なコンピュータアーキテクチャでの割り込みに関する一連の処理の例を説明するための図である。最初に、通常の処理が実行されており、適当なタイミングで割り込み処理要求が発生し、割り込み応答処理が実行される。割り込み応答処理が実行し終わったら通常の処理の続きが行われる。本発明の実施の形態2では、割り込み処理要求が発生したときに、通常の処理のために書き込み許可になっていたメモリ領域の書き込み属性情報を書き込み禁止に設定してから割り込み応答処理を実行し、割り込み応答処理が実行し終わった後に、通常の処理のためのメモリ領域の書き込み属性情報を再び書き込み許可に設定する。
図11は、本発明の実施の形態2において割り込みが発生したときの処理手順を説明するためのフローチャートである。まず、割り込み処理要求が発生し、第1の割り込み応答処理部301は、割り込み応答処理を開始する(ステップS501)。
第1の割り込み応答処理部301は、割り込み処理要求を受け取る。そして、第1の割り込み応答処理部301は、サブルーチン呼出部105が書き込み許可に設定したメモリ領域の書き込み属性情報を取得し、そのメモリ領域の書き込み属性情報を書き込み禁止に設定する(ステップS502)。
次に、第1の割り込み応答処理部301は、受け取った割り込みに応答する処理を呼び出し、実行する。例えばLinuxの場合は、登録されている割り込みハンドラ関数が呼び出され、実行される(ステップS503)。
呼び出された割り込みに応答する処理が終了した後、第1の割り込み応答処理部301は、ステップS502で書き込み禁止に設定したメモリ領域の書き込み属性情報を書き込み許可に再設定する(ステップS504)。なお、第1の割り込み応答処理部301は、書き込み禁止に設定したメモリ領域のアドレスを記憶しており、割り込み応答処理が終了した後、記憶しているアドレスを読み出し、読み出したアドレスのメモリ領域に対応する書き込み属性情報を書き込み許可に設定する。
割り込み応答の処理が終わった後、割り込みが発生する前に実行されていた処理が復帰して実行され、割り込み処理を終了する(ステップS505)。
実施の形態2では、図4のステップS205でサブルーチンが実行されている間に割り込みが発生すると、実行していたサブルーチンのために書き込みが許可されていたメモリ領域が、書き込み禁止に設定されてから割り込み応答処理が行われる。このため、割り込み応答処理の間に誤動作が起きて、割り込み前に実行していたサブルーチンのために書き込みが許可されていたメモリ領域が不正に書き換えられてしまうことを防止することができる。
(実施の形態3)
図12は、本発明の実施の形態3におけるメモリ保護装置の構成を示す図である。図12に示すメモリ保護装置は、CPU(中央演算処理装置)100、メモリ101及びメモリ管理ユニット(MMU)102を備えて構成される。CPU100とメモリ101とメモリ管理ユニット102とは、例えばバスを介して相互にデータを送受信することが可能である。CPU100は、予めROMなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部103、メモリ領域特定部104、サブルーチン呼出部105及び第2の割り込み応答処理部401として機能する。図12において、図9と同じ構成については同じ符号を用い説明を省略する。図12において、図9と異なる個所は、第2の割り込み応答処理部401である。
第2の割り込み応答処理部401は、割り込みが発生したときに、サブルーチン呼出部105が書き込み許可に設定したメモリ領域を取得し、割り込みに応答する処理を前半部分と後半部分の2つの処理に分けたうちの前半部分を実行し、割り込みに応答する処理の前半部分が終了した後、取得したメモリ領域の書き込み属性情報を書き込み禁止に設定する。そして、第2の割り込み応答処理部401は、割り込みに応答する処理の後半部分を実行し、割り込みに応答する処理の後半部分が終了した後、取得したメモリ領域の書き込み属性情報を書き込み許可に再設定する。ここで、割り込み応答処理の前半部分の処理は、割り込み応答処理を受け付ける処理であり、後半部分の処理は、割り込み応答処理を実行する処理である。例えばLinuxの場合、前半部分の処理がトップハーフの処理であり、後半部分の処理がボトムハーフの処理である。
図13は、本発明の実施の形態3において割り込みが発生したときの処理手順を説明するためのフローチャートである。まず、割り込み処理要求が発生し、第2の割り込み応答処理部401は、割り込み応答処理を開始する(ステップS701)。なお、割り込みに応答する処理は、前半部分と後半部分の2つに予め分けられているものとする。
第2の割り込み応答処理部401は、割り込み処理要求を受け取る。そして、第2の割り込み応答処理部401は、割り込みに応答する処理の前半部分を呼び出し、実行する(ステップS702)。このとき、実行中であったサブルーチンが使用していたメモリ領域の書き込み属性情報は、書き込み許可に設定されたままである。
呼び出された処理(割り込みに応答する処理の前半部分)が終了した後、第2の割り込み応答処理部401は、サブルーチン呼出部105が書き込み許可に設定したメモリ領域を取得し、そのメモリ領域の書き込み属性情報を書き込み禁止に設定する(ステップS703)。
次に、第2の割り込み応答処理部401は、割り込みに応答する処理の後半部分を呼び出し、実行する(ステップS704)。
呼び出された処理(割り込みに応答する処理の後半部分)が終了した後、第2の割り込み応答処理部401は、ステップS703で書き込み禁止に設定したメモリ領域の書き込み属性情報を書き込み許可に再設定する(ステップS705)。なお、第2の割り込み応答処理部401は、書き込み禁止に設定したメモリ領域のアドレスを記憶しており、割り込み応答処理の後半部分が終了した後、記憶しているアドレスを読み出し、読み出したアドレスのメモリ領域に対応する書き込み属性情報を書き込み許可に設定する。
割り込み応答の処理が終わった後、割り込みが発生する前に実行されていた処理が復帰して実行され、割り込み処理を終了する(ステップS706)。
実施の形態3では、図4のステップS205でサブルーチンが実行されている間に割り込みが発生すると、最初に割り込みに応答する処理の前半部分が実行され、その後に、実行していたサブルーチンのために書き込みが許可されていたメモリ領域が書き込み禁止に設定されてから、割り込み応答処理の後半部分が呼び出される。
組み込み機器の制御においては、割り込みに対して速やかに応答する必要がある事が多いが、割り込みが発生したときに速やかに実行しないといけない重要な処理を割り込み応答処理の前半部分と設定し、多少の遅延が発生しても良い処理を割り込み応答処理の後半部分と設定する実装が考えられる。実施の形態3では、割り込みに応答する処理の前半部分は速やかに実行される。また、割り込みに応答する処理の後半部分が誤動作を起こしても、割り込み前に実行していたサブルーチンのために書き込みが許可されていたメモリ領域が不正に書き換えられてしまう可能性は低減される。
割り込みに応答する処理の前半部分が実行されている間、割り込み前に実行していたサブルーチンのために書き込みが許可されていたメモリ領域は書き込み許可のままになっており、不正書き換えが起きる可能性はある。しかし、割り込みに速やかに応答する処理は通常は単純なものであり(例えば、割り込みを待っていた処理を再開するだけなど)、誤動作を引き起こす可能性が小さい。このため、割り込みに応答する処理の前半部分が速やかに実行されるようにして、安全性と割り込み応答速度による実行パフォーマンスの両方をバランスよく実現することができる。
なお、ここでは割り込みに応答する処理を前半部分と後半部分の2つに分けた場合を説明したが、任意の数に分けてもよい。
(実施の形態4)
次に、本発明の実施の形態4について説明する。図14は、本発明の実施の形態4におけるメモリ保護装置の構成を示す図である。図14に示すメモリ保護装置は、CPU(中央演算処理装置)100、メモリ101及びメモリ管理ユニット(MMU)102を備えて構成される。CPU100とメモリ101とメモリ管理ユニット102とは、例えばバスを介して相互にデータを送受信することが可能である。CPU100は、予めROMなどのコンピュータ読み取り可能な記録媒体に記憶されているメモリ保護プログラムが実行されることによって、サブルーチン選択部103、メモリ領域特定部104、サブルーチン呼出部105及び例外ハンドラ501として機能する。図14において、図1と同じ構成については同じ符号を用い説明を省略する。図14において、図1と異なる個所は、例外ハンドラ501とモジュール201,202とである。
メモリ101には、複数のモジュール201,202,・・・が記憶されている。モジュールは、少なくとも1つのサブルーチンと、少なくとも1つのサブルーチン用メモリ領域とで構成される。例えば、モジュール201は、サブルーチン#1、#2、・・・(211、212、・・・)と、メモリ領域221、222、・・・とで構成され、モジュール202は、サブルーチン#N、#N+1、・・・(213、214、・・・)と、メモリ領域223、224、・・・とで構成される。
例外ハンドラ501は、メモリ管理ユニット102によってメモリ保護例外が発生すると、メモリ保護例外が発生したサブルーチンを含むモジュールを初期化する例外処理を実行する。メモリ管理ユニット102は、メモリ保護例外が発生した場合、例外ハンドラ501に対して例外処理要求を出力する。この例外処理要求には、メモリ保護例外が発生したサブルーチンを特定する情報が含まれる。例外ハンドラ501は、サブルーチンに対応するモジュールを関連付けたモジュール管理テーブルを保持しており、このモジュール管理テーブルを用いてメモリ保護例外が発生したサブルーチンに対応するモジュールを特定する。なお、例外処理としては、モジュールを初期化する処理のほかに、モジュールを復旧する処理等であってもよい。すなわち、例外処理としては、サブルーチンの実行中に発生する通常の処理手続きが継続できないような事象が発生した際に、その時点で実行中の処理手続きを一旦中断して、その事象に応じて実行する特別な処理であればよい。なお、例外ハンドラ501が例外処理手段の一例に相当する。
図15は、モジュール管理テーブルの一例を示す図である。図15のモジュール管理テーブル601では、サブルーチン#1にモジュール#1が対応し、サブルーチン#2にモジュール#1が対応し、サブルーチン#Nにモジュール#2が対応する例を示している。
この例の場合に例外ハンドラ501が例外処理要求を受けたとき、例外ハンドラ501は、モジュール管理テーブル601を参照し、メモリ保護例外が発生したサブルーチンに対応するモジュールを特定する。なお、本実施の形態では、例外ハンドラ501がモジュール管理テーブル601を保持しているとしているが、メモリ101に格納されていてもよい。また、各サブルーチンが、当該サブルーチンに対応するモジュールに関する情報(サブルーチンがどのモジュールに属しているかに関する情報)を保持していてもよい。
次に、本発明の実施の形態4におけるメモリ保護装置の動作について説明する。図16は、本発明の実施の形態4におけるメモリ保護装置の処理手順について説明するためのフローチャートである。なお、図16において、図4に示す実施の形態1の処理と同じ処理については、同じ符号を付し、説明を省略する。
ステップS208において、メモリ管理ユニット102は、サブルーチンの実行中に、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み指示があったか否かを判断する。ここで、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み指示がない場合(ステップS208でYES)、そのままサブルーチンを実行し、ステップS206の処理に移行する。一方、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み指示があった場合(ステップS208でNO)、ステップS209の処理に移行する。すなわち、サブルーチン呼出部105によるサブルーチンの実行中に、書き込み属性情報が書き込み禁止に設定されているメモリ領域への書き込み命令が実行された場合、メモリ管理ユニット102は、メモリ保護例外を発生させ、例外処理要求を例外ハンドラ501に出力する。
次に、ステップS209において、例外ハンドラ501は例外処理を実行する。そして、例外処理が実行された後、ステップS207の処理に移行する。
ここで、図16のステップS209の例外処理について説明する。図17は、本発明の実施の形態4におけるメモリ保護装置による例外処理について説明するためのフローチャートである。
まず、例外ハンドラ501は、メモリ保護例外が発生したサブルーチンを特定する(ステップS801)。メモリ管理ユニット102は、現在実行中のサブルーチンを認識している。そのため、メモリ管理ユニット102は、現在どのサブルーチンを実行しているかを表す実行サブルーチン情報を例外ハンドラ501に出力する。なお、例えば、実行サブルーチン情報は、サブルーチンを識別するための識別情報(ID)などで表現される。例外ハンドラ501は、入力された実行サブルーチン情報に基づいて、現在実行中のサブルーチンを特定する。
次に、例外ハンドラ501は、ステップS801において特定したサブルーチンを含むモジュールを特定する(ステップS802)。例外ハンドラ501は、モジュール管理テーブルを参照し、ステップS801において特定したサブルーチンに対応するモジュールを特定する。なお、特定したモジュールに関する情報は、例えばモジュールのメモリ空間内におけるアドレスや、モジュールを識別するためのIDなどで表現される。
次に、例外ハンドラ501は、ステップS802において特定したモジュールを初期化し(ステップS803)、例外処理を終了する。
ここで、図14において、サブルーチン#2が使用するメモリ領域222の書き込み属性情報232のみが書き込み許可に設定されている場合(他のメモリ領域の書き込み属性情報は書き込み禁止に設定されている)の例外処理について具体的に説明する。
メモリ管理ユニット102によって、サブルーチン#2を実行中に他のモジュール#2のメモリ領域223へ書き込みが指示されたとする。このとき、メモリ領域223の書き込み属性情報233は、書き込み禁止に設定されているので、メモリ管理ユニット102は、メモリ領域223への書き込みを行うことができず、メモリ保護例外を発生させる。メモリ保護例外が発生した場合、メモリ管理ユニット102は、例外処理要求を例外ハンドラ501へ出力する。例外処理要求には、メモリ保護例外を発生させたサブルーチンを特定するための情報が含まれている。そのため、メモリ管理ユニット102は、サブルーチン#2を実行中にメモリ保護例外が発生したことを例外ハンドラ501へ通知する。
例外ハンドラ501は、例外処理要求が入力されると、メモリ保護例外を発生させたサブルーチンを特定する。ここでは、メモリ保護例外を発生させたサブルーチンがサブルーチン#2であると特定される。そして、例外ハンドラ501は、モジュール管理テーブルを参照して、サブルーチン#2に対応するモジュールを特定する。図15に示すモジュール管理テーブル601では、サブルーチン#2にはモジュール#1が対応付けられているので、例外ハンドラ501は、サブルーチン#2に対応するモジュールがモジュール#1であると特定する。次に、例外ハンドラ501は、特定されたモジュール#1を初期化する。例外ハンドラ501は、モジュール単位で初期化を実行する。モジュールが初期化された後、ユーザプログラムからのシステムコールや、カーネル内からの関数呼び出しなどの処理要求が再度発生し、処理が開始される。
このように、サブルーチンの実行中に、書き込みが禁止されているメモリ領域への書き込みが指示された場合、当該サブルーチンが含まれるモジュールを初期化する例外処理を行うことにより、処理が途中で停止してしまうという不具合を解消することができる。
なお、本発明は、上述の実施の形態1〜4をそれぞれ組み合わせてもよい。例えば、図1に示す実施の形態1のメモリ保護装置は、実施の形態2における第1の割り込み応答処理部301、実施の形態3における第2の割り込み応答処理部401及び実施の形態4における例外ハンドラ501のうちの少なくとも1つを備えてもよい。
本発明にかかるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムは、1つのメモリアドレス空間内で動作するプログラムにおける不正なメモリの書き換えを防止することができ、安全性を必要とする組み込み機器などのオペレーティングシステムなどに有用である。また、本発明にかかるメモリ保護装置、メモリ保護方法及びメモリ保護プログラムは、コンピュータのみならず、各種家電機器、情報処理機器、携帯電話、又は産業機器などでも利用可能である。
本発明の実施の形態1におけるメモリ保護装置の構成を示す図である。 サブルーチン管理テーブルの一例を示す図である。 メモリ領域管理テーブルの一例を示す図である。 本発明の実施の形態1におけるメモリ保護装置の処理手順について説明するためのフローチャートである。 本発明の実施の形態1におけるメモリ領域と書き込み属性情報との一例を示す図である。 本発明の実施の形態1におけるサブルーチン管理テーブルの一例を示す図である。 本発明の実施の形態1におけるメモリ領域管理テーブルの一例を示す図である。 書き込み属性情報が書き込み許可に設定された場合におけるメモリ領域と書き込み属性情報の一例を示す図である。 本発明の実施の形態2におけるメモリ保護装置の構成を示す図である。 コンピュータアーキテクチャでの割り込みに関する一連の処理の例を説明するための図である。 本発明の実施の形態2におけるメモリ保護装置に割り込みが発生したときの処理手順を説明するためのフローチャートである。 本発明の実施の形態3におけるメモリ保護装置の構成を示す図である。 本発明の実施の形態3におけるメモリ保護装置に割り込みが発生したときの処理手順を説明するためのフローチャートである。 本発明の実施の形態4におけるメモリ保護装置の構成を示す図である。 モジュール管理テーブルの一例を示す図である。 本発明の実施の形態4におけるメモリ保護装置の処理手順について説明するためのフローチャートである。 本発明の実施の形態4におけるメモリ保護装置による例外処理について説明するためのフローチャートである。
符号の説明
100 CPU
101 メモリ
111,112,113 サブルーチン
121,122,123 メモリ領域
131,132,133 書き込み属性情報
102 メモリ管理ユニット
103 サブルーチン選択部
104 メモリ領域特定部
105 サブルーチン呼出部
106 サブルーチン用メモリ領域
301 第1の割り込み応答処理部
401 第2の割り込み応答処理部
501 例外ハンドラ
601 モジュール管理テーブル
801 サブルーチン管理テーブル
901 メモリ領域管理テーブル
1001 メモリ領域
1002 書き込み属性情報
1101 サブルーチン管理テーブル
1201 メモリ領域管理テーブル

Claims (11)

  1. 少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能なメモリと、
    処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、
    前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、
    前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段とを備えることを特徴とするメモリ保護装置。
  2. 前記メモリは、前記処理要求と、当該処理要求に対応するサブルーチンとを対応付けるサブルーチン管理テーブルを記憶しており、
    前記サブルーチン選択手段は、処理要求を受け取り、受け取った処理要求に対応するサブルーチンを、前記サブルーチン管理テーブルを参照することにより選択することを特徴とする請求項1記載のメモリ保護装置。
  3. 前記メモリは、前記サブルーチンと、当該サブルーチンが使用するメモリ領域とを対応付けるメモリ領域管理テーブルを記憶しており、
    前記メモリ領域特定手段は、前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を、前記メモリ領域管理テーブルを参照することにより特定することを特徴とする請求項1又は2記載のメモリ保護装置。
  4. 前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定した後、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、呼び出した割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えることを特徴とする請求項1記載のメモリ保護装置。
  5. 前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理を呼び出して実行し、前記割り込み応答処理の実行中の任意のタイミングで、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、前記割り込み応答処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定する割り込み応答処理手段をさらに備えることを特徴とする請求項1記載のメモリ保護装置。
  6. 前記割り込み応答処理は、前半部分の処理と後半部分の処理とに予め分割されており、
    前記割り込み応答処理手段は、前記サブルーチン呼出手段によるサブルーチンの実行中に割り込み処理要求が発生したとき、前記割り込み処理要求に応答する割り込み応答処理の前半部分の処理を呼び出して実行し、前記前半部分の処理の実行が終了した後、前記実行中のサブルーチンが使用している前記メモリ領域の書き込み属性を書き込み許可から書き込み禁止に設定し、書き込み属性が書き込み禁止に設定された後、前記割り込み応答処理の後半部分の処理を呼び出して実行し、前記後半部分の処理の実行が終了した後、前記書き込み禁止に設定したメモリ領域の書き込み属性を書き込み許可に再設定することを特徴とする請求項5記載のメモリ保護装置。
  7. 前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたとき、例外処理を実行するためのメモリ保護例外を発生させるメモリ保護例外発生手段をさらに備えることを特徴とする請求項1記載のメモリ保護装置。
  8. 前記メモリは、夫々が少なくとも1つのサブルーチンを含む複数のモジュールと、当該サブルーチンが使用する少なくとも1つのメモリ領域とを備え、
    前記メモリ保護例外発生手段は、前記書き込み属性が書き込み禁止に設定されているメモリ領域への書き込み命令が発行されたサブルーチンを特定し、前記特定したサブルーチンが含まれるモジュールを特定し、前記特定したモジュールを初期化する例外処理を実行する例外処理手段をさらに含むことを特徴とする請求項7記載のメモリ保護装置。
  9. 前記メモリは、前記サブルーチンと、当該サブルーチンが含まれるモジュールとを対応付けるモジュール管理テーブルを記憶しており、
    前記例外処理手段は、特定したサブルーチンが含まれるモジュールを、前記モジュール管理テーブルを参照することにより特定することを特徴とする請求項8記載のメモリ保護装置。
  10. メモリは、少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護方法であって、
    処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択ステップと、
    前記サブルーチン選択ステップにおいて選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定ステップと、
    前記メモリ領域特定ステップにおいて特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択ステップにおいて選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出ステップとを含むことを特徴とするメモリ保護方法。
  11. 少なくとも1つのサブルーチンが使用する少なくとも1つのメモリ領域を備え、書き込み許可と書き込み禁止とを表す書き込み属性が前記メモリ領域ごとに設定可能としたメモリへの書き込みを管理するメモリ保護プログラムであって、
    処理要求を受け取り、受け取った処理要求を実行するサブルーチンを選択するサブルーチン選択手段と、
    前記サブルーチン選択手段によって選択されたサブルーチンが使用するメモリ領域を特定するメモリ領域特定手段と、
    前記メモリ領域特定手段によって特定されたメモリ領域の書き込み属性を書き込み許可に設定した後、前記サブルーチン選択手段によって選択されたサブルーチンを呼び出して実行し、呼び出したサブルーチンの実行が終了した後、前記書き込み許可に設定したメモリ領域の書き込み属性を書き込み禁止に設定するサブルーチン呼出手段としてコンピュータを機能させることを特徴とするメモリ保護プログラム。
JP2004372030A 2003-12-24 2004-12-22 メモリ保護装置、メモリ保護方法及びメモリ保護プログラム Pending JP2005209178A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004372030A JP2005209178A (ja) 2003-12-24 2004-12-22 メモリ保護装置、メモリ保護方法及びメモリ保護プログラム

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2003426800 2003-12-24
JP2004372030A JP2005209178A (ja) 2003-12-24 2004-12-22 メモリ保護装置、メモリ保護方法及びメモリ保護プログラム

Publications (1)

Publication Number Publication Date
JP2005209178A true JP2005209178A (ja) 2005-08-04

Family

ID=34913986

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004372030A Pending JP2005209178A (ja) 2003-12-24 2004-12-22 メモリ保護装置、メモリ保護方法及びメモリ保護プログラム

Country Status (1)

Country Link
JP (1) JP2005209178A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006252477A (ja) * 2005-03-14 2006-09-21 Ntt Docomo Inc アクセス制御装置及びアクセス制御方法
EP2172844A1 (en) 2008-10-01 2010-04-07 Canon Kabushiki Kaisha Memory protection method, information processing apparatus, program, and computer-readable storage medium
US9703622B2 (en) 2013-06-18 2017-07-11 Nxp Usa, Inc. Detection of data corruption in a data processing device
US10445168B2 (en) 2013-06-18 2019-10-15 Nxp Usa, Inc. Device and method for executing a program, and method for storing a program

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006252477A (ja) * 2005-03-14 2006-09-21 Ntt Docomo Inc アクセス制御装置及びアクセス制御方法
JP4628149B2 (ja) * 2005-03-14 2011-02-09 株式会社エヌ・ティ・ティ・ドコモ アクセス制御装置及びアクセス制御方法
EP2172844A1 (en) 2008-10-01 2010-04-07 Canon Kabushiki Kaisha Memory protection method, information processing apparatus, program, and computer-readable storage medium
US9703622B2 (en) 2013-06-18 2017-07-11 Nxp Usa, Inc. Detection of data corruption in a data processing device
US10445168B2 (en) 2013-06-18 2019-10-15 Nxp Usa, Inc. Device and method for executing a program, and method for storing a program

Similar Documents

Publication Publication Date Title
US10157268B2 (en) Return flow guard using control stack identified by processor register
JP5044387B2 (ja) 情報処理装置及びそのスタックポインタ更新方法
JP4939382B2 (ja) 情報処理装置及びそのプログラム実行制御方法
JP5225003B2 (ja) メモリ保護方法、情報処理装置、メモリ保護プログラム及びメモリ保護プログラムを記録した記録媒体
JP5621912B2 (ja) 情報処理装置及び情報処理装置の制御方法
TWI721996B (zh) 安全模式狀態下之資料存取追蹤
US9542113B2 (en) Apparatuses for securing program code stored in a non-volatile memory
US20150220464A1 (en) Dynamic interrupt stack protection
JP2005316599A (ja) 割込制御装置
CN117234729B (zh) 动态内存保护方法、装置、计算机设备及存储介质
JP2009009232A (ja) コンピュータとカーネル保護方法並びにコンピュータソフトウエア
CN110647764B (zh) 针对用户态非易失性内存文件系统的保护方法及系统
JP2005209178A (ja) メモリ保護装置、メモリ保護方法及びメモリ保護プログラム
JP2007334432A (ja) 情報処理装置及びそのアクセス制御方法
CN107402892B (zh) 半导体器件及其存储器访问控制方法
US20050144408A1 (en) Memory protection unit, memory protection method, and computer-readable record medium in which memory protection program is recorded
CN117272412B (zh) 中断控制寄存器保护方法、装置、计算机设备及存储介质
JP2017208058A (ja) 情報処理装置
JP2005025340A (ja) メモリデータ保護装置
US20200174920A1 (en) Method for randomizing address space layout of embedded system based on hardware and apparatus for the same
JP6438381B2 (ja) 電子制御装置
JP2001051854A (ja) 情報管理システム
CN115349120A (zh) 信息处理装置、信息处理方法和信息处理程序
CN113454627A (zh) 系统管理存储器一致性检测
JPS6225214B2 (ja)