(57)【要約】【課題】TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図ることができ、さらにタスク切り替えの応答性が向上したプロセッサを提供する。【解決手段】仮想アドレスキャッシュメモリは、TLBの書き換えが発生したときにエントリデータの書き換えを行うTLB仮想ページメモリ２１と、仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリ２３と、キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリ２４と、TLBの書き換えが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリ２２と、TLBの書き換えの発生後、データメモリへの前記キャッシュデータを書き込むときに保持している物理アドレスの書き換えを行う第２の物理アドレスメモリ２５とを有する。【選択図】図９
2011198091.tif 000002
【特許請求の範囲】
【請求項１】
プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBの書き換えが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、
前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、
前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、
前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBの書き換えが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、
前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBの書き換え後、前記データメモリへの前記キャッシュデータを書き込むときに保持している物理アドレスの書き換えを行う第２の物理アドレスメモリと、
を有することを特徴とする仮想アドレスキャッシュメモリ。
【請求項２】
一貫性保持プロトコル機構を有するバスと、
前記バスを介して接続され、それぞれがCPUとキャッシュメモリを有する複数のプロセッサと、
前記バスに接続され、主メモリのための制御部であるメモリコントローラと、
を有し、
前記キャッシュメモリは、
プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、
前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、
前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、
前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、
前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第２の物理アドレスメモリと、
を含み、
前記キャッシュメモリは、前記バスを介して受信した一のプロセッサからの書き戻しデータと同じ物理アドレスが、前記第２の物理アドレスメモリ中に存在し、前記TLB仮想ページメモリにおいても有効であって、かつデータメモリの対応するデータがInvalidである場合に、前記書き戻しデータを取り込み、
前記メモリコントローラは、前記一のプロセッサからの書き戻しデータが他のプロセッサのキャッシュメモリに取り込まれたときは、前記主メモリへのデータの書き戻しを行わないことを特徴とするマルチプロセッサシステム。
【請求項３】
バスを介して接続され、CPU、キャッシュメモリ及びDMAコントローラを有するプロセッサと、
前記バスに接続され、主メモリのための制御部であるメモリコントローラと、
を有し、
前記キャッシュメモリは、
プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、
前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、
前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、
前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、
前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第２の物理アドレスメモリと、
を含み、
前記CPUは、前記主メモリから前記キャッシュメモリに、前記DMAコントローラによるDMA転送によりデータ転送する場合は、前記DMA転送における転送元アドレスと転送先アドレスを仮想アドレスにより設定し、
前記キャッシュメモリは、前記転送先アドレスにデータを書き込んだときは、前記キャッシュステートメモリの前記データが書き込まれた領域に対応するエントリに、Dirtyを書き込むことを特徴とするプロセッサ。
【請求項４】
前記転送先アドレスは、前記転送元アドレスと同じであることを特徴とする請求項３に記載のプロセッサ。
【請求項５】
バスを介して接続され、CPU、キャッシュメモリ及びDMAコントローラを有するプロセッサと、
前記バスに接続され、主メモリのための制御部であるメモリコントローラと、
を有し、
前記キャッシュメモリは、
プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、
前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、
前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、
前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、
前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第２の物理アドレスメモリと、
を含み、
前記CPUは、前記キャッシュメモリから前記主メモリに、前記DMAコントローラによるDMA転送によりデータ転送する場合は、前記DMA転送における転送元アドレスと転送先アドレスを仮想アドレスにより設定し、
前記キャッシュメモリは、前記転送元アドレスについての前記TLBミスあるいはキャッシュミスのときは、TLBミス処理あるいはキャッシュミス処理を行わないで、前記仮想アドレスの前記転送元アドレスに対応する物理アドレスから対象データを読み出して、前記主メモリにおけるの前記転送先アドレスに対応する物理アドレスに、前記対象データを書き込むことを特徴とするプロセッサ。
【請求項６】
CPUと、
一次キャッシュメモリと、
二次あるいは三次以上のキャッシュメモリと
を有し、
前記二次あるいは三次以上のキャッシュメモリは、
プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力する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
となっている（非特許文献１，２，３参照）。
【０００９】
（第１の課題）
また、従来は、実行タスクが切り替わるタスクスイッチが発生した場合、TLBの内容の書き換えが行われ、さらにキャッシュメモリの無効化処理が行われる。このとき、キャッシュメモリ中のデータが更新されていて、Dirtyビットが立っている場合は、主メモリへのキャッシュデータの書き戻しが行われる。
【００１０】
しかし、主メモリへのデータの書き戻しに掛かる時間は、タスク切り替えの他の処理に掛かる時間に比べて極めて長いので、プロセッサにおけるタスク切り替えの応答性が悪いという問題があった。
【００１１】
（第２の課題）
さらに、従来より、マルチプロセッサシステムにおいて、主メモリと自己のキャッシュメモリとの間、及び各キャッシュメモリ間で、データの読み出しと書き込みが行われるシステムがある。  
例えば、マルチプロセッサシステムにおいて、あるプロセッサが、演算結果を自己のキャッシュメモリに書き込むと、その演算結果データに対応する主メモリにおけるデータの値が異なってしまう。従って、他のプロセッサがその演算結果データを参照する場合、プロセッサがキャッシュメモリに書き込んだ値のキャッシュメモリから主メモリへの書き戻し、すなわちキャストアウトが行われる。この書き戻しが行われた結果、主メモリに正しいデータが格納されるので、その演算結果データを、他のプロセッサも利用できるようになる。言い換えると、マルチプロセッサシステムでは、あるプロセッサが書き換えたデータを、他のプロセッサでもそのデータを利用可能とするためには、そのデータを書き換えたプロセッサは、そのデータを、主メモリへ書き戻さなければならなかった。
【００１２】
上記書き戻しは、主メモリへのアクセスが生じるので、大きなレイテンシによるマルチプロセッサシステムのパフォーマンスの低下の原因となり、さらに入出力回路の動作により消費電力の増加の原因となる、という問題があった。
【００１３】
（第３の課題）
さらにまた、従来より、DMA技術が、CPUの負荷を増やすことなく、主メモリの異なるアドレス領域間あるいは主メモリと入出力装置との間でデータ転送を行うために利用されている。マルチプロセッサシステムにおいても、各プロセッサが、DMAを利用して、主メモリと自己のローカルメモリとの間で、データの転送を行う技術が実用化されている。
【００１４】
例えば、マルチプロセッサシステムにおける各プロセッサのCPUすなわちCPUコアは、対応するローカルメモリに、ロード命令及びストア命令によりアクセスし、ロード命令によりローカルメモリからデータを読み出してCPUのレジスタファイルへデータを書き込み、ストア命令によりCPUのレジスタファイルからデータを取り出してローカルメモリへ書き込む。そして、各CPUは、ローカルメモリへの主メモリからのデータの読み出し（GET）及びローカルメモリから主メモリへのデータの書き込み（PUT）を、DMAにより行っている。
【００１５】
DMA転送は、それぞれが物理アドレスであるソースアドレス及びデスティネーションアドレスが指定されることによってDMAコントローラにより制御される。さらに、上述したマルチプロセッサシステムにおいても、キャッシュ可能領域のDMA転送は、サポートされていない。
【００１６】
よって、DMA時も物理アドレスによりソースアドレスとデスティネーションアドレスが指定されるので、プログラマは、データ処理時間とデータアクセス時間とを予測した上で、各CPUで実行されるプログラムを記述することができる。
【００１７】
各プロセッサの処理速度を上げるために、各CPUのプロセッサにキャッシュメモリを設けることも考えられるが、キャッシュメモリを介して主メモリへのアクセスを行うようにすると、キャッシュミス時に、キャッシュヒットの場合とキャッシュミスの場合で、データのアクセス時間が異なってしまう場合があるうえに、キャッシュミス時に主メモリからキャッシュデータを転送するのに掛かる時間が予測できないという問題がある。
【００１８】
さらに、プログラム開発の自由度を高めるために、上述したマルチプロセッサシステムで実行可能なプログラムを仮想アドレスで実行可能にすることも考えられるが、ローカルメモリに仮想アドレスを用いたシステムにDMAが対応できない、という問題もある。
【００１９】
（第４の課題）
また、一般に、キャッシュメモリには、複数レベルのキャッシュメモリがあり、プロセッサは、その複数レベルのキャッシュを有するものがある。その場合、L1キャッシュの記憶容量は、L2キャッシュの記憶容量よりも小さい。一般に、レベルが上位のキャッシュの記憶容量は、下位のキャッシュの記憶容量より小さい。
【００２０】
しかし、L1キャッシュのヒット率は、一般に高く、さらに、L1キャッシュがアクセスされると、仮想アドレスから物理アドレスへの変換のためにTLBが必ず参照される。従って、プロセッサにおいて、TLBハードウェアの消費電力は大きいものとなっていた。
【非特許文献１】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の機能をキャッシュメモリ上で実現して、回路量の削減を図ることができ、さらにタスク切り替えの応答性が向上したキャッシュメモリ及びプロセッサを提供することを第１の目的とする。
【００２２】
もう一つの本発明は、さらに、上述した第２の問題に鑑みてなされたもので、各プロセッサによるデータの書き戻し処理に基づく主メモリへアクセス量を低減させることができるマルチプロセッサシステムを提供することを第２の目的とする。
【００２３】
さらにもう一つの本発明は、さらに、上述した第３の問題に鑑みてなされたもので、仮想アドレスでDMAを実行可能として、DMA転送時のキャッシュヒット率の高めることができる、あるいはDMA転送後に対応するプロセッサがアクセスしたときのキャッシュヒット率を高めることができるプロセッサを提供することを第３の目的とする。
【００２４】
そこで、さらにもう一つの本発明は、さらに上述した第４の問題に鑑みてなされたもので、複数レベルのキャッシュメモリを有するプロセッサにおいて、TLBの参照頻度を低くしてプロセッサの消費電力を低くすることが可能なプロセッサを提供することを第４の目的とする。
【課題を解決するための手段】
【００２５】
本発明の一態様によれば、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスの発生後、前記データメモリへの前記キャッシュデータを書き込むときに保持している物理アドレスの書き換えを行う第２の物理アドレスメモリと、を有する仮想アドレスキャッシュメモリを提供することができる。
【００２６】
本発明の一態様によれば、一貫性保持プロトコル機構を有するバスと、前記バスを介して接続され、それぞれがCPUとキャッシュメモリを有する複数のプロセッサと、前記バスに接続され、主メモリのための制御部であるメモリコントローラと、を有し、前記キャッシュメモリは、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第２の物理アドレスメモリとを含み、前記キャッシュメモリは、前記バスを介して受信した一のプロセッサからの書き戻しデータと同じ物理アドレスが、前記第２の物理アドレスメモリ中に存在し、前記TLB仮想ページメモリにおいても有効であって、かつデータメモリの対応するデータがInvalidである場合に、前記書き戻しデータを取り込み、前記メモリコントローラは、前記一のプロセッサからの書き戻しデータが他のプロセッサのキャッシュメモリに取り込まれたときは、前記主メモリへのデータの書き戻しを行わないことを特徴とするマルチプロセッサシステムを提供することができる。
【００２７】
本発明の一態様によれば、バスを介して接続され、CPU、キャッシュメモリ及びDMAコントローラを有するプロセッサと、前記バスに接続され、主メモリのための制御部であるメモリコントローラと、を有し、前記キャッシュメモリは、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第２の物理アドレスメモリ、を含み、前記CPUは、前記主メモリから前記キャッシュメモリに、前記DMAコントローラによるDMA転送によりデータ転送する場合は、前記DMA転送における転送元アドレスと転送先アドレスを仮想アドレスにより設定し、前記キャッシュメモリは、前記転送先アドレスにデータを書き込んだときは、前記キャッシュステートメモリの前記データが書き込まれた領域に対応するエントリに、Dirtyを書き込むプロセッサを提供することができる。
【００２８】
本発明の一態様によれば、バスを介して接続され、CPU、キャッシュメモリ及びDMAコントローラを有するプロセッサと、前記バスに接続され、主メモリのための制御部であるメモリコントローラと、を有し、前記キャッシュメモリは、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力すると共に、TLBミスが発生したときに、前記エントリデータの書き換えを行うTLB仮想ページメモリと、前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、前記TLB仮想ページメモリに保持される仮想アドレスに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第１の物理アドレスメモリと、前記データメモリに保持される前記キャッシュデータに対応する物理アドレスを保持すると共に、前記TLBミスが発生したときに、保持している物理アドレスの書き換えを行う第２の物理アドレスメモリを含み、前記CPUは、前記キャッシュメモリから前記主メモリに、前記DMAコントローラによるDMA転送によりデータ転送する場合は、前記DMA転送における転送元アドレスと転送先アドレスを仮想アドレスにより設定し、前記キャッシュメモリは、前記転送元アドレスについての前記TLBミスあるいはキャッシュミスのときは、TLBミス処理あるいはキャッシュミス処理を行わないで、前記仮想アドレスの前記転送元アドレスに対応する物理アドレスから対象データを読み出して、前記主メモリにおけるの前記転送先アドレスに対応する物理アドレスに、前記対象データを書き込むプロセッサを提供することができる。
【００２９】
本発明の一態様によれば、CPUと、一次キャッシュメモリと、二次あるいは三次以上のキャッシュメモリとを有し、前記二次あるいは三次以上のキャッシュメモリは、プロセスの仮想アドレスの所定の上位ビットの仮想ページタグを含むエントリデータを保持し、プロセッサからの仮想ページタグが一致するとヒット信号を出力するTLB仮想ページメモリと、前記仮想ページタグ又はページオフセットをキャッシュインデックスとしてキャッシュデータを保持するデータメモリと、前記キャッシュインデックスに対応して前記データメモリに記憶された前記キャッシュデータのキャッシュステートを保持するキャッシュステートメモリと、を有するプロセッサを提供することができる。
【発明の効果】
【００３０】
本発明の一態様によれば、上述した問題に鑑みてなされたもので、TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図ることができ、さらにタスク切り替えの応答性が向上したキャッシュメモリ及びプロセッサを提供することができる。
【００３１】
さらに、本発明の一態様によれば、各プロセッサによるデータの書き戻し処理に基づく主メモリへアクセス量を低減させることができるマルチプロセッサシステムを提供することができる。
【００３２】
さらに、本発明の一態様によれば、仮想アドレスでDMAを実行可能として、DMA転送時のキャッシュヒット率を高めることができる、あるいはDMA転送後に対応するプロセッサがアクセスしたときのキャッシュヒット率を高めることができるプロセッサを提供することができる。
【００３３】
さらに、本発明の一態様によれば、複数レベルのキャッシュメモリを有するプロセッサにおいて、TLBの参照頻度を低くしてプロセッサの消費電力を低くすることが可能なプロセッサを提供することができる。
【図面の簡単な説明】
【００３４】
【図１】本発明の実施の形態に係わるプロセッサシステムの構成を示す構成図である。
【図２】本発明の実施の形態に係わる、仮想アドレスキャッシュメモリとしてのキャッシュメモリの構成図である。
【図３】本発明の実施の形態に係わるメモリリード時の処理を示すフローチャートである。
【図４】本発明の実施の形態に係わるTLB登録処理を示すフローチャートである。
【図５】本発明の実施の形態に係わるTLBミス処理を示すフローチャートである。
【図６】本発明の実施の形態に係わるキャッシュリード時の処理を示すフローチャートである。
【図７】本発明の実施の形態に係わるメモリライト時の処理を示すフローチャートである。
【図８】本発明の実施の形態に係わるキャッシュライト時の処理を示すフローチャートである。
【図９】TLB書き換え処理を示すフローチャートである。
【図１０】タスク切り替えのオーバーヘッドを低減する構成を取った場合の、メモリリード時の処理を示すフローチャートである。
【図１１】複数のプロセッサを有するマルチプロセッサシステム１Aの構成を示すブロック図である。
【図１２】プロセッサにおけるキャッシュミス時の処理を示すフローチャートである。
【図１３】キャッシュミス時の書き戻し処理の例を示すフローチャートである。
【図１４】書き戻し時のメモリコントローラ１５の処理を示すフローチャートである。
【図１５】データの書き戻しの状態を説明するための図である。
【図１６】複数のプロセッサを有するマルチプロセッサシステム１Bの構成を示すブロック図である。
【図１７】DMA転送を行う機能に対応したキャッシュメモリの構成図である。
【図１８】DMAによるGET操作の処理を示すフローチャートである。
【図１９】DMAによるPUT操作の処理を示すフローチャートである。
【図２０】プリフェッチに係るGET操作の処理を示すフローチャートである。
【図２１】図２０のS422のメモリリード２の処理を示すフローチャートである。
【図２２】図２１のS431のキャッシュリード２の処理を示すフローチャートである。
【図２３】DMA処理を含む場合のTLB登録処理を示すフローチャートである。
【図２４】DMA処理を含む場合のキャッシュリード処理を示すフローチャートである。
【図２５】DMA処理を含む場合のキャッシュライト処理を示すフローチャートである。
【図２６】複数レベルのキャッシュメモリのプロセッサを有するマルチプロセッサシステム１Cの構成を示すブロック図である。
【図２７】L2キャッシュ５２の構成図である。
【図２８】L2キャッシュ５２の変形例３に係るキャッシュメモリの構成図である。
【図２９】L2キャッシュ５２の変形例３における共有メモリリード時のフローチャートである。
【図３０】L2キャッシュ５２の変形例３における共有メモリライト時のフローチャートである。
【図３１】L2キャッシュ５２の変形例３におけるTLBミス処理時のフローチャートである。
【図３２】L2キャッシュ５２の変形例３におけるTLB登録処理時のフローチャートである。
【図３３】L2キャッシュ５２の変形例４に係るキャッシュメモリの構成図である。
【図３４】L2キャッシュ５２の変形例５に係るキャッシュメモリの構成図である。
【発明を実施するための形態】
【００３５】
以下、図面を参照して本発明の実施の形態を説明する。
【００３６】
(構成)
まず図１に基づき、本発明の実施の形態に係わるプロセッサシステムの構成を説明する。図１は、本発明の実施の形態に係わるプロセッサシステムの構成を示す構成図である。
【００３７】
プロセッサシステム１は、中央処理装置（以下、CPUという）１１と、仮想アドレスキャッシュメモリとしてのレベル１（L1）のキャッシュメモリ１２と、主メモリとしてのDRAM１３とを有して構成される。プロセッサシステム１は、仮想記憶機構とキャッシュメモリをもつプロセッサである。CPU１１は、いわゆるCPUコアである。キャッシュメモリ１２は、キャッシュメモリ制御回路を含む。キャッシュメモリ１２とDRAM１３は、互いにバスで接続されている。DRAM１３は、図示しないメモリコントローラを介してバスに接続されている。なお、ここでは、主メモリは、DRAMの例を挙げて説明するが、他の種類のメモリであってもよい。  
なお、本実施の形態では、１つのCPU１１がDRAM１３をアクセスする例であるが、CPU１１とキャッシュメモリ１２の対が複数あって、その複数の対が、システムバス等を介して、１つのDRAM１３と接続されるようなマルチコアの構成でもよい。また、DRAMはアドレスによって複数のメモリに分かれていてもよいし、DRAM以外のメモリ、例えばSRAMで構成されていてもよい。  
さらに、L1キャッシュであるキャッシュメモリ１２とDRAM１３の間に、L2キャッシュ等があってもよい。
【００３８】
CPU１１は、主メモリ１３に記憶された命令あるいはデータを、キャッシュメモリ１２を介して読み出して実行する。CPU１１は、プログラムの実行に必要な命令あるいはデータ（以下、単にデータともいう）がキャッシュメモリ１２にあれば、その命令あるいはデータを読み出してプログラムを実行する。
【００３９】
CPU１１は、そのデータを指定するために仮想アドレスEAをキャッシュメモリ１２に出力する。キャッシュメモリ１２は、入力された仮想アドレスに対応するデータがキャッシュメモリ１２中に存在すれば、そのデータをCPU１１へ出力する。ストアされたデータがキャッシュメモリ１２中に無ければ、リフィル処理によりDRAM１３からそのデータを読み出してキャッシュメモリ１２に書き込み、CPUコア１１に出力する。
【００４０】
本実施の形態のキャッシュメモリ１２は、キャッシュエントリリプレースを複数のプロセスの実行を管理するOSで管理する仮想ページ単位で行い、キャッシュステート管理をキャッシュライン単位すなわちキャッシュブロック単位で行う。本実施の形態のプロセッサシステムでは、キャッシュメモリ１２へのアクセスは仮想アドレスにより行われ、キャッシュのコヒーレンシはスヌープ方式により行われる。スヌープ方式については、Parallel Computer Architecture  -- A Hardware/Software Approach -- (1999 Morgan Kaufmann : ISBN 1-55860-343-3)by David.E.Culler, Jaswinder P. Singh and Anoop Gupta  における、(p277) 5.1.2. Cache Coherence through Bus Snooping  、(p278) Figure 5.4、(p380-p393) 6.2. Base Design : Single-level Caches with an Atomic Bus、(p386) Figure 6.4、及び(p388) Figure 6.5を参照されたし。
【００４１】
図２は、仮想アドレスキャッシュメモリとしてのキャッシュメモリ１２の構成図である。
【００４２】
キャッシュメモリ１２は、TLB仮想ページメモリ（TLB EPメモリ）２１と、TLB物理ページメモリ（TLB RPメモリ：第１の物理アドレスメモリ）２２と、データメモリ２３と、キャッシュステートメモリ２４と、TLB物理ページCAMメモリ（TLB RP CAMｓメモリ：第２の物理アドレスメモリ）２５とを含んで構成される。
【００４３】
キャッシュメモリ１２は、CPU１１から仮想アドレス（EA）を入力し、DRAM１３へ物理アドレス３２を出力する。
【００４４】
キャッシュメモリ１２は、TLB およびL1キャッシュとしての機能を、４ウェイセットアソシアティブ構成のキャッシュメモリにより実現している。キャッシュメモリ１２のL1キャッシュとしての容量は、256KB（キロバイト。以下、同じ。）である。
【００４５】
各ウェイの大きさはページサイズを超えるが、仮想アドレスにページカラーリング（page coloring）は施されていない。
【００４６】
キャッシュメモリ１２は、仮想アドレスEAを4ＫＢのページ単位で分けた４ウェイセットアソシアティブのキャッシュで、TLBとL1キャッシュを構成する。本実施の形態では、例えば３２ビットの仮想アドレス３１によりL1キャッシュとしてのキャッシュメモリ１２がアクセスされる。
【００４７】
仮想アドレスEAは、上位ビット(31:12)が仮想ページタグ（EP_Tag）であり、さらにウェイあたりのキャッシュ容量である 64KBを4KBで分割した中位ビット(15:12) が仮想ページインデックス（EP_Index。以下、TLBインデックスともいう。）である。また、ビット(11:7)はページオフセットであり、ビット(6:2)は、ブロックオフセットであり、最下位ビット(1:0)はワードオフセットである。  
各ウェイのサイズ(64KB)がページサイズ(4KB)より大きいので、図２に示すように、仮想ページタグと仮想ページインデックスは、それぞれ仮想アドレスEAのビット(31:12)と(15: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のウェイ番号を流用するような構成にしても良い。また、プロセス番号をもたないアーキテクチャのプロセッサでは、プロセス番号を用いずに仮想ページ番号だけを用いて本実施の形態の動作を行うものとする。  
TLB仮想ページメモリ２１の各データは、TLBインデックスとしての仮想アドレスEAの４ビット(15:12)により指定される。
【００５０】
各TLB仮想ページメモリ２１のプロセス番号PIDと仮想ページ番号EPと、CPU１１からのプロセス番号PIDと仮想アドレスEA中の仮想ページタグEP_Tagとを比較する４つの比較器２１ａが設けられている。４つの比較器２１ａは、TLB仮想ページメモリ２１の出力として、ヒット時はヒット信号としてウェイ番号WNを出力し、ヒットしなかった時はノンヒット信号を出力する。
【００５１】
TLB物理ページメモリ２２は、ウェイ毎のTLB物理ページメモリを含む。各TLB物理ページメモリ２２の各データは、仮想ページインデックスEP_Indexにより指定される。  
TLB物理ページメモリ２２のデータ、すなわち物理ページ番号RPは、TLB仮想ページメモリ２１の各ウェイと仮想ページインデックスEP_Indexとに対応しており、仮想アドレス空間を１ページあたり４KBの単位で管理されている。  
TLB物理ページメモリ２２のデータは、キャッシュミス及びTLBミスの場合に使用される。TLB物理ページメモリ２２は、各ウェイに対応して４つ物理アドレスページビット(39:12)を出力する。
【００５２】
データメモリ２３は、ウェイ毎のデータメモリを含む。各データメモリ２３は、各キャッシュデータを例えば128バイト単位で管理している。各データメモリ２３のデータは、キャッシュインデックスとしての仮想アドレス３１中の９ビット（仮想ページインデックスおよびページオフセット）(15:7)とブロックオフセット(6:2)により、指定される。
【００５３】
そして、CPU１１からのキャッシュデータの入れ替え、すなわちデータメモリ２３に対するロードあるいはストアは、ワードサイズ（３２ビット単位）で行われる。システムバスでのデータの入れ替えは、キャッシュラインサイズの単位で行われる。  
各データメモリ２３の出力は、対応する32入力1出力のマルチプレクサ（32:1 MUX）２３ａに入力される。セレクタとしてのマルチプレクサ２３ａは、各データメモリに対応して複数（ここでは４つ）設けられている。マルチプレクサ２３ａは、仮想ページインデックスとページオフセットによって選択されたデータの中から、ブロックオフセット(6:2)により選択されたブロックのキャッシュデータを選択して出力する。
【００５４】
キャッシュステートメモリ（以下、ステートメモリともいう）２４は、ウェイ毎のキャッシュステートメモリを含む。各キャッシュステートメモリ２４のデータは、仮想アドレスEA中の９ビット(15:7)により指定される。キャッシュステートメモリ２４は、キャッシュライン単位（キャッシュブロック単位）でキャッシュのステート管理を行うためのメモリである。
【００５５】
キャッシュステートメモリ２４は、マルチタスクに対応するために、例えば、MESIプロトコルに基づくキャッシュブロックの状態のデータを記憶する。MESIプロトコルの場合、M（Modified）、E（Exclusive）、S（Shared）、I（Invalid）のデータが記憶される。MESIプロトコルについては、上述したParallel Computer Architecture  -- A Hardware/Software Approach -- (1999 Morgan Kaufmann : ISBN 1-55860-343-3)by David.E.Culler, Jaswinder P. Singh and Anoop Guptaにおける、  (p299) 5.3.2. A Four-State(MESI) Write-Back Invalidation Protocol、及び(p301) Figure 5.15を参照されたし。
【００５６】
キャッシュステートメモリ２４からの出力データは、データメモリ２３の各データの状態、すなわちデータの有効／無効、読み出しの可否等を示すデータである。出力データは、図示しない制御回路に入力されて利用される。
【００５７】
TLB物理ページCAM２５は、ウェイ毎のTLB物理ページCAM（Content Addressable Memory）を含む。各TLB物理ページCAMのデータは、物理ページ番号と、Validの状態情報を含む。  
TLB物理ページCAM２５は、TLB仮想ページメモリ２１の各ウェイかつ仮想ページインデックスに対応して、物理ページ番号のデータが記憶されている。TLB物理ページCAM２５のデータは、TLB仮想ページメモリ２１のデータの登録時に登録される。
【００５８】
TLB物理ページCAM２５は、他のプロセッサとデータのコヒーレンシを保つために、物理ページから仮想ページの求める逆引きと、TLBミス時のエイリアスチェックに用いられる。また、TLB物理ページCAM２５と対応するエントリ番号のTLB物理ページメモリ２２に登録されている両物理ページRPは同じものである。TLB物理ページCAM２５もTLB物理ページメモリ２２もアクセスされる頻度はTLB仮想ページメモリ２１より遙かに小さいので、TLB物理ページメモリ２２の機能をTLB物理ページCAM２５に統合した実装としても構わない。
【００５９】
エイリアス問題とは、ページサイズより大きなL1キャッシュに仮想アドレスが用いられる場合、別の仮想アドレスに同一物理アドレスが割り当てられると、本来、キャッシュに存在するデータを違うアドレスとして扱ってしまい、データの不一致が発生するという問題である。
【００６０】
この問題を防ぐために従来より２つの方法が考案されている。一つは、TLBミスした場合にはエイリアスが発生する可能性のあるエントリをすべてチェックし、物理アドレスが一致した場合に該当する仮想ページに属するすべてのキャッシュラインをフラッシュするものである。  
もう一つは、例えばOS等の仮想アドレスを管理するソフトウェアにより、複数のページを並べてアドレス空間を作成し（上記例では 256kB /4way = 64kB の領域を作るように16個の4kBページを並べて）エイリアスの発生をソフトウェア的に防止するページカラーリングと呼ばれる方法である。
【００６１】
しかし、いずれの場合も、複数プロセスで同一ページを共有する場合には、TLB ミスが発生して TLB エントリの入れ替えを行うと同時に、古いプロセスで使っていたページに属するデータはキャッシュ上で一度すべて無効化し、新しいTLBを使ってもう一度ロードする必要があった。
【００６２】
特に、エイリアス問題は、複数プロセス間でデータを共有させるつもりでプログラミングしているにも関わらず、共有データはキャッシュ上で一度無効化され、新しい仮想アドレスで全く同じデータをキャッシュにロードしていた。これにより、該当プロセスおよびシステム全体の性能低下を引き起こし、消費電力を増大させていた。
【００６３】
また、DRAM１３に接続されたバスに出力している物理アドレスがいわゆるスヌープ方式により監視されて、TLB物理ページCAM２５に入力される。その監視されている、すなわち入力された物理アドレスの中に、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１１はデータ幅32ビットでデータを取り出す構成にしているが、プロセッサコアの仕様次第でキャッシュラインサイズ以下の任意のデータ幅を取り出すことができる。
【００６７】
次に、上述したキャッシュメモリ１２の動作を説明する。以下の説明の中で、プロセッサからのメモリアクセス要求と、そのメモリアクセス要求に対するスヌープ応答、スヌープレスポンスについて記載しているが、それらは商用のマルチプロセッサ用プロセッサ、たとえばIBM PowerPC 970 FX RISC Microprocessor、 に用いられているコヒーレンシ制御プロトコルと同等のものである。IBM PowerPC 970 FX RISC Microprocessorについては、参照文献としてのIBM PowerPC 970FX RISC Microprocessor User’s Manual Version1.7を参照されたし（2009年9月30日現在、次の URL より取得可能である。https://www-01.ibm.com/chips/techlib/techlib.nsf/products/PowerPC_970MP_Microprocessor）。
【００６８】
（メモリリード動作）
図３は、メモリリード時の処理を示すフローチャートである。図４は、TLB登録処理を示すフローチャートである。図５は、TLBミス処理を示すフローチャートである。図６は、キャッシュリード時の処理を示すフローチャートである。
【００６９】
まず、図３から図６を用いて、プロセッサシステム１の全体的な処理を説明する。  
図３に示すように、メモリリードが開始されると、仮想インデックスで、TLB仮想ページメモリ２１とデータメモリ２３とステートメモリ２４へのアクセスが行われる（S1）。TLB仮想ページメモリ２１がヒットしなかった時（S2、NO）は、リード時のTLB登録処理が実行される（S3）。TLBがヒットした時（S2、YES）は、その仮想ページはリード可能かの判断がされる（S4）。仮想ページがリード可能の場合（S4、YES）は、キャッシュリードが行われる（S5）。仮想ページがリード可能でない場合（S4、NO）は、割込処理によりプロテクト違反をCPU１１通知し（S6)、OSによる例外処理が実行される。
【００７０】
図４に示すように、TLB登録処理が開始されると、登録するPTE（ページテーブルエントリ）が、DRAM１３から読み出される（S11）。読み出したPTE（ページテーブルエントリ）が、DRAM１３に存在するかが判断される（S12）。PTEが存在しない場合（S12、NO）は、OSに例外発生の通知が行われる（S13）。  
PTEが存在する場合（S12、YES）は、TLBミスの原因はストア命令であるか否かが判断される（S14）。
【００７１】
ストア命令でない場合（S14、NO）は、このプロセスに読み出しを許可するか否かが判断される（S23）。読み出しを許可しない場合（S23、NO）は、処理はS13に進む。読み出しを許可する場合（S23、YES）は、PTEのreferenceビットを立て（S24）、処理はS17に進む。
【００７２】
そして、読み出したPTEと有効な全TLBエントリのいずれかと、物理ページ番号が一致したか否かが判断される（S17）。物理ページ番号が一致しない場合（S17、NO）は、TLBミス処理が実行され（S18）、新しいPTEがTLBエントリとして登録される（S19）。
【００７３】
また、物理ページ番号が一致した場合（S17、YES）は、一致したTLBエントリは登録するエントリと仮想インデックスとが同じか否かが判断される（S20）。同じでない場合（S20、NO）は、一致したTLBエントリのページのキャッシュフラッシュが行われ（S21）、処理はS18に進む。  
同じ場合（S20、YES）は、物理ページ番号が一致したTLBエントリの仮想ページ番号、プロセス番号及びプロテクション情報の書き換えが行われる（S22）。  
図５に示すように、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）。キャッシュヒットしていない場合（S43、NO）は、TLBの物理ページ番号から物理アドレスを生成してメモリアクセス要求を発行する（S44）。このメモリアクセス要求は、PowerPC 970FX の Readトランザクション、あるいはBusRdトランザクションにおいて処理される要求と同様である。上述したIBM PowerPC 970FX RISC Microprocessor User’s Manual Version1.7におけるPowerPC 970FX の Readトランザクションの欄、及び上述したParallel Computer Architecture  -- A Hardware/Software Approach --のFigure 6.5の BusRdトランザクションを参照されたし。  
そして、得られたデータをキャッシュメモリに取り込む（S45）。
【００７５】
メモリアクセス要求は、メモリ、および他のプロセッサでスヌープされる。メモリアクセス要求をスヌープしたプロセッサは、自分の管理するキャッシュ状態をチェックし、キャッシュ状態が Modified の場合には、スヌープ応答として Modified レスポンス、キャッシュ状態が Exclusive または Shared の場合には Shared レスポンスを返すので、要求を出力したプロセッサはスヌープ応答に応じてキャッシュステートメモリ２４の状態を更新する。すなわち、スヌープ応答が Shared レスポンスまたは Modifeid レスポンスであれば（S46、YES）、キャッシュステートメモリ２４にある要求したキャッシュラインの状態を “Shared” に（S47）、スヌープ応答が Shared レスポンスもしくは Modified レスポンスのいずれでもなければ（S46、NO）、要求したキャッシュラインの状態を “Exclusive” に変更する（S48）。そして、CPU１１へのデータの送信が行われる（S49）。
【００７６】
キャッシュヒットしている場合（S43、YES）は、仮想インデックスで引いたデータメモリの出力が、TLBからのウェイ番号で選択されて（S50）、処理はS49に進む。キャッシュヒットの場合には、メモリアクセス要求は発行せず、キャッシュ状態の更新も行われない。
【００７７】
（メモリライト動作）
図７は、メモリライト時の処理を示すフローチャートである。図８は、キャッシュライト時の処理を示すフローチャートである。  
図７に示すように、メモリライトが開始されると、仮想インデックスで、TLB仮想ページメモリ２１とデータメモリ２３とステートメモリ２４へのアクセスが行われる（S61）。TLB仮想ページメモリ２１がヒットしなかった時（S62、NO）は、ライト時のTLB登録処理が実行される（S63）。TLBがヒットした時（S62、YES）は、TLBヒットの判断となり、その仮想ページはライト可能かの判断がされる（S64）。ライト可能の場合（S64、YES）は、キャッシュライトが行われる（S65）。ライト可能でない場合（S64、NO）は、割込処理によりプロテクト違反をCPU１１に通知し（S66)、OSによる例外処理が実行される。
【００７８】
図４に示すように、TLB登録処理が開始されると、登録するPTEがDRAM１３から読み出される（S11）。読み出したPTEが、DRAM１３に存在するかが判断される（ステップS12）。存在しない場合（S12、NO）は、OSに例外発生の通知が行われる（S13）。  
存在する場合（S12、YES）は、TLBミスの原因はストア命令であるか否かが判断される（S14）。ストア命令の場合（S14、YES）は、このプロセスに書き込みを許可するか否かが判断される（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エントリの仮想ページ番号、プロセス番号及びプロテクション情報の書き換えが行われる（S22）。  
なお、TLBミス処理は、上述したメモリリード時の場合の動作と同様である。
【００８１】
図８に示すように、キャッシュライトの処理が開始されると、仮想インデックスで引いたステートメモリ２４の出力が、仮想ページのオフセットとブロックオフセットにより選択され（S71）、TLBヒットしているページのキャッシュステートの出力が選択される（S72）。
【００８２】
そして、キャッシュヒットしているか否かが判断される（S73）。キャッシュヒットしていない場合（S73、NO）は、TLBの物理ページ番号から物理アドレスを生成してメモリアクセス要求を発行する（S74）。この場合、出力されるメモリアクセス要求は「他のキャッシュラインを無効化するメモリリード要求」、例えばRWITM、BUSRdx、である。メモリアクセス要求はメモリ、および他のプロセッサでスヌープされる。メモリアクセス要求をスヌープしたプロセッサは、自分の管理するキャッシュ状態をチェックし、キャッシュ状態が Modified の場合には、スヌープ応答として Modified レスポンスを出力するとともに、キャッシュ状態をInvalidにし、要求されたキャッシュラインのデータを要求元のプロセッサに向けて出力する。このとき、メモリは要求されたキャッシュラインへのリードアクセスおよび、要求元プロセッサへのデータ出力をキャンセルする。キャッシュ状態が Exclusive または Shared の場合には Shared レスポンスを返し、キャッシュ状態を Invalid に変更する。要求されたキャッシュラインのデータはメモリが要求元プロセッサに対して出力する。そして、得られたデータをキャッシュメモリに取り込み（S75）、CPU１１から受け取ったデータをキャッシュに上書きする。要求を出力したプロセッサはスヌープ応答に応じてキャッシュステートメモリ２４の状態を更新する。さらに、メモリリード要求（RWTIM もしくは BusRdX）を出力したプロセッサは、キャッシュステートメモリ２４にある要求したキャッシュラインの状態を “Modified” に変更する（S79）。
【００８３】
キャッシュヒットしている場合（S73、YES）は、仮想インデックスで引いたデータメモリの出力がTLBからのウェイ番号で選択されて（S76）、処理はS77に進む。キャッシュ状態が “Modified” の場合（S77、YES）、キャッシュ状態は変更しない。キャッシュ状態が “Exclusive” の場合（S78）、キャッシュ状態を “Modified” に変更する（S79）。キャッシュ状態が “Shared” の場合（S78、NO）、プロセッサは、キャッシュライン無効化トランザクション（DClaim）を発行する（S80）。そして、他のプロセッサのキャッシュを無効化し、スヌープ応答を受け取るとキャッシュの状態を“Modifed” に変更する(S79)。キャッシュ状態が “Modified” になると、プロセッサからのデータをキャッシュに書き込む（S81）。このキャッシュライン無効化トランザクションは、PowerPC 970FX の DClaim トランザクション、あるいは BusRdXトランザクション) において処理される要求と同様である。上述した参考文献としてのIBM PowerPC 970FX RISC Microprocessor User’s Manual Version1.7におけるPowerPC 970FX の DClaim トランザクション、及び上述したParallel Computer Architecture  -- A Hardware/Software Approach --におけるBusRdXトランザクションを参照されたし。  
次に、TLBヒットとTLBミスの場合の動作について、図２に基づいて説明する。  
（TLBヒットの場合）
まず、CPU１１からキャッシュメモリ１２へ仮想アドレスEAとプロセス番号PIDが入力される。TLB仮想ページメモリ２１では、入力された仮想アドレス中の仮想ページインデックス(15:12)を用いて、各ウェイのデータが選択される。そして、選択されたデータの中で、入力されたプロセス番号と、入力された仮想アドレス中の仮想ページタグ(31:12)とが、それぞれTLB仮想ページメモリ２１のプロセス番号と仮想ページとを比較し一致する場合に、TLB仮想ページメモリ２１は、比較器２１ａから一致したウェイ番号WNをヒット信号として出力する。なお、一致しない場合には、不一致を示すノンヒット信号が出力される。  
ここで、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仮想ページメモリ２１では、TLBインデックスにより、仮想アドレス(31:16)およびプロセス番号とCPU１１からのプロセス番号及び仮想ページインデックスEP_Index(15:12)とが、一致するエントリを検索する。
【００８７】
TLB仮想ページメモリ２１は、その一致したエントリのあるウェイの有無と、有る場合には、そのウェイ番号WNを出力する。一致するエントリがない場合は、TLBミスとして扱われる。
【００８８】
以下、一致するエントリが存在する場合について説明する。  
仮想アドレス３１中のビット (15:7) をキャッシュインデックスとして、L1 キャッシュであるデータメモリ２３がアクセスされる。そして、ブロックオフセット(6:2)がマルチプレクサ２３ａに入力され、各ウェイからのデータが出力される。本実施の形態の構成では、32ビット幅でCPU１１にデータが渡されるので、ブロックオフセット(6:2)を用いて、それぞれのウェイの出力から１つの32ビット幅のデータが、マルチプレクサ２３ａにより選択される。
【００８９】
TLB仮想ページメモリ２１から出力されたウェイ番号WNを用いて、セレクタであるマルチプレクサ２３ｂにより、ヒットしたウェイのデータだけが選択されて出力される。
【００９０】
そして、ステートメモリ２４も、TLB仮想ページメモリ２１から出力されたウェイ番号WNを用いて、データメモリ２３からデータが出力されるのと同時に、セレクタであるマルチプレクサ２４ｂにより、ヒットしたウェイのデータだけを選択して出力する（図６のS42）。
【００９１】
ステートメモリ２４から出力された状態（キャッシュステート）が、invalid 以外であれば、L1キャッシュとしてのデータメモリ２３から出力されたデータは使用できるので（S47）、CPU１１へ出力する（S49）。状態（キャッシュステート）が invalidであれば、キャッシュミスの処理動作を行う（S44）。
【００９２】
このように、TLB、キャッシュともにヒットする場合には仮想アドレスEAだけで処理を進めることができる。すなわち、TLB、キャッシュともにヒットする場合には、TLB物理ページメモリ２２は使用する必要はない。
【００９３】
次にキャッシュミスの場合について説明する。  
TLBヒット時にキャッシュミスが発生した場合には以下の動作が追加される。TLBヒット時にキャッシュミスが発生する場合とは、TLBヒットはしているが、キャッシュステートがinvalidであるため、キャッシュのデータのDRAM13からの読みだしが必要な場合である。
【００９４】
TLB物理ページメモリ２２は、仮想アドレスの仮想ページインデックスEP_Index(15:12)をインデックスとしてアクセスされる。TLB物理ページメモリ２２も４ウェイセットアソシアティブ形式なので、４つの物理ページ番号を出力する。
【００９５】
マルチプレクサ２２ｂは、TLB仮想ページメモリ２１からのウェイ番号WNを用いて、出力された物理ページ番号から一つを選択する。
【００９６】
その選択された物理ページ番号(39:12)に、CPU１１からのリード要求のあった仮想アドレス中の下位ビット(11:0) を結合して物理アドレスRA(39:0) を生成し、DRAM１３へリード要求が送られる（S44）。得られたデータは、データメモリ２３の対応する領域に書き込まれる(S45)。
【００９７】
（TLBミスの場合）
TLB ミス時には以下の動作が追加される。  
該当する仮想ページが載っているPTEがDRAM１３からロードされる（図４のS11）。そして、物理ページ番号が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２５ において、TLBエントリに物理ページRPを書き込み、Valid（V）ビットをたてる。さらに、TLB 物理ページメモリ２２において、TLBエントリに物理ページRPを書き込む。
【０１０６】
また、同一物理ページ番号がない場合（すなわちエイリアスがない場合）は、次の処理が行われる（図４のS18、図５のS32）。  
PTEから求められたTLBエントリの無効化が行われる。無効化処理には、対応する仮想ページのキャッシュフラッシュが含まれる。
【０１０７】
無効化が終わったら、PTEから求められたTLBエントリに所定の登録処理が行われる（S19）。  
具体的には、TLB仮想ページメモリ２１へプロセス番号PIDと仮想ページEPが登録される。さらに、PTEのダーティビットの書き込みが行われ、対応するValid（V）ビット、Reference（R）ビットをたてる。
【０１０８】
そして、TLB物理ページCAM２５ において、該TLBエントリに物理ページRPを書き込み、Valid（V）ビットをたてる。さらに、TLB 物理ページメモリ２２において、該TLBエントリに物理ページRPを書き込む。
【０１０９】
次にキャッシュスヌープについて説明する。キャッシュスヌープは、ハードウェア回路であるスヌーパによって、以下のように行われる。スヌーパは、キャッシュメモリ１２とDRAM１３間のバスのデータを監視する。  
スヌープに使うTLB物理ページCAM２５とステートメモリ２４は、TLB登録用と、CPU１１からのアクセス用とに共用される。
【０１１０】
バスにコヒーレントトランザクションが流れると、検出された物理アドレス(39:12)をTLB物理ページCAM２５に入力し、対応する仮想ページ（EP）がTLB仮想ページメモリ２１に登録されているかが、チェックされる。
【０１１１】
対応する仮想ページEPがあれば、TLB仮想ページメモリ２１の仮想ページインデックスEP_Indexとウェイ番号WNが得られる。
【０１１２】
なお、対応する仮想ページがTLB仮想ページメモリ２１になければ、L1キャッシュにデータは存在しないのでスヌープ処理についてはその後何もしない。
【０１１３】
対応する仮想ページがあれば、得られた仮想ページインデックスとウェイ番号をキャッシュステートメモリ２４に入力して、キャッシュステートのチェックが行われる。得られたキャッシュステートとトランザクションの種類に応じて、所定の処理が実行される。
【０１１４】
なお、本実施の形態では、TLB物理ページCAM２５とTLB物理ページメモリ２２は、別々のメモリとして構成されているが、次の３つの場合を除き、アクセスされることはないので、物理的に同じメモリに含まれるように構成しても良い。その３つの場合は、(1)キャッシュミス の場合（TLB物理ページメモリ２２のみアクセスされる)、(2)TLB ミス時 (TLB物理ページCAM２５がアクセスされてエイリアスがチェックされ、新しい TLB エントリ登録時に TLB物理ページCAM２５とTLB物理ページメモリ２２に登録される)、(3)スヌープ時 (TLB物理ページCAM２５のみアクセスされる)である。
【０１１５】
さらになお、本実施の形態の仮想アドレスキャッシュメモリによれば、異なるプロセッサで実行する複数のプロセスで共有するメモリ空間の場合であっても、仮想アドレスのページに制約はない。  
さらに、本実施の形態は、セットアソシアティブ方式のキャッシュであるが、ダイレクトマップ方式のキャッシュにも適用できることは言うまでもない。
【０１１６】
以上のように、上述した実施の形態のキャッシュメモリによれば、それぞれが仮想アドレスの上位ビットの一部をインデックスとするキャッシュステートメモリとデータメモリを設けたので、従来のような複雑な回路構成でなく、TLBの機能をキャッシュメモリ上で実現し、かつエイリアスの問題を解消することができる。
【０１１７】
次に、上述したキャッシュメモリの構成を利用したタスク切り替え、データの書き戻し、DMA処理及びL2キャッシュへの適用について説明する。  
Ｉ）タスク切り替え時の処理
本実施の形態に係るキャッシュメモリにおけるタスク切り替え時の処理について説明する。  
タスク切り替え時には、ソフトウェアによってTLB内容の書き換えが行なわれる場合がある。その際に、タスク切り替え前の仮想アドレスに関するTLBエントリと物理アドレス（以下、先の物理アドレスともいう）は無効化されるため、先の物理アドレスのデータが書き換えられているとき（すなわちDirtyビットが立っているとき）は、主メモリに最新のデータを格納するために、そのデータの書き戻し処理が必要となる。
【０１１８】
しかし、タスク切り替え時に、そのデータの書き戻し処理を行なうと、DRAM１３へのアクセスが発生するため、タスク切り替えの応答性が悪くなるという問題が発生する。
【０１１９】
そこで、本実施の形態では、タスク切り替え時のTLB書き換え処理を行なう場合には、TLB仮想ページメモリ２１とTLB物理ページメモリ２２に対する書き換え処理は行われるが、データメモリ２３のデータの書き戻しと、TLB物理ページCAM２５のデータの書き換えは行わない。
【０１２０】
その代わり、TLB書き換え処理時に特定のフラグデータをセットし、その後、初回のメモリアクセスが発生したときに、その特定のフラグデータを参照して、書き戻しが必要であれば、TLB物理ページCAM２５に書かれたアドレス（すなわち先の物理アドレス）を用いて、データメモリ２３のデータの書き戻しを行う。
【０１２１】
そして、その書き戻しの後、TLB物理ページCAM２５に、TLB物理ページメモリ２２に登録されている物理アドレス（以下、後の物理アドレスともいう）への書き換えが行われる。
【０１２２】
以下、具体的に説明する。  
TLB仮想ページメモリ２１は、「旧データキャッシュ状態」を示すデータ、例えば、フラグデータもページ毎に記憶可能に構成されている。ここでは、旧データキャッシュ状態フラグKは、TLB書き換え処理中は「１」にセットされ、初回のメモリアクセスが発生し、書き戻し処理が完了すると「０」にリセットされる。
【０１２３】
図９は、TLB書き換え処理を示すフローチャートである。
【０１２４】
TLB書き換え処理が開始されると、同一の仮想インデックスに未使用のTLBエントリが存在するか否かが判断される（S31）。未使用のTLBエントリが存在する場合（S31、YES）、TLB仮想ページメモリ２１、TLB物理ページメモリ２２、TLB物理ページCAM２５の内容を書き込み（S32）、処理は終了する。
【０１２５】
未使用のTLBエントリが存在しない場合（S31、NO）、追い出すTLBエントリが決定され（S33）、TLB仮想ページメモリ２１とTLB物理ページメモリ２２のみ、内容が書き換えられる（S34）。
【０１２６】
そして、その追い出すTLBエントリの旧データキャッシュ状態ビットＫを「１」にセットし（S35）、処理は終了する。  
以上のようにして、TLB書き換え時には、追い出されるTLBエントリのページについての旧データキャッシュ状態ビットKは「１」にセットされる。
【０１２７】
図１０は、タスク切り替えのオーバーヘッドを低減する構成を取った場合の、メモリリード時の処理を示すフローチャートである。図１０において、図3と同じ処理については、同じステップ番号を付して、図１０は、図3と異なる点を主に説明する。
【０１２８】
図１０に示すように、メモリリードが開始されると、仮想インデックスで、ステートメモリ２４とデータメモリ２３とTLB仮想ページメモリ２１へのアクセスが行われる（S1）。TLB仮想ページメモリ２１がヒットしなかった時（S2、NO）は、リード時のTLB登録処理が実行される（S3）。TLBがヒットした時（S2、YES）は、旧データキャッシュ状態ビットKが「１」であるか否かが判断される（S51）。「１」でない場合は、S4に処理は移行する。「１」である場合は、ページに含められるキャッシュラインの状態がModifiedであるか否かが判断される（S52）。Modifiedでない場合（S52、NO）は、処理はS54に移行する。状態がModifiedで有るキャッシュラインが存在する場合（S52、YES）は、TLB物理ページCAM２５の対応するエントリの物理ページRPから物理アドレスRAを生成し、データメモリ２３上のデータの書き戻し処理が行われて（S53）、処理はS54に移行する。さらに、TLBヒットに対応したTLB物理ページメモリ２２のエントリに登録されている物理ページRPが、TLB物理ページCAM２５の対応するエントリに登録され（S54）、旧データキャッシュ状態ビットKを「０」にセットする（S55）。上述の操作後、その仮想ページはリード可能かの判断がされる（S4）。仮想ページがリード可能の場合（S4、YES）は、キャッシュリードが行われる（S5）。仮想ページがリード可能でない場合（S4、NO）は、割込処理によりプロテクト違反をCPU１１通知し（S6)、OSによる例外処理が実行される。
【０１２９】
以上のように、本実施の形態のタスク切り替え処理によれば、タスク切り替えが発生して、TLB書き換え処理を行なった場合、TLB仮想ページメモリ２１とTLB物理ページメモリ２２に対する書き換え処理は行われるが、データメモリ２３のデータの書き戻しと、TLB物理ページCAM２５のデータの書き換えは行わない。その後、TLB書き換えを行なった仮想アドレスに対する対するCPU１１からの最初のアクセスがあったときに、書き換えられたデータが存在していた場合に、TLB物理ページCAM２５に残っている物理アドレス（すなわち先の物理アドレス）を用いて、DRAM１３への書き戻しが行われる。その書き戻しの後、TLB物理ページCAM２５に、TLB物理ページメモリ２２に登録されている物理アドレス（すなわち後の物理アドレス）の書き換えが行われる。  
以上のようなTLBミス処理とキャッシュリード処理を行うことによって、タスク切り替えの応答性を向上させると共に、タスク切り替え時にTLBエントリの更新を行なったものの、その領域にメモリアクセスをしなかった場合のオーバーヘッドを削減することができる。
【０１３０】
（マルチプロセッサシステムへの適用）
複数のプロセッサからなるマルチプロセッサシステムあるいはマルチコアシステムにおいて、各プロセッサに、上述したキャッシュメモリを適用した例を説明する。
【０１３１】
図１１は、複数のプロセッサを有するマルチプロセッサシステム１Aの構成を示すブロック図である。図１１に示すように、複数のプロセッサP0、P1、・・・が、バス１４を介して互いに接続されている。さらに、主メモリとしてのDRAM１３も、メモリコントローラ１５を介してバス１４に接続されている。プロセッサシステム１Aは、各プロセッサがCPU１１とキャッシュメモリ１２を有し、CPU１１がキャッシュメモリ１２を介してDRAM１３にアクセスできるように、構成されている。
【０１３２】
また、バス１４は、コヒーレンシを保持するスヌープ機構１６を有するバスであり、各プロセッサとバスコントローラ１５には、スヌープ機構用、もしくはディレクトリ方式コヒーレンシ管理機構用のハードウェア回路１６ａが設けられている。以下、スヌープ機構の例を示すが、ディレクトリ方式のコヒーレンシ管理でもほぼ同様の仕組みを実装できる。また、図１１には明示されていないが、ハードウェア回路１６ａは各プロセッサが出力した「書き戻しデータ受け取りレスポンス」に関し、「最終的にどのプロセッサが書き戻しデータを受け取るか」を決めるアービタが内蔵されている。  図１１に示すような構成において、各プロセッサは、仮想アドレス空間の仮想アドレスを用いてキャッシュメモリ１２にアクセスできる。さらに、キャッシュメモリ１２は、CPU１１からのアクセスについてTLBミス処理及びキャッシュミス処理を行いながら、DRAM１３からのデータの読み出しと、DRAM１３へのデータの書き込みを行う。
【０１３３】
以下の説明では、２つのプロセッサの場合について説明するが、３以上のプロセッサであっても同様の作用である。  
図１２は、プロセッサにおけるキャッシュミス時の処理を示すフローチャートである。  
各プロセッサでは、TLB書き換え処理を行なったとき、キャッシュメモリ１２のTLB仮想ページメモリ２１とTLB物理ページメモリ２２に対する書き換え処理は行われるが、データメモリ２３のデータの書き戻しと、TLB物理ページCAM２５のデータの書き換えは行わない。
【０１３４】
いま、プロセッサP1において、キャッシュミスが発生したとする。キャッシュミスが発生すると、リフィルのために、キャッシュメモリ１２は、TLBの物理ページメモリ２２の物理ページ番号RPから物理アドレスRAを生成して、DRAM１３へのメモリアクセスを行う（S201）。
【０１３５】
DRAM１３へのメモリアクセスは、スヌープ機構１６によって監視されている。メモリアクセスが発生すると、スヌープ機構はスヌープレスポンスを返す。プロセッサP1はその結果、そのメモリアクセスに係る物理アドレスRAに対応する有効な物理ページRPが、DRAM１３ではなく、バス１４上の他のどれかのプロセッサのTLB物理ページCAM２５の物理ページRPに一致するか否かを判断する（S202）。
【０１３６】
例えば、プロセッサP0に、その有効な物理ページRPが有ったとする。このような場合が生じ得るのは、プロセッサP0において変更されたデータは、TLB書き換え時にデータの書き戻しがされなければならないが、データの書き戻しがされるまでは、データはデータメモリ２３に残っているからである。
【０１３７】
従って、物理アドレスRAに対応する有効な物理ページRPが他のどれかのプロセッサのTLB物理ページCAM２５の物理ページRPに一致する（S202、YES）と、その一致したプロセッサ（ここではプロセッサP0）は該当するキャッシュラインについて、ステートメモリ２４を引いて、キャッシュステートがInvalidでなければ、データメモリ２３から対応するデータが転送されるので、プロセッサP1のキャッシュメモリ１２は、データを、プロセッサP0から取得する（S203）。プロセッサP1は、図１１において、矢印A2で示すルートでデータを取得することができる。
【０１３８】
この場合、プロセッサP1からDRAM１３へのアクセスは発生しないので、プロセッサP1は、データをプロセッサP0からのデータ転送により高速に取得できる。よって、タスク切り替えの応答性が向上したプロセッサを実現することができる。
【０１３９】
以上のように、本実施の形態のタスク切り替え処理によれば、TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図ることができるキャッシュメモリを用いながら、さらにタスク切り替えの応答性が向上した仮想アドレスキャッシュメモリ及びプロセッサを実現することができる。
【０１４０】
ＩＩ）マルチプロセッサシステムにおけるデータの書き戻し処理
次に、本実施の形態に係るマルチプロセッサシステムにおけるデータの書き戻し処理について説明する。  
マルチプロセッサシステムあるいはマルチコアシステムに含まれる各プロセッサに、上述したキャッシュメモリを適用することができる。
【０１４１】
図１１に示した構成を有するマルチプロセッサシステム１Aにおいて、あるプロセッサが、DRAM１３に対するデータの書き戻し（すなわちキャストアウト）を行う場合がある。例えば、あるプロセッサの仮想アドレスキャッシュメモリ１２において、キャッシュミスが発生したときに、そのプロセッサは、データメモリ２３のデータを主メモリであるDRAM１３に書き戻す場合である。
【０１４２】
従来は、主メモリへのデータの書き戻しは必ず行わなければならず、そのため、主メモリへのデータの転送量が多くなると、システム全体のパフォーマンスの低下と転送処理のための消費電力の増加が必ず発生していた。
【０１４３】
そこで、本実施の形態は、書き戻しデータが、主メモリへではなく、他のプロセッサのキャッシュメモリへ転送されるようにして、システム全体のパフォーマンスの低下を抑え、転送処理のための消費電力の低減を図るものである。
【０１４４】
ここで、例えば、プロセッサP1でキャッシュミスが発生して、プロセッサP1がある物理アドレスRAのデータの書き戻しを行うとする。プロセッサP1は、DRAM１３へのデータの書き戻し処理に関するデータをバス１４に出力する。  
バス１４上のそのデータは、スヌープ機構１６により監視されており、スヌープ機構１６により、そのデータが他のプロセッサに通知される。
【０１４５】
例えば、プロセッサP0は、その通知に基づいて、図１３の処理を実行する。図１３は、キャッシュミス時の書き戻し処理の例を示すフローチャートである。図１３の処理は、キャッシュメモリ１２上のハードウェア回路によって実行される。さらに、以下に説明するスヌープ機構１６の機能は、スヌープ機構１６の機能を拡張することによって、実現される。すなわち、一貫性（すなわちコヒーレンシ）保持プロトコル機構であるスヌープ機構１６は、DRAM１３への書き戻しデータを監視し、書き戻しデータを検出したときは、書き戻しデータを発生したプロセッサ以外のプロセッサに書き戻しデータを通知する。
【０１４６】
プロセッサP0では、バス１４を介して受信したその通知に含まれる書き戻しデータに基づいて、書き戻し先の物理アドレスRAの物理ページRPが、自己のTLB物理ページCAM２５中の物理ページRPと一致するものがあるか否かが判断される（S301）。  
一致するものがある場合（S301、YES）は、TLB仮想ページメモリ２１の対応するエントリが有効状態か否かが判断される（S302）。
【０１４７】
有効状態である場合（S302、YES）は、キャッシュステートメモリ２４の対応するエントリがInvalidであるか否かが判断される（S303）。  
Invalidである場合（S303、YES）、書き戻しデータを受け取れるプロセッサの中で、自プロセッサP0が最も優先順位が高いかが判断される（S303A）。自プロセッサP0が最も優先順位が高い場合（S303A,YES）、書き戻しデータをキャッシュメモリ１２の対応するデータメモリ２３上に転送し、キャッシュステートをInvalidからModifiedに変更する（S304）。  
S301,S302,S303あるいはS303AにおいてNOの場合は、処理は何もしないで終了する。なお、MOESIなど、dirty shared を許すプロトコルを採用する場合には、S３０３Aの判定で「最も優先順位の高いプロセッサ」はS３０４において「書き戻しのデータを対応するキャッシュ上に転送し、キャッシュステートを Ownedに変更する」、「最も優先順位が高いプロセッサ以外」では「S３０４において「書き戻しのデータを対応するキャッシュ上に転送し、キャッシュステートを Shared に変更する」など、コヒーレンスプロトコルに応じた最適化が可能であることは言うまでもない。
【０１４８】
すなわち、同じ物理アドレスがTLB物理ページCAM２５中にあって、TLB仮想ページメモリ２１も有効であって、かつデータメモリ２３の対応するデータがInvalidである場合は、プロセッサP0のキャッシュメモリ１２上には、対応するエントリが存在するにも拘わらずデータが格納されていない領域が、存在することになる。そのような場合は、プロセッサP0では、その書き戻しデータを、キャッシュメモリ１２に転送させて格納する。
【０１４９】
次に、主メモリのための制御部としてメモリコントローラ１５における処理について説明する。  
図１４は、書き戻し時のメモリコントローラ１５の処理を示すフローチャートである。  
メモリコントローラ１５は、プロセッサP1からの書き戻しデータを取り込む（S311）。
【０１５０】
次に、メモリコントローラ１５は、その書き戻しデータの取り込みを行ったか否かを、スヌープ機構１６を介して全プロセッサに問い合わせる（S312）。スヌープ機構１６は、その問い合わせに応じて、レスポンスを生成してメモリコントローラ１５に返す。すなわち、一貫性保持プロトコル機構であるスヌープ機構１６は、書き戻しデータが他のプロセッサのキャッシュメモリに取り込まれたことを、メモリコントローラ１５からの問い合わせに応じて通知する。  
そして、メモリコントローラ１５は、問い合わせに対するレスポンスに基づいて、いずれかのプロセッサがキャッシュメモリ１２にそのデータの取り込んだか否かを判断する（S313）。
【０１５１】
いずれかのプロセッサが、キャッシュメモリ１２にそのデータの取り込みを行っていない場合（S313、NO）は、DRAM１３へデータの書き込み処理を行う（S314）。  
いずれかのプロセッサがキャッシュメモリ１２にそのデータの取り込みを行っていた場合（S313、YES）は、メモリコントローラ１５は処理を終了する。
【０１５２】
図１５は、データの書き戻しの状態を説明するための図である。図１５に示すように、プロセッサP1からの書き戻しデータは、S313でNOの場合は、点線の矢印A3で示すように、DRAM１３へ転送されるが、S313でYESの場合は、実線の矢印A4で示すように、プロセッサP0に転送される。
【０１５３】
DRAM１３へのデータの書き込み処理が発生すると、システム全体のパフォーマンスの低下と転送処理のための消費電力の増加に繋がる。本実施の形態によれば、書き戻しデータがいずれかのプロセッサのキャッシュメモリ１２に取り込まれているときは、メモリコントローラ１５は主メモリへのデータの書き戻しを行わない。
【０１５４】
よって、本実施の形態のマルチプロセッサシステムによれば、上述したデータの書き戻し処理を行うことによって、各プロセッサによるデータの書き戻し処理に基づく主メモリへアクセス量を低減させることができる。  
TLBの機能をキャッシュメモリ上で実現して、回路量の削減を図ることができ、さらに各プロセッサによるデータの書き戻し処理に基づく主メモリへのアクセス量を低減させることができるマルチプロセッサシステムを実現することができる。
【０１５５】
なお、上述した例では、メモリコントローラ１５は、書き戻しデータがいずれかのプロセッサのキャッシュメモリ１２に取り込まれているときは、主メモリへのデータの書き戻しを行わないが、主メモリへの書き戻しを行うようにしてもよい。
【０１５６】
ＩＩＩ）DMA処理
次に、本実施の形態に係るDMA処理について説明する。  
図１６は、複数のプロセッサを有するマルチプロセッサシステム１Bの構成を示すブロック図である。図１６において、図１１と同様の構成要素は、同じ符号を付して説明は省略する。図１６に示すようなマルチプロセッサシステム１Bにおいて、各プロセッサは、DRAM１３との間でDMAによるデータ転送を行うことができる。そのために、各プロセッサには、DMAコントローラ（以下、DMACと略す）２６が設けられている。DMAC２６は、TLBを含むメモリ管理ユニット（以下、MMUと略す）を有するDMACである。
【０１５７】
従来は、物理アドレスを用いて転送元アドレスと転送先アドレスを指定することによって、プロセッサとDRAM１３間でDMA転送が行われるが、ここでは、DMAC２６は、仮想空間の仮想アドレスを用いてDRAM１３とキャッシュメモリ１２Aとの間でDMA転送を行う。
【０１５８】
図１７は、DMA転送を行う機能に対応したキャッシュメモリの構成図である。図１７において、図２と同じ構成要素は、同じ符号を付し、説明は省略する。  
図１７に示すキャッシュメモリ１２Aは、仮想アドレスを入力する入力部として、マルチプレクサ（MUX）４１とアービタ４２を有する。アービタ４２はマルチプレクサ４１に接続されている。アービタ４２は、CPU１１とDMAC２６からの信号を監視し、キャッシュメモリ１２Aへ入力される仮想アドレスが、CPU１１から供給されたものか、DMAC２６から供給されたものかを判定し、その判定結果に応じて、入力される仮想アドレスを選択するように、選択信号SSをマルチプレクサ４１に出力する。マルチプレクサ４１は、選択信号SSに基づいて、入力信号を切り替える。すなわち、マルチプレクサ４１には、CPU１１とDMAC２６からの仮想アドレスEAが入力され、選択されたいずれか一方の仮想アドレスEAがキャッシュメモリ１２Aに入力されるように構成されている。
【０１５９】
（GET操作）
あるプロセッサが、主メモリであるDRAM１３からDMA転送によりキャッシュメモリ１２Aにデータを転送するGET操作ついて説明する。図１６のDMAC２６は、メモリ管理ユニット（以下、MMUと略す）を有する。転送元アドレス（ソースアドレス）SAと転送先アドレス（デスティネーションアドレス）DAが、仮想アドレスとしてDMAC２６に入力される。
【０１６０】
例えば、プロセッサP0のCPU１１が、仮想アドレスの転送元アドレスSAと転送先アドレスDAをDMAC２６に供給する。すると、DMAC２６は、スヌープ方式のキャッシュコヒーレンシ機構とMMUを利用して、転送元アドレスSAの示す最新のデータを保持する物理アドレスの記憶領域を捜し出し、自己のキャッシュメモリ１２中の転送先アドレスDAへ、DMA転送によりデータを転送する。
【０１６１】
転送されたデータは、プロセッサP0のキャッシュメモリ１２Aのデータメモリ２３の転送先アドレスDAに対応する記憶領域が確保されて、その記憶領域に書き込まれる。また、キャッシュメモリ１２Aにその転送先アドレスDAに対応するエントリがあれば、その記憶領域に、転送されたデータが書き込まれる。そして、キャッシュメモリ１２Ａでは、ステートメモリ２３中のその転送データが書き込まれた領域に対応するエントリに、ダーティビットが書かれる。
【０１６２】
以上のようにGET操作が行われ、転送データがキャッシュメモリ１２Aに記憶されることによって、CPU１１は読み出して処理することができる。また、既にキャッシュメモリ１２Aに対応する記憶領域が存在する場合は、キャッシュメモリ１２Aに存在する他のデータが追い出されることがない。
【０１６３】
よって、DMA転送終了時にGET操作の転送先アドレスDAのデータがキャッシュメモリ１２Aに存在するので、それ以降のプロセッサによるアクセスにおいて、キャッシュヒット率が高くなることが期待できる。
【０１６４】
次に、GET操作の処理について具体的に説明する。  
図１８は、DMAによるGET操作の処理を示すフローチャートである。  
図１８に示すように、まず、DMAC２６は、自己のMMUを用いて、GET操作における仮想アドレスである転送元アドレスSAを変換して物理アドレスRAを取得する（S401）。CPU１１上で実行されるプログラム中に記載されたDMA処理は、仮想アドレスで記述されているので、DMAC２６において仮想アドレスから物理アドレスに変換される。
【０１６５】
DMAC２６は、システムバスであるバス１４を経由してDRAM１３から、S401で取得したGET操作における物理アドレスである転送元アドレスSA上のデータを得る（S402）。
【０１６６】
次に、キャッシュメモリ１２Aには、DMAC２６からの仮想アドレスである転送先アドレスDAが入力されて、対応するデータメモリ２３中の記憶領域に転送データが書かれる（S403）。S403における処理は、図７のメモリライトの処理と同様である。キャッシュメモリ１２Aでは、メモリライトの処理において、ステートメモリ２３のその転送データが書き込まれた領域に対応するエントリに、ダーティビットが書かれる。
【０１６７】
そして、DMAC２６は、指定された転送サイズ分のデータを送ったか否かを判定する（S404）。  
指定された転送サイズ分のデータが送られていなければ（S404、NO）、処理はS401に戻る。指定された転送サイズ分のデータが送られていれば（S404、YES）、処理は終了する。DMA転送はキャッシュラインサイズ単位でデータ転送を行うので、128バイトのデータ毎にS404の判断が行われる。
【０１６８】
以上のようなGET操作により、キャッシュメモリ１２Aに、キャッシュメモリサイズ内のデータを転送することができる。  
したがって、あるプログラムがキャッシュメモリ１２Aのメモリサイズ以下のプログラムであって、そのプログラム自体が仮想アドレスで実行されることが想定されていない物理アドレス空間下で実行されるものであっても、本実施の形態における仮想アドレスキャッシュメモリ１２Ａを利用して実行させることができる。例えば、キャッシュメモリ１２Aのメモリサイズは256KBであり、そのプログラムも256KBである場合、そのプログラムのアドレスを仮想アドレス空間中の256KBの範囲内の仮想アドレスに変換することにより、そのプログラムを、本実施の形態のプロセッサにおいて実行させることができる。そのプログラムは、キャッシュメモリ１２AにDMA転送でGETされて、実行される。
【０１６９】
（PUT操作）
次に、PUT操作について説明する。  
あるプロセッサが、キャッシュメモリ１２AのデータをDRAM１３にDMA転送するPUT操作を行う場合、まず、転送元アドレスSAのキャッシュメモリ１２Aのデータが最新のデータであるか否かがキャッシュステートメモリ２４の状態を確認することによって行われ、最新でない場合は、一貫性保持プロトコルであるスヌープ機構１６を用いて確認する。DMAC２６は、転送元アドレスSAの最新のデータを読み出し、転送先アドレスDAにDMA転送を行う。
【０１７０】
転送元アドレスSAのデータエントリがキャッシュメモリ１２A上に存在する場合は、転送元アドレスSAのデータはキャッシュメモリ１２Aのデータを用いる。しかし、キャッシュメモリ１２A上に転送元アドレスSAの最新データがない場合もある。その場合、DMAC２６は、バス１４を経由してDRAM１３から値を取り出すが、キャッシュメモリ１２A上にはそのエントリを置かず、データのみを取得する。
【０１７１】
また、転送先アドレスDAも仮想アドレスであるので、転送先アドレスDAの最新データが、バス１４上のキャッシュ一貫性プロトコルを用いて、もし、DRAM１３に対応するキャッシュメモリ１２Aにあれば、そのキャッシュメモリ１２Aの対応するデータをinvalidにすると共に、その転送データをDRAM１３に書き込むか、あるいは、他のプロセッサのキャッシュメモリ１２Aのエントリを更新して転送データをそのデータメモリ２３に書き込む。
【０１７２】
以上のようにすることで、キャッシュメモリ１２A上に転送元アドレスSAの最新データがない場合は、キャッシュメモリ１２Aに既に存在するエントリを追い出すことをせずに、PUT操作を実行する。
【０１７３】
図１９は、DMAによるPUT操作の処理を示すフローチャートである。  
図１９に示すように、まず、キャッシュメモリ１２Aのデータメモリ２３から、仮想アドレスである転送元アドレスSAを読み出す(S411)。S411における処理は、図３のメモリリードの処理と同様である。
【０１７４】
キャッシュメモリ１２Aにおいて、キャッシュヒットがあったか、否かが判断される（S412）。  
キャッシュヒットがあれば（S412、YES）、キャッシュリードの処理が実行される（S413）。S413における処理は、図６のキャッシュリードの処理と同様である。S413の後に、処理はS416に移行する。
【０１７５】
キャッシュヒットがなければ（S412、NO）、DMAC２６は自己のMMUを用いて、仮想アドレスである転送元アドレスSAを変換して物理アドレスRAを取得する（S414）。  
DMAC２６は、バス１４を経由してDRAM１３から、S414で取得した物理アドレスである転送元アドレスSA上のデータを得る（S415）。
【０１７６】
次に、DMAC２６は自己のMMUを用いて、仮想アドレスである転送先アドレスDAを変換して物理アドレスRAを取得する（S416）。  
DMAC２６は、バス１４を経由してDRAM１３から、S416で取得した物理アドレスである転送先アドレスDA上にデータを書く（S417）。
【０１７７】
そして、DMAC２６は、指定された転送サイズ分のデータを送ったか否かを判定する（S418）。  
指定された転送サイズ分のデータが送られていなければ（S418、NO）、処理はS411に戻る。指定された転送サイズ分のデータが送られていれば（S418、YES）、処理は終了する。DMA転送は、キャッシュラインサイズ単位でデータ転送を行うので、128バイトのデータ毎にS418の判断が行われる。
【０１７８】
（プリフェッチの場合）
ここでは、キャッシュメモリ１２Aにデータをプリフェッチする場合、すなわちDMA転送における転送元アドレスSAと転送先アドレスDAが同じ場合を説明する。
【０１７９】
例えば、キャッシュメモリ１２A中の仮想アドレスのデータがinvalidである場合、予め最新のデータをキャッシュメモリ１２Aに転送しておき、CPU１１はその転送後、直ぐにそのデータを利用できるようにしたい場合がある。  
この場合、invaildの仮想アドレスのデータを更新するので、DMA転送では転送元アドレスSAと転送先アドレスDAが同じとなる。その結果、DMA転送によってキャッシュメモリ１２Ａのその仮想アドレスに最新のデータが転送される。
【０１８０】
図２０は、プリフェッチに係るGET操作の処理を示すフローチャートである。  
図２０に示すように、まず、DMAC２６は、転送元アドレスSAと転送先アドレスDAが同じ仮想アドレス（EA）か否かを判定する（S421）。一致しないとき（S421、NO）は、処理は図１８のGET操作の処理に移行する。
【０１８１】
一致したとき（S421、YES）は、処理はメモリリード２の処理が実行される（S422）。  
そして、DMAC２６は、指定された転送サイズ分のデータを送ったか否かを判定する（S423）。  
指定された転送サイズ分のデータが送られていなければ（S423、NO）、処理はS421に戻る。指定された転送サイズ分のデータが送られていれば（S423、YES）、処理は終了する。
【０１８２】
図２１は、図２０のS422のメモリリード２の処理を示すフローチャートである。図２１は、図３のメモリリードの処理と略同じ内容であり、同じ処理については、同じステップ番号を付し、説明は省略する。図２１において図３と異なる点は、キャッシュリードの処理（S5）が、次に説明するキャッシュリード２の処理（S431）に変わったことである。さらに、メモリリードが、DMA転送のPUT操作のソース（転送元アドレスSA）に対するものか否かが判定される（S432）。DMA転送のPUT操作のソースに対するものであれば（S432、YES）、処理は終了し、そうでなければ、処理は、ステップS4に移行する。
【０１８３】
図２２は、図２１のS431のキャッシュリード２の処理を示すフローチャートである。図２２は、図６のキャッシュリードの処理と略同じ内容であり、同じ処理については、同じステップ番号を付し、説明は省略する。図２２において図６と異なる点は、図６におけるS49とS50が無いことである。これらの処理が無いのは、DMA転送において転送元アドレスSAと転送先アドレスDAが同じ場合、すなわちプリフェッチ処理においては不要だからである。
【０１８４】
また、DMAによるGETとPUTの操作がされる場合、TLB登録処理（図４）、キャッシュリード処理（図６）及びキャッシュライト処理（図８）の内容が次のように変更される。
【０１８５】
図２３は、DMA処理を含む場合のTLB登録処理の流れを示すフローチャートである。図２３は、図４のTLB登録の処理と略同じ内容であり、同じ処理については、同じステップ番号を付し、説明は省略する。図２３において図４と異なる点は、S16の後に、そのエントリに対応するアドレスはDMAのPUT操作のソースであるか、すなわち転送元アドレスであるか否かの判断がされる点である（S441）。そのアドレスが転送元アドレスであるとき（S441、YES）、TLBミスとその物理ページ番号RPをDMAC２６へ通知し（S442）、 TLB登録処理は、終了する。そのアドレスが転送元アドレスでないとき（S441、NO）、処理はS17へ移行する。
【０１８６】
図２４は、DMA処理を含む場合のキャッシュリード処理を示すフローチャートである。図２４は、図６のキャッシュリードの処理と略同じ内容であり、同じ処理については、同じステップ番号を付し説明は省略する。図２４において図６と異なる点は、図６の処理がキャッシュコントローラにより実行されるのに対して、図２４の処理はDMAC２６により実行される点と、S44の後に、そのエントリに対応するアドレスはDMAのPUT操作のソースであるか、すなわち転送元アドレスであるか否かの判断がされる点である（スS451）。
【０１８７】
そのアドレスが転送元アドレスであるとき（S451、YES）、データメモリ２３のデータをDMAC２６に送り（S452）、処理は終了する。そのアドレスが転送元アドレスでないとき（S451、NO）、処理はS45へ移行する。
【０１８８】
図２５は、DMA処理を含む場合のキャッシュライト処理を示すフローチャートである。図２５は、図８のキャッシュライトの処理と略同じ内容であり、同じ処理については、同じステップ番号を付し説明は省略する。図２５において図８と異なる点は、図８の処理がキャッシュコントローラにより実行されるのに対して、図２５の処理はDMAC２６により実行される点と、S73の後に、そのキャッシュライトがDMACからの要求で全キャッシュラインへの書き込みであるか否かの判断がされる点である（S461）。
【０１８９】
そのキャッシュライトがDMAC２６からの要求で全キャッシュラインへの書き込みであるとき（S461、YES）、処理はS79へ移行する。そのキャッシュライトがDMAC２６からの要求で全キャッシュラインへの書き込みでないとき（S461、NO）、処理はS74へ移行する。
【０１９０】
また、S79の後のS81におけるデータの書き込み処理は、データがDMAC２６からの場合は、DMAC２６からのデータがキャッシュメモリ１２Aに書き込まれる（S462）。
【０１９１】
以上のように、キャッシュメモリと主メモリとの間のデータ転送を、DMA処理することにより、仮想アドレスでDMAを実行可能として、DMA転送時のキャッシュヒット率の高めることができる、及び、DMA転送後に対応するプロセッサがアクセスしたときのキャッシュヒット率を高めることができるプロセッサを実現することができる。
【０１９２】
ＩＶ）レベル２以上のレベルのキャッシュメモリへの適用
次に、本実施の形態に係るプロセッサについて説明する。ここでは、複数レベルのキャッシュを利用するマルチプロセッサシステムを例に挙げて説明する。  
図２６は、複数レベルのキャッシュメモリのプロセッサを有するマルチプロセッサシステム１Cの構成を示すブロック図である。図２６に示すように、マルチプロセッサシステム１Cは、それぞれがL1キャッシュ５１を有する複数のプロセッサP11,P12,・・と、複数のプロセッサのそれぞれのL1キャッシュ５１と接続された１つのL2キャッシュ５２と、そのL2キャッシュ５２と接続された主メモリとしてのDRAM１３とを含んで構成されている。マルチプロセッサシステム１Cが、全体で１つの半導体チップに形成されていてもよいし、一部が別の半導体装置に形成されていてもよい。
【０１９３】
複数レベルのキャッシュ（例えば、プロセッサがL1キャッシュとL2キャッシュ）を有するプロセッサの場合、従来はL2キャッシュにおけるエイリアスの発生を回避するために、L2キャッシュへのアクセスは物理アドレスで行われていた。また、L1キャッシュにおけるエイリアスの発生を回避するために、L1キャッシュのコヒーレンシ管理では、物理アドレスが使用されていた。
【０１９４】
このようなプロセッサにおいて、CPUによるL1キャッシュへのアクセスが発生すると、ほとんどの場合、L1キャッシュとは別に設けられているMMUのTLBへの参照が行われる。これは、L1キャッシュへのアクセス頻度が高いこと、および非特許文献１「Computer Architecture -- A Quantitative Approach -- Third Edition」の Figure 5.57 および Figure 5.58 に見られるように、L2 キャッシュのレイテンシは20サイクル程度以下であることが多く、L1ミスが発生したとき、すぐにL2をアクセスできるようにするためである。よって、プロセッサにおけるTLBのハードウェアの消費電力が大きいという問題があった。  
そこで、本実施の形態は、TLBハードウェアの消費電力を小さくできるプロセッサ及びプロセッサシステムを提供するものである。
【０１９５】
図２７は、L2キャッシュ５２の構成図である。図２７において、図１７と同じ構成要素は、同じ符号を付し説明は省略する。  
図２７では、アービタ４２はマルチプレクサ４１に接続されている。アービタ４２は、各プロセッサからの信号を監視し、L2キャッシュ５２へ入力される仮想アドレスEAが、どのプロセッサから供給されたものかを判定し、その判定結果に応じて、入力される仮想アドレスEAを選択するように、選択信号SSをマルチプレクサ４１に出力する。マルチプレクサ４１は、選択信号SSに基づいて入力信号を切り替える。
【０１９６】
L1キャッシュ５１は、TLBのハードウェアを有しないキャッシュである。各プロセッサのCPUは、仮想アドレスを用いてL1キャッシュ５１にアクセスするが、L1キャッシュ５１は、TLBを含まないので、キャッシュミスの場合、L2キャッシュ５２へのアクセスは仮想アドレスにより行われる。L2キャッシュ５２は、上述したキャッシュメモリ１２等と略同様の構成を有し、仮想アドレスを用いてアクセスされ、物理アドレスによりDRAM１３にアクセスする。  
また、L2キャッシュ５２は、複数のプロセッサP11,P12,・・・のそれぞれのL1キャッシュ５１のためのキャッシュであるので、L2キャッシュ５２において、キャッシュデータをプロセッサ毎に対応して管理して識別するために、プロセス番号PIDはプロセッサ識別子の情報を含む。
【０１９７】
さらに、L2キャッシュ５２のキャッシュステートメモリ２４は、L2キャッシュ５２のキャッシュステートだけでなく、L1キャッシュ５１のキャッシュステートも管理する。  
そのために、複数のL1キャッシュ５１とL2キャッシュ５２との間でキャッシュデータのコヒーレンシを維持するための一貫性保持プロトコル機構であるスヌープ機構１６Aが、各プロセッサとL2キャッシュ５２との間に設けられている。  
よって、キャッシュステートメモリ２４は、さらに各L1キャッシュ５１に対応するキャッシュステートと各L1キャッシュ５１のウエイ情報を記憶する記憶領域を含むように拡張される。  
L2キャッシュ５２の動作は、図３から図１０のフローチャートに示した動作と同様である。  
L1キャッシュ５１のキャッシュヒット率が例えば９５％以上であれば、L2キャッシュ５２へのアクセス率は５％以下となる。よって、L2キャッシュ５２においてのみTLBが参照されるので、TLB参照時における消費電力は小さくなる。
【０１９８】
上述した例は、複数のプロセッサのそれぞれのL1キャッシュが１つのL2キャッシュに接続されるマルチプロセッサシステムである。しかし、１つのL1キャッシュと１つのL2キャッシュを有するプロセッサにおいて、そのL2キャッシュを上述した構成と同様にした場合においても、同様の効果を生じる。
【０１９９】
また、上述した例は、L1キャッシュとL2キャッシュの例であるが、L2キャッシュとL3キャッシュの間のように、レベル２以下の下位のキャッシュ間において、より下位のキャッシュに、上述したL2キャッシュ５２と同様の構成を有するようにしたプロセッサあるいはマルチプロセッサにおいても、同様の効果を得ることができる。
【０２００】
次に、上述したL2キャッシュ５２の構成の変形例を説明する。以下、各変形例では、上述したL2キャッシュ５２の構成と異なる点を主として説明し、同一の符号を付した構成要素についての説明は省略する。  
（変形例１）
変形例１に係る仮想アドレスキャッシュメモリの基本的な構成は、上述したL2キャッシュ５２と同じであるが、エイリアスを検出した場合の動作が異なる。
【０２０１】
実施の形態では、エイリアスが検出された場合、L2キャッシュ５２では、図４のステップS17以降に示すように、エイリアスを起こしたTLBエントリの無効化処理が行われた。  
これに対して、変形例１ではS21の処理は行わない。すなわち、エイリアスを起こしたTLBエントリの無効化は行わずに新しいエントリを登録する。変形例１では、同一プロセッサのキャッシュ、TLB内部でエイリアスは発生しているが、スヌーピングによるキャッシュコヒーレンス制御を同一プロセッサにも適用することでエイリアスを解決する。すなわち、エイリアスを起こしているアドレスはL2キャッシュ５２内で複数存在しているが、エイリアスを起こしているそれぞれのキャッシュラインにコヒーレンスプロトコルを適用することで、複数のキャッシュラインの状態のコヒーレンシが保持される。
【０２０２】
例えば、プロセスAが書き込んだ物理アドレスをプロセスBが読み出すと、以下のような動作が行われる。プロセスAが書き込んだ直後に同一プロセッサ上のプロセスBが読みだそうとしているケースを考える。プロセスAの仮想アドレスからみると、キャッシュステートはModifiedであり、プロセスBの仮想アドレスからみると、キャッシュステートはInvalidである。
【０２０３】
したがって、キャッシュミスなので、図６のS44に進んでDRAM１３へのアクセスが行われる。
【０２０４】
このDRAMへのアクセスに対して、スヌープが行われる。すなわち、図２のTLB物理ページCAM２５をアクセスし、プロセスAが管理するTLBエントリがヒットする。プロセスAが書き込んだキャッシュラインがアクセスされ、Modifiedレスポンスが返されて、データが出力される。プロセスAが管理するキャッシュラインはSharedステートになる。該プロセッサは、プロセスAが出力したModifiedレスポンスとデータを受け取る。リクエストを出したプロセスBが管理するキャシュラインが取り込まれ、キャッシュステートはSharedにされる。  
変形例１では、同一プロセッサ上で時分割で実行されているプロセスAとプロセスBが、あたかも別々のプロセッサで実行されているかのような動作をする。
【０２０５】
なお、変形例１の構成の場合、TLB物理ページCAM２５ではマルチヒットが許される。具体的には、TLB物理ページCAM２５のヒット出力は、エントリ毎に1ビットが割り当てられ、エンコードされない。また、TLB物理ページCAM２５がマルチヒットを許すことに対応して、キャッシュステートメモリ２４は、全エントリの同時アクセスを可能とする。具体的には、キャッシュステートメモリ２４は、SRAMではなく、通常のロジック回路により構成される。そして、キャッシュステートメモリ２４からの出力は、コヒーレントバスのステートのようにプライオリティーエンコーダなどでエンコードされる。ステートのエンコードには例えば、ステート毎に１ビットを割り当てるようにキャッシュステートをエンコードし、ステートメモリ２４のエイリアスを発生している全てのエントリからの論理ORをとって、ステートメモリ２４としてのステートを得る、などの方法を用いても良い。
【０２０６】
変形例１の仮想アドレスキャッシュメモリによれば、L2キャッシュ５２の構成と同様の効果が得られると共に、エイリアスを起こしたTLBエントリの無効化処理を省くことができる。
【０２０７】
（変形例２）
変形例２に係る仮想アドレスキャッシュメモリの基本的な構成は、上述したL2キャッシュ５２と同じであるが、変形例２ではエイリアスを起こしている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で管理していたページ情報を10ビット、キャッシュラインの状態も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ビット
であり、この構成で必要なのは物理ページ情報であり仮想ページ情報は不要なので、
L1Tagメモリサイズ
= ( Tagビット数 ) * エントリ総数
+ (状態ビット数*ページ内のライン数*エントリ総数
= ( 22 ビット*64) ＋ 10 ビット*64 * 32 )
= 1408 ＋ 20480 ビット
= 21888 ビット
となる。
【０２１３】
よって、次の条件、
L1サイズ 256KB、full set associative(ただし、管理は4KB)、
TLBエントリ数 64エントリ full associative、
最小ページサイズ 4KB、
仮想アドレス／物理アドレスサイズ 32bit/40bit、
L1ラインサイズ 128バイト、
において、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が呼び出されるものとする。キャッシュはライトアロケート、ライトバック方式を採用しているものとする。
【０２１７】
以下、図２９と図３０を用いて、共有メモリリードと共有メモリライトを説明する。図２９は、変形例３における共有メモリリード時のフローチャートである。図３０は、変形例３における共有メモリライト時のフローチャートである。
【０２１８】
図２９に示すように、メモリリードが開始されると、仮想インデックスで、TLB仮想ページメモリ２１Aとデータメモリ２３Aとステートメモリ２４Aへのアクセスが行われる（S201）。TLB仮想ページメモリ２１Aがヒットしなかった時（S202、NO）は、リード時のTLB登録処理が実行される。TLB仮想ページメモリ２１Aがヒットした時（S202、YES）は、処理はS212に進む。
【０２１９】
具体的には、登録するPTE（ページテーブルエントリ）が、DRAM１３から読み出される（S203）。読み出したPTE（ページテーブルエントリ）が、DRAM１３に存在するかが判断される（S204）。PTEが存在しない場合（S204、NO）は、OSに例外発生の通知が行われる（S205）。  
PTEが存在する場合（S204、YES）は、このプロセスに読み出しを許可するか否かが判断される（S206）。読み出しを許可しない場合（S206、NO）は、処理はS205に進む。読み出しを許可する場合（S206、YES）は、PTEのreferenceビットを立て（S207）、処理はS208に進む。
【０２２０】
そして、読み出したPTEと有効な全TLBエントリのいずれかと、物理ページ番号が一致したか否かが判断される（S208）。物理ページ番号が一致しない場合（S17、NO）は、TLBミス処理が実行され（S209）、新しいPTEがTLBエントリとして登録され（S210）、処理はS212に進む。
【０２２１】
また、物理ページ番号が一致した場合（S208、YES）は、物理ページ番号が一致したTLBエントリの仮想ページ番号、プロセス番号及びプロテクション情報の書き換えが行われ（S211）、処理はS212に進む。  
S212では、その仮想ページはリード可能かの判断がされる。仮想ページがリード可能でない場合（S212、NO）は、割込処理によりプロテクト違反をCPU１１通知し（S213)、OSによる例外処理が実行される。
【０２２２】
仮想ページがリード可能の場合（S212、YES）は、キャッシュリードが行われる。すなわち、キャッシュヒットしているか否かが判断される（S214）。キャッシュヒットしていない場合（S214、NO）は、TLBの物理ページ番号から物理アドレスを生成してメモリアクセス要求を発行する（S215）。そして、得られたデータをキャッシュメモリに取り込む（S216）。
【０２２３】
メモリアクセス要求は、メモリ、および他のプロセッサでスヌープされる。メモリアクセス要求をスヌープしたプロセッサは、自分の管理するキャッシュ状態をチェックし、キャッシュ状態が Modified の場合には、スヌープ応答として Modified レスポンス、キャッシュ状態が Exclusive または Shared の場合には Shared レスポンスを返すので、要求を出力したプロセッサはスヌープ応答に応じてキャッシュステートメモリ２４Aの状態を更新する。すなわち、スヌープ応答が Shared レスポンスまたは Modifeid レスポンスであれば（S217、YES）、キャッシュステートメモリ２４Aにある要求したキャッシュラインの状態を “Shared” に（S218）、スヌープ応答が Shared レスポンスもしくは Modified レスポンスのいずれでもなければ（S217、NO）、要求したキャッシュラインの状態を “Exclusive” に変更する（S219）。そして、CPU１１へのデータの送信が行われる（S220）。
【０２２４】
キャッシュヒットしている場合（S214、YES）は、処理は、S217に進む。
【０２２５】
図３０に示すように、メモリライトが開始されると、仮想インデックスで、TLB仮想ページメモリ２１Aとデータメモリ２３Aとステートメモリ２４Aへのアクセスが行われる（S221）。TLB仮想ページメモリ２１Aがヒットしなかった時（S222、NO）は、ライト時のTLB登録処理が実行される。
【０２２６】
TLBがヒットした時（S222、YES）は、TLBヒットの判断となり、その仮想ページはライト可能かの判断がされる（S232）。ライト可能の場合（S232、YES）は、その仮想ページのDirtyビットは立っているか否かが判断され（S234）、その仮想ページのDirtyビットは立っていなければ（S234、NO）、TLBエントリとDRAM１３上のPTEにDirtyビットを立て、キャッシュライトが行われる（S236）。その仮想ページのDirtyビットは立っていれば（S234、YES）、キャッシュライトが行われる（S236）。
【０２２７】
また、その仮想ページがライト可能でない場合（S233、NO）は、割込処理によりプロテクト違反をCPU１１に通知し（S233)、OSによる例外処理が実行される。
【０２２８】
TLBがヒットしなかった時（S222、NO）は、TLB登録処理が開始され、登録するPTEが、DRAM１３から読み出される（S223）。読み出したPTEが、DRAM１３に存在するかが判断される（S224）。PTEが存在しない場合（S224、NO）は、OSに例外発生の通知が行われる（S226）。  
PTEが存在する場合（S224、YES）は、このプロセスに書き込みを許可するか否かが判断される（S225）。プロセスに書き込みを許可しない場合（S225、NO）は、処理はS226に進む。  
プロセスに書き込みを許可する場合（S225、YES）は、PTEのdirtyビットとreferenceビットを立てる（S227）。
【０２２９】
そして、読み出したPTEと有効な全TLBエントリのいずれかと、物理ページ番号が一致したか否かが判断される（S228）。物理ページ番号が一致しない場合（S228、NO）は、TLBミス処理が実行され（S229）、新しいPTEがTLBエントリとして登録され（S230）、処理はS236に進む。
【０２３０】
また、物理ページ番号が一致した場合（S228、YES）は、物理ページ番号が一致したTLBエントリの仮想ページ番号、プロセス番号及びプロテクション情報の書き換えが行われ（S231）、処理はS236に進む。  
図３１に示すように、TLBミス処理が開始されると、未使用のTLBエントリが存在するか否かが判断される（S241）。未使用のTLBエントリが存在する場合（S241、YES）、処理は終了する。  
未使用のTLBエントリが存在しない場合（S241、NO）、追い出すTLBエントリを決定し（S242）、追い出すTLBエントリにModifiedのキャッシュラインが存在するか否かが判断される（S243）。Modifiedのキャッシュラインが存在しない場合（S243、NO）は、処理は終了する。 
Modifiedのキャッシュラインが存在する場合（S243、YES）は、追い出すページの全てのModifiedのキャッシュラインをフラッシュし（S244）、処理は終了する。
【０２３１】
図３２に示すように、TLB登録処理が開始されると、登録するPTEが、DRAM１３から読み出される（S251）。読み出したPTEが、DRAM１３に存在するかが判断される（S252）。PTEが存在しない場合（S252、NO）は、OSに例外発生の通知が行われる（S253）。  
PTEが存在する場合（S252、YES）は、TLBミスの原因はストア命令であるか否かが判断される（S254）。
【０２３２】
ストア命令でない場合（S254、NO）は、このプロセスに読み出しを許可するか否かが判断される（S257）。読み出しを許可しない場合（S257、NO）は、処理はS253に進む。読み出しを許可する場合（S257、YES）は、PTEのreferenceビットを立て（S258）、処理はS259に進む。
【０２３３】
TLBミスの原因はストア命令である場合（S254、YES）は、このプロセスに書き込みを許可するか否かが判断される（S2555）。プロセスに書き込みを許可しない場合（S255、NO）は、処理はS253に進む。  
プロセスに書き込みを許可する場合（S255、YES）は、PTEのdirtyビットとreferenceビットを立てる（S256）。
【０２３４】
そして、読み出したPTEと有効な全TLBエントリのいずれかと、物理ページ番号が一致したか否かが判断される（S259）。物理ページ番号が一致しない場合（S259、NO）は、TLBミス処理が実行され（S260）、新しいPTEがTLBエントリとして登録される（S261）。
【０２３５】
また、物理ページ番号が一致した場合（S259、YES）は、物理ページ番号が一致したTLBエントリの仮想ページ番号、プロセス番号及びプロテクション情報の書き換えが行われる（S262）。
【０２３６】
以上のように、プロセスAがプロセスBに渡すデータの作成を開始するとき、仮想インデックスでTLBをアクセスするが、図３０のステップS222でTLBミスが発生するので、物理ページRP_1を仮想ページEP_1Aに関連付けるページテーブルエントリがTLBに呼び出される（S223）。このとき、TLBのValidビットがセットされ、ページ内の各キャッシュラインの状態はinvalidである。プロセスAに対しては、このページのwrite bitが立っているのでプロセスAはこのページに書き込むことができる。また、プロセス開始時にはこのページに対して書き込みは行っていないのでこのページはcleanであるが、メモリライトでアクセスしているのでページのdirtyビットをたてる（S235）。
【０２３７】
ライトアロケート方式なので、書き込まれるキャッシュラインをDRAM１３から読みだし(215)、このキャッシュラインの状態をvalid、dirtyとしてTLBを書き変える。以後、プロセスAによるキャッシュへの書き込みがキャッシュヒットするとキャッシュ上のデータの更新が行われ、キャッシュミスするとDRAM１３からデータをキャッシュにアロケートした上でキャッシュの更新が行われる。ライトアロケート方式であるので、キャッシュラインの一部のみ更新しても、該当キャッシュラインは最新の状態を保っている。
【０２３８】
プロセスAによるページへの書き込みが終わり、プロセスAからプロセスBに切り替わった状態を考える。プロセスBが立ち上がるまで、物理アドレスRP_1はアクセスされることなく、また、L1キャッシュからも追い出されていないものとする。プロセスBが物理アドレスRP_1をアクセスする（S201）と、プロセス番号が異なるため仮想アドレスはミスするが（S202）、物理アドレスはヒットする(S208)。そこで、TLBはページのvalid bitとdirty bitは書き変えずに、仮想ページ番号をEP_1AからEP_1Bに、プロセス番号をプロセスAからプロセスBに変更する、プロセスBに対してはwrite bitを落とすなど、プロセス切り替えのために必要な操作を行う(S211)。このとき、書き換えるのはページ情報のみで、キャッシュライン情報は書き変えないし、キャッシュフラッシュも行わない。
【０２３９】
プロセスBが仮想アドレス空間EP_1Bを指定して物理アドレス空間RP_1をアクセスする場合を考える。TLBのプロセス番号、仮想ページ情報が書き換えられているが、TLB上のページテーブルは保持されており、L1キャッシュの内容も保持されているので、プロセスAが書き込んだ情報をプロセスBはキャッシュから読みだすことができる。同一ページ内でプロセスAが書き込んでいない領域に関しては、キャッシュラインの状態がinvalidであるのでキャッシュミスは発生するものの、メモリからデータをキャッシュにアロケートすることで正しいデータを読み出すことができる。
【０２４０】
このように、プロセスBは不要なキャッシュミス、TLBミスを起こすことなく、プロセスAとの共用データをキャッシュから読みだすことができる。
【０２４１】
他のTLBミスのためにRP_1がリプレース対象になった場合など、TLBをinvalid する必要である場合には、以下の動作を行うことでシステムが正しい動作をすることを保証することができる。図３１は、変形例３におけるTLBミス処理時のフローチャートである。図３２は、変形例３におけるTLB登録処理時のフローチャートである。
【０２４２】
変形例３のTLBエントリを見ると、キャッシュラインがvaildか、そしてdirtyなデータを有するかが判る。そのキャッシュラインを主記憶に書き戻し、該当キャッシュラインのvalidビットを落とす（図３１のS244）。
【０２４３】
また、該当ページにdirtyなキャッシュラインがなくなるまでキャッシュフラッシュを行う。また、ページ内のキャッシュフラッシュが終わるとページをinvalidにする。リプレース対象のページテーブルエントリをTLBに登録する（図３０のS230）。
【０２４４】
変形例３では、TLBミスした場合に、「TLB上にRPがHitするエントリが存在するか」のチェックが追加され(S208,S228)、存在した場合にTLBエントリの一部を書き換える処理(S211,S231)が追加されている。従来はTLBミスが発生すると無条件でTLBミスとTLB登録という非常に重い処理が発生した。また、プロセスBが共有メモリへのアクセスを始めると、共有メモリ空間に対しては必ずプロセスAのTLBエントリの無効化と、そのエントリで示されるページ内のキャッシュフラッシュという重い処理が発生した。これに対し、変形例３によれば、TLBエントリを書き換えるという比較的軽い処理が呼び出される可能性が高くなっている。
【０２４５】
なお、変形例３において、キャッシュステートをページ単位で管理することも可能である。キャッシュステートをページ単位で管理する場合、キャッシュステートメモリ２４Aをページオフセット毎に持たずにページ全体で一組持つ構成にする。すなわち、ページオフセット(0~31)のデコードをせずに、コヒーレンシプロトコル、たとえばMESIの状態をページ全体で一組だけ持つ。ページ単位でキャッシュステートを管理する場合にも、データメモリは、図９（及び図１４）と同様にアドレス(11:0)のようにページ内のオフセットをデータメモリに与えてアクセスされる。すなわち、キャッシュのステートメモリ以外は全く同じ構成で実装することができる。  
以上のように、変形例３の仮想アドレスキャッシュメモリによれば、フルアソシアティブ方式においても、L2キャッシュ５２と同様の効果を得ることができる。
【０２４６】
（変形例４）
図３３は、変形例４に係るキャッシュメモリの構成図である。  
図３３に示すように、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であらかじめ不要なトランザクションを除外しているのでキャッシュに存在しないはずのトランザクションのキャッシュ状態をチェックする必要がないのでオーバーヘッドは小さい。
【０２５６】
以上のように、本変形例４の仮想アドレスキャッシュメモリによれば、フルアソシアティブ方式においても、L2キャッシュ５２と同様の効果を得ることができる。
【０２５７】
（変形例５）
図３４は、本変形例５に係るキャッシュメモリの構成図である。  
図３４に示すように、TLBCAM２１Cと、TLB物理ページメモリ２２Cと、データメモリ２３Cとを含んで構成されている。変形例５に係る仮想アドレスキャッシュメモリも、フルアソシアティブキャッシュである。  
変形例５では、TLB物理ページメモリ２２Cは、エントリ毎にキャッシュステートの情報を含む構成となっている。  
変形例５においても、L2キャッシュ５２と同様の効果を得ることができる。
【０２５８】
（変形例６）
変形例６のキャッシュメモリは、TLBは一次TLBのほかに、二次TLBを有する。二次TLBは、キャッシュとはリンクされていない、あるいは、ページテーブルのみで変換機構を有していないメモリである。  
二次TLBは、一次TLBと同じ4ウェイもしくはそれ以上のアソシアティブで、一次TLBより多いエントリ数かつ、一次TLBを包含する。そして、二次TLBでdirtyやreferenceが管理される。
【０２５９】
仮想キャッシュメモリの構成において、キャッシュは4ウェイセットアソシアティブである。キャッシュはページ単位でリプレース管理され、キャッシュステートはキャッシュラインで管理される。変形例６でのエイリアス対策は以下のように行う。
【０２６０】
例えば、仮想インデックスが一致したら、TLBのPID、仮想ページ番号、プロテクションなどが書き換えらえる。仮想インデックスが一致しなければ、エイリアスを起こしているTLBエントリはinvalidateせず、そのままにする。
【０２６１】
また、異なるインデックス間でエイリアスが発生しているが、キャッシュライン単位でコヒーレンシ制御を行う。エントリ間のコヒーレンシはプロセッサバスのコヒーレンシ機構を使う。その結果、エントリ間はコヒーレントとなる。  
変形例６においても、L2キャッシュ５２と同様の効果を得ることができる。
【０２６２】
（変形例７）
変形例７のキャッシュメモリは、TLB登録処理をおこなうとき、登録されたTLBエントリで示されるページを低優先順位でメモリから読みだす機構を設けたメモリである。  
低優先順位でのアクセス中にプロセッサが該当ページの中のキャッシュラインへのアクセスを行うとそのキャッシュラインは高優先順位でアクセスされる。  
変形例７においても、L2キャッシュ５２と同様の効果を得ることができる。
【０２６３】
以上のように、L2キャッシュ５２及びその変形例に係るL2キャッシュによれば、TLBハードウェアの消費電力を小さくすることができる。
【０２６４】
また、上述したように、各変形例も、L2キャッシュに適用した場合だけでなくレベル２以下の下位のキャッシュに適用することもでき、そのような場合も、適用したレベルにおいてのみTLBが参照されるので、TLB参照時における消費電力は小さくなる。  
また、図２６に示すようなマルチプロセッサシステムにおいて、各プロセッサのL1キャッシュのためのL2キャッシュを設けることによって、L1キャッシュにTLBを設ける必要がないだけでなく、複数のL1キャッシュで一つのL2キャッシュを共有するので、全体のハードウェア量の低減を図ることができる。
【０２６５】
以上説明した各キャッシュメモリは、ハードウェアのみで実装が可能であり、OSを含むソフトウェアからは通常のキャッシュ、TLBをもつプロセッサのように見せることが可能である。
【０２６６】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【０２６７】
１  プロセッサシステム、１A、１B、１C  マルチプロセッサシステム、１１  CPU、１２、１２A  キャッシュメモリ、１３  DRAM、１４  バス、１５  メモリコントローラ、１６  スヌープ機構、１６ａ  ハードウェア回路、２１  TLB仮想ページメモリ、２２  TLB物理ページメモリ、２３  データメモリ、２４  キャッシュステートメモリ、２６  MMU付きDMAC、３１  仮想アドレス、３２  物理アドレス、４１  マルチプレクサ、４２  アービタ、５１  L1キャッシュ、５２  L2キャッシュ
【図１】
2011198091.tif 000003
【図２】
2011198091.tif 000004
【図３】
2011198091.tif 000005
【図４】
2011198091.tif 000006
【図５】
2011198091.tif 000007
【図６】
2011198091.tif 000008
【図７】
2011198091.tif 000009
【図８】
2011198091.tif 000010
【図９】
2011198091.tif 000011
【図１０】
2011198091.tif 000012
【図１１】
2011198091.tif 000013
【図１２】
2011198091.tif 000014
【図１３】
2011198091.tif 000015
【図１４】
2011198091.tif 000016
【図１５】
2011198091.tif 000017
【図１６】
2011198091.tif 000018
【図１７】
2011198091.tif 000019
【図１８】
2011198091.tif 000020
【図１９】
2011198091.tif 000021
【図２０】
2011198091.tif 000022
【図２１】
2011198091.tif 000023
【図２２】
2011198091.tif 000024
【図２３】
2011198091.tif 000025
【図２４】
2011198091.tif 000026
【図２５】
2011198091.tif 000027
【図２６】
2011198091.tif 000028
【図２７】
2011198091.tif 000029
【図２８】
2011198091.tif 000030
【図２９】
2011198091.tif 000031
【図３０】
2011198091.tif 000032
【図３１】
2011198091.tif 000033
【図３２】
2011198091.tif 000034
【図３３】
2011198091.tif 000035
【図３４】
2011198091.tif 000036