(57)【特許請求の範囲】
【請求項１】
ＣＰＵと主記憶部との間に、キャッシュメモリ管理用の１ブロック単位のセットのキーアドレスと該セットの主記憶部に対する状態を管理するアドレスアレイと、ＣＰＵからのデータを一時格納するデータアレイと、エラー検出と訂正を行う機能部とを有するキャッシュメモリ部とを備えたキャッシュメモリ制御部を介在させ、ＣＰＵから主記憶部へのアクセスはキャッシュメモリ制御部を中継し、ＣＰＵから主記憶部へのアクセスを制御するキャッシュアクセス制御方式に適用するキャッシュメモリにおけるデータアレイの訂正不能障害救済方式であって、
前記キャッシュメモリ制御部は、前記アドレスアレイとデータアレイとエラー検出・訂正の機能に加えて、主記憶部に対する状態の保持およびデータのエラー検出を行う単位毎に更新情報を保持するデータアレイ更新情報保持部を備え、
前記データアレイ内で訂正不可能エラーが発生した際に前記データアレイ更新情報保持部を参照し、参照した結果、前記訂正不可能エラーが発生したデータが前記主記憶部と一致している状態である場合には、前記訂正不可能エラーが発生したデータが含まれるブロック内のデータのうち前記主記憶部と一致していない状態であるデータのみを前記データアレイから前記主記憶部に書き戻す手段を有することを特徴とするキャッシュメモリにおけるデータアレイの訂正不能障害救済方式。
【請求項２】
前記訂正不能障害救済方式を、分散型のキャッシュメモリに適用することを特徴とする請求項１記載のキャッシュメモリにおけるデータアレイの訂正不能障害救済方式。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データアレイの訂正不能障害救済方式に関し、特にキャッシュメモリにおけるアドレスアレイの状態が主記憶に対して更新であるデータアレイ内データで、実際には主記憶に対して一致の状態であるデータに訂正不可能障害が発生したケースで、データを不正に破壊することなく動作継続を可能にしたデータアレイの訂正不能障害救済方式に関する。
【０００２】
【従来の技術】
ストアイン方式を取る、主記憶部に対するキャッシュメモリを有する装置において、キャッシュの取り扱うデータ量の最小単位は、その装置の扱う１ワード長より大きいサイズを１ブロックとし、そのブロック単位で主記憶へのアクセスを行い、また、そのブロックのサイズでデータの管理を行うデータアレイ部と、データアレイ１ブロックに対応してデータアレイに保持するデータの主記憶部におけるアドレスと主記憶に対するデータアレイの更新状態を管理するアドレスアレイにて、キャッシュは構成されるのが一般的である。
【０００３】
図６にキャッシュを持つ装置の一例を示す。
演算を行うＣＰＵ１０と主記憶部３０の間に、キャッシュメモリ制御部２０が存在する。ＣＰＵ１０から主記憶部３０へのアクセスは、必ずキャッシュメモリ制御部２０を中継する。本装置における１ワード長は８バイトであり、ＣＰＵ１０から主記憶部３０へのリクエストは８バイト単位のアクセスとなる。
キャッシュメモリ制御部２０におけるキャッシュメモリ部ＣＭは、アドレスアレイ２１とデータアレイ２２で構成される。管理方法は、セットアソシエイティブ方式とする。キャッシュメモリ制御部２０においては、キャッシュメモリを管理する１ブロック単位は４ワード３２バイトとし、これがデータアレイの１セットあたりのサイズとなる。
【０００４】
データアレイ２２においては、８バイト単位にＥＣＣビットを付加し、エラー検出と訂正を行う事を可能とする。アドレスアレイ２１においては、データアレイ２２での１ブロック３２バイトに対応する単位で、データアレイ２２に保持するデータの主記憶部３０におけるアドレスを管理する。アドレスアレイ２１で管理する情報は、該当するセットのＫＥＹアドレスとそのセットの主記憶に対する状態である。状態は主記憶に対して無効，一致，変更の３つの状態を取る。
【０００５】
キャッシュメモリ制御部２０における動作は、次の通りである。
ＣＰＵ１０から発行されるメモリアクセスリクエストは、キャッシュメモリ制御部２０においては、キャッシュアクセス制御部２３において受け付けられる。キャッシュアクセス制御部２３は、ＣＰＵ１０からのリクエストのアドレスからアドレスアレイ２１に対するセットアドレスを送出してアドレスアレイ２１を索引し、またアドレス一致検出回路２４にセットアドレスを送出する。またリクエスト種別をキャッシュリードデータ処理部２５に送出する。
アドレス一致検出回路２４は、アドレスアレイ２１の索引結果でアドレスアレイ２１の一致処理結果をキャッシュリードデータ処理部２５に報告し、その状態をキャッシュアクセス制御部２３に通知する。
【０００６】
アドレスアレイ２１の索引結果により、キャッシュメモリ制御部２０の動作は次の通りになる。
まず、アドレスアレイ２１の索引結果が無効（該当リクエストのアドレスをキャッシュ内に保持しない）の場合について説明する。
ＣＰＵ１０からのリクエストが主記憶部３０に対するリードもしくはライトいずれの場合でも、キャッシュリードデータ処理部２５は、主記憶アクセス制御部２６を介して主記憶部３０に対してリクエストアドレスを含む３２バイトリード命令を発行する。主記憶部３０より返却された該当３２バイトリードリプライデータは、主記憶アクセス制御部２６によって受け取られ、キャッシュに登録される。
【０００７】
該当リクエストがリード命令であった場合、主記憶アクセス制御部２６よりキャッシュアクセス制御部２３とＣＰＵデータ返却部２７に対してリプライデータに転送される。ＣＰＵデータ返却部２７は、主記憶アクセスの元となったリクエストアドレスに該当する３２バイト中のデータを返却する。キャッシュアクセス制御部２３は、該当リプライデータをリクエストアドレスのセットアドレスに該当するデータアレイ２２の位置に登録すると共に、キーアドレスをアドレスアレイのセットアドレス該当位置に登録し、主記憶との関係を一致として状態を登録する。
【０００８】
該当リクエストがライト命令であった場合は、キャッシュアクセス制御部２３にのみリプライデータを転送し、リプライデータ３２バイト中の主記憶アクセスの元となったリクエストアドレスに該当する箇所のデータのみを、ライト命令に付加されたライトデータと差し替えてデータアレイ２２に登録し、アドレスアレイ２１にはキーアドレスを登録すると共に、主記憶との関係は更新として登録する。
【０００９】
次にアドレスアレイ２１の索引結果が一致もしくは更新で、アドレスアレイ２１内に保持するキーアドレスが、リクエストアドレスのキーアドレスと一致した場合（該当リクエストのアドレスのデータをキャッシュ内に保持する）について説明する。このケースでは主記憶部３０へのアクセスは発生しない。
【００１０】
該当リクエストがリード命令であった場合は、キャッシュリードデータ処理部２５よりキャッシュ内にデータを保持する事がキャッシュアクセス制御部２３に通知され、キャッシュアクセス制御部２３からデータアレイ２２に対して、リクエストの対象となるアドレスのセットアドレスに対応する箇所の８バイトデータリード指示が発行される（ステップＳ３４）。リードデータはエラー検出訂正回路２８を経由し、キャッシュリードデータ処理部２５に転送される。この際、訂正可能障害が検出された場合、該当のエラーは訂正され転送される。訂正不可能障害の場合は、リードデータ転送と共に、訂正不可能障害の検出が報告される。エラーが検出されない、もしくは訂正可能障害であった場合、該当リードデータは、ＣＰＵデータ返却部２７を経由してＣＰＵ１０に返却される。
【００１１】
該当リクエストがライト命令であった場合は、同じくキャッシュ内にデータを保持する事が通知され、キャッシュアクセス制御部２３からデータアレイ２２に対してデータライト命令が発行されると共に、該当セットのアドレスアレイ２１の主記憶との関係を更新として登録する。
【００１２】
次に、ＣＰＵ１０からのリクエストがアドレスアレイ２１内のキーアドレスと一致せず、該当セットの状態が無効で無かった場合について説明する。
この場合、ＣＰＵ１０からのリクエストのアドレスをキャッシュに登録する必要があるため、該当セットのキャッシュ内データを処理しなければならない。
状態が主記憶と一致の場合は、該当データが主記憶部３０に存在するため、キャッシュ内データを主記憶に書き戻す必要はなく、アドレスアレイ２１の索引結果が無効であった場合と同じ処理を行う。
【００１３】
状態が更新であった場合は、キャッシュアクセス制御部２３よりデータアレイ２２内データを出力する制御を行うと共に、キャッシュリードデータ処理部２５には主記憶アクセス制御部経由で主記憶部３０へ書き戻す指示を出す。また、アドレスアレイ２１の該当セットの状態を無効とし、以降はアドレスアレイ２１の索引結果が無効であった場合と同じ処理を行う。
【００１４】
最後に、ＣＰＵ１０からのリクエストがキャッシュ内データ吐き出し命令であった場合について説明する。この場合、アドレスアレイ２１内の状態が無効もしくはキーアドレス一致が無い場合、該当命令は無視される。キーアドレス一致が有り、主記憶との状態が一致で有る場合、アドレスアレイ２１の該当するセットアドレスの状態を無効として処理を終了する。主記憶との状態が更新であった場合は、該当セットのデータアレイ２２の保持する内容を主記憶部３０に出力し、アドレスアレイ２１内の該当するセットアドレスの状態を無効として処理を完了する。
【００１５】
【発明が解決しようとする課題】
しかしながら、このような構成を取るキャッシュメモリ管理を行うキャッシュにおいて、上記に示す通り、アドレスアレイの持つ主記憶との関係を示す情報管理は、１ブロック単位、上記の例では３２バイト毎に管理するため、ライト命令によって主記憶との関係が更新となる場合、３２バイト中の一部が更新された時点で、アドレスアレイの保持する内容が更新となる。
これはつまり、３２バイト中の８バイトが更新された時点のデータアレイ内の状態は、８バイトは主記憶に対して更新、残り２４バイトは主記憶に対して一致である。しかしアドレスアレイは主記憶との状態は１ブロック単位で管理するため、この８バイトのデータが更新されたタイミング以降は、主記憶に対して一致である残り２４バイトのデータは主記憶に対して更新の状態であるとして扱われる事を意味する。
よって、データアレイ内に保持するデータが一部更新されている状態で、主記憶との関係が一致しているデータに訂正不能障害が発生した場合、以下に示す問題が発生する。
【００１６】
図７に、データアレイ内で主記憶と一致しているデータに、訂正不能障害が発生したケースの問題を示す。
タイミングＴ１において、ＣＰＵからのリクエストＲ１がアドレスＮに対して発行されたとする。該当アドレスＮのキャッシュ内セットアドレスはｎとなったとする。リクエストＲ１はリード命令とする。該当セットでのアドレスアレイの状態はＩ（無効）であったため、主記憶に対しては３２バイトのリード命令が発行され、アドレスＮとＮ＋８，Ｎ＋１６，Ｎ＋２４の内容がデータアレイにロードされる。この時点での主記憶ＮからＮ＋２４までのデータは、それぞれＮ１，Ｎ２，Ｎ３，Ｎ４であったとする。
【００１７】
タイミングＴ２の時点で主記憶からの３２バイトのデータが返却され、データアレイに登録される。該当セットのアドレスアレイの状態はＣ（一致）が登録される。
タイミングＴ３の時点で、ＣＰＵからリクエストＲ２が発行された。Ｒ２はライトリクエストでＮ＋８のアドレスにデータＷを書き込むリクエストである。該当セットの状態はリクエストＲ１のリードによりＣであり、ストアイン方式であるため主記憶の内容は更新されない。
【００１８】
タイミングＴ４の時点で、キャッシュ内データアレイのセット内＋８の位置にデータＷが書き込まれ、アドレスアレイの状態はＭ（更新）となる。
タイミングＴ５の時点で、データアレイセット内＋１６のデータに訂正不可能エラーが発生した。
タイミングＴ６の時点で、ＣＰＵよりリクエストＲ３が発行された。Ｒ３はアドレスＮに対するキャッシュ内データの主記憶吐き出し命令とする。該当セットｎの状態はＭであるため、データアレイ内のデータは主記憶に書き戻す必要があるが、セット内アドレス＋１６のデータには訂正不可能エラーが発生している。
【００１９】
一連のキャッシュアクセスによりデータアレイ内のデータが更新されているため、更新状態を主記憶に反映させるためには、該当セット内のデータアレイの情報を主記憶に書き戻さねばならないが、エラーが存在する。この時、セット内アドレス＋１６の内容はキャッシュ内では更新されていない。しかし、アドレスアレイの状態管理を３２バイト単位で行っているため、アドレスアレイ内の状態管理からは、訂正不可能エラーを検出したセット内アドレス＋１６の内容が主記憶に対して更新されていないという事は判断出来ない。そのため、エラーの発生していない主記憶に対して更新の状態であるデータを（実際の主記憶に対して更新されているデータはセット内アドレス＋８のデータだけであるが、アドレスアレイの管理上は全データが更新扱いである）主記憶に対して書き込むために、訂正不能障害が発生しているデータを含めて３２ナイトのデータを主記憶に対して書き戻す動作を行う。
タイミングＴ７において、３２バイトデータが主記憶に書き戻される。更新されたセット内アドレスｎ＋８の内容は、正しく主記憶に書き戻す事が出来たが、代わりに主記憶内に存在していたアドレスＮ＋１６の内容が、データアレイ内で発生した訂正不能データによって上書きされてしまう問題が発生する。
【００２０】
そこで本発明の課題は、キャッシュメモリ制御部におけるアドレスアレイの状態が主記憶に対して更新であるデータアレイ内データで、実際には主記憶に対して一致の状態であるデータに訂正不可能障害が発生したケースで、データを不正に破壊することなく動作継続を可能にしたデータアレイの訂正不能障害救済方式を提供することである。
【００２１】
【課題を解決するための手段】
前記課題を解決するために本発明は、ＣＰＵと主記憶部との間に、キャッシュメモリ管理用の１ブロック単位のセットのキーアドレスと該セットの主記憶部に対する状態を管理するアドレスアレイと、ＣＰＵからのデータを一時格納するデータアレイと、エラー検出と訂正を行う機能部とを有するキャッシュメモリ部とを備えたキャッシュメモリ制御部を介在させ、ＣＰＵから主記憶部へのアクセスはキャッシュメモリ制御部を中継し、ＣＰＵから主記憶部へのアクセスを制御するキャッシュアクセス制御方式に適用するキャッシュメモリにおけるデータアレイの訂正不能障害救済方式であって、
前記キャッシュメモリ制御部は、前記アドレスアレイとデータアレイとエラー検出・訂正の機能に加えて、主記憶部に対する状態の保持およびデータのエラー検出を行う単位毎に更新情報を保持するデータアレイ更新情報保持部を備え、
該データアレイ更新情報保持部にエラー検出のあったデータが主記憶部に対して一致していることを示す情報を記憶させておき、
前記データアレイ内で訂正不可能エラーが発生した際に前記データアレイ更新情報保持部を参照し、参照した結果、前記訂正不可能エラーが発生したデータが前記主記憶部と一致している状態である場合には、前記訂正不可能エラーが発生したデータが含まれるブロック内のデータのうち前記主記憶部と一致していない状態であるデータのみを前記データアレイから前記主記憶部に書き戻す手段を有することを特徴とする。
【００２２】
このようにすれば、アドレスアレイの状態が主記憶に対して更新であるデータアレイ内データで、実際には主記憶に対して一致の状態であるデータに訂正不可能障害が発生したケースでも、データを不正に破壊することなく動作継続が可能となる。
【００２３】
【発明の実施の形態】
（Ｉ）概要説明
先ず、図１および図２を参照しつつ、本発明の動作概要の具体例を説明する。
（１）条件
▲１▼管理方法はセットアソシエイティブ方式。
▲２▼主記憶へのライト動作は、ストアイン方式で処理する。
▲３▼キャッシュメモリ管理用の１ブロック単位は、４ワード３２バイトを１セット。
▲４▼８バイト単位にＥＣＣビットを付加し、エラー検出と訂正を行う。
▲５▼アドレスアレイ２１の管理情報は該当するセットのＫＥＹアドレスとそのセットの主記憶に対する状態。状態は主記憶に対して無効，一致，変更の３つの状態。
▲６▼データアレイ更新情報保持部１０１は、主記憶に対する状態を保持する事はアドレスアレイ２１と同じだが、キーアドレスは保持しない、またセット単位での管理でなく、データアレイ２２のエラー検出を行う単位ごとに更新情報を保持する。本構成例では、１セットは１ブロック３２バイト、４ワードであるため、８バイトごとに計４個の主記憶に対する状態を保持する。
【００２４】
（２）動作…具体例
図２に、データアレイ内で主記憶と一致しているデータに、訂正不能障害が発生したケースを救済出来る例を示す。
タイミングＴ１において、ＣＰＵからのリクエストＲ１がアドレスＮに対して発行されたとする。該当アドレスＮのキャッシュ内セットアドレスはｎとなったとする。リクエストＲ１はリード命令とする。該当セットでのアドレスアレイの状態はＩ（無効）であったため、主記憶に対しては３２バイトのリード命令が発行されアドレスＮとＮ＋８，Ｎ＋１６，Ｎ＋２４の内容がデータアレイにロードされる。この時点での主記憶ＮからＮ＋２４までのデータは、それぞれＮ１，Ｎ２，Ｎ３，Ｎ４であったとする。
【００２５】
タイミングＴ２の時点で主記憶からの３２バイトのデータが返却され、データアレイに登録される。該当セットのアドレスアレイの状態はＣ（一致）が登録される。また、データアレイ更新情報保持部１０１でのセット内アドレス４カ所に対応する情報も全てＣをセットする。
タイミングＴ３の時点で、ＣＰＵからリクエストＲ２が発行された。Ｒ２は、ライトリクエストでＮ＋８のアドレスにデータＷを書き込むリクエストである。該当セットの状態は、リクエストＲ１のリードによりＣであり、ストアイン方式であるため主記憶の内容は更新されない。
【００２６】
タイミングＴ４の時点で、キャッシュ内データアレイのセット内＋８の位置にデータＷが書き込まれ、アドレスアレイの状態はＭ（更新）となる。また、セット内アドレス＋８に該当する個所のデータアレイ更新情報がＭとなる。
タイミングＴ５の時点で、データアレイセット内＋１６のデータに訂正不可能エラーが発生した。
タイミングＴ６の時点で、ＣＰＵよりリクエストＲ３が発行された。Ｒ３は、アドレスＮに対するキャッシュ内データの主記憶吐き出し命令とする。該当セットｎの状態はＭであるため、データアレイ内のデータは主記憶に書き戻す必要があるがセット内アドレス＋１６のデータには訂正不可能エラーが発生している。
【００２７】
データアレイ更新情報保持部１０１の情報からエラー検出のあったデータは、主記憶に対して一致している事が判断出来るため、該当リクエストＲ３のキャッシュ内データの主記憶吐き出し命令については、主記憶に対してＭ（更新）である、セット内アドレス＋８のデータのみ、主記憶に書き戻しを行う。
【００２８】
即ち、従来技術で、上記の様なケースでは、該当セット３２バイトの書き戻しが発生し、主記憶部の正常なデータの破壊が発生する。これはアドレスアレイの状態がＭ（更新）であるため、キャッシュ内で更新したＮ＋８アドレスのデータＷを主記憶部に書き戻さねばならないからである。
【００２９】
従来のアドレスアレイのみでデータアレイ内の主記憶との状態管理を行う方法では、アドレスアレイは対応するセットの１ブロック単位で主記憶との状態を保持するため、ブロック内の部分的な更新、一致の判断は行えない。そのため該当セットの３２バイト全てを書き戻すしか無く、結果的に主記憶部ではエラーの無い状態で保持されている正常なデータの破壊が発生する。仮にエラーの発生を理由として該当セットのブロックデータを破棄した場合には主記憶部の破壊は発生しないが、Ｎ＋８アドレスの更新されたデータも破棄されるため、ＣＰＵが再度Ｎ＋８アドレスのデータを使用した演算を行った際には、その演算結果は不正なものとなる。
【００３０】
本発明の方式では、データアレイ更新情報保持部１０１の情報により、セット内アドレス＋８のデータのみ主記憶に書き戻しを行っている。タイミングＴ７の時点でリクエストＲ３の処理が完了し、エラーの発生したデータアレイ内のデータは、主記憶を破壊する事なく動作完了となり、データアレイ内で発生した訂正不可能障害を救済することが出来る。
【００３１】
以下、本発明を図示の実施例に基づいて説明する。
（II）第１実施例
図１は本実施例のブロック図である。なお、従来例と同等の機能部分には同一符合を付している。
本実施例と図６の従来例との相違点は、データアレイ更新情報保持部１０１を追加した点である。
【００３２】
図１に示すように、演算を行うＣＰＵ１０と主記憶部３０の間にキャッシュメモリ制御部２０が存在する。ＣＰＵ１０から主記憶部３０へのアクセスは、必ずキャッシュメモリ制御部２０を中継する。本装置における１ワード長は８バイトであり、ＣＰＵ１０から主記憶部３０へのリクエストは８バイト単位のアクセスとなる。
キャッシュメモリ制御部２０におけるキャッシュメモリ部は、アドレスアレイ２１とデータアレイ２２とデータアレイ更新情報保持部１０１で構成される。管理方法はセットアソシエイティブ方式とする。
【００３３】
キャッシュメモリ制御部２０においては、キャッシュメモリを管理する１ブロック単位は４ワード３２バイトとし、これがデータアレイの１セットあたりのサイズとなる。データアレイ２２においては、８バイト単位にＥＣＣビットを付加し、エラー検出と訂正を行う事を可能とする。アドレスアレイ２１においてはデータアレイ２２での１ブロック３２バイトに対応する単位でデータアレイ２２に保持するデータの主記憶部におけるアドレスを管理する。アドレスアレイ２１で管理する情報は該当するセットのＫＥＹアドレスとそのセットの主記憶に対する状態である。状態は主記憶に対して無効，一致，変更の３つの状態を取る。
【００３４】
データアレイ更新情報保持部１０１は、主記憶に対する状態を保持する事はアドレスアレイ２１と同じであるが、キーアドレスは保持しない、またセット単位での管理でなく、データアレイ２２のエラー検出を行う単位ごとに更新情報を保持する。本構成例では、１セットは１ブロック３２バイト、４ワードであるため、８バイトごとに計４個の主記憶に対する状態を保持する。
【００３５】
キャッシュメモリ制御部２０は、上記キャッシュメモリ部以外に以下の物で構成される。
キャッシュアクセス制御部２３は、ＣＰＵ１０からのリクエストを受け付けると共に、アドレスアレイ２１の索引およびアドレス一致検出回路２４へのキャッシュ索引結果の判断を指示する。また、アドレスアレイ２１とデータアレイ２２、データアレイ更新情報保持部１０１のデータ書き込み、読み出し指示を行う。また、キャッシュリードデータ処理部２５に対して動作指示を行う。
アドレス一致検出回路２４は、アドレスアレイ２１の索引結果から該当セット内のキーアドレスの一致判断および該当セットの主記憶に対する状態を、キャッシュリードデータ処理部２５に報告する。
【００３６】
エラー検出訂正回路２８は、データアレイ２２出力データのエラーチェックを行い訂正可能エラー検出時は該当エラーを訂正し、キャッシュリードデータ処理部２５にデータを転送し、訂正不可能エラー検出時は、訂正不可能エラーの検出を報告する。
キャッシュリードデータ処理部２５は、アドレスアレイ２１の索引結果をキャッシュアクセス制御部２３に報告すると共に、データアレイ２２よりデータリードを行った際は、リードデータを主記憶アクセス制御部２６もしくはＣＰＵデータ返却部２７に転送する。
【００３７】
データリード要因が主記憶部３０へのデータ書き戻しであった場合には、主記憶アクセス制御部２６に対して主記憶部３０へのデータ書き戻しを指示する。キャッシュミスヒット時には、主記憶３へのデータリード指示を主記憶アクセス制御部２６に指示する。
主記憶アクセス制御部２６は、主記憶部３０へのアクセス指示を行うと共に、データリード時は、リプライリードデータをキャッシュアクセス制御部もしくはＣＰＵデータ返却部に転送する。
ＣＰＵデータ返却部２７においては、ＣＰＵ１０へのリプライリードデータを転送する。
【００３８】
次に、本実施例の動作を説明する。
キャッシュメモリ制御部２０における動作は、次の通りである。
ＣＰＵ１０から発行されるメモリアクセスリクエストは、キャッシュメモリ制御部２０においては、キャッシュアクセス制御部２３において受け付けられる。キャッシュアクセス制御部２３は、ＣＰＵ１０からのリクエストのアドレスからアドレスアレイ２１に対するセットアドレスを送出してアドレスアレイ２１を索引し、またアドレス一致検出回路２４にセットアドレスを送出する。また、リクエスト種別をキャッシュリードデータ処理部２５に送出する。アドレス一致検出回路２４は、アドレスアレイ２１の索引結果でアドレスアレイ２１の一致処理結果をキャッシュリードデータ処理部２５に報告し、その状態をキャッシュアクセス制御部２３に通知する。
【００３９】
アドレスアレイ２１の索引結果により、キャッシュメモリ制御部２０の動作は次の通りになる。
まず、アドレスアレイ２１の索引結果が無効（該当リクエストのアドレスをキャッシュ内に保持しない）場合について説明する。
ＣＰＵ１０からのリクエストが、主記憶部３０に対するリードもしくはライトいずれの場合でも、キャッシュリードデータ処理部２５は、主記憶アクセス制御部２６を介して主記憶部３０に対してリクエストアドレスを含む３２バイトリード命令を発行する。主記憶部３０より返却された該当３２バイトリードリプライデータは、主記憶アクセス制御部２６によって受け取られ。キャッシュに登録される。
【００４０】
該当リクエストがリード命令であった場合、主記憶アクセス制御部２６よりキャッシュアクセス制御部２３とＣＰＵデータ返却部２７に対して、リプライデータに転送される。ＣＰＵデータ返却部は、主記憶アクセスの元となったリクエストアドレスに該当する３２バイト中のデータを返却する。キャッシュアクセス制御部２３は、該当リプライデータをリクエストアドレスのセットアドレスに該当するデータアレイ２２の位置に登録すると共に、キーアドレスをアドレスアレイのセットアドレス該当位置に登録し、主記憶との関係を一致として状態を登録する。また、データアレイ更新情報保持部１０１には該当セット中の４エリア全てを一致として状態を登録する。
【００４１】
該当リクエストがライト命令であった場合は、キャッシュアクセス制御部２３にのみリプライデータを転送し、リプライデータ３２バイト中の主記憶アクセスの元となったリクエストアドレスに該当する箇所のデータのみを、ライト命令に付加されたライトデータと差し替えてデータアレイ２２に登録し、アドレスアレイ２１にはキーアドレスを登録すると共に、主記憶との関係は更新として登録する。この時、データアレイ更新情報保持部１０１にはライトデータを書き込むセット内アドレスに該当する個所のみを更新とし、それ以外の３カ所については一致として状態を登録する。
【００４２】
次に、アドレスアレイ２１の索引結果が一致もしくは更新で、アドレスアレイ２１内に保持するキーアドレスが、リクエストアドレスのキーアドレスと一致した場合（該当リクエストのアドレスのデータをキャッシュ内に保持する）について説明する。このケースでは主記憶部３０へのアクセスは発生しない。
該当リクエストがリード命令であった場合は、キャッシュリードデータ処理部２５よりキャッシュ内にデータを保持する事がキャッシュアクセス制御部２３に通知され、キャッシュアクセス制御部２３からデータアレイ２２に対して、リクエストの対象となるアドレスのセットアドレスに対応する箇所の８バイトデータリード指示が発行される。リードデータはエラー検出訂正回路２８を経由し、キャッシュリードデータ処理部２５に転送される。この際、訂正可能障害が検出された場合、該当のエラーは訂正され転送される。訂正不可能障害の場合はリードデータ転送と共に、訂正不可能障害の検出が報告される。
【００４３】
エラーが検出されない、もしくは訂正可能障害であった場合、該当リードデータはＣＰＵデータ返却部２７を経由してＣＰＵ１０に返却される。データアレイ更新情報保持部１０１に対するアクセスは行われない。
該当リクエストがライト命令であった場合は、同じくキャッシュ内にデータを保持する事が通知され、キャッシュアクセス制御部２３からデータアレイ２２に対してデータライト命令が発行されると共に、該当セットのアドレスアレイ２１の主記憶との関係を更新として登録する。データアレイ更新情報保持部１０１に対してはライトデータを書き込むセット内アドレスに該当する個所のみを更新とし、それ以外の３カ所については一致として状態を登録する。
【００４４】
次に、ＣＰＵ１０からのリクエストがアドレスアレイ２１内のキーアドレスと一致せず、該当セットの状態が無効で無かった場合について説明する。
この場合ＣＰＵ１０からのリクエストのアドレスをキャッシュに登録する必要があるため、該当セットのキャッシュ内データを処理しなければならない、状態が主記憶と一致の場合は、該当データが主記憶部３０に存在するため、キャッシュ内データを主記憶に書き戻す必要はなく、アドレスアレイ２１の索引結果が無効であった場合と同じ処理を行う。
【００４５】
前記状態が更新であった場合は、キャッシュアクセス制御部２３よりデータアレイ２２内データを出力する制御を行うと共に、キャッシュリードデータ処理部２５には主記憶アクセス制御部経由で主記憶部３０へ書き戻す指示を出す。また、アドレスアレイ２１の該当セットの状態を無効とし、データアレイ更新情報保持部１０１内４カ所全ての状態も無効とする。以降はアドレスアレイ２１の索引結果が無効であった場合と同じ処理を行う。
【００４６】
最後に、ＣＰＵ１０からのリクエストがキャッシュ内データ吐き出し命令であった場合について説明する。
この場合、アドレスアレイ２１内の状態が無効もしくはキーアドレス一致が無い場合、該当命令は無視される。キーアドレス一致が有り、主記憶との状態が一致で有る場合は、アドレスアレイ２１の該当するセットアドレスの状態を無効として処理を終了する。主記憶との状態が更新であった場合は、該当セットのデータアレイ２２の保持する内容を主記憶部３０に出力し、アドレスアレイ２１内の該当するセットアドレスの状態を無効とし、データアレイ更新情報保持部１０１内４カ所全ての状態も無効として処理を完了する。
【００４７】
エラー検出が無い限り、データアレイ更新情報保持部１０１内のデータは更新されることはあっても、参照されることは無く、データアレイ更新情報保持部が加わった事により、該当個所の参照の増加等による処理の遅れは発生しない。
データアレイ更新情報保持部１０１の内容が参照されるのは、アドレスアレイ参照結果が更新の状態でデータアレイ２２のリードデータに訂正不可能エラーが検出した場合である。訂正不可能エラー検出箇所が主記憶に対して一致状態の箇所で発生していた場合、次に示す方法で該当個所のエラーが救済可能となる。
【００４８】
データアレイ２２のリードが発生するのは、ＣＰＵ１０からのリクエストがアドレスアレイ索引の結果一致し、ＣＰＵ１０へのリードデータをデータアレイ２２から返却する場合、およびアドレスアレイの状態が更新で、ＣＰＵからのリクエストがキャッシュ吐き出しもしくは、セットアドレス不一致でデータアレイ２２内データを主記憶に書き戻した後にリクエストのアドレスを主記憶から読み出すケースである。
【００４９】
まず、データアレイ２２内データを主記憶部３０に書き戻すケースの場合について説明する。アドレスアレイ１２の状態が更新で、データアレイ２２からのリードデータにエラー検出訂正回路２８にて訂正不能障害が検出された場合、データアレイ更新情報保持部１０１から該当セットの各ワードの主記憶との関係を示す状態を読み出す。ここで、エラーの検出が行われたデータの主記憶との関係が一致であれば、主記憶部３０に対しては通常の１ブロック分の３２バイトのライト命令では無く、主記憶との関係が更新であるデータのみを書き戻すライト命令と差し替え、主記憶との関係は一致の状態であるエラー検出を行ったデータは書き戻さない。
【００５０】
次に、ＣＰＵ１０からのリード命令がアドレスアレイ索引が一致したケースの場合について説明する。
エラーの検出により、ＣＰＵデータ返却部２７へのデータ転送を中止、上記のケースと同様に、主記憶との関係が更新であるデータのみを書き戻し、アドレスアレイの該当セットの状態を無効とする。その後、アドレスアレイ２１索引結果が無効であったときのリードリクエスト処理と同様に、主記憶部３０への該当ブロックのリード命令を発行して主記憶部３０からのリードデータを、主記憶部アクセス制御部１６からＣＰＵデータ返却部２７を経由して、ＣＰＵ１０からのリードリクエストを処理する。
【００５１】
図２に、データアレイ内で主記憶と一致しているデータに、訂正不能障害が発生したケースを救済出来る例を示す。
タイミングＴ１において、ＣＰＵからのリクエストＲ１がアドレスＮに対して発行されたとする。該当アドレスＮのキャッシュ内セットアドレスはｎとなったとする。リクエストＲ１はリード命令とする。該当セットでのアドレスアレイの状態はＩ（無効）であったため、主記憶に対しては３２バイトのリード命令が発行されアドレスＮとＮ＋８，Ｎ＋１６，Ｎ＋２４の内容がデータアレイにロードされる。この時点での主記憶ＮからＮ＋２４までのデータは、それぞれＮ１，Ｎ２，Ｎ３，Ｎ４であったとする。
【００５２】
タイミングＴ２の時点で主記憶からの３２バイトのデータが返却され、データアレイに登録される。該当セットのアドレスアレイの状態はＣ（一致）が登録される。また、データアレイ更新情報保持部１０１でのセット内アドレス４カ所に対応する情報も全てＣをセットする。
タイミングＴ３の時点で、ＣＰＵからリクエストＲ２が発行された。Ｒ２は、ライトリクエストでＮ＋８のアドレスにデータＷを書き込むリクエストである。該当セットの状態は、リクエストＲ１のリードによりＣであり、ストアイン方式であるため主記憶の内容は更新されない。
【００５３】
タイミングＴ４の時点で、キャッシュ内データアレイのセット内＋８の位置にデータＷが書き込まれ、アドレスアレイの状態はＭ（更新）となる。また、セット内アドレス＋８に該当する個所のデータアレイ更新情報がＭとなる。
タイミングＴ５の時点で、データアレイセット内＋１６のデータに訂正不可能エラーが発生した。
タイミングＴ６の時点で、ＣＰＵよりリクエストＲ３が発行された。Ｒ３は、アドレスＮに対するキャッシュ内データの主記憶吐き出し命令とする。該当セットｎの状態はＭであるため、データアレイ内のデータは主記憶に書き戻す必要があるがセット内アドレス＋１６のデータには訂正不可能エラーが発生している。
【００５４】
データアレイ更新情報保持部１０１の情報からエラー検出のあったデータは、主記憶に対して一致している事が判断出来るため、該当リクエストＲ３のキャッシュ内データの主記憶吐き出し命令については、主記憶に対してＭ（更新）である、セット内アドレス＋８のデータのみ、主記憶に書き戻しを行う。
タイミングＴ７の時点でリクエストＲ３の処理が完了。エラーの発生したデータアレイ内のデータは、主記憶を破壊することなく動作完了となり、データアレイ内で発生した訂正不可能障害を救済出来た。
【００５５】
（III）第２実施例
本発明の第２実施例として、分散型のメモリキャッシュを持つシステムにおける場合を示す。
図３はそのシステム構成例である。ＣＰＵ１０Ａ，ＣＰＵ１０Ｂ，ＣＰＵ１０Ｃ，ＣＰＵ１０Ｄは、それぞれに主記憶部３０に対するメモリキャッシュを持つ、それらをキャッシュメモリ制御部２３Ａ，２３Ｂ，２３Ｃ，２３Ｄとする。これらのキャッシュメモリ制御部２３Ａ，２３Ｂ，２３Ｃ，２３Ｄは、同一の構成である。これらのキャッシュメモリ制御部はシステムバス１１０により、主記憶部３０とバス接続される。
キャッシュメモリ制御部の構成要素は、前記第１実施例と同様である。ただし、キャッシュメモリが複数存在するため、複数のキャッシュメモリ間でのキャッシュコヒーレンシを保つための機能が追加される。
【００５６】
図４は、本システム上のキャッシュメモリ制御部における、キャッシュステータスの状態遷移図である。すなわち、アドレスアレイの管理方法となる。
図中の四角内の文字は、アドレスアレイのステータスにあたる。
ＩはInvalidでキャッシュメモリの内容が無効であることを意味する。ＣＥはClean Exclusiveでキャッシュメモリ内に持つ主記憶の内容が主記憶と一致し、他のキャッシュメモリ制御部内には同一アドレスの主記憶コピーを持たない事を示す。ＣＳはClean Shareでキャッシュメモリ内に持つ主記憶の内容が主記憶と一致し、複数のキャッシュメモリ制御部内のキャッシュメモリ間で同一アドレスの主記憶コピーを持つことを示す。ＭはModifiedで、キャッシュメモリ内の内容が、主記憶の内容に対して更新されていることを示す。本システムではキャッシュメモリの内容が、主記憶に対して更新されている状態となる事の出来るキャッシュメモリは一つだけの制御を行うため、共有関係を含めた形で表現すると、本状態はModified Exclusiveとなる。Modified Shareの状態は存在しない。
【００５７】
図中の破線で示された矢印は、ＣＰＵからのリクエストによって発生した状態遷移を示す。ＣＰＵからのリクエストはリードとライトである。
図中の実線で示された矢印は、システムバス１１０に送出されたあるキャッシュメモリ制御部からのリクエストをバスのスヌーピングによって受け付けた事により発生した状態遷移を示す。キャッシュメモリ制御部から発行されるリクエストは次の通りである。
【００５８】
ＳＢＲは、主記憶部３０へのリードリクエストである。キャッシュステータスがＩでキャッシュメモリ内にデータを持たない場合に発行する。ＳＢＲ発行の要因は、ＣＰＵからのリクエストがリードであった場合である。ＥＢＲは、主記憶へのリードリクエストである。キャッシュステータスがＩであった場合に、ＣＰＵからのリクエストがライトである場合に発行する。ＢＷは、主記憶部へのキャッシュメモリ内データの書き戻しを行うライトリクエストである。キャッシュステータスがＭであった場合に発行される。ＩＮＶは、キャッシュ無効化指示のリクエストである。本リクエストは、他のキャッシュメモリ制御部への命令である。キャッシュステータスがＣＳであった場合に発行される。共有された主記憶内コピーのデータを更新するため、他のキャッシュ内に保持する主記憶内データを無効化するために発行する。
【００５９】
また、システムバス１１０から受け付けた命令に対するリプライ動作として、ＳＢＲ命令に対するリプライ動作がある。ＳＢＲを受け付けたキャッシュメモリ制御部は、該当リクエストに対するアドレスがＣＥもしくはＣＳでアドレスアレイ検索結果が一致した場合は、主記憶コピーを保持している事を示すためOwner Replyをシステムバス１１０に送出する。
【００６０】
状態遷移について以下に説明する。ステータスＩでのＣＰＵのリクエストは、必ずキャッシュミスとなる。リードリクエストであれば、システムバス１１０に対してはＳＢＲを発行、主記憶部３０からのリプライデータをキャッシュメモリに登録する。その際、Owner Replyが無ければ、他のキャッシュメモリ制御部内のキャッシュメモリ内に同一アドレスの主記憶コピーは存在しないことになるので、アドレスアレイのステータスをＣＥとする、Owner Replyがあれば、複数のキャッシュメモリ内に同一内容の主記憶コピーが存在する事になるので、アドレスアレイのステータスはＣＳに変更する。ＣＰＵからのリクエストがライトであった場合は、リプライデータにＣＰＵからのライトデータをマージしてキャッシュメモリに登録し、アドレスアレイのステータスはＭに変更する。ステータスがＩであれば、システムバスからのリクエストによる状態変化は発生しない。
【００６１】
ステータスがＣＥの場合、ＣＰＵからのリクエストがリードであれば、ステータス変化は無い。ライトであった場合は、保持しているデータアレイ内のデータにライトデータを書き込むと共に、ステータスをＭに変更する。バスからのリクエストがＳＢＲであった場合、Owner Replyをバスに送出する。他のキャッシュメモリ内に同一の主記憶データコピーが存在する事になるので、ステータスをＣＳに変更する。バスからのリクエストがＥＢＲであった場合、ＥＢＲ送出元では主記憶部３０からのリプライデータを更新するため、ステータスをＩに変更する。キャッシュメモリ内データは主記憶と一致しているため、データを書き戻す必要は無く、主記憶へのアクセスは発生しない。
【００６２】
ステータスがＣＳの場合、ＣＰＵからのリクエストがリード、およびバスからのリクエストがＳＢＲであった場合、ステータスは変化しない。ただし、バスからのＳＢＲに対してはOwner Replyを返却する。ＣＰＵからのライトリクエストについては、キャッシュ内データを更新するため、同一データを共有している他のキャッシュメモリ内データを無効化する必要が有ることから、バスに対してＩＮＶを発行する。データアレイにＣＰＵからのライトデータを書き込み、ステータスをＭに変更する。一方、バスからのＥＢＲもしくはＩＮＶを受け付けた場合は、ステータスをＩに変更する。主記憶アクセスが発生しないのはＣＥ時と同じである。
【００６３】
ステータスがＭの場合、ＣＰＵからのリクエストがライト，リードの場合とも、ステータスは変化しない。バスからのリクエストがＥＢＲであった場合、データアレイ内のデータをＷＢ命令によって主記憶部３０に書き戻し、ステータスはＩに変更する。ＥＢＲの発行元には書き戻されたデータが主記憶部３０から送出される。ＳＢＲであった場合には、同じくデータアレイ内のデータが主記憶部３０にＷＢによって書き戻される。ただし、キャッシュメモリ内のデータは破棄しない、ＳＢＲの発行元にこの書き戻されたデータが主記憶部３０から出力されるためステータスはＣＳと変更する。
このようなキャッシュコヒーレンシ管理を行うシステム上においては、次の様にデータアレイ更新情報保持部の管理を行うことで、第１実施例に示した例と同様に、データアレイでの訂正不能障害発生時における主記憶内容の不正破壊を防ぐことが出来る。
【００６４】
図５にアドレスアレイの状態を変更したケースに対応するデータアレイ更新情報保持部の制御方法を示す。
アドレスアレイがＩから変化するのは、ＣＰＵからのリクエストがミスヒットし、主記憶部３０からのリプライデータをデータアレイに書き込むケースである。よって、データアレイへのライトアクセスは全ワード分発生する。アドレスアレイがＣＥもしくはＣＳとなるのは、ＣＰＵからのリクエストがリードの場合であり、主記憶からのリプライデータを全ワード書き込むタイミングに同時に全ワード分の状態をＩからＣに変更する。アドレスアレイの状態がＭになるのは、ＣＰＵからのリクエストがライトの場合であり、ライトデータを書き込むワードの状態のみＭに、それ以外の主記憶からのデータをそのまま書き込むワードについてはＣとする。アドレスアレイがＩのままのケースでは、データアレイの更新は発生しないため、データアレイ更新情報保持部へのアクセスは行わない。
【００６５】
アドレスアレイの状態がＣＥからＩに変化するのは、バスからのＥＢＲによりアドレスアレイの状態を無効化するケースである。この状態では、データアレイ更新情報保持部についても同様に全ワード分Ｉとする。ＣＳもしくはＣＥのままのケースは、ＣＰＵからのリードもしくはバスからのＳＢＲのケースである。いずれのケースでも、データアレイへのライト動作は発生しない。データアレイ更新情報保持部へのアクセスは行わない。Ｍに変化するのは、ＣＰＵからのライトのケースである。この場合は、データアレイへの該当ワードのみのライトとなる。該当ワードの状態をＭに変更し、他のワードへのアクセスは行わない。
【００６６】
アドレスアレイの状態がＣＳからＩに変化するのは、バスからのＥＢＲもしくはＩＮＶを受け付けたケースである。この状態では、データアレイ更新情報保持部についても同様に全ワード分Ｉとする。ＣＳのままで有る場合は、ＣＰＵからのリードおよびＳＢＲを受け付けたケースである。いずれのケースも、データアレイへのライト動作は発生しない。データアレイ更新情報保持部へのアクセスは行わない。Ｍに変化するのはＣＰＵからのライトのケースである。この場合は、データアレイへの該当ワードのみのライトとなる。該当ワードの状態をＭに変更し、他のワードへのアクセスは行わない。
【００６７】
アドレスアレイの状態がＭからＩに変化するのは、バスからのＥＢＲを受け付けたケースである。この状態では、データアレイ更新情報保持部についても同様に全ワード分Ｉとする。ＣＳに変化するのは、バスからのＳＢＲを受け付けたケースである。データアレイ更新情報保持部についても全ワード分Ｃとする。Ｍのままであるのは、ＣＰＵからのリードもしくはライトリクエストがあったケースであるが、ライト命令の場合は該当するワードへの書き込みの際、データアレイ更新情報保持部のそのワードに対応する箇所のみＭとする。その際、該当ワードの書き込み前の状態を考慮する必要はない。ライトリクエスト時にライトを行うワード以外へのアクセスは必要無い。また、リクエストがリードであった場合は全ワードアクセスの必要はない。
【００６８】
主記憶部３０へのデータアレイ内データの書き戻しはＢＷ命令で行う。通常、ＢＷ命令は全ワード分のデータを書き込む命令であるが、次の機能を付加する。ＢＷ命令の発行の際、ワード単位に主記憶への書き込みを抑止する情報を付加する。通常のＢＷ命令発効の際は、書き込み抑止情報は全ワード毎に、書き込み抑止無しという状態で命令を発行し、データアレイから読み出した１ブロック分のデータを主記憶部３０に送出する。訂正不能障害を検出したワードの状態がＣであった場合には、該当ワードの書き込み抑止情報を書き込み抑止という状態で命令を発行し、１ブロック分のデータとしては、訂正不能障害を検出しなかったワードについてはデータアレイから読み出したデータを、訂正不能障害検出のワードについては、例えばall0のダミーデータに差し替えて転送する。ＢＷ命令を受け付けた主記憶部３０では書き込み抑止情報を参照し、書き込み抑止の状態であれば、該当ワードは主記憶に書き込まないという制御を行う。
なお、【００６３】にて説明したＳＢＲによるＢＷ命令実行時にはキャッシュ内データを破棄しないため訂正不能障害の発生したデータがキャッシュ内に残存する（ＥＢＲによるＢＷ命令実行時にはキャッシュステータスがＩとなるため、結果的に訂正不能障害が発生したデータは破棄される）。しかしステータスがＣＳとなるため、ＥＢＲの受信時にはステータスＩとなりデータは破棄、ＣＰＵからのライトにより再びステータスＭとなるケースでは、ライトアドレスが訂正不可能障害発生アドレスと同一であれば訂正不可能障害発生のデータは上書きされるため消滅、訂正不可能障害発生アドレスと異なるアドレスであるケースは、再度本方式により救済可能であるため問題は発生しない。
【００６９】
上記の制御を行う事で、データアレイ内の書き込みを行うワード単位で主記憶との関係が一致であるか更新であるかを管理する事ができ、第１実施例のケースと同様に、訂正不能障害検出時、アドレスアレイの状態が更新であっても、訂正不能障害を検出したデータの状態が主記憶と一致であるケースで不正に主記憶の内容を破壊する事を救済できる。
【００７０】
なお、前記実施例ではセットアソシエイティブ方式の場合を説明したが、フルアソシエイティブ方式にも本発明を適用可能であるのは勿論である。
【００７１】
【発明の効果】
以上説明したように本発明によれば、以下の効果を発揮することができる。
従来救済不可能であった、アドレスアレイの状態が主記憶に対して更新であるデータアレイ内データで、実際には主記憶に対して一致の状態であるデータに訂正不可能障害が発生したケースで、データを不正に破壊することなく動作継続が可能となった。
【図面の簡単な説明】
【図１】本発明の第1実施例のブロック図である。
【図２】同第１実施例における、データアレイ内で主記憶と一致しているデータに、訂正不能障害が発生したケースを救済する際の処理を示す図である。
【図３】同第２実施例のブロック図である。
【図４】同２第実施例における、キャッシュメモリ制御部のキャッシュステータスの状態遷移図である。
【図５】同第２実施例における、アドレスアレイの状態を変更したケースに対応するデータアレイ更新情報保持部の制御方法を示す図である。
【図６】従来例のブロック図である。
【図７】従来例のデータアレイ内で主記憶と一致しているデータに、訂正不能障害が発生したケースの問題を示す図である。
【符号の説明】
ＣＭ１  キャッシュメモリ部
１０  ＣＰＵ
２０  キャッシュアクセス制御部
２１  アドレスアレイ
２２  データアレイ
２３  キャッシュアクセス制御部
２４  アドレス一致検出回路
２５  キャッシュリードデータ処理部
２６  主記憶アクセス制御部
２７  ＣＰＵデータ返却部
２８  エラー検出訂正回路
３０  主記憶部
１０１  データアレイ更新情報保持部
【図１】
0003716190.tif 000002
【図２】
0003716190.tif 000003
【図３】
0003716190.tif 000004
【図４】
0003716190.tif 000005
【図５】
0003716190.tif 000006
【図６】
0003716190.tif 000007
【図７】
0003716190.tif 000008