(57)【特許請求の範囲】
【請求項１】
アドレス空間へのアクセス命令の実行に基づいてアクセス先を指定するための第１のアドレス情報を含むアクセス要求を出力するとともに、前記アドレス空間に含まれるスタックをスタックポインタの更新によって伸張させるスタック伸張命令の実行に基づいて、伸張後のスタックポインタ位置を特定するための第２のアドレス情報を含むチェック要求を出力する命令実行部と、
前記アドレス空間の中から前記命令実行部によるアクセスが可能な複数の部分空間を規定するためのメモリ保護情報を記憶するメモリ保護情報記憶部と、
前記第１のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することにより、前記アクセス先が、前記複数の部分空間の中に含まれるか否かを検出する保護違反検出部と、
前記第２のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することにより、前記スタックポインタ位置が、前記複数の部分空間のうちで前記スタックとして使用可能なスタック領域として予め確保されている部分空間に含まれるか否かを確認するチェック部と、
を備える情報処理装置。
【請求項２】
前記メモリ保護情報は、前記複数の部分空間の各々のアドレス範囲を指定する複数のアドレス範囲指定情報と、前記複数の部分空間の各々が前記スタック領域であるか否かを示すスタック識別情報とを含む請求項１に記載の情報処理装置。
【請求項３】
前記保護違反検出部に含まれる前記メモリ保護情報と前記第１のアドレス情報とを照合するための第１の照合回路、及び前記チェック部に含まれる前記メモリ保護情報と前記第２のアドレス情報とを照合するための第２の照合回路が、前記命令実行部とは独立したハードウェアとして構成されていることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記保護違反検出部に対して、前記アクセス要求に含まれる前記第１のアドレス情報又は前記第２のアドレス情報を選択的に供給するセレクタ回路をさらに備え、
前記第２の照合回路が前記第１の照合回路と共通化されていることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
現在のスタックポインタ値を保持するスタックポインタレジスタをさらに備え、
前記チェック部によって前記更新後のスタックポインタ値が前記スタック領域に含まれると確認されたことを契機として、前記スタックの伸張を完了するために、前記スタックポインタレジスタに前記更新後のスタックポインタ値を格納する請求項１乃至４のいずれか1項に記載の情報処理装置。
【請求項６】
現在のスタックポインタ値を保持するスタックポインタレジスタと、
前記保護違反検出部の検出結果に応じて、前記アクセス要求によるアクセス可否を制御するアクセス制御部とをさらに備え、
前記命令実行部は、前記スタックポインタレジスタに保持されたスタックポインタ値を使用して前記第１のアドレス情報が生成されたか否かを示すＳＰ相対アクセス通知を、前記アクセス要求とともに前記保護違反検出部に供給し、
前記アクセス制御部は、前記保護違反検出部の検出結果に基づいて、前記ＳＰ相対アクセス通知を伴う前記アクセス要求による非スタック領域へのアクセスを禁止する請求項２乃至４のいずれか1項に記載の情報処理装置。
【請求項７】
情報処理装置におけるスタックポインタ更新方法であって、
前記情報処理装置は、命令実行部と、アドレス空間の中から前記命令実行部によるアクセスが可能な複数の部分空間を規定するためのメモリ保護情報を記憶するメモリ保護情報記憶部とを備え、
前記アドレス空間へのアクセス命令の実行に応じて、アクセス先を指定するための第１のアドレス情報を含むアクセス要求を前記命令実行部から出力させ、
前記第１のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することによって、前記アクセス先が前記複数の部分空間の中に含まれるか否かを検出し、
前記アドレス空間に含まれるスタックをスタックポインタの更新によって伸張させるスタック伸張命令の実行に応じて、伸張後のスタックポインタ位置を特定するための第２のアドレス情報を含むチェック要求を前記命令実行部から出力させ、
前記第２のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することによって、前記複数の部分空間のうちで前記スタックとして使用可能なスタック領域として予め確保されている部分空間に前記スタックポインタ位置が含まれるか否かを確認する、スタックポインタ更新方法。
【請求項８】
前記更新後のスタックポインタ値が前記スタック領域に含まれると確認されたことを契機として、前記スタックの伸張を完了するために、前記更新後のスタックポインタ値を現在のスタックポインタ値を格納するスタックポインタレジスタに格納する請求項７に記載のスタックポインタ更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ保護機能を有する情報処理装置に関する。
【背景技術】
【０００２】
不正なメモリアクセスからメモリを保護する技術、いわゆるメモリ保護技術が知られている。従来知られているメモリ保護技術は、ＣＰＵ（Central Processing Unit）等のプログラムを実行する命令実行部からメモリへのアクセスが行なわれる際に、命令実行部から出力されるメモリアクセス要求に含まれているアクセス先アドレス情報を、アクセスが許可されるメモリ領域を表すメモリ保護情報と比較照合することにより、アクセス要求の妥当性を検証するものである。これにより、アクセスが許可されていないメモリ領域への不正なメモリアクセスの検出が可能となり、不正なメモリアクセスからメモリを保護することができる。
【０００３】
特許文献１は、情報処理装置におけるメモリ保護のためのアドレス比較方式を開示している。具体的に述べると、特許文献１に開示されたアドレス比較方式は、プログラムによってアクセスされるアクセス先アドレスが、アクセスが許可された部分メモリ空間の範囲内（アクセス許可範囲内）であるか否かを、アクセス許可範囲の下限アドレス及び上限アドレスとアクセス先アドレスを比較することによって判定する。そして、アクセス先アドレスがアクセス許可範囲内にあるときのみ、当該部分メモリ空間へのアクセスが許可される。
【０００４】
しかしながら、従来のメモリ保護技術は、メモリの一部がスタックとして使用されている場合に、不正なスタック操作によるメモリのデータ破壊を防ぐためには不十分である。第１の問題は、スタックとしてアクセス可能なメモリ領域（以下、スタック領域と呼ぶ）と、スタック以外の用途のためにアクセス可能なメモリ領域とが隣接している場合に、スタック操作命令に基づくメモリアクセスがスタック領域外を指定していてもアクセスが許可され、スタック外に格納されたデータの破壊が生じるおそれがある点である。
【０００５】
また、例えば、従来のメモリ保護技術でスタックオーバーフローを検出する場合を考えると、上述したメモリアクセス要求が出力された後の判定となる。つまり、命令実行部が単一命令又は複数の命令列の実行によってスタック操作（プッシュ操作又はポップ操作）を実行した後に、命令実行部からスタック領域外へのアクセスが発生したタイミングでスタックオーバーフローが検出される。つまり、従来のメモリ保護技術は、スタック操作命令の実行前にスタックオーバーフローを検出することが困難であるという第２の問題点がある。
【０００６】
特許文献２は、スタック領域とその他の用途で使用される領域との間に、スタックオーバーフロー検出のための冗長なバッファ領域を設ける技術を開示している。特許文献２の技術によれば、スタック領域を他の用途のメモリ領域から離間させるため、上述した第１の問題点を解決可能である。しかしながら、特許文献２に開示された技術は、メモリ使用効率の観点からは好ましくない。また、特許文献２の技術は、スタック操作命令を実行した後にスタックオーバーフローを検出するものである点は上述した従来のメモリ保護技術と相違がなく、例えば、スタックオーバーフローの発生原因を特定するデバッグ作業を効率よく行えない等の問題を有する。
【０００７】
特許文献３には、関数（プロシージャ、サブプログラム等を含む）の呼び出し等の際に、スタックポインタの値を更新することによってスタックの伸張が行われたことを契機として、スタックポインタを保持するためのスタックポインタレジスタの値をオーバーフロー検出アドレスと比較する技術が開示されている。図１３は、特許文献３に記載された説明図である。スタックポインタレジスタ（ＳＰＲ）８２に格納されたスタックポインタ値と、スタックオーバーフローレジスタ８１に格納されたオーバーフロー検出アドレスとを比較器８３において比較することによって、スタック領域を超えてスタックが伸張されたことを検知する。これにより、特許文献３の技術によれば、スタックオーバーフローの発生をスタック操作命令の実行前に予測的に検出できる。
【特許文献１】特開昭６１−７５４４６号公報
【特許文献２】特開２０００−１５５６７７号公報
【特許文献３】特開２０００−２０３５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した特許文献３に開示された技術では、スタックオーバーフロー検出アドレスが、スタックオーバーフロー検出のために設けられたスタックオーバーフローレジスタ８１に保持される。したがって、ハードウェア構成が冗長であるという問題がある。
【課題を解決するための手段】
【０００９】
本発明の第１の態様にかかる情報処理装置は、命令実行部、メモリ保護情報記憶部、保護違反検出部、及びチェック部を有する。前記命令実行部は、アドレス空間へのアクセス命令の実行に基づいてアクセス先を指定するための第１のアドレス情報を含むアクセス要求を出力する。また、前記命令実行部は、前記アドレス空間に含まれるスタックをスタックポインタの更新によって伸張させるスタック伸張命令の実行に基づいて、伸張後のスタックポインタ位置を特定するための第２のアドレス情報を含むチェック要求を出力する。
【００１０】
前記メモリ保護情報記憶部は、前記アドレス空間の中から前記命令実行部によるアクセスが可能な複数の部分空間を規定するためのメモリ保護情報を記憶する。
【００１１】
前記保護違反検出部は、前記第１のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することにより、前記アクセス先が、前記複数の部分空間の中に含まれるか否かを検出する。
【００１２】
前記チェック部は、前記第２のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することにより、前記スタックポインタ位置が、前記複数の部分空間のうちで前記スタックとして使用可能なスタック領域として予め確保されている部分空間に含まれるか否かを確認する。
【００１３】
本発明の第２の態様は、命令実行部と、アドレス空間の中から前記命令実行部によるアクセスが可能な複数の部分空間を規定するためのメモリ保護情報を記憶するメモリ保護情報記憶部とを備える情報処理装置におけるスタックポインタ更新方法である。当該方法は、以下に列挙するステップ（ａ）〜（ｄ）を含む。
（ａ）前記アドレス空間へのアクセス命令の実行に応じて、アクセス先を指定するための第１のアドレス情報を含むアクセス要求を前記命令実行部から出力させるステップ、
（ｂ）前記第１のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することによって、前記アクセス先が前記複数の部分空間の中に含まれるか否かを検出するステップ、
（ｃ）前記アドレス空間に含まれるスタックをスタックポインタの更新によって伸張させるスタック伸張命令の実行に応じて、伸張後のスタックポインタ位置を特定するための第２のアドレス情報を含むチェック要求を前記命令実行部から出力させるステップ、
（ｄ）前記第２のアドレス情報と前記メモリ保護情報記憶部に記憶された前記メモリ保護情報とを照合することによって、前記複数の部分空間のうちで前記スタックとして使用可能なスタック領域として予め確保されている部分空間に前記スタックポインタ位置が含まれるか否かを確認するステップ。
【００１４】
上述した本発明の第１及び第２の態様によれば、不正なメモリアクセスを検出に使用するために前記メモリ保護情報記憶部に記憶された前記メモリ保護情報を、スタック伸張の適否を確認するためにも併用する。このため、スタック伸張の適否を確認するために必要となるスタック領域のアドレス範囲を規定するアドレス情報を保持するための記憶部を独立に設ける必要がない。
【発明の効果】
【００１５】
本発明により、スタック伸張の適否を確認するために使用されるアドレス情報を、不正なメモリアクセスを検出するメモリ保護のために使用されるアドレス情報と兼用し、共通の記憶部に格納することで、スタック伸張の適否の確認に要する冗長なハードウェアを削減することができる。
【発明を実施するための最良の形態】
【００１６】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１７】
なお、以下に述べる発明の実施の形態では、ＣＰＵ（Central Processing Unit）の用語は、命令フェッチ機能、命令デコード機能、命令実行機能を有する処理ユニットを指すものとして使用される。
【００１８】
＜発明の実施の形態１＞
本実施の形態にかかる情報処理装置１は、メモリ保護機能を有する。さらに、情報処理装置１は、メモリ保護機能のためのハードウェアを利用して、例えば関数呼び出し等に起因してスタックの伸張、つまりスタックポインタの更新を行なう際に、呼び出し先関数の実行によるスタックオーバーフローの発生を予測的に検出する機能を有する。
【００１９】
図１は、情報処理装置１の主要な部分の構成を示すブロック図である。図１において、ＣＰＵ１０は、メモリ１３から命令を読み出し、読み出した命令をデコードし、デコードされた命令に応じた処理、例えば、算術演算及び論理演算等の演算処理、並びにメモリ１３に対するリードアクセス及びライトアクセスを実行する。さらに、本実施の形態にかかるＣＰＵ１０は、関数呼び出し又はサブプログラム呼び出し等のプログラム呼び出しに応じて実行プログラムの切り替えを行う際に、呼び出し先プログラムの実行の妥当性をメモリ保護の観点から検証する。このため、ＣＰＵ１０は、呼び出し先プログラムの実行に先立って、呼び出し先プログラムがアクセスを行なう予定のメモリ領域（以下、被チェック領域と呼ぶ）のアドレスを後述する保護設定チェック部１４に出力する。
【００２０】
本実施の形態における被チェック領域は、呼び出し元関数及び呼び出し先関数を含むタスクに対して予め割り当てられているスタック領域（スタックとして利用するために割り当てられたメモリ領域）から、スタックの伸張によって呼び出し先関数に新たに割り当てられるメモリ領域を含む。ここで、タスクとは、マルチタスク環境で並列実行されるプログラム単位を意味する。このようなマルチタスク環境は、ＣＰＵ１０と、ＣＰＵ１０で実行されるタスクのスケジューリングを担うオペレーティングシステムプログラム（ＯＳ）によって実現される。
【００２１】
メモリ保護部１１は、ＣＰＵ１０から出力されるメモリ１３に対するアクセス要求を受信する。ＣＰＵ１０から供給されるアクセス要求には、リード／ライト種別、アクセス先アドレス、さらにライトアクセスの場合には書き込みデータが含まれる。アクセス先アドレスは、様々な形式で指定可能である。例えば、１ワード単位でアクセス先を指定するために、アクセス先アドレスが１つのアドレスによって指定される場合がある。また、複数ワード単位でアクセス先を指定するために、ベースアドレスと転送を要求するデータサイズの組合せ、又は転送を要求するデータが配置された場所の下限アドレスと上限アドレスの組合せ等によって指定される場合がある。
【００２２】
メモリ保護情報記憶部１１０に格納されるメモリ保護情報は、ＣＰＵ１０で実行されているタスクに応じて設定され、ＣＰＵ１０で実行されるタスクの切り替えに応じて、切り替え先のタスクに応じた設定内容となるよう更新される。メモリ保護情報記憶部１１０の書き換えは、例えば、ＣＰＵ１０で実行されるタスクの切り替えの際に起床されるシステムプログラムによって、切り替え先のタスクに応じた設定内容に更新される。
【００２３】
メモリ保護情報におけるアクセス許可されるメモリ領域の設定も、アクセス先アドレスと同様に、様々な形式により行うことができる。例えば、メモリ保護情報におけるメモリ領域の設定は、メモリ領域の下限アドレス及び上限アドレスの組合せにより指定されてもよいし、メモリ領域の先頭アドレス（下限アドレス又は上限アドレス）と領域サイズの組合せにより指定されてもよい。また、メモリ領域の先頭アドレスとマスクされる下位ビット数を指定することによって、先頭アドレスから２のべき乗分のメモリ領域を指定する方法でもよい。つまり、メモリ保護の対象となるメモリ領域の指定方法は特に限定されない。
【００２４】
さらに、メモリ保護情報記憶部１１０に格納されるメモリ保護情報は、複数のアクセス許可領域の各々がスタック領域であるか否か、言い換えると、スタックとして参照可能であるか否かを示すスタック参照許可情報を保持する。
【００２５】
メモリ保護部１１に含まれるメモリ保護違反検出部１１１は、ＣＰＵ１０がアクセスを要求するアクセス先アドレスとメモリ保護情報記憶部１１０に設定されたメモリ保護情報とを比較し、メモリアクセス要求に含まれるアクセス先アドレスがアクセスの許可されたメモリ領域に含まれるか否かを検出する。
【００２６】
アクセス制御部１１２は、メモリ保護違反検出部１１１の検出結果に応じて、メモリアクセス要求に基づくメモリ１３へのアクセス可否を制御する。具体的に述べると、アクセス先アドレスがアクセス許可されたメモリ領域に含まれるとメモリ保護違反検出部１１１により検出された場合に、アクセス制御部１１２はメモリアクセスを許可する。一方、アクセス先アドレスがアクセスの禁止されたメモリ領域に含まれるとメモリ保護違反検出部１１１により検出された場合、アクセス制御部１１２はメモリアクセスを禁止する。なお、メモリ保護違反検出部１１１又はアクセス制御部１１２は、アクセスの禁止されたメモリ領域へのアクセスを検出した場合に、不正なアクセスを検出したことを示す信号をＣＰＵ１０に出力するとよい。
【００２７】
セレクタ１１３は、メモリ保護違反検出部１１１に入力され、メモリ保護情報と比較されるアドレス情報を、ＣＰＵ１０から入力されるメモリアクセス要求に含まれるアクセス先アドレスと、後述するチェック要求に含まれる被チェック領域アドレスとの間で切り替える。本実施の形態におけるセレクタ１１３の動作は、後述する保護設定チェック部１４により制御される。
【００２８】
メモリバス１２は、メモリバス１２を介してメモリ保護部１１と接続されている。メモリ１３は、例えば、ＣＰＵ１０に読み出されて実行されるシステムプログラムやアプリケーションプログラムの格納領域、及びシステムプログラムやアプリケーションプログラムによって使用されるデータの格納領域として使用される。つまり、メモリ１３は、ＲＡＭ、ＲＯＭ、フラッシュメモリ等、又はこれらの組合せである。また、メモリバス１２は、アドレスバス及びデータバスの総称である。
【００２９】
保護設定チェック部１４は、被チェック領域アドレスを含むチェック要求をＣＰＵ１０から受信し、被チェック領域アドレスがスタック領域に含まれるか否かをチェックし、チェック結果をＣＰＵ１０に供給する。より具体的に述べると、保護設定チェック部１４は、アクセス要求の違反検出のために、実行中のタスクに対応してメモリ保護情報記憶部１１０に既に設定済みのメモリ保護情報をそのまま利用し、メモリ保護情報と被チェック領域アドレスとの比較を行う。そして、保護設定チェック部１４は、上述したスタック参照許可情報によってスタックとしての参照が許可されたメモリ領域、つまりスタック領域に被チェック領域アドレスが含まれるか否かをチェックする。
【００３０】
さらに、図１に示す本実施の形態の構成では、被チェック領域アドレスとメモリ保護情報とを比較照合するためのハードウェアを、メモリ保護違反検出部１１１に含まれるアクセス先アドレスとメモリ保護情報とを比較照合するためのハードウェアと兼用させている。
【００３１】
ところで、本実施の形態の保護設定チェック部１４は、スタック領域であるか否かに限らず、被チェック領域アドレスが呼び出し元のタスクに関するメモリ保護設定に適合しているかどうかを幅広くチェック可能である。例えば、あるプログラムＡによるプログラムＢの呼び出しに起因したプログラムＡからプログラムＢへの実行プログラムの切り替えに際して、呼び出し元プログラムＡが呼び出し先プログラムＢを介して間接的にアクセスを試みるメモリ領域を被チェック領域とするチェック要求を出力するとよい。このチェック要求に応じて、保護設定チェック部１４が、プログラムＡによるアクセス要求の違反検出のためにメモリ保護情報記憶部１１０に設定されたメモリ保護情報に基づいて、チェック要求が、プログラムＡに対するメモリ保護設定に適合するものであるかをチェックすることができる。なお、ここで述べた呼び出し元プログラムＡのアクセス権限をチェックし、アクセス権限の正当性が確認された場合にのみ呼び出し先プログラムＢの実行を開始する技術については、本願と同一の発明者等及び出願人による先の出願（特願２００７−３０６８２１号、出願日２００７年１１月２８日）に詳しく記載されている。
【００３２】
なお、上述した図１の構成が一例に過ぎないことは勿論である。例えば、上述した説明では、メモリ保護部１１がメモリバス１２にアクセスするものとして説明したが、メモリバス１２及びメモリ１３へのアクセスは、メモリコントローラ（不図示）等の他の装置を介して行なうよう構成してもよい。また、チェック要求の物理的な転送経路とアクセス要求の物理的な転送経路の少なくとも一部は共通化されてもよい。また、図１では、セレクタ１１３がメモリ保護部１１に含まれるように記載しているが、この記載が、情報処理装置１の現実のハードウェア構成を限定するものではない。つまり、図１のセレクタ１１３は、メモリアクセス要求に含まれるアクセス先アドレス又はチェック要求に含まれる被チェック領域アドレスをメモリ保護違反検出部１１１に対して選択的に供給できるように、メモリ保護違反検出部１１１の前段に配置されていればよい。
【００３３】
続いて以下では、図１に示した情報処理装置１に含まれる各要素の構成例及び動作について詳しく説明する。図２は、ＣＰＵ１０における関数呼び出し時の動作を説明するための概念図である。ＣＰＵ１０でタスクＡに含まれる関数１が実行されている際に、別の関数２が呼び出されると、関数呼び出し処理を含む実行プログラムの切り替え処理を担うＯＳに処理が移る。（Ｓ１０１）。
【００３４】
ＯＳによる関数呼び出し処理では、関数１実行時のレジスタ格納値の退避などに必要な関数２用のスタックを確保するために、スタックポインタの更新によりスタックを伸張させるスタック伸張命令が実行される。そして、スタック伸張命令の実行に応じたスタックポインタレジスタ１０４の更新前に、ＣＰＵ１０から保護設定チェック部１４に対してチェック要求が発行される（Ｓ１０２）。このときのチェック要求には、伸張後のスタックポインタ値を特定するためのアドレス情報が被チェック領域アドレスとして含まれる。具体的には、例えば、スタックポインタレジスタ１０４に格納された現在のスタックポインタ値と関数２のために伸張予定のスタックサイズを被チェック領域アドレスとすればよい。また、アドレス減少方向にスタックを伸張する場合であれば、現在のスタックポインタ値から関数２のために伸張予定のスタックサイズを減算することで得られる更新予定のスタックポインタ値を被チェック領域アドレスとしてもよい。
【００３５】
ＯＳは、被チェック領域アドレスがスタック領域に含まれることが、保護設定チェック部１４からＣＰＵ１０に供給されるチェック結果によって確認できた場合に、スタックポインタレジスタ１０４にスタック伸張後のスタックポインタ値を上書きし、呼び出し先の関数２を起動する（Ｓ１０３）。
【００３６】
図３（ａ）は、メモリ１３のメモリマップの一例を示している。図３（ａ）は、タスクＡのアクセス許可領域の例を示すメモリマップである。図３（ａ）の例では、１０５００〜１０ＦＦＦ番地、及び１１０００〜１１ＦＦＦ番地の２つの部分アドレス空間について、タスクＡによるアクセスが許可されている。このうち、１１０００〜１１ＦＦＦ番地は、スタック領域として確保されている。
【００３７】
図３（ｂ）は、メモリ保護情報記憶部１１０の具体的な構成例を示す図である。図３（ｂ）は図３（ａ）に示したタスクＡのアクセス許可領域に対応する設定内容を示している。図３（ｂ）の例では、メモリ保護情報記憶部１１０がｎ個の保護設定レジスタ１１０１〜１１０ｎにより構成されており、各保護設定レジスタによって、１つのアクセス許可領域が指定される。また、保護設定レジスタ１１０１〜１１０ｎの各々におけるアクセス許可領域の指定は、下限アドレス及び上限アドレスによって行なわれる。例えば、図３（ｂ）に示す保護設定レジスタ１１０１は、図３（ａ）の１１０００〜１１ＦＦＦ番地のアクセス許可領域に対応する設定を保持しているレジスタである。このため、下限アドレス指定部１１０１Ｌに１１０００番地が指定され、上限アドレス指定部１１０１Ｕに１１ＦＦＦ番地が指定されている。同様に、図３（ｂ）の保護設定レジスタ１１０２は、図３（ａ）の１０５００〜１０ＦＦＦ番地のアクセス許可領域に対応する設定を保持している。
【００３８】
なお、アクセス許可領域の設定に使用されない未使用レジスタは、例えば、図３（ｂ）の保護設定レジスタ１１０３〜１１０ｎに示すように、上限アドレス及び下限アドレスとして無効値（例えば、ＦＦＦＦＦ）を書き込むことによって無効な設定であることを明示してもよい。また、保護設定レジスタ１１０１〜１１０ｎの各々の有効・無効を示すフラグを保持する記憶領域を別途設けてもよい。
【００３９】
また、図３（ｂ）において、保護設定レジスタ１１０１〜１１０ｎは、スタック参照指定部１１０１Ｓ〜１１０ｎＳを有する。スタック参照指定部１１０１Ｓ〜１１０ｎＳは、保護設定レジスタの各々により指定される部分アドレス空間つまりメモリ領域がスタックとして参照可能なスタック領域であるかを示す。したがって、図３（ｂ）の例では、スタック領域に対応するアクセス許可領域を指定している保護設定レジスタ１１０１のスタック参照指定部１１０１Ｓには、スタック領域であることを示す値"１"が設定されている。一方、スタック領域でないアクセス許可領域を指定している保護設定レジスタ１１０２のスタック参照指定部１１０２Ｓには、非スタック領域であることを示す値"０"が設定されている。
【００４０】
次に、図４を参照して、メモリ保護違反検出部１１１の構成例を説明する。図４に示したメモリ保護情報記憶部１１０は、図３（ｂ）に示した具体例と同様に、複数個の保護設定レジスタの集合として構成されている。ただし、図４に示す各保護設定レジスタは、アクセス許可領域の上限アドレス及び下限アドレスに加えて、当該領域の許可種別、具体的には、ライトアクセス、リードアクセス及び命令フェッチアクセスの許可種別を規定する。ライト許可指定部１１０１Ｗは、値"１"のときライトアクセス許可を示し、値"０"のときライトアクセス不許可を示す。同様に、リード許可指定部１１０１Ｒは、値"１"のときリードアクセス許可を示し、値"０"のときリードアクセス不許可を示す。また、実行許可指定部１１０１Ｅは、値"１"のとき命令フェッチアクセス許可を示し、値"０"のとき命令フェッチアクセス不許可を示す。
【００４１】
図４に示すセレクタ１１３Ｕ及び１１３Ｌは、図１に示したセレクタ１１３に含まれるセレクタである。セレクタ１１３Ｕは、メモリ保護違反検出部１１１に対して、ＣＰＵ１０によるアクセス先又は被チェック領域の上限アドレスを選択的に供給する。一方、セレクタ１１３Ｌは、メモリ保護違反検出部１１１に対して、ＣＰＵ１０によるアクセス先又は被チェック領域の下限アドレスを選択的に供給する。
【００４２】
また、図４に示すメモリ保護違反検出部１１１は、保護設定レジスタと同数の照合回路の集合として構成されている。図５に示す照合回路の各々は、比較回路１１１０Ｕ及び１１１０Ｌ並びにＡＮＤ回路１１１１〜１１１５を含む。ＡＮＤ回路１１１１〜１１１５はそれぞれ２つの入力値の論理積を出力する回路である。
【００４３】
比較回路１１１０Ｕは、保護設定レジスタの上限アドレス指定部１１０１Ｕに保持された値と、セレクタ１１３Ｕから供給されるアドレスとを比較する。比較回路１１１０Ｕは、セレクタ１１３Ｕから供給されるアドレスが上限アドレス指定部１１０１Ｕに保持された上限アドレス以下である場合に真値として値"１"を出力し、上限アドレス指定部１１０１Ｕに保持された上限アドレスを超える場合に偽値として値"０"を出力する。
【００４４】
比較回路１１１０Ｌは、保護設定レジスタの下限アドレス指定部１１０１Ｌに保持された値と、セレクタ１１３Ｌから供給されるアドレスとを比較する。比較回路１１１０Ｌは、セレクタ１１３Ｌから供給されるアドレスが下限アドレス指定部１１０１Ｌに保持された下限アドレス以上である場合に真値として値"１"を出力し、下限アドレス指定部１１０１Ｌに保持された下限アドレス未満である場合に偽値として値"０"を出力する。
【００４５】
ＡＮＤ回路１１１１の出力は、比較回路１１１０Ｕ及びＬの出力が共に真値である場合、つまり、セレクタ１１３Ｕ及びＬから供給される２つのアドレス情報によって指定されるメモリ領域がアクセス許可領域内である場合に、真値"１"となる。
【００４６】
また、ＡＮＤ回路１１１２の出力は、セレクタ１１３Ｕ及びＬから供給される２つのアドレス情報によって指定されるメモリ領域がアクセス許可領域内であり、かつ、ライトアクセスが許可される場合に真値"１"となる。
【００４７】
同様に、ＡＮＤ回路１１１３の出力は、セレクタ１１３Ｕ及びＬから供給される２つのアドレス情報によって指定されるメモリ領域がアクセス許可領域内であり、かつ、リードアクセスが許可される場合に真値"１"となる。また、ＡＮＤ回路１１１４の出力は、セレクタ１１３Ｕ及びＬから供給される２つのアドレス情報によって指定されるメモリ領域がアクセス許可領域内であり、かつ、命令フェッチアクセスが許可される場合に真値"１"となる。
【００４８】
さらに、ＡＮＤ回路１１１５の出力は、セレクタ１１３Ｕ及びＬから供給される２つのアドレス情報によって指定されるメモリ領域がアクセス許可領域内であり、かつ、スタック参照が許可される場合に真値"１"となる。
【００４９】
メモリ保護違反検出部１１１によるライトアクセス可否、リードアクセス可否、命令フェッチアクセス可否、及びスタック参照可否の検出結果は、アクセス制御部１１２及び保護設定チェック部１４に供給される。なお、本実施の形態では、スタック参照可否の検出結果は、アクセス制御部１１２におけるアクセス可否の制御に使用されない。このため、スタック参照可否の検出結果を、アクセス制御部１１２に供給しなくてもよい。
【００５０】
なお、図５の例では、メモリ保護違反検出部１１１が、ライトアクセス可否、リードアクセス可否、命令フェッチアクセス可否、及びスタック参照可否について個別に検出結果の出力を行う構成を示した。しかしながら、このような構成が一例に過ぎないことはもちろんである。例えば、メモリ保護違反検出部１１１は、さらに詳細なアクセス種別に関する違反検出を行ってもよい。また、メモリ保護違反検出部１１１は、アクセス許可領域であるか否かと、スタック領域であるか否かのみを検出してもよい。
【００５１】
続いて以下では、図５〜７を参照して、保護設定チェック部１４の構成例及び動作を説明するとともに、ＣＰＵ１０と保護設定チェック部１４の間におけるチェック要求およびチェック結果に関するデータ受け渡しの具体例について説明する。
【００５２】
図５は、図１に示したメモリ保護部１１及び保護設定チェック部１４のより具体的な構成例を示すとともに、ＣＰＵ１０と保護設定チェック部１４との間のデータ受け渡しに使用されるレジスタ群１５を示している。
【００５３】
メモリ保護部１１に関して、図５では、セレクタ１１３に含まれるセレクタ１１３Ｕ及び１１３Ｌを示している。セレクタ１１３Ｕ及び１１３Ｌの入出力及び動作は、上述した通りである。
【００５４】
図５に示す保護設定チェック部１４は、チェック機能制御部１４１、加算回路１４２及びチェック結果整形部１４３を有する。チェック機能制御部１４１は、ＣＰＵ１０から供給されるチェック要求に応じた被チェック領域アドレスのチェック処理を制御する。
【００５５】
図６は、チェック機能制御部１４１の動作状態の遷移図である。チェック機能制御部１４１は、通常状態２０１、つまりＣＰＵ１０からチェック要求を受けていない状態では、メモリアクセス要求に含まれるアクセス先アドレスがメモリ保護違反検出部１１１に供給されるように、セレクタ１３１Ｕ及び１３１Ｌを制御する。
【００５６】
チェック機能制御部１４１は、ＣＰＵ１０からチェック要求を受信した場合に、保護設定チェック状態２０２に遷移する（図６のＳ２０１）。保護設定チェック状態２０２では、チェック要求の対象となる被チェック領域アドレスが、メモリ保護違反検出部１１１に供給されるように、セレクタ１３１Ｕ及び１３１Ｌを制御する。これに応じて、メモリ保護違反検出部１１１が、被チェック領域アドレスを対象として、アクセス先アドレスに対する処理と同様の処理を行って検出結果を出力する。
【００５７】
図５の例では、チェック要求に含まれる被チェック領域に関するアドレス情報は、被チェック領域の先頭アドレス及び被チェック領域のサイズとしている。このため、図５の例では、加算回路１４２によって被チェック領域の先頭アドレス及び被チェック領域のサイズを加算することによって被チェック領域の上限アドレスを生成し、生成された上限アドレスをセレクタ１３１Ｕに供給している。
【００５８】
チェック機能制御部１４１は、メモリ保護違反検出部１１１の検出終了後にチェック結果格納状態２０３に遷移する。例えば、メモリ保護違反検出部１１１の検出終了時に、メモリ保護違反検出部１１１からチェック機能制御部１４１に終了通知を出力させ、当該終了通知の受信に応じてチェック結果格納状態に遷移すればよい（図６のＳ２０２）。また、チェック機能制御部１４１は、明示的な終了通知の受信を行なわずに、予め定められた期間の経過に応じてチェック結果格納状態２０３に遷移してもよい。チェック結果格納状態２０３では、チェック結果整形部１４３が、メモリ保護違反検出部１１１による検出結果を入力し、検出結果の集約、選択等を行って予め定められた適当なデータ形式に整形し、整形して得たチェック結果をＣＰＵ１０が参照可能な記憶領域に出力する。チェック結果の出力が完了したのちに、チェック機能制御部１４１は、通常状態２０１に戻る（図６のＳ２０３）。
【００５９】
図５の例では、ＣＰＵ１０と保護設定チェック部１４の間におけるチェック要求及びチェック結果に関するデータの受け渡しに、レジスタ群１５に含まれる４つのレジスタを使用する。先頭アドレスレジスタ１５０は、被チェック領域の先頭アドレスが格納されるレジスタであり、ＣＰＵ１０によって書き込まれ、保護設定チェック部１４により読み出される。サイズレジスタ１５１は、被チェック領域のサイズが格納されるレジスタであり、ＣＰＵ１０によって書き込まれ、保護設定チェック部１４により読み出される。開始制御レジスタ１５２は、保護設定チェック部１４にチェックを開始させるために、ＣＰＵ１０によって書き込まれるレジスタである。図５の保護設定チェック部１４は、チェック開始を示すデータが開始制御レジスタ１５２に書き込まれたことに応じて上述した保護設定チェック状態２０２に遷移し、被チェック領域アドレスのチェック処理を開始する。最後に、結果レジスタ１５３は、チェック結果整形部１４３によって整形されたチェック結果が書き込まれるレジスタである。図５のＣＰＵ１０は、結果レジスタ１５３を介して保護設定チェック部１４からのチェック結果を取得する。
【００６０】
なお、図５に示した構成は、本実施の形態にかかる情報処理装置１の具体的な構成例の１つに過ぎない。例えば、図５では、ＣＰＵ１０による開始制御レジスタ１５２の書き込みに応じて、保護設定チェック部１４がチェック処理を開始する構成例を示した。しかしながら、この構成に代えて、ＣＰＵ１０から供給される専用命令又は専用コマンドを保護設定チェック部１４が受信し、この命令又はコマンドに従ってチェック処理を実行するよう構成してもよい。
【００６１】
ＣＰＵ１０から供給される専用命令に従って保護設定チェック部１４にチェック処理を実行させる構成例を図７に示す。図７において、ＣＰＵ１０に含まれる命令発行部１０１は、デコードされた命令がチェック処理の実行を指示する専用命令である場合に、当該専用命令をチェック機能制御部１４１に供給する。ロード／ストア命令実行部１０２は、命令発行部１０１から供給されるロード命令及びストア命令に基づいて、メモリ１３へのメモリアクセスを実行する。
【００６２】
汎用レジスタ群１０３は、ロード／ストア命令実行部１０２のほか、ＡＬＵ等の図示していない他の命令実行部の入力データ及び出力データの格納場所としての使用、レジスタ間接アドレッシングモードを使用する場合のベースアドレスやインデックス値の格納場所としての使用など、様々な用途に使用可能なレジスタ群である。図７の例では、汎用レジスタ群１０３は、被チェック領域の先頭アドレス及びサイズ、並びに保護設定チェック部１４から出力されるチェック結果の格納に使用される。
【００６３】
図７のチェック機能制御部１４１は、チェック要求に関する専用命令を受け取ると、当該命令のオペランドに指定された汎用レジスタを参照し、汎用レジスタ群１０３から被チェック領域の先頭アドレス及びサイズを読み出す。また、チェック機能制御部１４１は、専用命令のオペランドに指定された結果レジスタを選択し、整形後のチェック結果を指定された結果レジスタに格納する。
【００６４】
図８（ａ）及び（ｂ）は、図３（ａ）に示したメモリマップにおいて、「タスクＡ．関数１」のスタックデータによってスタック領域の一部が占有されている際に、「タスクＡ．関数２」の呼び出しによってスタックの伸張が行なわれる場合を示している。情報処理装置１によれば、図８（ａ）の場合、つまりスタック領域内でのスタック伸張が可能でスタックオーバーフローが発生しない場合に、保護設定チェック部１４から保護設定チェックが"正常"であるとのチェック結果が出力される。更新予定のスタックポインタ（ＳＰ）が、スタック領域に含まれるため、メモリ保護違反検出部１１１の検出結果は、スタック参照許可領域であることを示すためである。
【００６５】
一方、図８（ｂ）の場合、つまりスタック領域内でのスタック伸張が不可能である場合には、保護設定チェック部１４から保護設定チェックが"異常"であるとのチェック結果が出力される。更新予定のスタックポインタ（ＳＰ）が、スタック領域外となるため、メモリ保護違反検出部１１１の検出結果は、スタック参照許可領域でないことを示すためである。これにより、ＣＰＵ１０は、スタックへのプッシュ操作を行うスタック操作命令の実行前に、スタックの伸張を行なう時点で、スタックオーバーフローの事前検出が可能である。スタックオーバーフローの事前検出を行ったＣＰＵ１０は、ＯＳによって新たなスタック領域の確保を行なったり、スタック使用量の超過を理由にタスクの実行を停止させたりすることができる。
【００６６】
このようなスタックオーバーフローの事前検出を行うことによって、呼び出し先の関数の実行を開始した後のスタック操作の途中でオーバーフローが発生した場合に、煩わしいロールバック処理を行うことによるオーバヘッドの発生を事前に回避することができる。
【００６７】
また、本実施の形態では、スタックポインタレジスタ（ＳＰＲ）１０４の更新前に、ＳＰＲ１０４に保持された現在のスタックポインタ（ＳＰ）値及び伸張予定のスタックサイズ、又はこれらを加算した更新予定のＳＰ値を保護設定チェック部１４し、スタックオーバーフローの事前検出を行う。つまり、ＳＰＲ１０４の更新を契機として、更新されたＳＰ値を用いてスタックオーバーフローの事前検出を行う特許文献１とは対照的である。特許文献１の技術では、ＳＰＲ更新に併せて行なわれるスタック操作（プッシュ操作）によって、スタック領域外への書き込みによるデータ破壊が生じるおそれがある。例えば、ＳＰＲ更新の際には、ＳＰＲに保持されていた過去のスタックポインタ値をスタックに退避する必要があるためである。これに対して、本実施の形態にかかる情報処理装置１は、ＳＰＲ１０４の更新前にスタックオーバーフローを事前検出できるため、特許文献１の技術が有するこの問題を解消することができる。
【００６８】
また、情報処理装置１によれば、図３（ａ）に示すように、スタック領域とその他のアクセス許可領域が隣接して配置されている場合には、実際のメモリアクセスが発生した際にアクセス可否を検出する従来の方法ではスタックオーバーフローの検出が実質的に困難であった問題を解消することができる。
【００６９】
また、保護設定チェック部１４は、タスクＡを実行するＣＰＵ１０から出力されるアクセス要求の違反検出のためにメモリ保護情報記憶部１１０に既に設定済みのメモリ保護情報をそのまま利用して、被チェック領域に関するチェックを行うことができる。つまり、被チェック領域に関するチェックに際して、新たなメモリ保護情報の読み出し処理及び書き込み処理を特に必要としないため、チェック処理を一層効率良く行なうことができる。
【００７０】
また、本実施の形態にかかる保護設定チェック部１４は、被チェック領域アドレスとメモリ保護情報とを照合するためのハードウェアを独自に有していない。つまり、情報処理装置１では、保護設定チェック部１４が有するべき照合用のハードウェアと、アクセス先アドレスとメモリ保護情報とを照合するためにメモリ保護違反検出部１１１が有する照合回路とを兼用させることで、構成を簡素化させている。
【００７１】
また、図４に示すように、メモリ保護違反検出部１１１が、並列化された複数の照合回路を有することによって、タスクＡに対して複数のアクセス許可領域が設定されている場合であっても、複数のアクセス許可領域の各々と被チェック領域アドレスとの照合を並行して実行することができる。つまり、アクセス許可領域の設定数の増大に比例して、チェック時間が増大することを抑制することができる。このため、図４に示したような構成、つまり、被チェック領域アドレスとメモリ保護情報とを照合するための複数のハードウェアを並列化した構成によれば、プログラム呼び出し時の正当性チェックを一層効率よく実行できる。
【００７２】
実際、メモリアクセス要求に対するメモリ保護を効率的に実行するために、図４に示すように照合回路は並列化される場合が多い。このため、本実施の形態で述べたように、メモリ保護違反検出部１１１が有する照合回路を被チェック領域アドレスとメモリ保護情報とを照合するためのハードウェアと兼用させる構成は、構成の簡素化とアドレスチェックの効率化の両方に効果がある。
【００７３】
なお、上述した説明では、関数呼び出し時のＣＰＵ１０の動作を説明するために、同一タスクに含まれる関数の呼び出しにあたってＯＳに処理を移す例を示した（図２を参照）。しかしながら、これは関数呼び出し時の動作を説明する概念の１つに過ぎない。すなわち、ＣＰＵ１０は、同一タスクに含まれる関数の呼び出しにあたり、ＯＳに処理を移さずに直接に呼び出し先関数へ分岐してもよい。
【００７４】
図９は、同一タスクに含まれる関数の呼び出し時に、直接に呼び出し先関数へ分岐するよう構成されたＣＰＵ１０の動作を説明するための概念図である。ＣＰＵ１０でタスクＡに含まれる関数１が実行されている際に、別の関数２が呼び出されると、関数２の入り口処理へ分岐する（Ｓ３０１）。関数２の入り口処理では、保護設定チェック部１４に対してチェック要求が発行される（Ｓ３０２）。関数２の入り口処理では、被チェック領域アドレスがスタック領域に含まれることが確認できた場合に、スタック伸張後のスタックポインタ値を上書きする。被チェック領域アドレスがスタック領域に含まれないことが確認された場合には、スタック異常を処理するようにＯＳに要請するためにシステムコールを発行する（Ｓ３０３）。これらの、関数入り口処理は、従来コンパイラが関数の入り口処理として生成していたスタックポインタを更新する命令列と同様に、コンパイラが各関数の入り口処理として命令列を生成すればよい。
【００７５】
＜発明の実施の形態２＞
本実施の形態にかかる情報処理装置２は、上述した情報処理装置１が有する構成及び機能に加えて、ＣＰＵによるメモリアクセスがスタックポインタ相対アクセス（以下、ＳＰ相対アクセス）であるか否かに応じて、メモリアクセス制御を行うことを特徴とする。
【００７６】
図１０は、情報処理装置２の主要な部分の構成を示すブロック図である。情報処理装置２と情報処理装置１の相違点は、ＣＰＵ２０及びメモリ保護部２１が有するアクセス制御部２１２である。
【００７７】
ＣＰＵ２０が上述のＣＰＵ１０と相違する点は、ＳＰ相対アクセスであるか否かを示すＳＰ相対アクセス通知をメモリアクセス要求に含めて出力する点である。ＳＰ相対アクセスとは、ＳＰＲ１０４をベースレジスタとしてアクセス先アドレスの生成が行なわれたメモリアクセスを意味する。
【００７８】
アクセス制御部２１２は、メモリ保護違反検出部１１１によるスタック参照可否の検出結果を入力し、スタック参照が許可されていない領域、言い換えると非スタック領域に対するアクセスを検出する。そして、アクセス制御部２１２は、ＣＰＵ２０が非スタック領域に対してＳＰ相対アクセスを実行した場合にアクセスを遮断し、保護例外を発生する。
【００７９】
なお、上述した図４ではスタック参照可否の検出結果をアクセス制御部１１２に供給しない構成を示したが、本実施の形態では、メモリ保護違反検出部１１１によるスタック参照可否の検出結果をアクセス制御部２１２に供給すればよい。
【００８０】
例えば、図１１（ａ）に示すように、４つの保護設定レジスタ１１０１〜１１０４によって、あるタスク（タスクＡとする）のアクセス許可領域が設定されている場合を考える。具体的には、３つの保護設定レジスタ１１０１〜１１０４の各々は、非スタック領域を指定している。具体的には、保護設定レジスタ１１０１の指定するアクセス許可領域は、リードアクセス及びライトアクセスが共に許可されたＲ／Ｗ許可領域である。また、保護設定レジスタ１１０２の指定するアクセス許可領域は、リードアクセスのみ許可されたリード許可領域である。また、保護設定レジスタ１１０３の指定するアクセス許可領域は、ライトアクセスのみ許可されたライト許可領域である。
【００８１】
一方、保護設定レジスタ１１０４は、スタック参照可能な領域、即ちスタック領域を指定している。スタック領域は、Ｒ／Ｗ許可領域である。
【００８２】
図１１（ｂ）は、図１１（ａ）に示したメモリ保護情報に基づいてアクセス制御部２１２がメモリアクセス制御を実行する場合に、ＣＰＵ２０がアクセス可能な領域を示すメモリマップである。図１１（ｂ）の左側は、ＳＰ相対アクセスでない非ＳＰ相対アクセスによってＣＰＵ２０がアクセス可能なメモリ領域を示している。この場合、ＣＰＵ２０は、アクセス許可領域の全てにアクセス可能である。一方、図１１（ｂ）の右側は、ＳＰ相対アクセスによってＣＰＵ２０がアクセス可能なメモリ領域を示している。この場合、アクセス可能な領域は、スタック参照許可とされているスタック領域のみに制限される。
【００８３】
上述したように、情報処理装置２では、スタック相対アクセスであることをＣＰＵ２０からメモリ保護部２１に通知し、メモリ保護部２１が非スタック領域に対するスタック相対アクセスを禁止することとした。
【００８４】
例えば、Ｃ言語によるプログラムでは、スタック領域には関数のローカル変数や引数が配置される。これらの変数は、ポインタを介して参照することができるため、スタックに格納された変数が常にＳＰ相対アクセスによって参照されるわけではない。しかしながら、スタック領域以外のアクセス可能領域に対してＳＰ相対アクセスは行なわれない。
【００８５】
情報処理装置２は、スタックポインタに不正な値が設定されたことに起因して、誤って非スタック領域にＳＰ相対アクセスが行なわれた場合に、保護違反を検出し、不正なデータ操作を防ぐことができる。このため、情報処理装置２は、一層強固なメモリ保護を提供することができる。
【００８６】
＜発明の実施の形態３＞
上述した発明の実施の形態１及び２では、被チェック領域アドレスとメモリ保護情報とを照合するためのハードウェアを保護設定チェック部１４に設けずに、メモリ保護違反検出部１１１又は周辺装置保護違反検出部２１１のハードウェアと兼用する構成を示した。しかしながら、構成は冗長となるものの、被チェック領域アドレスとメモリ保護情報とを照合するためのハードウェアを保護設定チェック部１４に設けてもよい。
【００８７】
本実施の形態にかかる情報処理装置３の構成を図１２に示す。図１２において、保護設定チェック部３４は、発明の実施の形態１にかかる情報処理装置１が有する保護設定チェック部１４に対して、被チェック領域アドレスとメモリ保護情報又は周辺装置保護情報とを照合するためのハードウェアを追加したものである。なお、保護設定チェック部３４に追加する照合用のハードウェアは、図５に示したメモリ保護違反検出部１１１の照合回路と同様とすればよい。
【００８８】
なお、上述した発明の実施の形態１〜３にかかる情報処理装置１〜３は、例えば、１チップ化されたマイクロコンピュータとして構成されてもよいし、複数チップからなるコンピュータシステムとして構成されてもよい。
【００８９】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００９０】
【図１】本発明の実施の形態１にかかる情報処理装置の構成を示すブロック図である。
【図２】メモリ保護違反検出部の構成例を示す図である。
【図３】保護設定チェック部の構成例を示す図である。
【図４】保護設定チェック部の状態遷移図である。
【図５】保護設定チェック部の他の構成例を示す図である。
【図６】本発明の実施の形態１にかかる情報処理装置における関数呼び出しの動作を説明するための概念図である。
【図７】スタック領域を含むメモリマップの一例と、メモリ保護情報記憶部の構成例を示す図である。
【図８】本発明の実施の形態１にかかる情報処理装置による保護設定チェック動作を説明するための図である。
【図９】本発明の実施の形態１にかかる情報処理装置における関数呼び出しの動作を説明するための概念図である。
【図１０】発明の実施の形態２にかかる情報処理装置の構成を示すブロック図である。
【図１１】本発明の実施の形態２にかかる情報処理装置による保護設定チェック動作を説明するための図である。
【図１２】発明の実施の形態３にかかる情報処理装置の構成を示すブロック図である。
【図１３】特許文献３に開示された図面である。
【符号の説明】
【００９１】
１、２、３  情報処理装置
１０  ＣＰＵ（Central Processing Unit）
１１，２１、３１  メモリ保護部
１２  メモリバス
１３  メモリ
１４、３４  保護設定チェック部
１０１  命令発行部
１０２  ロード／ストア命令実行部
１０３  汎用レジスタ群
１０４  スタックポインタレジスタ（ＳＰＲ）
１１０  メモリ保護情報記憶部
１１１  メモリ保護違反検出部
１１２、２１２  アクセス制御部
１１３、１１３Ｕ、１１３Ｌ  セレクタ
１４１  チェック機能制御部
１４２  加算回路
１４３  チェック結果整形部
１５０  先頭アドレスレジスタ
１５１  サイズレジスタ
１５２  開始制御レジスタ
１５３  結果レジスタ
１１０１Ｗ  ライト許可指定部
１１０１Ｒ  リード許可指定部
１１０１Ｅ  実行許可指定部
１１０１Ｓ  スタック参照許可指定部
１１０１Ｕ  上限アドレス指定部
１１０１Ｌ  下限アドレス指定部
【図１】
0005044387.tif 000002
【図２】
0005044387.tif 000003
【図３】
0005044387.tif 000004
【図４】
0005044387.tif 000005
【図５】
0005044387.tif 000006
【図６】
0005044387.tif 000007
【図７】
0005044387.tif 000008
【図８】
0005044387.tif 000009
【図９】
0005044387.tif 000010
【図１０】
0005044387.tif 000011
【図１１】
0005044387.tif 000012
【図１２】
0005044387.tif 000013
【図１３】
0005044387.tif 000014