(57)【要約】【課題】ディレクトリ専用メモリをメモリコントローラに実装することなく同等の機能を実現する。【解決手段】ディレクトリ情報盛り込み回路１１４は、ディレクトリ制御部１１３からのライトがあった場合に、ディレクトリ情報において１となっている全てのビットに対応するデータワードのＥＣＣを、ＥＣＣチェックを行った際に、”ＥＣＣのビット０の１ビットエラー”として検出されるように変更し、メモリ制御部１１２に対して該データワードＷｘｙおよび盛り込み済ＥＣＣのライト指示を行う。ディレクトリ情報復元回路１１５は、メモリブロックデータおよび盛り込み済ＥＣＣからディレクトリ情報を抽出し、データワード毎のＥＣＣチェックおよびディレクトリ情報のパリティチェックを行い、この結果に従ってメモリブロック内の１データワードにおける１ビット訂正を行う。【選択図】図１
2005071224.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＵＰがメモリコントローラを介してＥＣＣ付きメモリを共有し、各ＣＰＵのキャッシュと前記ＥＣＣ付きメモリのメモリブロックとでのメモリブロックデータの非共有状態，共有状態および排他状態をディレクトリ情報として管理するコンピュータシステムにおいて、
前記メモリコントローラが、
ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、
メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、
メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路と
を有することを特徴とするディレクトリ情報記憶システム。
【請求項２】
複数のＣＵＰがメモリコントローラを介してＥＣＣ付きメモリを共有し、各ＣＰＵのキャッシュと前記ＥＣＣ付きメモリのメモリブロックとでのメモリブロックデータの非共有状態，共有状態および排他状態をディレクトリ情報として管理するコンピュータシステムにおいて、
前記メモリコントローラが、
ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、
メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、
メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元し、データワード毎のＥＣＣチェックおよびディレクトリ情報のパリティチェックを行い、この結果に従ってメモリブロックデータ中の１データワードにおける１ビット訂正を行うディレクトリ情報復元回路と
を有することを特徴とするディレクトリ情報記憶システム。
【請求項３】
複数のＣＵＰがメモリコントローラを介してＥＣＣ付きメモリを共有し、各ＣＰＵのキャッシュと前記ＥＣＣ付きメモリのメモリブロックとでのメモリブロックデータの非共有状態，共有状態および排他状態をディレクトリ情報として管理するコンピュータシステムにおいて、
前記メモリコントローラが、
前記ＥＣＣ付きメモリを、ＣＰＵのキャッシュラインサイズに等しいメモリブロック単位に管理し、実装され得る全てのメモリブロック毎に、メモリブロックデータがどのＣＰＵのキャッシュにも保持されていない非共有状態を示すディレクトリ情報，メモリブロックデータが１個以上のＣＰＵのキャッシュに保持されている共有状態を示すディレクトリ情報，およびメモリブロックデータが１個のＣＰＵで排他的に使用中で、すでに更新されている可能性がある排他状態を示すディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、
メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、
メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路と
を有することを特徴とするディレクトリ情報記憶システム。
【請求項４】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、システムダウンとすることを特徴とする請求項４記載のディレクトリ情報記憶システム。
【請求項５】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該マルチビットエラーとなったデータワードの盛り込み済ＥＣＣをＥＣＣのビット０の１ビットエラーの値とＸＯＲを行い、盛り込み済ＥＣＣからディレクトリ情報を排除した復元後ＥＣＣを生成し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣの１ビットエラーに相当する値であった場合、この復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うとともに、該データワードに対応するディレクトリ情報ビットは１であるとし、その後の動作を継続し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣのマルチビットエラーに相当するコードであった場合、システムダウンとすることを特徴とする請求項４記載のディレクトリ情報記憶システム。
【請求項６】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果が、ＥＣＣのビット０以外の１ビットエラーを表すシンドロームであり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、該復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うことを特徴とする請求項４記載のディレクトリ情報記憶システム。
【請求項７】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、システムダウンとすることを特徴とする請求項４記載のディレクトリ情報記憶システム。
【請求項８】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該データワードの復元後ＥＣＣのビット０を反転させて、再度エラーチェックを行い、その後に継続動作を行うことを特徴とする請求項４記載のディレクトリ情報記憶システム。
【請求項９】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のいくつかのデータワードのシンドロームの値がＥＣＣのビット０の１ビットエラーを表す値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、前記ディレクトリ制御部に対してはブロードキャストリクエストを行うとともに、データワードの盛り込み済ＥＣＣをディレクトリ情報データ部から再生成することにより継続動作を行うことが可能であることを特徴とする請求項４記載のディレクトリ情報記憶システム。
【請求項１０】
ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、
メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、
メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路と
を有することを特徴とするメモリコントローラ。
【請求項１１】
ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、
メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、
メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元し、データワード毎のＥＣＣチェックおよびディレクトリ情報のパリティチェックを行い、この結果に従ってメモリブロックデータ中の１データワードにおける１ビット訂正を行うディレクトリ情報復元回路と
を有することを特徴とするメモリコントローラ。
【請求項１２】
ＥＣＣ付きメモリを、ＣＰＵのキャッシュラインサイズに等しいメモリブロック単位に管理し、実装され得る全てのメモリブロック毎に、メモリブロックデータがどのＣＰＵのキャッシュにも保持されていない非共有状態を示すディレクトリ情報，メモリブロックデータが１個以上のＣＰＵのキャッシュに保持されている共有状態を示すディレクトリ情報，およびメモリブロックデータが１個のＣＰＵで排他的に使用中で、すでに更新されている可能性がある排他状態を示すディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、
メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、
メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路と
を有することを特徴とするメモリコントローラ。
【請求項１３】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、システムダウンとすることを特徴とする請求項１２記載のメモリコントローラ。
【請求項１４】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該マルチビットエラーとなったデータワードの盛り込み済ＥＣＣをＥＣＣのビット０の１ビットエラーの値とＸＯＲを行い、盛り込み済ＥＣＣからディレクトリ情報を排除した復元後ＥＣＣを生成し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣの１ビットエラーに相当する値であった場合、この復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うとともに、該データワードに対応するディレクトリ情報ビットは１であるとし、その後の動作を継続し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣのマルチビットエラーに相当するコードであった場合、システムダウンとすることを特徴とする請求項１２記載のメモリコントローラ。
【請求項１５】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果が、ＥＣＣのビット０以外の１ビットエラーを表すシンドロームであり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、該復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うことを特徴とする請求項１２記載のメモリコントローラ。
【請求項１６】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、システムダウンとすることを特徴とする請求項１２記載のメモリコントローラ。
【請求項１７】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該データワードの復元後ＥＣＣのビット０を反転させて、再度エラーチェックを行い、その後に継続動作を行うことを特徴とする請求項１２記載のメモリコントローラ。
【請求項１８】
前記ディレクトリ情報復元回路が、メモリブロックデータ中のいくつかのデータワードのシンドロームの値がＥＣＣのビット０の１ビットエラーを表す値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、前記ディレクトリ制御部に対してはブロードキャストリクエストを行うとともに、データワードの盛り込み済ＥＣＣをディレクトリ情報データ部から再生成することにより継続動作を行うことが可能であることを特徴とする請求項１２記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディレクトリ情報記憶システムおよびメモリコントローラに関し、特にＳＭＰ（Ｓｙｍｍｅｔｒｉｃａｌ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｏｒ）等の複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）でＥＣＣ（Ｅｒｒｏｒ―Ｃｈｅｃｋｉｎｇ  Ｃｏｄｅ）付きメモリを共有するコンピュータシステムにおけるディレクトリ情報記憶システムおよびメモリコントローラに関する。
【背景技術】
【０００２】
ＳＭＰ等の複数のＣＰＵでＥＣＣ付きメモリを共有するコンピュータシステムにおけるディレクトリ機能は、メモリをメモリブロック単位（メモリブロックの大きさはＣＰＵのキャッシュラインサイズと等しい）に管理し、実装され得る全てのメモリブロック毎に、下記の非共有状態（Ｎｏｔ  Ｓｈａｒｅｄ）を示すディレクトリ情報，共有状態（Ｓｈａｒｅｄ）を示すディレクトリ情報，および排他状態（Ｅｘｃｌｕｓｉｖｅ）を示すディレクトリ情報を保持し、これらのディレクトリ情報を用いて、コンピュータシステム内のキャッシュのコヒーレンシ制御を行っている。
【０００３】
従来技術においては、ディレクトリ機能を実現するために、メモリコントローラのチップセット上にディレクトリ専用メモリを実装し、メモリコントローラと接続するメモリ分（メモリブロック個数分）のディレクトリ情報を管理していた。
【０００４】
図５は、従来技術によるディレクトリ機能を示すブロック図である。
【０００５】
図５を参照すると、メモリコントローラ５１０は、ＥＣＣ付きメモリ５２０と接続されており、また、複数（図示は４台）のＣＰＵ５００〜５０３と接続されている。ＣＰＵ５００〜５０３は、それぞれ内部にキャッシュを内蔵している。メモリコントローラ５１０は、内部にＣＰＵインタフェース制御部５１１およびメモリ制御部５１２を有しており、全てのＣＰＵ５００〜５０３からのメモリアクセスリクエストを受け付け、ＥＣＣ付きメモリ５２０に対して該アクセス処理を行う機能を有している。また、メモリコントローラ５１０は、各ＣＰＵ５００〜５０３内のキャッシュのコヒーレンシを制御するために、ディレクトリ制御部５１３およびディレクトリ専用メモリ５１４を有している。ディレクトリ専用メモリ５１４は、実装するＥＣＣ付きメモリ５２０のメモリブロック毎に、該メモリブロックのディレクトリ情報を保持する機能を有している。
【０００６】
図６は、ディレクトリ情報記憶システムにおけるメモリブロックのディレクトリ情報の状態遷移を示す図である。図６を参照すると、あるメモリブロックのディレクトリ情報の非共有状態６００，共有状態６１０，６２０，および排他状態６３０と、各状態間の状態遷移１〜６（図６中の矢印）とが示されている。
【０００７】
非共有状態６００を示すディレクトリ情報は、メモリブロックデータがどのＣＰＵのキャッシュにも保持されていない状態であるという情報である。
【０００８】
共有状態６１０，６２０を示すディレクトリ情報は、メモリブロックデータが１個以上のＣＰＵのキャッシュに保持されている状態であるという情報，およびメモリブロックデータを保持しているＣＰＵを全て指し示す情報である。
【０００９】
排他状態６３０を示すディレクトリ情報は、メモリブロックデータが１個のＣＰＵで排他的に使用中で、すでに更新されている可能性がある状態であるという情報，およびメモリブロックデータを排他的に使用しているＣＰＵを指し示す情報である。
【００１０】
状態遷移１〜６は、状態６００〜６３０間の状態遷移があることを示している。なお、共有状態６１０から非共有状態６００への状態遷移は、（有ってもよいが）無くてもキャッシュのコヒーレンシを制御できるため、書かれていない。非共有状態６００とは、何れのＣＰＵも、そのメモリブロックデータをキャッシュに保持していない状態のことであり、言い換えれば、０個のＣＰＵと共有状態の”共有”となる。このため、非共有状態６００も共有状態の一部と考えられるが、排他状態６３０のリクエストを受けたとき、キャッシュを無効にするＣＰＵが有る場合と、ない場合とがあるので、分けられている。また、共有状態６２０から共有状態６１０への状態遷移がないのは、これも有ってもよいが、無くてもキャッシュのコヒーレンシを制御できるため、書かれていない。共有状態６２０と共有状態６１０とは同じ共有状態であるが、違いは共有しているＣＰＵの数だけである。ここで分けた理由は、「どこのＣＰＵが同じメモリブロックデータを”共有”しているというディレクトリ情報が必要」ということからである。さらに、排他状態６３０から共有状態６２０への状態遷移がないのは、メモリアクセスは、同時に複数のＣＰＵからのアクセスは受けられないので、この状態遷移があり得ないからである。さらにまた、非共有状態６００から非共有状態６２０への状態遷移がないのは、これも同じく、この状態遷移があり得ないからである。また、共有状態６２０から非共有状態６００への状態遷移は、有ってもよいが、無くてもキャッシュのコヒーレンシを制御できるため、書かれていない。
【００１１】
以下、これらの状態遷移を行う際のディレクトリ制御部５１３の動作について説明する（例として挙げるＣＰＵについては、図５中の符号を使用する）。
【００１２】
［状態遷移１のときのディレクトリ制御部５１３の動作］
メモリブロックデータが非共有状態６００のメモリブロックに対するＣＰＵ５００からのメモリリードリクエストがあった場合、メモリコントローラ５１０では、ディレクトリ制御部５１３が、ＣＰＵインタフェース制御部５１１を介して、メモリブロックデータをリクエストＣＰＵ５００にリプライし、対応するメモリブロックのディレクトリ情報をディレクトリ専用メモリ５１にライト（更新）指示する。このとき、ディレクトリ専用メモリ５１４にライトされるディレクトリ情報は、リクエストＣＰＵ５００とメモリブロックデータが共有状態６１０であるというディレクトリ情報になる。
【００１３】
［状態遷移２のときのディレクトリ制御部５１３の動作］
ＣＰＵ５００とメモリブロックデータが共有状態６１０のメモリブロックに対するＣＰＵ５０１からのメモリリードリクエストがあった場合、メモリコントローラ５１０では、ディレクトリ制御部５１３が、ＣＰＵインタフェース制御部５１１を介して、メモリブロックデータをリクエストＣＰＵ５０１へリプライし、対応するメモリブロックのディレクトリ情報をディレクトリ専用メモリ５１４にライト（更新）指示する。このとき、ディレクトリ専用メモリ５１４にライトされるディレクトリ情報は、それまで共有していたＣＰＵ５００および今回のリクエストＣＰＵ５０１とメモリブロックデータが共有状態６２０であるというディレクトリ情報になる。
【００１４】
［状態遷移３のときのディレクトリ制御部５１３の動作］
１個以上のＣＰＵ５００，５０１とメモリブロックデータが共有状態６２０であるメモリブロックに対するＣＰＵ５０２からの排他メモリリードリクエストがあった場合、メモリコントローラ５１０では、ディレクトリ制御部５１３が、ＣＰＵインタフェース制御部５１１を介して、共有状態６２０でメモリブロックデータを共有している全てのＣＰＵ５００，５０１に対してキャッシュの無効（Ｉｎｖａｌｉｄ）をリクエストした後、メモリブロックデータをリクエストＣＰＵ５０２にリプライし、対応するメモリブロックのディレクトリ情報をディレクトリ専用メモリ５１にライト（更新）指示する。このとき、ディレクトリ専用メモリ５１４にライトされるディレクトリ情報は、リクエストＣＰＵ５０２がメモリブロックデータを排他的に保持しているという排他状態６３０のディレクトリ情報になる。
【００１５】
［状態遷移４のときのディレクトリ制御部５１３の動作］
ＣＰＵ５０２がメモリブロックデータを保持する排他状態６３０のメモリブロックに対して、そのＣＰＵ５０２からのメモリライトリクエストがあった場合、メモリコントローラ５１０では、ディレクトリ制御部５１３が、メモリ制御部５１２を介して、該メモリブロックデータをＥＣＣ付きメモリ５２０に書き込み、対応するメモリブロックのディレクトリ情報をディレクトリ専用メモリ５１４にライト（更新）指示する。このとき、ディレクトリ専用メモリ５１４にライトされるディレクトリ情報は、メモリブロックデータが非共有状態６００であるというディレクトリ情報になる。
【００１６】
［状態遷移５のときのディレクトリ制御部５１３の動作］
ＣＰＵ５０２がメモリブロックデータを排他的に使用しているメモリブロックに対して、ＣＰＵ５０３からのメモリリードリクエストがあった場合、メモリコントローラ５１０では、ディレクトリ制御部５１３が、ＣＰＵインタフェース制御部５１１を介して、排他的にメモリブロックデータを保持しているＣＰＵ５０２に対して、更新メモリブロックデータの書き戻し要求を行う。更新メモリブロックデータを受けたメモリコントローラ５１０では、ディレクトリ制御部５１３が、メモリ制御部５１２を介して、該メモリブロックデータをＥＣＣ付きメモリ５２０に書き込むと同時に、ＣＰＵインタフェース制御部５１１を介して、メモリブロックデータをリクエストＣＰＵ５０３にリプライする。また、ディレクトリ制御部５１３は、対応するメモリブロックのディレクトリ情報をディレクトリ専用メモリ５１４にライト（更新）指示する。このとき、ディレクトリ専用メモリ５１４にライトされるディレクトリ情報は、メモリブロックデータがリクエストＣＰＵ５０３と共有状態６１０であるというディレクトリ情報になる。
【００１７】
［状態遷移６のときのディレクトリ制御部５１３の動作］
メモリブロックデータが非共有状態６００のメモリブロックに対するＣＰＵ５００からの排他的なメモリリードリクエストがあった場合、メモリコントローラ５１０では、ディレクトリ制御部５１３が、ＣＰＵインタフェース制御部５１１を介して、メモリブロックデータをリクエストＣＰＵ５００にリプライし、対応するメモリブロックのディレクトリ情報をディレクトリ専用メモリ５１４にライト（更新）指示する。このとき、ディレクトリ専用メモリ５１４にライトされるディレクトリ情報は、リクエストＣＰＵ５００がメモリブロックデータを排他的に保持している排他状態６３０であるというディレクトリ情報になる。
【００１８】
上記のような動作を行うことにより、ＳＭＰ等の複数のＣＰＵでＥＣＣ付きメモリを共有するコンピュータシステムにおけるキャッシュのコヒーレンシを保つことができ、また、ブロードキャスト方式と比べて、ＣＰＵ５００〜５０３とＥＣＣ付きメモリ５２０間のデータ流量を少なくすることができる。
【００１９】
ところで、先行技術を開示する文献として、特許文献１，特許文献２，特許文献３等がある。
【００２０】
特許文献１には、すべての未実行記憶がキャッシュデータユニットで実行されるまでにストアイン型キャッシュのデータユニットの所有権の変更を妨げる所有権のインタロックを提供する所有権変更制御装置が開示されているが、これは、本発明のように、コヒーレンシ用の大規模ディレクトリを設けずに、ＥＣＣのビットを利用して複数のキャッシュの同期を実現するようにしたものではない。
【００２１】
特許文献２には、ＥＣＣ機能を具備した主記憶と同一バスに接続され、主記憶と同様のＥＣＣ機能を備えたキャッシュメモリを持つ主記憶制御装置における、キャッシュビットアクセスの制御高速化を実現可能とする主記憶制御方法が開示されているが、中央処理装置が１台である点，主記憶制御装置にキャッシュがある点等で、本発明とは前提が異なるものである。
【００２２】
特許文献３には、共有メモリ型マルチプロセッサシステムのストアインキャッシュであって、ハードウェアの故障による障害を検出したときのシステム停止の可能性を軽減する障害処理システムが開示されているが、これは、本発明のように、コヒーレンシ用の大規模ディレクトリを設けずに、ＥＣＣのビットを利用して複数のキャッシュの同期を実現するようにしたものではない。
【特許文献１】特開平０５―０８１１２９号公報（第６−７頁、図１）
【特許文献２】特開平０６―３２４９４３号公報（第３−４頁、図１）
【特許文献３】特開平０８―２８６９７７号公報（第２−３頁、図１）
【発明の開示】
【発明が解決しようとする課題】
【００２３】
従来の技術では、メモリコントローラが管理するメモリ容量に比例した量のディレクトリ専用メモリが必要になるため、メモリコントローラのハードウェア量を増加させる要因となっていた。
【００２４】
これに対して、本発明は、高ＳＭＰの高性能コンピュータシステムで使用するメモリコントローラ用のＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅｄ  Ｉｎｔｅｇｒａｔｉｏｎ）の原価を抑えて開発する技術の検討において、想到されたものである。
【００２５】
高ＳＭＰの高性能コンピュータシステムにおいて、ディレクトリ専用メモリ５１４をメモリコントローラ５１０内部に実装する場合、プロセス混在となるために特殊なＬＳＩ扱いとなってしまい、原価が高くなるという問題が存在した。さらに、最大メモリ容量を大きくした場合も、それに相当する大きさのディレクトリ専用メモリ５１４が必要になるため、ＬＳＩのダイ（ｄｉｅ）サイズが大きくなり、原価高となる要因となっていた。
【００２６】
また、ディレクトリ専用メモリ５１４を外付けメモリとすることもできるが、この場合も、部品増およびＬＳＩピン数増による原価増となるため、これら問題を全て解消することのできる本発明が想到された。
【００２７】
本発明の目的は、ディレクトリ専用メモリをメモリコントローラに実装することなく同等の機能を実現するディレクトリ情報記憶システムを提供することにある。
【００２８】
また、本発明の他の目的は、上記ディレクトリ情報記憶システムを実現するディレクトリ専用メモリを実装しないメモリコントローラを提供することにある。
【課題を解決するための手段】
【００２９】
本発明のディレクトリ情報記憶システムは、複数のＣＵＰがメモリコントローラを介してＥＣＣ付きメモリを共有し、各ＣＰＵのキャッシュと前記ＥＣＣ付きメモリのメモリブロックとでのメモリブロックデータの非共有状態，共有状態および排他状態をディレクトリ情報として管理するコンピュータシステムにおいて、前記メモリコントローラが、ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路とを有することを特徴とする。
【００３０】
また、本発明のディレクトリ情報記憶システムは、複数のＣＵＰがメモリコントローラを介してＥＣＣ付きメモリを共有し、各ＣＰＵのキャッシュと前記ＥＣＣ付きメモリのメモリブロックとでのメモリブロックデータの非共有状態，共有状態および排他状態をディレクトリ情報として管理するコンピュータシステムにおいて、前記メモリコントローラが、ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元し、データワード毎のＥＣＣチェックおよびディレクトリ情報のパリティチェックを行い、この結果に従ってメモリブロックデータ中の１データワードにおける１ビット訂正を行うディレクトリ情報復元回路とを有することを特徴とする。
【００３１】
さらに、本発明のディレクトリ情報記憶システムは、複数のＣＵＰがメモリコントローラを介してＥＣＣ付きメモリを共有し、各ＣＰＵのキャッシュと前記ＥＣＣ付きメモリのメモリブロックとでのメモリブロックデータの非共有状態，共有状態および排他状態をディレクトリ情報として管理するコンピュータシステムにおいて、前記メモリコントローラが、前記ＥＣＣ付きメモリを、ＣＰＵのキャッシュラインサイズに等しいメモリブロック単位に管理し、実装され得る全てのメモリブロック毎に、メモリブロックデータがどのＣＰＵのキャッシュにも保持されていない非共有状態を示すディレクトリ情報，メモリブロックデータが１個以上のＣＰＵのキャッシュに保持されている共有状態を示すディレクトリ情報，およびメモリブロックデータが１個のＣＰＵで排他的に使用中で、すでに更新されている可能性がある排他状態を示すディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路とを有することを特徴とする。
【００３２】
さらにまた、本発明のディレクトリ情報記憶システムは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、システムダウンとすることを特徴とする。
【００３３】
また、本発明のディレクトリ情報記憶システムは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該マルチビットエラーとなったデータワードの盛り込み済ＥＣＣをＥＣＣのビット０の１ビットエラーの値とＸＯＲを行い、盛り込み済ＥＣＣからディレクトリ情報を排除した復元後ＥＣＣを生成し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣの１ビットエラーに相当する値であった場合、この復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うとともに、該データワードに対応するディレクトリ情報ビットは１であるとし、その後の動作を継続し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣのマルチビットエラーに相当するコードであった場合、システムダウンとすることを特徴とする。
【００３４】
さらに、本発明のディレクトリ情報記憶システムは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果が、ＥＣＣのビット０以外の１ビットエラーを表すシンドロームであり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、該復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うことを特徴とする。
【００３５】
さらにまた、本発明のディレクトリ情報記憶システムは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、システムダウンとすることを特徴とする。
【００３６】
また、本発明のディレクトリ情報記憶システムは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該データワードの復元後ＥＣＣのビット０を反転させて、再度エラーチェックを行い、その後に継続動作を行うことを特徴とする。
【００３７】
さらに、本発明のディレクトリ情報記憶システムは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のいくつかのデータワードのシンドロームの値がＥＣＣのビット０の１ビットエラーを表す値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、前記ディレクトリ制御部に対してはブロードキャストリクエストを行うとともに、データワードの盛り込み済ＥＣＣをディレクトリ情報データ部から再生成することにより継続動作を行うことが可能であることを特徴とする。
【００３８】
一方、本発明のメモリコントローラは、ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路とを有することを特徴とする。
【００３９】
また、本発明のメモリコントローラは、ディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元し、データワード毎のＥＣＣチェックおよびディレクトリ情報のパリティチェックを行い、この結果に従ってメモリブロックデータ中の１データワードにおける１ビット訂正を行うディレクトリ情報復元回路とを有することを特徴とする。
【００４０】
さらに、本発明のメモリコントローラは、ＥＣＣ付きメモリを、ＣＰＵのキャッシュラインサイズに等しいメモリブロック単位に管理し、実装され得る全てのメモリブロック毎に、メモリブロックデータがどのＣＰＵのキャッシュにも保持されていない非共有状態を示すディレクトリ情報，メモリブロックデータが１個以上のＣＰＵのキャッシュに保持されている共有状態を示すディレクトリ情報，およびメモリブロックデータが１個のＣＰＵで排他的に使用中で、すでに更新されている可能性がある排他状態を示すディレクトリ情報を（メモリブロックデータのデータワード数−１）ビットのディレクトリ情報データ部および１ビットのパリティビットで構成し、各ディレクトリ情報ビットをメモリブロックデータの各データワードに対応させ、このディレクトリ情報を用いて各ＣＰＵのキャッシュのコヒーレンシ制御を行うディレクトリ制御部と、メモリブロックデータのライトリクエストがあったときに、値１のディレクトリ情報ビットに対応するデータワードに付随するＥＣＣの値をＥＣＣのビット０の１ビットエラーを表す値に変更することによりディレクトリ情報をＥＣＣに盛り込み、データワードおよび盛り込み済ＥＣＣのデータワード数分の組をメモリブロックデータとして前記ＥＣＣ付きメモリにライトするディレクトリ情報盛り込み回路と、メモリブロックデータのリードリクエストがあったときに、前記ＥＣＣ付きメモリからリードされたメモリブロックデータ中のデータワードおよび盛り込み済ＥＣＣの各組からシンドロームを生成し、シンドロームがＥＣＣのビット０の１ビットエラーを表す値のときに対応するディレクトリ情報ビットを１としてディレクトリ情報を復元するディレクトリ情報復元回路とを有することを特徴とする。
【００４１】
さらにまた、本発明のメモリコントローラは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、システムダウンとすることを特徴とする。
【００４２】
また、本発明のメモリコントローラは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果がマルチビットエラーを表すシンドロームの値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該マルチビットエラーとなったデータワードの盛り込み済ＥＣＣをＥＣＣのビット０の１ビットエラーの値とＸＯＲを行い、盛り込み済ＥＣＣからディレクトリ情報を排除した復元後ＥＣＣを生成し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣの１ビットエラーに相当する値であった場合、この復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うとともに、該データワードに対応するディレクトリ情報ビットは１であるとし、その後の動作を継続し、復元後ＥＣＣの値がメモリブロックデータまたは復元後ＥＣＣのマルチビットエラーに相当するコードであった場合、システムダウンとすることを特徴とする。
【００４３】
さらに、本発明のメモリコントローラは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのＥＣＣチェック結果が、ＥＣＣのビット０以外の１ビットエラーを表すシンドロームであり、かつ、ディレクトリ情報のパリティチェック結果が正常であった場合、該復元後ＥＣＣおよびデータワードを用いたエラー訂正を行うことを特徴とする。
【００４４】
さらにまた、本発明のメモリコントローラは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、システムダウンとすることを特徴とする。
【００４５】
また、本発明のメモリコントローラは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のあるデータワードのシンドロームの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、該データワードの復元後ＥＣＣのビット０を反転させて、再度エラーチェックを行い、その後に継続動作を行うことを特徴とする。
【００４６】
さらに、本発明のメモリコントローラは、前記ディレクトリ情報復元回路が、メモリブロックデータ中のいくつかのデータワードのシンドロームの値がＥＣＣのビット０の１ビットエラーを表す値であり、かつ、ディレクトリ情報のパリティチェック結果がエラーであった場合、前記ディレクトリ制御部に対してはブロードキャストリクエストを行うとともに、データワードの盛り込み済ＥＣＣをディレクトリ情報データ部から再生成することにより継続動作を行うことが可能であることを特徴とする。
【００４７】
本発明では、ディレクトリ情報を、メモリブロックのメモリブロックデータに付随するＥＣＣの値を”ＥＣＣのビット０の１ビットエラー”に変更することで盛り込み、ディレクトリ専用メモリをメモリコントローラに実装することなく同等の機能を実現することを特徴としている。
【発明の効果】
【００４８】
本発明により、ディレクトリ専用メモリをメモリコントローラ上に実装する必要が無くなるため、メモリコントローラＬＳＩの内部はハードウェア量を削減できる。
【００４９】
また、ＬＳＩ内に特殊なメモリを実装する必要が無く、既存のＥＣＣ付きメモリを利用できるというメリットがある。
【００５０】
さらに、コンピュータシステムにおける最大メモリ容量を大きくした場合、従来技術では、その大きさに比例したサイズのディレクトリ専用メモリが必要であったが、本発明に従うことにより、ＥＣＣ付きメモリの容量に依存することなく、最大メモリ容量を拡張することができる。
【発明を実施するための最良の形態】
【００５１】
以下、本発明の実施例について図面を参照して詳細に説明する。
【実施例１】
【００５２】
（実施例１における前提）
実施例１では、ディレクトリ情報は、ディレクトリ情報データ部と、そのパリティ１ビットとから構成され、それぞれのビットはメモリブロックＭＢｘ（ｘ＝０００〜９９９）内の各データワードに対応できることを前提としている。すなわち、実施例１におけるコンピュータシステムにおいては、（メモリブロックデータのデータワード数−１）ビットの情報で、コンピュータシステムのディレクトリ情報データ部を表現できるということになる。
【００５３】
例えば、メモリブロックデータＤＡＴＡｘが１６ワード（１ワードは８バイト）で、データワードＷｘｙ（ｙ＝０〜１５）単位に１バイトのＥＣＣｅｘｙが付随する場合を考える。ディレクトリ情報は、データワードＷｘｙ毎に１ビットなので、この場合、Ｄｘ（１５−０）という１６ビットのデータとして表せる。これは、あるメモリブロックＭＢｘに対するディレクトリ情報なので、メモリブロックをＭＢ０００〜ＭＢ９９９と表せば、各メモリブロックＭＢｘのディレクトリ情報は、Ｄ０００（１５−０）〜Ｄ９９９（１５−０）と表せる。ディレクトリ情報Ｄｘ（１５−０）は、ディレクトリ情報データ部Ｄｘ（１４−０）と、そのパリティビットＤｘ（１５）とから構成される。ディレクトリ情報データ部Ｄｘ（１４−０）（この例では１５ビット）で、このコンピュータシステムのキャッシュコヒーレンシを保つための情報（非共有／共有／排他）を保持できる。
【００５４】
また、実施例１においては、ディレクトリ情報データ部Ｄｘ（１４−０）に付加するエラー検出符号を１ビットのパリティビットＤｘ（１５）としているため、メモリブロックデータＤＡＴＡｘ内の２個以上のデータワードＷｘｙが同時にデータエラーなった場合、エラーを検出することはできない。そのため、実施例１においては、メモリブロックデータＤＡＴＡｘ内の２個以上のデータワードＷｘｙが同時にエラーとなることは無いと想定している。
【００５５】
また、実施例１において使用するＥＣＣは、１ビットのみのエラー訂正を可能とし、複数ビットエラーに関してはエラー検出のみ可能であるとする。
【００５６】
図１は、本発明の実施例１に係るディレクトリ情報記憶システムの構成を示すブロック図である。
【００５７】
図１を参照すると、メモリコントローラ１１０は、ＥＣＣ付きメモリ１２０と接続されており、また、複数（図示は４台）のＣＰＵ１００〜１０３と接続されている。メモリコントローラ１１０は、全てのＣＰＵ１００〜１０３からのメモリアクセスリクエストを受け付け、ＥＣＣ付きメモリ１２０に対して該アクセス処理を行う機能を有している。
【００５８】
メモリコントローラ１１０は、図５と同様に、内部にＣＰＵインタフェース制御部１１１，メモリ制御部１１２，およびディレクトリ制御部１１３を有しているが、ディレクトリ専用メモリを有しておらず、（その代わりに）ディレクトリ情報盛り込み回路１１４およびディレクトリ情報復元回路１１５を有している。
【００５９】
ディレクトリ制御部１１３は、図５のディレクトリ制御部５１３と同様な制御（図６の状態遷移１〜６のときの動作）を行うが、この中で、ディレクトリ専用メモリにライトしていた部分は、ディレクトリ情報盛り込み回路１１４へのライトとなり、また、ディレクトリ専用メモリからリードしていた部分は、ディレクトリ情報復元回路１１５からのリードとなる。
【００６０】
ディレクトリ情報盛り込み回路１１４は、ディレクトリ情報Ｄｘ（１５−０）に更新があった場合（ディレクトリ制御部１１３からのライトの場合）に、ディレクトリ制御部１１３からディレクトリ情報Ｄｘ（１５−０）を受け取り、該ディレクトリ情報Ｄｘ（１５−０）において１となっている全てのディレクトリ情報ビットＤｘ（ｙ）に対応するデータワードＷｘｙのＥＣＣｅｘｙを、ＥＣＣチェックを行った際に、”ＥＣＣのビット０の１ビットエラー”として検出されるように、盛り込み済ＥＣＣεｘｙに変更し、メモリ制御部１１２に対して該データワードＷｘｙおよび盛り込み済ＥＣＣεｘｙのライト指示を行う。
【００６１】
図２は、ディレクトリ情報盛り込み回路１１４の動作を示す概念図である。
【００６２】
例を用いて説明すると、下記の如く、メモリブロックデータＤＡＴＡｘは、１６ワードのデータワードＷｘ０〜Ｗｘ１５と、各データワードＷｘ０〜Ｗｘ１５のＥＣＣｅｘ０〜ｅｘ１５とからなるものとする（ここでは簡単化のため、各データワードＷｘ０〜Ｗｘ１５の値はオール０とする）。また、このとき、非共有状態６００であり、ディレクトリ情報Ｄｘ（１５‐０）は、００ｈであるものとする。
【００６３】
ＤＡＴＡｘ                       ｅｘｙ      Ｄｘ（ｙ）
Ｗｘ０    ００００００００００００００００  ００      Ｄｘ（０）＝０ｚ
Ｗｘ１    ００００００００００００００００  ００      Ｄｘ（１）＝０ｚ
Ｗｘ２    ００００００００００００００００  ００      Ｄｘ（２）＝０ｚ
Ｗｘ３    ００００００００００００００００  ００      Ｄｘ（３）＝０ｚ
Ｗｘ４    ００００００００００００００００  ００      Ｄｘ（４）＝０ｚ
Ｗｘ５    ００００００００００００００００  ００      Ｄｘ（５）＝０ｚ
Ｗｘ６    ００００００００００００００００  ００      Ｄｘ（６）＝０ｚ
Ｗｘ７    ００００００００００００００００  ００      Ｄｘ（７）＝０ｚ
Ｗｘ８    ００００００００００００００００  ００      Ｄｘ（８）＝０ｚ
Ｗｘ９    ００００００００００００００００  ００      Ｄｘ（９）＝０ｚ
Ｗｘ１０  ００００００００００００００００  ００      Ｄｘ（１０）＝０ｚ
Ｗｘ１１  ００００００００００００００００  ００      Ｄｘ（１１）＝０ｚ
Ｗｘ１２  ００００００００００００００００  ００      Ｄｘ（１２）＝０ｚ
Ｗｘ１３  ００００００００００００００００  ００      Ｄｘ（１３）＝０ｚ
Ｗｘ１４  ００００００００００００００００  ００      Ｄｘ（１４）＝０ｚ
Ｗｘ１５  ００００００００００００００００  ００      Ｄｘ（１５）＝０ｚ
【００６４】
ここで、Ｄｘ（０）はＣＰＵ１００のメモリブロックデータの共有／非共有を表し、ディレクトリ情報ビットＤｘ（１）はＣＰＵ１０１のメモリブロックデータの共有／非共有を表し、ディレクトリ情報ビットＤｘ（２）はＣＰＵ１０２のメモリブロックデータの共有／非共有を表し、ディレクトリ情報ビットＤｘ（３）はＣＰＵ１０３のメモリブロックデータの共有／非共有を表すものとする。また、ディレクトリ情報ビットＤｘ（１３）およびＤｘ（１４）は、００ｚ（ｚは２進数であることを表す）のときにはメモリブロックデータの非共有を、１０ｚのときにはメモリブロックデータの共有を、１１ｚのときにはメモリブロックデータの排他を表すものとする。さらに、ディレクトリ情報ビットＤｘ（１５）は、パリティビット（偶パリティ）であるものとする。
【００６５】
次に、ＣＰＵ１００からメモリブロックデータＤＡＴＡｘのライトリクエストがあると、ディレクトリ制御部１１３は、非共有状態６００から共有状態６１０への状態遷移１が生じるので、ディレクトリ情報Ｄｘ（１５−０）を１００００００００００００１００ｚとし、このディレクトリ情報Ｄｘ（１５−０）のライトをディレクトリ情報盛り込み回路１１４に指示する。
【００６６】
すると、ディレクトリ情報盛り込み回路１１４は、ディレクトリ情報Ｄｘ（１５−０）を、下記のようにＥＣＣｅｘｙへ盛り込む（ディレクトリ情報ビットＤｘ（ｙ）が１であるＥＣＣｅｘｙを、ビット０の１ビットエラーを表す値０１ｈの盛り込み済ＥＣＣεｘｙとする）。
【００６７】
ＤＡＴＡｘ                          εｘｙ          Ｄｘ（ｙ）
Ｗｘ０    ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（０）＝１ｚ
Ｗｘ１    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１）＝０ｚ
Ｗｘ２    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（２）＝０ｚ
Ｗｘ３    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（３）＝０ｚ
Ｗｘ４    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（４）＝０ｚ
Ｗｘ５    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（５）＝０ｚ
Ｗｘ６    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（６）＝０ｚ
Ｗｘ７    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（７）＝０ｚ
Ｗｘ８    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（８）＝０ｚ
Ｗｘ９    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（９）＝０ｚ
Ｗｘ１０  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１０）＝０ｚ
Ｗｘ１１  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１１）＝０ｚ
Ｗｘ１２  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１２）＝０ｚ
Ｗｘ１３  ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１３）＝１ｚ
Ｗｘ１４  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１４）＝０ｚ
Ｗｘ１５  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１５）＝０ｚ
【００６８】
ここで、データワードＷｘ０およびＷｘ１３に対応するＥＣＣｅｘｙが、ディレクトリ情報ビットＤｘ（ｙ）＝１であるので、ビット０の１ビットエラーを表す値０１ｈの盛り込み済ＥＣＣεｘｙに変更されている。
【００６９】
この後、ディレクトリ情報盛り込み回路１１４は、メモリブロックデータＤＡＴＡｘおよび盛り込み済ＥＣＣεｘｙのライトをメモリ制御部１１２に指示する。
【００７０】
さらに、ＣＰＵ１０１からメモリブロックデータＤＡＴＡｘのライトリクエストがあると、ディレクトリ制御部１１３は、共有状態６１０から共有状態６２０への状態遷移２が生じるので、ディレクトリ情報Ｄｘ（１５−０）を１１０００００００００００１０１ｚとし、このディレクトリ情報Ｄｘ（１５−０）のライトをディレクトリ情報盛り込み回路１１４に指示する。なお、ディレクトリ情報ビットＤｘ（１５）＝１となるのは、偶パリティであることによる。
【００７１】
すると、ディレクトリ情報盛り込み回路１１４は、ディレクトリ情報Ｄｘ（１５−０）を、下記のようにＥＣＣｅｘｙへ盛り込む（ディレクトリ情報ビットＤｘ（ｙ）が１であるＥＣＣｅｘｙを、ビット０の１ビットエラーを表す値０１ｈの盛り込み済ＥＣＣεｘｙとする）。
【００７２】
ＤＡＴＡｘ                          εｘｙ        Ｄｘ（ｙ）
Ｗｘ０    ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（０）＝１ｚ
Ｗｘ１    ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１）＝１ｚ
Ｗｘ２    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（２）＝０ｚ
Ｗｘ３    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（３）＝０ｚ
Ｗｘ４    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（４）＝０ｚ
Ｗｘ５    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（５）＝０ｚ
Ｗｘ６    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（６）＝０ｚ
Ｗｘ７    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（７）＝０ｚ
Ｗｘ８    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（８）＝０ｚ
Ｗｘ９    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（９）＝０ｚ
Ｗｘ１０  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１０）＝０ｚ
Ｗｘ１１  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１１）＝０ｚ
Ｗｘ１２  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１２）＝０ｚ
Ｗｘ１３  ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１３）＝１ｚ
Ｗｘ１４  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１４）＝０ｚ
Ｗｘ１５  ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１５）＝１ｚ
【００７３】
ここで、データワードＷｘ０，Ｗｘ２，Ｗｘ１３およびＷｘ１５に対応するＥＣＣｅｘｙが、ディレクトリ情報ビットＤｘ（ｙ）＝１であるので、ビット０の１ビットエラーを表す値０１ｈの盛り込み済ＥＣＣεｘｙに変更されている。
【００７４】
この後、ディレクトリ情報盛り込み回路１１４は、メモリブロックデータＤＡＴＡｘおよび盛り込み済ＥＣＣεｘｙのライトをメモリ制御部１１２に指示する。
【００７５】
さらに続けて、ＣＰＵ１０２からメモリブロックデータＤＡＴＡｘの排他ライトリクエストがあると、ディレクトリ制御部１１３は、共有状態６２０から排他状態６３０への状態遷移３が生じるので、ディレクトリ情報Ｄｘ（１５−０）を００１００００００００００１１１ｚとし、このディレクトリ情報Ｄｘ（１５−０）のライトをディレクトリ情報盛り込み回路１１４に指示する。
【００７６】
すると、ディレクトリ情報盛り込み回路１１４は、ディレクトリ情報Ｄｘ（１５−０）を、下記のようにＥＣＣｅｘｙへ盛り込む（ディレクトリ情報ビットＤｘ（ｙ）が１であるＥＣＣｅｘｙを、ビット０の１ビットエラーを表す値０１ｈの盛り込み済ＥＣＣεｘｙとする）。
【００７７】
ＤＡＴＡｘ                          εｘｙ          Ｄｘ（ｙ）
Ｗｘ０    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（０）＝０ｚ
Ｗｘ１    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１）＝０ｚ
Ｗｘ２    ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（２）＝１ｚ
Ｗｘ３    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（３）＝０ｚ
Ｗｘ４    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（４）＝０ｚ
Ｗｘ５    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（５）＝０ｚ
Ｗｘ６    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（６）＝０ｚ
Ｗｘ７    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（７）＝０ｚ
Ｗｘ８    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（８）＝０ｚ
Ｗｘ９    ００００００００００００００００ｈ  ００ｈ      Ｄｘ（９）＝０ｚ
Ｗｘ１０  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１０）＝０ｚ
Ｗｘ１１  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１１）＝０ｚ
Ｗｘ１２  ００００００００００００００００ｈ  ００ｈ      Ｄｘ（１２）＝０ｚ
Ｗｘ１３  ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１３）＝１ｚ
Ｗｘ１４  ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１４）＝１ｚ
Ｗｘ１５  ００００００００００００００００ｈ  ０１ｈ  ←  Ｄｘ（１５）＝１ｚ
【００７８】
ここで、データワードＷｘ２，Ｗｘ１３，Ｗｘ１４およびＷｘ１５に対応するＥＣＣｅｘｙが、ディレクトリ情報ビットＤｘ（ｙ）＝１であるので、ビット０の１ビットエラーを表す値０１ｈの盛り込み済ＥＣＣεｘｙに変更されている。
【００７９】
この後、ディレクトリ情報盛り込み回路１１４は、メモリブロックデータＤＡＴＡｘおよび盛り込み済ＥＣＣεｘｙのライトをメモリ制御部１１２に指示する。
【００８０】
以下、同様にして、図６に示した状態遷移１〜状態遷移６を自由に行うことができる。
【００８１】
一方、ディレクトリ情報復元回路１１５は、メモリ制御部１１２から読み出したメモリブロックデータＤＡＴＡｘのデータワードＷｘ０〜Ｗｘ１５および盛り込み済ＥＣＣεｘ０〜εｘ１５から、ディレクトリ情報Ｄｘ（１５−０）を抽出する機能を有している。また、データワードＷｘ０〜Ｗｘ１５毎のＥＣＣチェックおよびディレクトリ情報Ｄｘ（１５−０）のパリティチェックを行うエラー検出機能を有し、この結果に従い、メモリブロックデータＤＡＴＡｘ内の１データワードＷｘｙにおける１ビット訂正を行う機能を有している。
【００８２】
まず、ディレクトリ情報復元回路１１５のディレクトリ情報Ｄｘ（１５−０）を抽出する機能について説明する。
【００８３】
ＣＰＵ１００〜１０３のいずれかからのリードリクエストを契機として、ＥＣＣ付きメモリ１２０からメモリ制御部１１２を介してメモリブロックデータＤＡＴＡｘが読み出されると、ディレクトリ情報復元回路１１５は、読み出されたメモリブロックデータＤＡＴＡｘの各データワードＷｘ０〜Ｗｘ１５および対応する盛り込み済ＥＣＣεｘ０〜εｘ１５から、それぞれのデータワードＷｘ０〜Ｗｘ１５のシンドロームＳｘ０〜Ｓｘ１５を生成する。このとき、ディレクトリ情報復元回路１１５は、生成されたシンドロームＳｘ０〜Ｓｘ１５が、”ＥＣＣのビット０の１ビットエラー”のコードであった全てのデータワードＷｘｙに対応するディレクトリ情報ビットＤｘ（ｙ）を１とし、さらにディレクトリ情報ビットＤｘ（１５）を偶パリティのパリティビットとして、ディレクトリ情報Ｄｘ（１５−０）を抽出する。
【００８４】
図３は、ディレクトリ情報復元回路１１５のディレクトリ情報Ｄｘ（１５−０）の抽出動作を示す概念図である。
【００８５】
シンドロームＳｘ０〜Ｓｘ１５は、データワードＷｘ０〜Ｗｘ１５と盛り込み済ＥＣＣεｘ０〜εｘ１５とから生成でき、何処のビットが化けているかを指し示すコードである。基本的に、６４ビットデータ＋８ビットＥＣＣの１ビットエラー検出ができる場合は、シンドロームＳｘ０〜Ｓｘ１５は各８ビットで表され、１ビットエラーを表すシンドロームのコードは７２種類あり、その他のシンドロームのコードは２ビット以上のエラーを示す。また、シンドロームＳｘｙが００ｈであった場合は、データエラーしていないということになる。
【００８６】
シンドロームＳｘｙの値は、０１ｈを使用して問題ない。シンドロームＳｘｙの生成は、対応する盛り込み済ＥＣＣεｘｙと、複数のディレクトリ情報データ部Ｄｘ（１４−０）のビットとのＸＯＲ論理なので、以下のようになる。
【００８７】
Ｓｘｙ（０）＝εｘｙ（０）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（１）＝εｘｙ（１）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（２）＝εｘｙ（２）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（３）＝εｘｙ（３）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（４）＝εｘｙ（４）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（５）＝εｘｙ（５）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（６）＝εｘｙ（６）を含む複数のデータビットのＸＯＲ
Ｓｘｙ（７）＝εｘｙ（７）を含む複数のデータビットのＸＯＲ
【００８８】
盛り込み済ＥＣＣεｘｙのビット０だけが化けた場合、シンドロームＳｘｙのビット０のみが１ｚとなるので、シンドロームＳｘｙは０１ｈとなる。
【００８９】
例えば、盛り込み済ＥＣＣεｘｙのビット０の１ビットエラーを表すシンドロームＳｘｙが０１ｈである場合で、メモリブロックデータＤＡＴＡｘがオール０であったとする。オール０の盛り込み済ＥＣＣεｘｙは本来００ｈであるが、実施例１の場合、ディレクトリ情報ビットＤｘ（ｙ）＝１に対応するデータワードＷｘｙは、ＥＣＣｅｘｙのビット０の１ビットエラーを盛り込んだ盛り込み済ＥＣＣεｘｙとなるので、シンドロームＳｘｙを生成しても０１ｈになる。これを踏まえて、先に例として挙げた排他状態６３０のメモリブロックデータＤＡＴＡｘからディレクトリ情報Ｄｘ（１５−０）の復元を行うと、以下のようになる。
【００９０】
ＤＡＴＡｘ                            εｘｙ  Ｓｘｙ    Ｄｘ（ｙ）
Ｗｘ０    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（０）＝０ｚ
Ｗｘ１    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（１）＝０ｚ
Ｗｘ２    ００００００００００００００００ｈ  ０１ｈ  ０１ｈ→Ｄｘ（２）＝１ｚ
Ｗｘ３    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（３）＝０ｚ
Ｗｘ４    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（４）＝０ｚ
Ｗｘ５    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（５）＝０ｚ
Ｗｘ６    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（６）＝０ｚ
Ｗｘ７    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（７）＝０ｚ
Ｗｘ８    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（８）＝０ｚ
Ｗｘ９    ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（９）＝０ｚ
Ｗｘ１０  ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（１０）＝０ｚ
Ｗｘ１１  ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（１１）＝０ｚ
Ｗｘ１２  ００００００００００００００００ｈ  ００ｈ  ００ｈ  Ｄｘ（１２）＝０ｚ
Ｗｘ１３  ００００００００００００００００ｈ  ０１ｈ  ０１ｈ→Ｄｘ（１３）＝１ｚ
Ｗｘ１４  ００００００００００００００００ｈ  ０１ｈ  ０１ｈ→Ｄｘ（１４）＝１ｚ
Ｗｘ１５  ００００００００００００００００ｈ  ０１ｈ  ０１ｈ→Ｄｘ（１５）＝１ｚ
【００９１】
次に、ディレクトリ情報復元回路１１５におけるエラー訂正機能について説明する。ディレクトリ情報復元回路１１５のエラー訂正機能は、ＥＣＣ付きメモリ１２０からリードされた各データワードＷｘｙ毎のＥＣＣチェック機能，および抽出されたディレクトリ情報Ｄｘ（１５−０）のパリティチェックを行う機能を有している。これらのエラーチェックにおいて、何れかのエラーが検出された場合、図４に示すエラー検出結果のケースに応じて、対応する後述の動作１〜５を行うことにより、メモリブロックデータＤＡＴＡｘの１ビットエラーまでのエラー訂正を行うことができる。
【００９２】
［動作１］
メモリブロックデータＤＡＴＡｘ中のあるデータワードＷｘｙのＥＣＣチェック結果がマルチビットエラーを表すシンドロームＳｘｙの値であり、かつ、ディレクトリ情報Ｄｘ（１５−０）のパリティチェック結果が”正常”であった場合、これは、ディレクトリ情報ビットＤｘ（ｙ）＝１を含む盛り込み済ＥＣＣεｘｙのデータワードＷｘｙはエラーしておらず、シンドロームＳｘｙの値がマルチビットエラーを表すコードとなったデータワードＷｘｙにおいてマルチビットエラーが発生したことを示している。具体的には、シンドロームＳｘｙを生成した結果が、００ｈであった場合は”正常”、１ビットエラーを示すコード以外であった場合は、マルチビットエラーと判断するのが一般的である。
【００９３】
実施例１においては、マルチビットエラーの訂正は不可能であるため、この場合は、システムダウンとする（注：データ訂正不可時の動作は、該コンピュータシステムの障害処理方式に依存する）。
【００９４】
［動作２］
メモリブロックデータＤＡＴＡｘ中のあるデータワードＷｘｙのＥＣＣチェック結果がマルチビットエラーを表すシンドロームＳｘｙの値であり、かつ、ディレクトリ情報Ｄｘ（１５−０）のパリティチェック結果が”エラー”であった場合、これは、該マルチビットエラーを検出したデータワードＷｘｙはディレクトリ情報ビットＤｘ（ｙ）＝１を含む盛り込み済ＥＣＣεｘｙのデータワードＷｘｙであり、このデータワードＷｘｙのデータまたは盛り込み済ＥＣＣεｘｙがエラーとなっているということを示している。この場合、該マルチビットエラーとなったデータワードＷｘｙの盛り込み済ＥＣＣεｘｙを、”ＥＣＣのビット０の１ビットエラー”のコード０１ｈとＸＯＲを行い、盛り込み済ＥＣＣεｘｙからディレクトリ情報Ｄｘ（１５−０）を排除した復元後ＥＣＣｅｘｙを生成する。
【００９５】
実施例１では、盛り込み済ＥＣＣεｘｙのビット０を故意に化かしているので、その他のビットが化けた場合、マルチビットエラーに見えてしまう。この場合、故意に化かした盛り込み済ＥＣＣεｘｙのビット０を反転させれば（盛り込み済ＥＣＣεｘｙを０１ｈでＸＯＲすれば）、復元後ＥＣＣｅｘｙは、化けた１ビットを指し示すシンドロームＳｘｙを生成するコードになる。
【００９６】
ＤＡＴＡｘ                            ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  ００ｈ
↓  Ｄｘ（ｙ）の盛り込み
盛り込み  ＤＡＴＡｘ                          εｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  ０１ｈ
↓  さらに１ビット化け：εｘｙのビット４が化けた場合
復元      ＤＡＴＡｘ                          εｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  １１ｈ
↓  Ｄｘ（ｙ）＝１ｚのＷｘｙが化けていると思われるため、
εｘｙを０１ｈとＸＯＲする
情報排除  ＤＡＴＡｘ                          ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  １０ｈ
↓  ｅｘｙのビット４と認識できるため、修復可能
修復    ＤＡＴＡｘ                            ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  ００ｈ  （元データに戻る）
【００９７】
復元後ＥＣＣｅｘｙの値が、メモリブロックデータＤＡＴＡｘまたは復元後ＥＣＣｅｘｙの１ビットエラーに相当する値であった場合、この復元後ＥＣＣｅｘｙおよびデータワードＷｘｙを用いたエラー訂正を行う。また、該データワードＷｘｙに対応するディレクトリ情報ビットＤｘ（ｙ）は１ｚであるとし、その後の動作を継続する。
【００９８】
復元後ＥＣＣｅｘｙの値が、メモリブロックデータＤＡＴＡｘまたは復元後ＥＣＣｅｘｙのマルチビットエラーに相当するコードであった場合、データ訂正は不可能であるため、この場合は、システムダウンとする（注：データ訂正不可時の動作は、該コンピュータシステムの障害処理方式に依存する）。
【００９９】
［動作３］
メモリブロックデータＤＡＴＡｘ中のあるデータワードＷｘｙのＥＣＣチェック結果が、復元後ＥＣＣｅｘｙのビット０以外の１ビットエラーを表すシンドロームＳｘｙであり、かつ、ディレクトリ情報Ｄｘ（１５−０）のパリティチェック結果が”正常”であった場合、これは、ディレクトリ情報ビットＤｘ（ｙ）＝１を含む復元後ＥＣＣｅｘｙのデータワードＷｘｙはエラーしておらず、シンドロームＳｘｙの値が復元後ＥＣＣｅｘｙのビット０以外の１ビットエラーを表すシンドロームＳｘｙとなったデータワードＷｘｙで、１ビットエラーとなっていることを示す。この場合、該復元後ＥＣＣｅｘｙおよびデータワードＷｘｙを用いたエラー訂正を行う。
【０１００】
ディレクトリ情報Ｄｘ（１５−０）のパリティビットＤｘ（１５）は、ディレクトリ情報ビットＤｘ（ｙ）＝１ｚであるデータワードＷｘｙの個数のパリティなので、この数が正常であった場合は、その他のデータワードＷｘｙ（ディレクトリ情報ビットＤｘ（ｙ）＝０ｚ）が、１ビットエラーとなったことを表す。この場合は、シンドロームＳｘｙを元にそのビットを訂正する。先と同様な例で表すと、以下のようになる。
【０１０１】
ＤＡＴＡｘ                          ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  ００ｈ
↓  Ｄｘ（ｙ）の盛り込みなし
ライト    ＤＡＴＡｘ                          ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  ００ｈ
↓  さらに１ビット化け：ｅｘｙのビット４が化けた場合
リード    ＤＡＴＡｘ                          ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  １０ｈ
↓  Ｄｘ（１５−０）のＤｘ（１５）が合っているので、
ＷｘｙはＤｘ（ｙ）＝１ｚのワードではない
↓  Ｓｘｙからｅｘｙのビット４化けと認識できるため、修復可能
修復      ＤＡＴＡｘ                          ｅｘｙ
Ｗｘｙ  ：００００００００００００００００ｈ  ００ｈ  （元データに戻る）
【０１０２】
［動作４］
メモリブロックデータＤＡＴＡｘ中のあるデータワードＷｘｙのシンドロームＳｘｙの値がＥＣＣのビット０以外の１ビットエラーを表すコードであり、かつ、ディレクトリ情報Ｄｘ（１５−０）のパリティチェック結果が”エラー”であった場合、該データワードＷｘｙはディレクトリ情報ビットＤｘ（ｙ）＝１を含む復元後ＥＣＣｅｘｙのデータワードであり、このデータワードＷｘｙの復元後ＥＣＣｅｘｙのビット０，および，その他のビットがエラーとなっていることを示している。この場合は、マルチビットエラーと同等の扱いとなるので、コンピュータシステムの障害処理方式によっては、システムダウンとすることも考えられる。しかし、継続動作を行う場合は、該データワードＷｘｙの復元後ＥＣＣｅｘｙのビット０を反転させて、再度エラーチェックを行い、その後は前述の動作１〜３に従った動作を行うことにより、継続動作を行うことができる。
【０１０３】
基本的に、想定しているのは、マルチビットエラーが発生した場合はシステムダウンするコンピュータシステムである。動作４は、ＥＣＣのビット０を１ビットエラーとして盛り込んでいたはずが、さらに化けて反転してしまい、正しいＥＣＣとなってしまう。その他の１ビットエラーとなるということは、さらにもう１ビット化けてしまっているということになるので、結果、２ビットエラーが発生していることになる。システム設計を考えると、今後のデータ化け予防の観点では、システムダウンの方が安全と考えられるが、継続動作が重要なコンピュータシステムの場合は、復旧させ、運用可能にする方がよいことになる。本ケースでは、復元後ＥＣＣｅｘｙのビット０が化けていることは明らかであるので、この復元後ＥＣＣｅｘｙのビット０を反転させると、動作１〜３で訂正できるデータとすることができる。
【０１０４】
［動作５］
メモリブロックデータＤＡＴＡｘ中のいくつかのデータワードＷｘｙのシンドロームＳｘｙの値がＥＣＣのビット０の１ビットエラーを表す値であり、かつ、ディレクトリ情報Ｄｘ（１５−０）のパリティチェック結果が”エラー”であった場合、これは、何れかのデータワードＷｘｙにおいて、盛り込み済ＥＣＣεｘｙのビット０の１ビットエラーが発生していることを表している。しかし、どのデータワードＷｘｙがエラーしているのかを特定することができないため、ディレクトリ制御部１１３に対してはブロードキャストリクエストを行う（ディレクトリ制御部１１３で、ブロードキャスト方式によるキャッシュのコヒーレンシ制御を行う）。また、データワードＷｘｙの盛り込み済ＥＣＣεｘｙは、ディレクトリ情報データ部Ｄｘ（１４−０）から再生成を行い、復元することにより継続動作を行うことが可能である。
【０１０５】
実施例１によれば、ディレクトリ専用メモリをメモリコントローラ１１０に実装することなく同等の機能を実現することができる。なお、実施例１では、メモリブロックデータＤＡＴＡｘの数ｘを０００〜９９９に、メモリブロックデータＤＡＴＡｘ中のデータワードＷｘｙの数ｙを１６として説明したが、数ｘおよび数ｙともに他の値であっても、本発明が同様に適用可能であることはいうまでもない。
【実施例２】
【０１０６】
実施例１では、ディレクトリ情報Ｄｘ（１５−０）をＥＣＣに盛り込む方式について述べたが、同様な方式を用いることにより、ディレクトリ情報Ｄｘ（１５−０）以外の情報をＥＣＣに盛り込むことができる。
【０１０７】
純粋にデータを入れることもできる。しかし、ＥＣＣ付きメモリ１２０全体で（ＥＣＣｅｘｙの個数ｙ−メモリブロック数）分のビット情報しか入らないので、実施例１では、実用的なディレクトリ情報Ｄｘ（１５−０）としていた。
【０１０８】
例として、メモリブロック１２８バイト、１ワード＝８バイトにつき１個のＥＣＣの１０２４バイトメモリの場合、ＥＣＣの個数１２８個、メモリブロック数８、従って、ＥＣＣに盛り込めるデータは（１２８ビット−８ビット）＝１２０ビットの情報になる。
【図面の簡単な説明】
【０１０９】
【図１】本発明の実施例１に係るディレクトリ情報記憶システムの構成を示すブロック図である。
【図２】図１中のディレクトリ情報盛り込み回路の動作を表す概念図である。
【図３】図１中のディレクトリ情報復元回路のディレクトリ情報の抽出動作を表す概念図である。
【図４】実施例１に係るディレクトリ情報記憶システムにおける動作表である。
【図５】従来のディレクトリ情報記憶システムの構成を示すブロック図である。
【図６】メモリブロックのディレクトリ情報の状態遷移を示す図である。
【符号の説明】
【０１１０】
１００〜１０３  ＣＰＵ
１１０  メモリコントローラ
１１１  ＣＰＵインタフェース制御部
１１２  メモリ制御部
１１３  ディレクトリ制御部
１１４  ディレクトリ情報盛り込み回路
１１５  ディレクトリ情報復元回路
１２０  ＥＣＣ付きメモリ
【図１】
2005071224.tif 000003
【図２】
2005071224.tif 000004
【図３】
2005071224.tif 000005
【図４】
2005071224.tif 000006
【図５】
2005071224.tif 000007
【図６】
2005071224.tif 000008