(57)【要約】      （修正有）【課題】アドレス変換の実行時間を短縮する。【解決手段】ＣＰＵは、複数のスレッドを実行し、仮想アドレスを含むメモリリクエストを出力する演算部と、メモリ２が記憶する複数のアドレス変換対のうち一部を登録するＴＬＢ５を有する。また、ＣＰＵは、演算部が出力したメモリリクエストに含まれる仮想アドレスに対応するアドレス変換対が、ＴＬＢ５に登録されていない場合、対応するアドレス変換対の取得要求を、メモリ２に対してスレッド毎に発行するＴＬＢ制御部５ａを有する。また、ＣＰＵは、ＴＬＢ制御部５ａが対応するアドレス変換対の取得要求を発行した場合、対応するアドレス変換対を、メモリ２からのスレッド毎にそれぞれ取得する複数の変換対取得部１５〜１５ｂを有する。また、ＣＰＵは、複数の変換対取得部１５〜１５ｂがそれぞれ取得したアドレス変換対のいずれかを、ＴＬＢ５に登録するＴＳＢＷ制御部１９を有する。【選択図】図３
2013125355.tif 000002
【特許請求の範囲】
【請求項１】
仮想アドレスと物理アドレスとを含むアドレス変換対を複数記憶する主記憶装置に接続された演算処理装置において、
複数のスレッドを実行し、仮想アドレスを含むメモリリクエストを出力する演算処理部と、
前記主記憶装置が記憶する複数のアドレス変換対のうち一部を登録するアドレス変換バッファと、
前記演算処理部が出力したメモリリクエストに含まれる仮想アドレスに対応するアドレス変換対が、前記アドレス変換バッファに登録されていない場合、前記対応するアドレス変換対の取得要求を、前記主記憶装置に対して前記複数のスレッド毎に発行する発行部と、
前記発行部が前記対応するアドレス変換対の取得要求を発行した場合、前記対応するアドレス変換対を、前記主記憶装置から前記複数のスレッド毎にそれぞれ取得する複数の取得部と、
前記複数の取得部がそれぞれ取得したアドレス変換対のいずれかを、前記アドレス変換部に登録する登録部を有することを特徴とする演算処理装置。
【請求項２】
前記複数の取得部は、
前記複数の取得要求のそれぞれに対応する仮想アドレスから互いに異なる複数の物理アドレスをそれぞれ算出し、
前記登録部は、
前記算出された複数の物理アドレスに記憶された複数のアドレス変換対のうち、前記取得要求に対応する仮想アドレスを含むアドレス変換対を、前記アドレス変換部に登録するすることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記発行部は、
前記複数の取得要求のいずれかを、前記演算処理部が実行する前記複数のスレッドのうち最初に発行する場合、前記複数の取得部のうち前記取得部ごとに定められた所定の取得部に対して発行し、
前記所定の取得部は、
前記主記憶装置から取得したアドレス変換対に訂正不可能なエラーが発生した場合に、前記演算処理装置が実行するオペレーティングシステムにトラップ処理を実行させることを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
前記複数の取得部は、
前記複数の取得要求のそれぞれに対応する仮想アドレスから互いに異なる複数の物理アドレスをそれぞれ算出し、前記それぞれ算出した複数の物理アドレスをキャッシュメモリにそれぞれ保持し、
前記登録部は、
前記キャッシュメモリが保持した複数のアドレス変換対のうち、前記取得要求に対応する仮想アドレスを含むアドレス変換対を、前記アドレス変換部に登録するすることを特徴とする請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
前記複数の取得部は、
前記キャッシュメモリが保持した複数のアドレス変換対のうち、いずれかのアドレス変換対にエラーが発生した場合、前記エラーが発生したアドレス変換対の物理アドレスを取得した後に、前記エラーが発生したアドレス変換対の仮想アドレスを取得することを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記発行部は、
前記演算処理部が出力したメモリリクエストに含まれる仮想アドレスに対応するアドレス変換対が、前記アドレス変換バッファに登録されていない場合、前記所定の取得部以外の取得部に前記取得要求を発行することを特徴とする請求項３〜５のいずれか１項に記載の演算処理装置。
【請求項７】
仮想アドレスと物理アドレスとを含むアドレス変換対を複数記憶する主記憶装置に接続され、前記主記憶装置が記憶する複数のアドレス変換対のうち一部を登録するアドレス変換バッファを有する演算処理装置の制御方法において、
前記演算処理装置が有する演算処理部が複数のスレッドを実行し、
前記演算処理部が、仮想アドレスを含むメモリリクエストを出力し、
前記演算処理部が出力したメモリリクエストに含まれる仮想アドレスに対応するアドレス変換対が、前記アドレス変換バッファに登録されていない場合、前記演算処理装置が有する発行部が、前記対応するアドレス変換対の取得要求を、前記主記憶装置に対して前記複数のスレッド毎に発行し、
前記発行部が前記対応するアドレス変換対の取得要求を発行した場合、前記演算処理装置が有する複数の取得部が、前記対応するアドレス変換対を、前記主記憶装置から前記複数のスレッド毎にそれぞれ取得し、
前記演算処理装置が有する登録部が、前記複数の取得部がそれぞれ取得したアドレス変換対のいずれかを、前記アドレス変換部に登録することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
従来、物理メモリ空間よりも大きな仮想メモリ空間を提供する仮想記憶方式の技術が知られている。例えば、このような仮想記憶方式が適用された情報処理装置は、ＴＴＥ（Ｔｒａｎｓｌａｔｉｏｎ  Ｔａｂｌｅ  Ｅｎｔｒｙ）−Ｔａｇと呼ばれる仮想アドレスとＴＴＥ−Ｄａｔａと呼ばれる物理アドレスとの対であるＴＴＥをメインメモリに記憶する。そして、情報処理装置は、仮想アドレスと物理アドレスとのアドレス変換を行う場合は、メインメモリにアクセスし、メインメモリが記憶するＴＴＥを参照してアドレス変換を実行する。
【０００３】
ここで、アドレス変換のたびにメインメモリにアクセスすると、アドレス変換の実行時間が増加してしまう。そこで、アドレス変換バッファ（ＴＬＢ：Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）と呼ばれるＴＴＥを登録するキャッシュメモリを演算処理装置内に設ける技術が知られている。
【０００４】
以下、このようなＴＬＢを有する演算処理装置の一例について説明する。図９は、ＴＬＢを有する演算処理装置が実行する処理の一例を説明するためのフローチャートである。なお、図９に示す例は、仮想アドレスによるメモリアクセス要求が発行された際に演算処理装置が実行する処理の一例である。例えば、図９に示す例では、演算処理装置は、メモリアクセス要求が発行されるまで待機する（ステップＳ１：Ｎｏ）。
【０００５】
そして、演算処理装置は、メモリアクセス要求が発行された場合には（ステップＳ１：Ｙｅｓ）、メモリアクセスの対象となる記憶領域の仮想アドレスをＴＴＥ−ＴａｇとするＴＴＥをＴＬＢから検索する（ステップＳ２）。そして、演算処理装置は、検索対象のＴＴＥがＴＬＢに記憶されていた場合は（ステップＳ３：Ｙｅｓ）、検索対象のＴＴＥから物理アドレスを取得し、取得した物理アドレスを用いて、キャッシュメモリに対するメモリアクセスを行う（ステップＳ４）。
【０００６】
一方、演算処理装置は、検索対象となる仮想アドレスがＴＬＢに記憶されていない場合は（ステップＳ３：Ｎｏ）、後続のメモリアクセス要求に関わる処理をキャンセルするとともに、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に以下のトラップ処理を実行させる。すなわち、ＯＳは、メモリアクセスの対象となる仮想アドレスをレジスタから読み出す（ステップＳ５）。
【０００７】
そして、ＯＳは、読み出した仮想アドレスから算出されるＴＳＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｓｔｏｒａｇｅ  Ｂｕｆｆｅｒ）ポインタをレジスタから読み出す（ステップＳ６）。ここで、ＴＳＢポインタは、ステップＳ５にて読み出した仮想アドレスをＴＴＥ−ＴａｇとするＴＴＥを記憶する記憶領域の物理アドレスである。
【０００８】
また、ＯＳは、読み出したＴＳＢポインタが示す領域からＴＴＥを取得し（ステップＳ７）、取得したＴＴＥをＴＬＢに登録する（ステップＳ８）。その後、演算処理装置は、ＴＬＢが記憶するＴＴＥを参照し、仮想アドレスと物理アドレスとの変換を行う。
【０００９】
ここで、クラウドコンピュータ等、ハードウェアの仮想化技術が知られているが、このようなハードウェアの仮想化技術が適用された情報処理装置においては、ハイパーバイザが複数のＯＳとメモリ管理とを実行する。このため、仮想化技術が適用された情報処理装置においてアドレス変換処理が実行される場合は、ＯＳに加えてハイパーバイザが動作するので、アドレス変換処理におけるオーバーヘッドが増大する。また、仮想化技術が適用された情報処理装置においては、複数のＯＳでトラップ処理が発生した場合に、ハイパーバイザの負荷が増大する結果、トラップ処理のペナルティが増大する。
【００１０】
そこで、ＴＴＥの取得処理および登録処理をＯＳやハイパーバイザではなく、ハードウェアが実行するＨＷＴＷ（Ｈａｒｄ  Ｗａｒｅ  Ｔａｂｌｅ  Ｗａｌｋ）の技術が知られている。以下、図面を用いて、ＨＷＴＷを有する演算処理装置が実行する処理の一例について説明する。
【００１１】
図１０は、従来の演算処理装置が実行する処理の一例を説明するための図である。なお、図１０に示す各処理のうち、ステップＳ１１〜Ｓ１３、Ｓ２５、ステップＳ２１〜Ｓ２４は、図９に示すステップＳ１〜Ｓ３、Ｓ４、Ｓ５〜Ｓ８と同様の処理であるものとして、詳細な説明を省略する。
【００１２】
図１０に示す例では、演算処理装置は、メモリアクセスの対象となる仮想アドレスをＴＴＥ−ＴａｇとするＴＴＥがＴＬＢに記憶されていない場合は（ステップＳ１３：Ｎｏ）、先行するメモリアクセス要求に関わるＴＴＥの登録が完了したか否かを判別する（ステップＳ１４）。そして、演算処理装置は、先行するメモリアクセス要求に関わるＴＴＥの登録が完了していない場合には（ステップＳ１４：Ｎｏ）、先行するメモリアクセス要求に関わるＴＴＥの登録が完了するまで待機する。
【００１３】
一方、演算処理装置は、先行するメモリアクセス要求に関わるＴＴＥの登録が完了した場合には（ステップＳ１４：Ｙｅｓ）、ＨＷＴＷを実行する設定であるか否かを判別する（ステップＳ１５）。そして、演算処理装置は、ＨＷＴＷを実行する設定であると判別した場合は（ステップＳ１５：Ｙｅｓ）、ＨＷＴＷを起動する（ステップＳ１６）。ＨＷＴＷを実行する設定であると判別した場合には、ＨＷＴＷは、ＴＳＢポインタの読み出しを行い（ステップＳ１７）、ＴＳＢポインタを用いてメインメモリにアクセスし、取得したＴＴＥをＴＬＢに登録する（ステップＳ１８）。
【００１４】
その後、ＨＷＴＷは、取得したＴＴＥが正しいか否かを判別し（ステップＳ１９）、正しい場合には（ステップＳ１９：Ｙｅｓ）、取得したＴＴＥをＴＬＢに登録する（ステップＳ２０）。また、ＨＷＴＷは、ＴＴＥが正しくない場合には（ステップＳ１９：Ｎｏ）、ＯＳにトラップ処理を実行させる（ステップＳ２１〜２４）。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開平０１−１９６６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、ＴＴＥの取得処理および登録処理をＨＷＴＷが逐次的に実行する技術では、先行するメモリアクセス要求に関わるＴＴＥの登録を待ってから次のメモリアクセス要求によるＴＴＥの検索を行う。このため、ＴＬＢに登録されていないＴＴＥを用いるメモリアクセス要求が連続して発行された場合は、アドレス変換の実行時間が増大するという問題があった。
【００１７】
本発明は、１つの側面では、アドレス変換の実行時間を短縮することを目的とする。
【課題を解決するための手段】
【００１８】
１つの側面では、仮想アドレスと物理アドレスとを含むアドレス変換対を複数記憶する主記憶装置に接続された演算処理装置である。演算処理装置は、複数のスレッドを実行し、仮想アドレスを含むメモリリクエストを出力する演算処理部と、主記憶装置が記憶する複数のアドレス変換対のうち一部を登録するアドレス変換バッファとを有する。また、演算処理装置は、演算処理部が出力したメモリリクエストに含まれる仮想アドレスに対応するアドレス変換対が、アドレス変換バッファに登録されていない場合、対応するアドレス変換対の取得要求を、主記憶装置に対して複数のスレッド毎に発行する発行部を有する。また、演算処理装置は、発行部が対応するアドレス変換対の取得要求を発行した場合、対応するアドレス変換対を、主記憶装置から複数のスレッド毎にそれぞれ取得する複数の取得部を有する。また、演算処理装置は、複数の取得部がそれぞれ取得したアドレス変換対のいずれかを、アドレス変換部に登録する登録部を有する。
【発明の効果】
【００１９】
１実施態様によれば、アドレス変換の実行時間を短縮することができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施例１に関わる演算処理装置の一例を説明するための図面である。
【図２】図２は、実施例１に関わるＴＬＢの一例を説明するための図である。
【図３】図３は、実施例１に係るＨＷＴＷの一例を説明するための図である。
【図４】図４は、実施例１に関わるテーブルウォークの一例を説明するための図である。
【図５ａ】図５ａは、ＯＳが連続してトラップ処理を実行する処理を説明するための図である。
【図５ｂ】図５ｂは、従来のＨＷＴＷの処理を説明するための図である。
【図５ｃ】図５ｃは、実施例１に関わるＨＷＴＷの処理を説明するための図である。
【図６】図６は、実施例１に関わるＣＰＵが実行する処理の流れを説明するためのフローチャートである。
【図７】図７は、実施例１に関わるＨＷＴＷが実行する処理の流れの一例を説明するための図である。
【図８】図８は、実施例１に関わるＴＳＢＷ制御部が実行する処理の流れの一例を説明するためのフローチャートである。
【図９】図９は、ＴＬＢを有する演算処理装置が実行する処理の一例を説明するためのフローチャートである。
【図１０】図１０は、従来の演算処理装置が実行する処理の一例を説明するための図である。
【発明を実施するための形態】
【００２１】
以下に添付図面を参照して本願に係る演算処理装置および演算処理装置の制御方法について説明する。
【実施例１】
【００２２】
以下の実施例１では、図１を用いて、演算処理装置の一例を説明する。図１は、実施例１に関わる演算処理装置の一例を説明するための図面である。なお、図１では、演算処理装置の一例として、ＣＰＵ（Central  Processing  Unit）１の一例を示す。
【００２３】
図１に示す例では、ＣＰＵ１は、主記憶装置であるメモリ２と接続する。また、ＣＰＵ１は、命令制御部３、演算部４、アドレス変換バッファ５（ＴＬＢ：Translation  Look  Aside  Buffer）、Ｌ２（Level２）キャッシュ６、Ｌ１（Level１）キャッシュ７を有する。また、ＣＰＵ１は、ＨＷＴＷ（Hard  Ware  Table  Walk）１０を有する。また、Ｌ１キャッシュ７は、Ｌ１データキャッシュ制御部７ａ、Ｌ１データタグ７ｂ、Ｌ１データキャッシュ７ｃ、Ｌ１命令キャッシュ制御部７ｄ、Ｌ１命令タグ７ｅ、Ｌ１命令キャッシュ７ｆを有する。
【００２４】
メモリ２は、ＣＰＵ１が演算処理に用いるデータを記憶する。例えば、メモリ２は、ＣＰＵ１が実行する演算処理の対象となる値のデータ、すなわちオペランドと、演算処理に関わる命令のデータとを記憶する。ここで、「命令」とは、ＣＰＵ１が実行可能な命令をいう。
【００２５】
また、メモリ２は、所定の領域に仮想アドレスと物理アドレスとの対であるＴＴＥ（Translation  Table  Entry）を記憶する。ここで、ＴＴＥは、ＴＴＥ−ＴａｇとＴＴＥ−Ｄａｔａとの対を有し、ＴＴＥ−Ｔａｇには仮想アドレスが、ＴＴＥ−Ｄａｔａには物理アドレスが格納される。
【００２６】
命令制御部３は、ＣＰＵ１が実行する処理の流れの制御を行なう。具体的には、命令制御部３は、ＣＰＵ１において処理すべき命令をＬ１キャッシュ７から読み込み、解釈し、解釈結果を演算部４に送信する。なお、命令制御部３は、Ｌ１キャッシュ７が有するＬ１命令キャッシュ７ｆから演算処理に関わる命令を取得し、演算部４は、演算処理に関わる命令やオペランドをＬ１キャッシュ７が有するＬ１データキャッシュ７ｃから取得する。
【００２７】
演算部４は、演算を行う処理部である。具体的には、演算部４は、命令の対象となるデータ、すなわちオペランドを記憶装置から読み込み、命令制御部３によって解釈された命令に従って演算し、演算結果を命令制御部３に送信する。
【００２８】
ここで、命令制御部３や演算部４は、オペランドや命令を取得する場合には、オペランドや命令が格納されたメモリ２の仮想アドレスをＴＬＢ５に出力する。また、命令制御部３や演算部４は、ＣＰＵ１が実行する演算処理の単位であるストランド（スレッド）と仮想アドレスとの組ごとに固有のコンテキストＩＤをＴＬＢ５に出力する。
【００２９】
後述するように、ＴＬＢ５は、命令制御部３や演算部４が仮想アドレスを出力した場合には、ＴＴＥを用いて仮想アドレスを物理アドレスに変換し、変換後の物理アドレスをＬ１キャッシュ７に出力する。このような場合には、Ｌ１キャッシュ７は、ＴＬＢが出力した物理アドレスを用いて、命令やオペランドを命令制御部３や演算部４に出力する。その後、命令制御部３や演算部４は、Ｌ１キャッシュ７から受信したオペランドや命令を用いて、各種処理を実行する。
【００３０】
ＴＬＢ５は、メモリ２が記憶するＴＴＥの一部を登録しており、ＴＴＥを用いて、命令制御部３や演算部５が出力した仮想アドレスを物理アドレスに変換し、変換後の物理アドレスをＬ１キャッシュ７に出力するアドレス変換バッファである。具体的には、ＴＬＢ５は、メモリ２が記憶する複数のＴＴＥのうち、一部のＴＴＥとコンテキストＩＤとの組を登録する。
【００３１】
そして、ＴＬＢ５は、命令制御部３や演算部４が仮想アドレスとコンテキストＩＤとを出力した場合には、以下の処理を実行する。すなわち、ＴＬＢ５は、自身が登録するＴＴＥとコンテキストＩＤとの組から、命令制御部３や演算部４が出力した仮想アドレスをＴＴＥ−Ｔａｇとし、かつ、コンテキストＩＤが一致するＴＴＥとコンテキストＩＤとの組を登録しているか判別する。
【００３２】
そして、ＴＬＢ５は、命令制御部３や演算部４が出力した仮想アドレスをＴＴＥ−Ｔａｇとし、かつ、コンテキストＩＤが一致するＴＴＥとコンテキストＩＤとの組を登録している場合には、ＴＬＢヒットしたと判別する。その後、ＴＬＢ５は、ＴＬＢヒットしたＴＴＥのＴＴＥ−ＤａｔａをＬ１キャッシュ７に出力する。
【００３３】
一方、ＴＬＢ５は、命令制御部３や演算部４が出力した仮想アドレスをＴＴＥ−Ｔａｇとし、かつ、コンテキストＩＤが一致するＴＴＥとコンテキストＩＤとの組をキャッシュしていない場合には、ＴＬＢミスしたと判別する。なお、ＴＬＢミスは、ＭＭＵ（Memory  Management  Unit)−ＭＩＳＳと表記される場合もある。
【００３４】
このような場合には、ＴＬＢ５は、ＨＷＴＷ１０にＴＬＢミスした仮想アドレスをＴＴＥ−ＴａｇとするＴＴＥのメモリアクセス要求を発行する。なお、ＴＴＥのメモリアクセス要求は、仮想アドレスとＴＴＥのコンテキストＩＤとメモリアクセス要求を発行することとなった演算処理に関わる処理単位、すなわちストランド（スレッド）、を一意に示すストランドＩＤとを有する。
【００３５】
また、後述するように、ＨＷＴＷ１０は、メモリアクセス要求を受信する複数の受信手段を有しており、ＴＬＢ５は、ＴＬＢミスに係るストランド（スレッド）ごとに異なる受信手段に対してメモリアクセス要求を発行する。このような場合にはＨＷＴＷ１０は、ＴＬＢ５が発行したメモリアクセス要求の対象となるＴＴＥをＬ２キャッシュ６およびＬ１キャッシュ７を介してＴＬＢ５に登録する。その後、ＴＬＢ５は、登録したＴＴＥのＴＴＥ−ＤａｔａをＬ１キャッシュ７に出力する。
【００３６】
ここで、図２は、実施例１に関わるＴＬＢの一例を説明するための図である。図２に示す例では、ＴＬＢ５は、ＴＬＢ制御部５ａ、ＴＬＢ本体部５ｂ、コンテキストレジスタ５ｃ、仮想アドレスレジスタ５ｄを有する。ＴＬＢ制御部５ａは、演算部４またはＨＷＴＷ１０からＴＴＥを取得し、登録する処理を制御する。例えば、ＴＬＢ制御部５ａは、ＣＰＵ１が実行するプログラムによる新たなＴＴＥを演算部４から取得し、取得したＴＴＥをＴＬＢ本体部５ｂに登録する。
【００３７】
ここで、ＴＬＢ本体部５ｂは、各ＴＴＥのＴＴＥ−ＴａｇとＴＴＥ−Ｄａｔａとを対応付けて記憶する。また、各ＴＴＥ−Ｔａｇには、図２中（Ａ）で示す範囲に仮想アドレスが含まれ、図２中（Ｂ）で示す範囲にコンテキストＩＤが含まれる。コンテキストレジスタ５ｃには、検索対象となるＴＴＥに関わるコンテキストＩＤが格納され、仮想アドレスレジスタ５ｄには、検索対象となるＴＴＥのＴＴＥ−Ｔａｇに含まれる仮想アドレスが格納される。
【００３８】
ＴＬＢ検索部５ｅは、ＴＬＢ本体部５ｂが記憶するＴＴＥから、ＴＴＥ−Ｔａｇに含まれる仮想アドレスが、仮想アドレスレジスタ５ｄに記憶された仮想アドレスと一致するＴＴＥを検索する。同時に、ＴＬＢ検索部５ｅは、ＴＴＥ−Ｔａｇに含まれるコンテキストＩＤが、コンテキストレジスタ５ｃに格納されたコンテキストＩＤと一致するＴＴＥを検索する。そして、ＴＬＢ検索部５ｅは、仮想アドレスおよびコンテキストＩＤが一致したＴＴＥのＴＴＥ−Ｄａｔａ、すなわち、検索対象となる仮想アドレスと対の物理アドレスをＬ１データキャッシュ制御部７ａに出力する。
【００３９】
図１に戻って、Ｌ１データキャッシュ制御部７ａは、ＴＬＢ５がオペランド取得のために物理アドレスを出力した場合は、以下の処理を実行する。すなわち、Ｌ１データキャッシュ制御部７ａは、Ｌ１データタグ７ｂのうち、物理アドレスの下位アドレスと対応するキャッシュラインから、物理アドレスのフレームアドレス（上位アドレス）であるタグデータを検索する。そして、Ｌ１データキャッシュ制御部７ａは、ＴＬＢ５が出力した物理アドレスのタグデータを検出した場合には、検出されたタグデータと対応付けてキャッシュされたオペランド等のデータをＬ１データキャッシュ７ｃに出力させる。一方、Ｌ１データキャッシュ制御部７ａは、ＴＬＢ５が出力した物理アドレスのタグデータが検出されなかった場合は、Ｌ２キャッシュ６または、メモリ２が記憶するオペランド等のデータをＬ１データキャッシュ７ｃに保持する。
【００４０】
また、Ｌ１データキャッシュ制御部７ａは、後述するＨＷＴＷ１０がＴＴＥのキャッシュ要求であるＴＲＦリクエストを出力した場合には、当該ＴＲＦリクエストの対象となるアドレスに格納されたＴＴＥをＬ１命令キャッシュ７ｃに保持する。具体的には、Ｌ１データキャッシュ制御部７ａは、オペランドをＬ１データキャッシュ７ｃに保持する際と同様に、Ｌ２キャッシュ６またはメモリ２が記憶するＴＴＥをＬ１データキャッシュ７ｃに保持する。そして、Ｌ１データキャッシュ制御部７ａは、ＨＷＴＷ１０にＴＲＦリクエストを再度出力させ、Ｌ１データキャッシュ７ｃに保持したＴＴＥをＴＬＢ５に登録する。
【００４１】
Ｌ１命令キャッシュ制御部７ｄは、ＴＬＢが命令取得のために物理アドレスを出力した場合には、Ｌ１データキャッシュ制御部７ａと同様の処理を実行することで、Ｌ１命令キャッシュ７ｆに保持する命令を、命令制御部３に出力させる。
【００４２】
また、Ｌ１命令キャッシュ制御部７ｄは、Ｌ１命令キャッシュ７ｆに命令が保持されていない場合は、メモリ２が記憶する命令、または、Ｌ２キャッシュ６が記憶する命令をＬ１命令キャッシュ７ｆに保持させる。その後、Ｌ１命令キャッシュ制御部７ｄは、Ｌ１命令キャッシュ７ｆが保持する命令を命令制御部３に出力させる。なお、Ｌ１命令タグ７ｅ、Ｌ１命令キャッシュ７ｆは、Ｌ１データタグ７ｂ、Ｌ１データキャッシュ７ｃと同様の機能を発揮するものとして、詳細な説明を省略する。
【００４３】
なお、Ｌ１キャッシュ７は、Ｌ１データキャッシュ７ｃまたはＬ１命令キャッシュ７ｆにオペランド、または、命令、または、ＴＴＥ等のデータが登録されていない場合は、Ｌ２キャッシュ６に物理アドレスを出力する。このような場合には、Ｌ２キャッシュ６は、Ｌ１キャッシュ７が出力した物理アドレスに記憶されるデータをＬ２キャッシュ６自身が保持しているか判別し、Ｌ２キャッシュ６自身が保持している場合には、データをＬ１キャッシュ７に出力する。一方、Ｌ２キャッシュ６は、Ｌ１キャッシュ７が出力した物理アドレスに記憶されるデータをＬ２キャッシュ６自身が保持していない場合は、以下の処理を実行する。すなわち、Ｌ２キャッシュ６は、メモリ２からＬ１キャッシュ７が出力した物理アドレスに記憶されたデータをキャッシュし、キャッシュしたデータをＬ１キャッシュ７に出力する。
【００４４】
次に、図３を用いて、ＨＷＴＷ１０について説明する。図３は、実施例１に係るＨＷＴＷの一例を説明するための図である。図３に示す例では、ＨＷＴＷ１０は、複数の変換対取得部１５〜１５ｂ、制御設定レジスタ部１６、ＴＳＢ（Translation  Storage  Buffer）ポインタ計算部１７、リクエストチェック部１８、ＴＳＢＷ（ＴＳＢ  Ｗｒｉｔｅ）制御部１９を有する。
【００４５】
なお、以下の説明では、ＨＷＴＷ１０が３つの変換対取得部１５〜１５ｂを有する例について記載したが、変換対取得部の数はこれに限定されるものではない。なお、以下の説明では、変換対取得部１５ａ、変換対取得部１５ｂは、変換対取得部１５と同様の機能を発揮するものとして、詳細な説明を省略する。
【００４６】
変換対取得部１５は、複数のリクエスト受信部１１〜１１ｂ、複数のリクエスト制御部１２〜１２ｂ、先行リクエスト受信部１３、先行リクエスト制御部１４を有する。また、ＴＬＢ５は、ＴＬＢ制御部５ａを有する。ＴＬＢ制御部５ａは、ＴＬＢミスが発生した場合には、ＴＬＢミスに係るストランド（スレッド）毎に異なる変換対取得部１５〜１５ｂに対してリクエストを発行する。
【００４７】
例えば、ＴＬＢ制御部５ａは、ＣＰＵ１が３つのストランドＡ〜Ｃを実行する場合は、以下のようにリクエストを発行する。すなわち、ＴＬＢ制御部５ａは、ストランドＡに係るリクエストを変換対取得部１５に発行し、ストランドＢに係るリクエストを変換対取得部１５ａに発行し、ストランドＣに係るリクエストを変換対取得部１５ｂに発行する。
【００４８】
なお、ＴＬＢ制御部５ａは、各変換対取得部１５〜１５ｂに対して、それぞれ特定のストランド（スレッド）に係るリクエストを発行するわけではなく、実行中のストランド（スレッド）に応じて、リクエストの発行先を変更する。例えば、ＴＬＢ制御部５ａは、ストランドＡ〜Ｃが実行された後に、ストランド（スレッド）Ｂが終了し、その後、ストランドＡ、Ｃ、Ｄと増えた場合には、ストランドＢのリクエストを発行していた変換対取得部に対して、ストランドＤのリクエストを発行することとしてもよい。
【００４９】
また、ＴＬＢ制御部５ａは、オペランドが格納された記憶領域の仮想アドレスを物理アドレスに変換するＴＴＥを対象とする最初のリクエストである場合、言い換えると、発行するリクエストがリクエストキューの先頭キューに保持されたＴＯＱ（Top  Of  Queue）である場合には、以下の処理を実行する。すなわち、ＴＬＢ制御部５ａは、リクエストの発行先となる変換対対象部の先行リクエスト受信部１３へ発行する。
【００５０】
例えば、ＴＬＢ制御部５ａは、ストランドＡにおけるＴＯＱのリクエストを変換対取得部１５に発行する場合には、先行リクエスト受信部１３にリクエストを発行する。また、ＴＬＢ制御部５ａは、ストランドＡの実行時において、発行するリクエストが命令に関するＴＴＥのリクエストである場合や、オペランドに関するＴＴＥの後続のリクエストを発行する場合は、いずれかのリクエスト受信部１１〜１１ａにリクエストを発行する。
【００５１】
リクエスト受信部１１〜１１ｂは、ＴＬＢ制御部５ａが発行したリクエストを取得し、保持する。また、リクエスト受信部１１〜１１ｂは、後続のリクエスト制御部１２〜１２ｂに、リクエストの対象となるＴＴＥを取得させる。
【００５２】
リクエスト制御部１２〜１２ｂは、リクエスト受信部１１〜１１ｂからリクエストを取得し、取得したリクエストの対象となるＴＴＥを取得する処理を、それぞれ独立して実行する。具体的には、リクエスト制御部１２〜１２ｂは、それぞれ複数のテーブルウォーカーであるＴＳＢ（Translation  Storage  Buffer）＃０〜＃３を有し、各ＴＳＢ＃０〜＃３にＴＴＥの取得処理を実行させる。
【００５３】
先行リクエスト受信部１３は、オペランドが格納された記憶領域の仮想アドレスを物理アドレスに変換するＴＴＥに対する最初のリクエストを受信する受信部である。また、先行リクエスト制御部１４は、各リクエスト制御部１２〜１２ｂと同様の機能を発揮し、先行リクエスト受信部１３受信するリクエストの対象となるＴＴＥを取得する。つまり、先行リクエスト受信部１３および先行リクエスト制御部１４は、ＴＯＱのリクエストの対象となるＴＴＥを取得する。
【００５４】
このように、ＴＬＢ制御部５ａは、同じ変換対取得部１５が有する複数のリクエスト受信部１１〜１１ｂおよび複数のリクエスト制御部１２〜１２ｂに対しては、同一のストランド（スレッド）に関わるＴＴＥのリクエストを発行する。このため、複数の変換対取得部１５〜１５ｂを有するＨＷＴＷ１０は、複数のストランド（スレッド）について、複数のオペランドに関わるＴＴＥの取得処理を並行して実行することができる。
【００５５】
また、変換対取得部１５は、複数のリクエスト受信部１１〜１１ｂ、複数のリクエスト制御部１２〜１２ｂ、先行リクエスト受信部１３、先行リクエスト制御部１４を有するので、ＴＯＱのリクエストとＴＯＱ以外のリクエストとを同時並列して実行できる。また、変換対取得部１５は、ＴＯＱのリクエストとＴＯＱ以外のリクエストとを同時並列して実行できるので、後続のリクエストが先行するＴＯＱのリクエストの実行を待つペナルティを隠蔽できる。また、ＨＷＴＷ１０は、複数の変換対取得部１５〜１５ｂを有するので、オペランドの取得に関わる複数のＴＴＥの取得処理をストランド（スレッド）毎に並行して実行することができる。
【００５６】
制御設定レジスタ部１６は、複数のＴＳＢコンフィグレジスタを有する。各ＴＳＢコンフィグレジスタには、それぞれＴＳＢポインタを算出するために必要な値が格納される。ＴＳＢポインタ計算部１７は、ＴＳＢコンフィグレジスタに格納された値を用いて、ＴＳＢポインタを算出する。そして、ＴＳＢポインタ計算部１７は、算出したＴＳＢポインタをＬ１データキャッシュ制御部７ａに出力する。
【００５７】
リクエストチェック部１８は、Ｌ１データキャッシュ７ｃから送出されたＴＴＥがリクエストの対象であるＴＴＥであるか否かをチェックし、チェック結果をＴＳＢＷ制御部１９に通知する。ＴＳＢＷ制御部１９は、リクエストチェック部１８によるチェック結果に問題がない、すなわち、Ｌ１データキャッシュ７ｃから送出されたＴＴＥがリクエストの対象のＴＴＥである場合には、登録要求をＴＬＢ制御部５ａに発行する。この結果、ＴＬＢ制御部５ａは、Ｌ１データキャッシュ７ｃに保持されたＴＴＥを登録することとなる。
【００５８】
一方、リクエストチェック部１８は、リクエストチェック部１８により、トラップの発生を誘引するトラップ要因が検出された場合には、検出されたトラップ要因をＴＳＢＷ制御部１９に通知する。
【００５９】
以下、リクエスト制御部１２が実行するテーブルウォークの一例について図４を用いて説明する。図４は、実施例１に関わるテーブルウォークの一例を説明するための図である。なお、リクエスト制御部１２ａ、１２ｂは、それぞれリクエスト制御部１２と同様の処理を実行するものとして、説明を省略する。また、ＴＳＢ＃１〜＃３は、ＴＳＢ＃０と同様の処理を実行するものとして、詳細な説明を省略する。
【００６０】
例えば、図４に示す例では、ＴＳＢ＃０は、実行中フラグ、ＴＲＦ−リクエスト要求フラグ、ムーブイン待ちフラグ、トラップ検出フラグ、完了フラグ、リクエストの対象となるＴＴＥに含まれる仮想アドレスの各データを有する。ここで、実行中フラグとは、ＴＳＢ＃０がテーブルウォークを実行しているか否かを示すフラグ情報であり、ＴＳＢ＃０は、テーブルウォークの実行中は、実行中フラグを「ｏｎ」にする。
【００６１】
また、ＴＲＦ−リクエスト要求フラグとは、ＴＳＢポインタ計算部１７が算出したＴＳＢポインタが示す記憶領域に記憶されたデータの取得要求であるＴＲＦリクエストをＬ１データキャッシュ制御部７ａに発行したか否かを示すフラグ情報である。すなわち、ＴＳＢ＃０は、ＴＲＦリクエストを発行した場合には、ＴＲＦ−リクエスト要求フラグを「ｏｎ」にする。
【００６２】
また、ムーブイン待ちフラグとは、メモリ２やＬ２キャッシュ６に格納されたデータをＬ１データキャッシュ７ｃに移動させるムーブイン処理が実行されているか否かを示すフラグ情報である。ＴＳＢ＃０は、Ｌ１データキャッシュ７ｃによりムーブイン処理が実行されている場合には、ムーブイン待ちフラグを「ｏｎ」にする。トラップ検出フラグとは、トラップ要因が検出されたか否かを示すフラグであり、ＴＳＢ＃０は、トラップが検出された場合には、トラップ検出フラグを「ｏｎ」にする。完了フラグとは、テーブルウォークが完了したか否かを示すフラグであり、ＴＳＢ＃０は、テーブルウォークが完了した場合には、完了フラグを「ｏｎ」にし、新たなテーブルウォークを実行する場合には、完了フラグを「ｏｆｆ」にする。
【００６３】
また、図４に示す例では、ＴＴＥは、８バイトのＴＴＥ−Ｔａｇ部と８バイトのＴＴＥ−Ｄａｔａ部とを有する。ＴＴＥ−Ｔａｇ部には、仮想アドレスが格納されており、ＴＴＥ−Ｄａｔａ部には、ＲＡ（Real  Address：実アドレス）が格納されている。また、図４に示す例では、制御設定レジスタは、ＴＳＢコンフィグレジスタ、上限レジスタ、下限レジスタ、オフセットレジスタを有する。なお、ＲＡとは、物理アドレス（ＰＡ（Physical  Address））を算出するために用いられるアドレスである。
【００６４】
ＴＳＢコンフィグレジスタとは、ＴＳＢ＃０〜ＴＳＢ＃３がそれぞれＴＳＢポインタを算出するためのデータが格納されたレジスタである。また、上限レジスタおよび下限レジスタとは、ＴＴＥが格納される物理アドレスの範囲を示すデータが格納されたレジスタである。具体的には、上限レジスタには、物理アドレスの上限値（上限ＰＡ[４６:１３]）が格納され、下限レジスタには、物理アドレスの下限値（下限ＰＡ[４６：１３]）が格納されている。また、オフセットレジスタとは、上限レジスタおよび下限レジスタと対になったレジスタであり、ＲＡからＴＬＢに登録する物理アドレスを算出するためのオフセットＰＡ[４６：１３]が格納されるレジスタである。
【００６５】
例えば、ＴＳＢ＃０は、リクエスト受信部１１が保持するリクエストを参照する。そして、ＴＳＢ＃０は、リクエストの対象となるＴＴＥのコンテキストＩＤとストランドＩＤとを用いて、制御設定レジスタ部１６が有するＴＳＢコンフィグレジスタ、上限レジスタ、下限レジスタ、オフセットレジスタとを選択する。そして、ＴＳＢ＃０は、ＴＳＢコンフィグレジスタのうち、テーブルウォークを実行するか否かを示すテーブルウォーク有効ビットを参照する。図４に示す例では、テーブルウォーク有効ビットは、ｅｎａｂｌｅの範囲である。
【００６６】
そして、ＴＳＢ＃０は、テーブルウォークを実行するか否かを示すテーブルウォーク有効ビットが「ｏｎ」である場合は、それぞれテーブルウォークを開始する。そして、ＴＳＢ＃０は、選択したＴＳＢコンフィグレジスタに設定されたベースアドレス（ｔｓｂ＿ｂａｓｅ[４６：１３]）をＴＳＢポインタ計算部１７に出力させる。また、図４では表示を省略したが、ＴＳＢコンフィグレジスタは、ＴＳＢのサイズと、ページサイズとを合わせて記憶しており、ＴＳＢ＃０は、ＴＳＢのサイズとページサイズとをＴＳＢポインタ計算部１７に出力させる。
【００６７】
ＴＳＢポインタ計算部１７は、制御設定レジスタ部１６が出力したベースアドレスと、ＴＳＢのサイズと、ページサイズとを用いて、ＴＴＥが格納された記憶領域を示す物理アドレスであるＴＳＢポインタを算出する。具体的には、ＴＳＢポインタ計算部１７は、制御設定レジスタ部１６が出力したベースアドレスと、ＴＳＢのサイズと、ページサイズとを、以下の式（１）に代入してＴＳＢポインタを計算する。
【００６８】
なお、式（１）中のｐａとは、ＴＳＢポインタを示し、ＶＡとは、仮想アドレスを示し、ＶＡとは、仮想アドレスを示し、ｔｓｂ＿ｓｉｚｅとはＴＳＢサイズを示し、ｐａｇｅ＿ｓｉｚｅとはページサイズを示す。すなわち、式（１）は、ｔｓｂ＿ｂａｓｅを物理アドレスの「４６」ビット目から「１３＋ｔｓｂ＿ｓｉｚｅ」ビット目とすることを示す。また、式（１）は、ＶＡを物理アドレスの「２１＋ｔｓｂ＿ｓｉｚｅ＋（３×ｐａｇｅ＿ｓｉｚｅ）」ビット目から「１３＋（３×ｐａｇｅ＿ｓｉｚｅ）」ビット目とし、残りのビットを「０」とすることを示す。
【００６９】
【数１】
2013125355.tif 000003
【００７０】
そして、ＴＳＢ＃０は、ＴＳＢポインタ計算部１７がＴＳＢポインタを算出した場合には、ＴＲＦリクエストをＬ１キャッシュ制御部７ａに発行し、ＴＲＦ−リクエスト要求フラグを「ｏｎ」にする。具体的には、ＴＳＢ＃０は、ＴＳＢポインタ計算部１７が算出したＴＳＢポインタをＬ１データキャッシュ制御部７ａに出力させる。これとともに、ＴＳＢ＃０は、ＴＴＥのリクエストを受信したリクエスト受信部１１を一意に示すリクエストポートＩＤ（TRF-REQ-SRC-ID）とＴＳＢ＃０を示すテーブルウォーカーのＩＤ（TSB-PORT-ID）とをＬ１データキャッシュ制御部７ａに送信する。
【００７１】
なお、制御設定レジスタ部１６は、複数のＴＳＢコンフィグレジスタを有し、各ＴＳＢコンフィグレジスタには、ＯＳ（Operating  System）により、それぞれ異なるＴＳＢのベースアドレスとＴＳＢのサイズとページサイズとが設定されている。そして、リクエスト制御部１２が有する各ＴＳＢ＃０〜＃３は、制御設定レジスタ部１６からそれぞれ異なるＴＳＢコンフィグレジスタを選択する。このため、各ＴＳＢ＃０〜＃３は、ＴＳＢポインタ計算部１７に、それぞれ異なる値のＴＳＢポインタを算出させるので、同一の仮想アドレスからそれぞれ異なるＴＳＢポインタに対するＴＲＦリクエストを発行することとなる。
【００７２】
例えば、メモリ２には、ＴＴＥを格納する領域が４つ存在し、ＯＳが起動時にいずれの領域にＴＴＥを格納するかを設定する。このため、リクエスト制御部１２が１つのＴＳＢ＃０のみを有する場合には、４つの候補全てに対して、ＴＲＦリクエストを発行しなければならず、テーブルウォークに要する時間を増大させてしまう。しかし、リクエスト制御部１２は、各領域に対してＴＲＦリクエストを発行する４つのＴＳＢ＃０〜＃３を有する場合には、各領域に対するＴＲＦリクエストを各ＴＳＢ＃０〜＃３に発行させることで、迅速にＴＴＥを取得することができる。
【００７３】
なお、メモリ２には、ＴＴＥを格納する領域を任意の数だけ設定することができる。すなわち、メモリ２にＴＴＥを格納する領域を６つ設定する場合には、リクエスト制御部１２に６つのＴＳＢ＃０〜＃５を設置し、各領域に対するＴＲＦリクエストを発行するように設定してもよい。
【００７４】
図４の説明に戻り、Ｌ１データキャッシュ制御部７ａは、ＴＳＢ＃０が発行したＴＲＦリクエストを取得した場合には、取得したＴＲＦリクエストの対象となるＴＴＥがＬ１データキャッシュ７ｃに保持されているか判別する。そして、Ｌ１データキャッシュ制御部７ａは、ＴＲＦのリクエスト対象となるＴＴＥがＬ１データキャッシュ７ｃに保持されている場合、すなわちキャッシュヒットした場合には、キャッシュヒットした旨の通知を、ＴＲＦリクエストを発行したＴＳＢに送信する。
【００７５】
一方、Ｌ１データキャッシュ制御部７ａは、ＴＲＦのリクエスト対象となるＴＴＥがＬ１データキャッシュ７ｃに保持されていない場合、すなわちキャッシュミスした場合は、ＴＴＥをＬ１データキャッシュ７ｃに保持させる。そして、Ｌ１データキャッシュ制御部７ａは、再度ＴＲＦリクエストの対象となるＴＴＥがＬ１データキャッシュ７ｃに保持しているか判別する。
【００７６】
以下、ＴＳＢ＃０によって発行されたＴＲＦリクエストをＬ１データキャッシュ制御部７ａが取得した例について説明する。例えば、ＴＲＦリクエストを取得したＬ１データキャッシュ制御部７ａは、リクエストポートＩＤとテーブルウォーカーのＩＤとから、リクエスト制御部１２のＴＳＢ＃０によるＴＲＦリクエストであると把握する。
【００７７】
そして、Ｌ１キャッシュ制御部７ａは、リクエスト発行のプライオリティを取得すると、Ｌ１キャッシュ制御用パイプラインにＴＲＦリクエストを投入する。つまり、Ｌ１データキャッシュ制御部７ａは、ＴＲＦリクエストの対象となるＴＴＥ、すなわち、ＴＳＢポインタが示す記憶領域に格納されたＴＴＥが保持されているか否かを判別する。
【００７８】
そして、Ｌ１データキャッシュ制御部７ａは、当該ＴＲＦリクエストがキャッシュヒットした場合は、Ｌ１キャッシュ制御用パイプラインをリクエストが流れ終わったサイクルでＴＲＦリクエストの対象データが保持されていることを示す信号をＴＳＢ＃０に出力する。このような場合には、ＴＳＢ＃０は、Ｌ１データキャッシュ７ｃから保持されたデータを送出してもらい、リクエストチェック部１８を用いて、送出したデータがＴＬＢ制御部５ａからリクエストされたＴＴＥであるか否かを判別する。
【００７９】
一方、ＴＴＥが保持されていない場合、すなわち、ＴＲＦリクエストの対象となるＴＴＥがキャッシュミスした場合は、以下の処理を実行する。まず、Ｌ１データキャッシュ制御部７ａは、図３に示すＬ１データキャッシュ７ｃのＭＩＢ（Move  In  Buffer）にＴＲＦリクエストであることを示すフラグを保持させる。
【００８０】
そして、Ｌ１データキャッシュ制御部７ａは、Ｌ１データキャッシュ７ｃにＴＲＦリクエストの対象となる記憶領域に記憶されたデータのムーブイン処理のリクエストをＬ２キャッシュ６に発行させる。また、Ｌ１データキャッシュ制御部７ａは、ＴＲＦリクエストがＬ１キャッシュ制御用パイプラインを流れ終わったサイクルで、Ｌ１キャッシュミスしてＭＩＢを確保したことを示す信号をＴＳＢ＃０に出力する。このような場合には、ＴＳＢ＃０は、ムーブイン待ちフラグを「ｏｎ」にする。
【００８１】
ここで、Ｌ２キャッシュ６は、ムーブイン処理のリクエストが発行された場合には、通常のロード命令と同様の動作で、メモリ２からＴＲＦリクエストの対象となるデータを保持し、保持したデータをＬ１データキャッシュ７ｃに送信する。このような場合には、ＭＩＢは、Ｌ２キャッシュ６から送信されたデータをＬ１データキャッシュ７ｃに保持させるとともに、保持させたデータがＴＲＦリクエストの対象となるデータであると判別する。そして、ＭＩＢは、ＴＲＦリクエストを再度発行する指示をＴＳＢ＃０に対し発行する。
【００８２】
すると、ＴＳＢ＃０は、ムーブイン待ちフラグ「ｏｆｆ」に戻し、ＴＳＢポインタ計算部１７にＴＳＢポインタを再計算させ、Ｌ１データキャッシュ制御部７ａにＴＲＦリクエストを再度発行する。そして、Ｌ１データキャッシュ制御部７ａは、ＴＲＦリクエストをＬ１キャッシュ制御用パイプラインに投入する。すると、Ｌ１データキャッシュ制御部７ａは、キャッシュヒットしたと判別し、ＴＳＢ＃０にＴＲＦリクエストの対象データが保持されていることを示す信号をＴＳＢ＃０に出力する。このような場合には、ＴＳＢ＃０は、再度ＴＲＦリクエストを発行し、キャッシュヒットしたデータをリクエストＬ１データキャッシュ７ｃに送出させる。
【００８３】
ここで、Ｌ１データキャッシュ７ｃとリクエストチェック部１８とは、８バイト幅のバスで接続されている。そして、Ｌ１データキャッシュ７ｃは、先にＴＴＥ−Ｄａｔａ部を送出し、次に、ＴＴＥ−Ｔａｇ部を送出する。リクエストチェック部１８は、Ｌ１データキャッシュ７ｃが送出したデータを受信し、受信したデータがＴＲＦリクエストの対象となるＴＴＥであるか否かを判別する。
【００８４】
このような場合には、リクエストチェック部１８は、ＴＴＥ−Ｄａｔａ部のＲＡと、上限ＰＡ[４６：１３]および下限ＰＡ[４６:１３]とを比較することで、ＴＴＥ−Ｄａｔａ部のＲＡが所定のアドレス範囲内に入っているか否かを判別する。これと並行して、リクエストチェック部１８は、Ｌ１データキャッシュ７ｃが送出したＴＴＥ−Ｔａｇ部の仮想アドレスと、ＴＳＢ＃０が記憶する仮想アドレスとが一致するか否かを判別する。
【００８５】
そして、ＴＳＢ＃０は、ＴＴＥ−Ｄａｔａ部のＲＡが所定のアドレス範囲内に入っており、かつ、ＴＴＥ−Ｔａｇ部のＶＡがＴＳＢ＃０が記憶する仮想アドレスと一致する場合には、ＴＬＢに登録するＴＴＥの物理アドレスを算出する。すなわち、ＴＳＢ＃０は、ＴＴＥ−Ｄａｔａ部のＲＡにオフセットＰＡ[４６：１３]を加算し、ＴＬＢ５に登録するＴＴＥの物理アドレスを算出する。なお、リクエストチェック部１８は、制御設定レジスタ１５に複数の上限レジスタおよび下限レジスタが存在する場合には、最若番の上限レジスタおよび下限レジスタを用いて、ＴＴＥ−Ｄａｔａ部のＲＡが所定のアドレス範囲内にあるか否かを判別する。
【００８６】
その後、リクエストチェック部１８は、チェック結果に問題が無ければＴＬＢ５への登録要求をＴＳＢＷ制御部１９に通知する。一方、リクエストチェック部１８は、チェック結果に問題が有る場合には、ＴＳＢ＃０によるテーブルウォークの結果にトラップ要因の通知をＴＳＢＷ制御部１９に通知する。また、このような場合には、ＴＳＢ＃０は、トラップ検出フラグを「ｏｎ」にする。ここで、チェック結果に問題が有る場合とは、Ｌ１データキャッシュ７ｃが送出したＴＴＥ−ＴａｇとＴＳＢ＃０が記憶する仮想アドレスが一致しない場合や、ＲＡが所定のアドレス範囲に入らない場合、パスエラーが生じた場合等である。
【００８７】
このように、リクエストチェック部１８は、ＴＴＥ−Ｄａｔａ部に対して、ＴＴＥ−Ｔａｇ部よりも多くのチェックを実行する。このため、ＨＷＴＷ１０は、Ｌ１データキャッシュ７ｃにＴＴＥ−Ｄａｔａ部から先に出力させることで、総チェックサイクルを短くさせ、テーブルウォーク処理を高速化できる。
【００８８】
ＴＳＢＷ制御部１９は、リクエストチェック部１８から登録要求が通知された場合には、ＴＬＢ制御部５ａに対してＴＴＥの登録要求を発行する。このような場合には、ＴＬＢ制御部５ａは、リクエストチェック部１８がチェックしたＴＴＥ−Ｔａｇ部とリクエストチェック部１８が算出した物理アドレスを有するＴＴＥ−Ｄａｔａとを有するＴＴＥをＴＬＢ５に登録する。
【００８９】
また、ＴＳＢＷ制御部１９は、ＴＬＢ５に対してＴＬＢミスしたリクエストを再投入させることで、ＴＬＢ５に登録されたＴＴＥを再度検索させる。この結果、ＴＬＢ５は、ヒットしたＴＴＥを用いて仮想アドレスを物理アドレスに変換し、変換した物理アドレスを出力する。すると、Ｌ１データキャッシュ制御部７ａは、通常のデータ取得要求時と同様に、ＴＬＢ５が出力した物理アドレスが示す記憶領域に格納されたオペランドまたは命令を演算部４に出力する。
【００９０】
一方、ＴＳＢＷ制御部１９は、テーブルウォークの結果にトラップ要因の通知を受けた場合には、以下の処理を実行する。すなわち、ＴＳＢＷ制御部１９は、リクエスト制御部１２が有する他のＴＳＢによるＴＲＦリクエストの結果、取得されたＴＴＥのチェック結果をリクエストチェック部１８から通知されるまで待機する。
【００９１】
そして、ＴＳＢＷ制御部１９は、リクエスト制御部１２が有するいずれかのＴＳＢが発行したＴＲＦリクエストにより取得されたＴＴＥのチェック結果として登録要求を受信した場合には、ＴＬＢ制御部５ａに対してＴＴＥの登録要求を発行する。そして、ＴＳＢＷ制御部１９は、処理を終了する。
【００９２】
すなわち、ＴＳＢＷ制御部１９は、ＴＳＢ＃０〜＃３のうち、いずれかのＴＳＢ＃０〜＃３によってリクエストの対象となるＴＴＥが取得された場合には、その時点でＴＳＢ制御部５ａにＴＴＥの登録要求を発行する。そして、ＴＳＢＷ制御部１９は、他のＴＳＢによるＴＲＦリクエストの結果にトラップ要因が存在する場合にも、それを無視して処理を完了する。
【００９３】
また、ＴＳＢＷ制御部１９は、処理を完了する場合には、完了信号をＬ１データキャッシュ７ｃのＭＩＢに送信する。ＭＩＢは、ＴＲＦリクエストフラグが「ｏｎ」であり、かつ、完了信号を取得すると、ＴＲＦリクエスト完了フラグを「ｏｎ」にする。このような場合には、Ｌ１データキャッシュ７ｃは、Ｌ２キャッシュ６からデータが送出された場合にも、起動信号をＴＳＢＷ制御部１９に送信せず、Ｌ２キャッシュ６から送出されたデータのキャッシュのみを行う。
【００９４】
また、ＴＳＢＷ制御部１９は、先行リクエスト制御部１４が有する全てのＴＳＢが発行したＴＲＦリクエストにより取得されたＴＴＥのチェック結果が全てトラップ要因の通知である場合には、以下の処理を実行する。すなわち、ＴＷＢＷ制御部１８は、通知されたトラップ要因のうち、最も若い番号のＴＳＢが発行したＴＲＦリクエストに関わるトラップ要因であって、最も優先度の高いトラップ要因をＬ１データキャッシュ制御部７ａに対通知し、トラップ処理を実行させる。
【００９５】
一方、ＴＳＢＷ制御部１９は、リクエスト制御部１２が有する全てのＴＳＢ＃０〜＃３が発行したＴＲＦリクエストに係るチェック結果が、トラップ要因の通知である場合は、そのまま処理を終了する。また、ＴＳＢＷ制御部１９は、他のリクエスト制御部１２ａおよびリクエスト制御部１２ｂについても、全てのＴＲＦリクエストに係るチェック結果がトラップ要求である場合には、そのまま処理を終了する。
【００９６】
つまり、ＴＳＢＷ制御部１９は、ＴＯＱに係るトラップ要因が通知された場合にのみ、トラップ処理を実行し、他のリクエストに関わるトラップ要因が通知された場合には、トラップ処理を実行せずに、処理を終了する。これにより、ＴＳＢＷ制御部１９は、ＴＴＥのリクエストをアウトオブオーダーに実行する場合にも、ＴＯＱに関わるトラップ要因が検出された際にのみトラップ処理を実行するＬ１データキャッシュ制御部７ａの論理の変更を不要とする。この結果、複数の変換対取得部１５〜１５ｂの制御が容易になる。
【００９７】
このように、ＨＷＴＷ１０は、複数のオペランドに関わるＴＴＥについてのテーブルウォークをアウトオブオーダーに実行する。このため、ＨＷＴＷ１０は、複数のオペランドに関するＴＴＥを迅速に取得することができる。また、ＨＷＴＷ１０は、それぞれ独立に動作する複数の変換対取得部１５〜１５ｂを有し、ストランド（スレッド）毎に、ＴＴＥのリクエストを異なる変換対取得部１５〜１５ｂに割当てる。このため、ＨＷＴＷ１０は、ストランド（スレッド）毎に、オペランドに関わるＴＴＥのリクエスト同士をアウトオブオーダーに実行することができる。
【００９８】
なお、ＴＬＢ制御部５ａは、Ｌ１データキャッシュ７ｃからＴＴＥをＴＬＢ５に登録させる場合には、ＣＰＵ１が実行するソフトウェアがストア命令により、ＴＬＢ５へ新たなＴＴＥを登録するデータイン動作に変換することにより登録させる。このため、ＴＬＢ制御部５ａは、新たな処理を実行するための回路を実装する必要がなく、回路量を削減することができる。
【００９９】
なお、Ｌ１キャッシュ制御部７ａは、取得したＴＴＥに発生した訂正可能な１ビットエラーを訂正する等の処理を実行するため等の理由により、ＴＲＦリクエストがアボートした場合には、ＴＲＦリクエストがアボートしたことを示す信号をＴＳＢ＃０に出力する。このような場合には、ＴＳＢ＃０は、Ｌ１データキャッシュ制御部７ａに、再度ＴＲＦリクエストを発行する。
【０１００】
また、Ｌ１キャッシュ制御部７ａは、ＴＲＦリクエストの対象となるデータに訂正不能なエラーであるＵＥ（Uncorrectable  Error）が発生した場合には、ＵＥである旨を示す信号をＴＳＢ＃０に出力する。このような場合には、Ｌ１キャッシュ制御部７ａは、ＴＳＢＷ制御部１９に、ＭＭＵ−ＥＲＲＯＲ−ＴＲＡＰ要因が生じた旨を示す通知を送信する。
【０１０１】
また、Ｌ１キャッシュ制御部７ａは、各信号をＴＲＦリクエストのクエストポートＩＤとテーブルウォーカーのＩＤとともに送信することで、ＴＲＦリクエストを発行した任意のＴＳＢに対して各信号を送信することができる。
【０１０２】
例えば、命令制御部３、演算部４、Ｌ１データキャッシュ制御部７ａ、Ｌ１命令キャッシュ制御部７ｄとは、電子回路である。また、ＴＬＢ制御部５ａ、ＴＬＢ検索部５ｅとは、電子回路である。また。リクエスト受信部１１〜１１ｂ、リクエスト制御部１２〜１２ｂ、先行リクエスト受信部１３、先行リクエスト制御部１４、ＴＳＢポインタ計算部１７、リクエストチェック部１８、ＴＳＢＷ制御部１９とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【０１０３】
また、ＴＬＢ本体部５ｂ、コンテキストレジスタ５ｃ、仮想アドレス５ｄ、Ｌ１データタグ７ｂ、Ｌ１データキャッシュ７ｃ、Ｌ１命令タグ７ｅ、Ｌ１命令キャッシュ７ｆ、制御設定レジスタ部１６とは、レジスタ等の半導体メモリ素子である。
【０１０４】
次に、図５ａ〜５ｃを用いて、ＨＷＴＷ１０が同じストランド（スレッド）に含まれる複数のオペランドに関するＴＴＥの取得リクエストを並行して実行することで、連続してＭＭＵミスが発生した場合にも、アドレス変換に要する時間を短縮することができる点について説明する。図５ａは、ＯＳが連続してトラップ処理を実行する処理を説明するための図である。図５ｂは、従来のＨＷＴＷの処理を説明するための図である。図５ｃは、実施例１に関わるＨＷＴＷの処理を説明するための図である。
【０１０５】
なお、図５ａ〜図５ｃ中の通常処理とは、演算処理部によって演算処理が実行されている状態を示す。また、図５ａ〜図５ｃ中のキャッシュミスとは、アドレス変換後の物理アドレスが示す記憶領域のオペランド読み込みリクエストが、キャッシュミスした後に主記憶装置からオペランドを取得する処理を実行している状態を示す。
【０１０６】
図５ａに示す例では、従来のＣＰＵは、通常処理の後、ＴＬＢを検索した結果、ＭＭＵミスを検出する。すると、従来のＣＰＵは、ＯＳにトラップ処理を実行させ、ＴＴＥをＴＬＢに登録させる。その後、従来のＣＰＵは、新たに登録したＴＴＥを用いて、アドレス変換を行い、データを検索した結果、キャッシュミスが生じるので、主記憶装置からオペランドを取得する。
【０１０７】
続いて、従来のＣＰＵは、ＴＬＢの検索を行うが、再度ＭＭＵミスを検出するので、再度ＯＳにトラップ処理を実行させ、ＴＴＥをＴＬＢに登録させる。その後、従来のＣＰＵは、アドレス変換を行ってデータの検索を行うが、キャッシュミスが発生するので、オペランドを主記憶装置から取得する。このように、従来のＣＰＵは、ＭＭＵミスが発生する度に、ＯＳにトラップ処理を実行させる。このため、従来のＣＰＵが通常処理を実行するのは、２度目のＭＭＵミスが発生し、ＭＭＵミスが発生したＴＴＥをＴＬＢに登録してからとなる。
【０１０８】
次に、図５ｂを用いて、従来のＣＰＵがＨＷＴＷを実行する処理について説明する。例えば、従来のＣＰＵは、ＭＭＵミスが検出されると、ＨＷＴＷを起動させ、ＴＴＥの登録処理を実行させる。そして、従来のＣＰＵは、キャッシュしたＴＴＥを用いてアドレス変換を行い、オペランドを取得する。次に、従来のＣＰＵは、再度ＭＭＵミスを検出するが、ＴＴＥの登録処理をＨＷＴＷに実行させるので、ＭＭＵミスの検出直後に、通常処理を開始する。しかし、従来のＣＰＵは、ＭＭＵミスが発生する度に、ＴＴＥの登録処理を１つのＨＷＴＷに順次実行させるので、演算処理に要する時間を５％ほどしか短縮することができない。
【０１０９】
次に、図５ｃを用いて、ＨＷＴＷ１０を有するＣＰＵ１が実行する処理について説明する。ＣＰＵ１は、１度目のＭＭＵミスを検出した場合には、ＨＷＴＷ１０にＴＴＥの登録処理を実行させる。続いて、ＣＰＵ１は、２度目のＭＭＵミスを検出するが、ＨＷＴＷ１０は、ＨＷＴＷ１０がＴＴＥの取得処理を実行中であっても、新たなＴＴＥの取得リクエストを発行する。すると、ＨＷＴＷ１０は、図５ｃ中（Ｃ）に示すように、複数のオペランドに関わるＴＴＥの取得リクエストを並行して実行する。このため、ＣＰＵ１は、ＭＭＵミスが連続する場合にも、迅速にＴＴＥを取得することができる結果、演算処理に要する時間を２０％ほど短縮することができる。
【０１１０】
次に、図６を用いてＣＰＵ１が実行する処理の流れの一例について説明する。図６は、実施例１に関わるＣＰＵが実行する処理の流れを説明するためのフローチャートである。図６に示す例では、ＣＰＵ１は、メモリアクセスリクエストが発行されたことをトリガとして（ステップＳ１０１：Ｙｅｓ）、処理を開始する。なお、ＣＰＵ１は、メモリアクセスリクエストが発行されていない場合は（ステップＳ１０１：Ｎｏ）、処理を開始せずに待機する。
【０１１１】
まず、ＣＰＵ１は、メモリアクセスリクエストが発行された場合は（ステップＳ１０１：Ｙｅｓ）、メモリアクセスリクエストの対象となる仮想アドレスを物理アドレスに変換するＴＴＥをＴＬＢから検索する（ステップＳ１０２）。そして、ＣＰＵ１は、ＴＴＥがＴＬＢヒットしたか否かを判別する（ステップＳ１０３）。次に、ＣＰＵ１は、ＴＴＥがＴＬＢミスした場合には（ステップＳ１０３：Ｎｏ）、ＨＷＴＷ１０によるテーブルウォークを実行するか否かを示す設定が有効であるか否かを判別する（ステップＳ１０４）。すなわち、ＣＰＵ１は、テーブルウォークを実行するか否かを示すテーブルウォーク有効ビットが「ｏｎ」であるか否かを判別する。
【０１１２】
そして、ＣＰＵ１は、ＨＷＴＷ１０によるテーブルウォークを実行させる場合は（ステップＳ１０４：Ｙｅｓ）、ＨＷＴＷ１０を起動する（ステップＳ１０５）。その後、ＣＰＵ１は、ＴＳＢポインタを算出し（ステップＳ１０６）、算出したＴＳＢポインタを用いて、メモリ２のＴＳＢ領域にアクセスし、ＴＴＥを取得する（ステップＳ１０７）。
【０１１３】
次に、ＣＰＵ１は、取得したＴＴＥが正しいか否かをチェックする（ステップＳ１０８）。そして、ＣＰＵ１は、取得したＴＴＥが正しい場合、すなわち、ＴＲＦリクエストの対象となるＴＴＥである場合には（ステップＳ１０８：Ｙｅｓ）、取得したＴＴＥをＴＬＢ５に登録する（ステップＳ１０９）。
【０１１４】
一方、ＣＰＵ１は、取得したＴＴＥが誤りである場合には（ステップＳ１０８：Ｎｏ）、ＯＳにトラップ処理を実行させる（ステップＳ１１０〜Ｓ１１３）。なお、ＯＳによるトラップ処理（ステップＳ１１０〜Ｓ１１３）は、従来のＣＰＵが実行する処理と同様（図９中ステップＳ５〜Ｓ８）であるものとし、詳細な説明を省略する。
【０１１５】
また、ＣＰＵ１は、ＴＴＥをＴＬＢから検索した結果（ステップＳ１０２）、ＴＬＢヒットした場合には（ステップＳ１０３：Ｙｅｓ）、以下の処理を実行する。すなわち、ＣＰＵ１は、ヒットしたＴＴＥによってアドレス変換した物理アドレスを用いて、メモリアクセスリクエストの対象データをＬ１データキャッシュ７ｃから検索する（ステップＳ１１４）。そして、ＣＰＵ１は、通常時と同様の演算処理を実行し、処理を終了する。
【０１１６】
次に、図７を用いて、ＨＷＴＷ１０が実行する処理の流れについて説明する。図７は、実施例１に関わるＨＷＴＷが実行する処理の流れの一例を説明するための図である。図７に示す例では、ＨＷＴＷ１０は、リクエスト受信部１１〜１１ｂがリクエストを受信したことをトリガとして（ステップＳ２０１：Ｙｅｓ）、処理を開始する。なお、ＨＷＴＷ１０は、リクエスト受信部１１〜１１ｂがリクエストを受信していない場合は（ステップＳ２０１：Ｎｏ）、リクエストを受信するまで待機する。
【０１１７】
まず、ＨＷＴＷ１０は、テーブルウォークであるＴＳＢ＃０〜＃３を起動させる（ステップＳ２０２）。次に、ＨＷＴＷ１０は、ＴＳＢコンフィグレジスタのテーブルウォーク有効ビットが「ｏｎ」であるか否かを判別する（ステップＳ２０３）。そして、ＨＷＴＷ１０は、テーブルウォーク有効ビットが「ｏｎ」である場合は（ステップＳ２０３：Ｙｅｓ）、ＴＳＢポインタを算出し（ステップＳ２０４）、Ｌ１データキャッシュ制御部７ａにＴＲＦリクエストを発行する（ステップＳ２０５）。
【０１１８】
次に、ＨＷＴＷ１０は、Ｌ１データキャッシュ７ｃからの応答によりＬ１データキャッシュ７ｃにＴＲＦリクエストの対象のＴＴＥが保持されているかをチェックする（ステップＳ２０６）。そして、ＨＷＴＷ１０は、Ｌ１データキャッシュ７ｃにＴＴＥが保持されていない場合、すなわち、ＴＴＥがキャッシュミスした場合は（ステップＳ２０６ＭＩＳＳ）、ＴＴＥのムーブイン（MI：Move  In）待ち状態に移行する（ステップＳ２０７）。
【０１１９】
次に、ＨＷＴＷ１０は、ＭＩＢにＴＲＦリクエストであることを示すフラグが保持されたか否かを判別し（ステップＳ２０８）、ＭＩＢにＴＲＦリクエストであることを示すフラグが保持された場合は（ステップＳ２０８：Ｙｅｓ）、以下の処理を実行する。すなわち、ＨＷＴＷ１０は、再度ＴＳＢポインタを算出し（ステップＳ２０４）、ＴＲＦリクエストを発行する（ステップＳ２０５）。一方、ＨＷＴＷ１０は、ＭＩＢにＴＲＦリクエストであることを示すフラグが保持されていない場合は（ステップＳ２０８：Ｎｏ）、再度ムーブイン待ち状態に移行する（ステップＳ２０７）。
【０１２０】
一方、ＨＷＴＷ１０は、Ｌ１データキャッシュ７ｃに対するＴＲＦリクエストがヒットした場合は（ステップＳ２０６：ＨＩＴ）、ヒットしたＴＴＥの候補が正しいＴＴＥであるか否かを判別する（ステップＳ２０９）。そして、ＨＷＴＷ１０は、ＴＴＥの候補が正しいＴＴＥである場合は（ステップＳ２０９：Ｙｅｓ）、ＴＬＢ５に取得したＴＴＥの登録要求を発行し（ステップＳ２１０）、テーブルウォークを完了する（ステップＳ２１１）。
【０１２１】
ここで、ＨＷＴＷ１０は、ヒットしたＴＴＥの候補が正しいＴＴＥではない場合は（ステップＳ２０９：Ｎｏ）、トラップ要因を検出し（ステップＳ２１２）、その後、テーブルウォークを完了する（ステップＳ２１１）。また、ＨＷＴＷ１０は、Ｌ１データキャッシュ７ｃが記憶するＴＴＥのデータにＵＥが発生した場合は（ステップＳ２０６：ＵＥ）、トラップ要因を検出し（ステップＳ２１２）、その後、テーブルウォークを完了する（ステップＳ２１１）。
【０１２２】
また、ＨＷＴＷ１０は、ＴＲＦリクエストがアボートした場合は（ステップＳ２０６：ＡＢＯＲＴ）、再度、ＴＳＢ＃０〜＃３を起動させる（ステップＳ２０２）。なお、ＨＷＴＷ１０は、テーブルウォーク有効ビットが「ｏｆｆ（０）」である場合は（ステップＳ２０３：Ｎｏ）、テーブルウォークを実行せずに、処理を完了する（ステップＳ２１１）。
【０１２３】
次に、図８を用いて、ＴＳＢＷ制御部１９が実行する処理の流れの一例について説明する。図８は、実施例１に関わるＴＳＢＷ制御部が実行する処理の流れの一例を説明するためのフローチャートである。なお、図８に示す例では、ＴＳＢＷ制御部１９は、各ＴＳＢ＃０〜＃３によるテーブルウォークが完了したことをトリガとして（ステップＳ３０１：Ｙｅｓ）、処理を開始する。また、ＴＳＢＷ制御部１９は、各ＴＳＢ＃０〜＃３によるテーブルウォークが完了していない場合は（ステップＳ３０１：Ｎｏ）、処理を開始せずに待機する。
【０１２４】
次に、ＴＳＢＷ制御部１９は、ＴＳＢ＃０〜＃３のいずれかにより、ＴＳＢがヒットしたか否かを判別し（ステップＳ３０２）、ＴＳＢヒットした場合は（ステップＳ３０２：Ｙｅｓ）、ＴＬＢ登録要求をＴＬＢ制御部５ａに発行する（ステップＳ３０３）。次に、ＴＳＢＷ制御部１９は、Ｌ１データキャッシュ制御部７ａに再起動を要求する（ステップＳ３０４）。次に、ＴＳＢ制御部１９は、ＴＲＦリクエストを再投入することで（ステップＳ３０５）、ＴＬＢを再度検索させる（ステップＳ３０６）。
【０１２５】
そして、ＴＳＢＷ制御部１９は、ＴＬＢヒットしたか否かを判別し（ステップＳ３０７）、ＴＬＢヒットした場合は（ステップＳ３０７：Ｙｅｓ）、Ｌ１データキャッシュ７ｃのキャッシュ検索を実行し（ステップＳ３０８）、その後処理を終了する。一方、ＴＳＢＷ制御部１９は、ＴＬＢミスした場合は（ステップＳ３０７：Ｎｏ）、何もせずにそのまま処理を終了する。
【０１２６】
一方、ＴＳＢＷ制御部１９は、ＴＳＢ＃０〜＃３のいずれもがＴＳＢミスした場合は（ステップＳ３０２：Ｎｏ）、１つのリクエスト制御部が有する全てのＴＳＢがテーブルウォークを完了したか否かを判別する（ステップＳ３０９）。そして、ＴＳＢＷ制御部１９は、全てのＴＳＢがテーブルウォークを完了していない場合は（ステップＳ３０９：Ｎｏ）、以下の処理を実行する。すなわち、ＴＳＢＷ制御部１９は、一定時間待機し（ステップＳ３１０）、再度１つのリクエスト制御部が有する全てのＴＳＢがテーブルウォークを完了したか否かを判別する（ステップＳ３０９）。
【０１２７】
一方、ＴＳＢＷ制御部１９は、１つのリクエスト制御部が有する全てのＴＳＢがテーブルウォークを完了した場合は（ステップＳ３０９：Ｙｅｓ）、図７中ステップＳ２１２にて検出されたトラップ要因をチェックする（ステップＳ３１１）。次に、ＴＳＢＷ制御部１９は、トラップ要因が発生したＴＲＦリクエストがＴＯＱであるか否かを判別する（ステップＳ３１２）。
【０１２８】
そして、ＴＳＢＷ制御部１９は、トラップ要因が発生したＴＲＦリクエストがＴＯＱに保持されている場合は（ステップＳ３１２：Ｙｅｓ）、Ｌ１データキャッシュ制御部７ａにトラップ要因を通知する(ステップＳ３１３)。すると、Ｌ１データキャッシュ制御部７ａは、ＯＳにトラップ要因を通知し（ステップＳ３１４）、トラップ処理を実行させる。その後、ＴＳＢＷ制御部１９は、処理を終了する。
【０１２９】
一方、ＴＳＢＷ制御部１９は、トラップ要因が発生したＴＲＦリクエストがＴＯＱではない場合は（ステップＳ３１２：Ｎｏ）、トラップ要因を破棄し（ステップＳ３１５）、何もせずにそのまま処理を終了する。
【０１３０】
[実施例１の効果]
上述したように、ＣＰＵ１は、仮想アドレスを物理アドレスに変換するＴＴＥを複数記憶するメモリ２と接続されている。また、ＣＰＵ１は、複数のスレッドを実行し、仮想アドレスを含むメモリリクエストを出力する演算部４を有する。また、ＣＰＵ１は、メモリ２からＴＴＥの一部を登録するＴＬＢ５を有する。また、ＣＰＵ１は、演算処理の対象となるデータ、すなわちオペランドが格納された仮想アドレスを物理アドレスに変換するＴＴＥがＴＬＢ５に登録されていない場合には、ＨＷＴＷ１０にＴＴＥの取得リクエストを発行するＴＬＢ制御部５ａを有する。
【０１３１】
また、ＣＰＵ１は、発行された取得リクエストの対象となるＴＴＥをメモリ２から取得する複数のリクエスト制御部１２〜１２ｂを有する複数の変換対取得部１５〜１５ｂを有する。そして、ＴＬＢ制御部５ａは、ＴＴＥの取得リクエストに関わるストランド（スレッド）ごとに、異なる変換対取得部１５〜１５ｂへ発行し、各変換対取得部１５〜１５ｂは、それぞれ独立してＴＴＥの取得を実行する。また、ＣＰＵ１は、各変換対取得部１５〜１５ｂが取得したＴＴＥのいずれかを、ＴＬＢ５に登録するＴＳＢＷ制御部１９を有する。
【０１３２】
このため、ＣＰＵ１は、ＭＭＵミスするようなメモリアクセスが連続した場合にも、オペランドが格納された仮想アドレスを物理アドレスに変換する複数のＴＴＥを並行して登録することができる。この結果、ＣＰＵ１は、アドレス変換に要する時間を短縮することができる。
【０１３３】
また、ＣＰＵ１は、１つのストランド（スレッド）においてオペランドに関わるＴＴＥの取得要求が複数発行された場合にも、各ＴＴＥを平行して登録することができるので、演算処理に要する時間を短縮できる。また、ＣＰＵ１は、異なるストランド（スレッド）においてオペランドに関わるＴＴＥの取得要求が同時に発行された場合にも、各ＴＴＥを並行して登録できるので、アドレス変換に要する時間を短縮できる。
【０１３４】
例えば、データベースシステムの一例として、リレーショナルデータベース方式が適用されたシステムが知られている。このようなシステムにおいては、各データには、隣接するデータを示す情報が付加されるため、オペランド等のデータを取得する際に、連続してＴＬＢミス（ＭＭＵミス）が発生し易い。しかし、ＣＰＵ１は、複数のオペランドに関わるＴＴＬのリクエストが連続してＴＬＢミスした場合にも、並行して各ＴＴＥを取得し、アドレス変換を実行することができるので、演算処理に要する時間を短縮することができる。また、ＣＰＵ１は、演算処理とは独立して上述した処理を実行するので、さらに演算処理に要する時間を短縮できる。
【０１３５】
また、ＣＰＵ１は、ＴＴＥを取得するリクエスト制御部１２に複数のＴＳＢ＃０〜＃３を有し、各ＴＳＢ＃０〜＃３にそれぞれ異なる領域からＴＴＥを取得させる。すなわち、ＣＰＵ１は、１つのＴＴＥを取得するリクエストから、それぞれ異なる物理アドレスを算出し、それぞれ異なる物理アドレスに記憶されたＴＴＥを取得する複数のＴＳＢ＃０〜＃３を有する。そして、ＣＰＵ１は、取得したＴＴＥの候補のうち、ＴＴＥ−Ｔａｇのチェックを行うことで、リクエストと対応する仮想アドレスを含むＴＴＥを取得する。このため、ＣＰＵ１は、ＴＴＥを格納する領域がメモリ２に複数存在する場合にも、迅速にＴＴＥを取得することができる。
【０１３６】
また、ＣＰＵ１は、ＴＴＥの取得リクエストが、あるストランド（スレッド）において最初に発行されたオペランドに関わるＴＴＥの取得リクエストである場合、すなわち、ＴＯＱである場合には、先行リクエスト受信部１３にＴＴＥの取得リクエストを発行する。そして、ＣＰＵ１は、先行リクエスト制御部１４にＴＯＱとなるＴＴＥの取得リクエストを実行させ、ＴＯＱに保持されているＴＴＥの取得リクエストを実行した結果、ＵＥ等のトラップ要因が発生した場合には、ＯＳにトラップ処理を実行させる。このため、ＣＰＵ１は、ＴＯＱについてのみトラップ処理を実行する従来のＬ１データキャッシュ制御部７ａに、新たな機能を追加しないので、ＨＷＴＷ１０の実装を容易に行うことができる。
【０１３７】
また、ＣＰＵ１は、仮想アドレスを用いて算出したＴＳＢポインタをＬ１データキャッシュ制御部７ａに出力することで、ＴＴＥをＬ１データキャッシュ７ｃに格納させ、Ｌ１データキャッシュ７ｃに格納されたＴＴＥをＴＳＢ５に登録する。つまり、ＣＰＵ１は、ＴＴＥをキャッシュメモリに保持し、キャッシュメモリに保持したＴＴＥのうち、取得リクエストに対応するＴＴＥをＴＳＢ５に登録する。このため、ＣＰＵ１は、新たな機能をＬ１キャッシュ７に付加せずともよいので、ＨＷＴＷ１０の実行を容易に行う事ができる。
【０１３８】
また、ＣＰＵ１は、Ｌ１データキャッシュ７ｃにキャッシュされたＴＴＥからエラーが発生しているか否かを判別する場合や、リクエストに関わるＴＴＥであるか否かを判別する場合には、ＴＴＥ−Ｄａｔａ部を先に送出させ、次に、ＴＴＥ−Ｔａｇ部を送出させる。このため、ＣＰＵ１は、チェックに時間を要するＴＴＥ−Ｄａｔａ部のチェックを先に開始することができるため、ＴＴＥを取得する際の時間を増加させることなく、Ｌ１キャッシュ７とＨＷＴＷ１０との間のバス幅を削減することができる。
【実施例２】
【０１３９】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１４０】
（１）変換対取得部１５〜１５ｂの数について
上述した実施例１では、ＨＷＴＷ１０は、３つの変換対取得部１５〜１５ｂを有していた。しかし、実施例はこれに限定されるものではなく、ＨＷＴＷ１０は、２つ以上であれば任意の数の変換対取得部を有することとしてもよい。
【０１４１】
（２）リクエスト受信部１１〜１１ｂおよびリクエスト制御部１２〜１２ｂの数について
上述した実施例１では、ＨＷＴＷ１０は、３つのリクエスト受信部１１〜１１ｂおよび３つのリクエスト制御部１２〜１２ｂを有していた。しかし、実施例はこれに限定されるものではなく、任意の数のリクエスト受信部およびリクエスト制御部を有することとしてもよい。
【０１４２】
また、各リクエスト制御部１２〜１２ｂ、および先行リクエスト制御部１４は、複数のＴＳＢ＃０〜＃３を有していたが、実施例はこれに限定されるものではない。すなわち、メモリ２にＴＴＥを記憶される領域が固定である場合には、各リクエスト制御部１２〜１２ｂおよび先行リクエスト制御部１４は、１つのＴＳＢを有すればよい。また、メモリ２にＴＴＥを記憶する領域の候補が４つ存在する場合は、各リクエスト制御部１２〜１２ｂおよび先行リクエスト制御部１４は、２つのＴＳＢ＃０、＃１を有し、各ＴＳＢ＃０、＃１に２回ずつテーブルウォークを実行させてもよい。
【０１４３】
（３）先行リクエスト制御部１４について
上述したＣＰＵ１は、ＴＯＱに関わるＴＴＥの取得リクエストを先行リクエスト制御部１４に実行させていた。しかし、実施例はこれに限定されるものではない。例えば、ＣＰＵ１は、区別の無い同様の機能を有する４つのリクエスト受信部１１〜１１ｃおよび４つのリクエスト制御部１２〜１２ｃを有する。そして、ＣＰＵ１は、ＴＯＱに関わるＴＴＥの取得リクエストを発行するリクエスト制御部にＴＯＱフラグを持たせる。このような場合には、ＴＳＢＷ制御部１９は、ＴＯＱフラグを持ったリクエスト制御部によるＴＲＦリクエストの実行結果からトラップ要因を検出した場合にのみ、ＯＳにトラップ処理を実行させればよい。
【符号の説明】
【０１４４】
１  ＣＰＵ
２  メモリ
３  命令制御部
４  演算部
５  ＴＬＢ
５ａ  ＴＬＢ制御部
５ｂ  ＴＬＢ本体部
５ｃ  コンテキストレジスタ
５ｄ  仮想アドレスレジスタ
５ｅ  ＴＬＢ検索部
６  Ｌ２キャッシュ
７  Ｌ１キャッシュ
７ａ  Ｌ１データキャッシュ制御部
７ｂ  Ｌ１データタグ
７ｃ  Ｌ１データキャッシュ
７ｄ  Ｌ１命令キャッシュ制御部
７ｅ  Ｌ１命令タグ
７ｆ  Ｌ１命令キャッシュ
１０  ＨＷＴＷ
１１〜１１ｂ  リクエスト受信部
１２〜１２ｂ  リクエスト制御部
１３  先行リクエスト受信部
１４  先行リクエスト制御部
１５〜１５ｂ  変換対取得部
１６  制御設定レジスタ部
１７  ＴＳＢポインタ計算部
１８  リクエストチェック部
１９  ＴＳＢＷ制御部
【図１】
2013125355.tif 000004
【図２】
2013125355.tif 000005
【図３】
2013125355.tif 000006
【図４】
2013125355.tif 000007
【図５ａ】
2013125355.tif 000008
【図５ｂ】
2013125355.tif 000009
【図５ｃ】
2013125355.tif 000010
【図６】
2013125355.tif 000011
【図７】
2013125355.tif 000012
【図８】
2013125355.tif 000013
【図９】
2013125355.tif 000014
【図１０】
2013125355.tif 000015