(57)【要約】【課題】メモリ破壊の発生を検出する。【解決手段】演算処理装置は，メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，メモリ内にメモリ割当領域を確保し，メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録する割当部と，メモリ割当領域に対するメモリアクセス命令の実行に応答して，アドレスレンジテーブルを参照して，メモリアクセス命令のアクセス先アドレスがアドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う判定部とを有する。【選択図】図１０
2015060499.tif 000002
【特許請求の範囲】
【請求項１】
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録する割当部と，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う判定部とを有する演算処理装置。
【請求項２】
請求項１において，
前記割当部は，前記メモリ領域割当関数を識別する管理領域識別情報を前記アドレス範囲情報と共に前記アドレスレンジテーブルに登録し，
前記メモリ割当領域に対するメモリアクセス命令は前記管理領域識別情報とアクセス先アドレスとを有し，
前記判定部は，前記メモリアクセス命令の実行に応答して，前記メモリアクセス命令のアクセス先アドレスが，前記アドレスレンジテーブル内の前記メモリアクセス命令の管理領域識別情報に対応するアドレス範囲情報が示すアドレス範囲内にあるか否かを判定する演算処理装置。
【請求項３】
請求項２において，
前記割当部は，アドレスレンジチャックを必要とするメモリ領域割当関数の実行に応答して，第１の管理領域識別情報群のうちいずれかの管理領域識別情報を前記アドレス範囲情報と共に前記アドレスレンジテーブルに登録し，前記アドレスレンジチェックを必要としないメモリ領域割当関数の実行に応答して，前記第１の管理領域識別情報群と区別可能な第２の管理領域識別情報を前記アドレス範囲情報と共に前記アドレスレンジテーブルに登録し，
前記判定部は，前記メモリアクセス命令の実行に応答して，前記メモリアクセス命令が保持する管理領域識別情報が前記第２の管理領域識別情報の場合には，前記アクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報を示すアドレス範囲内にあるか否かの判定に係わらず，アドレス範囲外とは判定しない演算処理装置。
【請求項４】
請求項１において，
更に，メモリアクセス命令の実行に応答して，前記メモリアクセス命令のアクセス先アドレスを物理アドレスに変換するアドレス変換参照テーブルを参照して，前記アクセス先アドレスに対応する物理アドレスを出力するアドレス変換ユニットを有し，
前記判定部を前記アドレス変換ユニットとが，同じパイプラインステージに設けられている演算処理装置。
【請求項５】
請求項１において，
前記アドレスレンジテーブルが前記メモリ内に記憶され，
前記判定部は，キャッシュパイプラインに設けられ，前記アドレスレンジテーブル内の所定数のエレメントのアドレス範囲情報が登録されるアドレスレンジレジスタを有し，前記判定処理において，前記アドレスレンジレジスタを参照して判定する第１の判定を行い，前記第１の判定にて前記アクセス先アドレスが前記アドレスレンジレジスタ内に登録されているアドレス範囲情報が示すアドレス範囲内にない場合に，前記アドレスレンジテーブルを参照して判定する第２の判定を起動する演算処理装置。
【請求項６】
請求項５において，
前記判定部は，前記第２の判定をオペレーションシステムに実行させる演算処理装置。
【請求項７】
請求項５において，
前記判定部は，前記アドレスレンジテーブル内のエレメントのアドレス範囲情報を順番に読み出して前記アドレスレンジレジスタに登録するテーブルウオーク回路を有し，前記第２の判定を前記登録されたアドレスレンジレジスタのアドレス範囲情報に基づいて実行する演算処理装置。
【請求項８】
請求項５において，
コンテキストごとにアドレスレンジテーブルが確保されるとともに，前記コンテキストの切り替えが発生した場合，切り替え前のアドレスレンジレジスタの内容を前記メモリに退避するとともに，切り替え後のアドレスレンジテーブルの内容を前記メモリから復帰する演算処理装置。
【請求項９】
演算処理装置と，前記演算処理装置に接続されたメモリとを有する情報処理装置において，
前記演算処理装置は，
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録する割当部と，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う判定部とを有する情報処理装置。
【請求項１０】
演算処理装置と，前記演算処理装置に接続されたメモリとを有する情報処理装置の制御方法において，
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，前記演算処理装置が有する割当部が，前記メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録し，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記演算処理装置が有する判定部が，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う情報処理装置の制御方法。
【請求項１１】
演算処理装置と，前記演算処理装置に接続されたメモリとを有する情報処理装置の制御プログラムにおいて，
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，前記演算処理装置が有する割当部に，前記メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録させ，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記演算処理装置が有する判定部に，前記アドレスレンジテーブルを参照させ，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行わさせる情報処理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラムに関する。
【背景技術】
【０００２】
演算処理装置であるプロセッサは，ソフトウエアの命令コードをフェッチしデコードし実行する。ソフトウエアの命令には，ロード命令やストア命令などメモリにアクセスするメモリアクセス命令が含まれる。一方で，メモリ領域割当関数を実行してあるメモリ領域を確保することができる。このように確保したメモリ領域に対するメモリアクセス命令を実行する場合に，プログラムにバグや誤ったコードが存在した結果，意図するメモリ領域外のメモリ内のデータを意図しないデータに書き換えてしまうメモリ破壊が発生する。または，意図するメモリ領域外のメモリ内のデータをロードすることで，不具合を生じることがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１３／００１３８４３号明細書
【特許文献２】特公平１−３３８５７号公報
【特許文献２】特公平３−６８４２１号公報
【非特許文献】
【０００４】
【非特許文献１】「デバッガの理論と実装」，ASCII SOFTWARE SCIENCE Language
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このようなメモリ破壊などを防止するためには，プログラムのバグや誤ったコードを検出して修正する必要があり，プログラムが膨大な場合はその検出に多くの工数を必要とする。また，バグや誤ったコードをプログラムの実行性能に影響を与えずに検出することは困難である。
【０００６】
そこで，本発明の目的は，メモリ破壊に至るメモリアクセス命令を検出することができる演算処理装置，情報処理装置，情報処理装置の制御方法および情報処理装置の制御プログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本実施の形態の第１の側面は，メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録する割当部と，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う判定部とを有する演算処理装置である。
【発明の効果】
【０００８】
第１の側面によれば，メモリ破壊に至るメモリアクセス命令を検出することができる。
【図面の簡単な説明】
【０００９】
【図１】メモリ領域の確保を要求するときのユーザプログラムの例とOSの動作を示す図である。
【図２】メモリ破壊の第１の例を示す図である。
【図３】メモリ破壊の第２の例を示す図である。
【図４】本実施の形態における演算処理装置としてのプロセッサと主記憶装置としてのメモリとを含む情報処理装置を示す図である。
【図５】本実施の形態におけるアドレス領域割当処理を示すフローチャート図である。
【図６】メモリ領域割当関数によるシステムコールに対して，OSがユーザプログラムに返す先頭アドレスのフォーマットを示す図である。
【図７】メモリのメモリ割当領域とそれぞれの管理領域識別情報及び先頭アドレスの例を示す図である。
【図８】アドレスレンジテーブルとアドレスレンジレジスタの一例を示す図である。
【図９】本実施の形態におけるプロセッサ（CPU)の構成図である。
【図１０】アドレスレンジチェックユニットの概略構成図である。
【図１１】アドレスレンジチェックユニットの構成図である。
【図１２】アドレスレンジチェックユニットによるアドレスレンジチェック処理を示すフローチャート図である。
【図１３】OSによるトラップハンドラの処理を示すフローチャート図である
【図１４】ハードウエアによるトラップハンドラと同様の処理を示すフローチャート図である。
【図１５】TLBユニットの構成を示す図である。
【図１６】本実施の形態におけるアドレスレンジチェックユニットとTLBユニットの構成を示す図である。
【図１７】本実施の形態におけるアドレスレンジチェックユニットの構成を示す図である。
【図１８】そのハードウエアによるトラップハンドラの処理を行う場合のアドレスレンジチェックユニット15の構成を示す図である。
【図１９】本実施の形態におけるTLBユニットの構成を示す図である。
【発明を実施するための形態】
【００１０】
図１は，メモリ領域の確保を要求するときのユーザプログラムの例とOSの動作を示す図である。ユーザプログラム１は，メモリ領域割当関数mallocにより，サイズ「sizeof(int)」の領域を１６個有するメモリ領域の確保（または割当）をOSに要求する（S1)。これに応答して，OSは，物理メモリ領域を確保し（S2)，確保したメモリ領域の先頭の仮想アドレスをアドレスポインタpointer1として返す（S3)。これにより，メモリ領域内には，アドレスポインタpointer1を先頭の仮想アドレスとするメモリ領域が割り当てられる。
【００１１】
図２は，メモリ破壊の第１の例を示す図である。図２には，メモリ破壊を発生させるユーザプログラム１とメモリ３０が示されている。ユーザプログラム１には，図１と同じメモリ領域割当関数mallocが示され，この関数によりメモリ内にアドレスポインタpointerのアドレスを先頭とするサイズ「sizeof(int)」の領域を１６個有するメモリ領域２が割り当てられ確保されている。
【００１２】
そこで，ユーザプログラム１内のfor文では，i=0からi=16までのアドレスpointer[i]のメモリ領域に数値「０」を書き込むことが記述されている。その結果，for文の実行により割り当てられたメモリ領域２の範囲外のpointer1[16]に数値「０」を書き込んでしまい，領域３のデータを破壊してしまうことになる。
【００１３】
図３は，メモリ破壊の第２の例を示す図である。図３には，メモリ破壊を発生させるユーザプログラムとメモリが示されている。ユーザプログラムには，メモリ領域割当関数mallocと，それに続く正しいコード
*pointer2 = 10;
pointer2[1] = 1;
と，誤ったコード
pointer2 = 10;
pointer2[1] = 1;
とが示されている。
【００１４】
メモリ領域割当関数mallocにより，OSが図１と同様の動作を実行して，メモリ内にメモリ領域４を確保して，その先頭の仮想アドレスをアドレスポインタpointer2として返している。一方で，正しいコードは，アドレスポインタpointer2のアドレスに対応するメモリ領域に数値「１０」を書き込み，そのアドレスに続くアドレスのメモリ領域に数値「１」を書き込む命令である。
【００１５】
それに対して，誤ったコードは，アドレスポインタpointer2に数値「１０」を書き込むため，OSから返された先頭の仮想アドレス自体が変更されてしまう（S6)。そして，それに続くpointer2[1]=1のコードでメモリ領域４とは異なるメモリ領域２内に数値「１」が書き込まれる（S7)。その結果，メモリ領域２のデータが破壊されるメモリ破壊が発生する。
【００１６】
ストア命令のようにデータをメモリ領域内に書き込む場合に加えて，ロード命令のようにデータをメモリ領域から読み込む場合も，割り当てられたメモリ領域外のデータを読み込むことは，バグに結びつくことがあり，一種のメモリ破壊とみなすことができる。
【００１７】
メモリ破壊の発生を検出する方法としては，たとえば，メモリアクセス命令であるロード，ストア命令実行時にトラップを発生させ，そのトラップに応答してデバッガにロード，ストア命令でアクセスしようとするアドレスが事前に確保されたメモリ領域のアドレス範囲内か否かをチェックさせることがある。しかし，全てのロード，ストア命令でトラップが発生するのでオーバヘッドがきわめて大きくなる。
【００１８】
また，別のメモリ破壊の発生を検出する方法としては，メモリ上に確保したメモリ領域にID情報を記憶し，メモリアクセス命令の実行のたびに確保したメモリ領域内のID情報を参照して，正しくないID情報のメモリ領域にアクセスしようとしていないか否かを判定することがある。しかし，メモリ領域にID情報を記憶する領域を確保することが必要になり確保すべきメモリ領域が大きくなり，そして，メモリ領域を確保するたびに確保したメモリ領域全てにID情報を書き込む必要があり，性能オーバヘッドがきわめて大きくなる。
【００１９】
［本実施の形態］
図４は，本実施の形態における演算処理装置としてのプロセッサと主記憶装置としてのメモリとを含む情報処理装置を示す図である。CPU（Central Processing Unit）１０とメインメモリ３０とがバスBUSを介して接続されている。プロセッサであるCPU１０は，命令フェッチとデコードなどを行う命令制御部１１と，デコード結果に応じた演算を行う演算部１２と，一次（L1)キャッシュ制御部１３と二次（L2)キャッシュ制御部２０とを有する。一次キャッシュ制御部１３は，メモリの仮想アドレスを物理アドレスに変換するTLB（Translation Look aside Buffer）ユニット１４と，L1命令タグ１６と，L1命令キャッシュ１７と，L1データタグ１８と，L1データキャッシュ１９とを有する。
【００２０】
更に，一次キャッシュ制御部１３は，ロード，ストア命令などのメモリアクセス命令のアクセス先アドレスが，メモリ領域割当関数で割り当てられたメモリ割当領域のアドレス範囲内にあるか否かのアドレスレンジチェックを行うアドレスレンジチェックユニット（判定部）１５を有する。アクセス先アドレスがメモリ割当領域のアドレス範囲外の場合は，メモリ破壊の原因となるメモリアクセス命令であると判断する。このアドレスレンジチェックユニット１５は，アドレス変換を行うTLBユニット１４と並列に設けられ，アドレス変換のパイプラインステージと同じステージでアドレスレンジチェックを実行する。
【００２１】
メインメモリ３０内には，OS３１と，ユーザプログラム３２とが展開されている。更に，メインメモリ３０内には，メモリアクセス命令の仮想アドレスと物理アドレスの対応が格納されているアドレス変換テーブル３３と，メモリ領域割当関数により割り当てられたメモリ割当領域のアドレス範囲情報が格納されているアドレスレンジテーブル３４とが格納されている。
【００２２】
そして，アドレス変換テーブル３３の一部のエレメントが，一次キャッシュ制御部１３内のTLBユニット１４内のTLBに一時的にキャッシュされる。アドレス変換処理では，まずTLBが参照されヒットすれば変換された物理アドレスが出力され，ヒットしなければメインメモリ３０内のアドレス変換テーブル３３が参照されて物理アドレスに変換される。
【００２３】
同様に，本実施の形態では，アドレスレンジテーブル３４の一部のエレメントのアドレス範囲情報が一次キャッシュ制御部１３内のアドレスレンジチェックユニット１５内のアドレスレンジレジスタに一時的にキャッシュされる。そして，アドレスレンジチェックユニット１５は，まず一次キャッシュ制御部１３内のアドレスレンジレジスタを参照して，メモリアクセス命令のアクセス先アドレスがメモリ割当領域のアドレス範囲内か否かを判定する。そして，アドレスレンジレジスタのアドレス範囲情報のいずれのアドレス範囲でもない場合に，メインメモリ３０内のアドレスレンジテーブル３４の他のエレメントのアドレス範囲情報のいずれかのアドレス範囲であるか否かの判定が行われる。この判定は，OSによって行われても良く，またはアドレスレンジテーブル３４内の他のエレメントをメインメモリ３０から読み出して，一次キャッシュ制御部１３内のアドレスレンジレジスタに登録し，アドレスレンジチェックユニット１５が再度判定しても良い。
【００２４】
以下，メモリ領域割当処理，アドレスレンジテーブル，アドレスレンジレジスタ，アドレスレンジチェックユニットについて説明する。
【００２５】
図５は，本実施の形態におけるアドレス領域割当処理を示すフローチャート図である。図１で説明したとおり，ユーザプログラム内のメモリ領域割当関数mallocが実行されると，OSが次のようにメモリ領域割当処理を実行する。
【００２６】
図５に示されるように，OSは，まず，malloc関数からシステムコールを受信する（S11)。システムコールに応答して，OSは，メインメモリ３０などの物理メモリ内にmalloc関数が指定したメモリ領域を確保する（S12)。OSは，このメモリ領域を確保した際に，そのメモリ割当領域のアドレス範囲を示すアドレス範囲情報として，例えば先頭アドレスと割り当てたメモリサイズを生成する。この先頭アドレスは，仮想アドレスである。更に，OSは，メモリ領域割当関数mallocが割り当てたメモリ領域を識別する管理領域識別情報IDを生成する（S13)。この管理領域識別情報IDは，メモリ破壊を管理する対象のメモリ割当領域を識別する情報であり，その生成は，例えば，ランダムな数値を発生して割り当てるなどにより行われる。
【００２７】
そして，OSは，メインメモリ３０内のアドレスレンジテーブル３４に，確保したメモリ割当領域のアドレス範囲情報として，管理領域識別情報IDと，先頭アドレスと，メモリサイズを記憶する。その後，OSは，ユーザプログラムに，管理領域識別情報IDと先頭アドレスを返す。これで，ユーザプログラムは，メモリ割当要求を識別する管理領域識別情報IDと，そのメモリ割当要求により確保したメモリ割当領域を識別する先頭アドレスを取得する。
【００２８】
図６は，メモリ領域割当関数によるシステムコールに対して，OSがユーザプログラムに返す先頭アドレスのフォーマットを示す図である。図６には，メモリ破壊検出のためのアドレスレンジチェックが有効化される場合のアドレスフォーマットF1と，無効化される場合のアドレスフォーマットF2とが示されている。
【００２９】
アドレスレンジチェック機構が有効化される場合は，フォーマットF1に示されるように，例えば６４ビットのアドレス[63:0]の例えば最上位の４ビット[63:60]に管理領域識別情報IDが埋め込まれる。つまり，OSは，４ビットの管理領域識別情報IDを先頭アドレス[63:0]の最上位４ビット[63:60]に埋め込んで，ユーザプログラムに返す。
【００３０】
一方，メモリレンジチェック機構が無効化される場合は，フォーマットF2に示されるように，メモリ領域割当関数によるシステムコールに対して，OSは，６４ビットの先頭アドレスを返す。したがって，最上位の４ビットも含めて６４ビット全てがアドレス情報になる。
【００３１】
このように，アドレスレンジチェックが有効化される場合に，OSが６４ビットの先頭アドレスの一部のビットを利用して管理領域識別情報IDをユーザプログラムに返すことで，従来の回路構成に変更を与える必要がない。また，先頭アドレスの最上位の４ビットのアドレス情報が失われるが，アドレスレンジチェックにおいて管理領域識別情報IDの比較も行うことでアドレスレンジチェックに支障はない。但し，メモリ割当領域のアドレス範囲は，６０ビット[59:0]で特定できる必要がある。
【００３２】
また，アドレス変換ユニットでは，仮想アドレス内のアドレスレンジチェックに利用する４ビットの管理領域識別情報IDは，タグ比較対象から除外する必要がある。これについては後に詳述する。
【００３３】
図７は，メモリのメモリ割当領域とそれぞれの管理領域識別情報及び先頭アドレスの例を示す図である。図７の例では，メモリ３０内の例えばヒープ領域内に４つのメモリ割当領域MA1〜MA4が確保されている。そして，それぞれのメモリ割当領域MA1〜MA4を識別する管理領域識別情報ID＝１〜４と，それぞれのメモリ割当領域の先頭アドレスVA1〜VA4とが，OSによってユーザプログラムに返される。
【００３４】
メモリ領域割当関数によって確保されるメモリ割当領域には，必ずしもメモリ破壊検出対象としない場合もある。そのような場合は，OSは，管理領域識別情報IDとしてメモリ破壊検出対象外を示すID=0を発行するようにしてもよい。そして，OSは，管理領域識別情報IDがID=0の場合は，メモリ割当領域のアドレス範囲情報をアドレスレンジテーブルに記憶しない。その代わり，アドレスレンジチェックユニット１５は，メモリアクセス命令がID=0を保持する場合は，アドレスレンジテーブルを参照して行うアドレスレンジチェックを省略し，アドレスレンジ外ではないとの判定結果を出力する。この点については，後で具体的に説明する。
【００３５】
図８は，アドレスレンジテーブルとアドレスレンジレジスタの一例を示す図である。アドレスレンジテーブル３４には，各メモリ割当領域に対応して，管理領域識別情報ID（４ビット）と，先頭アドレス（Start Address)[63:0]と，サイズ（Range)[7:0]とが記憶される。この先頭アドレスは64ビットの仮想アドレス（VA：Virtual Address)であり，例えば，最上位の４ビット[63:60]には，管理領域識別情報IDを埋め込んだままである。
【００３６】
アドレスレンジレジスタ３５には，アドレスレンジテーブル３４の１つのエレメントが記憶されている。但し，後述する実施の形態では，アドレスレンジチェックユニット１５内には，複数のアドレスレンジレジスタが設けられて，複数のアドレス割当領域について並行してアドレスレンジチェックが行われる。
【００３７】
アドレスレンジレジスタ３５は，アドレスレンジチェックユニット１５がメモリアクセス命令のアクセス先アドレスがメモリ割当領域のアドレス範囲内にあるか否かを判定するときに参照される。したがって，アドレスレンジレジスタ３５には，アドレス範囲情報が記憶されていればよい。例えば，図８のような，管理領域識別情報IDと先頭アドレスとサイズに代えて，管理領域識別情報IDと先頭アドレスと最終アドレスを記憶するようにしてもよい。また，アドレスレンジレジスタ３５には，後述するように，そのレジスタ値が有効か否かを示す有効フラグが記憶される。
【００３８】
上記のアドレスレンジテーブルとアドレスレンジレジスタの先頭アドレスは，メモリ領域割当関数の実行に応答してOSが返してきた管理領域識別情報IDを埋め込んだ仮想アドレスに代えて，管理領域識別情報IDを除去した６０ビットの仮想アドレス[59:0]や，４ビットの管理領域識別情報IDを[0000]に置き換えた６４ビットの仮想アドレス[63:0]であってもよい。
【００３９】
また，プロセスの切り替えに伴ってコンテキストスイッチが発生した場合，オペレーティングシステム（OS）がプロセッサのコンテキスト切り替え前のアドレスレンジレジスタの内容をメモリに退避するとともに，オペレーティングシステムがプロセッサのコンテキスト切り替え後のアドレスレンジレジスタの内容をメモリから復帰して，コンテキストごとに確保されたアドレスレンジテーブルを切り替えることで，マルチプロセス環境においても本実施の形態のアドレスレンジチェック機能を利用することができる。
【００４０】
図９は，本実施の形態におけるプロセッサ（CPU)の構成図である。図４の構成図と対比させながら説明する。図９にはCPU１０の一部の構成が示されていて，命令の実行完了や実行順などを制御する命令シーケンス制御部11Aと，命令パイプライン４０と，一次キャッシュパイプライン５０とが示されている。図中，縦方向の一点鎖線は，パイプラインステージの境界を示す。
【００４１】
命令パイプライン４０は，命令フェッチ回路11Bと，命令をデコードするデコーダ11Cと，実行アドレス生成器（EAG：Effective Address Generator)12Aとを有する。命令シーケンス制御部11Aと命令フェッチ回路11Bとデコーダ11Cとが，図４の命令制御部１１の一部の構成に対応する。また，実行アドレス生成器12Aは，図４の演算部１２の一部の構成に対応する。
【００４２】
一方，一次キャッシュパイプライン５０は，図３の一次キャッシュ制御部１３の一部の構成に対応する。一次キャッシュパイプライン５０は，実行アドレス生成器12Aが生成する仮想アドレスVAについて，物理アドレスへの変換を行うアドレス変換ユニットを構成するタグ付きTLB 14A,14Bと，タグ値の一致を検出するタグ比較器14Cを有する。タグ付きTLB 14A,14Bとタグ比較器14Cが，図３のTLBユニット14に対応する。このTLBユニット14が，実行アドレス生成器12Aが生成する仮想アドレスを物理アドレスに変換する。タグ比較器14Cは，タグヒットすれば物理アドレスを出力し，タグヒットしなければ，タグミスヒットをトラップ検出器５１に出力する。図９の例では，TLBユニット14は，２パイプラインステージで構成される。
【００４３】
一次キャッシュパイプライン５０は，実行アドレス生成器12Aが生成する仮想アドレスVAについて，参照されるアドレスレンジレジスタ15A（図８の３４）とレンジチェック回路15Bとを有する。これらのアドレスレンジレジスタ15Aとレンジチェック回路15Bとが，図４のアドレスレンジチェックユニット１５に対応する。レンジチェック回路15Bは，仮想アドレスVAがアドレスレンジレジスタ15A内のアドレス範囲内と一致すればレンジヒットをトラップ検出器５１に出力し，一致しなければレンジミスヒットを出力する。
【００４４】
トラップ検出器５１は，タグ比較器14Cからのタグミスヒットと，レンジチェック回路15Bからのレンジミスヒットを受信すると，適宜，それらに対応するトラップ通知を命令シーケンス制御部11Aに出力する。命令シーケンス制御部11Aは，このトラップ通知に応答して，OSのトラップハンドラを呼び出して，それぞれのトラップに対応する処理を実行させる。
【００４５】
図１０は，アドレスレンジチェックユニットの概略構成図である。図１０では，メモリアクセス命令の一例として，ロード命令１５４の仮想アドレスが，アドレスレンジレジスタ15A内のアドレス範囲情報のアドレス範囲内にあるか否かがチェックされている。ロード命令１５４は，オペランド内の仮想アドレス（この例では，「0x100000001e757010」)に対応するメモリ内のデータを読み込んでレジスタg1に格納する命令である。
【００４６】
アドレスレンジチェックユニット１５は，アドレスレンジレジスタ15A(35)と，そのレジスタ15A内の先頭アドレス（Start Address)[59:0]とサイズ（Range)とを加算してエンドアドレスを生成する加算器１５１とを有する。また，アドレスレンジユニット１５は，ロード命令１５４の仮想アドレスの上位４ビット（１６進法の最上位１ビット）をマスクして下位６０ビットの仮想アドレス[59:0]を抽出する回路１５２と，ロード命令１５４の仮想アドレスの最上位４ビット[63:60]を抽出する回路１５５とを有する。
【００４７】
そして，アドレスレンジチェックユニットでは，レンジ比較器１５３が，ロード命令１５４の仮想アドレス[59:0]が，アドレスレンジレジスタ15Aが示す先頭アドレス[59:0]からエンドアドレス[59:0]までのアドレス範囲内にあるか否かを判定し，ID比較器１５６が，ロード命令１５４の管理領域識別情報ID[63:60]とアドレスレンジレジスタ15Aの管理領域識別情報ID[3:0]とが一致するか否かを判定する。そして，ANDゲート１５７が，両比較器１５３，１５４で一致する場合にアドレスレンジ内であることを示すアドレスレンジヒットを，いずれかの比較器で一致しない場合にアドレスレンジ外であることを示すアドレスレンジミスヒットを，判定結果として出力する。
【００４８】
図１１は，アドレスレンジチェックユニットの構成図である。図１１のアドレスレンジチェックユニットは，図１０のアドレスレンジチェックユニット１５を４セット15_1〜15_4有する。即ち，各アドレスレンジチェックユニット15_1〜15_4には，それぞれアドレスレンジテーブルの異なるエレメントのアドレス範囲情報がアドレスレンジレジスタに格納されている。そして，ロード命令１５４の管理領域識別情報IDと仮想アドレスとが，それぞれのアドレスレンジチェックユニットに供給される。
【００４９】
図１２は，アドレスレンジチェックユニットによるアドレスレンジチェック処理を示すフローチャート図である。アドレスレンジチェックユニットは，前述のとおりハードウエアで構成されるが，その概略的な処理についてフローチャート図により説明する。
【００５０】
メモリ領域割当関数の実行に応答してOSから管理領域識別情報IDを含む先頭の仮想アドレスを返されたポインタ（pointer)に関連してメモリアクセス命令が発行されると（S21)，そのメモリアクセス命令は管理領域識別情報IDが埋め込まれた仮想アドレスを保持している。図１０のロード命令に示したとおりである。
【００５１】
メモリアクセス命令の発行に応答して，アドレスレンジチェックユニット１５は，メモリアクセス命令が保持する仮想アドレス（図１１の例ではIDを除く60ビット[59:0]）がアドレスレンジレジスタ15Aに格納されているアドレス範囲情報の範囲内にあるか否かと，管理領域識別情報IDが一致するか否かをチェックする（S22)。管理領域識別情報IDが一致し，仮想アドレスがアドレス範囲内にある場合は（S22のYES)，アドレスレンジチェックユニットは，仮想アドレスがメモリ割当領域内へのアクセスであると判定してアドレスレンジヒットを出力する（S25)。その結果，メモリアクセス命令が実行される（S26)。
【００５２】
一方，アドレスレンジチェックで，仮想アドレスがアドレス範囲内にないか，または，管理領域識別情報IDが不一致の場合は，アドレスレンジチェックユニット１５は，アドレスレンジミスヒットを出力する（S22のNO)。これに応答して，図９のトラップ検出回路５１がトラップを命令シーケンス制御部11Aに出力し，これに応答して，トラップ検出回路５１がOSにトラップを通知する（S23)。これにより，OSのトラップハンドラがトラップに対する処理を実行する（S24)。
【００５３】
図１３は，OSによるトラップハンドラの処理を示すフローチャート図である。このOSによるトラップハンドラの処理は，後述するテーブルウオーク有効ビットが無効（OFF）の場合に行われる。
【００５４】
CPU内部に設けられたアドレスレンジチェックユニット１５は，メインメモリ３０内のアドレスレンジテーブル３４内の一部のエレメントを記憶するアドレスレンジレジスタ３５のアドレス範囲情報を参照して，メモリアクセス命令の仮想アドレスがアドレス範囲内か否かを判定する。したがって，仮想アドレスがいずれのアドレスレンジレジスタのアドレス範囲内にも入ってないと判定された場合は，メインメモリ３０内のアドレスレンジテーブル３４内の残りのエレメントの管理領域識別情報IDとアドレス範囲情報を参照して，再アドレスレンジ判定することが必要である。図１３のOSによるトラップハンドラの処理は，この再判定の処理である。
【００５５】
OSのトラップハンドラは，メインメモリ内のアドレスレンジテーブル３４を探索し（S31），テーブル内の残りのエレメントのIDとアドレス範囲情報について，IDが一致するか否かと，メモリアクセス命令のアドレス先仮想アドレスがアドレス範囲内に入っているか否かのチェックを繰り返す(S32)。そして，ヒットするエントリが検出された場合は（S32のYES），OSは，仮想アドレスがアドレス範囲内であると判定し（S35），レジスタセット命令により検出したエントリのIDとアドレス範囲情報をアドレスレンジレジスタ15Aにロードして記憶する（S36）。そこで，再度，ロード，ストア命令のリクエストをL1キャッシュパイプラインに入力してアドレスレンジチェックを再実行すれば，仮想アドレスがアドレスレンジレジスタのアドレス範囲内に入ることが検出され，アドレスレンジヒットが出力される。そして，メモリアクセス命令が実行される（S37)。
【００５６】
工程S36のように最新のヒット情報としてアドレスレンジレジスタに記憶することで，その後発生する同じメモリ割当領域に対するメモリアクセス命令に対するアドレスレンジチェックを，アドレスレンジチェックユニット１５により高速に実行することができる。例えば，図２に示したfor文の同じポインタpointer1によるメモリアクセス命令が繰り返される場合には，アドレスレンジチェックユニットがアドレスレンジレジスタを参照して，アドレスレンジヒットの判定を高速に出力することができる。
【００５７】
アドレスレンジテーブル内にヒットするエントリが検出されない場合（S32)，OSは，仮想アドレスがメモリ割当領域のアドレス範囲外であると判定し(S33)，ユーザプログラムを終了させる（S34)。これにより，メモリ破壊の原因となるメモリ割当領域外へのメモリアクセス命令が検出され，メモリ破壊やバグによる不具合の発生が防止される。
【００５８】
図１４は，ハードウエアによるトラップハンドラと同様の処理を示すフローチャート図である。このハードウエアによる処理は，後述するテーブルウオーク有効ビットが有効（ON)の場合に行われる。
【００５９】
CPU１０内のアドレスレンジチェックユニット１５は，メインメモリ３０内のアドレスレンジテーブル３４内を順番にアクセスしてロードするテーブルウオーク制御回路を有する。例えば，後述する図１８に示されるとおりである。
【００６０】
そこで，アドレスレンジチェックユニット１５は，このテーブルウオーク制御回路を起動して，メインメモリ内のアドレスレンジテーブルのエントリを順番にロードし（S41)，アドレスレンジレジスタにそのエントリをロードして記憶する（S42)。そして，アドレスレンジチェックユニット１５は，アドレスレンジレジスタ内に新たに記憶されたエントリの管理領域識別情報IDとアドレス範囲情報に基づいてアドレスレンジチェックを実行する（S43)。そのアドレスレンジチェックでIDが一致し仮想アドレスVAがアドレス範囲内にあれば（アドレスレンジヒット）（S43のYES)，アドレスレンジチェックユニットは，仮想アドレスがアドレス範囲内であると判定し（S47)，メモリアクセス命令が実行される（S49)。
【００６１】
上記の処理S41-S43は，アドレスレンジヒットが検出されなければ，アドレスウオーク制御回路がアドレスレンジテーブル内の全てのエントリをアドレスレンジレジスタにロードするまで繰り返される。全てのエントリをロードしてもアドレスレンジヒットが検出されなければ，仮想アドレスがアドレス範囲外であると判定され（S45)，ユーザプログラムは終了される（S46)。
【００６２】
上記の管理領域識別情報IDは必ずしも生成される必要はない。但し，メモリ領域割当関数とアドレス範囲情報とを関連づけしておき，メモリアクセス命令を実行する時に，どのメモリ領域割当関数で確保したメモリ割当領域についてのメモリアクセス命令かが判別できるようにして，そのメモリ割当領域のアドレス範囲情報とメモリアクセス命令のアクセス先アドレスとを比較してアドレスレンジチェックを実行する。
【００６３】
また，メモリアクセス命令のアクセス先仮想アドレス内の管理領域識別情報IDがID=0の場合は，アドレスレンジチェック対象外として，アドレスレンジチェックユニットが常時アドレスレンジヒットと判定することが望ましい。このように，管理領域識別情報IDをメモリ割当関数に対応するメモリ割当領域を識別する情報に加えて，アドレスレンジチェック対象外を識別する情報として利用することで，例えば，アドレスレンジチェックを必要としないプロセス内のメモリ領域割当関数に対してはID=0を返して，アドレスレンジチェックを不要にすることができる。
【００６４】
以下，本実施の形態の詳細について説明する。
【００６５】
［本実施の形態の詳細］
図１５は，TLBユニットの構成を示す図である。TLBユニット１４は，TLB(Table Look aside Buffer)のタグ部14A及びデータ部14Bを有するTLB本体141と，TLB比較部14Cとを有する。命令制御部１１または演算部１２から，アクセスアドレスレジスタ143に，メモリアクセス命令のアクセス先仮想アドレスVAがロードされ，コンテキストレジスタ144に，TLBの属性データがロードされる。一方，TLBのタグ部14A内には仮想アドレスVAとTLBの属性データであるコンテキストctxtとが記憶され，TLBのデータ部14B内には仮想アドレスVAに対応する物理アドレスPAが記憶されている。したがって，メモリアクセス命令のアクセス先仮想アドレスVAと一致するタグ部14A内の仮想アドレスVAに対応するデータ部14B内の物理アドレスが，変換後のアドレスとして出力される。そのTLB比較は以下のとおりである。
【００６６】
TLB比較部14Cは，アクセスアドレスレジスタ143とコンテキストレジスタ144にロードされたメモリアクセス命令に対応するアクセス先仮想アドレスVA及び属性データと，タグ部14A内に記憶されている仮想アドレスVA及びコンテキストctxtとを，それぞれ比較する。TLB比較部14Cは，アクセスアドレスレジスタ143内のアクセス先仮想アドレスVAとタグ部14A内の仮想アドレスとを比較し，一致する場合に仮想アドレス一致出力va_mchを出力する比較器146と，コンテキストレジスタ144内の属性データとタグ部14A内のコンテキストctxtとを比較し，一致する場合にコンテキスト一致出力ctxt_mchを出力する比較器147と，両比較器の出力のANDを演算するANDゲート148とを有する。
【００６７】
タグ部14Aを順番に検索しながら，両比較器146,147が共に一致していることを検出した時のデータ部14Bの物理アドレスPAが，ANDゲート149を介してアドレス変換後の物理アドレスPAとして出力される。
【００６８】
TLB内の複数のエレメントでタグが一致しない場合は，メインメモリ30内のアドレス変換テーブル33からエントリをフェッチしてTLBに登録される。このTLBのエレメントの更新時に，命令制御部11がTLB登録要求とTLBエントリの更新データ（VAとPA）とをTLBユニット14に出力する。これにより，TLBのエレメントが更新され，更にTLB検索が行われる。
【００６９】
上記のコンテキストの比較は，必ずしも必要ではなく，アクセス先仮想アドレスとタグ部14A内の仮想アドレスとが一致する場合に，対応する物理アドレスを出力する構成でもよい。
【００７０】
図１６は，本実施の形態におけるアドレスレンジチェックユニットとTLBユニットの構成を示す図である。アドレスレンジチェックユニット15は，図１５のTLBユニット14の回路構成を変更することなく，並行して動作するように構成される。このように両ユニットが並行して動作することは，図９内の一次キャッシュパイプラインで説明したとおりである。
【００７１】
図１６において，TLBユニット14は，図１５と同じ構成である。一方，アドレスレンジユニット15は，アドレスレンジレジスタ15Aと，モードレジスタ151と，アドレスレンジチェック回路15Bとを有する。アドレスレンジレジスタ15Aは，メインメモリ30内のアドレスレンジテーブル34内の一部のエレメントのアドレス範囲情報を一次キャッシュ内にキャッシュされるレジスタである。一次キャッシュ内にアドレスレンジレジスタ15Aを設けることにより，アドレスレンジチェックを高速化させる。
【００７２】
モードレジスタ151は，例えば２ビットで構成され，モードレジスタのbit 0はアドレスレンジチェック回路有効ビットであり，有効（bit0=1）の場合はアドレスレンジチェック回路の動作が有効化され，無効（bit1=0）の場合は無効化される。モードレジスタのbit 1はハードウエアによるテーブルウオーク有効ビットであり，アドレスレンジチェックがアドレスレンジミスヒット（アドレス外）の場合にメインメモリ内のアドレスレンジテーブルへのアクセス方法を設定するビットである。このビットが有効（bit1=1）の場合は，ハードウエアによるテーブルウオーク回路を利用してメインメモリ内のアドレスレンジテーブルのエレメントを順番に読み込みを行い，無効（bit1=0）の場合はOSのトラップハンドラが同様のテーブルウオーク処理を行う。
【００７３】
そして，アドレスレンジチェック回路15Bは，ロードされるアクセスアドレスレジスタ143内にロードされるメモリアクセス命令の仮想アドレスVAが，アドレスレンジレジスタ15A内のアドレス範囲内にあるか否かをチェックする。このチェックは，図１１で説明したのと同様に行われる。メモリアクセス命令の仮想アドレスVAがアドレスレンジレジスタのアドレス範囲内にある場合は，アドレスレンジチェック回路15Bがアドレスレンジヒットを出力し，仮想アドレスVAがアドレス範囲外の場合は，アドレスレンジミスヒットを出力する。そして，このアドレスミスヒット出力は，図９のトラップ検出回路51を介して，命令制御部１１にトラップ通知される。
【００７４】
本実施の形態によれば，アドレスレンジチェックユニット15は，メモリアクセス命令の仮想アドレスについて，アドレス範囲にあるか否かのマッチング処理を，TLBユニット14がTLB141を参照してタグとのマッチングを行うアドレス変換処理と並行して行う。したがって，メモリアクセス命令に関する回路動作に大きな変更を加えることなく，アドレスレンジチェックユニット15を構成することができるので，アドレスレンジチェック処理によるオーバヘッドを少なくできる。
【００７５】
図１７は，本実施の形態におけるアドレスレンジチェックユニットの構成を示す図である。図１７の例では，一次キャッシュパイプライン５０内に，４つのアドレスレンジチェックユニット15_1〜15_4を有し，それらの出力がORゲート161を介してアドレスレンジヒット（VA range hit)か否かを出力する。各アドレスレンジチェックユニット15_1〜15_4は，アドレスレンジレジスタ15Aとアドレスレンジチェック回路15Bとを有する。
【００７６】
アドレスレンジレジスタ15Aは，３つのレジスタ152,153,154を有し，アドレスレンジロウワレジスタ154はメモリ割当領域の先頭アドレスVA（64bit）を格納し，アドレスレンジアッパレジスタ153はエンドアドレスVA（64bit）を格納する。また，アドレスレンジコントロールレジスタ152は，bit[63]にアドレスレンジレジスタの値が有効か否かを示す有効フラグを記憶し，bit[3:0]に管理領域識別情報IDを記憶する。
【００７７】
図６のフォーマットF1に示したとおり，仮想アドレスの最上位4bitには管理領域識別情報ID[63:60]が埋め込まれているので，図１０と同様に，ロウワーレジスタ154とアッパーレジスタ153にもID[63:60]と仮想アドレス[59:0]が格納される。但し，大小比較器155, 156では，その仮想アドレス[59:0]と，アクセスアドレスレジスタ143内の最上位４ビット[63:60]を除いた仮想アドレス[59:0]とが比較される。
【００７８】
ユーザプログラムのプロセス切り替え時などCPU内のコンテキストレジスタ更新時などに，OSがレジスタセット命令を実行して，４セットのアドレスレンジコントロールレジスタ152の有効フラグを全てクリアにする。これにより，そのプロセスでは，アドレスレンジテーブル34から新たなエレメントがレジスタ152のID[3:0]とレジスタ153,154にキャッシュされるようになる。また，レジスタセット命令により，モードレジスタ151内のbit0の有効フラグが設定可能であり，それにより，プロセス毎にアドレスレンジチェック機構を有効か無効に設定することができる。
【００７９】
ロード，ストア命令などのメモリアクセス命令の仮想アドレスVA[63:0]の最上位４ビット[63:60]に管理領域識別ID[3:0]が埋め込まれたリクエストが，命令制御部１１や演算部１２などから一次キャッシュパイプライン50に入力される。一次キャッシュパイプライン50は，TLB検索と並行して，アドレスレンジチェックを行う。そして，アドレスレンジチェックは次のようにして行われる。
【００８０】
アドレスレンジチェック回路15Bは，メモリアクセス命令の仮想アドレスのID以外のアドレス[59:0]と，アドレスレンジアッパレジスタ153内のエンド仮想アドレス[59:0]との大小比較を行う第１の大小比較器155と，アドレスレンジロウワレジスタ154内の先頭仮想アドレス[59:0]との大小比較を行う第２の大小比較器156と，メモリアクセス命令の仮想アドレスのID[63:60]とコントロールレジスタ152内の管理領域識別情報ID[3:0]とを比較する比較器157と，比較器155,156,157の出力とモードレジスタ151のbit0のアドレスレンジチェック有効フラグとコントロールレジスタ152のアドレスレンジレジスタ有効フラグとの論理積を演算するANDゲート159とを有する。
【００８１】
したがって，ANDゲート159は，アドレスレンジチェック有効フラグとアドレスレンジレジスタ有効フラグとが共に有効の場合に，アクセス先アドレスレジスタ143のID[63:60]を除く仮想アドレスVA[59:0]がレジスタ153,154の先頭仮想アドレス[59:0]とエンドアドレス[59:0]の間にある場合に，アドレスレンジヒット(1)を出力する。
【００８２】
また，モードレジスタ151のアドレスレンジチェック有効フラグが無効(0)の場合は，ANDゲート159は，アドレスレンジミスヒット(0)を出力する。したがって，ユーザソフトウエアからモードレジスタ151の有効フラグを設定することで，アドレスレンジチェック機構を有効に動作させたり無効化させたりすることができる。
【００８３】
更に，管理領域識別情報IDにアドレスレンジチェック対象外を示すID=0(4bit=0000)を仮想アドレスに埋め込むことを実装した場合には，アドレスレンジチェック回路15Bは，アクセスアドレスレジスタ143内のIDの4bit[63:60]が全て0か否かを検出するNORゲート158を有する。そして，ID=0000の場合は，このNORゲート158が「１」を出力して，ORゲート160を介してアドレスレンジヒットが出力される。これにより，管理領域識別情報IDがID=0000の場合は，仮想アドレス[59:0]がアドレスレンジ内にあるか否かの判断にかかわらず，ORゲート160がアドレスレンジヒット(1)を出力する。これにより，アドレスレンジチェック管理領域以外の場合に，誤ってアドレスレンジミスヒットが出力されてトラップが発生することが回避される。
【００８４】
４セットのアドレスレンジチェック回路15_1〜15_4のうちいずれかがアドレスレンジヒットを判定すれば，ORゲート161からアドレスレンジヒットを出力し，全てがアドレスレンジミスヒットを判定すれば，ORゲート161からアドレスレンジミスヒット（アドレスレンジレジスタではアドレス範囲外）が出力される。
【００８５】
図１７のアドレスレンジレジスタ15Aは，図１０で示したように，先頭アドレスを記憶するレジスタと，アドレス範囲（レンジ）を記憶するレジスタと，図１７のコントロールレジスタで構成することもできる。その場合は，先頭アドレスとアドレス範囲を各レジスタにロードした段階で，先頭アドレスにアドレス範囲を加算したエンドアドレスを演算する加算器と，加算器の加算結果を記憶するエンドレジスタを設けることが好ましい。
【００８６】
図１４で，アドレスレンジチェックユニット15がアドレスレンジレジスタ15A（152〜154）に基づいてアドレスレンジミスヒットを出力した場合に，ハードウエアによるテーブルウオーク回路を利用して，メインメモリ内のアドレスレンジテーブルのエレメントをアドレスレンジレジスタに登録して，アドレスレンジチェックを行うことを説明した。ハードウエアによるトラップハンドラの処理である。
【００８７】
図１８は，そのハードウエアによるトラップハンドラの処理を行う場合のアドレスレンジチェックユニット15の構成を示す図である。モードレジスタ151のbit1=1の場合は，テーブルウオーク有効フラグがオンになり，アドレスレンジチェック回路15Bの出力がアドレスレンジミスヒットの場合に，テーブルウオーク制御回路163が動作する。
【００８８】
テーブルウオーク制御回路163は，アドレスポインタレジスタ162に設定されているメインメモリ内のアドレスレンジテーブル34の先頭アドレスに基づいて，アドレスレンジテーブルフェッチリクエストS163を発行し，一次，二次（L1,L2）キャッシュ20,13にメインメモリ30内のアドレスレンジテーブル34内の４つのエレメントをフェッチするよう起動をかける。L1,L2キャッシュ20,13は，通常のロード命令と同様にして，アドレスレンジテーブル34内の４つのエレメントを読み込み，アドレスレンジレジスタ15Aにロードする。そして，再度ロード，ストア命令のリクエストをL1キャッシュパイプラインに投入し，アドレスレンジチェックユニット14によりアドレスレンジチェックを実行させる。
【００８９】
アドレスレンジミスヒットであれば，テーブルウオーク制御回路163は，上記の処理をアドレスレンジテーブル内の全てのエレメントに対して繰り返す。全てのエレメントでアドレスレンジミスヒットになれば，アドレスレンジミスヒットと判定される。その場合，テーブルウオーク制御回路163は，命令制御部１１にトラップ通知を行う。
【００９０】
図１９は，本実施の形態におけるTLBユニットの構成を示す図である。図６で説明したとおり，本実施の形態では，アドレスレンジチェック機構を有効にする場合は，仮想アドレスVA[63:0]の最上位4bit[63:60]に管理領域識別IDを埋め込んで，複数のメモリ割当領域をアドレスレンジチェックの管理対象領域として識別する。一方，アドレスレンジチェック機構を無効にする場合は，仮想アドレスVA[63:0]には管理領域識別ID[63:60]は埋め込まれない。このように既存の仮想アドレスVAの64ビット[63:0]を有効に利用して，アドレスレンジチェック行うための回路変更をできるだけ回避している。
【００９１】
その結果，モードレジスタ151のbit0がbit0=1の場合，メモリ領域割当関数によるシステムコールに応答してOSが返す仮想アドレスフォーマットがID[63:60]VA[59:0]となり，TLBのTAG部14Aには，その仮想アドレスID[63:60],VA[59:0]が格納される。一方，アドレス変換が必要な仮想アドレスは，メモリ領域割当関数で割り当てられたメモリ領域外のアドレスの場合があり，その結果，TLBのTAG部14A内には，ID[63:60]VA[59:0]とVA[63:0]が混在することになる。そこで，モードレジスタ151のbit0=1の場合には，ID[63:60]のマッチング結果を無視することが必要になる。
【００９２】
したがって，TLBユニット14では，アドレスレンジチェック機構を有効にする場合（モードレジスタ151のbit0=1）の場合と，無効にする場合（モードレジスタ151のbit0=0）の場合とで，６４ビットの仮想アドレスVA内の最上位４ビット[63:60]の情報が異なるので，TLBユニット14の動作を切り替える必要がある。つまり，有効な場合（bit0=1）は，仮想アドレスVAの最上位4bit[63:60]はIDとして有効であり，仮想アドレスVAの一部としてみなせないので，TLBユニットによるTLB判定では最上位4bitの比較結果は無視する。無効な場合(bit0=0)は，仮想アドレスVAの最上位4bit[63:60]は仮想アドレスVAの一部として有効であり，TLB判定では最上位4bit[63:60]の比較結果をTLB判定に反映させる。
【００９３】
図１９のTLBユニット14のTLB比較部14Cは，仮想アドレスVAのID部分[63:60]以外の情報[59:0]を比較する比較器146_1と，ID部分[63:60]を比較する比較器146_2とに分けられている。さらに，TLB比較部14Cは，ID部分[63:60]の比較器146_2の出力と，モードレジスタ151のbit0との論理和を演算するORゲート149とを有し，比較器147,146_1とORゲート149の出力がANDゲート148に入力されている。
【００９４】
TLB比較部14Cの動作は以下のとおりである。
【００９５】
（１）アドレスレンジチェック有効フラグが有効（bit0=1）の場合
仮想アドレスVAの最上位4bit[63:60]はIDとして有効であり，仮想アドレスVAの一部とみなせないので，TLB比較部14Cは，有効フラグ(bit0=1)によりORゲート149から常に一致したことを示すマッチ出力(1)が出力され，仮想アドレスVAの最上位4bit[63:60]のIDの比較器146_2の比較結果が無視される。これにより，比較器146_2の出力が不一致の場合でも，比較器147と146_1の出力がともに一致(1)であれば，タグ部の一致，つまりTLBヒットがANDゲート148から出力される。
【００９６】
（２）アドレスレンジチェック有効フラグが無効（bit0=0）の場合
仮想アドレスVAの最上位4bit[63:60]はIDとして無効であり，仮想アドレスVAの一部とみなすべきであるので，TLB比較部14Cは，有効フラグ(bit0=0)によりORゲート149からID比較器146_2の出力がそのまま出力され，仮想アドレスVAの最上位4bitのIDの比較器146_2の比較結果がTLBマッチに反映される。これにより，比較器147，146_1，146_2の出力が全て一致した場合に，タグ部の一致，つまりTLBヒットがANDゲート148から出力される。
【００９７】
以上説明したとおり，本実施の形態のアドレスレンジチェック機構によれば，メモリ領域割当関数によって確保したメモリ割当領域に対応するメモリアクセス命令を実行する際に，メモリアクセス命令のアクセス先アドレスがメモリ割当領域のアドレス範囲内か否かを判定することができる。
【００９８】
特に，本実施の形態では，アドレスレンジテーブルとアドレスレンジチェックユニットを追加するだけで，メモリアクセス命令の実行時に判定することができる。
【００９９】
更に，本実施の形態では，アドレスレンジチェックユニットをTLBユニットと並列に設けることで，メモリアクセス命令を実行するときのTLB判定と並行してアドレスレンジチェックを行うことができ，アドレスレンジチェック処理のオーバヘッドが少ない。
【０１００】
また，本実施の形態では，アドレスレンジテーブルをメインメモリに記憶し，一次キャッシュパイプライン内のアドレスレンジチェックユニットのアドレスレンジレジスタにアドレスレンジテーブルの一部のエレメントをキャッシュすることで，アドレスレンジチェック判定を高速化できる。
【０１０１】
そして，本実施の形態では，メモリ領域割当関数からのシステムコールに応答して，OSがアドレスレンジチェックの管理領域としてメモリ割当領域を識別する管理領域識別情報IDを，先頭仮想アドレスの最上位ビットに埋め込んで，引数として，関数に返している。それにより，複数の管理対象のメモリ割当領域を区別してアドレスレンジチェックすることができる。さらに，管理領域識別情報IDにアドレスレンジチェック不要を示すID=0を採用することで，アドレスレンジチェックの管理が不要なメモリ割当領域について，無駄なトラップが発生しないようにできる。また，プロセス毎にアドレスレンジチェック対象または対象外を区別するために，この管理領域識別IDを利用することもできる。
【０１０２】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１０３】
（付記１）
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録する割当部と，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う判定部とを有する演算処理装置。
【０１０４】
（付記２）
付記１において，
前記割当部は，前記メモリ領域割当関数を識別する管理領域識別情報を前記アドレス範囲情報と共に前記アドレスレンジテーブルに登録し，
前記メモリ割当領域に対するメモリアクセス命令は前記管理領域識別情報とアクセス先アドレスとを有し，
前記判定部は，前記メモリアクセス命令の実行に応答して，前記メモリアクセス命令のアクセス先アドレスが，前記アドレスレンジテーブル内の前記メモリアクセス命令の管理領域識別情報に対応するアドレス範囲情報が示すアドレス範囲内にあるか否かを判定する演算処理装置。
【０１０５】
（付記３）
付記２において，
前記割当部は，アドレスレンジチャックを必要とするメモリ領域割当関数の実行に応答して，第１の管理領域識別情報群のうちいずれかの管理領域識別情報を前記アドレス範囲情報と共に前記アドレスレンジテーブルに登録し，前記アドレスレンジチェックを必要としないメモリ領域割当関数の実行に応答して，前記第１の管理領域識別情報群と区別可能な第２の管理領域識別情報を前記アドレス範囲情報と共に前記アドレスレンジテーブルに登録し，
前記判定部は，前記メモリアクセス命令の実行に応答して，前記メモリアクセス命令が保持する管理領域識別情報が前記第２の管理領域識別情報の場合には，前記アクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報を示すアドレス範囲内にあるか否かの判定に係わらず，アドレス範囲外とは判定しない演算処理装置。
【０１０６】
（付記４）
付記１において，
更に，メモリアクセス命令の実行に応答して，前記メモリアクセス命令のアクセス先アドレスを物理アドレスに変換するアドレス変換参照テーブルを参照して，前記アクセス先アドレスに対応する物理アドレスを出力するアドレス変換ユニットを有し，
前記判定部を前記アドレス変換ユニットとが，同じパイプラインステージに設けられている演算処理装置。
【０１０７】
（付記５）
付記１において，
前記アドレスレンジテーブルが前記メモリ内に記憶され，
前記判定部は，キャッシュパイプラインに設けられ，前記アドレスレンジテーブル内の所定数のエレメントのアドレス範囲情報が登録されるアドレスレンジレジスタを有し，前記判定処理において，前記アドレスレンジレジスタを参照して判定する第１の判定を行い，前記第１の判定にて前記アクセス先アドレスが前記アドレスレンジレジスタ内に登録されているアドレス範囲情報が示すアドレス範囲内にない場合に，前記アドレスレンジテーブルを参照して判定する第２の判定を起動する演算処理装置。
【０１０８】
（付記６）
付記５において，
前記判定部は，前記第２の判定をオペレーションシステムに実行させる演算処理装置。
【０１０９】
（付記７）
付記５において，
前記判定部は，前記アドレスレンジテーブル内のエレメントのアドレス範囲情報を順番に読み出して前記アドレスレンジレジスタに登録するテーブルウオーク回路を有し，前記第２の判定を前記登録されたアドレスレンジレジスタのアドレス範囲情報に基づいて実行する演算処理装置。
【０１１０】
（付記８）
付記２において，
更に，メモリアクセス命令の実行に応答して，前記メモリアクセス命令のアクセス先アドレスを物理アドレスに変換するアドレス変換参照テーブルを参照して，前記アクセス先アドレスに対応する物理アドレスを出力するアドレス変換ユニットを有し，
前記判定部を前記アドレス変換ユニットとが，同じパイプラインステージに設けられ，
前記アドレス変換ユニットは，アドレスレンジチェック機構が有効に設定されている場合は，前記アクセス先アドレス内の管理領域識別情報を無視して前記アドレス変換参照テーブルを参照し，無効に設定されている場合は，前記アクセス先アドレス内の管理領域識別情報領域のアドレスを無視せずに前記アドレス変換参照テーブルを参照する演算処理装置。
【０１１１】
（付記９）
付記５において，
コンテキストごとにアドレスレンジテーブルが確保されるとともに，前記コンテキストの切り替えが発生した場合，切り替え前のアドレスレンジレジスタの内容を前記メモリに退避するとともに，切り替え後のアドレスレンジテーブルの内容を前記メモリから復帰する演算処理装置。
【０１１２】
（付記１０）
演算処理装置と，前記演算処理装置に接続されたメモリとを有する情報処理装置において，
前記演算処理装置は，
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録する割当部と，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う判定部とを有する情報処理装置。
【０１１３】
（付記１１）
演算処理装置と，前記演算処理装置に接続されたメモリとを有する情報処理装置の制御方法において，
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，前記演算処理装置が有する割当部が，前記メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録し，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記演算処理装置が有する判定部が，前記アドレスレンジテーブルを参照して，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行う情報処理装置の制御方法。
【０１１４】
（付記１２）
演算処理装置と，前記演算処理装置に接続されたメモリとを有する情報処理装置の制御プログラムにおいて，
メモリ領域の割当を要求するメモリ領域割当関数の実行に応答して，前記演算処理装置が有する割当部に，前記メモリ内にメモリ割当領域を確保し，前記メモリ割当領域のアドレス範囲を示すアドレス範囲情報をアドレスレンジテーブルに登録させ，
前記メモリ割当領域に対するメモリアクセス命令の実行に応答して，前記演算処理装置が有する判定部に，前記アドレスレンジテーブルを参照させ，前記メモリアクセス命令のアクセス先アドレスが前記アドレスレンジテーブルに登録されたアドレス範囲情報が示すアドレス範囲内にあるか否かの判定処理を行わさせる情報処理装置の制御プログラム。
【符号の説明】
【０１１５】
１５：アドレスレンジチェックユニット
１５Ａ：アドレスレンジレジスタ
１５Ｂ：アドレスレンジチェック回路
１５４：メモリアクセス命令，ロード命令
【図１】
2015060499.tif 000003
【図２】
2015060499.tif 000004
【図３】
2015060499.tif 000005
【図４】
2015060499.tif 000006
【図５】
2015060499.tif 000007
【図６】
2015060499.tif 000008
【図７】
2015060499.tif 000009
【図８】
2015060499.tif 000010
【図９】
2015060499.tif 000011
【図１０】
2015060499.tif 000012
【図１１】
2015060499.tif 000013
【図１２】
2015060499.tif 000014
【図１３】
2015060499.tif 000015
【図１４】
2015060499.tif 000016
【図１７】
2015060499.tif 000017
【図１５】
2015060499.tif 000018
【図１６】
2015060499.tif 000019
【図１８】
2015060499.tif 000020
【図１９】
2015060499.tif 000021