(57)【要約】【課題】使用頻度の高い論理アドレス空間が頻繁に入れ替わることを防止する演算処理装置を提供することを課題とする。【解決手段】アドレス変換対を記憶するバッファ領域を有する記憶装置に接続される演算処理装置において、複数の論理アドレスレジスタのうち使用履歴が最も古い論理アドレスレジスタの番号を保持するＬＲＵレジスタと、記憶装置に対するアクセス要求に含まれる論理アドレスが、下限論理アドレスレジスタが保持する下限論理アドレスから上限論理アドレスレジスタが保持する上限論理アドレスまでの論理アドレス空間の範囲に入っていない場合、ＬＲＵレジスタが保持する論理アドレスレジスタの番号を読み出す読み出し部（Ｓ５０２）と、読み出された番号の論理アドレスレジスタを無効にし、アクセス要求に含まれる論理アドレスに対応する論理アドレス空間を、無効にした論理アドレスレジスタに設定する設定部（Ｓ４１０）を有する。【選択図】図５
2013069139.tif 000002
【特許請求の範囲】
【請求項１】
仮想アドレスと論理アドレスとを対応付けたアドレス変換対を記憶するバッファ領域を有する記憶装置に接続される演算処理装置において、
前記記憶装置に設定する複数の論理アドレス空間の下限論理アドレスを保持する下限論理アドレスレジスタと、前記複数の論理アドレス空間の上限論理アドレスを保持する上限論理アドレスレジスタとを含む、論理アドレスを保持する論理アドレスレジスタを複数備える論理アドレスレジスタセットと、
前記複数の論理アドレスレジスタのうち使用履歴が最も古い論理アドレスレジスタの番号を保持するＬＲＵレジスタと、
前記記憶装置に対するアクセス要求に含まれる論理アドレスが、前記下限論理アドレスレジスタが保持する下限論理アドレスから前記上限論理アドレスレジスタが保持する上限論理アドレスまでの論理アドレス空間の範囲に入っていない場合、前記ＬＲＵレジスタが保持する論理アドレスレジスタの番号を読み出す読み出し部と、
前記読み出された番号の論理アドレスレジスタを無効にし、前記アクセス要求に含まれる論理アドレスに対応する論理アドレス空間を、前記無効にした論理アドレスレジスタに設定する設定部を有することを特徴とする演算処理装置。
【請求項２】
前記演算処理装置はさらに、
前記アクセス要求に含まれる論理アドレスが、前記下限論理アドレスレジスタが保持する下限論理アドレスから前記上限論理アドレスレジスタが保持する上限論理アドレスまでの論理アドレス空間の範囲に含まれる場合、前記論理アドレス空間の範囲に含まれる論理アドレスを保持する論理アドレスレジスタの使用履歴が最新になるように、前記ＬＲＵレジスタが記憶する番号を更新する更新部を有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置はさらに、
仮想アドレスと物理アドレスとを対応付けたアドレス変換対を記憶するアドレス変換バッファと、
前記記憶装置に記憶されている情報の一部を記憶するキャッシュメモリと、
前記アクセス要求に含まれる仮想アドレスを含んだアドレス変換対が前記アドレス変換バッファに記憶されている場合、前記アドレス変換対により変換された物理アドレスを用いて前記キャッシュメモリにアクセスするアクセス部とを有し、
前記読み出し部は、前記アクセス要求に含まれる仮想アドレスを含んだアドレス変換対が前記前記バッファ領域に存在しない場合、前記ＬＲＵレジスタに記憶される番号を読み出すことを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
前記演算処理装置はさらに、
前記アクセスリクエスト要求に含まれる論理アドレスが、前記下限論理アドレスレジスタが保持する下限論理アドレスから前記上限論理アドレスレジスタが保持する上限論理アドレスまでの範囲に含まれる場合、前記論理アドレスに対応する前記バッファ領域のアドレス変換対に基づき生成した物理アドレスを含むアドレス変換対を、前記アドレス変換バッファに登録する登録部を有することを特徴とする請求項３記載の演算処理装置。
【請求項５】
前記論理アドレスレジスタセットは、
論理アドレスを物理アドレスに変換するオフセットアドレスを記憶するオフセットレジスタを有し、
前記登録部は、
前記アクセスリクエスト要求に含まれる論理アドレスに前記オフセットアドレスを加算して前記物理アドレスを生成することを特徴とする請求項４記載の演算処理装置。
【請求項６】
仮想アドレスと論理アドレスとを対応付けたアドレス変換対を記憶するバッファ領域を有する記憶装置に接続され、前記記憶装置に設定する複数の論理アドレス空間の下限論理アドレスを保持する下限論理アドレスレジスタと前記複数の論理アドレス空間の上限論理アドレスを保持する上限論理アドレスレジスタを含む論理アドレスレジスタセットと、前記複数の論理アドレスレジスタのうち使用履歴が最も古い論理アドレスレジスタの番号を保持するＬＲＵレジスタを有する演算処理装置の制御方法において、
前記演算処理装置が有する読出し部が、前記記憶装置に対するアクセス要求に含まれる論理アドレスが、前記下限論理アドレスレジスタが保持する下限論理アドレスから前記上限論理アドレスレジスタが保持する上限論理アドレスまでの論理アドレス空間の範囲に入っていない場合、前記ＬＲＵレジスタに保持される論理アドレスレジスタの番号を読み出し、
前記演算処理装置が有する設定部が、前記読み出された番号の論理アドレスレジスタを無効にし、
前記設定部が、前記アクセス要求に含まれる論理アドレスに対応する論理アドレス空間を、前記無効にした論理アドレスレジスタに設定することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
仮想的な計算機である仮想計算機を同時に複数稼動させる計算機の仮想化の技術がある。計算機の仮想化を実現するために、アドレス変換が行われる。アドレス変換はマルチタスキング機能を備えたオペレーティングシステム（Operating System、以下、ＯＳという）を前提とした場合、必須の計算機の機能である。アドレス変換とは、プログラムが動作する仮想アドレス空間の仮想アドレスを、計算機のメモリ空間の物理アドレスに変換することである。現在のほとんどの計算機アーキテクチャで採用されているページング方式によるアドレス変換では、ページサイズによって定まる仮想アドレスの上位ビットを物理アドレスに対応する値に変換することを行う。アドレス変換処理は全てのメモリアクセス動作に関わるため高速に実行する必要があり、ＴＬＢ（Translation Lookaside Buffer）と呼ばれる仮想アドレスと物理アドレスとのアドレス変換対を記憶するバッファメモリを有するＣＰＵ（Central Processing Unit）によってハードウェアが処理を行う。
【０００３】
実計算機上でハイパーバイザー（Hypervisor）を実行させ、ハイパーバイザーによる処理により生成される複数の仮想計算機上でＯＳを動作させ、ハイパーバイザーの処理により、仮想計算機上のプロセス毎に割当てられた仮想アドレス空間を識別するＲＩＤ（Region Identifier）値を使用してＴＬＢのエントリ計算を行う計算機仮想化装置のＴＬＢ仮想化方法が知られている（例えば、特許文献１参照）。ここでは、ハイパーバイザーの処理により、実計算機上のＴＬＢのエントリ計算に使用される仮想計算機上のＲＩＤ値を複数の仮想計算機において異なる値に変換し、さらに、変換されたＲＩＤ値のビット列の値を変更する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１４６３４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
１つの側面では、本発明の目的は、使用頻度の高い論理アドレス空間が頻繁に入れ替わることを防止する演算処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００６】
演算処理装置は、仮想アドレスと論理アドレスとを対応付けたアドレス変換対を記憶するバッファ領域を有する記憶装置に接続される演算処理装置において、前記記憶装置に設定する複数の論理アドレス空間の下限論理アドレスを保持する下限論理アドレスレジスタと、前記複数の論理アドレス空間の上限論理アドレスを保持する上限論理アドレスレジスタとを含む、論理アドレスを保持する論理アドレスレジスタを複数備える論理アドレスレジスタセットと、前記複数の論理アドレスレジスタのうち使用履歴が最も古い論理アドレスレジスタの番号を保持するＬＲＵレジスタと、前記記憶装置に対するアクセス要求に含まれる論理アドレスが、前記下限論理アドレスレジスタが保持する下限論理アドレスから前記上限論理アドレスレジスタが保持する上限論理アドレスまでの論理アドレス空間の範囲に入っていない場合、前記ＬＲＵレジスタが保持する論理アドレスレジスタの番号を読み出す読み出し部と、前記読み出された番号の論理アドレスレジスタを無効にし、前記アクセス要求に含まれる論理アドレスに対応する論理アドレス空間を、前記無効にした論理アドレスレジスタに設定する設定部を有する。
【発明の効果】
【０００７】
使用頻度の高い論理アドレス空間が頻繁に入れ替わることを防止することができる。
【図面の簡単な説明】
【０００８】
【図１】実施形態による演算処理装置の構成例を示す図である。
【図２】アドレス変換バッファの構成例を示す図である。
【図３】メインメモリのアドレス空間例を示す図である。
【図４】参考技術による演算処理装置の処理例を示すフローチャートである。
【図５】本実施形態による演算処理装置の処理例を示すフローチャートである。
【図６】ハードウェアテーブルウォーカーを有する演算処理装置の構成例を示す図である。
【図７】図６のハードウェアテーブルウォーカーの一部の具体的な構成例を示す図である。
【発明を実施するための形態】
【０００９】
図１は、実施形態による演算処理装置１の構成例を示す図である。なお、図１は、演算処理装置１を構成する構成要素の一部を抽出して例示するものにすぎない。演算処理装置１は、例えば中央演算処理装置（ＣＰＵ）である。演算処理装置１は、その内部に命令制御部１１、演算部１２、Ｌ１命令タグ１３、Ｌ１データタグ１４、Ｌ１命令キャッシュ１５、Ｌ１データキャッシュ１６、Ｌ２キャッシュ１７、及びアドレス変換バッファ（ＴＬＢ）２０を有する。
【００１０】
演算処理装置１は、コンピュータが備える記憶装置に記憶されている命令に従って演算を行い、演算結果に従って情報を処理する。ここで、「命令」とは、演算処理装置１が実行可能な命令セットに含まれる命令のことをいう。
【００１１】
命令制御部１１は、演算処理装置１が実行する処理の流れの制御を行う。具体的には、命令制御部１１は、演算処理装置１において処理すべき命令を記憶装置から読み込み、解釈し、解釈結果を演算部１２に送信する（図１のＢ１を参照）。演算部１２は、演算を行う処理部である。具体的には、演算部１２は、命令の対象となるデータを記憶装置から読み込み、命令制御部１１が有する図示しない命令デコーダによって解釈された命令に従って演算し、演算結果を命令制御部１２に送信する（図１のＢ１を参照）。
【００１２】
命令制御部１１や演算部１２が命令やデータを読み込む記憶装置には、メインメモリ２とキャッシュメモリがある。キャッシュメモリには、１次（Level１）キャッシュ（以下、Ｌ１キャッシュ）や２次（Level２）キャッシュ（以下、Ｌ２キャッシュ）などがある。通常、これらのキャッシュメモリは、演算処理装置１内部に階層構造で備えられる。図１に例示する演算処理装置１においては、Ｌ１キャッシュとして、命令専用のＬ１キャッシュであるＬ１命令キャッシュ１５と、データ専用のＬ１キャッシュであるＬ１データキャッシュ１６とが備えられている。また、Ｌ２キャッシュとして、Ｌ２キャッシュ１７が備えられている。メインメモリ２は、演算処理装置１に接続され、記憶装置の一つとして演算処理装置１の外部に備えられている。
【００１３】
Ｌ１命令キャッシュ１５及びＬ１データキャッシュ１６は、演算処理装置１と同じクロックで動作することが可能であり、命令制御部１１や演算部１２からの要求に対して、高速に応答することが可能である（図１のＢ２を参照）。しかしながら、Ｌ１命令キャッシュ１５及びＬ１データキャッシュ１６の容量は、総計で３２Ｋ〜１２８ＫＢ程度のものが多く、多くの情報を記憶することができない。このため、Ｌ２キャッシュ１７が、Ｌ１命令キャッシュ１５及びＬ１データキャッシュ１６に記憶することができない情報のうち、利用頻度の高い情報を記憶することになる（図１のＢ３を参照）。なお、Ｌ２キャッシュ１７に記憶することができない情報については、メインメモリ２に記憶される（図１のＢ４を参照）。キャッシュメモリ１５〜１７は、メインメモリ２に記憶されている情報の一部を記憶する。
【００１４】
命令制御部１１や演算部１２が処理を開始する時点では、命令やデータは、メインメモリ２上に存在しており、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６、あるいはＬ２キャッシュ１７には、何も記憶されていない。命令制御部１１や演算部１２が命令やデータをメインメモリ２から読み出す際に、命令やデータがＬ１命令キャッシュ１５やＬ１データキャッシュ１６、あるいはＬ２キャッシュ１７にロードされる。命令制御部１１や演算部１２は、これ以降、低速なメインメモリ２ではなく、高速なＬ１命令キャッシュ１５やＬ１データキャッシュ１６、あるいはＬ２キャッシュ１７から命令やデータを読み出す。
【００１５】
言い換えると、命令制御部１２や演算部１２が読み出そうとする命令やデータは、必ずしも、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に記憶されているとは限らない。このため、Ｌ１命令タグ１３やＬ１データタグ１４が、命令制御部１１や演算部１２に利用されることになる。すなわち、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に命令やデータがロードされるのと同時に、Ｌ１命令タグ１３やＬ１データタグ１４には、これらの命令やデータがメインメモリ２のどのアドレスに記憶されているかを示す情報がセットされている。したがって、命令制御部１１や演算部１２は、命令やデータを読み出す際に、まず、Ｌ１命令タグ１３やＬ１データタグ１４に対して問い合わせ、読み出そうとする命令やデータが、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に記憶されているか否かを確認する。
【００１６】
演算処理装置１においては、仮想記憶方式が適用されている。アドレス変換バッファ２０は、仮想アドレス（Virtual Address）ＶＡと物理アドレス（Physical Address）ＰＡとを対応付けたアドレス変換対を記憶する。仮想アドレスＶＡは、ページ単位にアクセス保護が可能な仮想的に与えられたアドレス体系である。物理アドレスＰＡは、メインメモリ２に実際にアクセスする際に用いるアドレスである。命令制御部１１や演算部１２が命令やデータを読み出す際には、まず、アドレス変換バッファ２０に対して、仮想アドレスを指定し（図１のＢ５を参照）、アドレス変換バッファ２０が物理アドレスに変換した上で、Ｌ１命令タグ１３やＬ１データタグ１４に対して問い合わせを行うことになる（図１のＢ６を参照）。
【００１７】
図２は、アドレス変換バッファ２０の構成例を示す図である。アドレス変換バッファ２０の構成について説明する。図２に示したように、アドレス変換バッファ２０は、その内部に仮想アドレスレジスタ２１、コンテキストレジスタ２２、ＴＬＢ本体部２３、及びＴＬＢ検索部２４を有する。
【００１８】
仮想アドレスレジスタ２１は、命令制御部１１が出力した仮想アドレスＶＡを保持するレジスタである。コンテキストレジスタ２２は、演算部１２が出力するコンテキストを保持するレジスタである。コンテキストは、命令の発行元であるアプリケーションのプロセスを特定する情報である。
【００１９】
ＴＬＢ本体部２３は、タグ部３１とデータ部３２を有する。タグ部３１は、仮想アドレスＶＡとコンテキストｃｔｘｔをエントリとして保持する。仮想アドレスＶＡとコンテキストｃｔｘｔは、検索用のタグとして使用される。また、データ部３２は、仮想アドレスＶＡと物理アドレスＰＡとを対応付けたアドレス変換対をエントリとして保持する。
【００２０】
ＴＬＢ検索部２４について説明する。ＴＬＢ検索部２４は、仮想アドレスレジスタ２１が保持する仮想アドレスＶＡとコンテキストレジスタ２２の値との組み合わせが、タグ部３１に登録された仮想アドレスＶＡ及びコンテキストｃｔｘｔの値と一致するか否かを判定する。
【００２１】
ＴＬＢ検索部２４内部の比較回路４１は、仮想アドレスレジスタ２１が保持する仮想アドレスＶＡと、タグ部３１に登録された仮想アドレスＶＡとを比較し、比較結果を論理積（ＡＮＤ）回路４３に出力する。同様に、ＴＬＢ検索部２４内部の比較回路４２は、コンテキストレジスタ２２が保持するコンテキストと、タグ部３１に登録されたコンテキストｃｔｘｔとを比較し、比較結果を論理積回路４３に出力する。アンド回路４３は、仮想アドレスＶＡとコンテキストｃｔｘｔの双方が一致した場合に、ＴＬＢヒットを示す値を出力する。なお、仮想アドレスＶＡの一致に加えて、コンテキストｃｔｘｔの一致を求めるのは、異なるプロセスが使用する仮想アドレスＶＡが偶然に一致する可能性があるためである。
【００２２】
ＴＬＢ検索部２４がＴＬＢヒットを出力した場合、アドレス変換バッファ２０は、仮想アドレスＶＡに対応する物理アドレスＰＡをデータ部３２から取り出して出力する。一方、ＴＬＢ検索部２４がＴＬＢヒットを出力しなかった、すなわちＴＬＢミスに対応する値を出力した場合には、命令制御部１１は、メインメモリ２内のＴＳＢ（変換記憶バッファ：Translation Storage Buffer）領域３に格納されたページテーブルを参照し、仮想アドレスＶＡに対応するアドレス変換対を取得し、演算部１２に渡す。演算部１２は、渡されたアドレス変換対と、実行中のプロセスを示すコンテキストをＴＬＢ本体部２３に登録する。その後、命令制御部１１が命令を再度実行し、アドレス変換バッファ２０に登録したアドレス変換対を用いて仮想アドレスＶＡを物理アドレスＰＡに変換する。
【００２３】
「仮想記憶方式」は、外部記憶装置（ハードディスク装置等）をメインメモリ２の待避領域として利用することで、コンピュータが実装しているメモリ容量よりも多くのメモリ容量がコンピュータに備えられているようにみせかける技術である。すなわち、「仮想記憶方式」とは、メモリ容量が不足すると、メインメモリ２上の情報のうち使用頻度の少ない情報を、ＯＳが予めハードディスク装置内に確保していたスワップ領域に一時的に待避させることで、一時的にメモリ容量の不足を補うものである。
【００２４】
かかる「仮想記憶方式」では、「仮想アドレスＶＡ」および「物理アドレスＰＡ」の２つのアドレスを利用する。アプリケーション側がメインメモリ２に対して読み書き（メモリアクセス）を行う場合には、仮想アドレスＶＡを利用する。これに対して、メインメモリ２の素子に付与されているアドレスが物理アドレスＰＡである。仮想記憶方式を採用するコンピュータは、仮想アドレスＶＡから物理アドレスＰＡへの変換を行うことを目的として、仮想アドレスＶＡと物理アドレスＰＡとを変換するアドレス変換対（ＴＴＥ（Translation Table Entry））を一覧表（以下、ページテーブルと呼ぶ）で記憶している。
【００２５】
ページテーブルは、通常、メインメモリ２のＴＳＢ領域３に記憶されているが、仮想アドレスＶＡから物理アドレスＰＡへの変換が必要になるたびに、メインメモリ２に記憶されているページテーブルを演算処理装置１が参照しに行くとすると、演算処理装置１からメインメモリ２へのアクセスは低速にならざるを得ないことから、変換に非常に多くの時間が費やされることになってしまう。これを避けることを目的として、アドレス変換バッファ２０が演算処理装置１内部に備えられており、アドレス変換バッファ２０が、ＴＳＢ領域３に記憶されているページテーブルの一部のアドレス変換対を記憶している。
【００２６】
演算処理装置１がアプリケーションによりメインメモリ２に対して読み書き（メモリアクセス）を行う場合について説明する。まず、演算処理装置１は、ＯＳから所定の仮想アドレスＶＡを指定される。続いて、演算処理装置１は、ＯＳから指定された所定の仮想アドレスＶＡによるアドレス変換バッファ２０の検索を行い、当該検索に失敗すると、ＴＬＢミスが発生する。かかるＴＬＢミスが発生した場合、ＴＬＢミストラップが発生するので、演算処理装置１は、このＴＬＢミストラップの発生をＯＳに報告し、報告を受けたＯＳが、演算処理装置１に対して、トラップ処理を行う。演算処理装置１は、トラップ処理として、当該所定の仮想アドレスＶＡに関するアドレス変換対（所定の仮想アドレスＶＡに対応づけられている物理アドレスＰＡとのアドレス変換対）が、キャッシュメモリ１５〜１７に記憶されているか否かを確認する。記憶されている場合には、記憶されているアドレス変換対をアドレス変換バッファ２０に登録し、記憶されていない場合には、アドレス変換対をＴＳＢ領域３から取得して一旦、キャッシュメモリ１５〜１７に記憶させた後に、アドレス変換バッファ２０に登録する。こうすることで、演算処理装置１は、ＴＬＢミスした所定の仮想アドレスＶＡによるアドレス変換バッファ２０の検索を再び行うと、今度は、当該検索に失敗しないで、ＴＬＢヒットすることになる。
【００２７】
演算処理装置１は、限られた計算機資源を有効に活用するため、ハードウェア仮想化技術を用いる。ハードウェア仮想化では、ＯＳはハイパーバイザー上で動作している。メモリ管理は、ハイパーバイザーが行うため、ＴＬＢミストラップ処理が発生すると、ＯＳに加えてハイパーバイザーが上記処理を行うため、オーバーヘッドが更に大きくなる。また、ハイパーバイザー上の複数のＯＳでＴＬＢミストラップ処理が発生した場合に、ハイパーバイザーの負荷が大きくなり、ＴＬＢミストラップ処理のペナルティが一段と大きくなる。そこで、ＯＳ及びハイパーバイザーによるトラップ処理を行う代わりに、ハードウェアが自らＴＬＢミスしたエントリをメインメモリ２上のＴＳＢ領域３まで取りに行き、自動でアドレス変換バッファ２０に登録するハードウェアテーブルウォーカー６０２（図６）を用いる。ハードウェアテーブルウォーカー６０２は、演算処理装置１内に設けられるハードウェアである。
【００２８】
演算処理装置１は、ＴＬＢミスを検知すると、ＯＳにトラップ報告する代わりに、ハードウェアテーブルウォーカー６０２を起動する。ハードウェアテーブルウォーカー６０２は、ＴＬＢミスしたアドレス変換対をメインメモリ２上のＴＳＢ領域３まで取りに行き、そのアドレス変換対が必要なアドレス変換対であることをチェックし、論理アドレス（Real Address）ＲＡが所定範囲内に収まっているかのチェックなどを行う。ここで、論理アドレスＲＡは、ハイパーバイザーにより仮想マシン用に仮想化されたメインメモリ２上の物理アドレスである。論理アドレスＲＡが所定範囲内であれば、論理アドレスＲＡを物理アドレスＰＡに変換し、仮想アドレスＶＡ及び物理アドレスＰＡのアドレス変換対をアドレス変換バッファ２０に登録し、ＴＬＢミスしたリクエストを再投入し、トラップ処理なしで高速に動作を継続する。トラップ処理を行った場合は、そのリクエストの後続リクエストは、一旦すべてキャンセルされて、トラップ完了後に再実行することになるが、ハードウェアテーブルウォーカー６０２が起動される場合はその必要はないので、後続リクエストも即座に実行可能となり、キャンセルのペナルティもない。
【００２９】
仮想マシンにおいては、アドレス変換を行う際に、仮想化されたゲストＯＳ（スーパーバイザー）は、仮想アドレスＶＡから論理アドレスＲＡへの変換を担う。論理アドレスＲＡから物理アドレスＰＡへの変換は、ハイパーバイザーが管理する。ハイパーバイザーは、論理アドレスレジスタセット６２０（図６）を用いて、論理アドレスＲＡから物理アドレスＰＡへのアドレス変換を行う。
【００３０】
図６に示すように、論理アドレスレジスタセット６２０は、下限論理アドレスレジスタ６２１、上限論理アドレスレジスタ６２２及びオフセットレジスタ６２３の３つのレジスタを一組としたレジスタセットである。下限論理アドレスレジスタ６２１は、論理アドレス空間の下限アドレスを記憶する。上限論理アドレスレジスタ６２２は、論理アドレス空間の上限アドレスを記憶する。オフセットレジスタ６２３は、論理アドレスＲＡを物理アドレスＰＡに変換するためのオフセットアドレスを記憶する。このオフセットアドレスを論理アドレスＲＡに加算することにより、物理アドレスＰＡを算出することができる。
【００３１】
図３は、メインメモリ２のアドレス空間例を示す図である。メインメモリ２は、複数の論理アドレス空間ＲＡ１〜ＲＡ−Ｎ（Ｎは自然数）及びＴＳＢ領域３を有する。論理アドレス空間ＲＡ１〜ＲＡ−Ｎの各々は、上記の論理アドレスレジスタセット６２０により下限値及び上限値が規定される。すなわち、論理アドレスレジスタセット６２０内の下限論理アドレスレジスタ６２１はメインメモリ２に設定する論理アドレス空間の下限論理アドレスを記憶し、論理アドレスレジスタセット６２０内の上限論理アドレスレジスタ６２２はメインメモリ２に設定する論理アドレス空間の上限論理アドレスを記憶する。ハイパーバイザーは、メインメモリ２の物理アドレスＰＡに対してＮ個の論理アドレス空間ＲＡ１〜ＲＡ−Ｎを割り当てることができる。Ｎ個を超える論理アドレス空間が必要になったときは、使用履歴の古い論理アドレス空間を一旦使用不能にし、新たに論理アドレス空間を割り当てる。Ｎ個の論理アドレス空間ＲＡ１〜ＲＡ−Ｎには、Ｎ組みの論理アドレスレジスタセット６２０が設けられる。ＴＳＢ領域３は、仮想アドレスＶＡと論理アドレスＲＡとを対応付けたアドレス変換対を記憶する。
【００３２】
ハードウェアテーブルウォーカー６０２は、ハイパーバイザーが用意したＮ組みの論理アドレスレジスタセット６２０をチェックして、メインメモリ２上のＴＳＢ領域３から取ってきたエントリ（仮想アドレスＶＡと論理アドレスＲＡのアドレス変換対）の論理アドレスＲＡが、Ｎ組みの論理アドレスレジスタセット６２０の下限論理アドレスレジスタ６２１及び上限論理アドレスレジスタ６２２で指定される論理アドレス空間の範囲内に収まっていれば、その論理アドレスレジスタセット６２０のオフセットアドレス６２３のオフセットアドレスを使い、論理アドレスＲＡにこのオフセットアドレスを加算して、物理アドレスＰＡを算出し、仮想アドレスＶＡと物理アドレスＰＡのアドレス変換対をアドレス変換バッファ２０に登録する。
【００３３】
上記のように、Ｎ組みの論理アドレスセット６２０を通じて、ハイパーバイザーは、Ｎ個の使用可能な論理アドレス空間ＲＡ１〜ＲＡ−Ｎを割り当てる。Ｎ個を超える論理アドレス空間を割り当てる場合は、すでに割り当てられたＮ個の論理アドレス空間のうち１つを無効にして、そこにＮ＋１個目の論理アドレス空間を新規に割り当てる。このような論理アドレス空間の入れ替えは、非常にペナルティが大きいので、できるだけ効率的にＮ個の論理アドレス空間を利用したいという課題がある。しかし、ハイパーバイザーは、ハードウェアがＮ個の論理アドレス空間ＲＡ１〜ＲＡ−Ｎのうちどの論理アドレス空間を頻繁に利用しているのか知る術がないので、ＦＩＦＯ（ファーストインファーストアウト）等で順番に論理アドレス空間を入れ替える必要がある。そうすると、ＯＳがトラップ処理などのために常時使用するカーネル領域がＮ回に１回の割合で、論理アドレス空間から一旦追い出されてしまうことになる。再び、すぐに追い出された論理アドレス空間が必要になるため、論理アドレス空間を取り直す必要があるが、無駄な論理アドレス空間の入れ替え処理が発生し、著しい性能劣化の要因となる。
【００３４】
図４は、参考技術による演算処理装置１の処理例を示すフローチャートである。ステップＳ４０１では、演算処理装置１は、アプリケーションにより、メインメモリ２に対して読み書き（メモリアクセス）のリクエストを入力する。
【００３５】
すると、ステップＳ４０２では、演算処理装置１は、ＯＳから所定の仮想アドレスＶＡを指定される。続いて、演算処理装置１は、ＯＳから指定された仮想アドレスＶＡのアドレス変換対についてアドレス変換バッファ２０の検索を行う。検索に成功するとＴＬＢヒットとしてステップＳ４０３に進み、検索に失敗するとＴＬＢミスとしてステップＳ４０４に進む。具体的には、メインメモリ２のアクセスリクエストの仮想アドレスＶＡのアドレス変換対がアドレス変換バッファ２０に存在するときにはＴＬＢヒットとなり、存在しないときにはＴＬＢミスになる。
【００３６】
ステップＳ４０３では、演算処理装置１のアクセス部は、アドレス変換バッファ２０が仮想アドレスＶＡから物理アドレスＰＡに変換した上で、Ｌ１命令タグ１３やＬ１データタグ１４に対して問い合わせを行い、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に対して命令やデータのアクセスを行う。具体的には、演算処理装置１のアクセス部は、ステップＳ４０１のメインメモリ２のアクセスリクエストの仮想アドレスＶＡのアドレス変換対がアドレス変換バッファ２０に存在するときには、そのアドレス変換対により変換された物理アドレスＰＡを用いてキャッシュメモリ１５〜１７にアクセスする。
【００３７】
ステップＳ４０４では、演算処理装置１は、ＴＬＢミスを検知すると、ハードウェアテーブルウォーカー６０２を起動する。ハードウェアテーブルウォーカー６０２は、ＴＬＢミスした仮想アドレスＶＡのアドレス変換対をメインメモリ２のＴＳＢ領域３上で検索する。具体的には、その仮想アドレスＶＡに対応する論理アドレスＲＡが現存のＮ組みの論理アドレスレジスタセット６２０の論理アドレス空間の範囲内に収まっているか否かをチェックする。
【００３８】
次に、ステップＳ４０５では、演算処理装置１は、上記の論理アドレス空間の範囲内であるときにはＴＳＢヒットとしてステップＳ４０６及びＳ４０７へ進み、範囲内でないときにはＴＳＢミスとしてステップＳ４０８へ進む。具体的には、ステップＳ４０１のメインメモリ２のアクセスリクエストの論理アドレスＲＡが、Ｎ組みの論理アドレスレジスタセット６２０により設定される論理アドレス空間の範囲に入っているときにはＴＳＢヒットとなり、範囲に入っていないときにはＴＳＢミスとなる。
【００３９】
ステップＳ４０６では、演算処理装置１は、上記の論理アドレスＲＡを物理アドレスＰＡに変換し、仮想アドレスＶＡ及び物理アドレスＰＡのアドレス変換対をアドレス変換バッファ２０に登録し、ＴＬＢミスしたリクエストを再投入し、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に対して命令やデータのアクセスを行う。具体的には、演算処理装置１のアドレス変換バッファ登録部は、ステップＳ４０１のメインメモリ２のアクセスリクエストの論理アドレスＲＡが、Ｎ組みの論理アドレスレジスタセット６２０により設定される論理アドレス空間の範囲に入っているときには、その論理アドレスＲＡに対応するＴＳＢ領域３のアドレス変換対を基に仮想アドレスＶＡ及び物理アドレスＰＡのアドレス変換対を生成し、アドレス変換バッファ２０に登録する。
【００４０】
ステップＳ４０７では、演算処理装置１は、上記の登録に伴い、Ｎ組みの論理アドレスレジスタセット６２０のうちで使用履歴が最も古い論理アドレスセット６２０の番号を、ＬＲＵ（Least Recently Used）情報として更新する。
【００４１】
ステップＳ４０８では、演算処理装置１は、無効ＴＳＢエントリトラップの発生をＯＳに報告し、報告を受けたＯＳが、演算処理装置１に対して、無効ＴＳＢエントリトラップ処理の起動を行う。
【００４２】
次に、ステップＳ４０９では、演算処理装置１は、論理アドレス空間の入れ替え処理を開始する。
【００４３】
次に、ステップＳ４１０では、演算処理装置１は、論理アドレスレジスタセット６２０を更新することにより、論理アドレス空間の入れ替えを行う。具体的には、演算処理装置１は、ＬＲＵ情報が示す最も古い論理アドレス空間を一旦使用不能にし、新たに論理アドレス空間を割り当てる。
【００４４】
次に、ステップＳ４１１では、演算処理装置１は、無効ＴＳＢエントリトラップの処理を終了し、ステップＳ４０１に戻る。
【００４５】
ここで、図４の処理の課題を説明する。ステップＳ４１０において、論理アドレスレジスタセット６２０の更新中に、ステップＳ４０７でＬＲＵ情報の更新が行われる場合を説明する。例えば、ステップＳ４０７で、ＬＲＵ情報の値が２番から３番の論理アドレス空間の番号に変更されたとする。その場合、ステップＳ４１０では、同じ論理アドレスレジスタセット６２０内において、下限論理アドレスレジスタ６２１には２番の論理アドレス空間の下限論理アドレスが記録され、上限論理アドレスレジスタ６２２には３番の論理アドレス空間の下限論理アドレスが記録されてしまうことがある。これでは、正しい論理アドレスレジスタセット６２０の更新が行われないため、誤動作の原因になる。
【００４６】
すなわち、論理アドレスレジスタセット６２０内の３個のレジスタ６２１〜６２２を更新するストア命令が実行される間に、ＬＲＵ情報が更新されてしまうと、間違った番号のレジスタを更新することになり、誤動作してしまう。
【００４７】
これを防ぐためには、論理アドレスレジスタセット６２０内の３個のレジスタ６２１〜６２３を更新するストア命令が実行される間に、ＬＲＵ情報が更新されないようにハイパーバイザーが管理することが考えられる。インオーダー実行の演算処理装置１では、この間に、ハードウェアテーブルウォーカー６０２は実行されないので、上記の動作でも問題ない。なお、インオーダー実行は、プログラムに書かれた通りの順番で命令を逐次実行することである。しかし、アウトオブオーダー実行でハードウェアテーブルウォーカー６０２を起動する場合、論理アドレスレジスタセット６２０内の３個のレジスタ６２１〜６２３の更新の最中に、ＬＲＵ情報が実行中のハードウェアテーブルウォーカー６０２により更新され、上記のように、間違った番号のレジスタを更新することになってしまう問題が生ずる。なお、アウトオブオーダー実行は、プログラムに書かれた命令の順番を変えて実行することである。そこで、アウトオブオーダー実行でも正常に動作可能な実施形態を、以下、説明する。
【００４８】
図５は、本実施形態による演算処理装置１の処理例を示すフローチャートである。図５のフローチャートは、図４のフローチャートに対して、ステップＳ４０７の代わりにステップＳ５０１を設け、ステップＳ５０２を追加したものである。以下、図５のフローチャートが図４のフローチャートに対して異なる点を説明する。
【００４９】
ステップＳ４０５において、ＴＳＢヒットになると、ステップＳ４０６及びＳ５０１に進む。ステップＳ５０１では、演算処理装置１のＬＲＵレジスタ更新部は、ハードウェアテーブルウォーカー６０２によりＬＲＵレジスタ６１９（図６）の更新を行う。具体的には、演算処理装置１のＬＲＵレジスタ更新部は、ステップＳ４０１のメインメモリ２のアクセスリクエストの論理アドレスＲＡが、Ｎ組みの論理アドレスレジスタセット６２０により設定される論理アドレス空間の範囲に入っているときには、その範囲に入っている論理アドレスレジスタセット２０の使用履歴が最新になるように、ＬＲＵレジスタ６１９に記憶される番号を更新する。
【００５０】
本実施形態では、新規に論理アドレス空間を割り当てる場合に、Ｎ組みの論理アドレスレジスタセット６２０のうち、どれを更新するか決定する為に、新規にＬＲＵレジスタ６１９を用意し、ハイパーバイザーに最新の論理アドレス空間の使用状況に関するＬＲＵ情報をハードウェアから通知する手段を設ける。ＬＲＵレジスタ６１９は、Ｎ組みの論理アドレスレジスタセット６２０のうちで使われていない論理アドレスレジスタセット６２０があればそれらのうちで一番若い番号を記憶し、Ｎ組みの論理アドレスレジスタセット６２０がすべて使われていれば、Ｎ組みの論理アドレスレジスタセット６２０のうちでハードウェアテーブルウォーカー６０２の使用履歴が最も古い論理アドレスレジスタセット６２０の番号を記憶する。
【００５１】
ステップ４０９の後、ステップＳ５０２では、演算処理装置１の読み出し部は、ハイパーバイザーの指示により、新規に論理アドレス空間を割り当てる場合に、先ず、ＬＲＵレジスタ６１９の値を読み出す。すなわち、演算処理装置１の読み出し部は、ステップＳ４０１のメインメモリ２のアクセスリクエストの論理アドレスＲＡが、Ｎ組みの論理アドレスレジスタセット６２０により設定される論理アドレス空間の範囲に入っていないときには、ＬＲＵレジスタ６１９に記憶されている番号を読み出す。
【００５２】
次に、ステップＳ４１０では、演算処理装置１の論理アドレスレジスタセット設定部は、読み出したＬＲＵレジスタ６１９の値を基に、Ｎ組みの論理アドレスレジスタセット６２０のうち、どれを更新するかを決める。その後、同じ番号の論理アドレス空間の論理アドレスレジスタセット６２０内の３個のレジスタ６２１〜６２３に対して、ストア命令を発行する。すなわち、演算処理装置１の論理アドレスレジスタセット設定部は、読み出されたＬＲＵレジスタ６１９の番号の論理アドレスレジスタセット６２０を無効にし、ステップＳ４０１のメインメモリ２のアクセスリクエストの論理アドレスＲＡに対応する論理アドレス空間を、上記の無効にした論理アドレスレジスタセット６２０に設定する。ハイパーバイザーは、ストア命令の仮想アドレスＶＡに該当番号を載せるだけで、レジスタ番号を容易に指定可能である。この制御により、違った論理アドレスレジスタセット６２０のレジスタを更新する問題を回避することができる。なお、ＬＲＵレジスタ６１９の読み出しは、論理アドレス空間の入れ替えにかかる時間に比べて非常に短い時間で処理できるので、ＬＲＵレジスタ６１９の読み出しのペナルティは無視できる。
【００５３】
上記のように、アウトオブオーダー実行のハードウェアテーブルウォーカー６０２において、効率的に論理アドレス空間の入れ替えを行い、必要な論理アドレス空間が頻繁に入れ替わることによる非常に大きなペナルティを隠蔽し、処理時間を大幅に削減し、性能向上を可能とする。
【００５４】
図６は、ハードウェアテーブルウォーカー６０２を有する演算処理装置１の構成例を示す図である。以下、図６の演算処理装置１が図１の演算処理装置１に対して追加されている部分を説明する。ハードウェアテーブルウォーカー６０２は、複数のリクエスト受信部６１１、複数のリクエスト制御部６１２、制御設定レジスタ６１３、ＴＳＢポインタ計算部６１４、制御部６１５及びＬＲＵレジスタ６１９を有する。制御設定レジスタ６１３は、論理アドレスレジスタセット６２０を有する。論理アドレスレジスタセット６２０は、下限論理アドレスレジスタ６２１、上限論理アドレスレジスタ６２２及びオフセットレジスタ６２３を有する。制御部６１５は、ＴＳＢヒットチェック部６１６、論理アドレス範囲チェック部６１７、及びオフセット加算部６１８を有する。
【００５５】
ＴＬＢ制御部６０１は、ステップＳ４０２において、ＴＬＢミスの場合には、リクエスト受信部６１１にＴＬＢミスを出力し、ハードウェアテーブルウォーカー６０２を起動させる。複数のリクエスト受信部６１１は、ＴＬＢ制御部６０１より複数のスレッドのリクエストを受信する。複数のリクエスト制御部６１２は、複数のリクエスト受信部６１１に対応する複数のリクエストをアウトオブオーダー実行する。すなわち、ハードウェアテーブルウォーカー６０２は、アウトオブオーダー実行する。リクエスト制御部６１２は、例えばＴＳＢ領域３のアドレス変換対ＴＳＢ１〜ＴＳＢ４を記憶し、制御設定レジスタ６１３を制御する。ＴＳＢポインタ計算部６１４は、リクエストされた仮想アドレスＶＡを基に、ＴＳＢプリフェッチアドレスを示すＴＳＢポインタを計算し、Ｌ１キャッシュ１５，１６に出力する。
【００５６】
ＴＳＢヒットチェック部６１６は、ステップＳ４０５において、ＴＳＢヒットしたか否かをチェックする。論理アドレス範囲チェック部６１７は、ステップＳ４０５において、リクエストされた論理アドレスＲＡが、論理アドレスレジスタセット６２０を基に論理アドレス空間の範囲内にあるか否かをチェックする。オフセット加算部６１８は、論理アドレスＲＡにオフセットレジスタ６２３のオフセットアドレスを加算することにより、物理アドレスＰＡを演算する。その後、制御部６１５は、仮想アドレスＶＡ及び物理アドレスＰＡのアドレス変換対をＴＬＢ制御部６０１に出力する。ＴＬＢ制御部６０１は、そのアドレス変換対をアドレス変換バッファ２０に登録する。また、制御部６１５は、ＴＳＢヒットすると、ＬＲＵレジスタ６１９を更新する。
【００５７】
図７は、図６のハードウェアテーブルウォーカー６０２の一部の具体的な構成例を示す図である。ハードウェアテーブルウォーカー６０２は、例えば、８組みの論理アドレスレジスタセット６２０及び８個の論理アドレス範囲チェック部６１７を有する。
【００５８】
論理アドレスレジスタセット６２０の更新は、ハイパーバイザーがストア命令で実行し、更新信号（更新ＩＤ）Ｄ１が入力される。ＬＲＵレジスタ６１９は、８個のレジスタＬＲＵ１〜ＬＲＵ８を有する。レジスタＬＲＵ１〜ＬＲＵ８は、８組みの論理アドレスレジスタセット６２０の番号を記憶する。レジスタＬＲＵ１は、使用履歴が最も新しい番号を記憶する。レジスタＬＲＵ８は、使用履歴が最も古い番号を記憶し、次に論理アドレスレジスタセット６２０を更新する時の候補となる番号を記憶する。また、８組みの論理アドレスレジスタセット６２０の各々は、有効フラグＤ３を記憶する。有効フラグＤ３が１の時に、それに対応する論理アドレスレジスタセット６２０の内容が有効であることを示す。有効フラグ処理部７０７は、８個の有効フラグＤ３の中に「０」の有効フラグＤ３がある場合には「１」の無効フラグＤ７を出力し、８個の有効フラグＤ３がすべて「１」である場合には「０」の無効フラグＤ７を出力する。若番処理部７０６は、「０」の有効フラグＤ３の中で最も若番の論理アドレスレジスタセット６２０の番号を番号Ｄ６として出力する。なお、番号Ｄ６は、若番である必要はなく、任意の１個の番号であればよい。論理積回路７０８は、無効フラグＤ７が「１」のときには０を出力する。論理積回路７０９は、無効フラグＤ７が「１」のときには、番号Ｄ６を出力する。その場合、論理和（ＯＲ）回路７１０は番号Ｄ６を番号Ｄ８として出力し、ステップＳ５０２では、番号Ｄ８が読み出される。すなわち、無効フラグＤ７が「１」の場合には、番号Ｄ８の論理アドレスレジスタセット６２０が、次に論理アドレスレジスタセット６２０を更新する時の候補となる。
【００５９】
次に、ＬＲＵレジスタ６１９の更新方法を説明する。更新条件は、８組みの論理アドレスレジスタセット６２０のいずれかが更新された場合と、ハードウェアテーブルウォーカー６０２がＴＳＢ領域３から取ってきたアドレス変換対をアドレス変換バッファ２０に登録する場合である。８組みの論理アドレスレジスタセット６２０のいずれかが更新された場合は、論理和回路７０３は、その論理アドレスレジスタセット６２０の番号Ｄ１を番号Ｄ５として出力する。また、ハードウェアテーブルウォーカー６０２がＴＳＢ領域３から取ってきたアドレス変換対をアドレス変換バッファ２０に登録する場合、８個の論理アドレス範囲チェック部６１７は、上記のアドレス変換対の論理アドレスＤ２が含まれる論理アドレス空間の論理アドレスレジスタセット６２０の番号Ｄ４を出力し、論理和回路７０３はその番号Ｄ４を番号Ｄ５として出力する。
【００６０】
番号Ｄ５は、一番最近に更新された論理アドレスレジスタセット６２０の番号又は一番最近にハードウェアテーブルウォーカー６０２で使われた論理アドレスレジスタセット６２０の番号を示し、レジスタＬＲＵ１に格納される。この際に、レジスタＬＲＵ１〜ＬＲＵ８に格納された番号と番号Ｄ５とを比較し、一致した場合、そのレジスタＬＲＵ１〜ＬＲＵ８より若いレジスタＬＲＵ１〜ＬＲＵ８では、シフト部７０４により、各レジスタＬＲＵ１〜ＬＲＵ８に格納された番号が１つ古い方にシフトされる。例えば、番号Ｄ５がレジスタＬＲＵ４に格納された番号と一致した場合は、レジスタＬＲＵ３に格納された番号をレジスタＬＲＵ４に格納し、レジスタＬＲＵ２に格納された番号をレジスタＬＲＵ３に格納し、レジスタＬＲＵ１に格納された番号をレジスタＬＲＵ２に格納し、レジスタＬＲＵ１には、番号Ｄ５を格納する。このようにして、使われていない論理アドレスレジスタセット６２０の番号がレジスタＬＲＵ８の方にシフトされていく。論理積回路７０８は、無効フラグＤ７が「０」のときにはレジスタＬＲＵ８に格納されている番号を出力する。論理積回路７０９は、無効フラグＤ７が「０」のときには０を出力する。その場合、論理和回路７１０はレジスタＬＲＵ８に格納されている番号を番号Ｄ８として出力し、ステップＳ５０２では、レジスタＬＲＵ８に格納されている番号Ｄ８が読み出される。すなわち、無効フラグＤ７が「０」の場合には、レジスタＬＲＵ８に格納されている番号Ｄ８の論理アドレスレジスタセット６２０が、次に論理アドレスレジスタセット６２０を更新する時の候補となる。
【００６１】
論理和回路７１０が出力する番号Ｄ８は、ハイパーバイザーが読み出せるようにする。これにより、ハイパーバイザーは、８組みの論理アドレスレジスタセット６２０のうち使用履歴が最も古い論理アドレスレジスタセット６２０の番号を獲得することができる。ハイパーバイザーは、この番号を使って、次に更新する論理アドレスレジスタセット６２０を決定し、ストア命令を実行し、所望の論理アドレスレジスタセット６２０を更新できる。
【００６２】
本実施形態によれば、ＬＲＵレジスタ６１９を用いて効率的に論理アドレス空間の入れ替えを行うことにより、使用頻度の高い論理アドレス空間が頻繁に入れ替わることを防止し、処理時間を低減することができる。
【００６３】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６４】
１  演算処理装置
２  メインメモリ
３  ＴＳＢ領域
１１  命令制御部
１２  演算部
１３  Ｌ１命令タグ
１４  Ｌ１データタグ
１５  Ｌ１命令キャッシュ
１６  Ｌ１データキャッシュ
１７  Ｌ２キャッシュ
２０  アドレス変換バッファ
２１  仮想アドレスレジスタ
２２  コンテキストレジスタ
２３  ＴＬＢ本体部
２４  ＴＬＢ検索部
３１  タグ部
３２  データ部
４１，４２  比較回路
４３  論理積回路
【図１】
2013069139.tif 000003
【図２】
2013069139.tif 000004
【図３】
2013069139.tif 000005
【図４】
2013069139.tif 000006
【図５】
2013069139.tif 000007
【図６】
2013069139.tif 000008
【図７】
2013069139.tif 000009