(57)【特許請求の範囲】
【請求項１】
主記憶装置が記憶するデータを一時的に保持するキャッシュメモリと、
前記キャッシュメモリが保持するデータを用いて、アプリケーションを実行する演算部と、
前記キャッシュメモリが保持するデータごとに、前記演算部が実行するアプリケーションが指定した期間内に前記演算部により更新されたか否かを示す更新情報を記憶する記憶部と、
前記アプリケーションが指定した期間が終了した場合は、前記キャッシュメモリが保持するデータのうち、前記記憶部が記憶する更新情報が更新された旨を示すデータを前記キャッシュメモリから前記主記憶装置に書き戻す書き戻し部と
を有することを特徴とする演算装置。
【請求項２】
前記キャッシュメモリは、前記データを格納する複数のキャッシュラインを有し、
前記記憶部は、前記アプリケーションが指定した期間内にデータが更新されたか否かを示す概要セクタフラグを複数のキャッシュラインごとに記憶し、前記アプリケーションが指定した期間内にデータが更新されたか否かを示すセクタフラグを前記更新情報として前記キャッシュラインごとに記憶し、
前記書き戻し部は、前記概要セクタフラグが更新された旨を示すキャッシュラインのうち、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記主記憶装置に書き戻すことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記演算装置は、前記演算部を複数有し、
前記キャッシュメモリは、前記データを格納する複数のキャッシュラインを有し、
前記記憶部は、各演算部が実行するアプリケーションが指定した期間内にデータが更新されたか否かを示す演算フラグを複数のキャッシュラインごとに記憶し、前記アプリケーションが指定した期間内にデータが更新されたか否かを示すセクタフラグを前記更新情報として前記キャッシュラインごとに記憶し、
前記書き戻し部は、いずれかの演算部が実行するアプリケーションが指示した期間が終了した場合には、当該演算部が実行するアプリケーションが指示した期間内のデータが更新された旨を前記演算フラグが示す複数のキャッシュラインのうち、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記主記憶装置に書き戻すことを特徴とする請求項１に記載の演算装置。
【請求項４】
前記キャッシュメモリは、複数のウェイを有する複数のキャッシュラインを有し、
前記書き戻し部は、前記セクタフラグが前記更新された旨を示すキャッシュラインのうち、所定のウェイに格納されたデータのみを前記主記憶装置に書き戻すことを特徴とする請求項２または３に記載の演算装置。
【請求項５】
前記演算部は、実行するアプリケーションを変更するコンテキストスイッチを実行する機能を有し、
前記書き戻し部は、前記アプリケーションが指定した期間が終了した場合、または、前記演算部が前記コンテキストスイッチを実行した場合は、前記更新情報が前記更新された旨を示すデータを前記主記憶装置に書き戻すことを特徴とする請求項１−４のいずれか１つに記載の演算装置。
【請求項６】
主記憶装置が記憶するデータを一時的に保持する複数のキャッシュラインを有するキャッシュメモリと、
前記キャッシュメモリが保持するデータを用いて、アプリケーションを実行する演算部と、
前記キャッシュラインごとに、前記アプリケーションが指定した期間内にデータが更新されたか否かを示すセクタフラグを記憶する記憶部と、
前記アプリケーションが指定した期間が終了した場合は、前記キャッシュメモリが有する複数のキャッシュラインのうち、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記キャッシュメモリから前記主記憶装置に書き戻す書き戻し部と
を有することを特徴とする演算装置。
【請求項７】
データを記憶する主記憶装置と
前記主記憶装置を共有する複数の演算装置を有する情報処理装置において、
前記演算装置は、
前記主記憶装置が記憶するデータを一時的に保持するキャッシュメモリと、
前記キャッシュメモリが保持するデータを用いて、アプリケーションを実行する演算部と、
前記キャッシュメモリが保持するデータごとに、前記演算部が実行するアプリケーションが指定した期間内に前記演算部により更新されたか否かを示すセクタ情報を記憶する記憶部と、
前記アプリケーションが指定した期間が終了した場合は、前記キャッシュメモリが保持するデータのうち、前記記憶部が記憶するセクタ情報が更新された旨を示すデータを前記キャッシュメモリから前記主記憶装置に書き戻す書き戻し部と
を有することを特徴とする情報処理装置。
【請求項８】
主記憶装置に記憶されたデータをキャッシュする機能を有する演算装置が実行する演算方法において、
キャッシュしたデータごとに、アプリケーションが指定した期間内に更新されたか否かを示すセクタ情報を記憶し、
前記アプリケーションが指定した期間が終了した場合は、前記キャッシュしたデータのうち、前記セクタ情報が更新された旨を示すデータを前記主記憶装置に書き戻す
処理を実行することを特徴とする演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置、情報処理装置および演算方法に関する。
【背景技術】
【０００２】
従来、複数の演算装置がメモリを共有する情報処理システムが知られている。このような情報処理システムの一例として、メモリが記憶するデータを各演算装置がキャッシュする共有メモリ方式の情報処理システムが知られている。
【０００３】
このような情報処理システムでは、いずれかの演算装置がダウンした際にリカバリを容易にするため、共有メモリ上にデータのバックアップを作成する。しかし、キャッシュ機能を有する演算装置は、バックアップデータの更新を行う際にバックアップ対象となるデータと古いバックアップデータをキャッシュし、キャッシュしたバックアップデータの更新を行う。このため、演算装置は、更新したバックアップデータをメモリに書き戻す前に故障が生じると、更新したバックアップデータをメモリに書き戻せない場合がある。
【０００４】
そこで、キャッシュメモリのデータをメモリに書き戻すフラッシュ要求を発行するようプログラムを修正し、演算装置がキャッシュするバックアップデータをメモリに書き戻す技術が知られている。以下、図３７〜３９を用いて、演算装置がキャッシュしたデータをメモリに書き戻すキャッシュフラッシュ処理について説明する。
【０００５】
図３７は、バックアップ処理を説明するための図である。また、図３８は、フラッシュ処理について説明するための図である。また、図３９は、演算装置がダウンした際の処理を説明するための図である。なお、図３７に示す例では、演算装置が共有メモリにデータの書き戻す処理について、ソフトウェア側から見た処理の内容を記載し、図３８、図３９には、ハードウェア側から見た処理の内容を記載している。
【０００６】
図３７に示す例では、演算装置７０と演算装置７１とは、それぞれコアとキャッシュメモリとを有し、演算装置７１に接続されたメモリ７２を共有する。まず、図３７中（Ａ）に示すように、演算装置７０が実行するプログラムは、メモリ７２に格納されたメモリ７２に格納されているデータであるカレントデータのバックアップを行う場合には、カレントデータのロード要求を発行する。そして、演算装置７０が実行するプログラムは、図３７中（Ｂ）に示すように、読み取ったカレントデータのバックアップデータをメモリ７２に格納させるため、ストア要求の発行とともに、フラッシュ要求を発行する。
【０００７】
一方、プログラムからロード要求の発行を受けた演算装置７０は、図３８中（Ｃ）、（Ｄ）に示すように、共有メモリが記憶するカレントデータとバックアップデータとをキャッシュする。また、演算装置７０は、プログラムからストア要求の発行を受けると、図３８中（Ｅ）に示すように、バックアップデータの更新をキャッシュメモリ上で行う。そして、演算装置７０は、プログラムがフラッシュ要求を発行すると、図３８中（Ｆ）に示すように、キャッシュメモリ上のバックアップデータを共有メモリに書き戻す。
【０００８】
すると、メモリ７２には、フラッシュ要求によって書き戻された最新のバックアップデータが存在する。このため、情報処理システムは、図３９中（Ｇ）に示すように、演算装置７０がダウンした場合にも、図３９中（Ｈ）に示す最新のバックアップデータを用いてリカバリを行う。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−１６３４５０号公報
【特許文献２】特開２０１１−０１８１９６号公報
【特許文献３】特開平１１−２５９３６２号公報
【特許文献４】特開平６−１９７９７号公報
【特許文献５】特開平４−１７５９４６号公報
【特許文献６】特開平８−４４６２６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、フラッシュ要求を発行するようプログラムを修正する技術では、メモリに書き戻したいデータがキャッシュされるたびにフラッシュ要求を発行するようプログラムを修正するので、プログラムが煩雑になるという問題がある。
【００１１】
図４０は、フラッシュ要求を追加したプログラムを説明するための図である。なお、図４０に示す例では、共有メモリを有するクラスタ構成のシステムが実行するプログラムを示した。例えば、図４０中（Ｉ）に示すように、クラスタ構成のシステムが実行するプログラムでは、メインプログラムが複数のサブプログラムを呼び出し、各サブプログラムにストア要求をハードウェアに発行させる。
【００１２】
このため、図４０中（Ｊ）に示すように、アドレスＡおよびアドレスＢのフラッシュ要求をプログラムに追加する場合には、フラッシュ要求を各サブプログラムが発行するようプログラムを修正する。また、クラスタ構成のシステムでプログラムを共用する場合には、プログラムを実行するクラスタの構成に応じてフラッシュ要求を実行するか否か判別するようにプログラムを修正する。このため、プログラムが煩雑になってしまう。
【００１３】
なお、プログラムが煩雑になるのを回避するため、キャッシュ上のデータが更新されるたびにメモリに書き戻すライトスルー方式を採用する手法も考えられる。図４１は、ライトスルー方式を説明するための図である。例えば、図４１中（Ｋ）に示すように、演算装置７０は、共有メモリからデータをキャッシュし、図４１中（Ｌ）に示すように、キャッシュしたデータを更新する。
【００１４】
そして、演算装置７０は、図４１中（Ｍ）に示すように、キャッシュしたデータの更新を行うたびに、キャッシュのデータを共用メモリに書き戻す。しかし、ライトスルー方式では、演算装置７０がキャッシュしたデータを更新するたびにキャッシュメモリ上のデータを共用メモリに書き戻す処理が発生するので、ボトルネックとなってしまう。
【００１５】
また、キャッシュメモリのリプレースが発生した際にデータの書き戻しを行うライトバック方式とライトスルー方式とをそのつど使い分ける方式も考えられる。しかし、ライトバック方式とライトスルー方式を使い分けした場合には、ストア要求の対象がメモリに書き戻すべきデータであるか否かをプログラム上で区別するため、プログラムの作成が困難となる。また、ライトバック方式とライトスルー方式との両方を実行するハードウェアは、回路が煩雑になる。
【００１６】
また、全てのキャッシュラインについてフラッシュ処理を行う手法も考えられるが、全てのキャッシュラインについてフラッシュ処理を行った場合は、フラッシュ処理に要する時間が多くなってしまう。また、キャッシュメモリには、演算処理に用いられるデータ等メモリに書き戻すべきではないデータも存在するので、処理性能が劣化してしまう。
【００１７】
本願は、１つの側面では、プログラムにフラッシュ要求を発行させるための修正量を削減することを目的とする。
【課題を解決するための手段】
【００１８】
１つの側面では、主記憶装置が記憶するデータを一時的に保持するキャッシュメモリを有する演算装置である。また、演算装置は、キャッシュメモリが保持するデータごとに、アプリケーションを実行する演算部を有する。また、演算装置は、キャッシュメモリが保持するデータのうち、演算部が実行するアプリケーションが指定した期間内に演算部により更新されたか否かを示すセクタ情報を記憶する記憶部を有する。そして、演算装置は、アプリケーションが指定した期間が終了した場合は、キャッシュメモリが保持するデータのうち、記憶部が記憶するセクタ情報が更新された旨を示すデータをキャッシュメモリから主記憶装置に書き戻す書き戻し部を有する。
【発明の効果】
【００１９】
１つの側面では、プログラムにフラッシュ要求を発行させるための修正量を削減することができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施例１に係る情報処理システムを説明するための図である。
【図２】図２は、実施例１に係るノードの機能構成を説明するための図である。
【図３】図３は、実施例１に係るメモリの割当を説明するための図である。
【図４】図４は、実施例１に係る情報処理システムが各メモリにマッピングするメモリマップを説明するための図である。
【図５】図５は、実施例１に係る情報処理システムが割当てる共有メモリ領域を説明するための図である。
【図６】図６は、実施例１に係る情報処理システムにおけるハードウェアとソフトウェアとの関係を説明するための図である。
【図７】図７は、実施例１に係るアプリケーションとミドルウェアとの動作を説明するための図である。
【図８】図８は、実施例１に係るＣＰＵが実行する処理を説明するための図である。
【図９】図９は、実施例１に係るＣＰＵのキャッシュフラッシュの効果を説明するための図である。
【図１０】図１０は、実施例１に係るＣＰＵの効果を説明するための図である。
【図１１】図１１は、実施例２に係るノードの機能構成を説明するための図である。
【図１２】図１２は、概要セクタフラグを用いたキャッシュフラッシュを説明するための図である。
【図１３】図１３は、実施例３に係るノードの機能構成を説明するための図である。
【図１４】図１４は、マルチコア対応の概要セクタフラグを説明するための図である。
【図１５】図１５は、実施例４に係るノードの機能構成を説明するための図である。
【図１６】図１６は、フラッシュの対象を特定のウェイに限定する処理の一例を説明するための図である。
【図１７】図１７は、実施例５に係るＣＰＵの機能構成を説明するための図である。
【図１８】図１８は、Ｌ１キャッシュタグを説明するための図である。
【図１９】図１９は、Ｌ１キャッシュを説明するための図である。
【図２０】図２０は、実施例５に係るセクタＩＤ生成部が実行する処理を説明するための図である。
【図２１】図２１は、Ｌ２キャッシュタグとＬ２キャッシュとＬ２キャッシュ概要セクタフラグを説明するための図である。
【図２２】図２２は、実施例５に係るＬ２キャッシュアクセスコントローラが送受信する信号を説明するための図である。
【図２３】図２３は、Ｌ１キャッシュタグに格納するセクタＩＤを生成する処理の流れを説明するためのフローチャートである。
【図２４】図２４は、Ｌ１キャッシュのセクタＩＤを登録／更新する処理の流れを説明するためのフローチャートである。
【図２５】図２５は、Ｌ１キャッシュタグに登録したセクタＩＤの遷移を説明するための図である。
【図２６】図２６は、Ｌ２キャッシュにおけるセクタＩＤを登録する処理の流れを説明するためのフローチャートである。
【図２７】図２７は、共有メモリ域のみをフラッシュ対象とする処理の流れを説明するためのフローチャートである。
【図２８】図２８は、フラッシュ対象のウェイに上限がある際にセクタＩＤを登録する処理の流れを説明するためのフローチャートである。
【図２９】図２９は、フラッシュ対象のウェイに上限がある際の処理のバリエーションを説明するためのフローチャートである。
【図３０】図３０は、Ｌ２キャッシュのセクタＩＤの遷移を説明するための第１の図である。
【図３１】図３１は、Ｌ２キャッシュのセクタＩＤの遷移を説明するための第２の図である。
【図３２】図３２は、Ｌ２キャッシュ概要セクタフラグを設定する処理の流れを説明するためのフローチャートである。
【図３３】図３３は、フラッシュを実行する処理の流れを説明するためのフローチャートである。
【図３４】図３４は、ストア時にキャッシュミスが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。
【図３５】図３５は、ストア時にキャッシュヒットした際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。
【図３６】図３６は、コンテキストスイッチが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。
【図３７】図３７は、バックアップ処理を説明するための図である。
【図３８】図３８は、フラッシュ処理について説明するための図である。
【図３９】図３９は、演算装置がダウンした際の処理を説明するための図である。
【図４０】図４０は、フラッシュ要求を追加したプログラムを説明するための図である。
【図４１】図４１は、ライトスルー方式を説明するための図である。
【発明を実施するための形態】
【００２１】
以下に添付図面を参照して本願に係る演算装置、情報処理装置および演算方法について説明する。
【実施例１】
【００２２】
以下の実施例１では、図１を用いて、情報処理システムの一例を説明する。図１は、実施例１に係る情報処理システムを説明するための図である。図１に示す例では、情報処理システム１は、クライアント端末２、クアイアント端末２ａ、ＬＡＮ（Local  Area  Network）スイッチ３、管理端末４、ＬＡＮスイッチ５、２重のグローバルクロスバ６、複数のノード１０〜１０ｍを有する。また、グローバルクロスバ６は、サービスプロセッサ７を有する。
【００２３】
本実施例において、ノードは１つの独立したＯＳ（Operating  System）が走行する単位であり、ＯＳが走行する為に最低限必要な装置を含む。後に詳細に述べるが、それらは１つ以上のＣＰＵ、メモリ、ＨＤＤ（Hard  Disk  Drive）またはＨＤＤに代わる外部記憶装置を有する。ノードは物理的に単一の装置であっても良いし、ケーブル等の装置間接続機能によって接続されて物理的に複数の装置で構成されていても良い。
【００２４】
各ノード１０〜１０ｍは、サービス用ＬＡＮによってＬＡＮスイッチ３および各クライアント端末２、２ａと接続されている。また、各ノード１０〜１０ｍは、内部ＬＡＮによってＬＡＮスイッチ５と接続されている。また、各ノード１０〜１０ｍは、管理ＬＡＮを介して管理端末４と接続されている。また、各ノード１０〜１０ｍは、２重のグローバルクロスバ６と接続されており、インターコネクトを介して、相互に接続されている。
【００２５】
各クライアント端末２、２ａは、サービス用ＬＡＮを介して各ノード１０〜１０ｍからサービスを取得する。なお、図１では図示を省略したが、情報処理システム１は、任意の数のクライアント端末を他にも有してもよい。
【００２６】
ノード１０は、サービスプロセッサ１１、ＣＰＵ１２、ローカルＸＢ（クロスバ）１６を有する。また、他のノード１０ａ〜１０ｍは、ノード１０と同様に、サービスプロセッサ、ＣＰＵ、ローカルＸＢを有する。なお、以下の説明では、各ノード１０ａ〜１０ｍは、ノード１０と同様の機能を発揮するものとして、説明を省略する。
【００２７】
サービスプロセッサ１１は、管理ＬＡＮを介して管理端末４と接続されており、各ノード１０の電源管理等の管理制御を実行する。なお、グローバルクロスバ６が有するサービスプロセッサ７は、サービスプロセッサ１１のマスタとして動作し、全体の管理制御を行う。ここで、各サービスプロセッサ７、１１が実行する管理制御の例としては、電源管理、リセット、動作モードの変更、ノードの追加や削除の設定、エラーログの収集、縮退動作制御等である。
【００２８】
また、ノード１０〜１０ｍは、それぞれ独立してＯＳ（Operating  System）を実行する。また、図１では省略したが、ノード１０は、ＣＰＵ１２以外にも複数のＣＰＵを有し、各ＣＰＵは、ローカルＸＢ１６を介して、グローバルクロスバ６と接続されている。
【００２９】
また、ノード１０のＣＰＵは、メモリアクセスのリクエストであるメモリアクセス要求をローカルＸＢ１６に出力することで、他のノードにメモリアクセス要求を転送する。そして、ノード１０のＣＰＵは、メモリアクセス要求を取得すると、自身が自身と接続されたメモリに対してアクセスを行う際と同様にメモリアクセスを実行する。すなわち、情報処理システム１には、ＮＵＭＡ（Non-Uniform  Memory  Access）の技術が適用されており、各ノード１０〜１０ｍが、それぞれのメモリを共用して処理を実行する。
【００３０】
次に、図２を用いて、ノード１０の機能構成について説明する。図２は、実施例１に係るノードの機能構成を説明するための図である。図２に示す例では、ノード１０は、サービスプロセッサ１１、複数のＣＰＵ１２〜１５、ローカルＸＢ１６、複数のメモリ１７〜２４、ＰＣＩｅ（Peripheral  Component  Interconnect  Express）スイッチ２５を有する。また、ノード１０は、サービス用ＬＡＮと接続するためのＬＡＮアダプタ２６、管理用ＬＡＮと接続するためのＬＡＮアダプタ２７、ＳＡＳ（Serial  Attached  SCSI）２８、ＨＤＤ（Hard  Disk  Drive）２９を有する。
【００３１】
また、メモリ１７およびメモリ１８は、ＣＰＵ１３と接続されており、ＣＰＵ１３によるメモリアクセスを受付ける記憶装置である。また、メモリ１９およびメモリ２０は、ＣＰＵ１２と接続されており、ＣＰＵ１２によるメモリアクセスを受付ける記憶装置である。また、メモリ２１およびメモリ２２は、ＣＰＵ１４と接続されており、ＣＰＵ１４によるメモリアクセスを受付ける記憶装置である。
【００３２】
また、メモリ２３およびメモリ２４は、ＣＰＵ１５と接続されており、ＣＰＵ１５によるメモリアクセスを受付ける記憶装置である。なお、図２に示す例では、ノード１０は、ＨＤＤ２９を有しているが、実施例はこれに限定されるものではなく、ＳＡＮ（Storage  Area  Network）等の技術を適用し、ノード１０の外部に設置してもよい。
【００３３】
サービスプロセッサ１１は、ノード１０の管理制御を実行する。具体的には、サービスプロセッサ１１は、処理を実行するプロセッサとＦＰＧＡ（Field-Programmable  Gate  Array）を有し、管理端末４から管理用ＬＡＮを介して、管理制御の実行命令を受付ける。そして、サービスプロセッサ１１は、管理端末４から受付けた実行命令に従って、各種管理制御を実行する。
【００３４】
ＰＣＩｅスイッチ２５は、各ＣＰＵ１２〜１５からＰＣＩｅスロットを介して接続されるＩ／Ｏ装置等へのアクセスを制御するスイッチである。また、ＬＡＮアダプタ２６は、サービス用ＬＡＮとノード１０とを接続するＬＡＮアダプタである。また、ＬＡＮアダプタ２７は、管理用ＬＡＮとノード１０とを接続するＬＡＮアダプタである。また、ＳＡＳ２８は、ＰＣＩｅスロットに搭載されたＬＡＮやＳＡＳ用のアダプタであり、ＨＤＤ２９と各ＣＰＵ１２〜１５との接続を中継する。
【００３５】
次に、各ＣＰＵ１２〜１５について説明する。各ＣＰＵ１２〜１５は、それぞれキャッシュメモリ１２ａ〜１５ａを有する。また、各ＣＰＵ１２〜１５は、相互に接続されており、メモリアクセス要求や応答を相互に送受信することができる。以下、ＣＰＵ１２について説明する。なお、ＣＰＵ１２は、他のＣＰＵ１３〜１５と相互に接続されている。なお、ＣＰＵ１３〜１５は、ＣＰＵ１２と同様の機能を発揮するものとして説明を省略する。
【００３６】
ＣＰＵ１２は、メモリ１９またはメモリ２０が記憶するデータをキャッシュするキャッシュメモリ１２ａを有し、キャッシュしたデータを用いて、演算処理を実行する。また、ＣＰＵ１２は、メモリ１９およびメモリ２０に対してメモリアクセスを行うメモリインターフェースの機能を有する。また、ＣＰＵ１２は、ＰＣＩｅスイッチ２５を介して、ＨＤＤ２９や内部ＬＡＮ、管理用ＬＡＮ等を用いたアクセスを制御するＰＣＩｅインターフェース機能を有する。
【００３７】
ここで、ＣＰＵ１２が有するキャッシュメモリ１２ａは、複数のキャッシュラインを有する。そして、ＣＰＵ１２は、アプリケーション３５が指定した期間内にデータの更新を行った場合には、更新したデータが記憶されたキャッシュラインに、データを更新した旨を示すセクタフラグを格納する。そして、ＣＰＵ１２は、アプリケーション３５が指定した期間が終了した場合には、キャッシュメモリ１２ａの各キャッシュラインのうち、セクタフラグが格納されたキャッシュラインのデータをメモリ１７〜２４に書き出すフラッシュ処理を実行する。
【００３８】
また、ＣＰＵ１２は、ローカルＸＢ１６、グローバルクロスバ６を介して、他のノード１０ａ〜１０ｍが有するＣＰＵとインターコネクトで接続され、相互にメモリアクセスの要求等を送受信するインターコネクトルータ機能を有する。このようなＣＰＵ１２は、例えば、実行するプロセスにより、メモリ１９、または、メモリ２０に対するメモリアクセス要求が発行された場合には、以下の処理を実行する。すなわち、ＣＰＵ１２は、メモリ１９、または、メモリ２０にアクセスし、アクセス対象となるデータをキャッシュする。
【００３９】
また、ＣＰＵ１２は、実行するプロセスにより、メモリ１９、メモリ２０以外のメモリに対するメモリアクセス要求が発行された場合には、メモリアクセス対象となるメモリと接続されたＣＰＵを識別し、識別したＣＰＵに対してメモリアクセス要求を送信する。詳細には、ＣＰＵ１２は、アクセス対象となるメモリアドレスと、メモリアドレスが示す記憶領域にアクセスするＣＰＵを一意に示す情報とを対応付けたノードマップを有する。
【００４０】
そして、ＣＰＵ１２は、プロセスがメモリアクセス要求を発行した場合には、ノードマップを参照し、メモリアクセスの対象となるメモリアドレスに対応付けられたＣＰＵを識別する。その後、ＣＰＵ１２は、識別したＣＰＵを宛先とするパケットを生成し、生成したパケットにメモリアクセス要求を格納して、ＣＰＵ１２〜１５の相互接続、又はローカルＸＢ１６に出力する。ローカルＸＢ１６に出力された場合には、ローカルＸＢ１６は、グローバルクロスバ６を介して、パケットを宛先となるＣＰＵに送信する。
【００４１】
ここで、ＣＰＵ１２は、上述した処理に加えて、以下の処理を実行する。まず、ＣＰＵ１２は、メモリ１９およびメモリ２０の各記憶領域のうち、他のノードと共有する記憶領域に、メモリトークンと呼ばれる値を予め設定する。そして、ＣＰＵ１２は、メモリ１９またはメモリ２０に対してメモリアクセス要求を発行するＣＰＵに対し、アクセスを許可する記憶領域を通知するとともに、通知した記憶領域に対応するメモリトークンをアクセストークンとして通知する。
【００４２】
また、ＣＰＵ１２は、自身がメモリアクセス要求を送信するノードから、アクセストークンをあらかじめ取得し、取得したアクセストークンを保持する。そして、ＣＰＵ１２は、メモリアクセス要求を発行する場合には、メモリアクセス要求とともに、保持したアクセストークンをパケットに格納して送信する。
【００４３】
また、ＣＰＵ１２は、他のノードのＣＰＵからメモリアクセス要求を受信した場合は、メモリアクセス要求とともに受信したアクセストークンが、アクセス対象となる記憶領域に対応するメモリトークンと一致するか否かを判別する。そして、ＣＰＵ１２は、アクセストークンとメモリトークンとが一致する場合には、メモリアクセスを実行し、アクセストークンとメモリトークンとが一致しない場合には、メモリアクセスの実行を拒否する。
【００４４】
なお、ＣＰＵ１２は、メモリ１９、および、メモリ２０に対するメモリアクセスを実行する場合には、メモリ１９、または、メモリ２０からキャッシュされたデータのコヒーレンシを保持する処理を実行する。例えば、ＣＰＵ１２は、メモリ１９、または、メモリ２０からデータをキャッシュしたＣＰＵに対してスヌープを送信し、キャッシュされたデータのライトバックを実行する。
【００４５】
ローカルＸＢ１６は、ノード１０が有するＣＰＵ１２〜１５と、他のノード１０ａ〜１０ｍが有するＣＰＵとの間でやり取りされるパケットを、指定相手先に転送するためのスイッチである。例えば、ローカルＸＢ１６は、ＣＰＵ１２が、ＣＰＵ１２ａを宛先として発行したパケットを、グローバルクロスバ６を介して、ノード１０ａが有するＣＰＵ１２ａに送信する。
【００４６】
メモリ１７〜メモリ２４は、ＯＳやアプリケーションが利用するデータを記憶するメモリであり、例えば、ＤＩＭＭ（Dual  In-Line  Memory  Module）である。また、メモリ１７〜２４は、同一のメモリアドレス空間にマッピングされている。
【００４７】
また、メモリ１７〜２４は、同一ノード内のＣＰＵ１２〜１５のみがアクセス可能な領域、すなわち、自身を有するノード専用の領域であるローカル領域を有する。また、メモリ１７〜２４は、情報処理システム１が有する任意のＣＰＵがアクセス可能な領域、すなわち、全てのノードが利用可能な共有メモリ領域を有する。また、メモリ１７〜メモリ２４の共有メモリ領域は、複数のセグメントに分割される。そして、各セグメントは、メモリトークンによるアクセス制御が行われるプロテクト領域、又は、メモリトークンによるアクセス制御を行わないノンプロテクト領域となる。
【００４８】
ここで、図３、図４を用いて、各メモリ１７〜２４にマッピングされるメモリアドレスについて説明する。図３は、実施例１に係るメモリの割当を説明するための図である。例えば、情報処理システム１は、各ノードが有する２つのメモリのうち、一方のメモリをローカル領域のみのメモリとし、他方のメモリを共用メモリ領域のみのメモリとする。すなわち、図３中（ａ）に示すように、メモリ１７、メモリ１９、メモリ２１、メモリ２３をノード専用のメモリとし、図３中（ｂ）に示すように、メモリ１８、メモリ２０、メモリ２２、メモリ２４を共用するメモリとする。
【００４９】
図４は、実施例１に係る情報処理システムが各メモリにマッピングするメモリマップを説明するための図である。なお、図４には、全部で１２８テラバイトのメモリアドレス空間が準備され、そのうちローカル領域に６４テラバイトが割当てられ、共有メモリ領域に６４テラバイトが割当てられる例について示す。
【００５０】
例えば、情報処理システム１は、ノード１０〜１０ｍが有するメモリのうち、ローカル領域として用いる範囲に「０」から「２４６−１」までのメモリアドレスを割当てる。また、情報処理システム１は、ノード１０〜１０ｍが有するメモリのうち、共有メモリ領域として用いる範囲に、「２４６」から「２４7−１」までのメモリアドレスを割当てる。
【００５１】
すなわち、図３および図４に示す例では、情報処理システム１は、図３中（ａ）に示すメモリ１７、メモリ１９、メモリ２１、メモリ２３に対して、図４中（ｃ）に示す範囲のメモリアドレスをマッピングする。また、情報処理システム１は、図３中（ｂ）に示すメモリ１８、メモリ２０、メモリ２２、メモリ２４に対して、図４中（ｄ）に示す範囲のメモリアドレスをマッピングする。なお、図４中の「２４7」から「２４8−１」までのアドレスは、ＵＣ（Uncacheable）領域として用いられるアドレスの範囲であり、例えば、ＨＤＤ２９等のＩ／Ｏ装置が用いるＩ／Ｏ空間として用いられるアドレスの範囲である。
【００５２】
このように、情報処理システム１は、各ノード１０〜１０ｍが有するメモリに対して、単一のメモリアドレス空間をマッピングする。このため、任意のＣＰＵが任意のノードの共有メモリ領域に対して直接アクセスできる。なお、図４に示すメモリマップはあくまで一例であり、任意の割当を行うこととしても良い。
【００５３】
すなわち、メモリマップ上のメモリアドレスの全てがメモリに割当てられている必要はなく、メモリホールが存在しても良い。また、情報処理システム１が有する各ノードにＯＳが利用するローカル領域が存在し、かつ、１つ以上のノードに共有メモリ領域が存在するように、メモリマップを設定すればよい。
【００５４】
なお、情報処理システム１は、１つのノード内に含まれるメモリ（例えば、メモリ１７とメモリ１８）に対して連続するメモリアドレスをマップした場合は、制御資源を削減することができる。また、情報処理システム１は、少なくとも、セグメント領域のアライメントをそろえることができるようにメモリアドレスの割り当てを行う。
【００５５】
次に、図５を用いて、各ノードのメモリに対して割当てられる共有メモリ領域について説明する。図５は、実施例１に係る情報処理システムが割当てる共有メモリ領域を説明するための図である。なお、図５に示す例では、情報処理システム１がノード＃０〜＃ｎを有し、各ノード＃０〜＃ｎに対して共有メモリ領域を振り分ける例について説明する。
【００５６】
例えば、図５中（ｅ）に示すように、情報処理システム１は、６４テラバイトのローカル領域と、６４テラバイトのメモリ領域とを、各ノード＃０〜＃ｎに対して割当てる。詳細には、情報処理システム１は、図５中（ｆ）に示すように、６４テラバイトの共有メモリ領域を、各ノード＃０〜＃ｎに対して均等に振り分ける。
【００５７】
ここで、各ノード＃０〜＃ｎは、振り分けられた共有メモリ領域を、プロテクト領域とノンプロテクト領域とに分ける。ここで、プロテクト領域とは、他のノードからメモリアクセス要求を受信した際に、アクセストークンとメモリトークンとが一致するか否かを判別することで、アクセス保護を行う領域である。また、ノンプロテクト領域とは、他のノードから自由にメモリアクセスを行うことができる領域である。
【００５８】
例えば、図５中（ｇ）に示すように、ノード＃１は、自身に割当てられた共有メモリ領域のうち、最大で４テラバイトをプロテクト領域、または、ノンプロテクト領域とすることができる。また、図５中（ｈ）に示すように、ノード＃１は、共有メモリ領域をセグメント＃０〜＃２０４７までの２ギガバイトのセグメントに分割する。そして、ノード＃１は、図５中（ｉ）に示すように、セグメントごとにメモリトークンを設定する。
【００５９】
また、図５に示す例では、ノード＃１は、セグメント＃０〜＃２をプロテクト領域とし、メモリトークンを設定する。なお、メモリトークンは、例えば、１３ビットの値である。また、図５に示す例では、ノード＃１は、セグメント＃３〜＃２０４７をノンプロテクト領域とし、メモリトークンとして、「ａｌｌ０」を設定する。すなわち、各ノード＃０〜＃ｎは、ノンプロテクト領域に対してアクセスを行う場合には、図５中（ｊ）に示すように、「ａｌｌ０」のアクセストークンを用いることで、アクセスを行うことができる。
【００６０】
また、ノード＃ｍも、自身の共有メモリ領域をセグメント＃０〜＃２０４７に分割し、各セグメント＃０〜＃２０４７にメモリトークンを設定する。なお、ノード＃ｍが自身の各セグメント＃０〜＃２０４７に対して設定したメモリトークンは、図５中（ｊ）に示すように、ノード＃１がアクセストークンとして用いることとなる。このため、ノード＃１は、ノード＃ｍの共有メモリ領域にアクセスする場合には、ノード＃ｍが設定したメモリトークンを取得し、取得したメモリトークンをアクセストークンとして用いることで、ノード＃ｍの共有メモリ領域にアクセスを行う。
【００６１】
次に、図６を用いて、各ＣＰＵ１２〜１５のハードウェアと各ＣＰＵ１２〜１５が実行するソフトウェアとの関係について説明する。図６は、実施例１に係る情報処理システムにおけるハードウェアとソフトウェアとの関係を説明するための図である。なお、図６に示す例では、ＣＰＵ１２が有するハードウェアをハードウェア３０とし、ＣＰＵ１３が有するハードウェアをハードウェア３０ａとした。また、図６に示す例では、ＣＰＵ１４が有するハードウェアをハードウェア３０ｂとし、ＣＰＵ１５が有するハードウェアをハードウェア３０ｃとした。
【００６２】
例えば、ＣＰＵ１２は、ハードウェア３０を有し、ＣＰＵ１２専用のローカルなメモリ１７および共有メモリ１８、２０、２２、２４にアクセスする。また、ＣＰＵ１２は、ハードウェア３０上で、ハイパーバイザ３１、オペレーティングシステム３２、ドライバ３３、ミドルウェア３４を動作させる。また、ＣＰＵ１２は、ミドルウェア３４上に、各ＣＰＵ１２〜１５が協調して動作させるアプリケーション３５を実行する。
【００６３】
また、他のＣＰＵ１３〜１５は、ＣＰＵ１２と同様に、ハードウェア３０ａ〜３０ｃを有し、ハイパーバイザ３１ａ〜３１ｃ、オペレーティングシステム３２ａ〜３２ｃ、ドライバ３３ａ〜３３ｃ、ミドルウェア３４ａ〜３４ｃを動作させる。
【００６４】
次に、図７を用いて、ＣＰＵ１２が実行するアプリケーションとミドルウェアとの動作について説明する。図７は、実施例１に係るアプリケーションとミドルウェアとの動作を説明するための図である。例えば、アプリケーション３５は、図７中の区間Ａにおいて、アドレス１に格納されたデータを読み込むロード要求（LD：Lord）を発行するとともに、ロードしたデータをアドレス２に格納するセット要求（ST：Set）を発行する。すると、図７では省略したが、ミドルウェア３４は、アプリケーション３５が発行したロード要求とセット要求とをハードウェア３０に伝達し、処理を実行させる。
【００６５】
次に、アプリケーション３５は、記録開始をミドルウェア３４に通知し、区間Ａから区間Ｂへの移行をミドルウェア３４に通知する。すると、ミドルウェア３４は、区間Ｂへ移行したことを示すセクタモードの設定を行う。すなわち、ミドルウェア３４は、アプリケーション３５が指定した期間内である旨を示す設定を行う。
【００６６】
次に、アプリケーション３５は、データのバックアップを行うため、アドレス３に格納されたデータのロード要求と、アドレス４に格納されたデータのストア要求とを発行する。このような場合には、ミドルウェア３４は、発行されたロード要求とストア要求とをハードウェア３０に実行させるとともに、ストア要求の対象となるアドレス４のキャッシュラインにセクタフラグを設定する。
【００６７】
その後、アプリケーション３５は、記録終了を示すＳＹＮＣをミドルウェア３４に発行する。すると、ミドルウェア３４は、区間Ｂが終了したものとし、セクタモードを解除する。そして、ミドルウェア３４は、セクタフラッシュ要求をハードウェア３０に発行する。ここで、セクタフラッシュ要求とは、セクタフラグが設定されたキャッシュラインの書き戻し要求である。すなわち、ミドルウェア３４は、区間Ｂにおいてストア要求の対象となったアドレス４のデータのみをメモリ１７〜２４に書き戻すよう、ハードウェア３０に要求する。その後、ミドルウェア３４は、通常の処理を行う。
【００６８】
なお、区間Ａと区間Ｂは、例えば、ＡＳＩ（Address  Space  Identifier）レジスタライト等を用いて、スタティックなモードで切り換えることが可能である。また、モードの切り換えは、アプリケーション３５からの指定で行う事が可能であり、コンテキストスイッチが発生した際には、状態の保存やリストアが行われる対象となる。
【００６９】
例えば、ＣＰＵ１２が実行中のアプリケーションＡがセクタモードを区間Ｂに変更した後に、アプリケーションＢへのコンテキストスイッチが発生すると、アプリケーションＡのセクタモードが区間Ａであることが保持される。そして、ＣＰＵ１２が実行するアプリケーションがアプリケーションＢからアプリケーションＡに変わる場合には、コンテキストスイッチが発生し、再度区間がＢに移行する。
【００７０】
なお、セクタフラッシュが実行させるとセクタフラグが設定されたキャッシュラインのステートは、インバリッド（Invalid）となる。このため、図７に示す例では、ミドルウェア３４がセクタフラッシュ要求を発行した後に、アドレス４に対するロード要求等が発行されると、キャッシュミスが発生することとなる。
【００７１】
次に、図８を用いて、実施例１に係るＣＰＵ１２が実行するアプリケーション３５と、ＣＰＵ１２のハードウェア３０が実行する処理について説明する。図８は、実施例１に係るＣＰＵが実行する処理を説明するための図である。なお、図８に示す例では、キャッシュ１２ａがメモリ１７に格納されたデータをキャッシュする例について記載した。
【００７２】
図８に示す例では、ハードウェア３０は、現在の処理が区間Ａの処理であるか区間Ｂの処理であるかを区別するために、セクタモードレジスタを有する。例えば、セクタモードレジスタは、ＣＰＵ１２が有するＡＳＩレジスタの１つであり、値が「０」である場合には、現在の処理が区間Ａの処理であることを示し、値が「１」である場合には、現在の処理が区間Ｂの処理であることを示す。
【００７３】
また、図８に示す例では、キャッシュ１２ａには、複数のキャッシュラインが存在し、各キャッシュラインには、エントリ、セクタ、ステート、アドレス、データが格納される。ここで、エントリとは、各キャッシュラインを識別するための情報であり、セクタとは、アプリケーション３５が指示する期間内に更新が行われたか否かを示すセクタフラグである。
【００７４】
また、ステートとは、データの状態を示す情報であり、例えば、ＭＥＳＩプロトコル（イリノイプロトコル）に基づくキャッシュラインの状態を示す情報を格納する。詳細には、状態データに「Ｍ：Ｍｏｄｉｆｙ」が格納されている場合には、同じキャッシュラインに格納されたデータを排他的にキャッシュしており、かつ、キャッシュしたデータがプロセッサコア４ａによって最新の状態に更新されていることを示す。  
【００７５】
また、状態データに「Ｅ：Ｅｘｃｌｕｓｉｖｅ」が格納されている場合には、同じキャッシュラインに格納されたデータを排他的にキャッシュしており、かつ、キャッシュしたデータがプロセッサコア４ａによって更新されていない状態を示す。また、状態データに「Ｓ：Ｓｈａｒｅｄ」が格納されている場合には、他のキャッシュメモリ５ｂ、５ｃが同一の共有データをキャッシュしていることを示す。また、状態データに「Ｉ：Ｉｎｖａｌｉｄ」が格納されている場合には、同一キャッシュラインのデータが無効であることを示す。
【００７６】
また、アドレスとは、キャッシュ元のデータが格納されているメモリ１７のメモリアドレスを示す。また、データとは、キャッシュ対象となるデータである。また、図８に示す例では、ハードウェア３０は、各キャッシュラインのセクタの値に応じてメモリ１７への書き戻しを行うセクタフラッシュ制御ステートマシンを有する。具体的には、セクタフラッシュ制御ステートマシンとは、アプリケーション３５からの要求に応じて、区間Ｂにおいて更新があったキャッシュラインのデータのみをメモリ１７に書き戻す。
【００７７】
以下、アプリケーション３５とハードウェア３０の動作について説明する。例えば、アプリケーション３５は、図８中（ｋ）に示すように、データ「ｘｘ」をアドレス「１００」に格納するセット要求を発行する。すると、ハードウェア３０は、キャッシュ１２ａが有するエントリ「５」のキャッシュラインに、アドレス「１００」のデータ「ａａ」が格納されていると判別し、エントリ「５」のキャッシュラインのデータを「ａａ」から「ｘｘ」に書き換える。
【００７８】
また、ハードウェア３０は、データの更新を行ったため、ステートを「Ｅ」から「Ｍ」に変更する。ここで、ハードウェア３０は、セクタモードレジスタの値が「０」であるため、エントリ「５」のキャッシュラインのデータについて、セクタの値を「０」のままにする。
【００７９】
次に、アプリケーション３５は、セクタモードレジスタ（SctRg:Sector  Mode  Register）に「１」を格納するセット要求を発行する。すなわち、アプリケーション３５は、区間Ａから区間Ｂへの移行を要求する。すると、ハードウェア３０は、セクタモードレジスタに「１」を格納する。
【００８０】
次に、アプリケーション３５は、図８中（ｌ）に示すように、データ「ｙｙ」をアドレス「２００」に格納するセット要求を発行する。すると、ハードウェア３０は、エントリ「５０」のキャッシュラインに、アドレス「２００」のデータ「ｂｂ」が格納されていると判別し、エントリ「５０」のキャッシュラインのデータを「ｂｂ」から「ｙｙ」に書き換え、ステートを「Ｅ」から「Ｍ」に変更する。
【００８１】
さらに、ハードウェア３０は、セクタモードレジスタの値が「１」であるため、エントリ「５０」のキャッシュラインにセクタフラグ「１」を格納する。つまり、ハードウェア３０は、アプリケーション３５が指定した区間内において、エントリ「５０」のキャッシュラインのデータが更新された旨を示すセクタフラグを設定する。
【００８２】
続いて、アプリケーション３５は、セクタモードレジスタに「０」を格納するセット要求を発行する。すなわち、アプリケーション３５は、区間Ｂから区間Ａへの移行を要求する。すると、ハードウェア３０は、セクタモードレジスタに「０」を格納する。その後、アプリケーション３５は、図８中（ｍ）に示すように、セクタフラッシュ制御ステートマシーン（Sctq）に「１」を格納する要求を発行することで、キャッシュフラッシュの実行を要求する。図８中（ｎ）に示すように、ハードウェア３０は、各キャッシュラインを検査し、セクタに「１」が格納されたエントリを検索する。
【００８３】
すると、ハードウェア３０は、図８中（ｏ）に示すように、エントリ「５０」のセクタが「１」であると判別する。この結果、ハードウェア３０は、図８中（ｐ）に示すように、エントリ「５０」のキャッシュラインのデータ「ｙｙ」をメモリ１７に書き戻す。すなわち、ハードウェア３０は、区間Ｂにおいて更新されたデータのみをメモリ１７に書き戻す。そして、ハードウェア３０は、エントリ「５０」のキャッシュラインのセクタを「０」に変更するとともに、ステートを「Ｉ」に変更する。
【００８４】
このように、ハードウェア３０は、キャッシュ１２ａが有する複数のキャッシュラインのうち、アプリケーション３５から指示された期間内、すなわち区間Ｂにおいて更新したデータが格納されたキャッシュラインにセクタフラグ「１」を設定する。そして、ハードウェア３０は、アプリケーション３５から指示された期間が終了し、アプリケーション３５からキャッシュフラッシュの要求を受付けた場合には、セクタフラグが「１」のキャッシュラインに格納されたデータのみをメモリ１７に書き戻す。
【００８５】
このため、アプリケーション３５は、メモリ１７に書き戻すべきデータのストア要求を発行するたびに、アドレスを指定したフラッシュ要求を発行せずともよい。すなわち、アプリケーション３５は、メモリ１７に書き戻すべきデータのストア要求が生じる区間を指定し、その後フラッシュ要求を発行するだけでよい。このため、ハードウェア３０を有するＣＰＵ１２は、アプリケーション３５のプログラムにおける修正量を抑えることができる。
【００８６】
また、ＣＰＵ１２は、キャッシュメモリ１２ａが有する各キャッシュラインのうち、セクタフラグが「１」のキャッシュラインに格納されたデータのみをメモリ１７に書き戻すので、キャッシュフラッシュの処理時間を短縮することができる。また、ＣＰＵ１２は、セクタフラグが「１」のキャッシュラインに格納されたデータのみをメモリ１７に書き戻すので、不要なキャッシュフラッシュの量を抑える結果、キャッシュフラッシュに伴う性能劣化を最小限に抑えることができる。
【００８７】
図９は、実施例１に係るＣＰＵのキャッシュフラッシュの効果を説明するための図である。図９中（ｘ）に示すように、従来のＣＰＵは、更新されたデータがキャッシュしたデータの一部のみであっても、全キャッシュデータをメモリに書き戻すので、キャッシュフラッシュの処理時間を増大させ、システム全体の性能を劣化させた。
【００８８】
しかし、図９中（ｙ）に示すように、ＣＰＵ１２は、セクタフラグを用いて、キャッシュ１２ａに格納されたデータのうち、メモリ１２〜２４に書き戻すべきデータのみを検出し、検出したデータのみをメモリ１７〜２４に書き戻す。この結果、ＣＰＵ１２は、キャッシュフラッシュの処理時間を短縮するとともに、情報処理システム１の性能劣化を防ぐことができる。
【００８９】
また、図１０は、実施例１に係るＣＰＵの効果を説明するための図である。図１０に示すように、従来の情報処理システムが実行するアプリケーションでは、メインプログラムＳｙｎｃをミドルウェアに発行する。なお、ミドルウェアは、このＳｙｎｃに対してＮＯＰ（No  Operation）である。次に、メインプログラムは、複数のサブプログラムを呼び出し、各サブプログラムがストア要求をミドルウェアに発行する。その後、メインプログラムがフラッシュ要求をミドルウェアに発行する。すると、ミドルウェアは、ＤＭＡ（Direct  Memory  Access）を用いた他ノードへのコピーを行う。
【００９０】
一方、同様のアプリケーション３５を情報処理システム１が実行した場合には、アプリケーション３５がＳｙｎｃを発行すると、ミドルウェア３４は、ＣＰＵ１２にＳｙｎｃを伝達する。この結果、ＣＰＵ１２は、アプリケーションが指定する期間、すなわち、フラッシュセクタ期間が開始したと判別する。次に、メインプログラムは、サブプログラムを呼び出し、サブプログラムは、それぞれストア要求を発行する。次に、メインプログラムは、フラッシュ要求を発行する。すると、ＣＰＵ１２は、フラッシュセクタ期間中にストア要求により更新されたデータのフラッシュを実行する。
【００９１】
このため、ＣＰＵ１２は、従来の情報処理システムが実行するアプリケーションと共通のアプリケーションを用いた際にも、キャッシュメモリ１２ａから各メモリ１７、１８にデータの書き戻しを行う事ができる。この結果、ＣＰＵ１２は、アプリケーションに対して、メモリへの書き戻しを行うためのフラッシュ要求を追加する修正の量を削減することができる。
【００９２】
［実施例１の効果］
上述したように、ＣＰＵ１２は、複数のキャッシュラインを有し、データを一時的に保持するキャッシュメモリ１２ａを有する。また、ＣＰＵ１２は、アプリケーション３５が指示した期間内にデータが更新されたか否かを示すセクタフラグをキャッシュラインごとに有する。そして、ＣＰＵ１２は、キャッシュメモリ１２ａが有するキャッシュラインのうち、セクタフラグが、アプリケーション３５が指示した期間内にデータが更新された旨を示すキャッシュラインのデータをメモリ１７〜２４に書き戻す。
【００９３】
このため、ＣＰＵ１２は、アプリケーション３５のプログラムの修正を抑えることができる。また、ＣＰＵ１２は、データの書き戻しの処理時間を短縮するとともに、情報処理システム１の性能劣化を防ぐことができる。
【実施例２】
【００９４】
実施例２では、ＣＰＵ１２が発揮する機能に加えて、アプリケーションが指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す概要セクタフラグを有するＣＰＵについて説明する。
【００９５】
図１１は、実施例２に係るノードの機能構成を説明するための図である。なお、図１１には、実施例２に係るノード１０ｎの機能構成を示したが、ノード１０ｎは、実施例１と同様の機能を有する情報処理システム１ａが有するノードである。また、図１１に示すノード１０ｎのうち、実施例１と同じ符号を付したものについては、実施例１と同様の機能を発揮するものとして、説明を省略する。図１１に示す例では、ノード１０ｎは、複数のＣＰＵ１２ｂ〜ＣＰＵ１５ｂを有する。
【００９６】
ＣＰＵ１２ｂは、キャッシュメモリ１２ａと概要セクタフラグ１２ｃを有する。また、他のＣＰＵ１３ｂ〜１５ｂも同様に、キャッシュメモリ１３ａ〜１５ａと概要セクタフラグ１３ｃ〜１５ｃを有する。なお、以下の説明では、ＣＰＵ１３ｂ〜１５ｂは、ＣＰＵ１２ｂと同様の機能を発揮するものとして、説明を省略する。
【００９７】
ＣＰＵ１２ｂは、実施例１に係るＣＰＵ１２と同様の機能を発揮するとともに、以下の機能を有する。すなわち、ＣＰＵ１２ｂは、アプリケーションが指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す複数のフラグである概要セクタフラグ１２ｃを有する。また、ＣＰＵ１２ｂは、キャッシュメモリ１２ａが有する複数のキャッシュラインを複数のグループに組み分けし、各組と概要セクタフラグ１２ｃとを対応付ける。
【００９８】
そして、ＣＰＵ１２ｂは、アプリケーションが指定した期間内に更新したデータを記憶するキャッシュラインと対応付けられた概要セクタフラグ１２ｃに、更新したデータが存在する旨を示すフラグを設定する。例えば、ＣＰＵ１２ｂは、アプリケーションが指定した期間内にデータを更新した場合には、更新したデータが格納されているキャッシュラインのセクタフラグを「１」に変更する。さらに、ＣＰＵ１２ｂは、更新したデータが格納されているキャッシュラインと対応付けられた概要セクタフラグ１２ｃを「１」とする。
【００９９】
その後、ＣＰＵ１２ｂは、アプリケーションが指定した期間が終了し、アプリケーションからフラッシュ要求が発行されると、値が「１」の概要セクタフラグ１２ｃと対応付けられたキャッシュラインを検査する。そして、ＣＰＵ１２ｂは、検査したキャッシュラインのうち、セクタフラグが「１」であるキャッシュラインを識別し、識別したキャッシュラインのデータをメモリ１７〜２４に書き戻す。
【０１００】
このように、ＣＰＵ１２ｂは、アプリケーションが指定した期間内にデータが更新されたか否かを示す概要セクタフラグ１２ｃを複数のキャッシュラインごとに有する。そして、ＣＰＵ１２ｂは、フラッシュ要求が発行された場合には、データが更新された旨を示す概要セクタフラグ１２ｃと対応するキャッシュラインを検査する。その後、ＣＰＵ１２は、セクラフラグ「１」が設定されたキャッシュラインのデータのみをメモリ１７〜２４に書き戻す。
【０１０１】
このため、ＣＰＵ１２ｂは、フラッシュ要求が発行された際に、キャッシュメモリ１２ａが有する全てのキャッシュラインを検査せずとも、アプリケーションが指定した期間内に更新されたデータを格納するキャッシュラインを識別することができる。この結果、ＣＰＵ１２ｂは、フラッシュ要求の処理時間を短縮し、情報処理システム全体の性能を向上させることができる。
【０１０２】
次に、図１２を用いて、実施例２に係るＣＰＵ１２が実行するアプリケーション３５と、ＣＰＵ１２ｂが実行する処理について説明する。図１２は、概要セクタフラグを用いたキャッシュフラッシュを説明するための図である。なお、図１２に示す例では、キャッシュメモリ１２ａが有する各キャッシュラインは、複数のグループに組み分けられているものとする。また、図１２に示す例では、ＣＰＵ１２ｂが有するハードウェア３０ｄが実行する処理について記載した。
【０１０３】
概要セクタフラグ１２ｃは、グループを識別する番号とフラグとを対応付けたエントリを複数有する。グループとは、キャッシュラインの各グループを識別する番号であり、例えば、「１」〜「Ｍ」までの番号である。なお、図１２に示す例では、エントリ「５」のキャッシュラインは、グループ「１」に組み分けられており、エントリ「５０」のキャッシュラインは、グループ「Ａ」に組み分けられている。
【０１０４】
また、フラグとは、対応付けられた番号のグループに組み分けられたキャッシュラインのうち、いずれかに格納されたデータが、アプリケーション３５が指定した期間内に更新されたか否かを示すフラグである。例えば、概要セクタフラグ１２ｂは、グループ「１」のフラグが「１」である場合には、アプリケーション３５が指定した期間内に、グループ「１」のキャッシュラインのいずれかに格納されたデータが更新された旨を示す。また、概要セクタフラグ１２ｂは、グループ「１」のフラグが「０」である場合には、アプリケーション３５が指定した期間内に、グループ「１」のキャッシュラインに格納されたデータが更新されなかった旨を示す。
【０１０５】
以下、図１２を用いて、ＣＰＵ１２ｂが実行する処理について説明する。まず、アプリケーション３５は、図１２中（ｑ）に示すように、データ「ｘｘ」をアドレス「１００」に格納するセット要求を発行する。すると、ハードウェア３０ｄは、エントリ「５」のキャッシュラインのデータを「ａａ」から「ｘｘ」に書き換え、ステートを「Ｅ」から「Ｍ」に変更する。また、ハードウェア３０ｂは、セクタモードレジスタの値が「０」であるため、エントリ「５」のキャッシュラインのデータについて、セクタの値を「０」のままにする。また、ハードウェア３０ｂは、セクタモードレジスタの値が「０」であるので、概要セクタフラグ１２ｃのうち、グループ「１」のフラグを「０」のままにする。
【０１０６】
次に、アプリケーション３５は、セクタモードレジスタに「１」を格納するセット要求を発行し、区間Ａから区間Ｂへの移行を要求する。すると、ハードウェア３０は、セクタモードレジスタに「１」を格納する。次に、アプリケーション３５は、図１２中（ｒ）に示すように、データ「ｙｙ」をアドレス「２００」に格納するセット要求を発行する。すると、ハードウェア３０ｄは、エントリ「５０」のキャッシュラインのデータを「ｂｂ」から「ｙｙ」に書き換え、ステートを「Ｅ」から「Ｍ」に変更する。
【０１０７】
また、ハードウェア３０ｂは、セクタモードレジスタの値が「１」であるため、エントリ「５０」のキャッシュラインにセクタフラグ「１」を格納する。つまり、ハードウェア３０は、アプリケーション３５が指定した区間内において、エントリ「５０」のキャッシュラインのデータが更新された旨を示すセクタフラグを設定する。さらに、ハードウェア３０ｂは、概要セクタフラグ１２ｃのうち、エントリ「５０」のキャッシュラインが組み分けられたグループ「Ａ」のフラグを「１」に変更する。
【０１０８】
続いて、アプリケーション３５は、セクタモードレジスタに「０」を格納するセット要求を発行し、区間Ｂから区間Ａへの移行を要求する。すると、ハードウェア３０ｂは、セクタモードレジスタに「０」を格納する。その後、アプリケーション３５は、図１２中（ｓ）に示すように、セクタフラッシュ制御ステートマシーンに「１」を格納する要求を発行することで、キャッシュフラッシュの実行を要求する。
【０１０９】
すると、ハードウェア３０ｄは、図１２中（ｔ）に示すように、概要セクタフラグ１２ｃの各グループと対応付けたフラグを検査し、フラグに「１」が格納されたエントリを検索する。そして、ハードウェア３０ｄは、図１２中（ｕ）に示すように、フラグが「０」であるグループ「１」のキャッシュラインについては、検査を行わなず、図１２中（ｖ）にしめすように、フラグが「１」であるグループ「Ａ」のキャッシュラインのみを検査する。そして、ハードウェア３０ｄは、図１２中（ｗ）に示すように、セクタに「１」が格納されたエントリ「５０」に格納されたデータのみをメモリ１７に書き戻す。このため、ＣＰＵ１２ｂは、キャッシュメモリ１２ａが有する全てのキャッシュラインを検査せずとも、アプリケーション３５が指定した期間内に更新したデータをメモリ１７に書き戻すことができる。
【０１１０】
［実施例２の効果］
上述したように、ＣＰＵ１２ｂは、アプリケーション３５が指定した期間内にデータが更新されたか否かを示す概要セクタフラグを複数のキャッシュラインごとに有する。そして、ＣＰＵ１２ｂは、フラッシュ要求が発行されると、データが更新された旨を示す概要セクタフラグと対応するキャッシュラインを検査する。
【０１１１】
その後、ＣＰＵ１２ｂは、検査したキャッシュラインのうち、アプリケーション３５が指定した期間内にデータが更新された旨を示すセクタフラグが格納されたキャッシュラインのデータをメモリ１７〜２４に書き戻す。このため、ＣＰＵ１２ｂは、キャッシュメモリ１２ａが有する全てのキャッシュラインを検査せずとも、アプリケーション３５が指定した期間内に更新されたデータをメモリ１７〜２４に書き戻すことができる。
【実施例３】
【０１１２】
実施例３では、ＣＰＵ１２、およびＣＰＵ１２ｂが発揮する機能に加えて、アプリケーション３５が指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す概要セクタフラグをコアごとに有するマルチコアのＣＰＵについて説明する。
【０１１３】
図１３は、実施例３に係るノードの機能構成を説明するための図である。なお、図１３には、実施例３に係るノード１０ｏの機能構成を示したが、ノード１０ｏは、実施例１と同様の機能を有する情報処理システム１ｂが有するノードである。また、図１２に示すノード１０ｏのうち、実施例１および実施例２と同じ符号を付したものについては、実施例１および実施例２と同様の機能を発揮するものとして、説明を省略する。図１３に示す例では、ノード１０ｏは、複数のＣＰＵ１２ｄ〜ＣＰＵ１５ｄを有する。
【０１１４】
ＣＰＵ１２ｄは、キャッシュメモリ１２ａと概要セクタフラグ１２ｅを有する。また、他のＣＰＵ１３ｄ〜１５ｄも同様に、キャッシュメモリ１３ａ〜１５ａと概要セクタフラグ１３ｅ〜１５ｅを有する。なお、以下の説明では、ＣＰＵ１３ｄ〜１５ｄは、ＣＰＵ１２ｄと同様の機能を発揮するものとして、説明を省略する。
【０１１５】
ＣＰＵ１２ｄは、実施例１に係るＣＰＵ１２、および実施例２に係るＣＰＵ１２ｂと同様の機能を発揮するとともに、以下の機能を有する。すなわち、ＣＰＵ１２ｄは、演算処理を行うコアを複数有し、各コアを用いた演算処理を行う。例えば、ＣＰＵ１２ｄは、コアＡ〜Ｄまでの４つのコアを有する。
【０１１６】
また、ＣＰＵ１２ｄは、アプリケーション３５が指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す複数のフラグを、各コアごとに有する。そして、ＣＰＵ１２ｄは、あるコアが実行するアプリケーション３５がキャッシュフラッシュを要求した場合には、このアプリケーション３５が指示した期間内に更新したデータをメモリ１７〜２４に書き戻す。
【０１１７】
具体的には、ＣＰＵ１２ｄは、概要セクタフラグ１２ｅを有する。概要セクタフラグ１３ｅは、マルチコア対応の概要セクタフラグ１２ｃであり、アプリケーション３５が指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示すフラグをコアごとに有する。以下、図１４を用いて、概要セクタフラグ１２ｅの一例について説明する。
【０１１８】
図１４は、マルチコア対応の概要セクタフラグを説明するための図である。なお、図１４には、概要セクタフラグ１２ｅと、キャッシュメモリ１２ａについて記載した。なお、図１４に示す例では、キャッシュメモリ１２ａは、１つのキャッシュラインに複数のウェイ「０」〜「Ｗ」を有するキャッシュメモリである。また、図１４に示す例では、ＣＰＵ１２ｄが４つのコアＡ〜Ｄを有する。
【０１１９】
また、図１４に示す例では、キャッシュメモリ１２ａは、キャッシュタグ部とデータ部とを有し、キャッシュタグ部の各ウェイ「０」〜「Ｗ」には、それぞれセクタ、ステート、アドレスが格納される。また、キャッシュメモリ１２ａが有する各キャッシュラインは、複数のグループに組み分けられている。例えば、インデックス「１」〜「３２」は、グループ「１」、インデックス「Ｂ」〜「Ｂ＋３１」は、グループ「Ａ」、インデックスう「Ｍ−３１」〜「Ｍ」は、グループ「Ｍ」に組み分けられている。
【０１２０】
概要セクタフラグ１２ｅは、各コアが実行するアプリケーション３５が指定した期間内に更新したデータが各グループのキャッシュラインに格納されているか否かを判別するフラグをコアごとに有する。すなわち、概要セクタフラグ１２ｅは、コアＡが実行するアプリケーション３５が指定する期間内に、コアＡが実行するアプリケーション３５の要求に応じて更新したデータが各グループのキャッシュラインに存在するか否かを示すフラグを有する。同様に、概要セクタフラグ１２ｅは、コアＢ〜Ｃが実行するアプリケーション３５が指定する期間内に、コアＢ〜Ｃが実行するアプリケーション３５の要求に応じて更新したデータが各グループのキャッシュラインに存在するか否かを示すフラグを有する。
【０１２１】
例えば、概要セクタフラグ１２ｅを有するＣＰＵ１２ｄは、コアＡが実行するアプリケーション３５が指定する期間内に、コアＡが実行するアプリケーション３５の要求に応じてグループ１のキャッシュラインに格納されたデータを更新する。すると、ＣＰＵ１２ｄは、概要セクタフラグ１２ｅが有するコアＡの各フラグのうち、グループ１のフラグを「１」にする。
【０１２２】
続いて、ＣＰＵ１２ｄは、コアＤが実行するアプリケーション３５が指定する期間内に、コアＤが実行するアプリケーション３５の要求に応じてグループＡのキャッシュラインに格納されたデータを更新する。すると、ＣＰＵ１２ｄは、概要セクタフラグ１２ｅが有するコアＤの各フラグのうち、グループＡのフラグを「１」にする。そして、ＣＰＵ１２ｄは、コアＡが実行するアプリケーション３５がキャッシュフラッシュを要求した場合には、概要セクタフラグ１２ｅのグループＡのフラグを検査し、グループ１のフラグが「１」であると判別する。この結果、ＣＰＵ１２ｄは、グループＡのキャッシュラインについては、検査の対象にせず、グループ１のキャッシュラインのみを検査の対象とする。
【０１２３】
［実施例３の効果］
上述したように、ＣＰＵ１２ｄは、アプリケーション３５が指定した期間内に更新したデータが各グループのキャッシュラインに格納されているか否かをコアＡ〜Ｄごとに示す概要セクタフラグ１２ｅを有する。そして、例えば、ＣＰＵ１２ｄは、コアＡが実行するアプリケーション３５が指定した時間内に、コアＡが実行するアプリケーション３５の要求に応じて、グループ１のキャッシュラインに格納されたデータを更新した場合には、以下の処理を実行する。すなわち、ＣＰＵ１２ｄは、グループ１のキャッシュラインに更新したデータが存在する旨の概要セクタフラグをコアＡについて設定する。
【０１２４】
そして、ＣＰＵ１２ｄは、コアＡが実行するアプリケーション３５がフラッシュ要求を発行した場合には、コアＡの概要セクタフラグを検査し、更新したデータが存在する旨の概要セクタフラグが設定されたキャッシュラインを検査する。その後、ＣＰＵ１２ｄは、検査したキャッシュラインのうち、更新されたデータをメモリ１７〜２４に書き戻す。
【０１２５】
このため、ＣＰＵ１２ｄは、複数のコアを有する場合にも、効率良くフラッシュを実行することができる。すなわち、ＣＰＵ１２ｄは、各コアが共通して使用するキャッシュメモリを有する場合にも、各コアごとに独立してキャッシュフラッシュを行うことができる。この結果、ＣＰＵ１２ｄは、複数のコアを有する場合にも、不要なキャッシュフラッシュを行わないので、キャッシュフラッシュを効率良く実行する結果、情報処理システム１ｂの性能劣化を防ぐことができる。
【実施例４】
【０１２６】
実施例４では、ＣＰＵ１２、ＣＰＵ１２ｂ、ＣＰＵ１２ｄが発揮する機能に加えて、各キャッシュラインが有する複数のウェイのうち、特定のウェイに格納されたデータのみをキャッシュフラッシュの対象とするＣＰＵについて説明する。
【０１２７】
図１５は、実施例４に係るノードの機能構成を説明するための図である。なお、図１５には、実施例４に係るノード１０ｐの機能構成を示したが、ノード１０ｐは、実施例１と同様の機能を有する情報処理システム１ｃが有するノードである。また、図１５に示すノード１０ｐのうち、実施例１〜実施例３と同じ符号を付したものについては、実施例１〜３と同様の機能を発揮するものとして、説明を省略する。図１５に示す例では、ノード１０ｐは、複数のＣＰＵ１２ｆ〜ＣＰＵ１５ｆを有する。
【０１２８】
ＣＰＵ１２ｆは、キャッシュメモリ１２ａと概要セクタフラグ１２ｃを有する。また、他のＣＰＵ１３ｄ〜１５ｄも同様に、キャッシュメモリ１３ａ〜１５ａと概要セクタフラグ１２ｃ〜１５ｃを有する。なお、キャッシュメモリ１２ａ〜１５ａは、実施例３に係るキャッシュメモリ１２ａ〜１５ａと同様に、複数のキャッシュライン「０」〜「Ｗ」を有し、各キャッシュ欄には、複数のウェイが存在する。
【０１２９】
また、各ＣＰＵ１２ｆ〜１５ｆが有する概要セクタフラグ１２ｃ〜１５ｃは、実施例２に示す概要セクタフラグと同様のものであるが、各ＣＰＵ１２ｆ〜１５ｆは、実施例３に示す概要セクタフラグ１２ｅ〜１５ｅを有することとしてもよい。なお、以下の説明では、ＣＰＵ１３ｆ〜１５ｆは、ＣＰＵ１２ｆと同様の機能を発揮するものとして、説明を省略する。
【０１３０】
ＣＰＵ１２ｆは、実施例１に係るＣＰＵ１２、および実施例２に係るＣＰＵ１２ｂと同様の機能を発揮するとともに、以下の機能を有する。すなわち、ＣＰＵ１２ｆは、アプリケーション３５が指定した期間内に更新したデータを、特定のウェイにのみ格納する。そして、ＣＰＵ１２ｆは、アプリケーション３５がフラッシュ要求を発行した場合には、各キャッシュラインうち、特定のウェイのみを検査し、セクタフラグが設定されたデータを識別する。その後、ＣＰＵ１２ｆは、識別したデータをメモリ１７〜２４に書き戻す。
【０１３１】
図１６は、フラッシュの対象を特定のウェイに限定する処理の一例を説明するための図である。例えば、ＣＰＵ１２ｆは、アプリケーション３５が指定する期間内に更新が行われた場合には、更新対象となるデータをキャッシュメモリ１２ａが有するいずれかのキャッシュラインのうち、ウェイ「０」に格納する。また、ＣＰＵ１２ｆは、図１６中（ｚ）に示すように、ウェイ「０」のキャッシュタグのうち、データを格納したキャッシュラインのキャッシュタグにセクタフラグ「１」とステートとアドレスとを格納する。
【０１３２】
そして、ＣＰＵ１２ｆは、アプリケーションがフラッシュ要求を発行した場合には、ウェイ「０」のキャッシュタグのみを検査し、セクタフラグ「１」が格納されたキャッシュラインを識別する。その後、ＣＰＵ１２ｆは、識別したキャッシュラインのうち、ウェイ「０」のデータをメモリ１７〜２４に書き戻す。
【０１３３】
［実施例４の効果］
上述したように、キャッシュメモリ１２ａは、複数のウェイ「０」〜「Ｗ」を有する複数のキャッシュラインを有する。そして、ＣＰＵ１２ｆは、アプリケーションが指定した期間内に更新されたデータをいずれかのキャッシュラインのウェイ「０」に格納し、フラッシュ要求が発行されると、各キャッシュラインのウェイ「０」のみを検査する。その後、ＣＰＵ１２ｆは、検査した結果、更新されたデータが格納された旨を示すセクタフラグが格納されたキャッシュラインのウェイ「０」に格納されたデータをメモリ１７〜２４に書き戻す。
【０１３４】
このため、ＣＰＵ１２ｆは、フラッシュの対象を限定することができるので、フラッシュの処理時間を削減し、情報処理システム１ｃの処理能力を向上させることができる。また、ＣＰＵ１２ｆは、特定のウェイのデータのみをメモリ１７〜２４に書き戻す。このため、例えば、ＣＰＵ１２ｆは、演算処理に頻繁に使用するデータ等、メモリ１７〜２４に書き戻すべきではないデータ等をウェイ「１」〜「Ｗ」に格納することで、キャッシュフラッシュの対象外とすることができる。この結果、ＣＰＵ１２ｆは、演算処理の効率を向上させ、情報処理システム１ｃの性能を向上させることができる。
【実施例５】
【０１３５】
実施例５では、複数のコア、Ｌ１（Level  1）キャッシュ、およびＬ２（Level  2）キャッシュを有し、各キャッシュラインごとのセクタフラグと、各コアごとに概要セクタフラグを有するＣＰＵについて説明する。
【０１３６】
図１７は、実施例５に係るＣＰＵの機能構成を説明するための図である。ＣＰＵ１２ｇは、実施例１の同様の機能を有する情報処理システム１ｃが有するＣＰＵであり、ＣＰＵ１２、ＣＰＵ１２ｂ、ＣＰＵ１２ｄ、ＣＰＵ１２ｆと同様に、情報処理システム１ｄが有するノードに設置された複数のＣＰＵの１つである。なお、図１７には、実施例５に係るＣＰＵ１２ｇの機能構成を示した。
【０１３７】
図１７に示す例では、ＣＰＵ１２ｇは、ローカルＸＢ１６、メモリ１７、メモリ１８、ＰＣＩｅスイッチ２５と接続されている。また、ＣＰＵ１２ｇは、複数のコア４０〜４０ｂ、セクタＩＤ（Identification）生成部４１〜４１ｂ、Ｌ１キャッシュタグ４２〜４２ｂ、Ｌ１キャッシュ４３〜４３ｂ、ＴＬＢ（Translation  Lookaside  Buffer）４４〜４４ｂを有する。
【０１３８】
また、ＣＰＵ１２ｇは、Ｌ２キャッシュアクセスコントローラ４５、Ｌ２キャッシュタグ４６、Ｌ２キャッシュ４７、Ｌ２キャッシュ概要セクタフラグ４８、アドレスマップ４９、非キャッシュリクエストステートマシン５０を有する。また、ＣＰＵ１２ｇは、設定レジスタ群５１、フラッシュ制御部５２、ＰＣＩ制御部５３、ディレクトリ制御部５４、スヌープ制御部５５、リクエスト制御部５６を有する。
【０１３９】
なお、コア４０ａ、コア４０ｂについては、コア４０と同様の機能を発揮し、セクタＩＤ生成部４１ａ、セクタＩＤ生成部４１ｂについては、セクタＩＤ生成部４１と同様の機能を発揮するものとして、以下の説明を省略する。また、Ｌ１キャッシュタグ４２ａ、Ｌ１キャッシュタグ４２ｂは、Ｌ１キャッシュタグ４２と同様の機能を発揮し、Ｌ１キャッシュ４３ａ、Ｌ１キャッシュ４３ｂは、Ｌ１キャッシュ４３と同様の機能を発揮するものとして、以下の説明を省略する。また、ＴＬＢ４４ａ、ＴＬＢ４４ｂは、ＴＬＢ４４と同様の機能を発揮するものとして、以下の説明を省略する。
【０１４０】
コア４０は、Ｌ１キャッシュ４３に格納されたデータを用いて、演算処理を実行する演算装置である。セクタＩＤ生成部４１は、コア４０が出力する命令コードとレジスタの設定情報とに応じて、セクタＩＤを生成し、生成したＩＤをＬ１キャッシュタグ４２に出力する。ここで、セクタＩＤとは、コア４０が実行するアプリケーションが指示した期間内に更新が行われたか否かを示す情報である。
【０１４１】
Ｌ１キャッシュタグ４２は、Ｌ１キャッシュ４３のタグデータであり、Ｌ１キャッシュ４３の各キャッシュラインに格納されたデータのアドレス、ステート、リプレース要のＬＲＵ（Least  Recently  Used）情報、セクタＩＤを記憶する。
【０１４２】
Ｌ１キャッシュ４３は、高速にアクセス可能なキャッシュメモリであり、メモリ１７、メモリ１８、Ｌ２キャッシュ４７に格納されたデータの一部をキャッシュする。なお、Ｌ１キャッシュ４３は、コア４０専用の１次キャッシュである。例えば、Ｌ１キャッシュ４３は、命令用の領域とデータ用の領域とにそれぞれ６４キロバイトの容量を有する。また、ＴＬＢ４４は、変換テーブルを用いて、コア４０が出力する仮想アドレスを物理アドレスに変換する。
【０１４３】
ここで、図１８、図１９を用いて、Ｌ１キャッシュタグ４２およびＬ１キャッシュ４３について説明する。図１８は、Ｌ１キャッシュタグを説明するための図である。図１８に示す例では、Ｌ１キャッシュタグ４２は、仮想アドレスのインデックス、すなわち、「００＿００００＿０」〜「１１＿１１１１＿１」までの下位７ビットをインデックスとする。また、Ｌ１キャッシュタグ４２は、各インデックスについて、命令をキャッシュする領域のタグデータ（ＩＦ）と、データをキャッシュする領域のタグデータ（OP:Operand）とを記憶する。
【０１４４】
また、Ｌ１キャッシュタグ４２は、各インデックスごとにウェイ０〜ウェイ３までのタグデータを記憶する。また、Ｌ１キャッシュタグは、タグデータとして、Ｖａｌ、２ビットのステート［１：０］、２ビットのセクタＩＤ［１：０］、論理アドレスの上位３３ビットであるＬＡ［４６：１４］、チェックビットであるＣＢ（Check  bit）［７：０］を記憶する。なお、以下の説明では、ステート「００」は、Ｉ（Invalid）を示し、ステート「０１」はＳ（Share）を示し、ステート「１０」はＥ（Exclusive）を示し、ステート「１１」はＭ（Modify）を示すものとする。
【０１４５】
次に、図１９を用いて、Ｌ１キャッシュ４３について説明する。図１９は、Ｌ１キャッシュを説明するための図である。図１９に示す例では、Ｌ１キャッシュ４３は、Ｌ１キャッシュタグ４２と同様に、命令をキャッシュする領域と、データをキャッシュする領域とを有する。また、Ｌ１キャッシュ４３が有する各キャッシュラインには、論理アドレスのインデックスと対応付けられており、それぞれウェイ「０」〜「３」までの４つのウェイを有する。また、各キャッシュラインの各ウェイには、１２８バイトのデータと１６バイトのチェックビットとが格納される。
【０１４６】
次に、図２０を用いて、コア４０、セクタＩＤ生成部４１、Ｌ１キャッシュタグ４２、Ｌ１キャッシュ４３、ＴＬＢ４４が実行する処理の詳細な例を説明する。図２０は、実施例５に係るセクタＩＤ生成部が実行する処理を説明するための図である。図２０に示す例では、セクタＩＤ生成部４１は、ＡＳＩレジスタ４１ｃ、セクタＩＤ選択制御部４１ｄ、セクタＩＤ選択部４１ｅを有する。
【０１４７】
また、図２０に示す例では、ＡＳＩレジスタ４１ｃは、ＨＰＶ（Hypervisor）の特権命令でアクセスするセクタイネーブルとフラッシュイネーブルとを記憶する。また、ＡＳＩレジスタ４１ｃは、コア４０が実行するアプリケーションが指定する期間の開始および終了を示すスフラッシュセクタモードを記憶する。
【０１４８】
コア４０は、セクタフラグを設定する場合には、セクタイネーブルに「１」を格納し、セクラフラグを設定しない場合には、セクタイネーブルに「０」を格納する。また、コア４０は、セクタフラッシュの機能を有効にする場合には、フラッシュイネーブルに「１」を格納し、セクタフラッシュの機能を無効にする場合には、フラッシュイネーブルに「０」を格納する。また、コア４０は、セクタフラッシュを実行させる場合には、フラッシュセクタモードに「１」を格納し、他の場合には、フラッシュセクタモードに「０」を格納する。
【０１４９】
なお、フラッシュセクタモードは、コア４０が実行するアプリケーションがアクセス可能なレジスタに格納される。また、ＡＳＩレジスタ４１ｃは、あらかじめ定められた２ビットのセクタＩＤを記憶する。詳細には、ＡＳＩレジスタ４１ｃは、セクタＩＤとしてＩＤ０を示す「００」、ＩＤ１を示す「０１」、ＦＬ（Flash）を示す「１１」、Ｄｅｆ（Default）を示す「００」を記憶する。
【０１５０】
例えば、コア４０は、ＡＳＩレジスタ４１ｃに対して、ＡＳＩレジスタの読み出し、または格納を要求するコマンドを発行する（ASI  Reg  R/W  command）。このコマンドには、読み出し、または格納の対象となる１０ビットのアドレス（Address[11:2]）、４ビットのバイトイネーブル（Byte  Enable[3:0]）が格納される。
【０１５１】
また、コア４０は、ＡＳＩレジスタ４１ｃに対してデータの格納を要求する場合には、格納対象となる３２ビットのデータを出力する（ASI  Reg  Write  Data[31:0]）。一方、ＡＳＩレジスタ４１ｃは、コア４０からのリクエスト内容が読み出しである場合には、読み出した３２ビットのデータをコア４０に出力する（ASI  Reg  Read  Data[31:0]）。
【０１５２】
また、コア４０は、Ｒｅｑｕｅｓｔ  ｖａｌ、Ｒｅｑｕｅｓｔ  ＩＤ、Ｃｏｄｅ、Ｌｏｇｉｃ  Ａｄｄｒｅｓｓ、Ｓｅｃｔｏｒ  Ｓｅｌ、Ｓｔｏｒｅ  ＤａｔａをフィールドとするＬ１キャッシュリクエストをフィールドとするＬ１キャッシュリクエストを発行する。具体的には、コア４０は、Ｌ１キャッシュリクエストをＬ１キャッシュアクセスコントローラ５７と、セクタＩＤ選択制御部４１ｄとに発行する。
【０１５３】
ここで、Ｒｅｑｕｅｓｔ  ｖａｌ（Request  Value）とは、リクエストであることを示す情報であり、Ｒｅｑｕｅｓｔ  ＩＤとは、リクエストを識別するための８ビットの識別子である。また、Ｃｏｄｅとは、リクエストの内容を示す情報であり、データの格納を示すＳｔｏｒｅ、データの読み出しを示すＬｏａｄ等の情報である。また、Ｌｏｇｉｃ  Ａｄｄｒｅｓｓとは、リクエストの対象となる４１ビットの仮想アドレスである。
【０１５４】
また、Ｓｅｃｔｏｒ  Ｓｅｌとは、セクタＩＤ生成部４１に対して生成を要求するセクタＩＤを示す情報であり、例えば、「ＩＤ０」、または「ＩＤ１」が格納される。また、Ｓｔｏｒｅ  Ｄａｔａとは、データの格納を要求するリクエストに付加される情報であり、Ｌ１キャッシュ４３に格納する１２８バイトのデータである。
【０１５５】
また、コア４０は、非キャッシュリクエストステートマシン５０に対し、ＮＣ（Non  coherency）空間へのリード要求、またはライト要求であるＮＣリクエストを発行する。詳細には、コア４０は、「Ｒｅｑ  ｖａｌ」、「Ｒｅｑｕｅｓｔ  ＩＤ」、「Ｃｏｄｅ」、「Ｌｏｇｉｃ  Ａｄｄｒｅｓｓ（ＬＡ）」、「Ｂｙｔｅ  Ｅｎａｂｌｅ（ＢＥ）」、「Ｓｔｏｒｅ  Ｄａｔａ」をフィールドとするＮＣリクエストを発行する。
【０１５６】
ここで、「Ｒｅｑ  ｖａｌ」は、リクエスト信号であることを示す情報であり、「Ｒｅｑｕｅｓｔ  ＩＤ」は、リクエストを識別する８ビットの情報である。また、「Ｃｏｄｅ」は、リクエストの内容を示す情報であり、データの格納を示す「Ｓｔｏｒｅ」、データの読み出しを示す「Ｌｏａｄ」等が格納される。
【０１５７】
また、「Ｌｏｇｉｃ  Ａｄｄｒｅｓｓ」は、リクエストの対象となる４８ビットの仮想アドレスである。また、「Ｂｙｔｅ  Ｅｎａｂｌｅ」とは、イネーブルを示す１２９ビットの情報である。また、「Ｓｔｏｒｅ  Ｄａｔａ」とは、リクエストの種別が「Ｓｔｏｒｅ」である際に格納する１２８バイトのデータである。
【０１５８】
ＡＳＩレジスタ４１ｃは、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードの値をセクタＩＤ選択制御部４１ｄに出力する。また、ＡＳＩレジスタ４１ｃは、セクタＩＤをそれぞれセクタＩＤ選択部４１ｅに出力する。セクタＩＤ選択制御部４１ｄは、コア４０が発行したＬ１キャッシュリクエストを取得し、Ｌ１キャッシュリクエストのＳｅｃｔｏｒ  Ｓｅｌの値を取得する。また、セクタＩＤ選択制御部４１ｄは、ＡＳＩレジスタ４１ｃから、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードの値を取得する。
【０１５９】
そして、セクタＩＤ選択制御部４１ｄは、セクタイネーブルの値が「０」である場合には、セクタＩＤ選択部４１ｅにＤｅｆ（００）を選択するよう指示する。また、セクタＩＤ選択制御部４１ｄは、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードの値が全て「１」であり、かつ、Ｌ１キャッシュリクエストの内容がデータの格納（Ｓｔｏｒｅ）である場合には、ＦＬ（１１）を出力するよう指示する。つまり、セクタＩＤ選択制御部４１ｄは、アプリケーションが指定した期間内に更新したデータについては、セクタＩＤ「１１」を出力するよう指示する。
【０１６０】
また、セクタＩＤ選択制御部４１ｄは、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードが「１」でＬ１キャッシュリクエストの内容がデータの格納ではない場合には、以下の処理を行う。また、セクタＩＤ選択制御部４１ｄは、セクタイネーブルが「１」で、フラッシュイネーブル、フラッシュセクタモードのいずれか、または両方が「０」である場合も同様の処理を行う。
【０１６１】
すなわち、セクタＩＤ選択制御部４１ｄは、Ｌ１キャッシュリクエストのＳｅｃｔｏｒ  Ｓｅｌの値を識別する。そして、セクタＩＤ選択制御部４１ｄは、Ｓｅｃｔｏｒ  Ｓｅｌの値が「ＩＤ１」である場合は、ＩＤ１を選択するようセレクタ選択部４１ｅに指示し、Ｓｅｃｔｏｒ  Ｓｅｌの値が「ＩＤ０」である場合は、ＩＤ０を選択するようセレクタ選択部４１ｅに指示する。
【０１６２】
セクタＩＤ選択部４１ｅは、ＡＳＩレジスタ４１ｃから、各セクタＩＤを取得する。そして、セクタＩＤ選択部４１ｅは、セクタＩＤ選択制御部４１ｄから通知されたセクタＩＤをＬ１キャッシュアクセスコントローラ５７に出力する。
【０１６３】
Ｌ１キャッシュアクセスコントローラ５７は、コア４０からＬ１キャッシュリクエストを取得する。そして、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュリクエストがデータの読み出しを要求する場合は、Ｌ１キャッシュタグ４２を用いて、Ｌ１キャッシュ４３からのデータ読み出しを行う。
【０１６４】
また、Ｌ１キャッシュアクセスコントローラ５７は、読み出しの対象となるデータがＬ１キャッシュ４３に格納されておらず、キャッシュミスが発生した場合には、以下の処理を行う。すなわち、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュ−Ｌ２キャッシュアクセスバスを介して、Ｌ２キャッシュアクセスコントローラ４５にデータのリクエストを送信する。
【０１６５】
なお、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ２キャッシュアクセスコントローラ４５にデータのリクエストを送信する場合は、ＴＬＢ４４を用いて、論理アドレスを物理アドレスに変換する。そして、Ｌ１キャッシュアクセスコントローラ５７は、変換後の物理アドレスをＬ２キャッシュアクセスコントローラ４５に送信する。
【０１６６】
すると、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ２キャッシュアクセスコントローラ４５からデータとともに、セクタＩＤを取得する。そして、Ｌ１キャッシュアクセスコントローラ５７は、取得したデータＬ１キャッシュ４３に格納するとともに、取得したセクタＩＤを変更することなくＬ１キャッシュタグ４２に格納する。
【０１６７】
その後、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュ４３から読み出し対象となるデータを検索する。すると、キャッシュヒットが発生するので、Ｌ１キャッシュアクセスコントローラ５７は、データを取得し、取得したデータをＬ１キャッシュレスポンスとしてコア４０に送信する。ここで、Ｌ１キャッシュレスポンスには、レスポンスを示す「Ｒｅｑ  ｖａｌ」と、読み出しを要求したリクエストの「Ｒｅｑｕｅｓｔ  ＩＤ」と、読み出した１２８バイトのデータである「Ｒｅａｄ  Ｄａｔａ」がフィールドとして含まれる。
【０１６８】
また、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュリクエストがデータの格納を要求する場合は、セクタＩＤ生成部４１からセクタＩＤを取得する。そして、Ｌ１キャッシュアクセスコントローラ５７は、データをＬ１キャッシュ４３に格納するとともに、Ｌ１キャッシュタグ４２に、セクタＩＤ生成部４１から取得したセクタＩＤを格納する。
【０１６９】
また、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュ４３に格納されたデータのリプレースを行う場合には、Ｌ１キャッシュ４３に格納されたデータとともに、タグデータに含まれるセクタＩＤをＬ２キャッシュアクセスコントローラ４５に送信する。また、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュ４３に格納されたデータが更新され、セクタＩＤが変更となった場合は、変更後のセクタＩＤをＬ２キャッシュアクセスコントローラ４５に送信する。
【０１７０】
また、Ｌ１キャッシュアクセスコントローラ５７は、後述するフラッシュ制御部５２がフラッシュを実行する場合も同様に、Ｌ１キャッシュ４３に格納されたデータとともに、タグデータに含まれるセクタＩＤをＬ２キャッシュアクセスコントローラ４５に送信する。すると、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ１キャッシュアクセスコントローラ５７から取得したセクタＩＤをＬ２キャッシュタグ４６に格納し、データをＬ２キャッシュ４７に格納する。
【０１７１】
このように、Ｌ１キャッシュアクセスコントローラ５７は、アプリケーションが指定する区間内に更新されたデータについては、アプリケーションが指定する区間内に更新されたことを示すセクタＩＤ「１１」をタグデータとしてＬ１キャッシュタグ４２に格納する。そして、Ｌ１キャッシュアクセスコントローラ５７は、リプレースやフラッシュが実行される場合は、アプリケーションが指定する区間内に更新されたことを示すセクタＩＤ「１１」をデータとともにＬ２キャッシュアクセスコントローラ４５に送信する。
【０１７２】
なお、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュリクエストが読み出しのリクエストであると判別すると、Ｌ１キャッシュタグ４２に、読み出しのリクエストであるＲｅａｄ  Ｒｅｑを発行する。ここで、Ｒｅａｄ  Ｒｅｑには、読み出しのリクエストである旨を示すＶａｌと、読み出し対象の論理アドレスＬＡ［４６：７］が格納される。
【０１７３】
また、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュリクエストが格納のリクエストであると判別すると、以下の処理を実行する。すなわち、Ｌ１キャッシュアクセスコントローラ５７は、格納のリクエストであるＷｒｉｔｅを発行する。ここで、Ｗｒｉｔｅには、書込み対象となるデータ、セクタＩＤ生成部４１から受信したセクタＩＤ、ウェイＩＤ、命令データであるかデータであるかの情報が格納される。
【０１７４】
また、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュ−Ｌ２キャッシュ間のリクエストおよびレスポンスを発行することで、Ｌ２キャッシュアクセスコントローラ４５とセクタＩＤおよびデータの要求や送信を行う。
【０１７５】
Ｌ１キャッシュタグ４２は、Ｌ１キャッシュアクセスコントローラからＲｅａｄ  Ｒｅｑを受信すると、取得した論理アドレスの下位７ビットと一致するインデックスのタグデータに、取得した論理アドレスの上位３３ビットが格納されているか否かを判別する。そして、Ｌ１キャッシュタグ４２は、取得した論理アドレスの上位３３ビットが格納されているタグデータが存在する場合は、キャッシュヒットしたと判別する。一方、Ｌ１キャッシュタグ４２は、取得した論理アドレスの上位３３ビットが格納されているグデータが存在しない場合は、キャッシュミスしたと判別する。
【０１７６】
そして、Ｌ１キャッシュタグ４２は、Ｌ１キャッシュアクセスコントローラ５７に応答であるＲｅａｄ  Ｒｅｐ（Read  Response）を発行する。ここで、Ｒｅａｄ  Ｒｅｐには、キャッシュヒットしたか否かの情報、命令データであるかデータであるかの情報、ウェイＩＤ、セクタＩＤが含まれる。また、Ｌ１キャッシュタグ４２は、キャッシュヒットした場合には、Ｌ１キャッシュ４３に読み出し要求を発行し、Ｌ１キャッシュ４３に読み出し対象となるデータをＬ１キャッシュアクセスコントローラ５７に出力させる。
【０１７７】
また、Ｌ１キャッシュタグ４２は、Ｌ１キャッシュアクセスコントローラ５７から書込み要求であるＷｒｉｔｅを受信する。すると、Ｌ１キャッシュタグ４２は、書込み要求に格納されたセクタＩＤを書込み要求のウェイＩＤが示すウェイにウェイタグデータを格納するとともに、Ｌ１キャッシュ４３にデータを格納する。
【０１７８】
なお、Ｌ１キャッシュタグ４２は、書込み要求の対象となる仮想アドレスのデータを記憶している場合には、タグデータのステートを変更するとともに、タグデータのセクタＩＤをＬ１キャッシュアクセスコントローラ５７から取得するセクタＩＤに変更する。すなわち、Ｌ１キャッシュタグ４２は、コア４０が実行するアプリケーションが指定した期間内に更新された旨を示すセクタＩＤをタグデータに記憶する。
【０１７９】
また、非キャッシュリクエストステートマシン５０は、ＵＣ領域に対するアクセスを制御し、コア４０からＮＣリクエストを受信すると、ＰＣＩｅ等を介した処理等を実行する。例えば、非キャッシュリクエストステートマシン５０は、各コア４０〜４０ｂがＨＤＤ２９等のＩ／Ｏ装置に対する読出しや格納のＮＣリクエストを取得した場合には、取得したＮＣリクエストをＰＣＩ制御部５３に発行する。そして、非キャッシュリクエストステートマシン５０は、ＰＣＩ制御部５３からリクエストの応答を取得した場合には、取得した応答をＮＣレスポンスとしてコア４０〜４０ｂに送信する。
【０１８０】
図１７に戻って、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュタグ４６やＬ２キャッシュ４７のアクセスコントローラであり、Ｌ２キャッシュタグ４６やＬ２キャッシュ４７にアクセスするためのパイプラインである。なお、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ１キャッシュアクセスコントローラ５７と同様の処理を行う事で、Ｌ２キャッシュ４７に格納されたデータの制御を行う。また、Ｌ２キャッシュアクセスコントローラ４５は、同一アドレスをシリアライズ処理する機能を有する。
【０１８１】
Ｌ２キャッシュタグ４６は、Ｌ２キャッシュ４７のタグデータであり、Ｌ２キャッシュタグ４２と同様の情報を記憶する。また、Ｌ２キャッシュ４７は、各コア４０〜４０ｂが共用する２次キャッシュメモリである。また、Ｌ２キャッシュ４７は、複数のキャッシュラインを有し、各キャッシュラインは、複数のグループに組み分けられている。
【０１８２】
Ｌ２キャッシュ概要セクタフラグ４８は、各コア４０〜４０ｂが実行するアプリケーションが指定した期間内に更新したデータが各グループのキャッシュラインに格納されているか否かを判別するフラグをコアごとに有する。すなわち、Ｌ２キャッシュ概要セクタフラグ４８は、実施例３に係る概要セクタフラグ１２ｅと同様のフラグである。
【０１８３】
ここで、図２１を用いて、Ｌ２キャッシュタグ４６、Ｌ２キャッシュ４７、Ｌ２キャッシュ概要セクタフラグ４８の関係について説明する。図２１は、Ｌ２キャッシュタグとＬ２キャッシュとＬ２キャッシュ概要セクタフラグを説明するための図である。図２１に示すように、Ｌ２キャッシュ概要セクタフラグ４８は、概要セクタフラグ１２ｅと同様に、アプリケーションが指定した期間内に更新したデータがキャッシュラインの各グループに存在するか否かを示すフラグを各コア４０〜４０ｂごとに有する。
【０１８４】
具体的には、Ｌ２キャッシュ概要セクタフラグ４８には、Ｌ２キャッシュ４７が有する各キャッシュラインを「０」〜「６３」までのグループに分け、各グループについて、以下のフラグが格納される。すなわち、Ｌ２キャッシュ概要セクタフラグ４８には、各コア４０〜４０ｂが実行するアプリケーションが指定する期間内に更新したデータが、キャッシュラインの各グループに存在するか否かを、各コア４０〜４０ｂごとに示すフラグが格納される。
【０１８５】
また、図２１に示す例では、Ｌ２キャッシュタグ４６およびＬ２キャッシュ４７は、物理アドレスの下位１３ビットであるインデックスと対応付けられた複数のキャッシュラインを有する。なお、図２１に示す例では、インデックスの値を１０進数で記載した。また、Ｌ２キャッシュタグ４６およびＬ２キャッシュ４７は、各キャッシュラインごとにウェイＩＤ「０」〜「１５」までのウェイを有する。
【０１８６】
また、Ｌ２キャッシュタグ４６には、Ｌ１キャッシュタグ４２と同様に、各キャッシュラインの各ウェイに、タグデータとして、Ｖａｌ、ステート、アドレスの上位２７ビット、セクタＩＤ、ＣＢが格納される。また、Ｌ２キャッシュ４７には、Ｌ１キャッシュ４３と同様に、各キャッシュラインの各ウェイに対して、１２８バイトのデータと１６バイトのデータが格納される。
【０１８７】
図１７に戻って、アドレスマップ４９は、リクエスト対象となる物理アドレスと、物理アドレスが示す記憶領域にアクセスするＣＰＵの識別子とを対応付けて記憶し、物理アドレスをＣＰＵの識別子に変換する。つまり、アドレスマップ４９は、ＣＰＵ１２ｇが他のＣＰＵと接続されたメモリにアクセスするリクエストを発行すると、アクセス対象の物理アドレスからリクエストの送信先となるＣＰＵの識別子を判別する。そして、アドレスマップ４９は、リクエスト制御部５６に、リクエストの送信先となるＣＰＵの識別子を通知する。
【０１８８】
設定レジスタ群５１は、ＣＰＵ１２ｇの各種設定を行う複数のレジスタである。フラッシュ制御部５２は、コア４０〜４０ｂからの命令により、Ｌ２キャッシュ４７に対するキャッシュフラッシュを行う。すなわち、フラッシュ制御部５２は、Ｌ２キャッシュ４７が記憶するデータをメモリ１７、１８に書き戻す処理を行う。また、フラッシュ制御部５２は、書き戻すデータがＣＰＵ１２ｇ以外のＣＰＵがアクセスするメモリからキャッシュしたデータである場合には、元のメモリに対して書き戻しを行う。
【０１８９】
ＰＣＩ制御部５３は、ＣＰＵ接続のＰＣＩｅｘｐｒｅｓｓに対するルートコンプレックスである。ディレクトリ制御部５４は、ＮＵＭＡの技術を用いたメモリアクセスを制御する。また、ディレクトリ制御部５４は、ＤＭＡ（Direct  Memory  Access）等のメモリリクストを取得すると、メモリ１７、メモリ１８に格納されたディレクトリ情報を用いて、キャッシュコヒーレンシを維持する処理を実行する。例えば、ディレクトリ制御部５４は、スヌープ制御部５５を用いて、他のＣＰＵにスヌープを発行したり、他のＣＰＵが発行したスヌープに対する応答等を実行する。
【０１９０】
スヌープ制御部５５は、ローカルＸＢ１６を介して、ＣＰＵ１２ｇ以外のＣＰＵからのスヌープを受付けると、Ｌ２キャッシュ４７を検査し、検査結果を応答として返信する。また、スヌープ制御部５５は、ディレクトリ制御部５４からスヌープの発行を要求された場合は、スヌープをＣＰＵ１２ｇ以外のＣＰＵに対して送信する。例えば、スヌープ制御部５５は、Ｌ２キャッシュ４７に格納されたスヌープ対象のデータのステートが「Ｍ」であった場合には、キャッシュデータをスヌープの応答として送信する。
【０１９１】
リクエスト制御部５６は、Ｌ２キャッシュ４７のキャッシュミスが発生した際に、他のＣＰＵへのリクエスト発行から、他のＣＰＵからの応答受信までの管理を行う。例えば、リクエスト制御部５６は、物理アドレスをアドレスマップ４９に出力し、リクエストの送信先となるＣＰＵの識別子を取得する。そして、リクエスト制御部５６は、取得した識別子を宛先として、リクエストをローカルＸＢ１６に出力する。
【０１９２】
また、リクエスト制御部５６は、リクエストの対象となるアドレス等を保持する複数のエントリを有する。そして、リクエスト制御部５６は、コア４０〜４０ｂから、処理中の物理アドレスに対してリクエストが発行された場合には、後段のリクエストを待機させるため、エントリに格納する。そして、リクエスト制御部５６は、エントリに格納したリクエストを発行する場合には、リクエストを格納したエントリの識別子をリクエストに付加して出力する。
【０１９３】
ローカルＸＢ１６は、インターコネクト用のルータであり、ＣＰＵの識別子に対応した宛先へ、リクエストを送信する。また、ローカルＸＢ１６は、送信するリクエストのパケット化やＣＲＣ（Cyclic  Redundancy  Check）の付加等を行う。
【０１９４】
次に、図２２を用いて、Ｌ２キャッシュアクセスコントローラ４５が送受信する信号の一例について説明する。図２２は、実施例５に係るＬ２キャッシュアクセスコントローラが送受信する信号を説明するための図である。例えば、図２２に示す例では、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ１キャッシュアクセスコントローラ５７からＬ１キャッシュ−Ｌ２キャッシュ間のリクエストを受信する。
【０１９５】
すると、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュリードリクエストをＬ２キャッシュタグ４６に発行し、Ｌ２キャッシュタグ４６からＬ２キャッシュリードレスポンスを受信する。そして、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュリードレスポンスにキャッシュヒットした旨が含まれる場合は、Ｌ２キャッシュ４７からリードデータを取得するとともに、Ｌ２キャッシュタグ４６からセクタＩＤを取得する。その後、Ｌ２キャッシュアクセスコントローラ４５は、取得したリードデータとセクタＩＤとをＬ１キャッシュアクセスコントローラ５７にレスポンスとして出力する。
【０１９６】
また、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュリードレスポンスにキャッシュミスした旨が含まれる場合は、リクエスト制御部５６にリクエストの発行を要求する。すると、リクエスト制御部５６は、リクエストを発行し、リクエストの対象となるデータを取得する。
【０１９７】
例えば、リクエスト制御部５６は、ディレクトリ制御部５４を解してメモリ１７、１８からデータを取得する。また、例えば、リクエスト制御部５６は、ローカルＸＢ１６を介してＣＰＵ１２ｇ以外のＣＰＵへリクエストを発行し、ＣＰＵ１２ｇ以外のＣＰＵと接続されたメモリの共有領域からデータを取得する。そして、リクエスト制御部５６は、取得したデータをＬ２キャッシュアクセスコントローラ４５に出力する。
【０１９８】
また、Ｌ２キャッシュアクセスコントローラ４５は、リクエスト制御部５６からデータを取得すると、Ｌ２キャッシュライトリクエストをＬ２キャッシュタグ４６に発行し、ライトデータをＬ２キャッシュ４７に送信する。すなわち、Ｌ２キャッシュアクセスコントローラ４５は、新たなデータをＬ２キャッシュ４７に格納する。
【０１９９】
なお、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ１キャッシュのリプレースが発生し、Ｌ１キャッシュから吐き出されたデータを取得すると、Ｌ２キャッシュタグ４６にＬ２キャッシュライトリクエストを発行し、吐き出されたデータの更新を行う。また、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ１キャッシュから吐き出されたデータとともにセクタＩＤを受信し、受信したセクタＩＤをＬ２キャッシュタグ４６に格納する。
【０２００】
また、Ｌ２キャッシュアクセスコントローラ４５は、データをＬ２キャッシュ４７に格納する場合には、以下の処理を行う。すなわち、Ｌ２キャッシュアクセスコントローラ４５は、格納するデータのセクタＩＤに応じて、概要セクタフラグをＬ２キャッシュ概要セクタフラグ４８に格納する。
【０２０１】
詳細には、Ｌ２キャッシュアクセスコントローラ４７は、セクタＩＤが「１１」である場合には、データを格納するキャッシュラインを含むグループに更新したデータが存在する旨を示す概要セクタフラグ「１」をＬ２キャッシュ概要セクタフラグ４８に格納する。
【０２０２】
なお、Ｌ２キャッシュアクセスコントローラ４７は、概要セクタフラグを格納する際に、任意の方法で、データを更新したアプリケーションを実行するコアを識別し、識別したコアの概要セクタフラグを格納する。例えば、Ｌ２キャッシュアクセスコントローラ４７は、リクエストＩＤを用いて、データを更新したアプリケーションを実行するコアを識別することとしてもよい。また、Ｌ２キャッシュアクセスコントローラ４７は、ＬＲＵ５９に格納されたＬＲＵを用いて、リプレースの対象となるキャッシュラインを選択する。
【０２０３】
非キャッシュリクエストステートマシン５０は、コア４０〜４０ｂが発行したフラッシュ要求を取得すると、フラッシュ制御部５２にフラッシュの実行を指示する。すると、フラッシュ制御部５２は、Ｌ２キャッシュ概要セクタフラグ４８から概要セクタフラグを取得し、概要セクタフラグに応じたキャッシュラインに対するフラッシュ要求をＬ２キャッシュアクセスコントローラ４５に発行する。
【０２０４】
つまり、フラッシュ制御部５２は、Ｌ２キャッシュ概要セクタフラグ４８が有する各フラグのうち、フラッシュ要求を発行したコアの概要セクタフラグを検査し、フラグ「１」が格納されたグループを検索する。そして、フラッシュ制御部５２は、フラグ「１」を検出したグループのキャッシュラインに対するフラッシュ要求を順次Ｌ２キャッシュアクセスコントローラ４５に発行する。なお、フラッシュ制御部５２は、フラッシュ要求の発行が終了すると、フラッシュ要求の対象となるキャッシュラインのグループ、および、フラッシュ要求を発行したコア等に応じて、Ｌ２キャッシュ概要セクタフラグ４８のリセットを行う。
【０２０５】
一方、Ｌ２キャッシュアクセスコントローラ４５は、フラッシュ制御部５２からのフラッシュ要求に応じて、Ｌ２キャッシュ４７のキャッシュフラッシュを行う。具体的には、Ｌ２キャッシュアクセスコントローラ４５は、フラッシュ要求の対象となるキャッシュラインのタグデータを検査し、セクタＩＤが「１１」であり、ステートが「Ｍ」であるエントリを各ウェイから検索する。そして、Ｌ２キャッシュアクセスコントローラは、セクタＩＤが「１１」であり、ステートが「Ｍ」であるエントリを検出すると、検出したエントリに対するフラッシュを実行する。
【０２０６】
詳細には、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」でステートが「Ｍ」のエントリのデータをＬ２キャッシュ４７から取得し、ステートを「Ｉ」に更新する。そして、Ｌ２キャッシュアクセスコントローラ４５は、取得したデータをディレクトリ制御部５４へ送信し、メモリ１７、１８、または、他のＣＰＵと接続されたメモリへの書き戻しを要求する。
【０２０７】
なお、ディレクトリ制御部５４は、ＣＰＵ１２ｇと接続するメモリ１７、１８以外のメモリにデータの書き戻しを行う場合には、リクエスト制御部５６と同様にアドレスマップ４９を用いてデータの書き戻し先のメモリと接続されたＣＰＵを識別する。そして、ディレクトリ制御部５４は、ローカルＸＢ１６を介して、識別したＣＰＵにデータを送信する。
【０２０８】
なお、ディレクトリ制御部５４は、ディレクトリ情報に基づいて、スヌープの発行をスヌープ制御部５５に要求し、Ｌ２キャッシュアクセスコントローラ４５や、他のＣＰＵにスヌープを発行させる。Ｌ２キャッシュアクセスコントローラ４５は、スヌープ制御部５５が発行したスヌープ、または、リクエスト制御部５６が他のＣＰＵから受信したスヌープを取得すると、Ｌ２キャッシュ４７に格納されたデータの出力等を行う。
【０２０９】
ここで、非キャッシュリクエストステートマシン５０は、コア４０〜４０ｂからの要求に応じて、セクタ最大値レジスタ５８に、フラッシュの対象となるウェイ数の最大値を設定する。詳細には、非キャッシュリクエストステートマシン５０は、セクタＩＤの値ごとに、各キャッシュラインのウェイに登録可能なタグデータの数をセクタ最大値レジスタ５８に設置する。
【０２１０】
そして、Ｌ２キャッシュアクセスコントローラ４５は、登録可能なデータの数を超えて、新たなデータを格納する場合には、格納するデータのセクタＩＤの値に応じて、リプレースを行う。例えば、Ｌ２キャッシュアクセスコントローラ４５は、新たに格納するデータのセクタＩＤが「１１」である場合には、セクタＩＤ「０１」またはセクタＩＤ「１０」のデータをリプレースする。また、Ｌ２キャッシュアクセスコントローラ４５は、新たに格納するデータのセクタＩＤが「０１」である場合には、セクタＩＤが「０１」またはセクタＩＤが「００」のデータをリプレースする。
【０２１１】
例えば、コア４０〜４０ｂ、セクタＩＤ生成部４１〜４１ｂ、ＴＬＢ４４〜４４ｂ、Ｌ２キャッシュアクセスコントローラ４５、Ｌ２キャッシュ概要セクタフラグ４８、非キャッシュリクエストステートマシンとは、電子回路である。また、例えば、フラッシュ制御部５２、ＰＣＩ制御部５３、ディレクトリ制御部５４、スヌープ制御部５５、リクエスト制御部５６、Ｌ１キャッシュアクセスコントローラ５７、とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ  （Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【０２１２】
また、Ｌ１キャッシュタグ４２〜４２ｂ、Ｌ１キャッシュ４３〜４３ｂ、Ｌ２キャッシュタグ４６、Ｌ２キャッシュ４７、ＬＲＵ５９とは、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子などの記憶装置である。また、設定レジスタ群５１、セクタ最大値レジスタ５８とは、レジスタである。
【０２１３】
次に、図２３を用いて、セクタＩＤ生成部４１がＬ１キャッシュタグ４２に格納するセクタＩＤを生成する処理の流れについて説明する。図２３は、Ｌ１キャッシュタグに格納するセクタＩＤを生成する処理の流れを説明するためのフローチャートである。
【０２１４】
例えば、セクタＩＤ生成部４１は、セクタイネーブルが「１」であるか否かを判別する（ステップＳ１０１）。そして、セクタＩＤ生成部４１は、セクタイネーブルが「１」ではない場合には（ステップＳ１０１否定）、すなわち、セクタフラグを用いたフラッシュを行わない場合には、セクタＩＤを「００」に設定し（ステップＳ１０２）、処理を終了する。一方、セクタＩＤ生成部４１は、セクタイネーブルが「１」である場合には（ステップＳ１０１肯定）、フラッシュイネーブルが「１」であるか否かを判別する（ステップＳ１０３）。
【０２１５】
そして、セクタＩＤ生成部４１は、フラッシュイネーブルが「１」ではない場合には（ステップＳ１０３否定）、セクタセレクタが「１」であるか否かを判別する（ステップＳ１０４）。そして、セクタＩＤ生成部４１は、セクタセレクタが「１」ではない場合には（ステップＳ１０４否定）、セクタＩＤを「００」に設定し（ステップＳ１０５）、処理を終了する。また、セクタＩＤ生成部４１は、セクタセレクタが「１」である場合には（ステップＳ１０４肯定）、セクタＩＤを「０１」に設定し（ステップＳ１０６）、処理を終了する。
【０２１６】
また、セクタＩＤ生成部４１は、フラッシュイネーブルが「１」であると判別した場合には（ステップＳ１０３肯定）、フラッシュセクタモードが「１」であるか否かを判別する（ステップＳ１０７）。そして、セクタＩＤ生成部４１は、フラッシュセクタモードが「１」である場合には（ステップＳ１０７肯定）、Ｌ１キャッシュリクエストのＣｏｄｅが「Ｓｔｏｒｅ」であるか否かを判別する（ステップＳ１０８）。
【０２１７】
また、セクタＩＤ生成部４１は、Ｃｏｄｅが「Ｓｔｏｒｅ」である場合には（ステップＳ１０８肯定）、セクタＩＤを「１１」に設定し（ステップＳ１０９）、処理を終了する。一方、セクタＩＤ生成部４１は、フラッシュセクタモードが「１」ではない場合（ステップＳ１０７否定）、および、Ｃｏｄｅが「Ｓｔｏｒｅ」ではない場合（ステップＳ１０８否定）は、ステップＳ１０４を実行する。
【０２１８】
次に、図２４を用いて、Ｌ１キャッシュアクセスコントローラ５７がＬ１キャッシュタグ４２のセクタＩＤを登録／更新する処理の流れを説明する。図２４は、Ｌ１キャッシュのセクタＩＤを登録／更新する処理の流れを説明するためのフローチャートである。例えば、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュタグ４２を用いてＬ１キャッシュの検索を行い、Ｌ１キャッシュヒットしたか否かを判別する（ステップＳ２０１）。
【０２１９】
そして、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュヒットしたと判別した場合は（ステップＳ２０１肯定）、ヒットしたエントリのセクタＩＤを読み込む（ステップＳ２０２）。次に、Ｌ１キャッシュアクセスコントローラ５７は、読み取ったセクタＩＤが「１１」であるか否かを判別する（ステップＳ２０３）。そして、Ｌ１キャッシュアクセスコントローラ５７は、セクタＩＤが「１１」である場合は（ステップＳ２０３肯定）、読み取ったセクタＩＤを「１１」に更新し（ステップＳ２０４）、処理を終了する。
【０２２０】
一方、Ｌ１キャッシュアクセスコントローラ５７は、読み取ったセクタＩＤが「１１」ではない場合は（ステップＳ２０３否定）、セクタＩＤ生成部４１が生成した生成セクタＩＤが「１１」であるか否かを判別する（ステップＳ２０５）。そして、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが「１１」である場合は（ステップＳ２０５肯定）、Ｌ２キャッシュアクセスコントローラ４５にセクタＩＤの変更リクエストを送信する（ステップＳ２０６）。
【０２２１】
また、Ｌ１キャッシュアクセスコントローラ５７は、変更リクエスト完了通知をＬ２キャッシュアクセスコントローラ４５から受信すると（ステップＳ２０７）、セクタＩＤを「１１」に更新し（ステップＳ２０４）、処理を終了する。また、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが「１１」ではない場合は（ステップＳ２０５否定）、生成セクタＩＤが「００」であるか否かを判別する（ステップＳ２０８）。
【０２２２】
また、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが「００」である場合には（ステップＳ２０８肯定）、生成セクタＩＤが読み取ったセクタＩＤと一致するか否かを判別する（ステップＳ２０９）。そして、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが読み取ったセクタＩＤと一致する場合は（ステップＳ２０９肯定）、セクタＩＤを「００」に更新し（ステップＳ２１０）、処理を終了する。
【０２２３】
また、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが読み取ったセクタＩＤと一致しない場合は（ステップＳ２０９否定）、Ｌ２キャッシュアクセスコントローラ４５にセクタＩＤの変更リクエストを送信する（ステップＳ２１１）。また、Ｌ１キャッシュアクセスコントローラ５７は、変更リクエスト完了通知をＬ２キャッシュアクセスコントローラ４５から受信すると（ステップＳ２１２）、セクタＩＤを「００」に更新し（ステップＳ２１０）、処理を終了する。
【０２２４】
また、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが「００」ではない場合には（ステップＳ２０８否定）、生成セクタＩＤが読み取ったセクタＩＤと一致するか否かを判別する（ステップＳ２１３）。そして、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが読み取ったセクタＩＤと一致する場合は（ステップＳ２１３肯定）、セクタＩＤを「０１」に更新し（ステップＳ２１４）、処理を終了する。
【０２２５】
また、Ｌ１キャッシュアクセスコントローラ５７は、生成セクタＩＤが読み取ったセクタＩＤと一致しない場合は（ステップＳ２１３否定）、Ｌ２キャッシュアクセスコントローラ４５にセクタＩＤの変更リクエストを送信する（ステップＳ２１５）。また、Ｌ１キャッシュアクセスコントローラ５７は、変更リクエスト完了通知をＬ２キャッシュアクセスコントローラ４５から受信すると（ステップＳ２１６）、セクタＩＤを「０１」に更新し（ステップＳ２１４）、処理を終了する。
【０２２６】
また、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュヒットしなかった場合は（ステップＳ２０１否定）、Ｌ２キャッシュアクセスコントローラ４５に補充リクエストを発行する（ステップＳ２１７）。次に、Ｌ１キャッシュアクセスコントローラ５７は、レスポンスに含まれるセクタＩＤを取得する（ステップＳ２１８）。そして、Ｌ１キャッシュアクセスコントローラ５７は、レスポンスから取得したセクタＩＤが「００」であるか否かを判別する（ステップＳ２１９）。
【０２２７】
ここで、Ｌ１キャッシュアクセスコントローラ５７は、レスポンスから取得したセクタＩＤが「００」である場合は（ステップＳ２１９肯定）、セクタＩＤ「００」を登録し（ステップＳ２２０）、処理を終了する。また、Ｌ１キャッシュアクセスコントローラ５７は、レスポンスから取得したセクタＩＤが「００」ではない場合は（ステップＳ２１９否定）、レスポンスから取得したセクタＩＤが「０１」であるか否かを判別する（ステップＳ２２１）。
【０２２８】
そして、Ｌ１キャッシュアクセスコントローラ５７は、レスポンスから取得したセクタＩＤが「０１」である場合は（ステップＳ２２１肯定）、セクタＩＤ「０１」を登録し（ステップＳ２２２）、処理を終了する。また、Ｌ１キャッシュアクセスコントローラ５７は、レスポンスから取得したセクタＩＤが「０１」ではない場合は（ステップＳ２２１否定）、セクタＩＤ「１１」を登録し（ステップＳ２２３）、処理を終了する。すなわち、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ２キャッシュアクセスコントローラ４５から受信したセクタＩＤをそのまま登録する。
【０２２９】
Ｌ１キャッシュアクセスコントローラ５７は、図２３に示す処理を実行することでアプリケーションが実行する期間内に更新されたデータか否かを示すセクタＩＤを生成し、図２４に示す処理を実行することで、セクタＩＤを登録する。この結果、Ｌ１キャッシュアクセスコントローラ５７は、図２５に示すように、Ｌ１キャッシュタグ４２に登録したセクタＩＤを遷移させる。
【０２３０】
図２５は、Ｌ１キャッシュタグに登録したセクタＩＤの遷移を説明するための図である。図２５に示す例では、不定（empty）であったセクタＩＤに、セクタＩＤ「００」、「０１」、「１１」のいずれかを登録することで、セクタＩＤは、「００」、「０１」、「１１」に遷移する。また、キャッシュのリプレースを行った場合やステートをインバリッドに変更した場合には、各セクタＩＤの値は不定となる。
【０２３１】
また、セクタＩＤ「００」やセクタＩＤ「０１」は、更新するセクタＩＤの値に応じて、セクタＩＤ「００」、「０１」、「１１」のいずれかに遷移する。しかし、セクタＩＤの値が「１１」となった場合には、リプレースやインバリッド以外で、セクタＩＤの値が遷移することはない。このため、ＣＰＵ１２ｇは、一度セクタＩＤが「１１」となったデータを必ずフラッシュできる。
【０２３２】
次に、図２６を用いて、Ｌ２キャッシュにおけるセクタＩＤの登録を行う処理の流れについて説明する。図２６は、Ｌ２キャッシュにおけるセクタＩＤを登録する処理の流れを説明するためのフローチャートである。
【０２３３】
例えば、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュタグ４６を用いてＬ２キャッシュの検索を行い、Ｌ２キャッシュヒットしたか否かを判別する（ステップＳ３０１）。そして、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュヒットしたと判別した場合は（ステップＳ３０１肯定）、ヒットしたエントリのセクタＩＤを読み込む（ステップＳ３０２）。
【０２３４】
次に、Ｌ２キャッシュアクセスコントローラ４５は、読み取ったセクタＩＤが「００」または「１１」であるか否かを判別する（ステップＳ３０３）。そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「００」、または、セクタＩＤが「０１」である場合は（ステップＳ３０４）、セクタＩＤが「００」であるか否かを判別する（ステップＳ３０４）。
【０２３５】
そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「００」である場合は（ステップＳ３０４肯定）、読み取ったセクタＩＤを「００」に更新する（ステップＳ３０５）。一方、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「００」ではない場合は（ステップＳ３０４否定）、セクタＩＤが「０１」であるか否かを判別する（ステップＳ３０６）。そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「０１」である場合は（ステップＳ３０６肯定）、読み取ったセクタＩＤを「０１」に更新する（ステップＳ３０７）。
【０２３６】
一方、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「０１」ではない場合は（ステップＳ３０６否定）、読み取ったセクタＩＤを「１１」に更新する（ステップＳ３０８）。また、Ｌ２キャッシュアクセスコントローラ４５は、読み取ったセクタＩＤが「００」または「０１」ではない場合は（ステップＳ３０３否定）、読み取ったセクタＩＤを「１１」に更新する（ステップＳ３０８）。
【０２３７】
また、Ｌ２キャッシュアクセスコントローラ４５は、Ｌ２キャッシュヒットしなかった場合は（ステップＳ３０１否定）、検索対象となるデータのホームアドレスがＣＰＵ１２ｇのアドレスであるか否かを判別する（ステップＳ３０９）。そして、Ｌ２キャッシュアクセスコントローラ４５は、検索対象となるデータのホームアドレスがＣＰＵ１２ｇのアドレスである場合は（ステップＳ３０９肯定）、ディレクトリ制御部５４にデータ補充リクエストを発行する（ステップＳ３１０）。
【０２３８】
一方、Ｌ２キャッシュアクセスコントローラ４５は、検索対象となるデータのホームアドレスがＣＰＵ１２ｇのアドレスではない場合は（ステップＳ３０９否定）、他のＣＰＵにデータ補充リクエストを発行する（ステップＳ３１１）。次に、Ｌ２キャッシュアクセスコントローラ４５は、データ補充のレスポンスを受信すると（ステップＳ３１２）、データとともに受信するセクタＩＤが「００」であるか否かを判別する（ステップＳ３１３）。
【０２３９】
そして、Ｌ２キャッシュアクセスコントローラ４５は、受信したセクタＩＤが「００」である場合は（ステップＳ３１３肯定）、セクタＩＤを「００」に更新し（ステップＳ３１４）、処理を終了する。一方、Ｌ２キャッシュアクセスコントローラ４５は、受信したセクタＩＤが「００」ではない場合は（ステップＳ３１３否定）、受信したセクタＩＤが「０１」であるか否かを判別する（ステップＳ３１５）。
【０２４０】
そして、Ｌ２キャッシュアクセスコントローラ４５は、受信したセクタＩＤが「０１」である場合は（ステップＳ３１５肯定）、セクタＩＤを「０１」に更新する（ステップＳ３１６）。また、Ｌ２キャッシュアクセスコントローラ４５は、受信したセクタＩＤが「０１」ではない場合は（ステップＳ３１５否定）、セクタＩＤを「１１」に更新する（ステップＳ３１７）。
【０２４１】
その後、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤを更新した場合は（ステップＳ３０５、Ｓ３０７、Ｓ３０８、Ｓ３１４、Ｓ３１６、Ｓ３１７）、以下の処理を実行する。すなわち、Ｌ２キャッシュアクセスコントローラ４５は、レスポンスとして更新後のセクタＩＤをＬ１キャッシュアクセスコントローラ５７に応答し（ステップＳ３１８）、処理を終了する。
【０２４２】
なお、ＣＰＵ１２ｇは、実施例１に係るＣＰＵ１２と同様の機能を発揮する。このため、ＣＰＵ１２ｇは、自身に接続するメモリ１７、１８の一部を共有メモリ域とし、共有メモリ域のみをフラッシュの対象としても良い。そこで、図２６に示したＬ２キャッシュアクセスコントローラ４５の処理のバリエーションとして、共有メモリ域のみをフラッシュの対象とする際に、Ｌ２キャッシュアクセスコントローラ４５が実行する処理の流れについて説明する。
【０２４３】
図２７は、共有メモリ域のみをフラッシュ対象とする処理の流れを説明するためのフローチャートである。なお、図２７に示す各処理のうち、ステップＳ３０１〜ステップＳ３１８については、図２６に示すステップＳ３０１〜ステップＳ３１８と同様の処理を実行するものとして、説明を省略する。
【０２４４】
例えば、Ｌ２キャッシュアクセスコントローラ４５は、キャッシュヒットしたエントリのセクタＩＤが「０１」ではなかった場合には（ステップＳ３０６否定）、以下の処理を実行する。すなわち、Ｌ２キャッシュアクセスコントローラ４５は、キャッシュヒットしたエントリのデータが、ＣＰＵ１２ｇが存在するノード以外のノードからキャッシュしたデータであるか否かを判別する（ステップＳ３１９）。
【０２４５】
そして、Ｌ２キャッシュアクセスコントローラ４５は、キャッシュヒットしたデータが他ノードのデータではない場合は（ステップＳ３１９否定）、セクタＩＤを「００」に更新する（ステップＳ３０５）。一方、Ｌ２キャッシュアクセスコントローラ４５は、キャッシュヒットしたデータが他ノードのデータである場合には（ステップＳ３１９肯定）、セクタＩＤを「１１」に更新する（ステップＳ３０８）。
【０２４６】
また、Ｌ２キャッシュアクセスコントローラ４５は、補充データのセクタＩＤが「０１」ではない場合は（ステップＳ３１５否定）、他ノードからキャッシュしたデータであるか否かを判別する（ステップＳ３２０）。そして、Ｌ２キャッシュアクセスコントローラ４５は、他ノードからキャッシュしたデータではないと判別した場合は（ステップＳ３２０否定）、セクタＩＤを「００」に更新する（ステップＳ３１４）。また、Ｌ２キャッシュアクセスコントローラ４５は、他ノードからキャッシュしたデータであると判別した場合は（ステップＳ３２０肯定）、セクタＩＤを「１１」に更新する（ステップＳ３１７）。
【０２４７】
このように、Ｌ２キャッシュアクセスコントローラ４５は、他ノードからキャッシュしたデータのみをフラッシュの対象とし、ＣＰＵ１２ｇが存在するノード（以下、自ノードとする）からキャッシュしたデータについてはフラッシュの対象としない。つまり、情報処理システム１ｄが、ＣＰＵ１２ｇが自ノードからキャッシュしたデータをフラッシュしたとしても、自ノードが故障した場合は、フラッシュしたデータを用いたリカバリを行えない。そこで、ＣＰＵ１２ｇは、他ノードからキャッシュしたデータのみをフラッシュの対象とすることで、より効率的なフラッシュ処理を行うことができる。
【０２４８】
次に、図２８を用いて、フラッシュ対象のウェイに上限がある際にセクタＩＤを登録する処理の流れについて説明する。図２８は、フラッシュ対象のウェイに上限がある際にセクタＩＤを登録する処理の流れを説明するためのフローチャートである。
【０２４９】
なお、図２８に示す例では、セクタＩＤが「００」のデータを登録可能な数をＭＡＸ００と記載し、セクタＩＤが「０１」のデータを登録可能な数をＭＡＸ０１と記載し、セクタＩＤが「１１」のデータを登録可能な数をＭＡＸ１１と記載した。また、図２８に示す例では、現在登録されているセクタＩＤが「００」のデータの数をＮＵＭ００と記載し、現在登録されているセクタＩＤが「０１」のデータの数をＮＵＭ０１と記載し、現在登録されているセクタＩＤが「１１」のデータの数をＮＵＭ１１と記載した。なお、ＭＡＸ０１およびＭＡＸ１１は、セクタ最大値レジスタ５８が記憶する値である。
【０２５０】
例えば、Ｌ２キャッシュアクセスコントローラ４５は、格納対象のデータのセクタＩＤが「１１」であるか否かを判別する（ステップＳ４０１）。そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」である場合は（ステップＳ４０１肯定）、ＭＡＸ１１の数がＮＵＭ１１と同じであるか否かを判別する（ステップＳ４０２）。
【０２５１】
そして、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ１１の数がＮＵＭ１１と同じである場合には（ステップＳ４０２肯定）、セクタＩＤが「１１」のウェイのいずれかにデータを登録し（ステップＳ４０３）、処理を終了する。また、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ１１の数がＮＵＭ１１と同じではない場合は（ステップＳ４０２否定）、ウェイが満杯であるか否かを判別する（ステップＳ４０４）。
【０２５２】
次に、Ｌ２キャッシュアクセスコントローラ４５は、ウェイが満杯である場合は（ステップＳ４０４肯定）、ＭＡＸ００がＮＵＭ００以下であるか否かを判別する（ステップＳ４０５）。そして、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ００がＮＵＭ００以下である場合は（ステップＳ４０５肯定）、現在のセクタＩＤが「００」のウェイのいずれかにデータを登録し（ステップＳ４０６）、処理を終了する。
【０２５３】
一方、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ００がＮＵＭ００より多い場合は（ステップＳ４０５否定）、現在のセクタＩＤが「０１」のウェイのいずれかにデータを登録し（ステップＳ４０７）、処理を終了する。また、Ｌ２キャッシュアクセスコントローラ４５は、ウェイが満杯ではない場合は（ステップＳ４０４否定）、空いているウェイにデータを登録し（ステップＳ４０８）、処理を終了する。
【０２５４】
また、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」ではない場合は（ステップＳ４０１否定）、ウェイが満杯か否かを判別する（ステップＳ４０９）。そして、Ｌ２キャッシュアクセスコントローラ４５は、ウェイが満杯ではない場合は（ステップＳ４０９否定）、空いているウェイにデータを登録し（ステップＳ４０８）、処理を終了する。
【０２５５】
また、Ｌ２キャッシュアクセスコントローラ４５は、ウェイが満杯である場合は（ステップＳ４０９肯定）、セクタＩＤが「０１」であるか否かを判別する（ステップＳ４１０）。そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「０１」である場合は（ステップＳ４１０肯定）、ＭＡＸ０１がＮＵＭ０１以下であるか否かを判別する（ステップＳ４１１）。
【０２５６】
そして、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ０１がＮＵＭ０１以下である場合は（ステップＳ４１１肯定）、現在のセクタＩＤが「０１」のウェイのいずれかにデータを登録し（ステップＳ４１２）、処理を終了する。一方、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ０１がＮＵＭ０１より多い場合は（ステップＳ４１１否定）、現在のセクタＩＤが「００」のウェイのいずれかにデータを登録し（ステップＳ４１３）、処理を終了する。
【０２５７】
また、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「０１」ではない場合は（ステップＳ４１０否定）、ＭＡＸ００がＮＵＭ００以下であるか否かを判別する（ステップＳ４１４）。そして、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ００がＮＵＭ００以下である場合は（ステップＳ４１４肯定）、現在のセクタＩＤが「００」のウェイのいずれかにデータを登録し（ステップＳ４１３）、処理を終了する。一方、Ｌ２キャッシュアクセスコントローラ４５は、ＭＡＸ００がＮＵＭ００より多い場合は（ステップＳ４１４否定）、現在のセクタＩＤが「０１」のウェイのいずれかにデータを登録し（ステップＳ４１５）、処理を終了する。
【０２５８】
このように、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」のデータについて、登録可能なウェイの最大数を設定し、ウェイの最大数を超える場合には、リプレースを実行する。また、Ｌ２キャッシュアクセスコントローラ４５は、ウェイの空きが無い場合は、上限値を超えているセクタＩＤのデータについてリプレースを行う。
【０２５９】
なお、Ｌ２キャッシュアクセスコントローラ４５は、フラッシュ対象のデータについては、積極的にリプレースを実行することで、メモリに書き戻してもよい。そこで、以下の説明では、図２９を用いて、Ｌ２キャッシュアクセスコントローラ４５が実行する処理のバリエーションについて説明する。
【０２６０】
図２９は、フラッシュ対象のウェイに上限がある際の処理のバリエーションを説明するためのフローチャートである。なお、図２９に示すステップＳ４０１〜ステップＳ４１５の処理については、図２８に示すステップＳ４０１〜ステップＳ４１５の処理と同様の処理であるものし、説明を省略する。
【０２６１】
例えば、Ｌ２キャッシュアクセスコントローラ４５は、ウェイが満杯であると判別した場合は（ステップＳ４０９肯定）、セクタＩＤが「１１」の登録が存在するか否かを判別する（ステップＳ４１６）。そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤ「１１」の登録が存在する場合は（ステップＳ４１６肯定）、セクタＩＤが「１１」のウェイのいずれかにデータを登録する（ステップＳ４１７）。
【０２６２】
すなわち、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」のウェイのいずれかをリプレースし、メモリ１７、１８への書き出しを行う。一方、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」の登録が存在しない場合は（ステップＳ４１６否定）、セクタＩＤが「０１」であるかを判別する（ステップＳ４１０）。
【０２６３】
図３０は、Ｌ２キャッシュのセクタＩＤの遷移を説明するための第１の図である。また、図３１は、Ｌ２キャッシュのセクタＩＤの遷移を説明するための第２の図である。Ｌ２キャッシュアクセスコントローラ４５は、図２８、図２９に示す処理を実行することで、セクタＩＤを登録することで、図３０、若しくは図３１に示すように、Ｌ２キャッシュタグ４６に登録したセクタＩＤを遷移させる。なお、図３０に示す例では、ライトバックを行う際に対象データのタグのステートを「Ｍ」から「Ｉ」に示す際のセクタＩＤの遷移について記載した。また、図３１に示す例では、ライトバックを行う際に対象データのタグのステートを「Ｍ」から「Ｅ」に変更する際のセクタＩＤの遷移について記載した。
【０２６４】
図３０に示す例では、Ｌ２キャッシュアクセスコントローラ４５は、リプレースもしくはインバリッドするまでセクタＩＤ「１１」を他の値に遷移させない。一方、図３１に示す例では、Ｌ２キャッシュアクセスコントローラ４５は、ステートを「Ｍ」から「Ｅ」に変更するキャッシュダウングレードを行う場合がある。このため、Ｌ２キャッシュアクセスコントローラ４５は、キャッシュダウングレードを行う場合には、セクタＩＤ「１１」をセクタＩＤ「００」に遷移させる場合がある。
【０２６５】
すなわち、図３０、および図３１に示すようにセクタＩＤの値を遷移させることで、Ｌ２キャッシュアクセスコントローラ４５は、メモリとキャッシュのコヒーレンシの保持が保障されるまで、セクタＩＤ「１１」を保持する。このため、ＣＰＵ１２ｇは、フラッシュを適切に行うことができる。
【０２６６】
次に、図３２を用いて、Ｌ２キャッシュアクセスコントローラ４５がＬ２キャッシュ概要セクタフラグ４８を設定する処理の流れについて説明する。図３２は、Ｌ２キャッシュ概要セクタフラグを設定する処理の流れを説明するためのフローチャートである。例えば、Ｌ２キャッシュアクセスコントローラ４５は、格納するデータのセクタＩＤが「１１」であるか否かを判別する（ステップＳ５０１）。
【０２６７】
そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」である場合には（ステップＳ５０１肯定）、Ｌ２フラッシュ概要セクタフラグ４８の読み込みを行う（ステップＳ５０２）。詳細には、Ｌ２キャッシュアクセスコントローラ４５は、データ格納を要求したコアのＬ２キャッシュ概要セクタフラグ４８のうち、データを格納するキャッシュラインのグループのフラグを読み込む。
【０２６８】
そして、Ｌ２キャッシュアクセスコントローラ４５は、読み込んだフラグが「１」であるか否かを判別する（ステップＳ５０３）。そして、Ｌ２キャッシュアクセスコントローラ４５は、読み込んだフラグが「１」ではない場合は（ステップＳ５０３否定）、Ｌ２キャッシュ概要セクタフラグ４８にフラグ「１」をセットし（ステップＳ５０４）、処理を終了する。
【０２６９】
なお、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」ではない場合や（ステップＳ５０１否定）、読み込んだフラグが「１」である場合は（ステップＳ５０３否定）、そのまま処理を終了する。
【０２７０】
次に、図３３を用いて、ＣＰＵ１２ｇがフラッシュを実行する処理の流れについて説明する。図３３は、フラッシュを実行する処理の流れを説明するためのフローチャートである。なお、図３３に示す例では、Ｌ２キャッシュ概要セクタフラグ４８のうち、ＣＰＵ１２ｇが参照するエントリを「ｉ」と記載した。また、図３３に示す例では、フラッシュ対象となるキャッシュラインのインデックスを「ｊ」と記載した。また、図３３に示す例では、Ｌ２キャッシュ４７の各キャッシュラインは、１２８本ごとに、グループ「０」からグループ「６３」に組み分けられているものとする。
【０２７１】
例えば、図３３に示す例では、フラッシュ制御部５２は、いずれかのコア４０〜４０ｂが実行するアプリケーションがフラッシュ要求を発行したことを契機として（ステップＳ６０１）、フラッシュ処理を実行する。まず、フラッシュ制御部５２は、「ｉ＝０」とする（ステップＳ６０２）。
【０２７２】
次に、フラッシュ制御部５２は、Ｌ２キャッシュ概要セクタフラグ４８のうち、フラッシュ要求を発行したコアの概要セクタフラグから、「ｉ」番目のエントリを読み出す（ステップＳ６０３）。そして、フラッシュ制御部５２は、読み出した概要セクタフラグが「１」であるか否か判別し（ステップＳ６０４）、読み出した概要セクタフラグが「１」である場合は（ステップＳ６０４肯定）、読み出した概要セクタフラグを「０」にリセットする（ステップＳ６０５）。
【０２７３】
次に、フラッシュ制御部５２は、「ｊ＝０」とし（ステップＳ６０６）、Ｌ２キャッシュのインデックス（ｉ，ｊ）に対するフラッシュ要求を発行する（ステップＳ６０７）。すなわち、フラッシュ制御部５２は、「ｉ」グループに所属する「ｊ」番目のキャッシュラインに対するフラッシュ要求を発行する。すると、Ｌ２キャッシュアクセスコントローラ４５は、インデックス（ｉ，ｊ）の全ウェイのセクタＩＤを検査し（ステップＳ６０８）、セクタＩＤが「１１」で、ステートが「Ｍ」のエントリが存在するか否かを判別する（ステップＳ６０９）。
【０２７４】
そして、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」で、ステートが「Ｍ」のエントリを検出すると（ステップＳ６０９肯定）、検出したエントリの最若番のウェイのデータをＬ２キャッシュ４７からフラッシュする（ステップＳ６１０）。その後、Ｌ２キャッシュアクセスコントローラ４５は、セクタＩＤが「１１」で、ステートが「Ｍ」のエントリがまだ存在するか判別する（ステップＳ６１１）。
【０２７５】
次に、フラッシュ制御部５２は、Ｌ２キャッシュアクセスコントローラ４５がセクタＩＤが「１１」で、ステートが「Ｍ」のエントリがもう存在しないと判別した場合は（ステップＳ６１１否定）、「ｊ」の値が「１２７」であるか否かを判別する（ステップＳ６１２）。そして、フラッシュ制御部５２は、「ｊ」の値が「１２７」ではない場合は（ステップＳ６１２否定）、ｊの値を１インクリメントし（ステップＳ６１３）、ステップＳ６０７の処理を実行する。
【０２７６】
一方、フラッシュ制御部５２は、ｊの値が「１２７」である場合は（ステップＳ６１２肯定）、ｉの値が「６３」であるか否かを判別する（ステップＳ６１４）。そして、フラッシュ制御部５２は、ｉの値が「６３」である場合は（ステップＳ６１４肯定）、そのまま処理を終了する。また、フラッシュ制御部５２は、「ｉ」の値が「６３」ではない場合は（ステップＳ６１４否定）、「ｉ」の値を１インクリメントし（ステップＳ６１５）、ステップＳ６０４の処理を実行する。また、フラッシュ制御部５２は、読み出した概要セクタフラグが「１」ではない場合は（ステップＳ６０４）、ステップＳ６１４の処理を実行する。
【０２７７】
次に、図３４〜３６を用いて、ＣＰＵ１２ｇが実行するソフトウェアとハードウェアとの動作について説明する。まず、図３４を用いて、キャッシュミスが発生した際のソフトウェアとハードウェアの動作について説明する。図３４は、ストア時にキャッシュミスが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。
【０２７８】
まず、アプリケーション３５は、Ｓｙｎｃ  Ｓｔａｒｔを発行する（ステップＳ７０１）。すると、アプリケーションが示す期間であるセクタフラッシュモードがＯＮとなる（ステップＳ７０２）。次に、アプリケーション３５は、Ｓｔｏｒｅを発行する（ステップＳ７０３）。すると、Ｌ１キャッシュ４３にはデータが入っていないので、キャッシュミスが発生する（ステップＳ７０４）。このため、Ｌ１キャッシュアクセスコントローラ５７がデータの補充要求であるＲｅａｄ  Ｅｘを発行する（ステップＳ７０５）。この際、Ｌ１キャッシュアクセスコントローラ５７は、セクタＩＤは「１１」と指定する。
【０２７９】
すると、メモリ１７〜２４からのリードが行われ（ステップＳ７０６）、リードデータが出力されるとともに（ステップＳ７０７）、Ｌ２キャッシュ４７にデータがキャッシュされる（ステップＳ７０８）。なお、リードデータは、Ｌ１キャッシュ４３にステートを「Ｍ」、セクタＩＤを「１１」として格納される（ステップＳ７０９）。続いて、アプリケーション３５がＳｙｎｃ  ｅｎｄを発行する（ステップＳ７１０）。すると、セクタフラッシュモードがＯＦＦとなる（ステップＳ７１１）。
【０２８０】
続いて、フラッシュ制御部５２により、セクタフラッシュが実行され（ステップＳ７１２）、各キャッシュラインにフラッシュ要求が発行される（ステップＳ７１３）。すると、ステップＳ７０８にてキャッシュしたデータのステートが「Ｅ」でセクタＩＤが「１１」であるため、フラッシュの対象としてヒットする（ステップＳ７１４）。この結果、Ｌ２キャッシュアクセスコントローラ４５からステート「Ｍ」でヒットした旨とライトバック要求とが発行される（ステップＳ７１５）。
【０２８１】
すると、Ｌ１キャッシュ４３のデータのステートが「Ｉ」に変更される（ステップＳ７１６）。続いて、Ｌ２キャッシュアクセスコントローラ５７は、ライトバックを実行し（ステップＳ７１７）、Ｌ２キャッシュのステートを「Ｉ」に変更する（ステップＳ７１８）。また、フラッシュ制御部５２は、セクタフラッシュが完了すると（ステップＳ７１９）、完了応答をアプリケーション３５に発行する。
【０２８２】
次に、図３５を用いて、ストア時にキャッシュヒットした際のソフトウェアとハードウェアとの動作の流れについて説明する。図３５は、ストア時にキャッシュヒットした際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。図３５に示す例では、Ｌ１キャッシュ４３には、ステートが「Ｅ」でセクタＩＤが「００」のデータがキャッシュされている（ステップＳ８０１）。
【０２８３】
コア４０が実行するアプリケーション３５は、Ｓｙｎｃ  Ｓｔａｒｔを発行する（ステップＳ８０２）。すると、セクタフラッシュモードがＯＮになる（ステップＳ８０３）。続いて、アプリケーション３５は、Ｓｔｏｒｅを発行する（ステップＳ８０４）。
【０２８４】
すると、Ｌ１キャッシュアクセスコントローラ５７は、Ｓｔｏｒｅの対象が、Ｌ１キャッシュ４３にてヒットするので（ステップＳ８０５）、Ｌ２キャッシュ４７にセクタＩＤを「１１」に変更するよう通知する（ステップＳ８０６）。ここで、Ｌ２キャッシュ４７には、Ｌ１キャッシュ４３と同様に、ステートが「Ｅ」でセクタＩＤが「００」のデータがキャッシュされている（ステップＳ８０７）。このため、Ｌ２キャッシュアクセスコントローラ４５は、ステートが「Ｅ」のデータについて、セクタＩＤを「１１」に変更し（ステップＳ８０８）、変更完了通知を発行する（ステップＳ８０９）。
【０２８５】
続いて、Ｌ１キャッシュアクセスコントローラ５７は、Ｌ１キャッシュ４３に格納されたデータのステートを「Ｍ」とし、セクタＩＤを「１１」とする（ステップＳ８１０）。続いて、アプリケーション３５がＳｙｎｃ  ｅｎｄを発行する（ステップＳ８１１）。すると、セクタフラッシュモードがＯＦＦになる（ステップＳ８１２）。
【０２８６】
その後、フラッシュ制御部５２は、セクタフラッシュを実行し（ステップＳ８１３）、Ｌ２キャッシュ４７の各キャッシュラインについてフラッシュを行う（ステップＳ８１４）。すると、ステートが「Ｅ」でセクタＩＤが「１１」のキャッシュがヒットする（ステップＳ８１５）。この結果、Ｌ２キャッシュアクセスコントローラ４５は、ステート「Ｍ」がヒットした応答とライトバック要求とを発行する（ステップＳ８１６）。
【０２８７】
すると、Ｌ１キャッシュアクセスコントローラ５７は、キャッシュヒットしたデータのステートを「Ｍ」から「Ｉ」に変更する（ステップＳ８１７）。続いて、Ｌ２キャッシュアクセスコントローラ４５も、キャッシュヒットしたデータのステートを「Ｍ」から「Ｉ」に変更し（ステップＳ８１８）、その後、メモリ１７〜２４にライトバックする（ステップＳ８１９）。また、フラッシュ制御部５２は、セクタフラッシュ実行後に、セクタフラッシュが完了した旨の応答をアプリケーション３５に発行する（ステップＳ８２０）。
【０２８８】
次に、図３６を用いて、コンテキストスイッチが発生した際のソフトウェアとハードウェアとの動作の流れについて説明する。図３６は、コンテキストスイッチが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。図３６に示す例では、Ｌ１キャッシュ４３には、ステートが「Ｅ」でセクタＩＤが「００」のデータがＬ１キャッシュ４３とＬ２キャッシュ４７とに格納されている（ステップＳ９０１、ステップＳ９０２）。
【０２８９】
コア４０が実行するアプリケーション３５は、Ｓｙｎｃ  Ｓｔａｒｔを発行する（ステップＳ９０３）。すると、セクタフラッシュモードがＯＮになる（ステップＳ９０４）。続いて、アプリケーション３５は、Ｓｔｏｒｅを発行する（ステップＳ９０５）。
【０２９０】
すると、Ｌ１キャッシュアクセスコントローラ５７は、Ｓｔｏｒｅの対象が、Ｌ１キャッシュ４３にてヒットするので（ステップＳ９０６）、Ｌ２キャッシュ４７にセクタＩＤを「１１」に変更するよう通知する。このため、Ｌ２キャッシュアクセスコントローラ４５は、ステートが「Ｅ」のデータについて、セクタＩＤを「１１」に変更し（ステップＳ９０７）、変更完了通知を発行する（ステップＳ９０８）。また、Ｌ１キャッシュアクセスコントローラ５７は、ステート「Ｍ」のデータのセクタＩＤを「１１」に変更する（ステップＳ９０９）。
【０２９１】
ここで、割り込み命令が発行される（ステップＳ９１０）、ドライバ３３は、コンテキストスイッチを実行し、レジスタの値をメモリ１７、１９、２１、２３に格納するコンテキストストアを実行する（ステップＳ９１１）。また、ドライバ３３は、コンテキストストアが発生した場合にはセクタフラッシュモードのＯＦＦを待たずに、セクタフラッシュを要求するので、フラッシュ制御部５２は、セクタフラッシュを実行する（ステップＳ９１２）。また、フラッシュ制御部５２は、セクタＩＤが「１１」のデータを含むキャッシュラインについてフラッシュを行い（ステップＳ９１３）、セクタＩＤが「１１」のデータがヒットする（ステップＳ９１４）。
【０２９２】
この結果、Ｌ２キャッシュアクセスコントローラ４５は、ステート「Ｍ」がヒットした応答とライトバック要求とを発行する（ステップＳ９１５）。すると、Ｌ１キャッシュアクセスコントローラ５７は、キャッシュヒットしたデータのステートを「Ｍ」から「Ｉ」に変更し（ステップＳ９１６）、メモリ１７〜２４にライトバックを行う（ステップＳ９１７）。また、Ｌ２キャッシュアクセスコントローラ４５は、キャッシュヒットしたデータのステートを「Ｍ」から「Ｉ」に変更する（ステップＳ９１８）。
【０２９３】
また、フラッシュ制御部５２は、セクタフラッシュ実行後に、セクタフラッシュが完了した旨の応答をアプリケーション３５に発行する（ステップＳ９１９）。するとオペレーティングシステム３２は、アプリケーション２を呼び出し（ステップＳ９２０）、割り込みが発生する（ステップＳ９２１）。すると、ドライバ３３は、コンテキストロードを実行する（ステップＳ９２２）。
【０２９４】
続いて、アプリケーション３５がＳｙｎｃ  ｅｎｄを発行すると（ステップＳ９２３）、セクタフラッシュモードがＯＦＦとなる（ステップＳ９２４）。そして、フラッシュ制御部５２が、セクタフラッシュを実行し（ステップＳ９２５）、その後、フラッシュを発行する（ステップＳ９２６）。その後、フラッシュ制御部５２は、セクタフラッシュ完了通知を発行する（ステップＳ９２７）。
【０２９５】
［実施例５の効果］
上述したように、ＣＰＵ１２ｇは、アプリケーション３５が指定した期間内に更新したデータにセクタＩＤ「１１」を付して記憶する。そして、ＣＰＵ１２ｇは、アプリケーション３５が指定した期間が終了すると、セクタＩＤが「１１」のデータのみをＬ２キャッシュ４３からメモリ１７〜２４に書き戻すフラッシュを実行する。
【０２９６】
このため、ＣＰＵ１２は、アプリケーション３５のプログラムの修正を抑えることができる。また、ＣＰＵ１２は、データの書き戻しの処理時間を短縮するとともに、情報処理システム１の性能劣化を防ぐことができる。
【０２９７】
また、ＣＰＵ１２ｇは、各コア４０〜４０ｂごとに、アプリケーション３５が指定した期間内にデータが更新されたか否かを示すＬ２キャッシュ概要セクタフラグを複数のキャッシュラインごとに有する。そして、ＣＰＵ１２ｇは、フラッシュ要求が発行されると、フラッシュ要求を発行したコアごとに、Ｌ２キャッシュ概要セクタフラグが「１」であるグループのキャッシュラインを検査する。
【０２９８】
その後、ＣＰＵ１２ｇは、検査したキャッシュラインのうち、セクタＩＤが「１１」のデータをメモリ１７〜２４に書き戻す。このため、ＣＰＵ１２ｇは、キャッシュメモリ１２ａが有する全てのキャッシュラインを検査せずとも、アプリケーション３５が指定した期間内に更新されたデータをメモリ１７〜２４に書き戻すことができる。また、ＣＰＵ１２ｇは、複数のコアを有する場合にも、効率良くフラッシュを実行することができる。
【０２９９】
また、ＣＰＵ１２ｇは、コンテキストスイッチが発生した場合には、アプリケーションが指定した期間が終了する前にフラッシュを実行し、アプリケーションが指定した期間が終了した後に、再度フラッシュを実行する。このため、ＣＰＵ１２ｇは、コンテキストスイッチ機能を有し、各コア４０〜４０ｂが実行するアプリケーションがその都度変わる場合にも、効率よくフラッシュを実行できる。
【実施例６】
【０３００】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例６として本発明に含まれる他の実施例を説明する。
【０３０１】
（１）各実施例の組み合わせについて
上述した実施例５は、実施例１〜３の機能を有するＣＰＵ１２ｇについて説明した。しかし、実施例は、これに限定されるものではなく、各実施例１〜３に記載した機能を任意の組合せで実行することができる。また、ＣＰＵが複数のコアを有する場合であっても、実施例１に示すセクタフラグ、または、実施例２に示す概要セクタフラグを用いた処理を行うこととしてもよい。また、ＣＰＵ１２ｇに実施例４の機能を追加し、フラッシュを行う場合には、特定のウェイのみをフラッシュの対象としてもよい。
【０３０２】
（２）アプリケーションについて
上述した実施例１〜５では、アプリケーションが発行するフラッシュ要求に応じて、フラッシュを実行する例について説明した。しかし、実施例は、これに限定されるものではなく、アプリケーション等のプログラムが指定した期間が終了した後に、フラッシュ要求を発行するのであれば、ミドルウェア等の任意のプログラムがフラッシュ要求を発行することとしてもよい。
【０３０３】
（３）キャッシュの階層について
上述した実施例５では、各コア４０〜４０ｂごとのＬ１キャッシュ４３〜４３ｂと、各コア４０〜４０ｂで共用するＬ２キャッシュ４７を有する例について説明した。しかし、実施例はこれに限定されるものではなく、３次キャッシュ等を有するＣＰＵについても適用することができる。
【符号の説明】
【０３０４】
１〜１ｄ  情報処理システム
２、２ａ  クライアント端末
３、５  ＬＡＮスイッチ
４  管理端末
６  グローバルクロスバ
７  サービスプロセッサ
１０〜１０ｍ  ノード
１１  サービスプロセッサ
１２〜１２ｇ、１３〜１３ｆ、１４〜１４ｆ、１５〜１５ｆ  ＣＰＵ
１２ａ、１３ａ、１４ａ、１５ａ  キャッシュメモリ
１２ｃ、１２ｅ、１３ｃ、１３ｅ、１４ｃ、１４ｅ、１５ｃ、１５ｅ  概要セクタフラグ
１６  ローカルＸＢ
１７〜２４、７２  メモリ
２５  ＰＣＩｅスイッチ
２６、２７  ＬＡＮアダプタ
２８  ＳＡＳ
２９  ＨＤＤ
３０〜３０ｃ  ハードウェア
３１〜３１ｃ  ハイパーバイザ
３２〜３２ｃ  オペレーティングシステム
３３〜３３ｃ  ドライバ
３４〜３４ｃ  ミドルウェア
３５、３５ａ  アプリケーション
４０〜４０ｂ  コア
４１〜４１ｂ  セクタＩＤ生成部
４２〜４２ｂ  Ｌ１キャッシュタグ
４３〜４３ｂ  Ｌ１キャッシュ
４４〜４４ｂ  ＴＬＢ
４５  Ｌ２キャッシュアクセスコントローラ
４６  Ｌ２キャッシュタグ
４７  Ｌ２キャッシュ
４８  Ｌ２キャッシュ概要セクタフラグ
４９  アドレスマップ
５０  非キャッシュリクエストステートマシン
５１  設定レジスタ群
５２  フラッシュ制御部
５３  ＰＣＩ制御部
５４  ディレクトリ制御部
５５  スヌープ制御部
５６  リクエスト制御部
５７  Ｌ１キャッシュアクセスコントローラ
５８  セクタ最大値レジスタ
５９  ＬＲＵ
７０、７１  演算装置
【図１】
0005565425.tif 000002
【図２】
0005565425.tif 000003
【図３】
0005565425.tif 000004
【図４】
0005565425.tif 000005
【図５】
0005565425.tif 000006
【図６】
0005565425.tif 000007
【図７】
0005565425.tif 000008
【図８】
0005565425.tif 000009
【図９】
0005565425.tif 000010
【図１０】
0005565425.tif 000011
【図１１】
0005565425.tif 000012
【図１２】
0005565425.tif 000013
【図１３】
0005565425.tif 000014
【図１４】
0005565425.tif 000015
【図１５】
0005565425.tif 000016
【図１６】
0005565425.tif 000017
【図１７】
0005565425.tif 000018
【図１８】
0005565425.tif 000019
【図１９】
0005565425.tif 000020
【図２０】
0005565425.tif 000021
【図２１】
0005565425.tif 000022
【図２２】
0005565425.tif 000023
【図２３】
0005565425.tif 000024
【図２４】
0005565425.tif 000025
【図２５】
0005565425.tif 000026
【図２６】
0005565425.tif 000027
【図２７】
0005565425.tif 000028
【図２８】
0005565425.tif 000029
【図２９】
0005565425.tif 000030
【図３０】
0005565425.tif 000031
【図３１】
0005565425.tif 000032
【図３２】
0005565425.tif 000033
【図３３】
0005565425.tif 000034
【図３４】
0005565425.tif 000035
【図３５】
0005565425.tif 000036
【図３６】
0005565425.tif 000037
【図３７】
0005565425.tif 000038
【図３８】
0005565425.tif 000039
【図３９】
0005565425.tif 000040
【図４０】
0005565425.tif 000041
【図４１】
0005565425.tif 000042