(57)【要約】【課題】TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図り、かつエイリアスの問題を解消する仮想アドレスキャッシュメモリを提供する。【解決手段】仮想アドレスキャッシュメモリ１２は、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力するTLB仮想ページメモリ２１と、仮想ページタグとページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリ２３と、キャッシュインデックスに対応してデータメモリ２３に記憶されたキャッシュデータのキャッシュステートを保持するキャッシュステートメモリ２４と、を有する。【選択図】図２
2010097558.tif 000002
【特許請求の範囲】
【請求項１】
プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの前記仮想ページタグが一致するとヒット信号を出力するTLB仮想ページメモリと、
前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、
前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、
を有することを特徴とする仮想アドレスキャッシュメモリ。
【請求項２】
前記データメモリは、前記プロセスの実行を管理するオペレーティングシステムの仮想ページ単位で、前記キャッシュデータのリプレースを行うことを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項３】
前記データメモリのキャッシュステート管理は、ページサイズより小さいキャッシュブロック単位で行われることを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項４】
前記データメモリの前記キャッシュデータのコヒーレンシを保持するためのスヌープ機構を有することを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項５】
TLB仮想ページメモリ中のエントリデータにおける、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグと、プロセッサからの前記仮想ページタグが一致するとヒット信号を出力し、
前記ヒット信号が出力されると、前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリとをアクセスする、ことを特徴とする仮想アドレスキャッシュ方法。
【請求項６】
前記仮想アドレスに加えて、プロセス識別子などの仮想アドレス以外の識別番号も比較の対象とすることを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項７】
前記データメモリに保持する前記キャッシュデータに対応する物理アドレスを保持して、該当する物理アドレスのデータを前記データメモリ中に保持しているかどうかを調べる機構を有する請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項８】
同一の前記物理アドレスを複数のエントリに登録可能であることを、特徴とする請求項７に記載の仮想アドレスキャッシュメモリ。
【請求項９】
同一の前記物理アドレスを複数のエントリに登録可能でないことを、特徴とする請求項７に記載の仮想アドレスキャッシュメモリ。
【請求項１０】
前記仮想アドレス及び、その他の識別子などの全部または一部を選択的に比較の対象とし、指定された部分の一致のみでヒットとみなすことを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項１１】
前記キャッシュステートメモリの状態に応じて該当のブロックのみのデータの入れ替えを行う機構を有することを特徴とする請求項３に記載の仮想アドレスキャッシュメモリ。
【請求項１２】
前記物理アドレスを保持する手段として、フルアソシアティブメモリを使うことを特徴とする請求項７に記載の仮想アドレスキャッシュメモリ。
【請求項１３】
前記フルアソシアティブメモリは、インデックスによる読み出しも可能なフルアソシアティブメモリを使うことを特徴とする請求項１２に記載の仮想アドレスキャッシュメモリ。
【請求項１４】
前記TLB仮想ページメモリは、前記データメモリ全体を保持することを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項１５】
前記TLB仮想ページメモリは、その保持するアドレスの範囲を前記データメモリ全体よりも大きくすることを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【請求項１６】
キャッシュミス時に、前記仮想アドレスと対応する物理ページを保持するTLB機構を別途持つことを特徴とする請求項１に記載の仮想アドレスキャッシュメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法に関し、特に、仮想記憶をサポートするプロセッサのための仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法に関する。
【背景技術】
【０００２】
従来より、仮想記憶を採用するプロセッサでは、プロセスに固有のアドレス空間である仮想アドレス空間からプロセッサが搭載されている計算機システム全体のアドレス空間である実アドレス空間へのアドレス変換を高速に実行するため、オペレーティングシステム（以下、OSという）で管理されているページテーブルのコピーを置くための専用のキャッシュメモリであるTLB( Translation Lookaside Buffer )が搭載されている。
【０００３】
一方で、プロセッサは、メモリアクセスのレイテンシを隠蔽するためにメモリのデータをキャッシュメモリ（以下、キャッシュともいう）にコピーして利用している。キャッシュにコピーされたデータを保持しているメモリのデータのアドレスを特定するため、メモリのデータを保持するデータメモリのほかに、そのデータのアドレスやそのデータの状態（有効か、メモリ内容を更新したか、など）を保持するタグ（Tag）メモリを、プロセッサは、有している。タグメモリは一般にはメモリアドレスの下位ビットを、キャッシュのインデックスとし、メモリアドレスの上位ビット(Tag)やデータの状態をデータとして保持するように構成されている。
【０００４】
上記のアドレス変換は、プロセッサ設計においてタイミング上のクリティカルパスとなることが多い。プロセッサが階層メモリを採用する場合にはプロセッサに近い位置にあるレベル１キャッシュ（以下、L1キャッシュともいう）は、仮想アドレスを用いてアクセスされ、レベル２（L2キャッシュ）以降のキャッシュは、後述するエイリアス対策などのため、物理アドレスを用いてアクセスされる構成を採用する場合が多い。
【０００５】
アドレス変換は、命令のフェッチ、ロード命令、ストア命令によるメモリアクセスの全てにおいて行われるので、TLBミスが性能に与える影響は通常のキャッシュミスより大きくなる。そのため、TLBは、キャッシュとは別の専用メモリとして設けられる。
【０００６】
しかし、上述した従来のTLBとキャッシュメモリの構成には、次の問題がある。  
TLBとキャッシュのタグメモリの容量に関する問題である。  
TLBは、データとして仮想ページ番号と物理ページ番号、およびページ属性、ページ状態などのデータを保持する。32ビット以上の物理アドレス空間を持つプロセッサでは、TLBに保持するデータの中で仮想ページ番号と物理ページ番号の占める割合は大きい。TLBの大きさは、主に物理アドレス空間の大きさ、最小ページサイズ、およびTLBのエントリ数によって決まる。
【０００７】
キャッシュのタグメモリは、データとして、Tag、およびキャッシュ状態などのデータを保持する。32ビット以上の物理アドレス空間を持つプロセッサでは、キャッシュのタグメモリに保持するデータの中でTagの占める割合は大きい。キャッシュのタグメモリの大きさは、主に物理アドレス空間の大きさ、キャッシュラインサイズ、およびキャッシュ容量で決まる。
【０００８】
「Computer Architecture - A Quantitative Approach - Third Edition」 の Figure 5.57 および Figure 5.58 (505ページ、506ページ)によると、最近のプロセッサでは、
・L1 サイズ 8kB 〜 64kB, direct map もしくは 2way set associative
・TLB エントリ数 4〜512 エントリ full associative
・最小ページサイズ 1〜64k Byte
となっている（非特許文献１，２，３参照）。
【非特許文献１】Computer Architecture - A Quantitative Approach - Third Edition 、 Figure5.57 および Figure5.58 (505ページ、506ページ)
【非特許文献２】Computer Organization and Design  -- The Hardware/Software interface --second edition (1998 Morgan Kaufmann : ISBN 1-55860-428-6)by David.A.Patterson and John L. Hennessy  (p592) Integrating virtual memory, TLB and Caches  (p593) Figure 7.25  (p594) Figure 7.26
【非特許文献３】Computer Architecture -- A Quantitative Approach--third edition  (2003 Morgan Kaufmann : ISBN 1-55860-596-7)by John L. Hennessy and David.A.Patterson(p444)   "Second Hit Time Reduction Technique:Avoiding Address Translation during Indexing of Cache"
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は、上述した問題に鑑みてなされたもので、TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図ることができる仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの前記仮想ページタグが一致するとヒット信号を出力するTLB仮想ページメモリと、前記仮想ページタグとページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、を有する仮想アドレスキャッシュメモリを提供することができる。
【発明の効果】
【００１１】
本発明によれば、TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図ることができる仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法を実現することができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。
【００１３】
（第１の実施の形態）
(構成)
まず図１に基づき、本発明の第１の実施の形態に係わるプロセッサシステムの構成を説明する。図１は、本発明の第１の実施の形態に係わるプロセッサシステムの構成を示す構成図である。
【００１４】
プロセッサシステム１は、中央処理装置（以下、CPUという）１１と、仮想アドレスキャッシュメモリとしてのレベル１（L1）のキャッシュメモリ１２と、主メモリとしてのDRAM１３とを有して構成される。プロセッサシステム１は、仮想記憶機構とキャッシュメモリをもつプロセッサである。キャッシュメモリ１２とDRAM１３は、互いにバスで接続されている。CPU１１は、いわゆるCPUコアである。  
なお、本実施の形態では、１つのCPU１１がDRAM１３をアクセスする例であるが、CPU１１とキャッシュメモリ１２の対が複数あって、その複数の対が、システムバス等を介して、１つのDRAM１３と接続されるようなマルチコアの構成でもよい。  
さらに、L1キャッシュであるキャッシュメモリ１２とDRAM１３の間に、L2キャッシュ等があってもよい。
【００１５】
CPU１１は、主メモリ１３に記憶された命令あるいはデータを、キャッシュメモリ制御回路を含むキャッシュメモリ１２を介して読み出して実行する。CPU１１は、プログラムの実行に必要な命令あるいはデータ（以下、単にデータともいう）がキャッシュメモリにあれば、キャッシュメモリ１２から読み出してそのプログラムを実行する。
【００１６】
CPU１１は、そのデータを指定するために仮想アドレス（EA）をキャッシュメモリ１２に出力し、キャッシュメモリ１２は、キャッシュメモリ１２中に入力された仮想アドレス（EA）に対応するデータが存在すれば、そのデータをCPU１１へ出力する。キャッシュメモリ１２中にストアされたデータが無ければ、リフィル処理によりDRAM１３からそのデータを読み出してキャッシュメモリ１２に書き込み、CPUコア１１に出力する。
【００１７】
本実施の形態のキャッシュメモリ１２は、データ入れ替えすなわちキャッシュリプレースを、複数のプロセスの実行を管理するOSで管理する仮想ページ単位で行い、キャッシュステート管理を、キャッシュライン単位すなわちキャッシュブロック単位で行う。本実施の形態のプロセッサでは、L1キャッシュであるキャッシュメモリ１２へのアクセスは、仮想アドレスにより行われ、キャッシュのコヒーレンシは、スヌープ方式により行われる。
【００１８】
図２は、仮想アドレスキャッシュメモリとしてのキャッシュメモリ１２の構成図である。
【００１９】
キャッシュメモリ１２は、TLB仮想ページメモリ（TLB EPメモリ）２１と、TLB物理ページメモリ（TLB RPメモリ）２２と、データメモリ２３と、キャッシュステートメモリ２４と、TLB物理ページCAMメモリ（TLB RP CAMｓメモリ）２５とを含んで構成される。
【００２０】
CPU１１は、キャッシュメモリ１２へ、仮想アドレス（EA）３１を出力し、キャッシュメモリ１２は、DRAM１３へ物理アドレス３２を出力する。
【００２１】
本実施の形態のキャッシュメモリ１２は、TLB およびL1キャッシュとしての機能を、４ウェイセットアソシアティブ構成のキャッシュメモリにより実現している。キャッシュメモリ１２のL1キャッシュとしての容量は、256KB（キロバイト。以下、同じ。）である。各ウェイの大きさは、ページサイズを超えるが、仮想アドレスにページカラーリング（page coloring）は、施されていない。
【００２２】
本実施の形態のキャッシュメモリ１２は、仮想アドレス（EA）を４KBのページ単位で分け、仮想アドレスEAの上位ビット(32:12) を仮想ページタグとし、さらにウェイあたりのキャッシュ容量である 64KBを4KBで分割した中位ビット(15:12) を仮想ページインデックス（EP_Index）とする４ウェイセットアソシアティブのキャッシュである。すなわち、キャッシュメモリ１２は、TLBとL1キャッシュを構成する。本実施の形態では、仮想アドレス３１によりL1キャッシュとしてのキャッシュメモリ１２がアクセスされ、各ウェイのサイズ(64KB)がページサイズ(4KB)より大きいので、図２に示すように、仮想ページタグ（EP_Tag）と仮想ページインデックス（EP_Index。以下、TLBインデックスともいう。）は、それぞれ仮想アドレス（EA）のビット(31:12)と(15:12)が割り当てられて、オーバーラップする。
【００２３】
CPU１１からの仮想アドレス３１がキャッシュメモリ１２に入力される。仮想アドレス３１は、32ビットで構成され、上位ビット(31:12)が仮想ページタグ（EP_Tag）であり、ビット(11:7)はページオフセットであり、ビット(6:2)は、ブロックオフセットであり、最下位ビット(1:0)はワードオフセットである。上位ビット(31:12)の仮想ページタグは、仮想アドレス３１の仮想ページ番号のタグである。  
また、CPU１１からは、プロセスを識別するための識別子としてのプロセス番号（PID）もキャッシュメモリ１２に入力される。  
そして、CPU１１は、キャッシュラインサイズあるいはキャッシュラインサイズ以下のデータを、キャッシュメモリ１２から取り出す。ここでは、CPU１１は、32ビットのデータをキャッシュメモリ１２から取り出している。
【００２４】
TLB仮想ページメモリ２１は、ウェイ毎のTLB仮想ページメモリを含み、各TLB仮想ページメモリは、各ページの状態を示す、Valid（V）,Reference（R）、Dirty（D）等の状態情報、プロセスを識別するための識別子としてのプロセス番号（PID）、仮想ページ番号（EP）、及びウェイ番号（WN）等のデータを記憶可能である。仮想ページ番号（EP）は、仮想アドレス（EA）中の上位ビット(31:12)に対応するデータである。なお、今回の例ではウェイ番号(WN)はTLBのウェイ番号と同じ値を用いるので、ウェイ番号(WN)のフィールドを実装しても良いし、ウェイ番号(WN)のフィールド省略してTLBのウェイ番号を流用するような構成にしても良い。また、プロセスIDをもたないアーキテクチャのプロセッサでは、プロセスIDを用いずに仮想ページ番号だけを用いて本実施の形態の動作を行うものとする。
【００２５】
TLB仮想ページメモリ２１の各データは、TLBインデックスとしての仮想アドレス（EA）３１の上位ビット(31:12)中の４ビット(15:12)により、指定される。
【００２６】
各TLB仮想ページメモリのプロセス番号（PID）と仮想ページ番号（EP）と、CPU１１からのプロセス番号（PID）と仮想アドレス３１中の仮想ページタグ（EP_Tag）とを比較する４つの比較器２１ａが設けられている。４つの比較器２１ａは、TLB仮想ページメモリ２１の出力として、ヒット時は、ヒット信号として、ウェイ番号（WN）を出力し、ヒットしなかった時は、ノンヒット信号を出力する。
【００２７】
TLB物理ページメモリ２２は、ウェイ毎のTLB物理ページメモリを含む。各TLB物理ページメモリの各データは、TLBインデックスとしての、仮想アドレス３１の上位ビット(31:12)中の４ビット(15:12)の仮想ページインデックス（EP_Index）により、指定される。
【００２８】
TLB物理ページメモリ２２のデータ、すなわち物理ページ番号は、TLB仮想ページメモリ２１の各ウェイと仮想ページインデックス（EP_Index）と対応しており、仮想アドレス空間を、１ページあたり４KBの単位で管理されている。
【００２９】
TLB物理ページメモリ２２のデータは、後述するように、キャッシュミス及びTLBミスの場合に使用される。TLB物理ページメモリ２２は、各ウェイに対応して、４つ物理アドレスページビット(39:12)を出力する。
【００３０】
データメモリ２３は、ウェイ毎のデータメモリを含む。各データメモリは、各キャッシュデータを128バイト単位で管理している。各データメモリの各データは、キャッシュインデックスとしての仮想アドレス３１中の９ビット(15:7)と、ブロックオフセット(6:2)により、指定される。９ビット(15:7)は、仮想ページインデックス（EP_Index）である４ビット(15:12)と、ページオフセットである５ビット(11:7)とからなる。
【００３１】
そして、データメモリ２３中のキャッシュデータの入れ替えすなわちキャッシュリプレースは、OSの管理する仮想ページ単位で行われる。
【００３２】
各データメモリの出力は、対応する32入力1出力のマルチプレクサ（32:1 MUX）２３ａに入力される。セレクタとしてのマルチプレクサ２３ａは、各データメモリに対応して複数（ここでは４つ）設けられ、仮想ページインデックス（EP_Index）とページオフセットによって選択されたデータの中から、仮想アドレスデータ（EA）中のブロックオフセット(6:2)により選択されたブロックのキャッシュデータを選択して出力する。
【００３３】
キャッシュステートメモリ２４は、ウェイ毎のキャッシュステートメモリを含む。データメモリ２３と同様に、各キャッシュステートメモリ２４の各データは、仮想アドレス３１中の９ビット(15:7)により、指定される。キャッシュステートメモリ２４は、キャッシュライン単位（すなわちキャッシュブロック単位）で、キャッシュのステート管理を行うためのメモリである。
【００３４】
キャッシュステートメモリ（以下、ステートメモリともいう）２４は、マルチタスクに対応するために、例えば、MESIプロトコルに基づくキャッシュブロックの状態のデータを記憶する。MESIプロトコルの場合、M（Modified）、E（Exclusive）、S（Shared）、I（Invalid）のデータが記憶される。
【００３５】
キャッシュステートメモリ２４からの出力データは、データメモリ２３の各データの状態、すなわちデータの有効／無効、読み出しの可否等を示すデータなので、図示しない制御回路に入力されて、利用される。
【００３６】
TLB物理ページCAMメモリ２５は、ウェイ毎のTLB物理ページCAM（Content Addressable Memory）を含む。各TLB物理ページCAMの各データは、物理ページ番号と、Validの状態情報を含む。
【００３７】
TLB物理ページCAM２５は、TLB仮想ページメモリ２１の各ウェイに対応して、かつ仮想ページインデックス（EP_Index）に対応して、物理ページ番号のデータが記憶されている。TLB物理ページCAM２５のデータは、TLB仮想ページメモリ２１のデータの登録時に、登録される。
【００３８】
後述するように、TLB物理ページCAM２５は、他のプロセッサとデータのコヒーレンシを保つために、物理ページから仮想ページの求める逆引きのためと、TLBミス時のエイリアスチェックのために用いられる。また、TLB物理ページCAM２５に登録されている物理ページと、対応するエントリ番号のTLB物理ページメモリ２２に登録されている物理ページRPは同じものであり、TLB物理ページCAM２５もTLB物理ページメモリ２２もアクセスされる頻度はTLB仮想ページメモリ２１より遙かに小さいので、TLB物理ページメモリ２２の機能をTLB物理ページCAM２５に統合した実装としても構わない。
【００３９】
エイリアス問題は、ページサイズより大きなL1キャッシュに仮想アドレスが用いられる場合、別の仮想アドレスに同一物理アドレスが割り当てられると、本来、キャッシュに存在するデータを違うアドレスとして扱ってしまい、データの不一致が発生するという問題である。
【００４０】
この問題を防ぐために従来より２つの方法が考案されている。１つは、TLBミスした場合にはエイリアスが発生する可能性のあるエントリをすべてチェックし、物理アドレスが一致した場合に該当する仮想ページに属するすべてのキャッシュラインをフラッシュするものである。  
もう一つは、OS等の、仮想アドレスを管理するソフトウェアの助けを借りて、複数のページを並べてエイリアスが発生しないアドレス空間を作成し（たとえば上記例では 64kB / 2way = 32kB の領域を作るように8個の4kBページを並べて）エイリアスの発生をソフトウェア的に防止するページカラーリングと呼ばれる方法である。
【００４１】
しかし、いずれの場合も、複数プロセスで同一ページを共有する場合には、TLB ミスが発生して TLB エントリの入れ替えを行うと同時に古いプロセスで使っていたページに属するデータはキャッシュ上で一度すべて無効化し、新しいTLBを使ってもう一度ロードする必要があった。
【００４２】
特に、エイリアス問題は、複数プロセス間でデータを共有させるつもりでプログラミングしているにも関わらず、共有データはキャッシュ上で一度無効化され、新しい仮想アドレスで、全く同じデータをキャッシュにロードする、という問題があり、該当プロセスおよびシステム全体の性能低下を引き起こし、消費電力を増大させていた。
【００４３】
また、DRAM１３に接続されたバスに流れているすなわち出力している物理アドレス（RA）がいわゆるスヌープ方式により監視されて、TLB物理ページCAM２５に入力される。その監視している、すなわち入力された物理アドレス（RA）の中に、TLB物理ページCAM２５に登録されている物理ページ番号と同じページ番号を有する物理アドレスが検出されると、一致したTLB物理ページCAM 25 のエントリ番号と同じエントリ番号で示されるキャッシュステートメモリ24の状態を示す状態データが変更される。すなわち、良く知られているスヌープ方式のキャッシュコヒーレンシ機構を適用することにより、同一物理アドレスを持つすべてのキャッシュラインに関し、キャッシュラインの状態を示すキャッシュステートメモリ24の状態の整合性を保つことができる。また、スヌープによりMESIプロトコルのModified状態のように、DRAMに記録されているデータよりも新しいデータをキャッシュが持っている場合など、コヒーレンスプロトコルによりキャッシュからのデータ出力が必要な場合にはTLB物理ページCAM 25 のエントリ番号と同じエントリ番号で示されるデータメモリ23をアクセスし、データをバスに出力する。このように、コヒーレンシを保つ処理に、このTLB物理ページCAM２５は用いられる。
【００４４】
また、複数のプロセスの実行時に、TLBミスがあった場合に、上述したエイリアスの問題があるので、TLB物理ページメモリミスがあったときに、このTLB物理ページCAM２５は用いられる。
【００４５】
TLB物理ページメモリ２２、マルチプレクサ２３ａ及びキャッシュステートメモリ２４の出力は、それぞれ４入力１出力のマルチプレクサ（4:1 MUX）２２ｂ、２３ｂ、２４ｂに入力される。セレクタとしての各マルチプレクサ２２ｂ、２３ｂ、２４ｂは、それぞれ、TLB仮想ページメモリ２１からのウェイ番号（ＷＮ）が入力され、そのウェイ番号（ＷＮ）により選択されたデータを選択して出力する。
【００４６】
なお、本実施の形態では、CPU１１は、データ幅32bitでデータを取り出す構成にしているが、プロセッサコアの仕様次第でキャッシュラインサイズ以下の任意のデータ幅を取り出すことができる。
【００４７】
（動作）
次に、上述したキャッシュメモリ１２の動作を説明する。図３は、メモリリード時の処理の流れを説明するためのフローチャートである。図４は、TLB登録処理の流れを説明するためのフローチャートである。図５は、TLBミス処理の流れを説明するためのフローチャートである。図６は、キャッシュリード時の処理の流れを説明するためのフローチャートである。
【００４８】
図２の構成における動作を説明する前に、図３から図６を用いて、プロセッサシステム１の全体的な処理を説明する。  
図３に示すように、メモリリードが開始されると、仮想インデックスで、ステートメモリ２４とデータメモリ２３とTLB仮想ページメモリ２１へのアクセスが行われる（ステップS1）。TLB仮想ページメモリ２１がヒットしなかった時は、TLBヒットの判断（ステップS2）でNOとなり、リード時のTLB登録処理が実行される（ステップS3）。TLBがヒットした時は、TLBヒットの判断（ステップS2）でYESとなり、その仮想ページはリード可能かの判断がされる（ステップS4）。仮想ページはリード可能の場合は、ステップS4でYESとなり、キャッシュリードが行われる（ステップS5）。仮想ページはリード可能でない場合は、ステップS4でNOとなり、割込処理により、プロテクト違反をCPU１１通知し（ステップS6)、OSによる例外処理が実行される。
【００４９】
図４に示すように、TLB登録処理が開始されると、登録するPTE（ページテーブルエントリ）が、DRAM１３から読み出される（ステップS11）。読み出したPTE（ページテーブルエントリ）が、DRAM１３に存在するかが判断され（ステップS12）、存在しない場合は、ステップS12でNOとなって、OSに例外発生の通知が行われる（ステップS13）。
【００５０】
読み出したPTE（ページテーブルエントリ）が、DRAM１３に存在する場合は、ステップS12でYESとなって、TLBミスの原因は、ロード命令であるか否かが判断される（ステップS14）。TLBミスの原因が、ロード命令でない場合は、ステップS14でNOとなって、このプロセスに書き込みを許可するか否かが判断される（ステップS15）。プロセスに書き込みを許可しない場合は、ステップS15でNOとなり、処理は、ステップS13に進む。
【００５１】
プロセスに書き込みを許可する場合は、ステップS15でYESとなりとなり、PTE（ページテーブルエントリのdirtyビットとreferenceビットを立てる（ステップS16）。
【００５２】
そして、読み出したPTE（ページテーブルエントリ）と有効な全TLBエントリのいずれかと、物理ページ番号が一致したか否かが判断される（ステップS17）。ステップS17で、物理ページ番号が一致しない場合は、NOとなり、TLBミス処理が実行され（ステップS18）,新しいPTE（ページテーブルエントリ）がTLBエントリとして登録される（ステップS19）。
【００５３】
また、ステップS17で、物理ページ番号が一致した場合は、YESとなり、一致したTLBエントリは登録するエントリと仮想インデックスとが同じか否かが判断される（ステップS20）。登録するエントリと仮想インデックスとが同じでない場合は、ステップS20でNOとなり、一致したTLBエントリのページのキャッシュフラッシュが行われ（ステップS21）、処理は、ステップS18に進む。
【００５４】
登録するエントリと仮想インデックスとが同じ場合は、ステップS20でYESとなり、物理ページ番号が一致したTLBエントリの仮想ページ番号、プロセス番号（PID）及びプロテクション情報の書き換えが行われる（ステップS22）。
【００５５】
また、TLBミスの原因が、ロード命令である場合は、ステップS14でYESとなって、このプロセスに読み出しを許可するか否かが判断される（ステップS23）。このプロセスに読み出しを許可しない場合はステップS23でNOとなって、処理はステップS13に進む。このプロセスに読み出しを許可する場合は、ステップS23でYESとなって、PTE（ページテーブルエントリ）のreferenceビットを立て（ステップS24）、処理は、ステップS17に進む。
【００５６】
図５に示すように、TLBミス処理が開始されると、同一の仮想インデックスに未使用のTLBエントリが存在するか否かが判断される（ステップS31）。未使用のTLBエントリが存在する場合、ステップS31でYESとなり、処理は終了する。
【００５７】
未使用のTLBエントリが存在しない場合、ステップS31でNOとなり、追い出すTLBエントリを決定し（ステップS32）、追い出すTLBエントリにModifiedのキャッシュラインが存在するか否かが判断される（ステップS33）。Modifiedのキャッシュラインが存在しない場合は、ステップS33でNOとなり、処理は、終了する。
【００５８】
Modifiedのキャッシュラインが存在する場合は、ステップS33でYESとなり、追い出すページの全てのModifiedのキャッシュラインをフラッシュし（ステップS34）、処理は、終了する。
【００５９】
図６に示すように、キャッシュリードの処理が開始されると、仮想インデックスで引いたステートメモリ２４の出力が、仮想ページのオフセットとブロックオフセットにより選択され（ステップS41）、TLBヒットしているページのキャッシュステートの出力が選択される（ステップS42）。
【００６０】
キャッシュヒットしているか否かが判断され（ステップS43）、キャッシュヒットしていない場合は、TLBの物理ページ番号から物理アドレスを生成してメモリアクセスが行われる（ステップS44）。そして、得られたデータをキャッシュメモリに取り込み（ステップS45）、CPU１１へのデータの送信が行われる（ステップS46）。
【００６１】
キャッシュヒットしている場合は、ステップS43でYESとなり、仮想インデックスで引いたデータメモリの出力が、TLBからのウェイ番号（WN）で選択されて、処理は、ステップS46に進む。
【００６２】
以上が、プロセッサシステム１の処理の内容であり、次に、TLBヒットとTLBミスヒットの場合の動作について、図２に基づいて説明する。  
（TLBヒットの場合）
まず、上述したように、CPU１１からキャッシュメモリ１２へ仮想アドレス３１とプロセス番号（PID）が入力される。TLB仮想ページメモリ２１では、入力された仮想アドレス３１中の仮想ページインデックス（EP_Index）(15:12)を用いて、各ウェイのデータが選択される。そして、選択されたデータの中で、TLB仮想ページメモリ２１は、入力された仮想アドレス３１に関わるプロセスの識別子であるプロセス番号（PID）と、入力された仮想アドレス３１中の仮想ページタグ（EA_Tag）としての上位ビット(31:12)とが、それぞれTLB仮想ページメモリ２１のプロセス番号（PID）と仮想ページ（EP）とに一致する場合に、比較器２１ａから、一致したウェイ番号（WN）をヒット信号として出力する。比較器２１ａでは、各TLB仮想ページメモリからの４つの出力と、仮想アドレス３１の上位ビット(31:12)及びプロセス番号（PID）が比較される。なお、一致しない場合には、不一致を示すノンヒット信号が出力される。
【００６３】
ここで、TLB仮想ページメモリ２１の仮想ページ（EP）が、仮想ページインデックス（EP_Index）を含むようにしているのは、仮想タグとして使用されるためである。
【００６４】
TLB物理ページメモリ２２では、入力された仮想アドレス３１中の仮想ページインデックス（EP_Index）(15:12)を用いて、各ウェイのデータ、すなわち物理アドレスのページ番号が選択される。後述するように、キャッシュミスが発生したり、他のキャッシュを無効化したりする場合を除き、TLB物理ページメモリ２２に保持されている物理ページ情報は使わないので、TLB物理ページメモリ２２の情報が必要になってから、TLB物理ページメモリ２２へのアクセスを開始するような実装にしても構わない。
【００６５】
データメモリ２３では、上述した仮想アドレス３１中の９ビット(15:7)とブロックオフセット（ビット(6:2)）とを用いて、各ウェイのデータ、すなわちキャッシュブロックのデータが選択される。すなわち、入力された仮想アドレス３１中のブロックオフセット(6:2)を用いて、マルチプレクサ２３ａは、１ブロックすなわち１ライン(128バイト)の中の、１つのデータ(32ビット)を選択する。よって、データメモリ２３からは、４つのウェイから４つのキャッシュブロックデータが出力され、マルチプレクサ２３ａからは、４つのウェイに対応する４つのデータ（それぞれが32ビット）が出力される。
【００６６】
また、キャッシュステートメモリ２４では、上述した仮想アドレス３１中の９ビット(15:7)を用いて、各ウェイのキャッシュブロックの状態データ（キャッシュステートのデータ）を選択し、出力する。
【００６７】
よって、プロセッサコアとしてのCPU１１からのDRAM１３へのメモリリードアクセスがあると、次のように動作する。
【００６８】
まず、仮想アドレス３１中の仮想ページインデックス（EP_Index）(15:12)を、TLBインデックスとして、TLB仮想ページメモリ２１がアクセスされる。すなわち、TLB仮想ページメモリ２１では、仮想アドレス３１中のビット (15:12) をTLBインデックスとして、仮想アドレス(31:16)およびプロセス番号（PID）とCPU１１からのプロセス番号（PID）及び仮想アドレス３１中の仮想ページインデックス（EP_Index）(15:12)とが、一致するエントリを検索する。
【００６９】
TLB仮想ページメモリ２１は、その一致したエントリのあるウェイの有無と、有る場合には、そのウェイ番号（WN）を出力する。一致するエントリがない場合は、TLBミスとして扱われる。
【００７０】
以下、一致するエントリが存在する場合について記述し、TLBミスの場合については後で記述する。
【００７１】
一方、仮想アドレス３１中のビット (15:7) を、キャッシュインデックスとして、L1 キャッシュであるデータメモリ２３がアクセスされる。そして、ブロックオフセット(6:2)がマルチプレクサ２３ａに入力される。
【００７２】
上述したように、データメモリ２３の各ウェイからのデータが出力される。本実施の形態の構成では、32ビット幅でCPU１１にデータが渡されるので、仮想アドレス３１中のブロックオフセット(6:2)を用いて、それぞれのウェイの出力から、１つの32ビット幅のデータが、マルチプレクサ２３ａにより選択される。
【００７３】
そして、TLB仮想ページメモリ２１から出力されたウェイ番号（WN）を用いて、セレクタであるマルチプレクサ２３ｂにより、ヒットしたウェイのデータだけが選択されて出力される。
【００７４】
そして、CPU１１は、出力された128バイトの中の32ビットデータが読み出される。
【００７５】
また、データメモリ２３からデータが出力されるのと同時に、ステートメモリ２４の各ウェイからキャッシュステートのデータが出力される。
【００７６】
そして、ステートメモリ２４も、TLB仮想ページメモリ２１から出力されたウェイ番号（WN）を用いて、セレクタであるマルチプレクサ２４ｂにより、ヒットしたウェイのデータだけを選択して出力する（図６のステップS42）。
【００７７】
ステートメモリ２４から出力された状態（キャッシュステート）が、invalid 以外であれば、L1キャッシュとしてのデータメモリ２３から出力されたデータは使用できるので（図６のステップS47）、CPU１１へ出力する（図６のステップS46）。状態（キャッシュステート）が invalidであれば、後述するキャッシュミスの処理動作を行う（図６のステップS44）。
【００７８】
このように、TLB、キャッシュともにヒットする場合には仮想アドレス（EA）だけで処理を進めることができる。すなわち、TLB、キャッシュともにヒットする場合には、TLB物理ページメモリ２２は使用する必要はない。
【００７９】
次にキャッシュミスの場合について説明する。  
TLBヒット時にキャッシュミスが発生した場合には以下の動作が追加される。TLBヒット時にキャッシュミスが発生する場合とは、TLBヒットはしているが、キャッシュステートがinvalidであるため、キャッシュのデータのDRAM13からの読みだしが必要な場合である。
【００８０】
TLB物理ページメモリ２２は、仮想アドレス３１の仮想ページインデックス（EP_Index）(15:12)をインデックスとしてアクセスされ、TLB物理ページメモリ２２も４ウェイセットアソシアティブ形式なので、４つの物理ページ番号(39:12) を出力する。
【００８１】
マルチプレクサ２２ｂは、TLB仮想ページメモリ２１からのウェイ番号（WN）を用いて、出力された物理ページ番号から一つを選択する。
【００８２】
その選択された物理ページ番号(39:12)に、CPU１１からのリード要求のあった仮想アドレス３１中の下位ビット(11:0) を結合して物理アドレスRA(39:0) を生成し、CPU１１とのバスにその物理アドレスRAを用いて、DRAM１３へリード要求が送られ（図６のステップS46）、データが得られると、そのデータは、データメモリ２３の対応する領域に書き込まれる。
【００８３】
（TLBミスヒットの場合）
TLB ミス時には以下の動作が追加される。
【００８４】
該当する仮想ページが載っているPTE（ページテーブルエントリ）がメインメモリであるDRAM１３からロードされる（図４のステップS11）。そして、物理ページ番号(real address page number)がTLB物理ページCAM２５に入力され、同一の物理ページ番号が存在するかがチェックされる。
【００８５】
同一物理ページ番号がない場合は、次の登録処理が行われる（図４のステップS17以降）。  
すなわち、上述した読み出されたPTE（ページテーブルエントリ）から仮想ページ番号をもとめ、TLB 仮想ページメモリ２１、TLB物理ページメモリ２２及びTLB物理ページCAM２５に対するデータの登録が行われる（図４のステップS18、図５のステップS31）。
【００８６】
同一物理ページ番号がある場合（すなわちエイリアスがある場合）は、次の処理が行われる。
【００８７】
TLB物理ページCAM２５中に同一の物理ページ番号が存在するので、TLB物理ページCAM２５は、同一物理ページ番号が存在する仮想ページインデックス（EP_Index）と、ウェイ番号（WN）を出力する。
【００８８】
出力された仮想ページインデックス（EP_Index）が、PTE（ページテーブルエントリ）から求められた仮想ページ番号の仮想ページインデックス（EP_Index）と一致する場合、一致したエントリに対して以下の書き換えが行われる（図４のステップS22）。
【００８９】
まず、TLB仮想ページメモリ２１では プロセス番号（PID）と仮想ページ（EP）を書き換え、対応するReference（R）のビットを立てる。そして、その他の必要な情報は変更も行われる。
【００９０】
そして、TLB物理ページメモリ２２とTLB物理ページCAM２５は、物理ページ番号が一致しているので、書き変えない。
【００９１】
さらに、キャッシュステートメモリ２４とデータメモリ２３の内容は、キャッシュの内容を引き継ぐので書き換えない。
【００９２】
出力された仮想ページインデックス（EP_Index）が、 (PTE（ページテーブルエントリ）から求められた仮想ページ番号の仮想ページインデックス（EP_Index）と一致しない場合、以下の処理が行われる（図４のステップS21）。
【００９３】
TLB物理ページCAM２５から出力された仮想ページインデックス（EP_Index）と、ウェイ番号（WN）を対応するエントリ、すなわちエイリアスが発生している１つのTLBエントリの無効化が行われる。無効化処理には、対応する仮想ページのキャッシュフラッシュが含まれる。
【００９４】
さらに、エイリアスが発生している他方のTLB エントリの無効化も行われる。この無効化処理にも、対応する仮想ページのキャッシュフラッシュが含まれる。
【００９５】
上記２つのTLBエントリの無効化が終わったら、PTE（ページテーブルエントリ）から求められたTLBエントリに対して、所定の登録処理が行われる。  
具体的には、TLB仮想ページメモリ２１へプロセス番号（PID）と仮想ページ（EP）が登録される。さらに、PTE（ページテーブルエントリ）のダーティビット（Dirty bit）の書き込みが行われ、対応するValid（V）ビット、Reference（R）ビットをたてる。
【００９６】
そして、TLB物理ページCAM２５ において、PTE（ページテーブルエントリ）から求められたTLBエントリに物理ページ（RP）を書き込み、Valid（V）ビットをたてる。さらに、TLB 物理ページメモリ２２において、PTE（ページテーブルエントリ）から求められたTLBエントリに物理ページ（RP）を書き込む。
【００９７】
また、同一物理ページ番号がない場合（すなわちエイリアスがない場合）は、次の処理が行われる（図４のステップS18、図５のステップS32）。  
PTE（ページテーブルエントリ）から求められたTLBエントリの無効化が行われる。無効化処理には、対応する仮想ページのキャッシュフラッシュが含まれる。
【００９８】
TLBエントリの無効化が終わったら、PTE（ページテーブルエントリ）から求められたTLBエントリに、所定の登録処理が行われる（図４のステップS19）。  
具体的には、TLB仮想ページメモリ２１へプロセス番号（PID）と仮想ページ（EP）が登録される。さらに、PTE（ページテーブルエントリ）のダーティビット（Dirty bit）の書き込みが行われ、対応するValid（V）ビット、Reference（R）ビットをたてる。
【００９９】
そして、TLB物理ページCAM２５ において、PTE（ページテーブルエントリ）から求められたTLBエントリに物理ページ（RP）を書き込み、Valid（V）ビットをたてる。さらに、TLB 物理ページメモリ２２において、PTE（ページテーブルエントリ）から求められたTLBエントリに物理ページ（RP）を書き込む。
【０１００】
次にキャッシュスヌープについて説明する。キャッシュスヌープは、ハードウェア回路であるスヌーパによって、以下のように行われる。スヌーパは、キャッシュメモリ１２とDRAM１３間のバスのデータを監視する。  
スヌープに使うTLB物理ページCAM２５とステートメモリ２４は、TLB登録用と、CPU１１からのアクセス用とに共用される。
【０１０１】
バスにコヒーレントトランザクションが流れると、検出された物理アドレス(39:12)をTLB物理ページCAM２５に入力し、対応する仮想ページ（EP）がTLB仮想ページメモリ２１に登録されているかが、チェックされる。
【０１０２】
対応する仮想ページ（EP）があれば、TLB仮想ページメモリ２１の仮想ページインデックス（EP_Index）とウェイ番号（WN）が得られる。
【０１０３】
なお、対応する仮想ページ（EP）がTLB仮想ページメモリ２１になければ、L1キャッシュにデータは存在しないのでスヌープ処理はその後何もしない。
【０１０４】
対応する仮想ページ（EP）があれば、得られた仮想ページインデックス（EP_Index）とウェイ番号（WN）をキャッシュステートメモリ２４に入力して、キャッシュステートのチェックが行われる。
【０１０５】
得られたキャッシュステートと、トランザクションの種類に応じて、所定の処理が実行される。
【０１０６】
なお、本実施の形態では、TLB物理ページCAM２５とTLB物理ページメモリ２２は、別々のメモリとして構成されているが、次の３つの場合を除き、アクセスされることはないので、物理的に同じメモリに含まれるように構成しても良い。その３つの場合は、キャッシュミス の場合（すなわち、TLB物理ページメモリ２２のみアクセスされる)、TLB ミス時 (TLB物理ページCAM２５がアクセスされてエイリアスがチェックされ、新しい TLB エントリ登録時に TLB物理ページCAM２５とTLB物理ページメモリ２２に登録される)、及びスヌープ時 (TLB物理ページCAM２５のみアクセスされる)である。
【０１０７】
さらになお、本実施の形態の仮想アドレスキャッシュメモリによれば、異なるプロセッサで実行する複数のプロセスで共有するメモリ空間の場合であっても、仮想アドレスのページに制約はない。
【０１０８】
さらに、上述した本実施の形態は、セットアソシアティブ方式のキャッシュであるが、ダイレクトマップ方式のキャッシュにも適用できることは言うまでもない。
【０１０９】
以上のように、上述した実施の形態のキャッシュメモリによれば、それぞれが仮想アドレスの上位ビットの一部（ここでは仮想ページインデックスとページオフセット）をインデックスとするキャッシュステートメモリとデータメモリを設けたので、従来のような複雑な回路構成でなく、TLBの機能をキャッシュメモリ上で実現し、かつエイリアスの問題を解消することができる。
【０１１０】
（第２の実施の形態）
次に、本発明の第２の実施の形態について説明する。  
第２の実施の形態に係る仮想アドレスキャッシュメモリの基本的な構成は、上述した第１の実施の形態と同じであるが、エイリアスを検出した場合の動作が異なる。
【０１１１】
本実施の形態では、エイリアスが検出された場合、第１の実施の形態では、図４のステップS17以降に示すように、エイリアスを起こしたTLBエントリの無効化処理が行われた。
【０１１２】
これに対して、本実施の形態では、ステップS21の処理は行わない。すなわち、エイリアスを起こしたTLBエントリの無効化は行わずに新しいエントリが登録される。本実施の形態では、同一プロセッサのキャッシュ、TLB内部でエイリアスは発生しているが、スヌーピングによるキャッシュコヒーレンス制御を同一プロセッサにも適用することでエイリアスを解決する。すなわち、エイリアスを起こしているアドレスはL1キャッシュ内で複数存在しているが、エイリアスを起こしているそれぞれのキャッシュラインにコヒーレンスプロトコルを適用することで、複数のキャッシュラインの状態のコヒーレンシが保持される。
【０１１３】
例えば、プロセスAが書き込んだ物理アドレスをプロセスBが読み出すと、以下のような動作が行われる。プロセスAが書き込んだ直後に同一プロセッサ上のプロセスBが読みだそうとしているケースを考える。プロセスAの仮想アドレスからみると、キャッシュステートはModifiedであり、プロセスBの仮想アドレスからみると、キャッシュステートは Invalid である。
【０１１４】
プロセスBからみるとそのアドレスはキャシュ上invalid状態に見える。キャッシュミスなので、図６のステップ S44に進んでメインメモリであるDRAMのアクセスが行われる。
【０１１５】
このDRAMへのアクセスに対して、スヌープが行われる。すなわち、図２のTLB物理ページCAM２５をアクセスし、プロセスAが管理するTLBエントリがヒットする。プロセスAが書き込んだキャッシュラインがアクセスされ、Modifiedレスポンスが返されて、データが出力される。プロセスAが管理するキャッシュラインはSharedステートになる。CPU１１は、プロセスAが出力したModifiedレスポンスとデータを受け取る。リクエストを出したプロセスBが管理するキャシュラインが取り込まれ、キャッシュステートはSharedにされる。
【０１１６】
本実施の形態では、同一プロセッサ上で時分割で実行されているプロセスAとプロセスBが、あたかも別々のプロセッサで実行されているかのような動作をする。
【０１１７】
なお、本実施の形態の構成の場合、TLB物理ページCAM２５ではマルチヒットが許される。具体的には、TLB物理ページCAM２５のヒット出力は、エントリ毎に1ビットが割り当てられ、エンコードされない。また、TLB物理ページCAM２５がマルチヒットを許すことに対応して、キャッシュステートメモリ２４は、全エントリの同時アクセスを可能とする。具体的には、キャッシュステートメモリ２４は、SRAMではなく、通常のロジック回路により構成される。そして、キャッシュステートメモリ２４からの出力は、コヒーレントバスのステートのようにプライオリティーエンコーダなどでエンコードされる。ステートのエンコードには、ステート毎に１ビットを割り当てるようにキャッシュステートをエンコードし、ステートメモリ２４のエイリアスを発生している全てのエントリからの論理ORをとって、ステートメモリ２４としてのステートを得る、などの方法を用いても良い。
【０１１８】
本実施の形態の仮想アドレスキャッシュメモリによれば、第１の実施の形態の構成と同様の効果が得られると共に、エイリアスを起こしたTLBエントリの無効化処理を省くことができる。
【０１１９】
（第３の実施の形態）
次に、本発明の第３の実施の形態について説明する。  
第３の実施の形態に係る仮想アドレスキャッシュメモリの基本的な構成は、上述した第２の実施の形態と同じであるが、第３の実施の形態では、エイリアスを起こしているTLB仮想ページメモリ２１のインデックスと、登録しようとしているインデックスが一致しても TLB エントリを書き換えない。つまり、エイリアスを起こしているTLB 仮想ページメモリ２１の各エントリは完全に独立した制御となり、TLB でのエイリアス処理をなくして、エイリアスを起こしているエントリ間の整合性はキャッシュコヒーレンス機構に任せられる。
【０１２０】
すなわち、第３の実施の形態は、第２の実施の形態とは、構成は略同じで、エイリアスを検出した場合にTLB仮想ページメモリ２１のインデックスのチェックを行わない点で、異なっている。
【０１２１】
本実施の形態のTLBエントリ登録処理では、図４のステップS17、S20、S21及びS22の処理が除かれ、ステップS16及びS24の処理の後に、ステップS18及びS19の処理が実行される。
【０１２２】
なお、本実施の形態の構成の場合、ハードウェア構成上の制約は第２の実施の形態と同じで、TLB物理ページCAM２５でのマルチヒットが認められ、キャッシュステートメモリ２４は、複数のエントリを同時にアクセスすることができる。
【０１２３】
本実施の形態によれば、TLBエントリが完全に独立して行われ、同一プロセッサで実行される複数のプロセスは、異なるプロセッサで実行されるのとまったく同じ動きとなる。
【０１２４】
よって、本実施の形態は、上述した第２の実施の形態と同様の効果を有し、複数のプロセスを実行する時にそれぞれのプロセスのTLBエントリが無効化されないので、TLBミスのオーバーヘッドは小さくなる。
【０１２５】
（第４の実施の形態）
次に、本発明の第４の実施の形態について説明する。  
第４の実施の形態に係る仮想アドレスキャッシュメモリは、フルアソシアティブキャッシュである。
【０１２６】
図７は、本実施の形態に係るキャッシュメモリの構成図である。  
図７に示すように、TLBCAM２１Aと、TLB物理ページメモリ２２Aと、データメモリ２３Aと、キャッシュステートメモリ２４Aとを含んで構成されている。
【０１２７】
例えば、キャッシュ容量 256kB、キャッシュラインサイズ 128バイトのフルアソシアティブキャッシュを 4kB ページサイズ単位で管理する構成となっている。TLBで管理していたページ情報を10bit、キャッシュラインの状態も10ビット持つと仮定する。
【０１２８】
このとき、本実施の形態の TLBCAM２１Aのサイズは物理アドレス、仮想アドレスをそれぞれ40ビット, 32ビットとすると、
物理ページ番号 40ビット - 12ビット = 28ビット、
仮想ページ番号 32ビット - 12ビット = 20ビット、
エントリ数 256KB / 4KB = 64 エントリ、
であるから、
TLB サイズ= (物理ページ番号 + 仮想ページ番号 + 状態ビット) * エントリ数
= (28+20+10) * 64
= 3712ビット
L1 キャッシュのステートメモリ（従来のタグメモリに相当する）のサイズは、キャッシュのリプレースをページ単位で行うように制限したのでエントリ数が大幅に減少する。
【０１２９】
すなわち、
エントリ数 = 256KB / 4KB = 64 エントリ、
(64エントリ = アドレス 6ビット)、
Index ビット数= ウェイあたりのエントリ数 = 6ビット、
Tag ビット数= 物理アドレス空間 - ( エントリ数 + ラインサイズ)
=  40ビット - ( 6ビット + 12ビット)
=  40ビット - 18ビット
=  22ビット
であり、この構成で必要なのは物理ページ情報であり仮想ページ情報は不要なので、
L1 Tag メモリサイズ
= ( Tag ビット数 ) * エントリ総数
+ (状態ビット数*ページ内のライン数 * エントリ総数
= ( 22 ビット*64) + 10 ビット*64 * 32 )
= 1408 + 20480 ビット
= 21888 ビット
となる。
【０１３０】
よって、次の条件、
L1 サイズ 256kB、full set associative (ただし、管理は 4kB )、
TLB エントリ数 64 エントリ full associative、
最小ページサイズ 4kB、
仮想アドレス/物理アドレスサイズ 32bit/40bit、
L1 ラインサイズ 128 Byte、
において、 TLBCAM２１Aは、約4000ビット、 L1 ステートメモリであるキャッシュステートメモリ２４Aは約22000ビット、合計で約26000ビットのメモリしか必要としない。
【０１３１】
従来よりも少ないメモリでL1キャッシュを管理できることができる。容量あたりのタグとTLBの容量が減るのは、L1 キャッシュのタグがページ番号に関連づけられたことによって省略可能となったためである。
【０１３２】
次に性能面でのメリットを考えると、同一プロセッサで（互いに独立した仮想アドレス空間をもつ）２つのプロセスが動き、この２つのプロセスが同一の物理アドレスページを共有してデータの受け渡しを行っている状況を考える。２つのプロセスをそれぞれプロセスA,プロセスBとし、共用している物理ページを RP_1、これに対応するプロセスA、プロセスBの仮想ページをEP_1A, EP_1B とし、プロセスAが更新したページをプロセスBが読み出す場合を考える。
【０１３３】
プロセスAに対しては、このページは書き込み許可が出されているが、プロセスBに対してはこのページは書き込み許可は出されていないものとする。ページテーブルは予め作成されており、プロセスAがプロセスBに渡すデータの作成を始めるまで、この物理ページは使用されていなかったものとする。また、プロセスAはプロセスBが使用するデータを作成し終わると閉じられ、プロセスBが呼び出されるものとする。また、キャッシュはライトアロケート、ライトバック方式を採用しているものとする。
【０１３４】
以下、図８と図９を用いて、共有メモリリードと共有メモリライトを説明する。図８は、本実施の形態における共有メモリリード時のフローチャートである。図９は、本実施の形態における共有メモリライト時のフローチャートである。
【０１３５】
プロセスAがプロセスBに渡すデータの作成を開始するとき、仮想インデックスでTLBをアクセスするが、図９のステップS122でTLB ミスが発生するので、物理ページ RP_1 を仮想ページ EP_1A に関連付けるページテーブルエントリが TLB に呼び出される（ステップS123）。このとき、 TLB の Valid ビットが セットされ、ページ内の各キャッシュラインの状態は invalid である。プロセスAに対しては、このページの write bit が立っているのでプロセスAはこのページに書き込むことができる。また、プロセス開始時にはこのページに対して書き込みは行っていないのでこのページは clean であるが、メモリライトでアクセスしているのでページのdirtyビットをたてる（ステップS135）。
【０１３６】
ライトアロケート方式なので、書き込まれるキャッシュラインを主記憶から読みだし(ステップS44)、このキャッシュラインの状態をvalid,  dirty として TLB を書き変える。以後、プロセスAによるキャッシュへの書き込みがキャッシュヒットするとキャッシュ上のデータの更新が行われ、キャッシュミスすると主記憶からデータをキャッシュにアロケートした上でキャッシュの更新が行われる。ライトアロケート方式であるので、キャッシュラインの一部のみ更新しても、該当キャッシュラインは最新の状態を保っている。
【０１３７】
プロセスAによるページへの書き込みが終わり、プロセスAからプロセスBに切り替わった状態を考える。プロセスBが立ち上がるまで、物理アドレス RP_1 はアクセスされることなく、また、L1キャッシュからも追い出されていないものとする。プロセスBが物理アドレス RP_1 をアクセスすると、プロセスID が異なるため仮想アドレスはミスするが（ステップS102）、物理アドレスはヒットする(ステップ108)。そこで、TLB はページの valid bit と dirty bitは書き変えずに、仮想ページ番号を EP_1A から EP_1B に、プロセスIDをプロセスAからプロセスBに変更する、プロセスBに対しては write bitを落とすなど、プロセス切り替えのために必要な操作を行う(ステップS111)。このとき、書き換えるのはページ情報のみで、キャッシュライン情報は書き変えないし、キャッシュフラッシュも行わない。
【０１３８】
プロセスBが仮想アドレス空間EP_1Bを指定して物理アドレス空間 RP_1 をアクセスする場合を考える。上記のように TLB のプロセスID,仮想ページ情報が書き換えられているが、TLB 上のページテーブルは保持されており、L1キャッシュの内容も保持されているので、プロセスAが書き込んだ情報をプロセスBはキャッシュから読みだすことができる。同一ページ内でプロセスAが書き込んでいない領域に関しては、キャッシュラインの状態が invalid であるのでキャッシュミスは発生するものの、メモリからデータをキャッシュにアロケートすることで正しいデータを読み出すことができる。
【０１３９】
このように、プロセスBは不要なキャッシュミス、TLBミスを起こすことなく、プロセスAとの共用データをキャッシュから読みだすことができる。
【０１４０】
他の TLB ミスのためにRP_1 がリプレース対象になった場合など、TLBを invalidate する必要である場合には、以下の動作を行うことでシステムが正しい動作をすることを保証することができる。図１０は、本実施の形態におけるTLBミス処理時のフローチャートである。図１１は、本実施の形態におけるTLB登録処理時のフローチャートである。
【０１４１】
本実施の形態のTLBエントリを見ると、キャッシュラインが valid かる dirty なものがdirty なデータをもつキャッシュラインがわかる。そのキャッシュラインを主記憶に書き戻し、該当キャッシュラインのvalid ビットを落とす。
【０１４２】
また、該当 ページに dirtyなキャッシュラインがなくなるまで キャッシュフラッシュを行う。また、ページ内の キャッシュフラッシュが終わるとページをinvalidにする。
【０１４３】
リプレース対象のページテーブルエントリを TLB に登録する。
【０１４４】
本実施の形態では、TLBミスした場合に、「TLB上にRPがHitするエントリが存在するか」のチェックが追加され(ステップS108,S128)、存在した場合にTLBエントリの一部を書き換える処理(ステップS111,S131)が追加されている。従来はTLBミスが発生すると無条件でTLBミスとTLB登録という非常に重い処理が発生した。また、プロセスBが共有メモリへのアクセスを始めると、共有メモリ空間に対しては必ずプロセスAのTLBエントリの無効化と、そのエントリで示されるページ内のキャッシュフラッシュという重い処理が発生した。これに対し、本実施の形態によれば、TLBエントリを書き換えるという比較的軽い処理が呼び出される可能性が高くなっている。
【０１４５】
なお、本実施の形態において、キャッシュステートをページ単位で管理することも可能である。キャッシュステートをページ単位で管理する場合、キャッシュステートメモリ２４Aをページオフセット毎に持たずにページ全体で一組持つ構成にする。すなわち、ページオフセット(0~31)のデコードをせずに、コヒーレンシプロトコル、たとえば MESI の状態をページ全体で一組だけ持つ。ページ単位でキャッシュステートを管理する場合にも、データメモリは、図７（及び後述する図１２）と同様にアドレス (11:0) のようにページ内のオフセットをデータメモリに与えてアクセスされる。すなわち、キャッシュのステートメモリ以外は全く同じ構成で実装することができる。
【０１４６】
以上のように、本実施の形態の仮想アドレスキャッシュメモリによれば、フルアソシアティブ方式においても、第１の実施の形態の構成と同様の効果を得ることができる。
【０１４７】
（第５の実施の形態）
次に、本発明の第５の実施の形態について説明する。  
第５の実施の形態に係る仮想アドレスキャッシュメモリも、フルアソシアティブキャッシュである。
【０１４８】
図１２は、本実施の形態に係るキャッシュメモリの構成図である。  
図１２に示すように、TLBCAM２１Bと、TLB物理ページメモリ２２Bと、データメモリ２３Bと、キャッシュステートメモリ２４Bと、TLB物理ページCAM２５Bを含んで構成されている。
【０１４９】
本実施の形態では、TLB物理ページCAM２５Bにより、スヌープが行える構成となっている。
【０１５０】
本実施の形態では、プロセッサコア側からの仮想アドレスでのアクセスはスヌープ機構のない第４の実施の形態とほぼ同様であるので、説明を省略する。プロセッサバスからの物理アドレスでのアクセスがあると、以下のような手順でキャッシュ状態のチェックを行う。
【０１５１】
プロセッサバスの物理アドレスのページ番号にあたるビット(39:12)をTLB物理ページCAM２５Bに入力する。TLB物理ページCAM２５にマッチする物理ページがあれば、TLB物理ページCAM２５はエントリ番号を出力する。マッチする物理ページがなければ、スヌーはプ終了する。
【０１５２】
エントリ番号でキャッシュステートメモリ２４Bをアクセスする。このとき、CPU１１からのアクセスと競合したら、スヌープを優先する。
【０１５３】
キャッシュステートメモリ２４Bでキャッシュ状態をチェックする。要求されたリクエストとキャッシュステートに応じてスヌープレスポンスを決め、キャッシュステートを更新する。キャッシュステートが、MESIの Modified などで、データ転送が必要であれば、データ転送を行う。
【０１５４】
CPU１１からのリクエストに対し、本構成のキャッシュは次のようにスヌープリクエストを出力する。
【０１５５】
CPU１１からの仮想アドレス３１中のビット(11:7) で キャッシュステートメモリ２４Bをアクセスし、キャッシュステートをチェックする。キャッシュはフルアソシアティブなので64個の候補がある。
【０１５６】
同時に仮想アドレス３１のビット(31:12)のページ番号およびプロセス番号（PID ）を使って TLB仮想ページCAM２１Bをアクセス。一致するエントリがないか、チェック。ある場合にはエントリ番号を出力する。無い場合には、TLB ミスの処理を行う。TLBミスについては既に説明したので省略する。
【０１５７】
TLB ヒットの場合、TLB 仮想ページCAM２１Bのエントリ番号出力を使ってキャッシュステートメモリ２４Bからキャッシュステートを選択する。キャッシュがMもしくはEの場合、スヌープは不要である。それ以外の場合、プロセッサコアであるCPU１１からの要求とキャッシュステートに応じて、必要ならスヌープ要求を出す。
【０１５８】
スヌープが必要な例としては、ステートに対するライト、あるいは、TLBヒット条件下でのキャッシュミスがある。
【０１５９】
スヌープ対応構成では、スヌープは TLB物理ページCAM２５Bを用いてスヌープ対象のアドレスがキャッシュに存在するかチェックする。TLB 物理ページCAM２５BはTLB ミス時にTLBに該当エントリが存在するかのチェックと共用であるが、TLBミスは頻発しないのでスヌープと共用してもオーバーヘッドは小さい。一方、キャッシュステートメモリ２４Bはデータキャッシュアクセスの度に参照されるので頻繁にアクセスされるが、スヌープはTLB物理ページCAM２５Bであらかじめ不要なトランザクションを除外しているのでキャッシュに存在しないはずのトランザクションのキャッシュ状態をチェックする必要がないのでオーバーヘッドは小さい。
【０１６０】
以上のように、本実施の形態の仮想アドレスキャッシュメモリによれば、フルアソシアティブ方式においても、第１の実施の形態の構成と同様の効果を得ることができる。
【０１６１】
（第６の実施の形態）
次に、本発明の第６の実施の形態について説明する。  
第６の実施の形態に係る仮想アドレスキャッシュメモリも、フルアソシアティブキャッシュである。
【０１６２】
図１３は、本実施の形態に係るキャッシュメモリの構成図である。  
図１３に示すように、TLBCAM２１Cと、TLB物理ページメモリ２２Cと、データメモリ２３Cとを含んで構成されている。
【０１６３】
本実施の形態では、TLB物理ページメモリ２２C は、エントリ毎にキャッシュステートの情報を含む構成となっている。
【０１６４】
以上のように、本実施の形態のフルアソシアティブ方式の仮想アドレスキャッシュメモリにおいても、第１の実施の形態の構成と同様の効果を得ることができる。
【０１６５】
（第７の実施の形態）
次に、本発明の第７の実施の形態について説明する。  
本実施の形態のキャッシュメモリは、TLB は一次TLBのほかに、二次TLBを有する。そして、二次TLBはキャッシュとはリンクされていない、あるいはページテーブルのみで変換機構を有していないメモリである。
【０１６６】
二次TLBは、一次と同じ4ウェイもしくはそれ以上のアソシアティブで、一次より多いエントリ数かつ、一次を包含する。そして、二次TLBでdirtyやreferenceが管理される。
【０１６７】
仮想キャッシュメモリの構成は、キャッシュは 4ウェイセットアソシアティブで、キャッシュはページ単位でリプレース管理され、キャッシュステートはキャッシュラインで管理され、エイリアス対策は以下のように行う。
【０１６８】
例えば、仮想インデックスが一致したら、TLB の PID, 仮想ページ番号、プロテクションなどが書き換えらえる。仮想インデックスが一致しなければ、エイリアスを起こしている TLB エントリは invalidateせず、そのままにする。
【０１６９】
また、異なる インデックス間で エイリアスが発生しているが、キャッシュライン単位でコヒーレンシ制御を行い、エントリ間のコヒーレンシはプロセッサバスのコヒーレンシ機構を使う。その結果、エントリ間はコヒーレントとなる。
【０１７０】
（第８の実施の形態）
次に、本発明の第８の実施の形態について説明する。  
本実施の形態のキャッシュメモリは、TLB登録処理をおこなうとき、登録されたTLBエントリで示されるページを低優先順位でメモリから読みだす機構を設けたメモリである。
【０１７１】
低優先順位でのアクセス中にプロセッサが該当ページの中のキャッシュラインへのアクセスを行うとそのキャッシュラインは高優先順位でアクセスされる。
【０１７２】
以上説明した各実施の形態のキャッシュメモリは、ハードウェアのみで実装が可能であり、OSを含むソフトウェアからは通常のキャッシュ、TLBをもつプロセッサのように見せることが可能である。
【０１７３】
以上のように、各実施の形態のキャッシュメモリによれば、仮想記憶機構とキャッシュメモリをもつプロセッサにおいて、キャッシュを仮想記憶機構のページ単位で管理することにより、TLBとキャッシュのTagメモリを共用とすることで回路量を削減することができる。
【０１７４】
さらに、仮想キャッシュにおけるエイリアスのチェック処理を軽減し、TLBミス時のオーバーヘッドを軽減することもできる。
【０１７５】
特に、TLBとキャッシュメモリをもつプロセッサにおいて、キャッシュのタグは、TLBで管理するページ単位とすることにより、タグメモリはキャッシュ状態だけ保持すればよくなるのでタグメモリの容量を減らすことができる。
【０１７６】
また、キャッシュの状態管理はキャッシュライン単位で行われるようにすることによって、プロセス起動時に、必要な部分のみ初期化すればよくなるので起動が早くなる。TLBを無効化する場合など、キャッシュフラッシュをする場合に、ページ全体でなく dirty なキャッシュラインだけフラッシュすれば良いので、TLB 無効化のオーバーヘッドが小さくなる。また、コヒーレントキャッシュを用い、かつ、共有メモリでプロセッサ間の通信を行う場合には、コヒーレントキャッシュの機構を使うことができるので、実装面、性能面で効率がよい。
【０１７７】
また、TLBの物理アドレスのページ番号を保持したまま仮想アドレスのページ番号を書き換えることを可能にし、あるいはキャッシュ状態を保持したままTLBの仮想アドレスのページ番号を書き換えることにより、同一プロセッサで、共有メモリを使ってプロセス間通信をする場合に、オーバーヘッドの大きなキャッシュフラッシュ、TLB無効化処理をする必要がなく、共有データがキャッシュから追い出されることがなくなるので注目しているプロセスの性能が上がると同時に、システム全体としてもバスやメモリのバンド幅を浪費することがない。
【０１７８】
また、上述したように、プロセッサバスをスヌープするためのタグメモリをもつことにより、コヒーレントなスヌーピングキャッシュ機構を利用することができる。
【０１７９】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【０１８０】
【図１】本発明の第１の実施の形態に係わるプロセッサシステムの構成を示す構成図である。
【図２】本発明の第１の実施の形態に係わる、仮想アドレスキャッシュメモリとしてのキャッシュメモリの構成図である。
【図３】本発明の第１の実施の形態に係わるメモリリード時の処理の流れを説明するためのフローチャートである。
【図４】本発明の第１の実施の形態に係わるTLB登録処理の流れを説明するためのフローチャートである。
【図５】本発明の第１の実施の形態に係わるTLBミス処理の流れを説明するためのフローチャートである。
【図６】本発明の第１の実施の形態に係わるキャッシュリード時の処理の流れを説明するためのフローチャートである。
【図７】本発明の第４の実施の形態に係わるキャッシュメモリの構成図である。
【図８】本発明の第４の実施の形態における共有メモリリード時のフローチャートである。
【図９】本発明の第４の実施の形態における共有メモリライト時のフローチャートである。
【図１０】本発明の第４の実施の形態に係わる、TLBミス処理時のフローチャートである。
【図１１】本発明の第４の実施の形態に係わるTLB登録処理時のフローチャートである。
【図１２】本発明の第５の実施の形態に係わるキャッシュメモリの構成図である。
【図１３】本発明の第６の実施の形態に係わるキャッシュメモリの構成図である。
【符号の説明】
【０１８１】
１  プロセッサシステム、１１  CPU、１２  キャッシュメモリ、１３  DRAM、２１  TLB仮想ページメモリ、２２  TLB物理ページメモリ、２３  データメモリ、２４キャッシュステートメモリ、３１  仮想アドレス、３２  物理アドレス
【図１】
2010097558.tif 000003
【図２】
2010097558.tif 000004
【図３】
2010097558.tif 000005
【図４】
2010097558.tif 000006
【図５】
2010097558.tif 000007
【図６】
2010097558.tif 000008
【図７】
2010097558.tif 000009
【図８】
2010097558.tif 000010
【図９】
2010097558.tif 000011
【図１０】
2010097558.tif 000012
【図１１】
2010097558.tif 000013
【図１２】
2010097558.tif 000014
【図１３】
2010097558.tif 000015