(57)【特許請求の範囲】
【請求項１】
仮想アドレスを物理アドレスに変換するアドレス変換対の一部をアドレス変換バッファに保持する演算処理装置であって、
前記アドレス変換バッファは、
セットアソシアティブ方式で参照する第１の領域と、エントリを順に比較するフルアソシアティブ方式で参照する第２の領域とを備えるランダムアクセスメモリである記憶部と、
前記仮想アドレスから前記物理アドレスへのアドレス変換を行う場合に、アドレス変換対象の仮想アドレスに対応するアドレス変換対を、前記第１の領域から検索し、前記第１の領域に前記アドレス変換対象の仮想アドレスに対応するアドレス変換対が存在しない場合に、前記第２の領域から前記アドレス変換対象の仮想アドレスに対応するアドレス変換対を検索する検索部と、
を備えたことを特徴とする演算処理装置。
【請求項２】
前記演算処理装置において、
前記アドレス変換バッファは、複数の記憶部に前記第１の領域と第２の領域とを設け、前記第２の領域に対して検索を行なう場合に前記複数の記憶部に同時に検索を行なう事を特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記演算処理装置において、
前記複数の記憶部の第２の領域に前記アドレス変換対を二重化して登録し、前記複数の記憶部の第２の領域に対して検索の結果を検証する検証部と、前記検証の結果に基づいて前記複数の記憶部の第２の領域から各々得られた検索結果を選択する選択部と、をさらに備えたことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記演算処理装置において、
前記第２の領域に登録したアドレス変換対のうち一部を保持するラッチと、前記仮想アドレスから前記物理アドレスへのアドレス変換を行う場合に、前記アドレス変換対象の仮想アドレスに対応するアドレス変換対を前記ラッチから検索するラッチ検索部とをさらに備えたことを特徴とする請求項１〜３のいずれか一つに記載の演算処理装置。
【請求項５】
前記演算処理装置において、
前記検索部は、前記第１の領域に前記アドレス変換対象の仮想アドレスに対応するアドレス変換対が存在せず、かつ前記アドレス変換が所定の条件を満たす場合に、前記第２の領域に対する検索を行なうことを特徴とする請求項１〜４のいずれか一つに記載の演算処理装置。
【請求項６】
仮想アドレスを物理アドレスに変換するアドレス変換対の一部を記憶部にアドレス変換バッファとして保持する演算処理装置のアドレス変換方法であって、
前記仮想アドレスから前記物理アドレスへのアドレス変換を行う場合に、アドレス変換対象の仮想アドレスに対応するアドレス変換対を、ランダムアクセスメモリである前記記憶部に設けられた第１の領域から、セットアソシアティブ方式で検索する第１の検索ステップと、
前記アドレス変換対象の仮想アドレスに対応するアドレス変換対が前記第１の領域に存在しない場合に、前記アドレス変換対象の仮想アドレスに対応するアドレス変換対を、ランダムアクセスメモリである前記記憶部に設けられた第２の領域から、エントリを順に比較するフルアソシアティブ方式で検索する第２の検索ステップと、
を備えたことを特徴とするアドレス変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置およびアドレス変換方法に関する。
【背景技術】
【０００２】
従来、メインメモリが本来提供可能な物理的なメモリ空間よりも大きなメモリ空間を仮想的に提供する仮想記憶方式が利用されている。仮想記憶方式を適用するコンピュータは、仮想アドレス(VA: Virtual Address)から物理アドレス(PA: Physical Address)への変換であるアドレス変換を行うために、ページテーブルと呼ばれる仮想アドレスと物理アドレスの対（以下、アドレス変換対と呼称）をメインメモリに記憶する。そして、コンピュータは、演算処理装置（ＣＰＵ:Central  Processing  Unit）がフェッチした命令に仮想アドレスが含まれる場合など、アドレス変換が必要な際にメインメモリにアクセスし、ページテーブルを参照してアドレス変換を行う。
【０００３】
しかし、アドレス変換のたびにメインメモリ内のページテーブルを参照しにいくのでは非常に多くの時間が費やされる。このため、通常、コンピュータは、アドレス変換バッファ（ＴＬＢ:Translation Lookaside Buffer）と呼ばれるアドレス変換専用のキャッシュをＣＰＵ内に設け、ＴＬＢに一部のアドレス変換対を保持しておき、メインメモリのページテーブルを参照する前にＴＬＢを検索する。
【０００４】
コンピュータがメモリアクセスをする際は、まずＴＬＢにて仮想アドレスを物理アドレスに変換し、物理アドレスを用いて直接メモリに対してアクセスを行うため、ＴＬＢのアクセスの速さはそのままメモリアクセスの速さに影響する。アドレス変換を早く実行するためには検索対象となるＴＬＢの容量を小さくすることが有効である。しかし、ＴＬＢの容量を小さくしすぎると、ＴＬＢでアドレスがヒットしないＴＬＢミスが多発し、その都度ページテーブルを参照することとなるため、かえって時間がかかり、性能が低下してしまう。
【０００５】
近年はプログラムがより大きいアドレス領域を必要としているので、ＴＬＢが小さい場合の影響は以前より大きくなってきている。一方でＴＬＢの容量を大きくした場合は、検索にかかる時間は大きくなり、それがハードウェアの性能向上を阻害する可能性がある。
【０００６】
ＴＬＢに対する参照方式には、仮想アドレス全体をタグとして参照するフルアソシアティブ方式と仮想アドレスの一部をインデックスタグとして参照するセットアソシアティブ方式がある。また、ＴＬＢに用いるメモリには、ＣＡＭ(Content Addressable Memory)やＲＡＭ(Random Access Memory)がある。
【０００７】
フルアソシアティブ方式を用いる場合のメモリには、従来、複数のエントリを同時に検索できるＣＡＭが用いられてきた。ＣＡＭをＴＬＢに用いると、回路サイズは増大するが、フルアソシアティブ方式でも高速に検索できる。
【０００８】
セットアソシアティブ方式を用いる場合のメモリには、従来、ＲＡＭが用いられてきた。ＲＡＭは、比較的小さな実装面積で、多くのＴＬＢエントリを登録できるが、一度に一つのエントリしか参照できない。セットアソシアティブ方式では、仮想アドレスの一部をインデックスタグとし、インデックスタグによって一意に特定されるエントリを読み出すので、ＲＡＭであっても高速に検索を行なう事ができる。一方で、セットアソシアティブ方式では、異なる仮想アドレスであってもインデックス部分が同一であれば同一のエントリに登録されるので、インデックスが同じ仮想アドレスに対するアクセスが頻発した場合にはエントリが上書きされて前のデータが消失することとなる。なお、セットアソシアティブ方式では、インデックスタグのセットとＷＡＹ数とを複数にすることで、インデックスタグのセット数とＷＡＹ数が１の所謂ダイレクトマップに比してエントリの上書き頻度をさげることができる。一方、セットアソシアティブ方式は、フルアソシアティブ方式に比べるとエントリが追い出される頻度は高い。
【０００９】
このように、ＲＡＭを用いたセットアソシアティブ方式のＴＬＢと、ＣＡＭを用いたフルアソシアティブ方式のＴＬＢには、各々一長一短があり、両者を組み合わせて使用する場合も多い。両者を組み合わせて使用する場合、カーネルによるトラップ処理などの重要な処理に必要なＴＬＢエントリはフルアソシアティブ方式のＴＬＢに登録しておき、ＴＬＢから追い出されないようにすることが好適である。フルアソシアティブ方式では、任意のエントリに登録できるので、最大エントリ数を意識していれば、ＴＬＢエントリが追い出されないように制御することが可能である。なお、最大エントリ数は、例えば１６、３２エントリなどである。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平８−１１５２６２号公報
【特許文献２】特開平６−１８７２４４号公報
【特許文献３】特開昭５７−００６９５６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、上述した従来技術のようにＲＡＭとＣＡＭを併用している場合、実装面積が大きくなる。そのため、消費電力と製造コストが増加し、登録できるＴＬＢエントリ数も少数に限られるという問題があった。
【００１２】
特に近年、ＣＰＵのマルチコア化に伴い、各ＣＰＵコアの実装面積を小さくすることが求められているため、ＴＬＢの性能を維持しつつ回路サイズを小さくすることは重要な課題であった。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、ＴＬＢの実装効率を向上した演算処理装置およびアドレス変換方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する演算処理装置およびアドレス変換方法は、セットアソシアティブ方式で参照する第１の領域とフルアソシアティブ方式で参照する第２の領域とを備える記憶部をアドレス変換バッファに設ける。そして本願の開示する演算処理装置およびアドレス変換方法は、アドレス変換を行う場合に、第１の領域から検索し、第１の領域にアドレス変換対象の仮想アドレスに対応するアドレス変換対が存在しない場合に第２の領域からアドレス変換対象の仮想アドレスに対応するアドレス変換対を検索する。
【発明の効果】
【００１５】
本願の開示する演算処理装置およびアドレス変換方法は、ＴＬＢの実装効率を向上した演算処理装置およびアドレス変換方法を得ることができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】図１は、実施例１にかかるアドレス変換バッファの概要構成図である。
【図２】図２は、本実施例１にかかる演算処理装置の概要構成図である。
【図３】図３は、命令用とデータ用で分けて登録したＴＬＢの説明図である。
【図４】図４は、タグ部３１の検索の説明図である。
【図５】図５は、アドレス変換バッファ２０によるアドレス変換処理のフローチャートである。
【図６】図６は、図５に示したｓＴＬＢ検索の処理動作を説明するフローチャートである。
【図７】図７は、図５に示したｆＴＬＢ検索の処理動作を説明するフローチャートである。
【図８】図８は、実施例２にかかるＴＬＢ本体部の説明図である。
【図９】図９は、２つのｆＴＬＢでエントリを二重化する構成の説明図である。
【図１０】図１０は、ＲＡＭに登録したｆＴＬＢの一部を保持するラッチを設けた構成図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する演算処理装置およびアドレス変換方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１８】
図１は、本実施例１にかかるアドレス変換バッファの概要構成図である。また、図２は、本実施例１にかかる演算処理装置の概要構成図である。なお、図２は、演算処理装置であるＣＰＵを構成する構成要素の一部を抽出して例示するものにすぎない。したがって、図２は、本実施例１に係る演算処理装置を構成する全ての構成要素を示すものではなく、また、本実施例１に係る演算処理装置が、図２に例示する全ての構成要素を備えなくともよい。また、図２に示す（１）〜（６）の付番は、説明の便宜上から付与したものであり、処理の順番を示すものではない。
【００１９】
図２に示したように、演算処理装置であるＣＰＵ１は、その内部に命令制御部１１、演算部１２、Ｌ１命令タグ１３、Ｌ１データタグ１４、Ｌ１命令キャッシュ１５、Ｌ１データキャッシュ１６、Ｌ２キャッシュ１７、アドレス変換バッファ（ＴＬＢ）２０を有する。
【００２０】
このような構成のもと、ＣＰＵ１は、コンピュータが備える記憶装置に記憶されている命令に従って演算を行い、演算結果に従って情報を処理する。ここで、「命令」とは、コンピュータを利用する利用者によってキーボードなどから入力されるコマンドや、開発者によってプログラミングされたプログラムの１行としてのコマンドなどのことを意味するものではない。このようなコマンドが、コンピュータにおいて、まず、コンピュータが理解することが可能な機械語に翻訳され、次に、コンピュータが認識することが可能な２進数に再構成され、続いて、ＣＰＵ１が処理可能な最小単位に分割されると、ＣＰＵ１が処理可能な命令となる。
【００２１】
命令制御部１１は、ＣＰＵ１が実行する処理の流れの制御を行なう。具体的には、命令制御部１１は、ＣＰＵ１において処理すべき命令を記憶装置から読み込み、解釈し、解釈結果を演算部１２に送信する（図２の（１）を参照）。演算部１２は、演算を行う処理部である。具体的には、演算部１２は、命令の対象となるデータを記憶装置から読み込み、命令制御部１１によって解釈された命令に従って演算し、演算結果を命令制御部１２に送信する（図２の（１）を参照）。
【００２２】
命令制御部１１や演算部１２が命令やデータを読み込む記憶装置には、メインメモリとキャッシュメモリがある。キャッシュメモリには、１次（Level１）キャッシュ（以下、Ｌ１キャッシュ）や２次（Level２）キャッシュ（以下、Ｌ２キャッシュ）などがある。通常、これらのキャッシュメモリは、ＣＰＵ１内部に階層構造で備えられる。図２に例示するＣＰＵ１においては、Ｌ１キャッシュとして、命令専用のＬ１キャッシュであるＬ１命令キャッシュ１５と、データ専用のＬ１キャッシュであるＬ１データキャッシュ１６とが備えられている。また、Ｌ２キャッシュとして、Ｌ２キャッシュ１７が備えられている。メインメモリ２は、ＣＰＵ１を構成する構成要素ではないが、記憶装置の一つとしてＣＰＵ１の外部に備えられている。
【００２３】
Ｌ１命令キャッシュ１５およびＬ１データキャッシュ１６は、ＣＰＵ１と同じクロックで動作することが可能であり、命令制御部１１や演算部１２からの要求に対して、高速に応答することが可能である（図２の（２）を参照）。しかしながら、Ｌ１命令キャッシュ１５およびＬ１データキャッシュ１６の容量は、総計で３２Ｋ〜１２８ＫＢ程度のものが多く、多くの情報を記憶することができない。このため、Ｌ２キャッシュ１７が、Ｌ１命令キャッシュ１５およびＬ１データキャッシュ１６に記憶することができない情報のうち、利用頻度の高い情報を記憶することになる（図２の（３）を参照）。なお、Ｌ２キャッシュ１７に記憶することができない情報については、メインメモリ２に記憶される（図２の（４）を参照）。
【００２４】
命令制御部１１や演算部１２が処理を開始する時点では、命令やデータは、メインメモリ２上に存在しており、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６、あるいはＬ２キャッシュ１７には、何も記憶されていない。命令制御部１１や演算部１２が命令やデータをメインメモリ２から読み出す際に、命令やデータがＬ１命令キャッシュ１５やＬ１データキャッシュ１６、あるいはＬ２キャッシュ１７にロードされる。命令制御部１１や演算部１２は、これ以降、低速なメインメモリ２ではなく、高速なＬ１命令キャッシュ１５やＬ１データキャッシュ１６、あるいはＬ２キャッシュ１７から命令やデータを読み出す。
【００２５】
言い換えると、命令制御部１２や演算部１２が読み出そうとする命令やデータは、必ずしも、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に記憶されているとは限らない。このため、Ｌ１命令タグ１３やＬ１データタグ１４が、命令制御部１１や演算部１２に利用されることになる。すなわち、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に命令やデータがロードされるのと同時に、Ｌ１命令タグ１３やＬ１データタグ１４には、これらの命令やデータがメインメモリ２のどのアドレスに記憶されているかを示す数値がセットされている。したがって、命令制御部１１や演算部１２は、命令やデータを読み出す際に、まず、Ｌ１命令タグ１３やＬ１データタグ１４に対して問い合わせ、読み出そうとする命令やデータが、Ｌ１命令キャッシュ１５やＬ１データキャッシュ１６に記憶されているか否かを確認する。
【００２６】
図１に例示するＣＰＵ１においては、仮想記憶方式が適用されている。したがって、図２に示すように、命令制御部１１や演算部１２が命令やデータを読み出す際には、まず、ＴＬＢ２０に対して、仮想アドレスを指定し（図２の（５）を参照）、ＴＬＢ２０が物理アドレスに変換した上で、Ｌ１命令タグ１３やＬ１データタグ１４に対して問い合わせを行うことになる（図２の（６）を参照）。
【００２７】
図１に戻り、アドレス変換バッファ２０の構成について説明する。図１に示したように、アドレス変換バッファ２０は、その内部に仮想アドレスレジスタ２１、コンテキストレジスタ２２、ＴＬＢ本体部２３、ＴＬＢ検索部２４を有する。
【００２８】
仮想アドレスレジスタ２１は、命令制御部１１が出力した仮想アドレスを保持するレジスタである。コンテキストレジスタ２２は、演算部１２が出力するコンテキストを保持するレジスタである。コンテキストは、命令の発行元であるアプリケーションのプロセスを特定する情報である。
【００２９】
ＴＬＢ本体部２３は、タグ部３１とデータ部３２を有する。タグ部３１は、仮想アドレスとコンテキストをエントリとして保持する。仮想アドレスとコンテキストは、検索用のタグとして使用される。また、データ部３２は、仮想アドレスと物理アドレスとを対応付けたアドレス変換対をエントリとして保持する。
【００３０】
タグ部３１は、ＲＡＭを用いて構成する。さらに、ＲＡＭ上には、エントリをセットアソシアティブ方式で参照する領域とフルアソシアティブ方式で参照する第２の領域とを設ける。したがって、タグ部３１を構成するＲＡＭには、セットアソシアティブ方式で参照されるタグと、フルアソシアティブ方式で参照されるタグの双方が登録される。図１では、セットアソシアティブ方式で参照されるタグをｓＴＬＢ  ＴＡＧ、フルアソシアティブ方式で参照されるタグをｆＴＬＢ  ＴＡＧとして示している。
【００３１】
データ部３２は、ＲＡＭを用いて構成し、ｓＴＬＢ  ＤＡＴＡおよびｆＴＬＢ  ＤＡＴＡの各々に対応するアドレス変換対が登録される。
【００３２】
より詳細には、ｓＴＬＢ  ＴＡＧおよびｆＴＬＢ  ＴＡＧは、命令用とデータ用とで分けて登録する。図３は、命令用とデータ用で分けて登録したＴＬＢの説明図である。図３において、ＩＦ−ｆＴＬＢ  ＴＡＧは、フルアソシアティブ方式で参照される命令用のタグである。ＯＰ−ｆＴＬＢ  ＴＡＧは、フルアソシアティブ方式で参照されるデータ用のタグである。ＩＦ−ｓＴＬＢ  ＴＡＧは、セットアソシアティブ方式で参照される命令用のタグである。ＯＰ−ｓＴＬＢ  ＴＡＧは、セットアソシアティブ方式で参照されるデータ用のタグである。
【００３３】
同様に、ＩＦ−ｆＴＬＢ  ＤＡＴＡは、フルアソシアティブ方式で参照される命令用のタグに対応するアドレス変換対である。ＯＰ−ｆＴＬＢ  ＤＡＴＡは、フルアソシアティブ方式で参照されるデータ用のタグに対応するアドレス変換対である。ＩＦ−ｓＴＬＢ  ＤＡＴＡは、セットアソシアティブ方式で参照される命令用のタグに対応するアドレス変換対である。ＯＰ−ｓＴＬＢ  ＤＡＴＡは、セットアソシアティブ方式で参照されるデータ用のタグに対応するアドレス変換対である。
【００３４】
タグ部３１およびデータ部３２が５１２エントリのＲＡＭである場合、ＯＰ−ｓＴＬＢ  ＴＡＧとＯＰ−ｓＴＬＢ  ＤＡＴＡに例えば２５６エントリ分を割り当てる。また、ＩＦ−ｓＴＬＢ  ＴＡＧとＩＦ−ｓＴＬＢ  ＤＡＴＡに例えば１２８エントリ分を割り当てる。
【００３５】
また、ＯＰ−ｆＴＬＢ  ＴＡＧとＯＰ−ｆＴＬＢ  ＤＡＴＡに例えば６４エントリ分を割り当てる。そして、ＩＦ−ｆＴＬＢ  ＴＡＧとＩＦ−ｆＴＬＢ  ＤＡＴＡに例えば６４エントリ分を割り当てる。なお、ＯＰ−ｆＴＬＢ  ＴＡＧ，ＯＰ−ｆＴＬＢ  ＤＡＴＡ，ＩＦ−ｆＴＬＢ  ＴＡＧ，ＩＦ−ｆＴＬＢ  ＤＡＴＡは、６４エントリ分を全て使用する必要は無く、その一部のみ、例えば１６エントリ分を使用することとしてもよい。
【００３６】
図１に戻り、ＴＬＢ検索部２４について説明する。ＴＬＢ検索部２４は、仮想アドレスレジスタ２１が保持する仮想アドレス（ＶＡ）とコンテキストレジスタ２２の値との組み合わせが、タグ部３１に登録された仮想アドレスおよびコンテキストの値と一致するか否かを判定する。
【００３７】
ＴＬＢ検索部２４内部の比較回路４１は、仮想アドレスレジスタ２１が保持する値と、タグ部３１に登録された仮想アドレスと比較し、比較結果をアンド回路４３に出力する。同様に、ＴＬＢ検索部２４内部の比較回路４２は、コンテキストレジスタ２２が保持する値と、タグ部３１に登録されたコンテキストと比較し、比較結果をアンド回路４３に出力する。アンド回路４３は、仮想アドレスとコンテキストの双方が一致した場合に、ＴＬＢヒットを示す値を出力する。なお、仮想アドレスの一致に加えて、コンテキストの一致を求めるのは、異なるプロセスが使用する仮想アドレスが偶然に一致する可能性があるためである。
【００３８】
ＴＬＢ検索部２４がＴＬＢヒットを出力した場合、アドレス変換バッファ２０は、仮想アドレスに対応する物理アドレス（ＶＡ）をデータ部３２から取り出して出力する。一方、ＴＬＢ検索部２４がＴＬＢヒットを出力しなかった、すなわちＴＬＢミスに対応する値を出力した場合には、命令制御部１１は、メインメモリに格納されたページテーブルを参照し、仮想アドレスに対応するアドレス変換対を取得し、演算部１２に渡す。演算部１２は、渡されたアドレス変換対と、実行中のプロセスを示すコンテキストをＴＬＢ本体部２３に登録する。その後、命令制御部１１が命令を再度実行し、ＴＬＢに登録したアドレス変換対を用いて仮想アドレスを物理アドレスに変換する。
【００３９】
タグ部３１の検索について図４を参照してさらに説明する。セットアソシアティブ方式でタグを検索する場合、仮想アドレスの一部をインデックスとして検索を行なう。例えば、最大２５６エントリのＯＰ−ｓＴＬＢ  ＴＡＧを参照する場合、仮想アドレスの８ビットをインデックスとすれば、エントリを一意に特定できる。そのため、インデックスが一致するエントリを参照する１サイクルの処理で検索対象の仮想アドレスがＯＰ−ｓＴＬＢ  ＴＡＧに存在するか否かを確認できる。
【００４０】
同様に、最大１２８エントリのＩＦ−ｓＴＬＢ  ＴＡＧを参照する場合、仮想アドレスの７ビットをインデックスとすれば、エントリを一意に特定できる。そのため、インデックスが一致するエントリを参照する１サイクルの処理で検索対象の仮想アドレスがＩＦ−ｓＴＬＢ  ＴＡＧに存在するか否かを確認できる。
【００４１】
なお、インデックスとしては、例えば仮想アドレスの末尾を用いればよい。また、仮想アドレスがページ番号とオフセットで構成されている場合、ページ番号部分の末尾を用いてもよい。そして、ＯＰ−ｓＴＬＢ  ＴＡＧやＩＦ−ｓＴＬＢ  ＴＡＧにエントリを登録する場合、仮想アドレスのインデックス部分に対応する位置に登録を行なう。
【００４２】
一方、フルアソシアティブ方式では、仮想アドレスに依存することなくエントリに登録できるため、参照時にはどの位置に登録されているかが不明である。そこで、ＯＰ−ｆＴＬＢ  ＴＡＧやＩＦ−ｆＴＬＢ  ＴＡＧを参照する場合、例えば先頭のエントリから順に比較する。そのため、検索に際してエントリの最大数分だけのサイクルがかかることが多い。
【００４３】
このように、フルアソシアティブ方式でＲＡＭにエントリを登録すると、セットアソシアティブ方式に比して時間がかかるため、アドレス変換バッファ２０は、まずセットアソシアティブ方式でｓＴＬＢ（ＯＰ−ｓＴＬＢ  ＴＡＧもしくはＩＦ−ｓＴＬＢ  ＴＡＧ）を検索し、ｓＴＬＢでの検索がヒットしなかった場合にフルアソシアティブ方式でｆＴＬＢ（ＯＰ−ｆＴＬＢ  ＴＡＧもしくはＩＦ−ｆＴＬＢ  ＴＡＧ）を検索する。
【００４４】
図５は、アドレス変換バッファ２０によるアドレス変換処理のフローチャートである。アドレス変換バッファ２０は、命令制御部１１から受け取った仮想アドレスと演算部１２が指定したコンテキストとの組み合わせをタグ部３１のｓＴＬＢから検索する（Ｓ１０１）。
【００４５】
検索の結果、仮想アドレスとコンテキストの組み合わせがタグ部３１のｓＴＬＢに登録されており、ＴＬＢ検索部２４が検索ヒットを出力した場合（Ｓ１０２，Ｙｅｓ）、データ部３２から対応するアドレス変換対を得て物理アドレスに変換し、変換結果を出力する（Ｓ１０３）。
【００４６】
一方、仮想アドレスとコンテキストの組み合わせがタグ部３１のｓＴＬＢに登録されていない場合（Ｓ１０２，Ｎｏ）、つぎにアドレス変換バッファ２０は、命令制御部１１から受け取った仮想アドレスと演算部１２が指定したコンテキストとの組み合わせをタグ部３１のｆＴＬＢから検索すべきかどうかを判定する（Ｓ１０４）。ｆＴＬＢの検索は、ｓＴＬＢの検索に比して時間がかかる。ｓＴＬＢミスである場合に常にｆＴＬＢの検索を行なう事とすると、他の命令の待機時間が長くなる可能性がある。そこで、ｓＴＬＢミスで、かつ所定の条件を満たす場合のみｆＴＬＢ検索を行なう事とすれば、待機時間の増加を抑えることができる。ｆＴＬＢ検索の条件としては、たとえば、命令制御部１１が制御中の命令のうち、もっとも古い命令についてのみｆＴＬＢ検索を行なうこととすればよい。
【００４７】
条件が満たされず、ｆＴＬＢの検索が不可能である場合（Ｓ１０５，Ｎｏ）には、後述するトラップ処理に移行する（Ｓ１０８）。一方、ｆＴＬＢの検索が可能である場合（Ｓ１０５，Ｙｅｓ）。アドレス変換バッファ２０は、ｆＴＬＢ検索を行なう（Ｓ１０６）。
【００４８】
検索の結果、仮想アドレスとコンテキストの組み合わせがタグ部３１のｆＴＬＢに登録されており、ＴＬＢ検索部２４が検索ヒットを出力した場合（Ｓ１０７，Ｙｅｓ）、アドレス変換バッファ２０は、データ部３２から対応するアドレス変換対を得て物理アドレスに変換し、変換結果を出力して（Ｓ１０３）、処理を終了する。
【００４９】
一方、仮想アドレスとコンテキストの組み合わせがタグ部３１のｆＴＬＢに登録されていない場合（Ｓ１０７，Ｎｏ）、アドレス変換バッファ２０は、トラップ処理に移行する（Ｓ１０８）。
【００５０】
トラップ処理では、メインメモリ内のページテーブルから、検索ミスした仮想アドレスに対応するアドレス変換対が読み出され、アドレス変換バッファＴＬＢ２０に登録される。登録に際し、ｓＴＬＢとｆＴＬＢのいずれに登録するかは、アドレス変換対ごとに予め指定し、ページテーブルに記録しておけばよい。
【００５１】
図６は、図５に示したｓＴＬＢ検索の処理動作を説明するフローチャートである。ｓＴＬＢ検索では、まず、命令制御部１１に入力された仮想アドレスとインデックスが同一の仮想アドレスとコンテキストをｓＴＬＢ  ＴＡＧのエントリから選択する（Ｓ２０１）。
【００５２】
つぎに、入力された仮想アドレスおよびコンテキストと、選択した仮想アドレスおよびコンテキストを比較する（Ｓ２０２）。比較の結果、仮想アドレスとコンテキストの双方が一致したならば（Ｓ２０３，Ｙｅｓ）、ｓＴＬＢヒットを出力して（Ｓ２０４）、処理を終了する。
【００５３】
図７は、図５に示したｆＴＬＢ検索の処理動作を説明するフローチャートである。ｆＴＬＢ検索では、アドレス変換バッファ２０は、ｆＴＬＢの先頭のエントリを選択し（Ｓ３０１）、入力された仮想アドレスおよびコンテキストと、選択したエントリの仮想アドレスおよびコンテキストを比較する（Ｓ３０２）。比較の結果、仮想アドレスとコンテキストの双方が一致したならば（Ｓ３０３，Ｙｅｓ）、アドレス変換バッファ２０は、ｆＴＬＢヒットを出力して（Ｓ３０４）、処理を終了する。
【００５４】
一方、仮想アドレスとコンテキストのいずれかが一致しなければ（Ｓ３０３，Ｎｏ）、アドレス変換バッファ２０は、選択中のエントリがｆＴＬＢ（ＩＦ−ｆＴＬＢもしくはＯＰ−ｆＴＬＢ）の最終エントリであるか否かを判定する（Ｓ３０５）。選択中のエントリが最終エントリでなければ（Ｓ３０５，Ｎｏ）、次のエントリを選択し（Ｓ３０６）、Ｓ３０２に戻る。そして、選択中のエントリが最終エントリであれば（Ｓ３０５，Ｙｅｓ）、そのまま処理を終了する。
【００５５】
なお、図７に示した動作は、ｆＴＬＢヒットの時点で検索を終了する動作を一例として示したが、ｆＴＬＢヒットであっても検索を終了せず、常に最終エントリまで検索を続けるようにしてもよい。常に最終エントリまで検索を行なう動作は、図７のフローチャートのＳ３０４の後、Ｓ３０５に移行するようにすることで得られる。
【００５６】
以上説明してきたように、本実施例にかかるアドレス変換バッファ２０では、従来はＣＡＭに登録していたフルアソシアティブＴＬＢエントリを、ＲＡＭに登録する。すなわち、ＲＡＭの一部の領域をフルアソシアティブＴＬＢエントリ専用の領域に割り当てる。そして、従来のＲＡＭに登録したセットアソシアティブＴＬＢを検索するのと合わせて、ＲＡＭに登録したフルアソシアティブＴＬＢを検索することで、フルアソシアティブ方式のアドレス検索機能を残しつつ、ＣＡＭを排して実装面積を削減している。
【００５７】
アドレス検索に用いられる回路、例えば比較回路などは、セットアソシアティブＴＬＢで使用していたものをフルアソシアティブＴＬＢでも共通に使用することかできる。
【００５８】
そのため、従来ＣＡＭの為に必要だった実装面積および消費電力を大幅に削減することができる。また、大規模カスタムであるＣＡＭの開発コストを削減することができる。
【００５９】
ＲＡＭに登録したフルアソシアティブＴＬＢを検索するには、フルアソシアティブＴＬＢのエントリ数分の検索サイクルを要することになる。そこで、アドレス変換バッファ２０では、セットアソシアティブＴＬＢを検索し、該当するエントリがない場合にのみフルアソシアティブＴＬＢを検索する。大容量のセットアソシアティブＴＬＢと小容量のフルアソシアティブＴＬＢでは、セットアソシアティブＴＬＢを利用する確率が高く、フルアソシアティブＴＬＢに登録されている確率は低い。したがってセットアソシアティブＴＬＢの検索を優先することで、フルアソシアティブＴＬＢ検索によるサイクル増大が発生する確率を低くすることができる。
【００６０】
さらにフルアソシアティブＴＬＢには主に、トラップ処理などで必要となるエントリが登録されているが、トラップ処理自体に要するサイクル数に比較して、フルアソシアティブＴＬＢを検索することによるサイクル数の増加は軽微であるので、トラップ処理に伴う性能低下の影響も僅かである。
【００６１】
また、フルアソシアティブＴＬＢを検索するリクエストに制限を掛け、極力必要な場合にのみフルアソシアティブＴＬＢを検索することにより、フルアソシアティブＴＬＢ検索によるサイクル数増大の発生率を抑える。これにより、あるリクエストがフルアソシアティブＴＬＢを検索する間、ＲＡＭへのアクセスがビジーとなって他のリクエストがセットアソシアティブＴＬＢを検索できなくなるという性能劣化を避けることができる。
【実施例２】
【００６２】
実施例１では、ＷＡＹ数が１のセットアソシアティブ方式、所謂ダイレクトマップ方式のＴＬＢ構造を利用した場合について説明を行ったが、本実施例２では、ＷＡＹ数が２のセットアソシアティブ方式のＴＬＢを利用する場合について説明を行なう。
【００６３】
図８は、本実施例２にかかるＴＬＢ本体部の説明図である。図８に示したＴＬＢ本体部２３ａは、ＷＡＹ０のタグ部３３、ＷＡＹ１のタグ部３４、ＷＡＹ０，１で共用するデータ部３５を有する。タグ部３３，３４、データ部３５は、それぞれＲＡＭを用いて構成する。
【００６４】
ＷＡＹ０のタグ部３３、ＷＡＹ１のタグ部３４にそれぞれエントリを登録できるので、ＴＬＢ本体部２３ａでは各インデックスについて２つずつのエントリを保持することができる。
【００６５】
タグ部３３，３４は、エントリをセットアソシアティブ方式で参照する領域とフルアソシアティブ方式で参照する第２の領域とを設ける。言い換えると、タグ部３１を構成するＲＡＭには、セットアソシアティブ方式で参照されるタグと、フルアソシアティブ方式で参照されるタグの双方が登録される。
【００６６】
タグ部３３は、セットアソシアティブ方式で参照する領域に、命令用のタグＩＦ−ｓＴＬＢ  ＴＡＧ  ＷＡＹ０、データ用のタグＯＰ−ｓＴＬＢ  ＴＡＧ  ＷＡＹ０を有する。また、タグ部３３は、フルアソシアティブ方式で参照する領域に、命令用のタグＩＦ−ｆＴＬＢ  ＴＡＧ０、データ用のタグＯＰ−ｆＴＬＢ  ＴＡＧ０を有する。
【００６７】
タグ部３４は、セットアソシアティブ方式で参照する領域に、命令用のタグＩＦ−ｓＴＬＢ  ＴＡＧ  ＷＡＹ１、データ用のタグＯＰ−ｓＴＬＢ  ＴＡＧ  ＷＡＹ１を有する。また、タグ部３４は、フルアソシアティブ方式で参照する領域に、命令用のタグＩＦ−ｆＴＬＢ  ＴＡＧ１、データ用のタグＯＰ−ｆＴＬＢ  ＴＡＧ１を有する。
【００６８】
データ部３４は、タグ部３３，３４の各エントリに対応するアドレス変換対が登録されている。
【００６９】
タグ３３，３４は、フルアソシアティブでの参照については、複数のＷＡＹを同時に使うことで参照速度の向上に寄与する。２ＷＡＹのＲＡＭの構造では同時に２つのエントリを検索できるので、フルアソシアティブＴＬＢを同時に２エントリずつ検索し、フルアソシアティブＴＬＢ検索の検索サイクルを半分にすることができる。本実施例２では２ＷＡＹを例示しているが、ＷＡＹ数が大きくなるほど同時に検索を行なうことで検索速度を向上することができる。
【００７０】
フルアソシアティブにおける複数のタグ部の利用は、検索速度の向上のみならず、信頼性の向上にも有効である。
【００７１】
従来、ＣＡＭ上のｆＴＬＢは、システムの基本的なアドレス変換を行うＴＬＢエントリを登録され、エントリの書き換え頻度が低かった。システムの基本的なアドレス変換を登録されることから、エラーなどによるデータ化けが発生した場合、直ちにシステムダウンが発生しシステムに重大な障害を発生させてしまう可能性があった。一般にラッチベースで作られることの多いＣＡＭは、ラッチがデータ反転等のエラーが発生しにくいことから、エラーが比較的起こりにくいといえる。しかし、ＲＡＭにエラーが発生する頻度はラッチに比べると大きい。一方で、ＣＡＭは回路規模が大きい為、ラッチのエラー頻度×実装面積として計算できるＣＡＭのソフトエラー率は比較的大きい。
【００７２】
図９は、２つのｆＴＬＢでエントリを二重化する構成の説明図である。図９に示したように、ｆＴＬＢでエントリを二重化することで、ｆＴＬＢのエントリがＲＡＭ内でビット反転などのエラーを生じた場合でも、システムに対する障害を引き起こすことなくシステムが正常に、かつ遅延を生じることなく動作する。また、ＣＡＭを排して実装面積を縮小していることからソフトエラー率を下げることができる。
【００７３】
また、ビット反転等でｆＴＬＢのエントリにエラーか発生した場合は、そのデータを直ちに書き直し、発生したエラーを修復することで、ｆＴＬＢの信頼性を向上することができる。
【００７４】
図９に示した構成では、タグ部３３，３４のｆＴＬＢに同じエントリを２つ登録することにより二重化する。ｓＴＬＢの既存回路を利用するので、回路の追加を抑えつつエントリを二重化して信頼性を高めることができる。エントリの読み出し時にはエラーの無い方のエントリを使用してＴＬＢ検索動作を正常時と同様に行い、アドレス変換結果を要求元に返すと共に、エラーしたエントリに対しては、正しい方のエントリをＲＡＭに再登録することにより、エラーを自動訂正する。
【００７５】
より詳細には、タグ部３３のｆＴＬＢから読み出された仮想アドレスおよびコンテキストは、ＴＬＢ検索部２４ａとチェック部２５ａに入力される。同様に、タグ部３４のｆＴＬＢから読み出された仮想アドレスおよびコンテキストは、ＴＬＢ検索部２４ｂとチェック部２５ｂに入力される。
【００７６】
ＴＬＢ検索部２４ａは、仮想アドレスレジスタ２１が保持する仮想アドレスとコンテキストレジスタ２２が保持するコンテキストの組み合わせと、タグ部３３からの入力を比較して比較結果を出力する。ＴＬＢ検索部２４ｂは、仮想アドレスレジスタ２１が保持する仮想アドレスとコンテキストレジスタ２２が保持するコンテキストの組み合わせと、タグ部３４からの入力を比較して比較結果を出力する。
【００７７】
チェック部２５ａは、タグ部３３からの入力と、データ部３５の対応するデータとを比較してパリティチェックを行い、チェック結果を出力する。同様に、チェック部２５ｂは、タグ部３４からの入力と、データ部３５の対応するデータとを比較してパリティチェックを行い、チェック結果を出力する。
【００７８】
チェック部２５ａの結果、エラーがなければ、ＴＬＢ検索部２４ａの出力が使用される。また、チェック部２５ａの結果ＬＢ検索部２４ａの出力にエラーがあり、チェック部２５ｂの結果、エラーがなければ、ＴＬＢ検索部２４ｂの出力が使用される。
【００７９】
同様に、チェック部２５ａ，２５ｂの結果を用い、エラーの無いタグ部のエントリがグッドタグ部２６に登録され、対応するエラーの無いデータ部のエントリがグッドデータ部２７に登録される。このグッドタグ部２６とグッドデータ部２７の登録内容をエラーしたエントリに書き戻すことで、エラーを訂正することかできる。
【００８０】
他の変形例として、ＲＡＭに登録したｆＴＬＢの一部を保持するラッチをさらに設ける構成とすることもできる。図１０は、ＲＡＭに登録したｆＴＬＢの一部を保持するラッチを設けた構成図である。
【００８１】
図１０に示した構成では、ｆＴＬＢのキャッシュとなるエントリを１エントリだけ、ＲＡＭとは別に保持するラッチ２９、ラッチ２９を検索するラッチ検索部２８を設けている。ＴＬＢ検索部２４とラッチ検索部２９は、同時に検索を実行可能である。
【００８２】
ラッチ２９への登録は、ｆＴＬＢにヒットしたエントリに関して、アドレス変換結果を要求元に返すとともに、登録すればよい。なお、ここでは１エントリ分をラッチする場合について例示したが、２以上の任意のエントリ分を設けても良い。
【００８３】
以上説明してきたように、本実施例２に開示した構成によっても、実施例１と同様に、フルアソシアティブ方式のアドレス検索機能を残しつつ、ＣＡＭを排して実装面積を削減し、消費電力を抑えることができる。
【００８４】
また、２ＷＡＹを利用することで、ｆＴＬＢの検索の高速化や、ｆＴＬＢの信頼性向上を実現できる。
【符号の説明】
【００８５】
１  ＣＰＵ
２  メインメモリ
１１  命令制御部
１２  演算部
１３  Ｌ１命令タグ
１４  Ｌ１データタグ
１５  Ｌ１命令キャッシュ
１６  Ｌ１データキャッシュ
１７  Ｌ２キャッシュ
２０  アドレス変換バッファ
２１  仮想アドレスレジスタ
２２  コンテキストレジスタ
２３，２３ａ  ＴＬＢ本体部
２４，２４ａ，２４ｂ  ＴＬＢ検索部
２５ａ，２５ｂ  チェック部
２６  グッドタグ部
２７  グッドデータ部
２８  ラッチ検索部
２９  ラッチ
３１，３３，３４  タグ部
３２，３５  データ部
４１，４２  比較回路
４３  アンド回路
【図１】
0005526626.tif 000002
【図２】
0005526626.tif 000003
【図３】
0005526626.tif 000004
【図４】
0005526626.tif 000005
【図５】
0005526626.tif 000006
【図６】
0005526626.tif 000007
【図７】
0005526626.tif 000008
【図８】
0005526626.tif 000009
【図９】
0005526626.tif 000010
【図１０】
0005526626.tif 000011