(57)【要約】【課題】プログラムの不具合等によるメモリ破壊を低減する。【解決手段】本演算処理装置は、メインメモリに格納されたデータを一時的に登録するキャッシュメモリと、メインメモリに格納されたデータをキャッシュメモリに登録する時に、メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共にキャッシュメモリに登録する登録回路と、メインメモリにアクセスする命令を実行するときにアクセス先のアドレスともに指定されるアクセス情報とアクセス対象のデータと共にキャッシュメモリに登録されている識別情報とを比較する比較回路と、比較の結果に応じて、メインメモリにアクセスする命令の実行を停止させるアクセス制限回路と、を備える。【選択図】図１３
2017167582.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリにアクセスする演算処理装置であって、
前記メインメモリに格納されたデータを一時的に登録するキャッシュメモリと、
前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録する登録回路と、
前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスともに指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較する比較回路と、
前記比較の結果に応じて、前記メインメモリにアクセスする命令の実行を停止させるアクセス制限回路と、を備える演算処理装置。
【請求項２】
第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域を識別する識別情報を生成して前記メインメモリの所定領域に格納すると共に、前記割り当てられた領域のアドレスと共に前記生成された識別情報を前記割り当てられた領域へアクセスするときに指定されるアクセス情報として前記第１のプロセスに引き渡す第２のプロセスを実行する実行部をさらに備える請求項１に記載の演算処理装置。
【請求項３】
前記識別情報は、前記メインメモリの固定長のブロック列に対応するメインメモリ上の要素列に格納され、
前記演算処理装置は、さらに、前記メインメモリでの前記要素列の先頭アドレスを指定するアドレスレジスタを有する請求項１または２に記載の演算処理装置。
【請求項４】
前記は、第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域へのアクセス権限の範囲を示す権限範囲情報を前記割り当てられる領域に対応して前記メインメモリに格納すると共に、前記割り当てられた領域のアドレスと共に前記権限範囲情報を前記第１のプロセスに引き渡す第２のプロセスを実行する実行部をさらに備え、
前記登録回路は、前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して格納されている権限範囲情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録し、
前記比較回路は、前記メインメモリにアクセスする命令を実行するときに、前記アクセスする命令の種類と前記アクセス先のアドレスと共に指定される権限範囲情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている権限範囲情報とが所定の条件を充足するか否かを判定する判定回路を有し、
前記アクセス制限回路は、前記所定の条件が充足されるときに前記メインメモリにアクセスする命令の実行を停止させる請求項１に記載の演算処理装置。
【請求項５】
前記登録回路は、前記キャッシュメモリで前記アクセス対象のデータを読み出すためのタグ情報が格納されるタグ部に前記識別情報を格納する請求項１から４のいずれか１項に記載の演算処理装置。
【請求項６】
メインメモリと、
前記メインメモリに記憶された命令列を含むプロセスを実行すると共に前記前記メインメモリに記憶されたデータにアクセスする演算処理装置と、を備え、
前記演算処理装置は、
第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域を識別する識別情報を生成して前記メインメモリの所定領域に格納すると共に、前記割り当てられた領域のアドレスと共に前記識別情報を前記割り当てられた領域へアクセスするときに指定されるアクセス情報として前記第１のプロセスに引き渡す第２のプロセスを実行する実行部と、
前記メインメモリのデータを一時的に登録するキャッシュメモリと、
前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録する登録回路と、
前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスともに指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較する比較回路と、
前記比較の結果に応じて、前記アクセス命令の実行を停止させるアクセス制限回路と、を備える情報処理装置。
【請求項７】
メインメモリに格納されたデータを一時的に登録するキャッシュメモリを備える演算処理装置の制御方法であって、
前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録し、
前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスともに指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較し、
前記比較の結果に応じて、前記メインメモリにアクセスする命令の実行を停止させる、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置、及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置であるプロセッサは、ソフトウェアに含まれる命令をフェッチしデコードし実行する。命令には、ロード命令やストア命令などメモリにアクセスするメモリアクセス命令が含まれる。ところで、プロセッサを制御するオペレーティングシステムは、他のプログラム等の要求に従ってメモリの領域割当関数を実行することにより、あるメモリ領域を確保することができる。メモリの領域割当関数により確保したメモリ領域に対するメモリアクセス命令を実行する場合に、プログラムに不具合や誤ったコードが存在した結果、プログラムを実行するプロセッサが正しいアドレスのメモリ領域外のメモリにアクセスする場合がある。また、上記プロセッサが正しいアドレスのメモリ領域のデータを不正なデータに書き換えてしまう場合がある。以上のようなプログラムのバグや誤ったコードにより、メモリ破壊が発生する。また、上記プロセッサが正しいアドレスのメモリ領域外のメモリのデータを参照することで、不具合が生じることがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１３／００１３８４３号明細書
【特許文献２】特開２０１５−６０４９９号公報
【特許文献３】特開昭５７−６９５２号公報
【特許文献４】特開平２−０１０４４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の１つの側面は、プログラムの不具合等によるメモリ破壊を低減することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の１つの側面は、メインメモリにアクセスする演算処理装置によって例示される。すなわち、本演算処理装置は、メインメモリに格納されたデータを一時的に登録するキャッシュメモリを備える。また、本演算処理装置は、前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録する登録回路を備える。また、本演算処理装置は、前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスともに指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較する比較回路を備える。また、本演算処理装置は、前記比較の結果に応じて、前記メインメモリにアクセスする命令の実行を停止させるアクセス制限回路を備える。
【発明の効果】
【０００６】
１つの側面によれば、プログラムの不具合等によるメモリ破壊を低減することができる。
【図面の簡単な説明】
【０００７】
【図１】メモリ領域の確保を要求するユーザープログラムとＯｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍの動作を例示する図である。
【図２】メモリ破壊の第１の例を示す図である。
【図３】メモリ破壊の第２の例を示す図である。
【図４】実施形態１におけるプロセッサとメインメモリとを含む情報処理装置を例示する図である。
【図５】実施形態１におけるメモリ保護に関連するハードウェアの関係を例示する構成図である。
【図６】実施形態１におけるメモリ保護の手順を例示するフローチャートである。
【図７】実施形態１におけるメモリ領域割当処理を例示するフローチャートである。
【図８】メモリの領域割当関数によるシステムコールに対して、ＯＳがユーザープログラムに返す先頭アドレスのフォーマットを例示する図である。
【図９】メモリの割当領域とそれぞれの管理領域識別キー値及び先頭アドレスを例示する図である。
【図１０】メモリキーテーブルの１エントリのフォーマットである。
【図１１】実施形態１におけるプロセッサの構成を例示する図である。
【図１２】ＴＬＢユニットの構成を示す図である。
【図１３】実施形態１におけるＬ１データＴＡＧ、Ｌ１データキャッシュ、及びキーチェックユニットの関係を例示する図である。
【図１４】ＴＡＧ部１８Ａの１エントリのフォーマットを例示する図である。
【図１５】キーテーブルアドレス生成回路の詳細を例示する図である。
【図１６】キーチェック回路１５３の詳細図である。
【図１７】キーチェック回路１５３の動作真理値表の例である。
【図１８Ａ】実施形態１のプロセッサによる処理を示すフローチャートである。
【図１８Ｂ】実施形態１のプロセッサによる処理を示すフローチャートである。
【図１９】実施形態１におけるＴＬＢユニット１４の構成を例示する図である。
【図２０】実施形態２におけるプロセスの関係を例示する図である。
【図２１】実施形態２の仮想アドレスの構成を例示する図である。
【図２２】実施形態２におけるメモリキーの構成を例示する図である。
【図２３】実施形態２のＴＡＧ部の１エントリのフォーマットを例示する図である。
【図２４】実施形態２のキーチェック回路の動作真理値表を例示する図である。
【図２５】実施形態２におけるＬ１データＴＡＧ、Ｌ１データキャッシュ、及びキーチェックユニットの構成を例示する図である。
【図２６】実施形態２のキーチェック回路の構成を例示する図である。
【図２７】実施形態２の情報処理装置で実行されるＯＳの処理を例示するフローチャートである。
【発明を実施するための形態】
【０００８】
以下、図面を参照して一実施形態に係る演算処理装置について説明する。
［比較例］
【０００９】
図１は、メモリ領域の確保を要求するときのユーザープログラムとＯｐｅｒａｔｉｎｇ
Ｓｙｓｔｅｍ（ＯＳ）の動作を例示する図である。ユーザープログラムは、メモリの領域割当関数ｍａｌｌｏｃにより、サイズ「ｓｉｚｅｏｆ（ｉｎｔ）」の領域を１６個含むメモリ領域の確保（または割当）をＯＳに要求する（Ｓ１）。これに応答して、ＯＳは、メモリ領域を確保し（Ｓ２）、確保したメモリ領域の先頭の仮想アドレスをアドレスポインタ  ｐｏｉｎｔｅｒ１として返す（Ｓ３）。これにより、メモリ領域内には、アドレスポインタ  ｐｏｉｎｔｅｒ１によって示される位置を先頭仮想アドレスとするメモリ領域が割り当てられる。
【００１０】
図２は、メモリ破壊の第１の例を示す図である。図２には、メモリ破壊を発生させるユ
ーザープログラムと主記憶装置としてのメインメモリ３０が示されている。ユーザープログラムにも、メモリの領域割当関数ｍａｌｌｏｃが示され、この領域割当関数によりメモリ内にアドレスポインタ  ｐｏｉｎｔｅｒ１のアドレスを先頭とするサイズ「ｓｉｚｅｏｆ（ｉｎｔ）」の領域を１６個有するメモリ領域２が割り当てられている。
【００１１】
図２の例では、ユーザープログラム内のｆｏｒ文では、ｉ＝０からｉ＝１６までのアドレスｐｏｉｎｔｅｒ［ｉ］のメモリ領域に数値「０」を書き込むことが記述されている。その結果、プログラムを実行するプロセッサは、ｆｏｒ文の実行により割り当てられたメモリ領域２の範囲外のｐｏｉｎｔｅｒ１［１６］に数値「０」を書き込んでしまい（Ｓ５）、領域３のデータを破壊してしまうことになる。
【００１２】
図３は、メモリ破壊の第２の例を示す図である。図３には、メモリ破壊を発生させるユーザープログラムとメインメモリ３０が示されている。ユーザープログラムには、メモリの領域割当関数ｍａｌｌｏｃと、それに続く正しいコードと誤ったコードが例示されている。
（正しいコード）
＊ｐｏｉｎｔｅｒ２  ＝  １０；
ｐｏｉｎｔｅｒ２［１］  ＝  １；
（誤ったコード）
ｐｏｉｎｔｅｒ２  ＝  １０；
ｐｏｉｎｔｅｒ２［１］  ＝  １；
【００１３】
メモリの領域割当関数ｍａｌｌｏｃにより、ＯＳが図１と同様の動作を実行して、メモリ内にメモリ領域４を確保して、その先頭の仮想アドレスをアドレスポインタｐｏｉｎｔｅｒ２として返す。一方で、正しいコードは、アドレスポインタｐｏｉｎｔｅｒ２のアドレスに対応するメモリ領域に数値「１０」を書き込み、そのアドレスに続くアドレスのメモリ領域に数値「１」を書き込む命令である。
【００１４】
上記正しいコードに対して、誤ったコードでは、プロセッサは、アドレスポインタｐｏｉｎｔｅｒ２に数値「１０」を書き込むため、ＯＳから返された先頭の仮想アドレス自体が変更されてしまう（Ｓ６）。そして、Ｓ６の処理に続くｐｏｉｎｔｅｒ２［１］＝１のコードでメモリ領域４とは異なるメモリ領域２内に数値「１」が書き込まれる（Ｓ７）。以上の結果、メモリ領域２のデータが破壊される。メモリのデータが破壊されることをメモリ破壊と呼ぶ。
【００１５】
ストア命令のように、プロセッサがデータをメモリ領域内に書き込む場合に加えて、ロード命令のようにプロセッサがデータをメモリ領域からデータレジスタ等に読み出す場合も、問題が生じ得る。つまり、プロセッサが割り当てられたメモリ領域外のデータを読み出すことは、バグに結びつくことがあり、一種のメモリ破壊とみなすことができる。
【００１６】
メモリ破壊の発生を検出する方法としては、例えば、メモリアクセス命令であるロード、ストア命令実行時にトラップを発生させることが考えられる。例えば、プロセッサにデバッガ等のプログラムを実行させ、発生したトラップに応答させればよい。そして、プロセッサにロード、ストア命令でアクセスしようとするアドレスが事前に確保されたメモリ領域のアドレス範囲内か否かをチェックさせればよい。しかし、デバッガ等によるチェックでは、ロード、ストア命令が実行される度にトラップが発生するのでオーバヘッドがきわめて大きくなる。
【００１７】
また、例えば、プロセッサがメモリ割当のときに、メモリに割当られた領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録しておく方法も提案されて
いる。この方法では、メモリ割当領域に対するメモリアクセス命令の実行に応答して、アドレスレンジテーブルを参照するハードウェアが用いられる。このハードウェアは、メモリアクセス命令のアクセス先アドレスがアドレスレンジテーブルに登録されたアドレス範囲情報で示される範囲内にあるか否かの判定処理を行う。しかし、アドレスレンジテーブルを高速に参照するハードウェアの数、例えば、アドレスレンジテーブルを格納するレジスタ数には制限があり、この制限を超える負荷が生じると、命令実行性能が低下する。
【００１８】
また、例えば、メモリ割当が実行されるメモリのバンクに対して、予備バンクを対応づけておき、予備バンクを用いて、メモリ割当がされた領域へのアクセスが正しいか否かを判定することも考えられる。しかし、この方法では、予備バンクが用意されていることが前提であり、コストが高くなる。また、この方法では、プログラムの実行に従ってアクセスされるメモリと、予備バンクの両方にアクセスが発生し、プロセッサとメモリとの間の通信のための帯域が使用されることになる。
【００１９】
さらに、近年のプロセッサは複数階層のキャッシュメモリを装備している。そこで、例えば、予備バンクをキャッシュに記憶することも考えられる。しかし、プログラムの実行に従ってアクセスされるメモリのデータと、予備バンクのデータをそのままキャッシュに記憶すると、キャッシュの利用効率、あるいはヒット率が低下する。そこで、以下の実施形態では、専用のハードウェアの数の制限、メモリの容量の制限が生じにくく、かつ、プロセッサあるいはキャッシュの利用効率の低下を抑制して、不正なメモリアクセスを検出できる演算処理装置について説明する。
［実施形態１］
【００２０】
以下、図４から図１９の図面を参照して、実施形態１に係る演算処理装置、演算処理措置を含む情報処理装置、及び演算処理装置の制御方法について説明する。図４は、実施形態１における演算処理装置としてのＣＰＵ１０と主記憶装置としてのメインメモリ３０とを含む情報処理装置を例示する図である。図４では、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０とメインメモリ３０とがバスＢＵＳを介して接続されている。ＣＰＵ１０は、プロセッサとも呼ばれる。ＣＰＵ１０は、命令フェッチとデコードなどを行う命令制御部１１と、デコード結果に応じた演算を行う演算部１２と、一次（Ｌ１）キャッシュ制御部１３と二次（Ｌ２）キャッシュ制御部２０ＡとＬ２キャッシュＲＡＭ部２０Ｂとを有する。Ｌ１キャッシュ制御部１３は、メモリの仮想アドレスを物理アドレスに変換するＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋ  ａｓｉｄｅ  Ｂｕｆｆｅｒ）ユニット１４と、Ｌ１命令ＴＡＧ１６と、Ｌ１命令キャッシュ１７と、Ｌ１データＴＡＧ１８と、Ｌ１データキャッシュ１９とを有する。
【００２１】
さらに、Ｌ１キャッシュ制御部１３は、ロード、ストア命令などのメモリアクセス命令のアクセス先アドレスがアクセス可能であるか否かを判定するキーチェックユニット１５を有する。ここで、メモリアクセス命令のアクセス先アドレスは、例えば、メモリの領域割当関数で割り当てられたメモリ割当領域のアドレスである。実施形態１では、メモリアクセス命令のアクセス先アドレスがキーチェックユニット１５でアクセス不可と判定された場合、ＣＰＵ１０は、アクセス不可と判定されたアクセス先アドレスにアクセスする命令がメモリ破壊の原因となる命令であると判断する。キーチェックユニット１５は、「メインメモリにアクセスする命令を実行するときにアクセス先のアドレスともに指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較する比較回路」の一例である。以下、キーチェックユニット１５によって例示されるメモリ破壊の原因となる命令を検出する構成をキーチェック機構と呼ぶ。また、キーチェック機構による処理をメモリ破壊検出処理という。
【００２２】
メインメモリ３０内には、ＯＳ３１と、ユーザープログラム３２と、ユーザープログラ
ム３２からの要求に従ってメモリ領域を割り当てるユーザーデータ領域３３と、が展開されている。命令制御部１１は、Ｌ１命令キャッシュ１７、Ｌ２キャッシュ制御部２０Ａ及びＬ２キャッシュＲＡＭ部２０Ｂを介して、メインメモリ３０に実行可能に展開されたＯＳ３１及びユーザープログラム３２の命令列を取得し、演算部１２に実行させる。Ｌ１データＴＡＧ１８とＬ１データキャッシュ１９がメインメモリに格納されたデータを一時的に登録するキャッシュメモリの一例である。命令制御部１１と演算部１２は、実行部の一例である。
【００２３】
さらに、メインメモリ３０内には、アドレス変換テーブル３４と、メモリキーテーブル３５とが格納されている。アドレス変換テーブル３４には、メモリアクセス命令のオペランドに指定される仮想アドレス（Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ、ＶＡと称する）と、メインメモリ３０の物理アドレス（Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ、ＰＡと称する）の対応が格納されている。メモリキーテーブル３５のそれぞれのエントリは、メモリの領域割当関数により割り当てられたメモリ割当領域内の固定長ブロックのそれぞれに対するメモリキーを格納する。
【００２４】
そして、アドレス変換テーブル３４の一部のエレメントが、Ｌ１キャッシュ制御部１３内のＴＬＢユニット１４内のＴＬＢに一時的にキャッシュされる。アドレス変換処理では、まずＴＬＢが参照されヒットすれば変換された物理アドレスが出力される。ＴＬＢがヒットしなければメインメモリ３０内のアドレス変換テーブル３４が参照されて、仮想アドレスが物理アドレスに変換される。
【００２５】
図５は、実施形態１におけるメモリ保護に関連するハードウェアの関係を例示する構成図である。また、図６は実施形態１におけるメモリ保護の手順を例示するフローチャートである。
【００２６】
ＯＳ３１は、メインメモリ３０中のユーザーデータ領域３３内の固定長のデータブロックに対して、１エントリのメモリキー（ＭＫＥＹ）を割り当てる。メモリキーはメインメモリ３０のメモリキーテーブル３５に配置される（Ｓ１１）。
【００２７】
メモリアクセス命令の実行に伴い、メモリアクセス命令のオペランドで示されるアドレスに対応したメインメモリ３０の固定長のデータブロックはＬ１データキャッシュ１９にキャッシュされる（Ｓ１２）。さらに同データブロックに対応するメモリキーも、当該メモリキーデータを含む固定長のデータブロック単位にＬ１データキャッシュ１９にキャッシュされる（Ｓ１３）。Ｌ１データキャッシュ１９の制御回路（図１３のＭＫＥＹライト制御ユニット３６）は、キャッシュされたメモリキーデータをさらにＬ１データＴＡＧ１８の専用領域にコピーする（Ｓ１４）。
【００２８】
メモリアクセス命令が実行される時、メモリアクセス命令のオペランドで示されるアドレスに対応したキャッシュデータがＬ１データキャッシュ１９から読み出されると共に、対応するメモリキーデータがＬ１データＴＡＧ１８の専用領域から読み出される。このとき、命令制御部１１から出力される仮想アドレスＶＡに含まれるアクセスキーと、Ｌ１データＴＡＧ１８の専用領域から読み出されたメモリキーとの比較がキーチェックユニット１５で行われる（Ｓ１５）。以上の処理によってメモリアクセス命令で示されたアドレスで指定されるメインメモリ３０の領域がアクセス許可されているか、されていないかが判定される。
【００２９】
以下、ＯＳ３１のメモリ領域割当処理について説明する。図７は、実施形態１におけるメモリ領域割当処理を示すフローチャートである。ＣＰＵ１０は、メインメモリ３０に実行可能に展開されたＯＳ３１及びユーザープログラム３２を実行し、図７の処理を実行す
る。以下、実施形態１では、ＣＰＵ１０がプログラムに従って処理を実行する場合に、「プログラムが実行する」と表現することがある。図１で説明したとおり、ユーザープログラム３２内のメモリの領域割当関数ｍａｌｌｏｃが実行されると、ＯＳ３１が次のようにメモリ領域割当処理を実行する。図７に示されるように、ＯＳ３１は、まず、ｍａｌｌｏｃ関数からシステムコールを受信する（Ｓ２１）。システムコールに応答して、ＯＳ３１は、ヒープ領域と呼ばれるＯＳ３１の仮想メモリ空間にｍａｌｌｏｃ関数が指定した容量のメモリ領域（以下、メモリ割当領域）を確保する（Ｓ２２）。さらに、ＯＳ３１は、メモリの領域割当関数ｍａｌｌｏｃが割り当てたメモリ割当領域を識別する管理領域識別キー値を生成する（Ｓ２３）。この管理領域識別キー値は、メモリ破壊を検知する対象のメモリ割当領域を識別する情報であり、その生成は、例えば、ランダムな数値を発生して割り当てるなどにより行われる。但し、ただし、管理領域識別キー値は、メモリの領域割当関数ｍａｌｌｏｃによって割り当てられたメモリ領域を識別することが可能な程度に重複が抑止できればどのような数値でもよい。例えば、管理領域識別キー値は、通し番号であってもよい。なお、実施形態１のＣＰＵ１０では、管理領域識別キー値のＡＬＬ０値（０ｘ００）及びＡＬＬ１値（０ｘＦＦ）は、特別な意味を持つ。そこで、生成する管理領域識別キー値は、ＡＬＬ０値及びＡＬＬ１値を除いて割り当てられる。
【００３０】
そして、ＯＳ３１は、メインメモリ３０内のメモリキーテーブル３５に、確保したメモリ割当領域の管理領域識別キー値を記憶する（Ｓ２４）。その後、ＯＳ３１は、ユーザープログラム３２に、管理領域識別キー値と先頭アドレスを返す（Ｓ２５）。なお、ここでユーザープログラム３２に渡すキー値をアクセスキーと呼ばれる。これで、ユーザープログラム３２は、アクセスキーと、ユーザープログラム３２からのメモリ割当要求により確保されたメモリ割当領域を指定する先頭アドレスを取得する。一方、メモリキーテーブル３５に記憶された管理領域識別キー値をメモリキーと呼ばれる。ＣＰＵ１０が実行するユーザープログラム３２は第１のプロセスの一例である。ＣＰＵ１０が実行するＯＳ３１は、第２のプロセスの一例である。Ｓ２１からＳ２４の処理は、「第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域を識別する識別情報を生成して前記メインメモリの所定領域に格納する」ことの一例である。Ｓ２５の処理は、「割り当てられた領域のアドレスと共に前記生成された識別情報を前記割り当てられた領域へアクセスするときに指定されるアクセス情報として前記第１のプロセスに引き渡す」ことの一例である。
【００３１】
図８は、メモリの領域割当関数によるシステムコールに対して、ＯＳ３１がユーザープログラム３２に返す先頭アドレスのフォーマットを例示する図である。図８では、メモリ破壊検出のためのキーチェック機構が有効化される場合のアドレスフォーマットＦ１と、キーチェック機構が無効化される場合のアドレスフォーマットＦ２とが例示されている。キーチェック機構が有効化される場合は、アドレスフォーマットＦ１に例示されるように、例えば６４ビットのアドレス［６３：０］の最上位の８ビット［６３：５６］にアクセスキー値が埋め込まれる。つまり、ＯＳ３１は、８ビットのアクセスキー値を先頭アドレス［６３：０］の最上位８ビット［６３：５６］に埋め込んで、ユーザープログラム３２に返す。
【００３２】
一方、キーチェック機構が無効化される場合は、アドレスフォーマットＦ２に示されるように、メモリの領域割当関数によるシステムコールに対して、ＯＳ３１は、６４ビットの先頭アドレスを返す。従って、最上位の８ビットも含めて６４ビット全てがアドレス情報になる。
【００３３】
このように、キーチェック機構が有効化される場合に、ＯＳ３１が６４ビットの先頭アドレスの一部のビットを利用してアクセスキー値をユーザープログラム３２に返すことで、従来の回路構成の変更箇所を限定してキーチェック機構が実現できる。ただし、先頭ア
ドレスの最上位の８ビットのアドレス情報が失われるので、メモリ割当領域のアドレス範囲は、５６ビット［５５：０］となる。
【００３４】
なお、アドレス変換ユニットとして作用するＴＬＢ１４は、仮想アドレス内のキーチェックに利用する８ビットのアクセスキー値をＴＬＢのヒットチェックに際してタグ比較対象から除外する。８ビットのアクセスキー値は、アドレスではなく、メモリ割当関数によるメモリ割当時に設定される値であり、ＴＬＢ１４の処理対象から除外することが必要であるからである。
【００３５】
図９は、メモリのメモリ割当領域とそれぞれの管理領域識別キー値（メモリキー）及び先頭アドレスを例示する図である。また、図１０はメモリキーテーブル３５の１エントリのフォーマットである。図９の例では、メインメモリ３０に対応するＯＳ３１の仮想メモリ空間、例えばヒープ領域内に３つのメモリ割当領域ＭＡ１〜ＭＡ３が確保されている。管理領域識別キー値（例えば、１から３）は、メモリ割当領域ＭＡ１〜ＭＡ３に対応するメモリキーテーブル３５のエントリに格納される。そして、それぞれのメモリ割当領域ＭＡ１〜ＭＡ３を識別する管理領域識別キー値＝１から３と、それぞれのメモリ割当領域の先頭アドレスＶＡ１からＶＡ３とが、ＯＳ３１によってユーザープログラム３２に返される。メモリキーテーブル３５は、メインメモリの固定長のブロック列に対応するメインメモリ上の要素列の一例である。
【００３６】
なお、実施形態１では、ＯＳ３１がヒープ領域を確保する最低単位は、実施形態１のキャッシュラインサイズと同一の１２８バイトである。ここで、キャッシュラインサイズは、メインメモリ３０のデータがキャッシュメモリに登録されるときのデータの固定長ブロックサイズである。そのため、実施形態１では、ヒープ領域に確保されるメモリ割当領域のバウンダリは、キャッシュラインサイズと同一のアドレスバウンダリに揃う。
【００３７】
従って、実施形態１では、もし、ユーザープログラム３２がｍａｌｌｏｃ関数で１２８バイト以下、または１２８バイト以上であって１２８で割り切れないバイト数の領域を要求した場合、ＯＳ３１が確保する領域はアドレスバウンダリが揃った１２８バイト単位に切り上げられる。
【００３８】
以上のように、実施形態１では、メモリ割当領域毎に、一つの管理領域識別キー値（メモリキー）が割り当てられるが、一方で、メモリ割当領域には１２８バイト毎にメモリキーテーブル３５内の１エントリが割り当てられる。従って、図９のＭＡ３には３８４バイト、すなわち１２８バイトのブロックが３組割り当てられているので、メモリキーテーブルでは、３つのエントリ（Ｋ３Ａ〜Ｋ３Ｃ）がＭＡ３に割り当てられる。この時、３つのエントリ（Ｋ３Ａ〜Ｋ３Ｃ）には全て同一の管理領域識別キー値（図９では０ｘ０３）がセットされる。
【００３９】
メモリの領域割当関数によって確保されるメモリ割当領域には、必ずしもメモリ破壊検出処理の対象としないものもある。ＯＳ３１は、メモリ破壊検出処理の対象としないメモリ割当領域には、管理領域識別キー値としてメモリ破壊検出対象外を示すキー値＝ＡＬＬ０（２進数ですべて０の値、０ｘ００）を発行するようにしてもよい。そして、ＯＳ３１は、管理領域識別キー値がＡＬＬ０の場合は、メモリ割当領域に対応するメモリキーテーブル３５中のメモリキー値を０ｘ００にセットする。メモリキー値が０ｘ００の場合のキーチェックユニット１５の動作については図１６の説明において具体的に後述する。
【００４０】
さらに、ユーザーデータ領域３３のうち、メモリの領域割当関数によって確保されていないメモリ領域に対しては、すべてのユーザープログラム３２からのアクセスが禁止される。そのような場合は、ＯＳ３１は、管理領域識別キー値としてメモリアクセス対象外を
示すキー値＝ＡＬＬ１（２進数ですべて１の値、０ｘＦＦ）を発行するようにしてもよい。そして、ＯＳ３１は、管理領域識別キー値がＡＬＬ１の場合は、メモリ割当領域に対応するメモリキーテーブル３５中のメモリキー値を０ｘＦＦにセットする。キー値が０ｘＦＦの場合のキーチェックユニット１５の動作については、図１６の説明において具体的に後述する。
【００４１】
図１１は、実施形態１におけるＣＰＵ１０の構成を例示する図である。以下、図４の構成図と共に説明する。図１１にはＣＰＵ１０の一部の構成が例示されていて、命令の実行完了や実行順などを制御する命令シーケンス制御部１１Ａと、命令パイプライン４０と、一次キャッシュパイプライン５０とが例示されている。図中、縦方向の一点鎖線は、パイプラインステージの境界を例示する。命令シーケンス制御部１１Ａと命令パイプライン４０（及び図４の演算部１２）は、メインメモリ３０に格納された命令列を含むＯＳ３１等のシステムプログラム、あるいはユーザープログラム３２を実行する。
【００４２】
命令パイプライン４０は、命令をＬ１命令キャッシュ１７から取得する命令フェッチ回路１１Ｂと、命令をデコードするデコーダ１１Ｃと、実行アドレス生成器（ＥＡＧ：Ｅｆｆｅｃｔｉｖｅ  Ａｄｄｒｅｓｓ  Ｇｅｎｅｒａｔｏｒ）１２Ａとを有する。命令シーケンス制御部１１Ａと命令フェッチ回路１１Ｂとデコーダ１１Ｃとが、図４の命令制御部１１の一部の構成に対応する。また、実行アドレス生成器１２Ａは、図４の演算部１２の一部の構成に対応する。
【００４３】
一方、一次キャッシュパイプライン５０は、図４のＬ１キャッシュ制御部１３の一部の構成に対応する。一次キャッシュパイプライン５０は、実行アドレス生成器１２Ａが生成する仮想アドレスＶＡを物理アドレスにアドレス変換を実行する。アドレス変換は、図１１のタグ付きＴＬＢのＴＡＧ部１４Ａ、データ部１４Ｂと、タグ値の一致を検出するＴＡＧ比較器１４Ｃとによって実行される。タグ付きＴＬＢのＴＡＧ部１４Ａ、データ部１４ＢとＴＡＧ比較器１４Ｃが、図４のＴＬＢユニット１４に対応する。
【００４４】
このＴＬＢユニット１４は、実行アドレス生成器１２Ａが生成する仮想アドレスを物理アドレスに変換する。タグがヒットすれば、ＴＡＧ比較器１４Ｃは、データ部１４Ｂからの物理アドレスＰＡの出力を有効とする。一方、タグがヒットしなければ、ＴＡＧ比較器１４Ｃは、タグミスヒットをトラップ検出部５１に出力する。図１１の例では、ＴＬＢユニット１４は、２パイプラインステージで制御される。なお、図１１のパイプライン処理では、のＴＡＧ部１４Ａでのタグ値の検索と、データ部１４Ｂでの物理アドレスＰＡの検索が並列で実行される。そして、ＴＡＧ比較器１４Ｃでの比較の結果、タグミスヒットがトラップ検出部５１に出力されない限り、データ部１４Ｂから出力される物理アドレスＰＡがそのまま後段の処理で使用されることになる。
【００４５】
また、一次キャッシュパイプライン５０は実行アドレス生成器１２Ａが生成する仮想アドレスＶＡから変換された物理アドレスＰＡで示されるメモリデータが一次キャッシュに登録されている事を検出する。そのため、一次キャッシュパイプライン５０は、Ｌ１データＴＡＧ１８のＴＡＧ部１８Ａと、タグ値の一致を検出するＴＡＧ比較器１８Ｂを有する。Ｌ１データＴＡＧ１８のＴＡＧ部１８Ａを単にＴＡＧ部１８Ａという。ＴＡＧ部１８ＡとＴＡＧ比較器１８Ｂが図４のＬ１データＴＡＧ１８に対応する。従って、ＴＡＧ部１８Ａは、図４のＬ１データＴＡＧ１８のＴＡＧを記憶する記憶部に相当する。なお、ＴＡＧ部１８Ａの制御回路は、仮想アドレスＶＡの一部（物理アドレスＰＡの下位アドレスと共通する下位アドレス）によって、ＴＡＧ部１８Ａのセットを特定し、セット内のタグ（物理アドレスＰＡの上位アドレス）を検索する。そして、ＴＡＧ部１８Ａは検索された物理アドレスＰＡの上位アドレスと、下位アドレスとを組み合わせてＴＡＧ比較器１８Ｂに出力する。
【００４６】
このＴＡＧ比較器１８Ｂが、キャッシュヒットすればキャッシュデータ応答を指示し、キャッシュヒットしなければＬ２要求制御部５２に対してＬ２要求発行を指示する。なお、キャッシュデータ応答は、図４に例示するように、Ｌ１データＴＡＧ１８からＬ１データキャッシュ１９に出力される制御信号である。また、図１１の例では、Ｌ１データＴＡＧ１８は、２パイプラインステージで制御される。Ｌ１データＴＡＧ１８のパイプラインでは、ＴＡＧ部１８Ａによる物理アドレスＰＡのＴＡＧの検索と、タグ付きＴＬＢのＴＡＧ部１４Ａによる仮想アドレスＶＡのＴＡＧの検索及びデータ部１４Ｂによる物理アドレスＰＡの検索は並列で実行される。そして、ＴＡＧ比較器１８ＢからＬ２要求が発行されない限り、ＴＡＧ１８部Ａから出力される物理アドレスが後段の処理で使用され、キャッシュデータ応答がＬ１データキャッシュ１９に出力される。
【００４７】
一次キャッシュパイプライン５０は、図４のＬ１データキャッシュ１９から読み出されるメモリデータがアクセス可能であるか否かを判定するためのアクセスキーレジスタ１５２とキーチェック回路１５３を有する。アクセスキーレジスタ１５２は実行アドレス生成器１２Ａが生成する仮想アドレスに含まれるアクセスキーを記憶し、キーチェック回路１５３に出力する。キーチェック回路１５３はアクセスキーレジスタ１５２から出力されるアクセスキーと、ＴＡＧ部１８Ａから出力されるメモリキーを比較しアクセス許可・不許可を判定し、トラップ検出部５１、Ｌ２要求制御部５２に対して通知する。
【００４８】
トラップ検出部５１は、ＴＡＧ比較器１４Ｃからのタグミスヒットと、ＴＡＧ比較器１８Ｂからのキャッシュミスヒットと、キーチェックユニット１５Ｂからのアクセス不許可信号のいずれかを受信すると、適宜、それらに対応するトラップ・再実行通知を命令シーケンス制御部１１Ａに出力する。トラップ検出部５１は、トラップ検出／再実行検出器と呼ぶこともできる。命令シーケンス制御部１１Ａは、このトラップ・再実行通知に応答して、命令を再実行するか、または、ＯＳ３１のトラップハンドラを呼び出して、それぞれに対応する処理を実行させる。トラップ検出部５１は、比較の結果に応じて、前記メインメモリにアクセスする命令の実行を停止させるアクセス制限回路の一例である。
【００４９】
図１２は、ＴＬＢユニット１４の構成を示す図である。ＴＬＢユニット１４は、ＴＬＢ（Ｔａｂｌｅ  Ｌｏｏｋ  ａ  ｓｉｄｅ  Ｂｕｆｆｅｒ）のＴＡＧ部１４Ａ及びデータ部１４Ｂを有するＴＬＢ本体１４１と、ＴＡＧ比較器１４Ｃとを有する。命令制御部１１または演算部１２から、アクセスアドレスレジスタ１４３に、メモリアクセス命令のアクセス先の仮想アドレスＶＡがロードされ、コンテキストレジスタ１４４に、ＴＬＢの属性データがロードされる。ここで、属性データとは、例えば、ＯＳ３１がプロセスの切り替えを行うときに用いられるコンテキストを識別する情報である。
【００５０】
一方、ＴＬＢユニット１４のＴＡＧ部１４Ａ内には仮想アドレスＶＡとＴＬＢの属性データであるコンテキストｃｔｘｔとが記憶され、ＴＬＢユニット１４のデータ部１４Ｂ内には仮想アドレスＶＡに対応する物理アドレスＰＡが記憶されている。従って、メモリアクセス命令のアクセス先の仮想アドレスＶＡと一致するＴＡＧ部１４Ａ内の仮想アドレスＶＡに対応するデータ部１４Ｂ内の物理アドレスが、変換後のアドレスとして出力される。ＴＬＢユニット１４における比較処理は以下の通りである。
【００５１】
ＴＡＧ比較器１４Ｃは、アクセスアドレスレジスタ１４３及びコンテキストレジスタ１４４にロードされたメモリアクセス命令に対応する属性データとの組と、ＴＡＧ部１４Ａ内に記憶されている仮想アドレスＶＡ及びコンテキストｃｔｘｔの組と、を比較する。ＴＡＧ比較器１４Ｃは、比較器１４６と、比較器１４７と、２つの比較器１４６、１４７の出力のＡＮＤを演算するＡＮＤゲート１４８とを有する。比較器１４６は、アクセスアドレスレジスタ１４３内のアクセス先の仮想アドレスＶＡとＴＡＧ部１４Ａ内の仮想アドレ
スとを比較し、一致する場合に仮想アドレス一致出力ｖａ＿ｍｃｈを出力する。比較器１４７は、コンテキストレジスタ１４４内の属性データとＴＡＧ部１４Ａ内のコンテキストｃｔｘｔとを比較し、一致する場合にコンテキスト一致出力ｃｔｘｔ＿ｍｃｈを出力する。ＴＡＧ部１４Ａを順番に検索しながら、２つの比較器１４６、１４７が共に一致していることを検出した時のデータ部１４Ｂの物理アドレスＰＡが、ＡＮＤゲート１４Ｄを介してアドレス変換後の物理アドレスＰＡとして出力される。
【００５２】
ＴＬＢユニット１４のＴＡＧ部１４Ａ内のタグがヒットしない場合は、命令制御部１１は、メインメモリ３０内のアドレス変換テーブル３４からエントリをフェッチしてＴＬＢ本体１４１に登録する。すなわち、命令制御部１１は、このＴＬＢ本体１４１の要素の更新時に、ＴＬＢ登録要求とＴＬＢエントリの更新データ（ＶＡとＰＡ）とをＴＬＢユニット１４に出力する。これにより、ＴＬＢユニット１４のＴＡＧ部１４Ａ及びデータ部１４Ｂの要素が更新され、一次キャッシュパイプライン５０が再度実行され、再度ＴＬＢユニット１４での検索が行われる。
【００５３】
図１３は、実施形態１におけるＬ１データＴＡＧ１８、Ｌ１データキャッシュ１９、及びキーチェックユニット１５の関係を例示する図である。また、図１４はＬ１データＴＡＧ１８のＴＡＧ部１８Ａの１エントリのフォーマットを例示する図である。Ｌ１データＴＡＧ  １８は、ＴＡＧ情報を記憶するＴＡＧ部１８Ａと、ＴＡＧ部１８Ａから読み出されるＰＡ情報（例えば、物理アドレスＰＡの上位ビット）を使用してＬ１データキャッシュ１９のヒットを検査するＴＡＧ比較器１８Ｂを有する。Ｌ１データＴＡＧ  １８は、図４のＴＬＢ１４において仮想アドレスＶＡがヒットして、仮想アドレスＶＡが物理アドレスＰＡに変換された時、物理アドレスＰＡで示されるメモリデータがＬ１データキャッシュ１９に登録されているか否かを検査する。Ｌ１データＴＡＧ  １８のＴＡＧ部１８Ａには図１４に示される通り、ＰＡＩＤバリッドビット（ＰＡＩＤ―ＶＬＤ）、ＰＡＩＤ部、メモリキーバリッドビット（ＭＫＥＹ−ＶＬＤ）、メモリキー値が記憶される。
【００５４】
図１１で説明したように、命令制御部１１によって、ロード命令、ストア命令等のメモリアクセス命令が実行される時、ＴＬＢユニット１４でのアドレス変換動作と並行して、ＴＡＧ部１８Ａがアクセスされる。この時、命令制御部１１からの仮想アドレス（下位ビット）が出力され、アドレス選択回路３８で命令制御部１１からアドレスが選択されＴＡＧ部１８Ａと、Ｌ１データキャッシュ１９が同時にアクセスされる。ＴＡＧ部１８Ａから出力されるＰＡＩＤ−ＶＬＤが値１である時、ＴＡＧ比較器１８ＢによってＴＬＢから出力されるＰＡとＴＡＧ部１８Ａから出力されるＰＡＩＤが比較される。比較の結果が一致している場合、Ｌ１データキャッシュヒットであるので、Ｌ１データキャッシュ１９から読み出されたキャッシュデータが演算部１２に応答される。
【００５５】
キーチェックユニット１５は、ＴＡＧ部１８Ａと並行して動作する。モードレジスタ１５１は，例えば１ビットを有し、有効（ｂｉｔ＝１）の場合はキーチェック回路１５３の動作が有効化され、無効（ｂｉｔ＝０）の場合には、キーチェック回路１５３の動作が無効化される。アクセスキーレジスタ１５２は、メモリアクセス時のアクセスキーを記憶するレジスタである。アクセスキーレジスタ１５２には、演算部１２からアクセス先の仮想アドレスＶＡ中のアクセスキー値（図８参照）がロードされる。
【００５６】
キーチェック回路１５３は、モードレジスタ１５１の値（有効、無効）、アクセスキーレジスタ１５２のアクセスキー値、及びＴＡＧ部１８Ａからのキャッシュヒット時のメモリキー値を受け取って実行中のメモリアクセスが許可されるか、許可されないかを検査する。アクセスキーレジスタ１５２には、演算部１２の実行アドレス生成器１２Ａによって生成されたアクセスキーがロードされている。Ｌ１データＴＡＧ１８は、実行アドレス生成器１２Ａからの仮想アドレスＶＡ及びＴＬＢユニット１４からの物理アドレスＰＡに基
づいてＴＡＧ部１８Ａを検索し、物理アドレスＰＡがヒットすると、メモリキー値を出力する。キーチェックユニット１５は、アクセスキーレジスタにロードされたアクセスキー値と、Ｌ１データＴＡＧ１８ヒット時のメモリキー値とを比較し、キーチェック機構としての処理を実行する。キーチェック回路１５３の動作については、図１６に従って後述する。
【００５７】
キーテーブルベースアドレスレジスタ１５４は、メモリキーテーブル３５の先頭アドレスを保持するアドレスレジスタである。キーテーブルベースアドレスレジスタ１５４には、命令実行に先立ち予め演算部１２から値がロードされる。キーテーブルアドレス生成回路１５５は、キーテーブルベースアドレスレジスタ１５４とＴＬＢユニット１４から出力される物理アドレスＰＡを元にキーテーブルアドレスを生成する。キーテーブルアドレス生成回路１５５の動作については、図１５に従って具体的に後述する。キーテーブルベースアドレスレジスタ１５４は、メインメモリでの前記要素列の先頭アドレスを指定するアドレスレジスタの一例である。
【００５８】
また、モードレジスタ１５１がキーチェック機構の有効を示し、メモリキーバリッドビット（ＭＫＥＹ−ＶＬＤ）が無効である場合、メモリキーを取得するため、Ｌ２要求生成回路１５６がＬ２キャッシュ制御部２０Ａに対してＬ２要求を発行する。なお、図１３では省略されているが、モードレジスタ１５１がキーチェック有効であり、メモリキーバリッドビット（ＭＫＥＹ−ＶＬＤ）が無効である場合、メモリキーを取得するためのＬ２要求発行前に、まず、Ｌ１データキャッシュ１９にメモリキーがキャッシュされているか否かが判定される。そして、メモリキーがキャッシュされていない場合に、Ｌ２要求生成回路１５６がＬ２キャッシュ制御部２０Ａに対してＬ２要求を発行する。
【００５９】
Ｌ２キャッシュ制御部２０Ａはこの要求に対してＬ２キャッシュＲＡＭ部２０Ｂからデータを読み出してＬ２データ応答信号２０１によりＬ１データキャッシュ１９にキャッシュデータを応答する。この応答されたキャッシュデータはライトデータ選択回路３７で選択されてＬ１データキャッシュ１９に書き込まれる。なお、Ｌ２要求信号の発行、及び、Ｌ２データ応答信号２０１の応答、ライトデータ選択回路３７によるＬ１データキャッシュへのデータ書き込み動作は、通常のＬ１キャッシュメモリ登録処理と同様である（図１８ＡのＳ３７、及び図１８ＢのＳ４５参照）。
【００６０】
ＭＫＥＹライト制御ユニット３６は、ＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤフィールド、及びＭＫＥＹフィールドに対する書き込みを制御する回路である。ＭＫＥＹライト制御ユニット３６は、アドレスレジスタ３６１、ＭＫＥＹ−ＶＬＤ生成回路３６２、ＭＫＥＹレジスタ３６３を有する。ＭＫＥＹライト制御ユニット３６及びライトデータ選択回路３７は、メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録する登録回路の一例である。ＴＡＧ部１８Ａは、キャッシュメモリで前記アクセス対象のデータを読み出すためのタグ情報が格納されるタグ部の一例である。
【００６１】
Ｌ１データキャッシュ１９へのデータ登録時（図１８ＡのＳ３７、Ｓ３８のタイミング）では、ＭＫＥＹ−ＶＬＤ生成回路３６２によって値０が生成されてＭＫＥＹ−ＶＬＤフィールドに書き込まれる。この時、アドレスレジスタ３６１にＬ１データＴＡＧをＭＫＥＹ−ＶＬＤ生成回路３６２がアクセスしたときに使用されたアドレスが記憶される。以上によってＬ１データキャッシュ１９のミスヒット時の処理が完了し、中断していたパイプラインが再実行される。
【００６２】
そして、パイプライン再実行後、次のＭＫＥＹ−ＶＬＤ参照時にＭＫＥＹ−ＶＬＤが０
（無効）であって、かつ、Ｌ１データキャッシュにＭＫＥＹデータがキャッシュされているときには（図１８ＢのＳ４６のタイミング）、Ｌ１データキャッシュから読み出されたＭＫＥＹデータがＭＫＥＹレジスタ３６３にセットされる。
【００６３】
そして、図１８ＢのＳ４７のタイミングでは、アドレスレジスタ３６１に記憶されたアドレスが、アドレス選択回路３８で選択される。そして、この選択されたアドレスで指定されるＴＡＧ部１８Ａのエントリに対して、ＭＫＥＹ−ＶＬＤ生成回路３６２によって値１が生成されてＭＫＥＹ−ＶＬＤフィールドにライトされる。さらに、上記指定されるＴＡＧ部１８Ａのエントリに対して、ＭＫＥＹレジスタ３６３にセットされたＭＫＥＹデータがＭＫＥＹフィールドにライトされる。
【００６４】
図１４のように、ＴＡＧ部１８Ａの１エントリは、ＰＡＩＤバリッドビット（ＰＡＩＤ−ＶＬＤ）とＰＡＩＤ部とメモリキーバリッドビット（ＭＫＥＹ−ＶＬＤ）とメモリキー値とを有する。ＰＡＩＤバリッドビットが値０（無効）の場合には、ＰＡＩＤ部は無効であり、Ｌ１データは無効であり、メモリキー値も無効である。ＰＡＩＤバリッドビットが値１（有効）で、メモリキーバリッドビットが値０（無効）の場合、ＰＡＩＤ部は有効であり、ＰＡＩＤ部、すなわちＴＡＧに対応するＬ１データキャッシュ１９には有効なデータがキャッシュされているが、メモリキー値は無効である。一方、メモリキーバリッドビットが値１（有効）の場合、メモリキー値も有効である。
【００６５】
図１５はキーテーブルアドレス生成回路１５５の詳細を例示する。キーテーブルアドレス生成回路１５５は、まず、物理アドレスＰＡからメモリキーのインデックスアドレスを生成する。図９で説明した通り、メモリ領域を確保する最低単位を例えば１２８バイトとした場合、物理アドレスＰＡの有効ビットを７ｂｉｔ  右シフト回路１５５Ａにより７ｂｉｔシフトする事によって、メモリキーのインデックスアドレスが求められる。次に、メモリキーのインデックスアドレスとキーテーブルベースアドレスレジスタ１５４の値を加算回路１５５Ｂで加算する事で、目的とするメモリキーのアドレス（キーテーブルアドレス）が求められる。
【００６６】
ここで、キーテーブルベースアドレスレジスタ１５４はＯＳ３１によって設定される。ＯＳ３１がメインメモリ３０上にメモリキーテーブル３５を割り当てたときに、メモリキーテーブル３５の先頭アドレスをキーテーブルベースアドレスレジスタ１５４に設定すればよい。
【００６７】
図１６はキーチェック回路１５３の詳細図であり、図１７はキーチェック回路１５３の動作真理値表の例である。キーチェック回路１５３は、キーチェックユニット１５内で、メモリキー値とアクセスキー値とを比較する。すでに述べたように、メモリキー値は、ＴＡＧ部１８Ａから読み出される。また、アクセスキー値は、ユーザープログラム３２で実行されるメモリアクセス命令の仮想アドレスＶＡから取得される。アクセスキー値は、図１３に例示したように演算部１２によってアクセスキーレジスタ１５２に設定される。また、モードレジスタ１５１は、キーチェック機構が有効な場合に、値１（有効、真）である。従って、メモリキー値とアクセスキー値とが一致しない場合には、比較回路１５３Ｃの出力が反転され、ＯＲゲート１５３Ｄ及びＡＮＤゲート１５３Ｅにより、トラップ要求がトラップ検出部５１に発行される。トラップ検出部５１は、トラップの発生の要求を受けて、命令シーケンス制御部１１Ａ（図１１参照）を通じてＯＳ３１にトラップを通知する。
【００６８】
一方、メモリキー値とアクセスキー値とが一致する場合には、トラップ要求の発行がされず、メモリアクセスが許可される。また、メモリキー値がＡＬＬ１（０ｘＦＦ）の場合には、比較回路１５３Ｃの比較結果によらず、ＯＲゲート１５３Ｄ及びＡＮＤゲート１５
３Ｅにより、トラップ要求が発行される。さらに、メモリキー値がＡＬＬ０（０ｘ００）の場合には、比較回路１５３Ｃの比較結果によらず、トラップ要求が抑止され、メモリアクセスが許可される。
【００６９】
図１８Ａ、１８Ｂは、ＴＬＢユニット１４、Ｌ１データＴＡＧ１８、Ｌ１データキャッシュ１９、及びキーチェックユニット１５を含むＣＰＵ１０による処理を示すフローチャートである。ＴＬＢユニット１４、Ｌ１データＴＡＧ１８、Ｌ１データキャッシュ１９、及びキーチェックユニット１５はハードウェア回路であるが、その動作シーケンスについてフローチャートにより説明する。また、ＴＬＢユニット１４、Ｌ１データＴＡＧ１８、Ｌ１データキャッシュ１９、及びキーチェックユニット１５は、一次キャッシュパイプライン５０（図１１参照）の中で制御されるため、図１８Ａ、図１８Ｂのフローチャートの各処理は、パイプラインの再実行動作によって、繰り返し実行される。
【００７０】
デコーダ１１Ｃによるデコードの結果、メモリアクセス命令が発行される（Ｓ３１）。すると、まず、ＴＬＢユニット１４において、仮想アドレスＶＡがＴＬＢユニット１４のＴＡＧ部１４Ａでヒットしたか否かが判定される（Ｓ３２）。仮想アドレスＶＡがＴＬＢユニット１４のＴＡＧ部１４Ａでヒットしなかった場合、命令制御部１１は、メインメモリ３０内のアドレス変換テーブル３４からエントリをフェッチしてＴＬＢに登録する（Ｓ３３）。Ｓ３３の処理をＴＬＢリカバリ処理ともいう。このタイミングでは、一次キャッシュパイプライン５０は中断しており、ＴＬＢリカバリ処理後、パイプライン処理が再実行される。そして、次のＳ３２の判定で、仮想アドレスＶＡがＴＬＢユニット１４のＴＡＧ部１４Ａでヒットした場合、ＴＬＢユニット１４において、ＴＡＧ部１４Ａの検索が実行され、データ部１４Ｂから物理アドレスＰＡが取得される（Ｓ３４）。
【００７１】
次に、Ｌ１データＴＡＧ１８において、物理アドレスがＬ１データキャッシュ１９（ＴＡＧ部１８Ａ）にヒットしたか否かが判定される（Ｓ３５）。物理アドレスがＬ１データキャッシュ１９にヒットしなかった場合、Ｌ２要求制御部５２からＬ２要求が発行される（Ｓ３６）。Ｌ２キャッシュ制御部２０Ａはこの要求に対してＬ２キャッシュＲＡＭ部２０Ｂからデータを読み出してＬ１データキャッシュ１９にキャッシュデータを応答する。すると、Ｌ１データＴＡＧ１８の制御回路及びＬ１データキャッシュ１９の制御回路は、応答されたデータとＴＡＧをＬ１データキャッシュ１９及びＬ１データＴＡＧ１８に登録する（Ｓ３７）。このとき、ＭＫＥＹライト制御ユニット３６は、Ｌ１データＴＡＧ１８のＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤに値０を書き込む（Ｓ３８）。さらに、ＭＫＥＹ−ＶＬＤに値０が書き込まれたＴＡＧ部１８ＡのエントリのアドレスがＭＫＥＹライト制御ユニット３６のアドレスレジスタ３６１に保持される。以上によって、Ｌ１データキャッシュ１９がミスヒット場合の処理が完了し、中断していた一次キャッシュパイプライン５０が、再実行される。そして、次のパイプライン処理において、再度Ｓ３５の判定がされる。
【００７２】
Ｓ３５の判定で物理アドレスがＬ１データキャッシュにヒットした場合、キーチェック機構が有効であることをモードレジスタ１５１が示しており（Ｓ３９でＹＥＳ）、かつ、ＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤが値１（有効）でない場合（Ｓ４０でＮＯ）、キーテーブルアドレス生成回路１５５がキーテーブルアドレスを生成する（Ｓ４１）。そして、メモリキーを取得するため、ＭＫＥＹライト制御ユニット３６がキーテーブルアドレスを使用してＬ１データキャッシュにアクセスする（Ｓ４２）。そして、キーテーブルアドレスがＬ１データキャッシュでヒットしない場合（Ｓ４３でＮＯ）、Ｌ２要求生成回路１５６がＬ２キャッシュ制御部２０Ａに対してＬ２要求を発行する（Ｓ４４）。Ｌ２キャッシュ制御部２０Ａはこの要求に対してＬ２キャッシュＲＡＭ部２０Ｂからデータを読み出してＬ２データ応答信号２０１通じてＬ１データキャッシュ１９にキャッシュデータを応答する。この応答データはライトデータ選択回路３７で選択されてＬ１データキャッシュ１
９に書き込まれる（Ｓ４５）。以上によって、Ｌ１データキャッシュ１９がミスヒット場合の処理が完了し、中断していた一次キャッシュパイプライン５０が、再実行される。そして、次のパイプライン処理において、再度Ｓ４３の判定がされる。
【００７３】
Ｓ４３の判定で、キーテーブルアドレスがＬ１データキャッシュでヒットした場合、ＭＫＥＹライト制御ユニット３６は、キャッシュデータ中のメモリキー値を読み出してＴＡＧ部１８Ａに書き込む（Ｓ４６）。次に、ＭＫＥＹライト制御ユニット３６は、ＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤに値１をセットする（Ｓ４７）。以上によって、ＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤが値１（有効）でない場合の処理が完了し、中断していた一次キャッシュパイプライン５０が、再実行される。そして、次のパイプライン処理において、再度Ｓ４０の判定がされる。
【００７４】
Ｓ４０の判定においてＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤが値１（有効）である場合、キーチェック回路１５３は、キーチェックを実行する（Ｓ４８）。Ｓ４８のキーチェックの結果、トラップが発生しない場合、制御は、Ｓ５０に戻り、メモリアクセス命令が実行される。一方、Ｓ４９でトラップ発生の場合、トラップ検出部５１は、命令シーケンス制御部１１Ａ（図１１参照）を通じてＯＳ３１にトラップを通知する。その結果、ユーザープログラム３２が強制終了される。
【００７５】
図１９は、実施形態１におけるＴＬＢユニット１４の構成を例示する。図８で説明した通り、実施形態１では、キーチェック機構が有効に設定されている場合には、ＯＳ３１は、仮想アドレスＶＡ［６３：０］の最上位８ｂｉｔ［６３：５６］に管理領域識別キーを埋め込んで、複数のメモリ割当領域をキーチェックの管理対象領域として識別する。一方、キーチェック機構が無効として設定されている場合には、ＯＳ３１は、仮想アドレスＶＡ［６３：０］には管理領域識別キー［６３：５６］を埋め込まない。このように、実施形態１の情報処理装置では、既存の仮想アドレスＶＡの６４ビット［６３：０］が有効に利用され、キーチェック行うための回路変更ができるだけ回避されている。
【００７６】
その結果、モードレジスタ１５１が値１の場合、メモリの領域割当関数によるシステムコールに応答してＯＳ３１が返す仮想アドレスフォーマットがキー値［６３：５６］ＶＡ［５５：０］となり、ＴＬＢユニット１４のＴＡＧ部１４Ａには、その仮想アドレス（キー［６３：５６］、ＶＡ［５５：０］）が格納される。一方、アドレス変換の対象となる仮想アドレスとしては、メモリの領域割当関数で割り当てられたメモリ領域外のアドレスもあり得る。従って、ＴＬＢユニット１４のＴＡＧ部１４Ａ内には、キー［６３：５６］ＶＡ［５５：０］のアドレスとＶＡ［６３：０］のアドレスが混在することになる。そこで、実施形態１のＴＬＢユニット１４では、モードレジスタ１５１が値１の場合には、キー［６３：５６］のマッチング結果を無視するための構成が設けられる。仮想アドレスのフィールドの一部分に、キー［６３：５６］という仮想アドレスではない情報が埋め込まれるため、ＴＬＢユニット１４の誤動作を回避するためのである。
【００７７】
すなわち、ＴＬＢユニット１４では、キーチェック機構を有効にする場合（モードレジスタ１５１が値１）の場合と、無効にする場合（モードレジスタ１５１が値０）の場合とで、６４ビットの仮想アドレスＶＡ内の最上位８ビット［６３：５６］の情報が異なる。そこで、実施形態１では、キーチェック機構が有効か否かに応じて、ＴＬＢユニット１４は異なる制御を実行する。つまり、キーチェック機構が有効な場合（ｍｏｄｅ＝１）は、仮想アドレスＶＡの最上位８ｂｉｔ［６３：５６］はキーとして有効であり、仮想アドレスＶＡの一部としてみなせない。この場合には、ＴＬＢユニット１４によるＴＬＢ判定において、最上位８ｂｉｔの比較結果が無視される。キーチェック機構が無効な場合（ｍｏｄｅ＝０）は、仮想アドレスＶＡの最上位８ｂｉｔ［６３：５６］は仮想アドレスＶＡの一部として有効である。この場合には、ＴＬＢ判定では最上位８ｂｉｔ［６３：５６］の
比較結果がＴＬＢ判定に反映される。
【００７８】
図１９のＴＬＢユニット１４のＴＡＧ比較器１４Ｃは、仮想アドレスＶＡのキー部分［６３：５６］以外の情報［５５：０］を比較する比較器１４６＿１と、キー部分［６３：５６］を比較する比較器１４６＿２とに分けられている。さらに、ＴＡＧ比較器１４Ｃは、キー部分［６３：５６］の比較器１４６＿２の出力と、モードレジスタ１５１の論理和を演算するＯＲゲート１４９とを有し、比較器１４７、１４６＿１とＯＲゲート１４９の出力がＡＮＤゲート１４８に入力されている。ＴＡＧ比較器１４Ｃの動作は以下のとおりである。
（１）キーチェック有効フラグが有効（ｍｏｄｅ＝１）の場合；
【００７９】
仮想アドレスＶＡの最上位８ｂｉｔ［６３：５６］はキーとして有効であり、仮想アドレスＶＡの一部とみなせない。そこで、ＴＡＧ比較器１４Ｃは、有効フラグ（ｍｏｄｅ＝１）によりＯＲゲート１４９から一致したことを示すマッチ出力（１）が出力され、仮想アドレスＶＡの最上位８ｂｉｔ［６３：５６］のキーの比較器１４６＿２の比較結果が無視される。これにより、比較器１４６＿２の出力が不一致の場合でも、比較器１４７と１４６＿１の出力がともに一致（１）であれば、ＴＡＧ部１４Ａの一致、つまりＴＬＢでのヒット（ＴＬＢ  ｍｃｈ）がＡＮＤゲート１４８から出力される。
（２）キーチェック有効フラグが無効（ｍｏｄｅ＝０）の場合；
【００８０】
仮想アドレスＶＡの最上位８ｂｉｔ［６３：５６］はキーとして無効であり、仮想アドレスＶＡの一部とみなすべきであるので、ＴＡＧ比較器１４Ｃは、有効フラグ（ｍｏｄｅ＝０）によりＯＲゲート１４９から比較器１４６＿２の出力がそのまま出力され、仮想アドレスＶＡの最上位４８ｂｉｔのＩＤの比較器１４６＿２の比較結果がＴＬＢマッチに反映される。これにより、比較器１４７、１４６＿１、１４６＿２の出力が全て一致した場合に、ＴＡＧ部１４Ａの一致、つまりＴＬＢでのヒット（ＴＬＢ  ｍｃｈ）がＡＮＤゲート１４８から出力される。
＜実施形態１の効果＞
【００８１】
実施形態１の演算処理装置によれば、キーチェック回路１５３が演算部１２から指定されるアクセスキーとＬ１データＴＡＧ１８に保存されたメモリキーとを比較する。アクセスキー及びメモリキーは、演算部１２を含むＣＰＵ１０で実行されるプログラムがＯＳ３１に領域割当関数で領域の割り当てを依頼したときに、ＯＳ３１が割り当てられる領域ごとに生成した領域識別情報である。ＯＳ３１は、この領域識別情報をアクセスキーとして、割り当てた領域の先頭アドレスともにプログラムに引き渡す。一方、ＯＳ３１は、この領域識別情報を割り当てた領域に対応するメモリキーテーブル３５のエントリに格納する。そして、割り当てられた領域のデータがＬ１データキャッシュ１９に登録されるときに、ＭＫＥＹライト制御ユニット３６がメモリキーテーブル３５に格納されたメモリキーを登録されるデータのメインメモリ３０上のアドレスに対応するＬ１データＴＡＧ１８のＴＡＧ部１８Ａに格納するのである。従って、このプログラムを実行するＣＰＵ１０は、割り当てた領域に対するアクセスキーを有するプログラムからのアクセスか否かを判定でき、不正アクセスを検知できる。すなわち、ＣＰＵ１０は、プログラムに不具合や誤ったコードが存在した結果に基づく、メモリ領域不正アクセスによるメモリ破壊、あるいは不具合を抑止できる。また、ＣＰＵ１０は、ハードウェアの制御回路によって、ＯＳ３１及びプログラムに対して、上記不正アクセスを検知する機能を提供できる。
【００８２】
また、ＣＰＵ１０は、メインメモリ３０におけるメモリキーテーブル３５の先頭アドレスを保持するキーテーブルベースアドレスレジスタ１５４を有する。従って、キーテーブルアドレス生成回路１５５は、キーテーブルベースアドレスレジスタ１５４を基に、Ｌ１データキャッシュ１９に登録されるデータに対応するメモリキーのアドレスを生成できる
。一方、ＯＳ３１は、キーテーブルベースアドレスレジスタ１５４にメモリキーテーブル３５の先頭アドレスを設定する。この設定によって、ＯＳ３１は、キーテーブルアドレス生成回路１５５にメモリキーのアドレスを生成させ、ＭＫＥＹライト制御ユニット３６にメモリキーをＬ１データＴＡＧ１８のＴＡＧ部１８Ａに登録させることができる。
【００８３】
また、実施形態１では、メモリキー及びメモリキーバリッドビット（ＭＫＥＹ−ＶＬＤ）はＬ１データＴＡＧ１８のＴＡＧ部１８Ａに登録される。ＴＡＧ部１８Ａは、Ｌ１データキャッシュ１９と比較して容量が小さいので、メモリキー及びメモリキーバリッドビット（ＭＫＥＹ−ＶＬＤ）を格納する領域を付与するための設計の自由度があり、変更が容易である。
［実施形態２］
【００８４】
上記実施形態１では、単一のプロセス内でのアプリケーションプログラム実行時のメインメモリ３０への不正なアクセスを検出するキーチェック機構が例示された。実施形態２では、メモリの領域にＲｅａｄ  Ｏｎｌｙ、またはＲｅａｄ／Ｗｒｉｔｅ可能の属性を与えられた場合の不正なアクセスを検出するチェック機構が例示される。
すなわち、実施形態２では以下の処理が例示される。
（１）複数のプロセス間で、データをやり取りするプロセス間通信での情報処理が想定される。
（２）複数のプロセスからの要求に応じてプロセス間シェアード・メモリを生成する機能を持つメモリ・マネージャが導入される。
（３）プロセス間通信で使うシェアード・メモリの一使用例として、プロセス間でデータを受け渡す際に一方のプロセスはＲｅａｄ及びＷｒｉｔｅを実行する。また、他方のプロセスはＲｅａｄ  Ｏｎｌｙで受け渡されたデータを参照する。
（４）生成されたシェアード・メモリにアクセスする個々のプロセスに対して、ＯＳ３１はＲｅａｄ  Ｏｎｌｙ、またはＲｅａｄ／Ｗｒｉｔｅ可能のアクセス権限を許可することができる。実施形態１と同様のキーチェック機構の導入により、Ｒｅａｄ  Ｏｎｌｙしか許可されていないプロセスが、誤ってＷｒｉｔｅを行ってデータを破壊する事を防止する事ができる。ただし、実施形態２のキーチェック機構は、実施形態１のキーチェック機構に加えて、Ｒｅａｄ  Ｏｎｌｙ、またはＲｅａｄ／Ｗｒｉｔｅ可能のアクセス権限をチェックしてもよい。
【００８５】
図２０は、実施形態２におけるプロセスの関係を例示する。例えば、プロセス＃１で実行されるアプリケーションプログラム  ＡＰＰＬ＃１  ３２−１は、ＯＳ３１のメモリ・マネージャにＲｅａｄ／Ｗｒｉｔｅアクセス可能なメモリ獲得要求を行い、獲得された先頭アドレスのポインタを取得する。獲得されたメモリ領域ＡＲ１は、プロセス間シェアード・メモリとされる。プロセス＃１は、メモリ領域ＡＲ１にＲｅａｄ／Ｗｒｉｔｅアクセスが可能である。
【００８６】
一方、プロセス＃２で実行されるアプリケーションプログラム  ＡＰＰＬ＃２  ３２−２は、ＯＳ３１のメモリ・マネージャに、Ｒｅａｄ  Ｏｎｌｙでアクセス可能なメモリ獲得要求を行い、獲得された先頭アドレスのポインタを取得する。獲得されたメモリ領域ＡＲ２も、プロセス間シェアード・メモリとされる。プロセス＃２は、メモリ領域ＡＲ２にＲｅａｄアクセスが可能である。実施形態２では、図２０のような環境でのチェック機構が例示される。
【００８７】
なお、図２０では、複数のプロセス＃１、＃２が例示されている。しかし、ＣＰＵ１０によるチェック機構の適用が図２０の例に限定される訳ではない。例えば、単一のプロセスが、Ｒｅａｄ  Ｏｎｌｙの属性またはＲｅａｄ／Ｗｒｉｔｅ可能な属性が付与されている異なるメモリの領域にアクセスする場合にも、以下の実施形態２のチェック機構が適用
できる。Ｒｅａｄ  Ｏｎｌｙの属性またはＲｅａｄ／Ｗｒｉｔｅ可能な属性をアクセス権限ともいう。
【００８８】
図２０では、プロセス＃１（ＡＰＰＬ＃１  ３２−１）、プロセス＃２（ＡＰＰＬ＃２
３２−２）がメモリ獲得要求と共にアクセス権限を要求したが、本演算処理装置は、このような処理に限定される訳ではない。一方のプロセス、例えば、プロセス＃１（ＡＰＰＬ＃１  ３２−１）が他方のプロセス、例えば、プロセス＃２（ＡＰＰＬ＃２  ３２−２）のアクセス権限を所定のファイル、共有メモリ等に設定し、ＯＳ３１に引き渡すようにしてもよい。ＯＳ３１は、プロセス＃１（ＡＰＰＬ＃１  ３２−１）の設定に従って、プロセス＃２（ＡＰＰＬ＃２  ３２−２）からのメモリ獲得要求に対して、割り当てた領域にアクセス権限（Ｒｅａｄ  Ｏｎｌｙ属性、あるいは、Ｒｅａｄ／Ｗｒｉｔｅ可能な属性等）を設定してもよい。また、ＯＳ３１は、プロセス＃１（ＡＰＰＬ＃１  ３２−１）、プロセス＃２（ＡＰＰＬ＃２  ３２−２）以外の第３のプロセスの設定に従って、プロセス＃１（ＡＰＰＬ＃１  ３２−１）、プロセス＃２（ＡＰＰＬ＃２  ３２−２）に割り当てた領域にアクセス権限等の属性を設定してよい。
【００８９】
図２１は、実施形態２の仮想アドレスの構成を例示する。ところで、実施形態１では、図８に、ＯＳ３１がユーザープログラム３２に返す先頭アドレスのフォーマットを例示した。実施形態２では、図８でのアドレスフォーマットＦ１が、図２２のアドレスフォーマットＦ３に変更される。Ｆ２では、Ｆ１と比べてアクセスキー値が７ビットに減り、最上位にＲＯビット（Ｒｅａｄ  Ｏｎｌｙ  ｂｉｔ）が追加される。
【００９０】
図２２は、実施形態２におけるメモリキーの構成を例示する。実施形態１の図１０のメモリキーテーブル中のメモリキーのフォーマットが、実施形態２では図２２の様に変更される。図２２では、メモリテーブル中のメモリキー値が７ビットに減り、ＲＯビット（Ｒｅａｄ  Ｏｎｌｙ  ｂｉｔ）が追加される。
【００９１】
図２３に実施形態２のＴＡＧ部１８Ａの１エントリのフォーマットを例示する。実施形態１の図１４のＴＡＧ部１８Ａのエントリのフォーマットが、実施形態２では図２３の様に変更される。図２３では、メモリキー値が７ビットに減り、ＲＯビット（Ｒｅａｄ  Ｏｎｌｙ  ｂｉｔ）が追加される。
【００９２】
図２４に実施形態２のキーチェック回路１５７の動作真理値表を例示する。実施形態１の図１７のキーチェック回路１５３の動作真理値表が、実施形態２では図２４の様に変更される。すなわち、メモリキーのＲＯビットまたはアクセスキーのＲＯビットが値１の場合には、実行命令種がＳｔｏｒｅ系つまりデータの書込みを実行する命令に対して、不許可のトラップが発生する。一方、実行命令種がＬｏａｄ系つまりデータの読み出しを実行する命令に対しては、実施形態１と同様、メモリキー値とアクセスキー値との比較結果が不一致の場合に、不許可のトラップが発生する。キーチェック回路１５７は、メインメモリにアクセスする命令を実行するときにアクセス先のアドレス及び前記アクセス情報と共に指定される権限範囲情報とアクセス対象のデータ及び前記識別情報と共に前記キャッシュメモリに登録されている権限範囲情報とをさらに比較する処理を実行する回路の一例である。
【００９３】
図２５は、実施形態２におけるＬ１データＴＡＧ１８、Ｌ１データキャッシュ１９、及びキーチェックユニット１５の構成を例示する図である。実施形態２では、モードレジスタ１５１Ａには、実施形態１で例示されたキーチェック有効ビットに加えて、実行命令種情報が追加される。この実行命令種情報は例えば１ビットの情報である。実行命令種情報の値が１の時は、演算部１２がストア命令を実行する事を示し、また、実行命令種情報の値が０の時は、演算部１２がロード命令を実行する事を示す。演算部１２は、命令実行時
に、モードレジスタ１５１Ａに実行命令種情報を設定する。
【００９４】
さらに、アクセスキーレジスタ１５２Ａには、実施形態１で例示されたメモリアクセス時のアクセスキーに加えて、図２１に示す通り、ＲＯビットが追加される。ユーザープログラム３２は、領域割当関数によって割り当てられた領域のポインタの一部として、ＲＯビットを受けて取る。また、ユーザープログラム３２は、ＲＯビット、アクセスキーが付加されたポインタによって割り当てられた領域にアクセスする。演算部１２は、ユーザープログラム３２のアクセスによるメモリアクセス命令のオペランドから、ＲＯビットを取得し、アクセスキーと共に、アクセスキーレジスタ１５２Ａに設定する。このＲＯビットはアクセスキーレジスタ１５２Ａに記憶されたアクセスキー値と共にキーチェック回路１５７に供給される。
【００９５】
さらに、ＴＡＧ部１８Ａには、実施形態１で例示された各フィールドに加えて、ＲＯビットが追加される。このＲＯビットはＴＡＧ部１８Ａに記憶されたメモリキー値と共にキーチェック回路１５７に供給される。ＯＳ３１は、領域割当関数によるシステムコールによる領域割り当て時に、ユーザープログラム３２等からの指定、所定ファイルの設定パラメータ等に従ってＲＯビットを生成し、領域識別情報と共にメモリキーテーブル３５のエントリに登録すればよい。ＭＫＥＹライト制御ユニット３６は、実施形態１と同様の手順（図１３、図１８Ａ、図１８Ｂ）で、メモリキーテーブル３５からＬ１データキャッシュ１９にキャッシュされたＲＯビットとメモリキーとをＴＡＧ部１８Ａに書き込む。ライトデータ選択回路３７によるＬ１データキャッシュ１９への書込みとＭＫＥＹライト制御ユニット３６によるＲＯビットのＴＡＧ部１８Ａへの書込みとは、「メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して格納されている権限範囲情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録」することの一例である。ＲＯビットは、権限範囲情報の一例である。
【００９６】
図２６は、実施形態２のキーチェック回路１５７の構成を例示する。実施形態２のキーチェック回路１５７は、実施形態１のキーチェック回路１５３（図１６）に対して、ＯＲゲート１５３Ｆ及びＡＮＤゲート１５３Ｇが追加されている。そして、キーチェック回路１５７は、実施形態１の各種情報に加えて、モードレジスタ１５１Ａから実行命令種情報、アクセスキーレジスタ１５２Ａからアクセスキー値に付随したＲＯビット、さらにＴＡＧ部１８Ａからメモリキー値に付随したＲＯビットを受け取る。
【００９７】
ＯＲゲート１５３Ｆは、アクセスキーレジスタ１５２からのアクセスキー値に付随したＲＯビットと、ＴＡＧ部１８Ａからのメモリキー値に付随したＲＯビットの論理和を実行する。また、ＡＮＤゲート１５３Ｇは、モードレジスタ１５１からの実行命令種情報と、ＯＲゲート１５３Ｆの出力との論理積を実行する。
【００９８】
そして、キーチェック回路１５７は、モードレジスタ１５１Ａの動作モードがキーチェック機構有効であって、メモリキー値がＡＬＬ０以外の場合には、アクセスキーによる判定に加えてＲＯビットによる判定が実行される。すなわち、実行命令種がＳｔｏｒｅ系の命令の場合であって、Ｌ１データＴＡＧ１８からのＲＯビットが１であるか、または実行アドレス生成器１２Ａからアクセスキーと共に引き渡されるＲＯビットまたはアクセスキービットが１である場合には、ＯＲゲート１５３ＦとＡＮＤゲート１５３Ｇとにより、トラップ要求が発生する。ＯＲゲート１５３ＦとＡＮＤゲート１５３Ｇによる回路は、「メインメモリにアクセスする命令を実行するときに、前記アクセスする命令の種類と前記アクセス先のアドレスと共に指定される権限範囲情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている権限範囲情報とが所定の条件を充足するか否かを判定する判定回路」の一例である。
【００９９】
すなわち、キーチェック回路１５７は、図２４に示す動作真理値表に従ってキーチェックが実施されてトラップが発生するか否かをチェックする。キーチェック回路１５７は、トラップ発生条件が充足されると、トラップ検出部５１にトラップの発生を要求する。トラップ検出部５１は、トラップの発生の要求を受けて、命令シーケンス制御部１１Ａ（図１１参照）を通じてＯＳ３１にトラップを通知する。図２６において、トラップ検出部５１からＯＳへのトラップの通知は、所定の条件が充足されるときに前記メインメモリにアクセスする命令の実行を停止させることの一例である。
【０１００】
図２７は、実施形態２のＣＰＵ１０を含む情報処理装置で実行されるＯＳ３１の処理を例示するフローチャートである。ＯＳ３１は、アプリケーションプログラム等のユーザープログラムから、領域割当関数によるシステムコールを受信する（Ｓ１２１）。ＯＳ３１は、Ｓ１２１のシステムコールによりメモリ領域を確保する（１２２）。次に、ＯＳ３１は、ＲＯビットを含んだキー値を生成する（Ｓ１２３）。ここで、ＲＯビットは、Ｓ１２１の領域割当関数を呼び出したユーザープログラムによって指定されてもよい。また、Ｓ１２１の領域割当関数を呼び出したユーザープログラム以外の他のプログラムが、所定のファイル、あるいは共有メモリ等において、Ｓ１２１の領域割当関数を呼び出したユーザープログラムのプロセスに対して、ＲＯビットを指定してもよい。ＯＳ３１は、それぞれのプロセスからの領域割当関数によるシステムコールに対して、所定のファイル、あるいは共有メモリ等における指定に従ってＲＯビットを含んだキー値を生成すればよい。
【０１０１】
次に、ＯＳ３１は、ＲＯビットを含んだキー値によってメインメモリ３０上のメモリキーテーブル３５を更新する（Ｓ１２４）。そして、ＯＳ３１は、ユーザープログラムにＲＯビットを含んだアクセスキー値付き仮想アドレスを返す（Ｓ１２５）。ユーザープログラムは、以降の処理において、ＲＯビットを含んだアクセスキー値付き仮想アドレスにより、割り当てられた領域にアクセスすればよい。Ｓ１２４の処理は、第１のプロセス（３２）からの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域へのアクセス権限の範囲を示す権限範囲情報を前記割り当てられる領域に対応して前記メインメモリに格納することの一例である。Ｓ１２５の処理は、割り当てられた領域のアドレスと共に前記権限範囲情報を前記第１のプロセスに引き渡すことの一例である。
＜実施形態２の効果＞
【０１０２】
以上により実施形態２では、メモリの領域割当関数からのシステムコールに応答して、ＯＳ３１がアクセスキー値の最上位ビットをＲＯビットとして使用する。ＯＳ３１は、アクセスキー値をユーザープログラム３２に返す時、読み出しのみを許可する（書き込みは許可しない）ユーザープログラム３２に対しては、ＲＯビットを値１にして渡す。または、書き込み及び読み出しの両方を許可するユーザープログラム３２に対しては、ＯＳ３１は、ＲＯビットを値０にして渡す。
【０１０３】
もし、割り当てられたメモリ領域に書き込みを許可していないユーザープログラム３２が当該メモリ領域にリードを行った場合にはリード命令は、図２４に示される通り正常に実行される。一方、同メモリ領域に書き込みを許可していないユーザープログラム３２が当該メモリ領域にライトを行った場合は、ライト命令に対して図２４に示される通り、トラップが発生して命令は実行されず、メモリの破壊が防止される。
【０１０４】
なお、上記実施形態１では、アクセス権限の例として、ＲＯビットを例示したが、ＣＰＵ１０の処理は、ＲＯビットに限定されるものではない。また、実施形態２では、ＲＯビットは、アクセスキー値、メモリキー値の最上位ビット部分に設定された。しかし、アクセスキー値、メモリキー値とは分離して、ＲＯビット等のアクセス権限だけを仮想ドレス
に組み込むようにしてもよい。
【符号の説明】
【０１０５】
１０      ＣＰＵ
１１      命令制御部
１１Ｂ    命令フェッチ回路
１１Ｃ    デコーダ
１２      演算部
１２Ａ    実行アドレス生成器
１４      ＴＬＢユニット
１４Ａ    ＴＬＢのＴＡＧ部
１４Ｂ    ＴＬＢのデータ部
１４Ｃ    タグ比較器
１５      キーチェックユニット
１６      Ｌ１命令ＴＡＧ
１７      Ｌ１命令キャッシュ
１８      Ｌ１データＴＡＧ
１８Ａ    Ｌ１データＴＡＧ１８のＴＡＧ部
１８Ｂ    Ｌ１データＴＡＧ１８のＴＡＧ比較器１８Ｂ
１９      Ｌ１データキャッシュ
２０Ａ    Ｌ２キャッシュ制御回路
２０Ｂ    Ｌ２キャッシュＲＡＭ部
３０      メインメモリ
３５      メモリキーテーブル
３６      ＭＫＥＹライト制御ユニット
３７      ライトデータ選択回路
３８      アドレス選択回路
５１      トラップ検出部
５２      Ｌ２要求制御部
１５１      モードレジスタ
１５２      アクセスキーレジスタ
１５３      キーチェック回路
１５４      キーテーブルベースアドレスレジスタ
１５７      キーチェック回路
【図１】
2017167582.tif 000003
【図２】
2017167582.tif 000004
【図３】
2017167582.tif 000005
【図４】
2017167582.tif 000006
【図５】
2017167582.tif 000007
【図６】
2017167582.tif 000008
【図７】
2017167582.tif 000009
【図８】
2017167582.tif 000010
【図９】
2017167582.tif 000011
【図１０】
2017167582.tif 000012
【図１１】
2017167582.tif 000013
【図１２】
2017167582.tif 000014
【図１３】
2017167582.tif 000015
【図１４】
2017167582.tif 000016
【図１５】
2017167582.tif 000017
【図１６】
2017167582.tif 000018
【図１７】
2017167582.tif 000019
【図１８Ａ】
2017167582.tif 000020
【図１８Ｂ】
2017167582.tif 000021
【図１９】
2017167582.tif 000022
【図２０】
2017167582.tif 000023
【図２１】
2017167582.tif 000024
【図２２】
2017167582.tif 000025
【図２３】
2017167582.tif 000026
【図２４】
2017167582.tif 000027
【図２５】
2017167582.tif 000028
【図２６】
2017167582.tif 000029
【図２７】
2017167582.tif 000030
【手続補正書】
【提出日】平成29年3月3日(2017.3.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メインメモリにアクセスする演算処理装置であって、
前記メインメモリに格納されたデータを一時的に登録するキャッシュメモリと、
前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録する登録回路と、
前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスと共に指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較する比較回路と、
前記比較の結果に応じて、前記メインメモリにアクセスする命令の実行を停止させるアクセス制限回路と、を備える演算処理装置。
【請求項２】
第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域を識別する識別情報を生成して前記メインメモリの所定領域に格納すると共に、前記割り当てられた領域のアドレスと共に前記生成された識別情報を前記割り当てられた領域へアクセスするときに指定されるアクセス情報として前記第１のプロセスに引き渡す第２のプロセスを実行する実行部をさらに備える請求項１に記載の演算処理装置。
【請求項３】
前記識別情報は、前記メインメモリの固定長のブロック列に対応するメインメモリ上の要素列に格納され、
前記演算処理装置は、さらに、前記メインメモリでの前記要素列の先頭アドレスを指定するアドレスレジスタを有する請求項１または２に記載の演算処理装置。
【請求項４】
第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域へのアクセス権限の範囲を示す権限範囲情報を前記割り当てられる領域に対応して前記メインメモリに格納すると共に、前記割り当てられた領域のアドレスと共に前記権限範囲情報を前記第１のプロセスに引き渡す第２のプロセスを実行する実行部をさらに備え、
前記登録回路は、前記メインメモリに格納されたデータを前記キャッシュメモリに登録
する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して格納されている権限範囲情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録し、
前記比較回路は、前記メインメモリにアクセスする命令を実行するときに、前記アクセスする命令の種類と前記アクセス先のアドレスと共に指定される権限範囲情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている権限範囲情報とが所定の条件を充足するか否かを判定する判定回路を有し、
前記アクセス制限回路は、前記所定の条件が充足されるときに前記メインメモリにアクセスする命令の実行を停止させる請求項１に記載の演算処理装置。
【請求項５】
前記登録回路は、前記キャッシュメモリで前記アクセス対象のデータを読み出すためのタグ情報が格納されるタグ部に前記識別情報を格納する請求項１から４のいずれか１項に記載の演算処理装置。
【請求項６】
メインメモリと、
前記メインメモリに記憶された命令列を含むプロセスを実行すると共に前記メインメモリに記憶されたデータにアクセスする演算処理装置と、を備え、
前記演算処理装置は、
第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域を識別する識別情報を生成して前記メインメモリの所定領域に格納すると共に、前記割り当てられた領域のアドレスと共に前記識別情報を前記割り当てられた領域へアクセスするときに指定されるアクセス情報として前記第１のプロセスに引き渡す第２のプロセスを実行する実行部と、
前記メインメモリのデータを一時的に登録するキャッシュメモリと、
前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録する登録回路と、
前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスと共に指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較する比較回路と、
前記比較の結果に応じて、前記アクセス命令の実行を停止させるアクセス制限回路と、を備える情報処理装置。
【請求項７】
メインメモリに格納されたデータを一時的に登録するキャッシュメモリを備える演算処理装置の制御方法であって、
前記メインメモリに格納されたデータを前記キャッシュメモリに登録する時に、前記メインメモリ上で前記登録されるデータが格納されている領域に対応して設定されている識別情報を取得し、前記登録されるデータと共に前記キャッシュメモリに登録し、
前記メインメモリにアクセスする命令を実行するときにアクセス先のアドレスと共に指定されるアクセス情報とアクセス対象のデータと共に前記キャッシュメモリに登録されている識別情報とを比較し、
前記比較の結果に応じて、前記メインメモリにアクセスする命令の実行を停止させる、演算処理装置の制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
図１１で説明したように、命令制御部１１によって、ロード命令、ストア命令等のメモリアクセス命令が実行される時、ＴＬＢユニット１４でのアドレス変換動作と並行して、ＴＡＧ部１８Ａがアクセスされる。この時、命令制御部１１からの仮想アドレス（下位ビット）が出力され、アドレス選択回路３８で命令制御部１１からのアドレスが選択され、ＴＡＧ部１８Ａと、Ｌ１データキャッシュ１９が同時にアクセスされる。ＴＡＧ部１８Ａから出力されるＰＡＩＤ−ＶＬＤが値１である時、ＴＡＧ比較器１８ＢによってＴＬＢから出力されるＰＡとＴＡＧ部１８Ａから出力されるＰＡＩＤが比較される。比較の結果が一致している場合、Ｌ１データキャッシュヒットであるので、Ｌ１データキャッシュ１９から読み出されたキャッシュデータが演算部１２に応答される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００５６
【補正方法】変更
【補正の内容】
【００５６】
キーチェック回路１５３は、モードレジスタ１５１の値（有効、無効）、アクセスキーレジスタ１５２のアクセスキー値、及びＴＡＧ部１８Ａからのキャッシュヒット時のメモリキー値を受け取って実行中のメモリアクセスが許可されるか、許可されないかを検査する。アクセスキーレジスタ１５２には、演算部１２の実行アドレス生成器１２Ａによって生成されたアクセスキーがロードされている。Ｌ１データＴＡＧ１８は、実行アドレス生成器１２Ａからの仮想アドレスＶＡ及びＴＬＢユニット１４からの物理アドレスＰＡに基づいてＴＡＧ部１８Ａを検索し、物理アドレスＰＡがヒットすると、メモリキー値を出力する。キーチェックユニット１５は、アクセスキーレジスタ１５２にロードされたアクセスキー値と、Ｌ１データＴＡＧ１８ヒット時のメモリキー値とを比較し、キーチェック機構としての処理を実行する。キーチェック回路１５３の動作については、図１６に従って後述する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００７３
【補正方法】変更
【補正の内容】
【００７３】
Ｓ４３の判定で、キーテーブルアドレスがＬ１データキャッシュでヒットした場合、ＭＫＥＹライト制御ユニット３６は、キャッシュデータ中のメモリキー値を読み出してＭＫＥＹレジスタ３６３にセットする（Ｓ４６）。そして、ＭＫＥＹライト制御ユニット３６は、アドレスレジスタ３６１で指定される、Ｌ１データＴＡＧ１８のＴＡＧ部１８Ａのエントリにメモリキー値を書き込む。次に、ＭＫＥＹライト制御ユニット３６は、ＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤに値１をセットする（Ｓ４７）。以上によって、ＴＡＧ部１８ＡのＭＫＥＹ−ＶＬＤが値１（有効）でない場合の処理が完了し、中断していた一次キャッシュパイプライン５０が、再実行される。そして、次のパイプライン処理において、再度Ｓ４０の判定がされる。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００８０
【補正方法】変更
【補正の内容】
【００８０】
仮想アドレスＶＡの最上位８ｂｉｔ［６３：５６］はキーとして無効であり、仮想アドレスＶＡの一部とみなすべきであるので、ＴＡＧ比較器１４Ｃは、有効フラグ（ｍｏｄｅ＝０）によりＯＲゲート１４９から比較器１４６＿２の出力がそのまま出力され、仮想アドレスＶＡの最上位８ｂｉｔのキーの比較器１４６＿２での比較結果がＴＬＢマッチに反映される。これにより、比較器１４７、１４６＿１、１４６＿２の出力が全て一致した場合に、ＴＡＧ部１４Ａの一致、つまりＴＬＢでのヒット（ＴＬＢ  ｍｃｈ）がＡＮＤゲート１４８から出力される。
＜実施形態１の効果＞
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００８９
【補正方法】変更
【補正の内容】
【００８９】
図２１は、実施形態２の仮想アドレスの構成を例示する。ところで、実施形態１では、図８に、ＯＳ３１がユーザープログラム３２に返す先頭アドレスのフォーマットを例示した。実施形態２では、図８でのアドレスフォーマットＦ１が、図２２のアドレスフォーマットＦ３に変更される。Ｆ３では、Ｆ１と比べてアクセスキー値が７ビットに減り、最上位にＲＯビット（Ｒｅａｄ  Ｏｎｌｙ  ｂｉｔ）が追加される。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１０１
【補正方法】変更
【補正の内容】
【０１０１】
次に、ＯＳ３１は、ＲＯビットを含んだキー値によってメインメモリ３０上のメモリキーテーブル３５を更新する（Ｓ１２４）。そして、ＯＳ３１は、ユーザープログラムにＲＯビットを含んだアクセスキー値付き仮想アドレスを返す（Ｓ１２５）。ユーザープログラムは、以降の処理において、ＲＯビットを含んだアクセスキー値付き仮想アドレスにより、割り当てられた領域にアクセスすればよい。Ｓ１２４の処理は、第１のプロセスからの要求に従って前記メインメモリ上で領域を割り当てる処理を実行するときに前記割り当てられる領域へのアクセス権限の範囲を示す権限範囲情報を前記割り当てられる領域に対応して前記メインメモリに格納することの一例である。Ｓ１２５の処理は、割り当てられた領域のアドレスと共に前記権限範囲情報を前記第１のプロセスに引き渡すことの一例である。
＜実施形態２の効果＞
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１０４
【補正方法】変更
【補正の内容】
【０１０４】
なお、上記実施形態２では、アクセス権限の例として、ＲＯビットを例示したが、ＣＰＵ１０の処理は、ＲＯビットに限定されるものではない。また、実施形態２では、ＲＯビットは、アクセスキー値、メモリキー値の最上位ビット部分に設定された。しかし、アクセスキー値、メモリキー値とは分離して、ＲＯビット等のアクセス権限だけを仮想アドレ
スに組み込むようにしてもよい。
【手続補正９】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2017167582.tif 000031
【手続補正１０】
【補正対象書類名】図面
【補正対象項目名】図２０
【補正方法】変更
【補正の内容】
【図２０】
2017167582.tif 000032
【手続補正１１】
【補正対象書類名】図面
【補正対象項目名】図２５
【補正方法】変更
【補正の内容】
【図２５】
2017167582.tif 000033