(57)【要約】【課題】  キャッシュメモリのライトバック処理、無効化処理またはこれらの両方を効率よく行う。【解決手段】  本発明の一態様としての情報処理装置は、ＣＰＵと、タスク又はプロセスを識別するタスクＩＤ又はプロセスＩＤを格納するレジスタと、前記ＣＰＵより指定されたメモリアドレスに対応するキャッシュラインにデータを記録するキャッシュメモリであって、前記キャッシュラインを管理するタグの一部に前記レジスタ内のタスクＩＤ又はプロセスＩＤを前記キャッシュラインのオーナーIDとして書き込むキャッシュメモリと、を備え、前記ＣＰＵは、前記レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーIDをもつキャッシュラインについてのみライトバック処理や無効化処理といった特定の操作を行うこと指示する記述を含むキャッシュ制御命令を実行することを特徴とする。【選択図】  図１
2007011580.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
タスク又はプロセスを識別するタスクＩＤ又はプロセスＩＤを格納するレジスタと、
前記ＣＰＵにより指定されたメモリアドレスに対応するキャッシュラインにデータを記録するキャッシュメモリであって、前記キャッシュラインを管理するタグの一部に前記レジスタ内のタスクＩＤ又はプロセスＩＤを前記キャッシュラインのオーナーＩＤとして書き込むキャッシュメモリと、を備え、
前記ＣＰＵは、前記レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみライトバック処理を行うこと指示する記述を含むキャッシュ制御命令を実行することを特徴とする情報処理装置。
【請求項２】
前記ＣＰＵは、前記レジスタに記録されたタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみ無効化処理を行うことを指示する記述を含むキャッシュ制御命令をさらに実行することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
各々異なるＣＰＵ−ＩＤが割り当てられた複数のＣＰＵと、
タスク又はプロセスを識別するタスクＩＤ又はプロセスＩＤを格納するレジスタと、
前記ＣＰＵにより指定されたメモリアドレスに対応するキャッシュラインにデータを記録するキャッシュメモリであって、前記キャッシュラインを管理するタグの一部に、前記ＣＰＵのＣＰＵ−ＩＤと前記レジスタ内のタスクＩＤ又はプロセスＩＤとを前記キャッシュラインのオーナーＩＤとして書き込むキャッシュメモリと、を備え、
前記ＣＰＵは、自身のＣＰＵ−ＩＤ及び前記レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみライトバック処理することを指示する記述を含むキャッシュ制御命令を実行することを特徴とする情報処理装置。
【請求項４】
前記ＣＰＵは、自身のＣＰＵ−ＩＤ及び前記レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみ無効化処理を行うことを指示する記述を含むキャッシュ制御命令をさらに実行することを特徴とする請求項３に記載の情報処理装置
【請求項５】
バスを介して各前記ＣＰＵによりアクセス可能な主メモリにおける共有領域を定めた情報を格納するレジスタと、
前記ＣＰＵにより指定されたメモリアドレスが前記共有領域に属する場合は前記キャッシュラインのタグの一部に共有情報をセットするキャッシュコントローラと、をさらに備え、
前記ＣＰＵは、共有情報がセットされたキャッシュラインについては、オーナーＩＤを指定してキャッシュラインの無効化またはライトバックを実行する前記キャッシュ制御命令に関し、指定された前記オーナーＩＤが前記タグ上に記録されたオーナーＩＤと一致した場合においても、その実行を抑制することを特徴とする請求項４に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチマスター（或いはマルチCPU）環境におけるキャッシュ制御手法に関する。
【背景技術】
【０００２】
マルチマスター（或いはマルチCPU）システムにおいて、従来から、キャッシュコヒーレンシ（coherency）つまり、キャッシュ及びメモリ間のコヒーレンス（coherence）を確保することは重要な関心事である。そのため、キャッシュスヌープ（snoop）の機構が数多く提案されており、マルチCPU環境の実現に寄与している。
【０００３】
特開2002-163149公報（特許文献１）及び 特開平11-212868公報（特許文献２）に提案されるようなマルチCPU間のキャッシュコヒーレンスを保つ仕組みがその例である。
【０００４】
しかしながら、前者は回路規模の増大や、システム全体のタグ情報の管理のためのオーバーヘッドという別の問題があり、一方、後者のようなスヌープ機構はバス上のトラフィックが増大する局面を招く。
【０００５】
また、特定のCPUにおけるキャッシュのヒット率を向上するための技術として特開2000-276403公報（特許文献３）のようなキャッシュのカテゴライズが提案されているが、プログラム規模が増大する昨今のシステムにおいて必ずしもこのような仕組みがシステム全体のパフォーマンスを向上させ得るとは限らない。
【０００６】
一方、上述のキャッシュスヌープに関し、次のような［条件1］において、キャッシュスヌープが十分に寄与しないことが想定できる。
【０００７】
[条件 1] CPU以外のマスター（外部マスター）が主メモリの一部を参照し、処理内容を記載したコマンド列やデータを読み出す。このとき、同外部マスターが参照する物理アドレスは実際にメモリデバイスが存在するアドレスではなく、適切なシステムコントローラによって主メモリの一部がマッピングされた物理アドレスである。この場合、外部マスターが参照する物理アドレスとキャッシュタグの物理アドレスは一致するはずが無く、キャッシュスヌープの機能が寄与しないことになる。
【０００８】
また、仮に外部マスターとCPUが同じ主メモリ上の物理アドレスを参照する場合においても、そのデータ量が多い場合には、キャッシュスヌープの機能を用いずに、あらかじめデータキャッシュをライトバックする方がシステムのパフォーマンス上好ましいと言える。これは、その過程を考えれば明らかである。外部マスターの主メモリ参照が行われると、
1) 外部マスターからスヌープ信号と物理アドレスがCPUへ通知される
2) 該当キャッシラインの探索とライトバック処理
3) sync（Synchronize Shared Memory）相当の処理の後、外部マスターの主メモリ参照が特定のブロックに限って行われる
といった手順になり、データ量が多いほど1)→2)→3)→1)...→3)の過程でバス権のやり取りが頻繁に発生することになる。
【０００９】
ところで、多くのCPUはソフトウェアに対しキャッシュの制御手段を提供している。キャッシュスヌープの実装されていない（或いは有効に機能しない）システムであっても、ソフトウェアによる適切なキャッシュの制御により、マルチマスターシステムにおけるキャッシュコヒーレンシは十分保障され得る。
【００１０】
しかしながら、以下の［条件2］及び［条件3］においてソフトウェアによるキャッシュ制御は、システム全体のパフォーマンスの観点では好ましくない、つまりパフォーマンスの低下をもたらす。
【００１１】
[条件 2] マルチタスク・マルチプロセスの環境において、あるタスク(若しくはプロセス)が外部マスターによって参照される大量のデータを主メモリに格納し、データキャッシュのライトバックを行い、外部マスターにデータの読み出し指示を行う場合を想定する。
【００１２】
このとき、上記タスク(若しくはプロセス)が動作中にも他のタスク（或いはプロセス）に実行権が切り替わる可能性があり、データキャッシュ上には上記タスク(若しくはプロセス)が書き込んだデータ以外にもさまざまなタスク(若しくはプロセス)が書き込み或いは参照したデータが格納されている。
【００１３】
一般にソフトウェアは自身が書き込みを行ったデータがデータキャッシュ上に存在するか否かを効率的に検知する手段を持たない。従って、この条件設定において上記タスク(或いはプロセス）は全データキャッシュを対象にライトバック処理を行わざるを得ず、
1) データキャッシュのライトバック処理に要する時間が必要以上に長くなり
2) 他のタスク（或いはプロセス）が参照するはずのデータに関しても無効化（無効化）してしまい
他のタスク（或いはプロセス）の動作・システム全体のパフォーマンスに少なからず影響を与え得る。
【００１４】
また、CPUに実装されるデータキャッシュのサイズが大きくなるほど、同ライトバック処理によるシステム全体のパフォーマンスへの影響は大きくなる。
【００１５】
[条件 3] 更に、ローダープログラムによるプログラムのダウンロード過程においては、データキャッシュのライトバック処理に加え命令キャッシュの無効化処理も行われる。後者の命令キャッシュ無効化はプログラム（プロセス）の消滅過程においても極めて重要な処理である。  
ローダープログラムはダウンロードしたプログラムデータがデータキャッシュ上に在るか否かをやはり効率的に知る術はなく、更にダウンロードしたプログラムと衝突するラインが命令キャッシュに存在するか否かについても同じ様に効率的に知る術はない。
【００１６】
従って、ローダープログラムはシステムの安定した動作を保障するためにシステム全体のパフォーマンスを犠牲にし、全データキャッシュのライトバック処理に加え、全命令キャッシュの無効化処理を実行せざるを得ない。この条件においても、CPUに実装される命令キャッシュのサイズが大きくなるほど、同無効化処理によるシステム全体のパフォーマンスへの影響は大きくなるのである。
【特許文献１】特開2002-163149公報
【特許文献２】特開平11-212868公報
【特許文献３】特開2000-276403公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
本発明は、キャッシュメモリのライトバック処理、無効化処理またはこれらの両方を効率よく行うことができる情報処理装置を提供する。
【課題を解決するための手段】
【００１８】
本発明の一態様としての情報処理装置は、ＣＰＵと、タスク又はプロセスを識別するタスクＩＤ又はプロセスＩＤを格納するレジスタと、前記ＣＰＵにより指定されたメモリアドレスに対応するキャッシュラインにデータを記録するキャッシュメモリであって、前記キャッシュラインを管理するタグの一部に前記レジスタ内のタスクＩＤ又はプロセスＩＤを前記キャッシュラインのオーナーＩＤとして書き込むキャッシュメモリと、を備え、前記ＣＰＵは、前記レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみライトバック処理を行うこと指示する記述を含むキャッシュ制御命令を実行することを特徴とする。
【００１９】
本発明の一態様としての情報処理装置は、各々異なるＣＰＵ−ＩＤが割り当てられた複数のＣＰＵと、タスク又はプロセスを識別するタスクＩＤ又はプロセスＩＤを格納するレジスタと、前記ＣＰＵにより指定されたメモリアドレスに対応するキャッシュラインにデータを記録するキャッシュメモリであって、前記キャッシュラインを管理するタグの一部に、前記ＣＰＵのＣＰＵ−ＩＤと前記レジスタ内のタスクＩＤ又はプロセスＩＤとを前記キャッシュラインのオーナーＩＤとして書き込むキャッシュメモリと、を備え、前記ＣＰＵは、自身のＣＰＵ−ＩＤ及び前記レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみライトバック処理することを指示する記述を含むキャッシュ制御命令を実行することを特徴とする。
【発明の効果】
【００２０】
本発明により、キャッシュメモリのライトバック処理、無効化処理またはこれらの両方を効率よく行うことができる。
【発明を実施するための最良の形態】
【００２１】
本実施の形態は、キャッシュラインの管理情報にそのキャッシュのオーナー情報を加えることで、キャッシュのライトバック処理または無効化処理を効率よく行い、マルチマスター或いはマルチCPU環境にけるパフォーマンス向上を実現させようとするものである。以下、図面を参照しながら、本発明の実施の形態について説明する。
【００２２】
図１は、本発明に係わるマルチマスターシステムの構成を概略的に示すブロック図である。
【００２３】
このマルチマスターシステムは、情報処理装置１１、主メモリ１２、デバイス１３(例えばグラフィックコントローラ)、複数のプログラムやデータを格納する外部記憶装置１４及びそれらを繋ぐバス１５を備える。情報処理装置１１は、CPU２１、命令キャッシュ（I$）２２、データキャッシュ（D$）２３、メモリ管理ユニット（MMU）２４及びCPU制御レジスタの１つである専用レジスタ２５を有する。デバイス１３は、CPU１１上で動作するプログラムとの間で主メモリ１２上の特定領域Ｒ１を共有する。
【００２４】
本実施形態ではCPU２１上で動作するプログラムが生成したデータをデバイス１３が参照する場合を想定する。この時、プログラムが生成したデータは、図１に示すように、データキャッシュ２３に格納され（＜１＞）、プログラムによる強制的なライトバック（＜２＞）が行われる。その後にデバイス１３によるデータの読み出し（＜３＞）が実行されることになる。
【００２５】
プログラムは一般に仮想アドレスにて実行が管理される。MMU２４は、プログラムの読み出しや、プログラムからのメモリや他のデバイスへのアクセスにおいて、仮想アドレスと物理アドレスとの対応付けを行う。実行するプログラムがプロセス単位で管理される場合、そのプロセスにはオペレーティングシステム（OS）が管理するIDが個別に付与され、プロセスIDごとに仮想アドレスと物理アドレスとの対応が管理される。
【００２６】
専用レジスタ２５は、実行中のプロセスIDを格納する。MMU２４は、専用レジスタ２５を参照することで実行中のプロセスのプロセスIDを確認できる。
【００２７】
CPU２１とバス１５との間には命令キャッシュ２２及びデータキャッシュ２３が介在する。特殊な場合を除きプログラムの実行に伴う命令の読み出しやプログラムからのメモリ参照・データの更新においては、命令キャッシュ２２及びデータキャッシュ２３を介した間接的なメモリアクセスが行われる。
【００２８】
この環境において、いま特定のタスク(或いはプロセス)がデバイス１３用のデータを主メモリ１２上に生成する状況を考える。デバイス１３が主メモリ１２上のデータを間違いなく参照（図１における＜３＞）するためには、上記特定のタスク(或いはプロセス)が生成したデータがデータキャッシュ２３からライトバック（図１における＜２＞）されなければならない。
【００２９】
この時、CPU２１上で動作する複数のタスク(或いはプロセス)の内上記特定のタスク(或いはプロセス)が書き込んだデータのみについてデータキャッシュ２３のライトバック処理が行うことができれば、システム全体のパフォーマンスを下げることは無いと考えられる。図１のシステムは、このように特定のタスク（或いはプロセス）が書き込んだデータのみデータキャッシュ２３のライトバックを行うことができる機構をもつ。以下これについて詳細に説明する。
【００３０】
図２は、データキャッシュ２３に格納する情報を説明する図である。
【００３１】
データキャッシュ２３は複数のキャッシュラインをもつ。各キャッシュラインには、それを管理するための情報として、オーナー情報としてのオーナーID（Owner-ID）、物理アドレス(Physical Address)、状態(State)ビットを記録するタグが用意されている。タグに記録された物理アドレスに相当するメモリから読み込まれたデータ或いは同物理アドレスに書き込まれるデータがキャッシュラインのデータ領域に記録される。オーナーIDは、該当するキャッシュラインを最後にダーティ（dirty、つまりデータを書き込まれた状態）にしたタスクのIDまたはプロセスのID（以下プロセスIDに統一）である。データの書き込み操作あった場合に、専用レジスタ２５におけるプロセスIDがデータ書き込みのあったキャッシュラインのタグにコピーされる。以上の機構により、特定のタスク（或いはプロセス）が書き込んだキャッシュラインを識別できるため、特定のタスク（或いはプロセス）が書き込んだキャッシュラインのみをライトバックすることが可能となる。これについてさらに詳しく述べるならば以下の通りである。
【００３２】
一般にキャッシュは、対応する主メモリの物理アドレスを格納するタグにより管理されている（命令キャッシュにおいては、仮想アドレスによりタグが管理されている場合も存在する）。このタグを拡張し、キャッシュ上のデータのオーナーを管理できるようにする。オーナーを示すIDとしてはプロセスIDで代用できる。プロセスIDはOSにより管理されるものであり、各タスクやプロセスはそれ自身のプロセスIDを知る必要はない。プロセスIDはOSがプロセスを管理するために各プロセスに対し一意に発行するものではあるが、一方で、このプロセスIDを用い仮想アドレスをプロセス空間として拡張し管理するために、ハードウェアにおいても同プロセスIDを登録する仕組みが設けられている。例えば、MIPSアーキテクチャにおいて実行権を得たプロセスのプロセスIDは専用のレジスタ（EntryHiレジスタ）により管理される。上記タグにおけるオーナーとはそのキャッシュラインを最後にダーティにしたタスクやプロセスのプロセスIDであり、ハードウェアは専用レジスタ２５の存在によりキャッシュラインを最後にダーティにしたタスクやプロセスのプロセスIDを知ることができ、タグにオーナーであるプロセスIDを記録することが出来るのである。つまり、データの書き込み操作があった場合に、専用レジスタ２５におけるプロセスIDをキャッシュのタグにコピーすればよいことになる。なお、タグに加えられたオーナーIDは、キャッシュの置き換え（replace）には何ら影響を与えるものではない。
【００３３】
ここで、ライトバック処理のコーディング例を以下に示す。
la     $2, Base_addr
li     $3, Loop_max
loop:
cache    D_writeback_OwnerID, way_0($2)
cache    D_writeback_OwnerID, way_1($2)
cache    D_writeback_OwnerID, way_2($2)
cache    D_writeback_OwnerID, way_3($2)
addiu  $3, $3, -1
bnel   $3, $0, loop
addiu  $2, $2, 0x20
【００３４】
コード上は全ウェイ（ウェイ4本）及び 全キャッシュラインに対しライトバックのリクエストを行うが、ライトバック処理を行うプロセスID(専用レジスタ25が示すプロセスID)とタグに記録されたオーナーIDとが一致しないとライトバックは行われない。同コードは以下のケースで有効に機能する。
【００３５】
ケース1) オーナー自身が上記コードを実行し、自身のオーナーIDを持つデータキャッシュをライトバックする場合。
【００３６】
ケース 2) プロセスIDを持たない特権プロセス、例えば、OSの機能の一部であるローダープログラム等が専用レジスタ２５にデータキャッシュからライトバックあるいは無効化すべきプロセスIDを設定し、上記コードを実行する場合。なお、ローダープログラムがOSによってプロセスIDを付与され管理される1つのプロセスであった場合には、データキャッシュの操作段階において、CPUに設定されたプロセスIDがローダープログラム自身の実行に影響しない状態、つまりローダープログラムをカーネル空間でかつカーネルモードにて実行する特権プロセスへモード遷移する必要があり、更に、キャッシュ操作の前後において専用レジスタ２５に登録されている実行中のプロセスIDと操作対象のプロセスIDとを入れ替える操作も行うことになる。
【００３７】
ここで、データキャッシュを無効化する際は、上記コードにおけるキャッシュ命令のパラメータを以下のように変更し、実行する。
la     $2, Base_addr
li     $3, Loop_max
loop:
cache    D_invalidate_OwnerID, way_0($2)
cache    D_invalidate _OwnerID, way_1($2)
cache    D_invalidate _OwnerID, way_2($2)
cache    D_invalidate _OwnerID, way_3($2)
addiu  $3, $3, -1
bnel   $3, $0, loop
addiu  $2, $2, 0x20
【００３８】
上述したように、本実施の形態では、タスク（若しくはプロセス）のプロセスIDを指定し、データキャッシュのタグに記録されたオーナーIDと、専用レジスタ25上で指定されたタスク（若しくはプロセス）のプロセスIDとが一致した場合に限りライトバック処理（或いは無効化処理）を行う選択的なキャッシュ制御手段を与える。すなわち、ＣＰＵは、専用レジスタ２５内のプロセスＩＤと同一のオーナーIDをもつキャッシュラインについてのみライトバック処理または無効化処理を行うこと指示する記述を含むキャッシュ制御命令を実行する。ライトバック処理においては、タスク（若しくはプロセス）のプロセスIDがデータキャッシュのオーナーIDに一致しており、かつそのキャッシュラインがダーティであった場合にそのキャッシュラインのライトバック処理を行うものであり、異なるオーナーを持つキャッシュラインについてはたとえそのキャッシュラインがダーティであったとしてもライトバック処理を行わない。
【００３９】
図３は、本実施の形態におけるライトバック処理の流れを示すフローチャートである。
【００４０】
あるタスク（若しくはプロセス）においてCPU２１がキャッシュ命令を実行する（Ｓ１）。
【００４１】
MMU２４は、専用レジスタ２５に設定されたプロセスIDに基づき、CPU２１によって指定された仮想アドレスから物理アドレスを求める（Ｓ２）。
【００４２】
CPU２１は、求められた物理アドレスに合致するタグを検索する。ウェイが複数存在する場合は各ウェイ上を並行して検索する（Ｓ３）。
【００４３】
求めた物理アドレスと一致するタグが存在しない場合は（Ｓ４のＮＯ）処理を終了し、求めた物理アドレスと一致するタグが存在する場合は（Ｓ４のＹＥＳ）、CPU２１は専用レジスタ２５からプロセスＩＤを読み出す（Ｓ５）。
【００４４】
CPU２１はプロセスＩＤとタグのオーナーＩＤとが一致するか否かを判断する（Ｓ６）。
【００４５】
一致しない場合は（Ｓ６のＮＯ）処理を終了し、一致した場合は（Ｓ６のＹＥＳ）、該当するラインがダーティかどうかをタグ内の状態ビットから判断する（Ｓ７）。
【００４６】
該当するラインがダーティである場合は（Ｓ７のＹＥＳ）、そのラインのライトバック処理を行い（Ｓ８）、ダーティでない場合は（Ｓ７のＮＯ）処理を終了する。図３において、Ｓ５、Ｓ６の処理が、従来のライトバック処理に対して、新たに追加された部分である。
【００４７】
図４は、本実施の形態におけるデータキャッシュの無効化処理の流れを示すフローチャートである。
【００４８】
Ｓ１１〜Ｓ１６は、図３のＳ１〜Ｓ６と同一である。Ｓ１６において、プロセスＩＤとタグのオーナーＩＤとが一致した場合は（Ｓ１６のＹＥＳ）、次に、該当するキャッシュラインにおけるタグ内の状態ビットから、そのキャッシュラインが有効であるかどうかを判断する（Ｓ１７）。キャッシュラインが有効である場合は（Ｓ１７のＹＥＳ）そのキャッシュラインを無効化し（Ｓ１８）、有効でない場合は（Ｓ１７のＮＯ）処理を終了する。図４において、Ｓ１５、Ｓ１６の処理が、従来におけるデータキャッシュの無効化処理に対して、本実施の形態において新たに追加された部分である。
【００４９】
ここで、ローダープログラムによりプログラムのローディング処理を行う場合を例にとってデータキャッシュのライトバック処理及び無効化処理についてさらに説明する。
【００５０】
図５は、ローダープログラムによりプログラムのローディング処理を行った後に行うライトバック処理及び無効化処理を説明する図である。図５に示されるシステムは、デバイス１３が存在しない点を除き、図１と同一であり、図１と同一の部分には同一の番号を付して各要素についての説明は省略する。
【００５１】
この例では、ロードされるプログラムは外部記憶装置１４（例えばFlush ROM）に記録されたデータであり、そのデータはローダープログラムにより主メモリ１２へロードされる。しかしながら、CPU２１と主メモリ１２との間には命令キャッシュ２２及びデータキャッシュ２３が介在しており、外部記憶装置１４からロードされたデータは最初データキャッシュ２３へ格納される（＜１１＞）。主メモリ１２へロードされたプログラムを実行する前に、ローダープログラムが使用したデータキャッシュ２３から、同ロードされたプログラムに該当するデータが確実にデータキャッシュ２３から主メモリ１２にライトバックされる必要がある（＜１２＞）。
【００５２】
CPU２１上にはローダープログラム以外にも複数のプログラムが動作している。そこで、OSによってローダープログラムに付与されたプロセスIDを用いた選択的なライトバック処理を行うことにより、他のプロセスのパフォーマンス低下を排除することが出来る。
【００５３】
同様に、無効化処理においては、対象のタスク（若しくはプロセス）の専用レジスタ２５に登録されたプロセスIDがキャッシュラインのオーナーIDに一致しており、そのキャッシュラインが有効(クリーンエクスクルーシブ（clean exclusive）及びダーティを含む)であった場合にそのキャッシュラインの無効化を行うものであり、異なるオーナーIDを持つキャッシュラインについてはたとえそのキャッシュラインが有効であったとしても無効化を行わない。
【００５４】
以上では、データキャッシュのライトバック処理及び無効化処理について主に説明したが、本発明は、命令キャッシュの無効化処理に適用しても有効である。
【００５５】
一般に、命令キャッシュの無効化処理においても、データキャッシュの無効化処理と同様に、ソフトウェアはどのキャッシュラインに対象プロセスのコードが格納されているかを効率よく知る方法が無い。従って、システムを安全に動作させるために１つのプロセスを無効化するために、全命令キャッシュの無効化を行うのが常である。
【００５６】
そこで、本実施の形態では、命令キャッシュにおけるタグを拡張して、データキャッシュの場合と同様に、タグ内にオーナーIDを含める。
【００５７】
図６は、命令キャッシュ２２に格納する情報を示す。
【００５８】
命令キャッシュ２２は複数のキャッシュラインを有する。各命令キャッシュのラインは、オーナーID（Owner-ID）、物理アドレス(Physical Address)、状態(State)ビットおよび命令列を有する。オーナーID、物理アドレス及び状態ビットはタグによって管理される。オーナーIDは、該当するキャッシュライン上の命令を実行したタスクやプロセスのプロセスIDである。命令の読み込み操作あった場合に、専用レジスタ２５におけるプロセスIDが対応するキャッシュラインのタグにコピーされる。これにより、特定のタスク（或いはプロセス）の実行に使用されたキャッシュラインを識別できるため、特定のタスク（或いはプロセス）の実行に使用されたキャッシュラインのみを無効化することが可能となる。このように、本発明は、特定プロセスのコードが格納されている命令キャッシュの無効化処理にも効果的である。
【００５９】
ここで、命令キャッシュの無効化処理のコーディング例を以下に示す。
la     $2, Base_addr
li     $3, Loop_max
loop:
cache    I_invalidate_OwnerID, way_0($2)
cache    I_invalidate_OwnerID, way_1($2)
cache    I_invalidate_OwnerID, way_2($2)
cache    I_invalidate_OwnerID, way_3($2)
addiu  $3, $3, -1
bnel   $3, $0, loop
addiu  $2, $2, 0x20
【００６０】
コード上は全ウェイ及び全キャッシュラインに対し無効化のリクエストを行うが、無効化処理を行う対象のプロセスID(専用レジスタ２５に登録)と、タグに記録されたオーナーIDとが一致しないと無効化は行われない。このように、選択的に命令キャッシュのラインを無効化する機構により、安全かつ効率的に命令キャッシュの無効化処理を実現できる。
【００６１】
図７は、命令キャッシュの無効化処理の流れを示すフローチャートである。
【００６２】
Ｓ２１からＳ２６は、図３および図４と同様である。Ｓ２６において、プロセスＩＤとタグのオーナーＩＤとが一致した場合は（Ｓ２６のＹＥＳ）、次に、該当するキャッシュラインにおけるタグ内の状態ビットから、そのキャッシュラインが有効であるかどうかを判断する（Ｓ２７）。キャッシュラインが有効である場合は（Ｓ２７のＹＥＳ）そのキャッシュラインを無効化し（Ｓ２８）、有効でない場合は（Ｓ２７のＮＯ）処理を終了する。図７において、Ｓ２５、Ｓ２６の処理が、従来における命令キャッシュの無効化処理に対して、本実施の形態において新たに追加された部分である。
【００６３】
このような命令キャッシュの選択的な無効化処理は、データキャッシュの選択的なライトバック処理及び無効化処理と同様に、以下のケースで有効に機能する。
【００６４】
ケース3) オーナー自身（タスク若しくはプロセス）がその終了処理或いはサスペンド（suspend）状態への移行過程において上記命令キャッシュの無効化処理のコードを間接的に実行し、自身のオーナーIDを持つ命令キャッシュを無効化する場合。ここで、間接的な実行とはOSによるサービスを想定している。
【００６５】
ケース 4) プロセスIDを持たない特権プロセス、例えば、OSの機能の一部であるローダープログラム等が上記専用レジスタ２５に命令キャッシュにおいて無効化すべきプロセスIDを設定し、上記命令キャッシュの無効化処理のコードを実行する場合。なお、ローダープログラムがOSによってプロセスIDを付与され管理される1つのプロセスであった場合には、キャッシュの操作段階においてCPUに設定されたプロセスIDがローダープログラム自身の実行に影響しない状態、つまりローダープログラムをカーネル空間でかつカーネルモードにて実行する特権プロセスへモード遷移する必要があり、更に、キャッシュ操作の前後において実行中のプロセスID(専用レジスタ２５の設定内容)と操作対象のプロセスIDとを入れ替える操作も行うことになる。
【００６６】
ところで、マルチCPUの環境において共有メモリ、及び各CPUに共通の二次キャッシュが設置される場合が存在する。対象とするシステムの構成を図８に示す。
【００６７】
このシステムは、2つの情報処理装置３１、４１、主メモリ５１、デバイス５２(例えばグラフィックコントローラ)、複数のプログラムやデータを格納する外部記憶装置５３、及びそれらを繋ぐバス５４を備える。
【００６８】
情報処理装置３１は、CPU３２、一次命令キャッシュ３３、一次データキャッシュ３４、MMU３５及び専用レジスタ３６を有する。情報処理装置４１は、CPU４２、一次命令キャッシュ４３、一次データキャッシュ４４、MMU４５及び専用レジスタ４６を有する。
【００６９】
デバイス５２は、CPU３２上で動作するプログラムとの間で主メモリ５１上の特定領域Ｒ２を共有する。また、CPU３２及びCPU４２は主メモリ５１上の共有領域（共有メモリ）Ｒ３を共有する。
【００７０】
2つのCPU３２、４２とバス５４との間には二次キャッシュ５５が介在し、二次キャッシュ５５には専用のコントローラ（二次キャッシュコントローラ）５６が設けられる。特殊な場合を除きプログラムの実行に伴う命令の読み出しやプログラムからのメモリ参照においては二次キャッシュ５５を介した間接的なメモリアクセスが行われる（＜２１＞＜２２＞）。
【００７１】
二次キャッシュコントローラ５６は、主メモリ５１上のCPU間の共有メモリを定義するためのレジスタ５７を有する。レジスタ５７は、共有メモリの先頭物理アドレスを管理するアドレスレジスタ及び共有メモリのサイズを管理するサイズレジスタとを含む。全システムの初期化段階或いはそれ以降に二次キャッシュコントローラ５６はレジスタ５７に共有メモリＲ３の先頭物理アドレス及びサイズを登録する。レジスタ５７の設定によって各CPU３２、４２から共有される共有メモリを定義する。
【００７２】
更に、二次キャッシュコントローラ５６は、各CPU３２、４２による二次キャッシュ５５へのアクセスを管理し、CPU３２、４２に対し静的に付与されたCPU-ID（本例ではCPU３２に対しCPU-ID としてCPU1が付与され、CPU４２に対しCPU-IDとしてCPU2が付与されている）を以って二次キャッシュ５５のタグに記録されるオーナーIDを拡張する。つまり、マルチCPU環境においては、各CPUに個別のCPU-IDが割り振られるべきであり、タグに書き込まれるオーナーIDはこの各CPUのCPU-IDによって拡張される。具体的には、二次キャッシュ５５のタグにおけるオーナーIDは、前述したプロセスIDと、CPUに付与されたCPU-IDとからなる。これは複数のCPU上で個別に管理されるプロセスIDのコンフリクトを避けるためである。従って共有される二次キャッシュ上において、異なるCPU間で同じオーナーIDは存在しないことになる。これに対応し、ＣＰＵは、自身のＣＰＵ−ＩＤ及び専用レジスタ内のタスクＩＤ又はプロセスＩＤと同一のオーナーＩＤをもつキャッシュラインについてのみライトバック処理することを指示する記述を含むキャッシュ制御命令を実行可能である。
【００７３】
以上の環境において、いまCPU３２上で実行される特定のタスク(或いはプロセス)がデバイス５２用のデータを主メモリ５１上の特定領域Ｒ２に生成する状況を考える。つまり、本例では、CPU３２上で動作するプログラムが生成したデータをデバイス５２が参照する場合を想定している。この時、プログラムが生成したデータは、二次キャッシュ５５に格納され（＜２１＞）、プログラムによる強制的なライトバック（＜２２＞）が行われ、その後にデバイス５２によるデータの読み出し（＜２３＞）が実行されることになる。一方、上述したように、CPU３２及びCPU４２は主メモリ５１上に共有メモリＲ３を有する。
【００７４】
デバイス５２が主メモリ５１上のデータを間違いなく参照する（＜２３＞）ためには、上記特定のタスク(或いはプロセス)が生成したデータが二次キャッシュ５５からライトバック（＜２２＞）されなければなない。
【００７５】
一方で、CPU３２及びCPU４２上で動作するプログラム間には１つのシステムを構成する上で互いに情報を共有する必要がある。この情報の共有には主メモリ５１上の共有メモリＲ３が使用される。
【００７６】
CPU３２上で実行される特定のタスク(或いはプロセス)がこの共有メモリＲ３の参照・データ更新を行うと想定する。このような場合において、二次キャッシュ５５へのデータ書き込みに関し、上記オーナーＩＤを無効化する機構も必要である。なぜならば、オーナープロセスがライトバック処理を行った場合、他のCPUと共有するデータまでもがライトバックされてしまうと、バスに望まないトラフィックが発生するばかりか、共有メモリ用の二次キャッシュの効率にまで影響を与え、システム全体のパフォーマンスが低下するからである。
【００７７】
この目的のために、タグに共有ビット（S(shared)ビット）を追加する。二次キャッシュ５５内の情報を図９に示す。上述の二次キャッシュコントローラ５６におけるレジスタ５７において定義された共有メモリＲ３へのアクセスがCPU３２、４２からなされる場合、CPU３２、４２は、バス５４を介し、共有メモリアクセス信号を二次キャッシュコントローラ５６へ通知する。この共有メモリアクセス信号は二次キャッシュ５５におけるタグに反映される。すなわちタグにおける共有ビットがオンに設定される。また、アクセスを行ったCPUのCPU-ID及びプロセスIDもオーナーIDとしてタグに設定される。
【００７８】
この機構により、たとえプロセスID及びCPU−IDがタグに設定されかつダーティなキャッシュラインであったとしても、共有ビットの寄与により、プロセスID及びCPU−IDが無効化され、共有メモリＲ３への選択的なライトバックは行われない。すなわち、ＣＰＵは、共有ビットがセットされたキャッシュラインについては選択的なライトバック処理（又は無効化処理）を行う旨の記述を含むキャッシュ制御命令の実行を抑制する。
【００７９】
図１０は、二次キャッシュのライトバック処理の流れを示すフローチャートである。
【００８０】
CPU３２又はＣＰＵ４２がキャッシュ命令を実行する（Ｓ３１）。以下ではCPU３２がキャッシュ命令を実行したものとして説明を続ける。
【００８１】
MMU３５は、専用レジスタ３６に設定されたプロセスIDに基づき、CPU３２によって指定された仮想アドレスから物理アドレスを求める（Ｓ３２）。
【００８２】
CPU３２は、求められた物理アドレスに合致するタグを検索する。ウェイが複数存在する場合は各ウェイ上を並行して検索する（Ｓ３３）。
【００８３】
求めた物理アドレスと一致するタグが存在しない場合は（Ｓ３４のＮＯ）処理を終了し、求めた物理アドレスと一致するタグが存在する場合は（Ｓ３４のＹＥＳ）、CPU３２は専用レジスタ３６からプロセスＩＤを読み出す（Ｓ３５）。
【００８４】
CPU３２は、プロセスＩＤ及びCPU-IDと、タグのオーナーＩＤとが一致するか否かを判断する（Ｓ６）。
【００８５】
一致しない場合は（Ｓ３６のＮＯ）処理を終了し、一致した場合は（Ｓ３６のＹＥＳ）、タグの共有ビットが非共有“０”であるか共有“１”であるかをチェックする（Ｓ３７）。
【００８６】
共有ビットが共有“１”である場合は（Ｓ３７のＮＯ）処理を終了し、非共有“０”である場合は（Ｓ３７のＹＥＳ）、該当するラインがダーティかどうかをタグ内の状態ビットから判断する（Ｓ３８）。
【００８７】
該当するラインがダーティである場合は（Ｓ３８のＹＥＳ）、そのラインのライトバック処理を行い（Ｓ３９）、ダーティでない場合は（Ｓ３８のＮＯ）処理を終了する。図１０において、Ｓ３５〜Ｓ３７の処理が、従来のライトバック処理に対して、新たに追加された部分である。
【００８８】
図１１は、二次キャッシュの無効化処理の流れを示すフローチャートである。
【００８９】
Ｓ４１〜Ｓ４７は、図１０のＳ３１〜Ｓ３７と同一である。Ｓ４７において、共有ビットが非共有“０”であった場合は（Ｓ４７のＹＥＳ）、該当するキャッシュラインにおけるタグ内の状態ビットから、そのキャッシュラインが有効であるかどうかを判断する（Ｓ４８）。キャッシュラインが有効である場合は（Ｓ４８のＹＥＳ）そのキャッシュラインを無効化し（Ｓ４９）、有効でない場合は（Ｓ４８のＮＯ）処理を終了する。図１１において、Ｓ４５〜Ｓ４７の処理が、従来の無効化処理に対して、本実施の形態において新たに追加された部分である。
【００９０】
以上のように、本実施の形態によれば、選択的なキャッシュの無効化処理やライトバック処理を実現し、マルチマスター系におけるキャッシュの利用効率を向上し、バス負荷の軽減を実現できる。
【００９１】
また、マルチCPUの環境でなくてもプログラムダウンロード時のキャッシュ処理を最適化し、プログラム動作の効率化に寄与できる。
【００９２】
また、プロセスの消滅時やサスペンド時に選択的なキャッシュの無効化処理を行うことにより、キャッシュの利用効率を更に向上することが可能となる。
【００９３】
本発明は、情報処理装置（マイクロプロセッサ）に実装されるキャッシュのサイズが大きくなるほど、その効果を発揮する。
【図面の簡単な説明】
【００９４】
【図１】本発明に係わるマルチマスターシステムの構成を概略的に示すブロック図
【図２】データキャッシュ内の情報を示す図
【図３】本実施の形態におけるライトバック処理の流れを示すフローチャート
【図４】本実施の形態におけるデータキャッシュの無効化処理の流れを示すフローチャート
【図５】ローダープログラムによりプログラムのローディング処理を行った後に行うライトバック処理及び無効化処理を説明する図
【図６】命令キャッシュに格納する情報を示す図
【図７】命令キャッシュの無効化処理の流れを示すフローチャート
【図８】マルチCPUの環境におい共有メモリ、及び各CPUに共通の二次キャッシュが設置されたシステムの構成を示す図
【図９】二次キャッシュ内の情報を示す図
【図１０】二次キャッシュのライトバック処理の流れを示すフローチャート
【図１１】二次キャッシュの無効化処理の流れを示すフローチャート
【符号の説明】
【００９５】
１１、３１、４１：情報処理装置
１２、５１：主メモリ
１３、５２：デバイス
１４：外部記憶装置
１５、５４：バス
２１、３２、４２：CPU
２２、３３、４３：命令キャッシュ
２３、３４、４４：データキャッシュ
２４、３５、４５：メモリ管理ユニット（ＭＭＵ）
２５、３６、４６：専用レジスタ
５５：二次キャッシュ
５６：二次キャッシュコントローラ
５７：レジスタ
Ｒ１、Ｒ２：特定領域
Ｒ３：共有領域（共有メモリ）
【図１】
2007011580.tif 000003
【図２】
2007011580.tif 000004
【図３】
2007011580.tif 000005
【図４】
2007011580.tif 000006
【図５】
2007011580.tif 000007
【図６】
2007011580.tif 000008
【図７】
2007011580.tif 000009
【図８】
2007011580.tif 000010
【図９】
2007011580.tif 000011
【図１０】
2007011580.tif 000012
【図１１】
2007011580.tif 000013