(57)【特許請求の範囲】
【請求項１】
１以上のＣＰＵと、前記ＣＰＵとバスを介して接続され、パリティが付加されたデータを記憶するパリティ付きメインメモリとを有するコンピュータシステムにおいて、
キャッシュメモリと、
前記バスと前記メインメモリとの間に設けられ、前記メインメモリを制御するメモリコントローラと、
前記メインメモリに対するリードライトアクセスの単位となる番地それぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内にその記憶領域に対応する前記メインメモリの番地に格納されているデータの一部に生じた誤りを訂正可能な冗長コードを保持する冗長コードメモリと、
前記バスと前記冗長コードメモリとの間に設けられ、前記冗長コードメモリを制御する制御装置であって、前記バス上に発行されるバストランザクションを監視し、前記キュッシュメモリから前記メインメモリへのライトバックが実行されるときに、前記バス上のデータの値からそのデータに対応する冗長コードを生成し、その冗長コードを前記単位データの書き込み番地に対応する前記冗長コードメモリの記憶領域に格納する制御装置と、
前記メインメモリからのデータ読み出し時にその読み出しデータのデータエラーが前記メモリコントローラによるパリティのチェックによって検出された場合、前記読み出しデータと当該読み出しデータに対応する前記冗長コードメモリに格納された冗長コードとから正しいデータを再構成する誤り訂正手段とを具備することを特徴とするコンピュータシステム。
【請求項２】
前記制御手段に接続され、前記メインメモリの更新履歴情報を格納するログメモリをさらに具備し、
前記制御手段は、前記ＣＰＵによる前記メインメモリに対するデータ書き込みが実行される前に、データ書き込みが実行される番地に対応する前記メインメモリの更新前データおよびその更新前データに対応する冗長コードを前記メインメモリおよび前記冗長コードメモリからそれぞれ読み出し、それら更新前データおよび冗長コードを前記更新履歴情報として前記ログメモリに格納する手段を含み、
前記メインメモリの内容を障害発生前の状態に復元することが必要な障害が発生したとき、前記ログメモリに格納されている各更新履歴情報を構成する更新前データおよび冗長コードを前記メインメモリおよび前記冗長コードメモリにそれぞれ書き戻して、前記メインメモリを障害発生前の状態に復元すると共に、前記冗長コードメモリの内容を前記復元されたメインメモリの内容に対応する状態に戻す手段をさらに具備することを特徴とする請求項１記載のコンピュータシステム。
【請求項３】
前記制御手段は、
前記ＣＰＵによる前記キャッシュメモリに対するデータ書き込みが実行されたとき、そのデータ書き込みが実行された番地に対応する前記メインメモリの更新前データと、それに対応する冗長コードを前記メインメモリおよび前記冗長コードメモリからそれぞれ読み出し、それら更新前データおよび冗長コードを前記更新履歴情報として前記ログメモリに格納することを特徴とする請求項２記載のコンピュータシステム。
【請求項４】
１以上のＣＰＵと、前記ＣＰＵとバスを介して接続され、パリティが付加されたデータを記憶するパリティ付きメインメモリとを有するコンピュータシステムであって、チェックポイント毎に障害回復に必要な情報を前記メインメモリに格納し、障害発生時に前記ログメモリに格納されている更新履歴情報を使用して前記メインメモリの内容を前記障害発生前のチェックポイントの時点に復元するコンピュータシステムにおいて、
キャッシュメモリと、
前記バスと前記メインメモリとの間に設けられ、前記メインメモリを制御するメモリコントローラと、
前記メインメモリに対するリードライトアクセスの単位となる番地それぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内にその記憶領域に対応する前記メインメモリの番地に格納されているデータの一部に生じた誤りを訂正可能な冗長符号を保持する冗長コードメモリと、
前記メインメモリの更新履歴情報を格納するログメモリと、
前記バス、前記冗長コードメモリおよび前記ログメモリに接続され、前記冗長コードメモリおよび前記ログメモリを制御する制御装置であって、前記バス上に発行されるバストランザクションを監視し、前記キュッシュメモリから前記メインメモリへのライトバックが実行されるときに、前記バス上のデータの値からそのデータに対応する冗長コードを生成し、その冗長コードを前記単位データの書き込み番地に対応する前記冗長コードメモリの記憶領域に格納する手段と、前記ＣＰＵによる前記キャッシュメモリに対するデータ書き込みが実行されたとき、そのデータ書き込みが実行された番地に対応する前記メインメモリの更新前データと、それに対応する冗長コードを前記メインメモリおよび前記冗長コードメモリからそれぞれ読み出し、それら更新前データおよび冗長コードを前記更新履歴情報として前記ログメモリに格納する手段とを含む制御装置と、
前記メインメモリからのデータ読み出し時にその読み出しデータのデータエラーが前記メモリコントローラによるパリティのチェックによって検出された場合、前記読み出しデータと当該読み出しデータに対応する前記冗長コードメモリに格納された冗長コードとから正しいデータを再構成し、当該再構成されたデータを前記メインメモリに書き込む誤り訂正手段と、
前記メインメモリの内容を障害発生前の状態に復元することが必要な障害が発生したとき、前記ログメモリに格納されている各更新履歴情報を構成する更新前データおよび冗長コードを前記メインメモリおよび前記冗長コードメモリにそれぞれ書き戻して、前記メインメモリを障害発生前の状態に復元すると共に、前記冗長コードメモリの内容を前記復元されたメインメモリの内容に対応する状態に戻す手段とを具備することを特徴とするコンピュータシステム。
【請求項５】
１以上のＣＰＵと、前記ＣＰＵとバスを介して接続され、リードライトアクセスの単位となるデータ列毎にパリティによる誤り検出機能を有するパリティ付きメインメモリとを有するコンピュータシステムにおいて、
キャッシュメモリと、
前記バスと前記メインメモリとの間に設けられ、前記メインメモリを制御するメモリコントローラと、
前記メインメモリの連続アクセスされる複数のデータ列から構成される単位データブロックそれぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内に、その記憶領域に対応する単位データブロックに属する複数のデータ列それぞれの同一ビット位置についての垂直パリティデータを保持する垂直パリティメモリと、
前記バスと前記垂直パリティメモリとの間に設けられ、前記垂直パリティメモリを制御する制御装置であって、前記バス上に発行されるバストランザクションを監視し、前記キュッシュメモリから前記メインメモリに対する単位データブロックのライトバックが実行されるときに、前記バス上の単位データブロックの値からその単位データブロックに対応する前記垂直パリティデータを生成し、その垂直パリティデータを前記単位データブロックに対応する前記垂直パリティメモリの記憶領域に格納する制御装置と、
前記メインメモリからのデータ読み出し時にその読み出しデータのデータエラーが前記メモリコントローラによるパリティのチェックによって検出された場合、そのデータエラーが検出されたデータが属する単位データブロックと、その単位データブロックに対応する前記垂直パリティメモリの垂直パリティデータとから正しい単位データブロックを再構成する手段とを具備することを特徴とするコンピュータシステム。
【請求項６】
１以上のＣＰＵと、１以上のＣＰＵと、前記ＣＰＵとバスを介して接続され、パリティが付加されたデータを記憶するパリティ付きメインメモリと、キャッシュメモリと、前記バスと前記メインメモリとの間に設けられ、前記メインメモリを制御するメモリコントローラと、前記メインメモリに対するリードライトアクセスの単位となる番地それぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内にその記憶領域に対応する前記メインメモリの番地に格納されているデータの一部に生じた誤りを訂正可能な冗長コードを保持する冗長コードメモリと、前記バスと前記冗長コードメモリとの間に設けられ、前記バス上に発行されるバストランザクションを監視し、前記キュッシュメモリから前記メインメモリへのライトバックが実行されるときに、前記バス上のデータの値からそのデータに対応する冗長コードを生成し、その冗長コードを前記単位データの書き込み番地に対応する前記冗長コードメモリの記憶領域に格納する制御装置とを有するコンピュータシステムの障害回復方法であって、
前記メインメモリからのデータ読み出し時にその読み出しデータのデータエラーが前記メモリコントローラによるパリティのチェックによって検出された場合、前記読み出しデータと当該読み出しデータに対応する前記冗長コードメモリに格納された冗長コードとから正しいデータを再構築し、
当該再構築されたデータを前記メインメモリに書き込むことを特徴とする障害回復方法。
【請求項７】
前記制御手段に接続され、前記メインメモリの更新履歴情報を格納するログメモリをさらに具備し、前記制御手段は、前記ＣＰＵによる前記メインメモリに対するデータ書き込みが実行される前に、データ書き込みが実行される番地に対応する前記メインメモリの更新前データおよびその更新前データに対応する冗長コードを前記メインメモリおよび前記冗長コードメモリからそれぞれ読み出し、それら更新前データおよび冗長コードを前記更新履歴情報として前記ログメモリに格納する手段を含み、
前記メインメモリの内容を障害発生前の状態に復元することが必要な障害が発生したとき、前記ログメモリに格納されている各更新履歴情報を構成する更新前データおよび冗長コードを前記メインメモリおよび前記冗長コードメモリにそれぞれ書き戻して、前記メインメモリを障害発生前の状態に復元すると共に、前記冗長コードメモリの内容を前記復元されたメインメモリの内容に対応する状態に戻すことを特徴とする請求項６記載の障害回復方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はコンピュータシステムおよびその障害回復方法に関し、特にメインメモリの固定故障に起因する障害を回復できるように改良されたコンピュータシステムおよびその障害回復方法に関する。
【０００２】
【従来の技術】
一般に、コンピュータシステムにおいては、メモリ故障に対する信頼性を高めるために、パリティ付きのメモリが採用されている。パリティ付きメモリを有するメモリサブシステムでは、データ読み出し時にそのデータのチェックサムが算出され、そのチェックサムとパリティビットとの比較によってメモリエラーの検出が行われる。これにより、誤ったメモリデータの使用を未然に防止することができる。
【０００３】
ところが、パリティだけでは、メモリデータのどのビットに誤りがあるかを特定することはできないので、エラー訂正を行うことはできない。
これに対し、ＳＥＣ−ＤＥＤ符号などの冗長コードを用いたメモリサブシステムを用いた場合には、１ビットの誤り訂正と、２ビットの誤り検出が可能となる。すなわち、恒久的にデータが１ビット誤っても、これを自動的に訂正して処理を継続できる。したがって、高信頼性が必要とされるコンピュータシステムでは、パリティ付きメモリよりも、ＳＥＣ−ＤＥＤ符号などの冗長コードを用いたメモリサブシステムを採用することが望ましい。
【０００４】
しかし、パリティ付きメモリを採用した既存のコンピュータシステムにＳＥＣ−ＤＥＤ符号などの冗長コードを用いたメモリサブシステムを導入する場合には、既存のパリティ付きメモリをそのまま使用することはできないので、大容量のメインメモリをＳＥＣ−ＤＥＤ符号に対応するように新たに再構築することが必要とされる。したがって、その導入のためには多くの費用が必要となる。
【０００５】
一方、フォールトトレラントコンピュータシステムでは、メモリの２重化によってすべてのメモリ故障をマスクする構成が採用されている。このメモリ２重化構成によれば、常に同一のデータが２つのメモリに保持されているため、データ誤りが検出された場合には、もう一方のメモリのデータを用いることにより処理を継続することができる。
【０００６】
しかし、メモリを二重化する必要があるためにハード量が非常に多くなる、誤りを検出した場合のアクセスメモリ切り替えなどに特殊な構造が必要となる、などの欠点もある。
【０００７】
そこで、最近では、メモリを２重化することなく、一般的な故障からの回復を付加ハードで実現するための方式として、メインメモリの更新履歴情報を格納するためのログメモリを使用したチェックポイントリスタート方式が提案されている。このチェックポイントリスタート方式では、プロセスの再実行に必要な情報がチェックポイント毎にメインメモリに保存され、またあるチェックポイントから次のチェックポイントまでの期間において、プロセス実行に伴ってメインメモリが更新される度にその更新前データなどが前述の更新履歴情報としてログメモリに採取される。コンピュータシステムに障害が発生したとき、ログメモリの内容を使用することによってメインメモリを障害発生前のチェックポイントの時点に復元することができる。従って、ログメモリを使用したチェックポイントリスタート方式を採用することにより、２重化メモリを用いることなく、少ないハードウェアでメモリの内容を復元することができる。
【０００８】
ところが、この方式では、メモリの内容が恒久的に書き変わってしまったような障害が発生した場合、たとえその検出ができても回復できない場合が存在する。すなわち、直前のチェックポイント以前にメモリデータの値が書き変わっている場合には、故障が検出されたときに直前のチェックポイントに戻って処理を再開しても、再び誤ったメモリデータが読まれることになるため、回復することができなくなる。
【０００９】
【発明が解決しようとする課題】
上述したように、パリティ付きメモリを採用した既存のコンピュータシステムにＳＥＣ−ＤＥＤ符号などの冗長コードを用いたメモリサブシステムを導入する場合には、既存のパリティ付きメモリをそのまま使用することはできないので、大容量のメインメモリをＳＥＣ−ＤＥＤ符号に対応するように新たに再構築することが必要とされ、その導入のためには多くの費用が必要となる欠点がある。
【００１０】
また、メモリを２重化することなく、一般的な故障からの回復を付加ハードで実現するための方式として、メインメモリの更新履歴情報を格納するためのログメモリを使用したチェックポイントリスタート方式があるが、この方式では、恒久的にデータが書き変わるようなメモリ故障に対応することができない場合があるという問題がある。
【００１１】
この発明はこのような点に鑑みなされたもので、既存のパリティ付きメモリなどの資源をそのまま使用した状態で誤り訂正機能を持つメモリサブシステムを付加ハードによって構築できるようにし、メモリ故障に対する信頼性の高いコンピュータシステムを提供することを目的とする。
【００１２】
また、この発明は、ログメモリを使用したチェックポイントリスタート方式では回復できないようなメモリ故障が発生した際にも処理を継続できるようにし、メモリを２重化することなく、少ないハードウェアで十分な耐故障性能を実現できるコンピュータシステムおよび障害回復方法を提供することを目的とする。
【００１３】
【課題を解決するための手段】
この発明は、１以上のＣＰＵと、前記ＣＰＵとバスを介して接続され、パリティが付加されたデータを記憶するパリティ付きメインメモリと有するコンピュータシステムにおいて、キャッシュメモリと、前記バスと前記メインメモリとの間に設けられ、前記メインメモリを制御するメモリコントローラと、前記メインメモリに対するリードライトアクセスの単位となる番地それぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内にその記憶領域に対応する前記メインメモリの番地に格納されているデータの一部に生じた誤りを訂正可能な冗長コードを保持する冗長コードメモリと、前記バスと前記冗長コードメモリとの間に設けられ、前記冗長コードメモリを制御する制御装置であって、前記バス上に発行されるバストランザクションを監視し、前記キュッシュメモリから前記メインメモリへのライトバックが実行されるときに、前記バス上のデータの値からそのデータに対応する冗長コードを生成し、その冗長コードを前記単位データの書き込み番地に対応する前記冗長コードメモリの記憶領域に格納する制御装置と、前記メインメモリからのデータ読み出し時にその読み出しデータのデータエラーが前記メモリコントローラによるパリティのチェックによって検出された場合、前記読み出しデータと当該読み出しデータに対応する前記冗長コードメモリに格納された冗長コードとから正しいデータを再構成する誤り訂正手段とを具備することを特徴とする。
【００１４】
このコンピュータシステムにおいては、冗長コードメモリとその制御のための制御装置とが設けられており、バス上に発行されるバストランザクションの監視によってキュッシュメモリからメインメモリへのライトバックが実行されることが検出されると、バス上のデータの値からそのデータに対応する冗長コードが制御装置内で自動的に生成され、それが冗長コードメモリの該当する記憶領域に格納される。またメインメモリからのデータ読み出し時にその読み出しデータのデータエラーがメモリコントローラによるパリティのチェックによって検出された場合には、読み出しデータと当該読み出しデータに対応する冗長コードとから正しいデータが再構成される。このように、メインメモリのデータに誤りが検出されたとき、そのデータと、これに対応する冗長コードとから正しいデータを再構成できるため、前述の冗長コードメモリと制御装置とを付加ハードとして設けるだけで誤り訂正機能を持つメモリサブシステムを構築できるようになり、メモリ故障に対する信頼性の高いコンピュータシステムを実現できる。
【００１５】
また、前記制御手段に接続され、前記メインメモリの更新履歴情報を格納するログメモリをさらに具備し、前記制御手段は、前記ＣＰＵによる前記メインメモリに対するデータ書き込みが実行される前に、データ書き込みが実行される番地に対応する前記メインメモリの更新前データおよびその更新前データに対応する冗長コードを前記メインメモリおよび前記冗長コードメモリからそれぞれ読み出し、それら更新前データおよび冗長コードを前記更新履歴情報として前記ログメモリに格納し、前記メインメモリの内容を障害発生前の状態に復元することが必要な障害が発生したとき、前記ログメモリに格納されている各更新履歴情報を構成する更新前データおよび冗長コードを前記メインメモリおよび前記冗長コードメモリにそれぞれ書き戻して、前記メインメモリを障害発生前の状態に復元すると共に、前記冗長コードメモリの内容を前記復元されたメインメモリの内容に対応する状態に戻すように構成することが好ましい。
【００１６】
この構成により、ログメモリの内容を使用してメインメモリの内容を故障発生前の状態に復元できると共に、メモリ故障発生時にも、冗長コードを使用することにより正しいデータを再構成することができる。この場合、冗長コードを使用して正しいデータを再構成した後に障害発生前のチェックポイントから処理を再開することで、チェックポイントリスタート方式だけでは回復できないようなメモリ故障が発生した場合であっても、処理を継続できるようになる。
【００１７】
また、更新前データだけでなく、その更新前データに対応する冗長コードも一緒にログメモリに格納することにより、メインメモリの内容を障害発生前の状態に復元することが必要な障害が発生したときは、ログメモリに格納されている各更新履歴情報を構成する更新前データおよび冗長コードをメインメモリおよび冗長コードメモリにそれぞれ書き戻すことで、メインメモリを障害発生前の状態に復元でき、且つ冗長コードメモリの内容についても復元されたメインメモリの内容に対応する状態に戻すことが可能となる。
【００１８】
また、ログメモリに対する更新前データを含む更新履歴情報の格納はメインメモリに対するデータ書き込みが実行される前に行う必要があるが、キャッシュメモリを有するシステムにおいては、ＣＰＵによるキャッシュメモリに対するデータ書き込みが実行されたとき、そのデータ書き込みが実行された番地に対応するメインメモリの更新前データと、それに対応する冗長コードをメインメモリおよび冗長コードメモリからそれぞれ読み出して、それら更新前データおよび冗長コードを更新履歴情報としてログメモリに格納することによって、メインメモリに対するデータ書き込みが実行される前に更新履歴情報の格納を容易に行うことができる。
【００１９】
また、前述の冗長コードメモリの代わりに、メインメモリの連続アクセスされる複数のデータ列から構成される単位データブロックそれぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内に、その記憶領域に対応する単位データブロックに属する複数のデータ列それぞれの同一ビット位置についての垂直パリティデータを保持する垂直パリティメモリを使用することにより、パリティ処理という簡単な処理により、メモリ故障発生時にも正しいブロックデータを再現することが可能となる。
【００２０】
さらに、垂直パリティメモリに代えて、メインメモリ上の複数のデータ列を各々が有する複数の単位データブロックを１組とする複数のデータブロックグループそれぞれに対応して設けられた複数の記憶領域を有し、各記憶領域内に、その記憶領域に対応するデータブロックグループに属する複数の単位データブロックそれぞれの同一ビット位置についての垂直パリティデータから構成されるブロックパリティデータを保持するブロックパリティメモリを採用することにより、メモリモジュール単位などの広範囲にわたるメモリ故障発生時にも正しいブロックデータを再現することが可能となる。
【００２１】
【発明の実施の形態】
以下、図面を参照してこの発明の実施形態を説明する。
図１には、この発明の第１実施形態に係るコンピュータシステムの構成が概念的に示されている。このコンピュータシステムは、チェックポイント毎に障害回復に必要な情報をメインメモリに格納し、障害発生時にはログメモリに格納されているメインメモリの更新履歴情報を使用してメインメモリの内容を障害発生前のチェックポイントの時点に復元するという障害回復方式を採用したマルチプロセッサシステムであり、図示のように、プロセッサバス１０、ＣＰＵ１１−１〜１１−ｎ、キャッシュメモリ１２−１〜１２−ｎ、メインメモリ１４、冗長コードメモリ（ＣＭ）１６、およびビフォアイメージバッファ（ＢＩＢ）１７を備えている。
【００２２】
キャッシュメモリ１２−１〜１２−ｎは、メインメモリ１４を共有するＣＰＵ１１−１〜１１−ｎそれぞれの１次キャッシュまたは２次キャッシュとして使用されるものであり、チェックポイント取得時には、キャッシュメモリ１２−１〜１２−ｎの各々について、メインメモリ１４に未反映のデータがメインメモリ１４に書き込まれる。
【００２３】
メインメモリ１４は、パリティ付きメモリなどのようにエラー検出機能を有するメモリであり、ＣＰＵによる１回のメモリアクセスでリードライトされるデータ単位であるワード単位でそのワードのデータ列に対してパリティビットが付加される。
【００２４】
冗長コードメモリ（ＣＭ）１６は、エラー検出機能を有するメインメモリ１４に対してエラー訂正機能を付加するために設けられたものであり、メインメモリ１４のワード数分のエントリを有している。各エントリには、メインメモリ１４の対応するワードの誤り訂正冗長コードが格納される。例えば、メインメモリ１４のワードＮについての誤り訂正冗長コードは、冗長コードメモリ１６の第Ｎエントリに格納される。
【００２５】
冗長コードメモリ（ＣＭ）１６に対する誤り訂正冗長コードの書き込みは、バス１０上にメインメモリ１４にデータを書き込むためのバストランザクションが発行されたとき、そのバストランザクションに応答して実行される。この場合、バス１０上に出力されるデータから誤り訂正冗長コードが生成され、またバス１０上に出力されるメモリアドレスから誤り訂正冗長コードを書き込むべき冗長コードメモリ（ＣＭ）１６のエントリ位置が決定される。
【００２６】
ビフォアイメージバッファ（ＢＩＢ）１７は、あるチェックポイントから次のチェックポイントまでの期間におけるメインメモリ１４の更新履歴情報を保持するためのログメモリとして使用されるものであり、メインメモリ１４に対するデータ書き込みが行われる度、そのデータ書き込みに先立って、メインメモリ１４のデータ書き込み番地を示すアドレスと、更新前データと、その更新前データに対応する冗長コードメモリ１６の誤り訂正冗長コードとが、更新履歴情報としてビフォアイメージバッファ（ＢＩＢ）１７にスタック形式で蓄積される。誤り訂正冗長コードを、アドレスおよび更新前データと一緒に格納するのは、ビフォアイメージバッファ（ＢＩＢ）１７の更新履歴情報を使用してメインメモリ１４の内容を復元するときに、それに合わせて冗長コードメモリ（ＣＭ）１６の内容も一緒に復元できるようにするためである。
【００２７】
メインメモリ１４がパリティによる１ビット誤り検出能力しか持たない場合には、冗長コードメモリ１６に格納する誤り訂正冗長コードとしては１ビット誤り訂正符号を用いることができる。
【００２８】
次に、図２乃至図４を参照して、図１のシステムにおけるデータの流れを具体的に説明する。
まず、図２を参照して、冗長コードメモリ（ＣＭ）１６に対する誤り訂正冗長コードの書き込み動作について具体的に説明する。
【００２９】
図２に示されているように、バス１０とメインメモリ１４との間にはメインメモリコントローラ（ＭＭコントローラ）１３が設けられており、メインメモリ１４のリードライト制御はそのメインメモリコントローラ（ＭＭコントローラ）１３によって実行される。また、冗長コードメモリ（ＣＭ）１６とビフォアイメージバッファ（ＢＩＢ）１７それぞれとバス１０との間にはＢＩＢ／ＣＭコントローラ１５が共通に設けられており、それら冗長コードメモリ（ＣＭ）１６とビフォアイメージバッファ（ＢＩＢ）１７それぞれのリードライト制御はそのＢＩＢ／ＣＭコントローラ１５によって実行される。
【００３０】
以下、ＣＰＵ１１−１からのデータをメインメモリ１４のアドレスＮに書き込む場合に行われる動作について説明する。
バス１０上のトランザクション、つまりバス１０上の各種コマンドやアドレスおよびデータはＢＩＢ／ＣＭコントローラ１５によって監視されており、ＣＰＵ１１−１からメインメモリ１４にデータを書き込むためのトランザクションがバス１０上に発行されると、その時のメモリアドレス（Ｎ）とデータ（Ｄｏｌｄ１）がＢＩＢ／ＣＭコントローラ１５によって取得される。このバストランザクションは、実際には、キャッシュメモリ１２−１からメインメモリ１４にデータをライトバックするときに行われる。
【００３１】
一方、ＭＭコントローラ１３は、メインメモリ１４にデータを書き込むためのトランザクションに応答して、アドレス（Ｎ）で指定されるワードＮの番地にデータ（Ｄｏｌｄ１）を書き込む。この場合、データ（Ｄｏｌｄ１）の値からそれに対応するエラー検出ビット（Ｐ）がＭＭコントローラ１３内部で生成され、データ（Ｄｏｌｄ１）はエラー検出ビット（Ｐ）が付加された状態でメインメモリ１４に書き込まれる。
【００３２】
ＢＩＢ／ＣＭコントローラ１５においては、データ（Ｄｏｌｄ１）の値からそれの一部に生じた誤りを訂正することが可能な冗長コード（Ｃｏｌｄ１）がＥＣＣ演算などによって生成され、その冗長コード（Ｃｏｌｄ１）がアドレス（Ｎ）に対応する冗長コードメモリ（ＣＭ）１６のエントリ（Ｎ）に書き込まれる。
【００３３】
前述したように、冗長コードメモリ（ＣＭ）１６はメインメモリ１４のワード数と同数のエントリを有しており、メインメモリ１４の各ワードと冗長コードメモリ（ＣＭ）１６のエントリとは１対１で対応している。したがって、メインメモリ１４のワードＮからのデータ（Ｄｏｌｄ１）の読み出し時に、そのデータエラーがＭＭコントローラ１３によって検出された場合には、エラー処理用ソフトウェアなどが、冗長コードメモリ（ＣＭ）１６のエントリ（Ｎ）の冗長コード（Ｃｏｌｄ１）とエラー検出されたデータとから正しいデータを再構成することにより、メインメモリ１４のワードＮのデータ（Ｄｏｌｄ１）を修復することができる。
【００３４】
次に、図３を参照して、ビフォアイメージバッファ（ＢＩＢ）１７に対する更新履歴情報の書き込み動作について説明する。
ここでは、ＣＰＵ１１−１が、メインメモリ１４のアドレス（Ｎ）で指定されるワードＮの番地に書き込まれているデータをＤｏｌｄ１からＤｎｅｗ１に更新する場合を例にとって説明する。
【００３５】
この場合、Ｄｎｅｗ１がキャッシュメモリ１２−１に書き込まれた時、ＢＩＢ／ＣＭコントローラ１５によって、データ（Ｄｏｌｄ１）とそれに対応する冗長コード（Ｃｏｌｄ１）がそれぞれメインメモリ１４および冗長コードメモリ１６から読み出される。そして、アドレス（Ｎ）、更新前データ（Ｄｏｌｄ１）、冗長コード（Ｃｏｌｄ１）から構成される更新履歴情報が、ビフォアイメージバッファ（ＢＩＢ）１７に格納される。
【００３６】
次に、図４を参照して、ビフォアイメージバッファ（ＢＩＢ）１７に蓄積されている更新履歴情報を使用してメインメモリ１４の内容を復元する動作について説明する。
【００３７】
メインメモリ１４の内容を障害発生前の状態に復元することが必要な障害が発生したとき、エラー処理用ソフトウェアなどの制御の下、ビフォアイメージバッファ（ＢＩＢ）１７から更新履歴情報が逐次読み出され、更新前データおよび冗長コードをそれぞれメインメモリ１４および冗長コードメモリ１６の該当する格納位置に書き戻す処理が行われる。
【００３８】
例えば、ビフォアイメージバッファ（ＢＩＢ）１７に図示のような４つの更新履歴情報が蓄積されている場合には、まず、４つ目の更新履歴情報（アドレスＮ、更新前データＤｄ、冗長コードＣｄ）の書き戻し処理が行われ、メインメモリ１４のアドレスＮに更新前データＤｄが書き込まれると共に、冗長コードメモリ１６のエントリＮに冗長コードＣｄが書き込まれる。次に、３つ目の更新履歴情報（アドレス２、更新前データＤｃ、冗長コードＣｃ）の書き戻し処理が行われ、メインメモリ１４のアドレス２に更新前データＤｃが書き込まれると共に、冗長コードメモリ１６のエントリ２に冗長コードＣｃが書き込まれる。以下、同様にして、２つ目の更新履歴情報および１つ目の更新履歴情報の書き戻し処理が順次実行される。
【００３９】
このようにして、メインメモリ１４を障害発生前の状態に復元でき、且つ冗長コードメモリ１６の内容についても復元されたメインメモリ１４の内容に対応する状態に戻される。
【００４０】
以上、ワード単位のメモリアクセスの場合について説明したが、メインメモリ１４に対するアクセスがキャッシュブロック単位で行われる場合についても、同様にして誤り訂正冗長コードの書き込みおよび更新履歴情報の書き込みなどを行うことができる。すなわち、キャッシュブロックがｎワードから構成されているとすると、１回のアクセスに対して前述の処理をｎ回繰り返し実行すればよい。
【００４１】
次に、図５を参照して、ＢＩＢ／ＣＭコントローラ１５の具体的なハードウェア構成について説明する。
ＢＩＢ／ＣＭコントローラ１５は、図示のように、バスインターフェース制御部１０１、バストランザクション応答制御部１０２、バストランザクション発行制御部１０３、バッファアクセスコントローラ１０４、状態保存制御部１０５、およびコードメモリコントローラ１０６から構成されている。
【００４２】
バスインターフェース制御部１０１はバス１０上に定義された各種信号ラインに接続され、そのバス１０との間でアドレス、データ、および各種ステータスを授受する。このバス１０上には、図示のように、バス１０上のデータ転送のために使用されるアドレス／データバス（ａｄｄｒｅｓ／ｄａｔａ）、およびコマンドライン（ｃｏｍｍａｎｄ）を始め、キャッシュ制御のためのステータスライン（ｓｈａｒｅｄ，ｍｏｄｉｆｉｅｄ）などが定義されている。ｓｈａｒｅｄラインは、メモリリードトランザクションで要求されたメモりデータのコピーをクリーンな状態で共有しているステータス（ｓｈａｒｅｄ  ｃｌｅａｎ）を示す。ｍｏｄｉｆｉｅｄラインは、メモリリードトランザクションで要求されたメモりデータのコピーを変更した状態で共有しているステータス（ｍｏｄｉｆｉｅｄ）を示す。
【００４３】
バス１０上のこれら各種信号ラインの状態をバスインターフェース制御部１０１を通じてモニタすることによって、キャッシュステータスおよびバストランザクションのスヌープがＢＩＢ／ＣＭコントローラ１５によって行われる。
【００４４】
バストランザクション応答制御部１０２は、バスインターフェース制御部１０１を介して受け取った所定のバストランザクションに応答して動作するものであり、例えば、障害発生時には、ある任意のＣＰＵによってバス１０上に発行されるワードライトトランザクションに応答してそのトランザクションをアボートするなどの処理を行う。
【００４５】
バストランザクション発行制御部１０２は、バス１０上にメモリリード／ライトなどのトランザクションを発行するものであり、例えば、バスインターフェース制御部１０１を介して受け取ったバス１０上の信号ラインの状態からキャッシュメモリへの書き込みが行われたことが検出されたときは、メインメモリ１４から更新前データをリードするためのトランザクションを開始する。
【００４６】
状態保存制御部１０５は、ビフォアイメージバッファ（ＢＩＢ）１７に更新履歴情報を保存する位置を指定するポインタ値の制御などを行うものであり、ビフォアイメージバッファ（ＢＩＢ）１７に更新履歴情報を格納する度に、ポインタ値を＋１更新する。また、ビフォアイメージバッファ（ＢＩＢ）１７の更新履歴情報を用いてメインメモリ１４を復旧する場合には、状態保存制御部１０５は、更新履歴情報の読み出しの度にポインタ値を現在の値から−１ずつ更新するなどの制御を行う。
【００４７】
バッファアクセスコントローラ１０４は、ビフォアイメージバッファ（ＢＩＢ）１７との間に設けられたアドレスライン（ＢＩＢ  ａｄｄｒｅｓｓ）、データライン（ＢＩＢ  ｄａｔａ）、リードライト制御ライン（ＢＩＢ  ＲＡＳ＃、ＣＡＳ＃、ＷＥ＃）を使用してビフォアイメージバッファ（ＢＩＢ）１７に対するデータ書き込みおよび読み出しを制御する。
【００４８】
コードメモリコントローラ１０６は、冗長コードメモリ（ＣＭ）１６との間に設けられたアドレスライン（ＣＭ  ａｄｄｒｅｓｓ）、データライン（ＣＭ  ｄａｔａ）、リードライト制御ライン（ＣＭ  ＲＡＳ＃、ＣＡＳ＃、ＷＥ＃）を使用して冗長コードメモリ（ＣＭ）１６に対するデータ書き込みおよび読み出しを制御する。書き込み処理においては、コードメモリコントローラ１０６は、バスインターフェース制御部１０１を介して受け取ったバス１０上のデータから冗長コードを演算によって生成し、それを冗長コードメモリ（ＣＭ）１６に書き込む。
【００４９】
次に、図６乃至図９を参照して、図５のシステムの具体的な動作について説明する。
図６のタイミングチャートには、任意のキャッシュメモリからメインメモリ１４にデータをライトバックするときに実行される一連の動作が示されている。
【００５０】
キャッシュメモリからメインメモリ１４にデータをライトバックするときは、そのキャッシュメモリあるいはそれに対応するＣＰＵによって、コマンドライン（ＣＯＭＭＡＮＤ）上にキャッシュラインの書き戻しを示すコマンド（ｗｒｉｔｅ−ｌｉｎｅ）が発行され、またアドレスバス（ａｄｄｒｅｓ  ｂｕｓ）にはメモリアドレス（Ａ）、データバス（ｄａｔａ  ｂｕｓ）にはライトデータ（Ｄｎｅｗ）が出力される。キャッシュブロックが４ワードから構成される場合には、バースト転送が行われ、データＤｎｅｗ１〜Ｄｎｅｗ４が連続的にデータバス（ｄａｔａ  ｂｕｓ）上に出力される。
【００５１】
このバストランザクションに応答して、メインメモリコントローラ１３およびＢＩＢ／ＣＭコントローラ１５が動作する。
メインメモリコントローラ１３は、メインメモリ１４との間に設けられたアドレスライン（ＭＭ  ａｄｄｒｅｓｓ）、データライン（ＭＭ  ｄａｔａ）、リードライト制御ライン（ＭＭ  ＲＡＳ＃、ＣＡＳ＃、ＷＥ＃）を制御して、メインメモリ１４のアドレス（Ａ）から始まる連続する４つの番地にデータ（Ｄｎｅｗ１〜Ｄｎｅｗ４）を書き込む。
【００５２】
一方、ＢＩＢ／ＣＭコントローラ１５においては、コードメモリコントローラ１０６が動作し、まず、バス１０上のデータ（Ｄｎｅｗ１〜Ｄｎｅｗ４）からそれに対応する冗長コード（Ｃｎｅｗ１〜Ｃｎｅｗ４）が演算によって生成される。そして、その冗長コード（Ｃｎｅｗ１〜Ｃｎｅｗ４）がデータライン（ＣＭ  ｄａｔａ）上に出力されると共に、バス１０から受け取ったアドレス（Ａ）から生成されたロウアドレス（Ａｒ）およびカラムアドレス（Ａｃ１〜Ａｃ４）がアドレスライン（ＣＭ  ａｄｄｒｅｓｓ）に出力されて、アドレス（Ａ）に対応する冗長コードメモリ１６のエントリに冗長コード（Ｃｎｅｗ１〜Ｃｎｅｗ４）が書き込まれる。
【００５３】
このように、冗長コードメモリ１６に対する冗長コードの書き込みは、キャッシュメモリからメインメモリ１４にデータをライトバックするときに、そのライトバック処理と並行して、コードメモリコントローラ１０６によって自動的に実行される。
【００５４】
図７には、任意のＣＰＵがそれに対応するキャッシュメモリ中のｓｈａｒｅｄキャッシュラインに対する書き込みを行う場合に実行される一連の処理手順が示されている。
【００５５】
ｓｈａｒｅｄキャッシュラインに対する書き込みが行われると、共有データが変更されることをほかのキャッシュメモリに通知するために、バス１０上のコマンドライン（ｃｏｍｍａｎｄ）上にはインバリデートコマンド（ｉｎｖａｌｉｄａｔｅ）が、アドレスバス（ａｄｄｒｅｓｓ  ｂｕｓ）上には共有データのアドレス（Ａ）がそれぞれ発行されて、インバリデートプロトコルが実行される。このインバリデートプロトコルでは、他のキャッシュメモリが共有データのコピーを無効化するまで、ｓｈａｒｅｄキャッシュラインに対する書き込みは待たされる。
【００５６】
ＢＩＢ／ＣＭコントローラ１５のバストランザクション発行制御部１０３は、インバリデートコマンドを確認すると、その時のアドレス（Ａ）を使用して、メインメモリ１４からアドレス（Ａ）の更新前データ（Ｄ１〜Ｄ４）を読み出すためのメモリリードトランザクションを開始する。このとき、バス１０上のコマンドライン（ｃｏｍｍａｎｄ）上に発行されるコマンドはリードノンスヌープであり、各キャッシュメモリはそのリードサイクルに対してはスヌープ動作を行わない。
【００５７】
メインメモリコントローラ１３は、メモリリードトランザクションに応答して、アドレスライン（ＭＭ  ａｄｄｒｅｓｓ）、データライン（ＭＭ  ｄａｔａ）、リードライト制御ライン（ＭＭ  ＲＡＳ＃、ＣＡＳ＃、ＷＥ＃）を制御して、メインメモリ１４のアドレス（Ａ）からデータ（Ｄ１〜Ｄ４）を読み出し、それをバス１０のデータバス（ｄａｔａ  ｂｕｓ）上に出力する。
【００５８】
一方、ＢＩＢ／ＣＭコントローラ１５においては、バッファアクセスコントローラ１０４およびコードメモリコントローラ１０６にもアドレス（Ａ）が渡される。コードメモリコントローラ１０６は、アドレスバス（ＣＭ  ａｄｄｒｅｓｓ）上にアドレス（Ａ）から生成されたロウアドレス（Ａｒ）およびカラムアドレス（Ａｃ１〜Ａｃ４）を出力して、冗長コードメモリ１６のエントリＡから更新前データ（Ｄ１〜Ｄ４）に対応する冗長コード（Ｃ１〜Ｃ４）を読み出す。
【００５９】
この後、バッファアクセスコントローラ１０４は、アドレス（Ａ）と、バス１０のデータバス（ｄａｔａ  ｂｕｓ）上に出力されたデータ（Ｄ１〜Ｄ４）と、コードメモリコントローラ１０６によって読み出された冗長コード（Ｃ１〜Ｃ４）とを更新履歴情報のデータ格納形式に組立てて、ポインタ値（Ｐ）で指定されるビフォアイメージバッファ（ＢＩＢ）１７のエントリに書き込む。
【００６０】
このように、ビフォアイメージバッファ（ＢＩＢ）１７に対する更新履歴情報の書き込みは、キャッシュメモリにデータが書き込まれるとき、つまりキャッシュメモリからメインメモリ１４にデータがライトバックされる前に、バストランザクション発行制御部１０３、バッファアクセスコントローラ１０４およびコードメモリコントローラ１０６によって自動的に実行される。
【００６１】
図８には、メインメモリ１４からのデータ読み出し時に、その読み出しデータのデータエラーが検出された場合の回復処理の流れが示されている。
ここでは、メインメモリ１４の内容をエラー発生前のチェックポイントの時点に復元することなく、正しく元の命令へ復帰可能な場合について説明する。
【００６２】
すなわち、ある時点でメインメモリ１４に書き込まれているデータ（Ｄ）について、その後にそれをメインメモリ１４から読み出したとき、もしそのデータ（Ｄ）がメモリエラーなどによって誤ったデータ値（Ｄ’）に置き換えられていると、メインメモリコントローラ１３によるエラー検出コードのチェックによってメモリデータエラーの発生が検出される。このメモリデータエラーの発生は、ハードウェア割り込み信号などによって所定のＣＰＵに通知され、そのＣＰＵにてエラー割り込みルーチンが実行される。
【００６３】
エラー割り込みルーチンを実行するＣＰＵは、エラー割り込みが再度発生しないようにマスクし（ステップＳ１０）、その後、メインメモリ１４のエラーが発したアドレスに格納されているデータ（Ｄ’）をリードし、次いでそれに対応する冗長コード（Ｃ）を冗長コードメモリ１６からリードする（ステップＳ１１、Ｓ１２）。この後、そのＣＰＵは、データ（Ｄ’）と冗長コード（Ｃ）とから正しいデータ（Ｄ）を再構成し（ステップＳ１３）、そのデータ（Ｄ）をメインメモリ１４のエラーが発したアドレスに格納する（ステップＳ１４）。
【００６４】
この回復処理の手順は、ビフォアイメージバッファ（ＢＩＢ）１７を使用してないため、ビフォアイメージバッファ（ＢＩＢ）１７を使用したチェックポイントリスタート方式を採用してないシステムにおいても適用することができる。
【００６５】
図９には、メインメモリ１４からのデータ読み出し時に、その読み出しデータのデータエラーが検出された場合の回復処理の第２の例が示されている。
ここでは、あるチェックポイントＣＰ１の以前にメインメモリ１４に書き込まれているデータ（Ｄ）について、そのチェックポイントＣＰ１の取得後にそれをメインメモリ１４から初めて読み出したときに、そのデータ（Ｄ）がメモリエラーなどによって誤ったデータ値（Ｄ’）に置き換えられていることが検出された場合を想定する。
【００６６】
このメモリエラーの発生は、メインメモリコントローラ１３によるデータ値（Ｄ’）のエラー検出コードのチェックによって検出され、ハードウェア割り込み信号などによって所定のＣＰＵに通知される。そして、そのＣＰＵにてリカバリールーチンが実行される。
【００６７】
リカバリールーチンを実行するＣＰＵは、エラー割り込みが再度発生しないようにマスクし（ステップＳ２０）、そしてメインメモリ１４のエラーが発したアドレスに格納されているデータ（Ｄ’）をリードし、次いでそれに対応する冗長コード（Ｃ）を冗長コードメモリ１６からリードする（ステップＳ２１、Ｓ２２）。この後、そのＣＰＵは、データ（Ｄ’）と冗長コード（Ｃ）とから正しいデータ（Ｄ）を再構成し（ステップＳ２３）、そのデータ（Ｄ）をメインメモリ１４のエラーが発したアドレスに格納する（ステップＳ２４）。
【００６８】
次いで、そのＣＰＵは、ＢＩＢ／ＣＭコントローラ１５を制御して、ビフォアイメージバッファ（ＢＩＢ）１７の更新前データをメインメモリ１４に書き戻し、冗長コードについては冗長コードメモリ１６に書き戻す（ステップＳ２５、Ｓ２６）。この後、チェックポイントＣＰ１で採取されたプロセス状態が各ＣＰＵに復元され、そのチェックポイントＣＰ１から処理が再開される。
【００６９】
このようにメモリエラーを修正した後にメインメモリ１４の内容を障害発生前のチェックポイントの時点に復元することにより、再び誤ったメモリデータが読まれることによる同一障害の再発を防止できるようになる。従って、チェックポイントリスタート方式だけでは回復できないようなメモリ故障が発生した際にも、処理を継続できるようになる。
【００７０】
図１０には、この発明の第２実施形態に係るコンピュータシステムの構成が示されている。
このコンピュータシステムは、第１実施形態のシステムに設けられていた冗長コードメモリ１６の代わりに垂直パリティメモリ２１を採用し、ワード単位ではなく、バースト転送などのＣＰＵによる連続アクセスでリードライトされる単位データブロック（キャッシュブロック）の単位でその誤り訂正のために使用される垂直パリティデータを管理するように構成されている。
【００７１】
すなわち、メインメモリ１４は、パリティ付きメモリなどのようにエラー検出機能を有するメモリであり、ＣＰＵによる１回のメモリアクセスでリードライトされるデータ単位であるワード単位でそのワードのデータ列に対してパリティビットが付加される。
【００７２】
垂直パリティメモリ２１は、エラー検出機能を有するメインメモリ１４に対してエラー訂正機能を付加するために設けられたものであり、メインメモリ１４に格納可能な単位データブロック数分のエントリを有している。各エントリには、メインメモリ１４の対応する単位データブロックに属するデータ列間において、それらデータ列それぞれの同一ビット位置におけるビット配列から算出した垂直パリティデータが格納される。例えば、図１１に示されているように、メインメモリ１４のキャッシュブロックＮの単位データブロックが各４バイトのデータＤ０〜Ｄ３から構成され、データＤ０〜Ｄ３それぞれに４ビットの水平パリティビットＰ０〜Ｐ３が付加されている場合には、垂直パリティメモリ２１のエントリＮには、データＤ０〜Ｄ３の同一ビット位置毎に算出された４バイトの垂直パリティＤｐと水平パリティビットＰ０〜Ｐ３の同一ビット位置毎に算出された４ビットの垂直パリティＰｐとを含む垂直パリティデータが格納されることになる。
【００７３】
このように、水平パリティビットによって誤り検出が可能なデータ単位で単位データブロックを分割し、これらに対して計算した垂直パリティデータを垂直パリティメモリ２１に格納することにより、エラー発生が検出されたデータについてそのどのビット位置がエラーしているかを垂直パリティデータから求めることができ、エラー訂正が可能となる。
【００７４】
垂直パリティメモリ２１に対する垂直パリティデータの書き込みは、キャッシュメモリのあるキャッシュラインをメインメモリ１４にライトバックするためのバストランザクションがバス１０上に発行されたとき、そのバストランザクションに応答して実行される。この場合、バス１０上に連続的に出力される１キャッシュライン分の単位データブロックから垂直パリティデータが生成され、またバス１０上に出力される単位ブロックアドレスから垂直パリティデータを書き込むべき垂直パリティメモリ２１のエントリ位置が決定される。
【００７５】
また、ワード単位の書き込みによってメインメモリのある単位データブロックに属する一部のデータだけが更新される場合については、更新対象の単位データブロックがメインメモリ１４から読み出され、その単位データブロックと書き込みデータとの差分と、その読み出した単位データブロックに対応する垂直パリティメモリ２１の垂直パリティデータとから、新たな垂直パリティデータが求められる。そして、その垂直パリティデータが、書き込みデータが属する単位データブロックに対応する垂直パリティメモリ２１のエントリに書き込まれる。
【００７６】
ビフォアイメージバッファ（ＢＩＢ）１７は、第１実施形態と同様に、あるチェックポイントから次のチェックポイントまでの期間におけるメインメモリ１４の更新履歴情報を保持するためのログメモリとして使用されるものであり、メインメモリ１４に対するデータ書き込みが行われる度、そのデータ書き込みに先立って、データ書き込みが行われる番地が属するメインメモリ１４のキャッシュブロックアドレスと、更新前単位データブロックと、その更新前単位データブロックに対応する垂直パリティデータとが、更新履歴情報としてビフォアイメージバッファ（ＢＩＢ）１７にスタック形式で蓄積される。
【００７７】
メインメモリ１４のリードデータに誤りが検出された場合は、メインメモリ１４の水平パリティによる誤り検出結果と垂直パリティデータとから誤りを生じたビット位置が特定され、正しいデータの再構築が行われる。そして、それがメインメモリ１４に書き戻される。
【００７８】
この第２実施形態においては、垂直パリティデータの生成、ビフォアイメージバッファ（ＢＩＢ）１７に対する更新履歴情報のリードライト制御は図５で説明した第１実施形態と同様のハードウェアによって実現される。すなわち、図５のシステムにおける冗長コードメモリ１６を垂直パリティメモリ２１に置き換えてその動作を説明すると、垂直パリティメモリ２１に対する垂直パリティデータの書き込みは、キャッシュメモリからメインメモリ１４にデータをライトバックするときに、そのライトバック処理と並行して、コードメモリコントローラ１０６によって自動的に実行される。また、ビフォアイメージバッファ（ＢＩＢ）１７に対する更新履歴情報の書き込みも、キャッシュメモリにデータが書き込まれるとき、つまりキャッシュメモリからメインメモリ１４にデータがライトバックされる前に、バストランザクション発行制御部１０３、バッファアクセスコントローラ１０４およびコードメモリコントローラ１０６によって自動的に実行される。
【００７９】
また、第２実施形態における障害回復処理についても、図８および図９で説明した第１実施形態と同様の手順で行うことができる。すなわち、メインメモリ１４の内容を障害発生前のチェックポイントの状態に復元する場合には、垂直パリティデータを使用して正しいデータを再構築した後、ビフォアイメージバッファ（ＢＩＢ）１７から更新履歴情報が逐次読み出され、更新前単位データブロックおよび垂直パリティデータをそれぞれメインメモリ１４および垂直パリティメモリ２１の該当する格納位置に書き戻す処理が行われる。
【００８０】
以上では、メインメモリのデータはパリティを持ち１ビット誤り検出ができる場合について説明したが、ＳＥＣ−ＤＥＤ符号を用いる場合も同様の構成が可能である。この場合には、メインメモリのデータリードの際に２ビット誤りが検出された時に上記と同様の方法で正しいデータを再構築して障害回復が可能となる。
【００８１】
図１２には、この発明の第３実施形態に係るコンピュータシステムの構成が示されている。
このコンピュータシステムは、第１実施形態のシステムに設けられていた冗長コードメモリ１６の代わりにブロックパリティメモリ２２を採用し、ワード単位ではなく、バースト転送などのＣＰＵによる連続アクセスでリードライトされる単位データブロック（キャッシュブロック）を４つで１組とするデータブロックグループ単位でその誤り訂正のために使用されるブロックパリティデータを管理するように構成されている。
【００８２】
すなわち、メインメモリ１４は、パリティ付きメモリなどのようにエラー検出機能を有するメモリであり、ＣＰＵによる１回のメモリアクセスでリードライトされるデータ単位であるワード単位でそのワードのデータ列に対してパリティビットが付加される。
【００８３】
ブロックパリティメモリ２２は、エラー検出機能を有するメインメモリ１４に対してエラー訂正機能を付加するために設けられたものであり、メインメモリ１４に格納可能なデータブロックグループ数分のエントリを有している。各エントリには、メインメモリ１４の対応するデータブロックグループに属するデータブロック間において、それらデータそれぞれの同一ビット位置におけるビット配列から算出した垂直パリティデータが格納される。
【００８４】
このように、１回のキャッシュライン操作でリードライトできる単位データブロック単位でブロックデータグループを分割し、これらに対して計算した垂直パリティデータをブロックパリティメモリ２２に格納することにより、エラー発生が検出された単位データブロックの単位データについてはメインメモリ１４の水平パリティによって検出でき、そのどのビット位置がエラーしているかについてはブロックパリティデータから求めることができ、これによってエラー訂正が可能となる。
【００８５】
ブロックパリティメモリ２２に対するブロックパリティデータの書き込みは、キャッシュメモリのあるキャッシュラインをメインメモリ１４にライトバックするためのバストランザクションがバス１０上に発行されたことが検出されたときに、実行される。この場合、バス１０上に連続的に出力される１キャッシュライン分の単位データブロックによって更新されるデータブロックがメインメモリ１４から読み出され、そのデータブロックと書き込まれる単位データブロックとの差分（排他的論理和）と、そのデータブロックグループに対応するブロックパリティメモリ２２のブロックパリティデータとから、新たなブロックパリティデータが生成される。そして、そのブロックパリティデータが、書き込み対象の単位データブロックが属するデータブロックグループに対応するブロックパリティメモリ２２のエントリに書き込まれる。
【００８６】
ビフォアイメージバッファ（ＢＩＢ）１７は、第１実施形態と同様に、あるチェックポイントから次のチェックポイントまでの期間におけるメインメモリ１４の更新履歴情報を保持するためのログメモリとして使用されるものであり、メインメモリ１４に対するデータ書き込みが行われる度、そのデータ書き込みに先立って、データ書き込みが行われる番地が属するメインメモリ１４のブロックデータグループのアドレスと、更新前データブロックグループと、その更新前データブロックグループに対応するブロックパリティデータとが、更新履歴情報としてビフォアイメージバッファ（ＢＩＢ）１７にスタック形式で蓄積される。
【００８７】
なお、この場合、前記の新たなブロックパリティデータを生成する際に必要な更新前のデータブロックとブロックパリティデータは、更新履歴情報としてビフォアイメージバッファ（ＢＩＢ）に格納するために読み出されるため、両者は兼用することができ、各々１回のアクセスで済ませるように制御することが可能である。
【００８８】
メインメモリ１４のリードデータに誤りが検出された場合は、メインメモリ１４の水平パリティによる誤り検出結果とブロックパリティデータとから誤りを生じたビット位置が特定され、正しいデータの再構築が行われる。そして、それがメインメモリ１４に書き戻される。具体的には、エラー検出されたデータが属するデータブロックグループのすべての単位データブロックがメインメモリ１４から読み出され、これらと対応するブロックパリティデータとから正しいブロックデータグループの再生が行われる。
【００８９】
この第３実施形態においては、ブロックパリティデータの生成、ビフォアイメージバッファ（ＢＩＢ）１７に対する更新履歴情報のリードライト制御は図５で説明した第１実施形態と同様のハードウェアによって実現される。すなわち、図５のシステムにおける冗長コードメモリ１６をブロックパリティメモリ２２に置き換えてその動作を説明すると、ブロックパリティメモリ２２に対するブロックパリティデータの書き込みは、キャッシュメモリからメインメモリ１４にデータをライトバックするときに、そのライトバック処理と並行して、コードメモリコントローラ１０６によって自動的に実行される。また、ビフォアイメージバッファ（ＢＩＢ）１７に対する更新履歴情報の書き込みも、キャッシュメモリにデータが書き込まれるとき、つまりキャッシュメモリからメインメモリ１４にデータがライトバックされる前に、バストランザクション発行制御部１０３、バッファアクセスコントローラ１０４およびコードメモリコントローラ１０６によって自動的に実行される。
【００９０】
また、第３実施形態における障害回復処理についても、図８および図９で説明した第１実施形態と同様の手順で行うことができる。すなわち、メインメモリ１４の内容を障害発生前のチェックポイントの状態に復元する場合には、ブロックパリティデータを使用して正しいデータを再構築した後、ビフォアイメージバッファ（ＢＩＢ）１７から更新履歴情報が逐次読み出され、更新前データブロックグループおよびブロックパリティデータをそれぞれメインメモリ１４およびブロックパリティメモリ２２の該当する格納位置に書き戻す処理が行われる。
【００９１】
以上では、メインメモリのデータはパリティを持ち１ビット誤り検出ができる場合について説明したが、ＳＥＣ−ＤＥＤ符号を用いる場合も同様の構成が可能である。この場合には、メインメモリのデータリードの際に２ビット誤りが検出された時に上記と同様の方法で正しいデータを再構築して障害回復が可能となる。
【００９２】
なお、以上の説明ではどの実施形態においても、ビフォアイメージバッファ（ＢＩＢ）１７に対して更新前データとそれに対応する誤り訂正のための冗長コード（ＥＣＣ、垂直パリティ、ブロックパリティ）とを同時に書き込む場合を説明したが、冗長コードについては、それを格納するための冗長コードメモリ１６、垂直パリティメモリ２１、またはブロックパリティメモリ２２の更新時に行ってもよい。この場合、新たな冗長コードの書き込みによって更新される冗長コードが冗長コードメモリ１６、垂直パリティメモリ２１、またはブロックパリティメモリ２２から読み出され、それがビフォアイメージバッファ（ＢＩＢ）１７に書き込まれる。
【００９３】
【発明の効果】
以上説明したように、この発明によれば、既存のパリティ付きメモリなどの資源をそのまま使用した状態で誤り訂正機能を持つメモリサブシステムを付加ハードによって構築できるようになり、メモリ故障に対する信頼性の高いコンピュータシステムを実現できる。また、ログメモリを使用したチェックポイントリスタート方式では回復できないようなメモリ故障が発生した際にも処理を継続できるようになり、メモリを２重化することなく、少ないハードウェアで十分な耐故障性能を実現できる。
【図面の簡単な説明】
【図１】この発明の第１の実施形態に係るコンピュータシステムの構成を示すブロック図。
【図２】同第１実施形態のシステムにおける冗長コードメモリに対する誤り訂正コードの書き込み動作を説明するための図。
【図３】同第１実施形態のシステムにおけるＢＩＢメモリに対する更新履歴情報の書き込み動作を説明するための図。
【図４】同第１実施形態のシステムにおけるメインメモリおよび冗長コードメモリの復元動作を説明するための図。
【図５】同第１実施形態のシステムで採用される具体的なハードウェア構成を示すブロック図。
【図６】図５のシステムにおいてキャッシュからメインメモリに対するライトバック処理で実行される一連の動作を説明するタイミングチャート。
【図７】図５のシステムにおいてキャッシュ中のｓｈａｒｅｄラインに対する書き込み処理で実行される一連の動作を説明するタイミングチャート。
【図８】図５のシステムで実行される障害回復処理の第１の手順を説明するフローチャート。
【図９】図５のシステムで実行される障害回復処理の第２の手順を説明するフローチャート。
【図１０】この発明の第２の実施形態に係るコンピュータシステムの構成を示すブロック図。
【図１１】同第２実施形態のシステムにおける垂直パリティデータの生成原理を説明するための図。
【図１２】この発明の第３の実施形態に係るコンピュータシステムの構成を示すブロック図。
【符号の説明】
１０…プロセッサバス、１１−１〜１１−ｎ…ＣＰＵ、１２−１〜１２−ｎ…キャッシュメモリ、１３…メインメモリコントローラ、１４…メインメモリ、１５…ＢＩＢ／ＣＭコントローラ、１６…冗長コードメモリ（ＣＭ）、１７…ビフォアイメージバッファ（ＢＩＢ）、２１…垂直パリティメモリ、２２…ブロックパリティメモリ、１０１…バスインターフェース制御部、１０２…バストランザクション応答制御部、１０３…バストランザクション発行制御部、１０４…バッファアクセスコントローラ、１０５…状態保存制御部、１０６…コードメモリコントローラ。
【図１】
0003788822.tif 000002
【図２】
0003788822.tif 000003
【図３】
0003788822.tif 000004
【図４】
0003788822.tif 000005
【図５】
0003788822.tif 000006
【図６】
0003788822.tif 000007
【図７】
0003788822.tif 000008
【図８】
0003788822.tif 000009
【図９】
0003788822.tif 000010
【図１０】
0003788822.tif 000011
【図１１】
0003788822.tif 000012
【図１２】
0003788822.tif 000013