(57)【要約】      （修正有）【課題】給電停止時に、バックアップメモリ中のデータの信頼性の有無を保持しておく不揮発性メモリに異常が生じた場合でも、給電開始時にバックアップメモリ中のデータを有効に活用するＲＡＩＤ装置の提供。【解決手段】制御装置１０は、サーバ１から指示された処理中に、前記処理に用いられるデータをＡＣ電源から給電して保持するメモリ１３と、ＡＣ電源からメモリ１３への給電が停止された後再びＡＣ電源からの給電が開始されたとき、バッテリによってメモリ１３に保持されていたデータに誤り検出符号が付加されているか否かを判定するデータ有り判定部と、判定した結果、メモリ１３によって保持されたデータに誤り検出符号が付加されていると判定したとき、メモリ１３によって保持されたデータを用いて前記処理を継続する。【選択図】図１
2010146362.tif 000002
【特許請求の範囲】
【請求項１】
上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、
前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、
前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、
を備えることを特徴とする制御装置。
【請求項２】
前記判定手段は、
前記処理に用いられたデータが前記保持手段に保持されていることを示す情報を保持する不揮発性メモリが異常であるとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定することを特徴とする請求項１に記載の制御装置。
【請求項３】
前記判定手段は、
誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分と、を前記保持手段から読み出す読出手段と、
前記読出手段によって読み出された情報データ部分について、誤り検出符号部分を用いて誤り検出する誤り検出手段と、を含み、
前記誤り検出手段によって誤りなしの結果が得られた場合に、誤り検出符号が付加されていると判定することを特徴とする請求項１または請求項２に記載の制御装置。
【請求項４】
前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、給電を停止させる要因を示す異常要因情報を前記保持手段に書き込む異常要因書込手段と、
前記異常要因書込手段によって書き込まれた異常原因情報が、自装置に同期する他の装置においても自装置と同時に異常を引き起こす要因を示すか否かを判定する異常要因判定手段をさらに備え、
前記継続手段は、
前記異常要因判定手段によって前記異常原因情報が、前記他の装置においても自装置と同時に異常を引き起こす要因を示すとき、前記保持手段によって保持されたデータを用いて前記処理を継続することを特徴とする請求項１に記載の制御装置。
【請求項５】
前記異常要因判定手段によって前記異常原因情報が、前記他の装置において自装置とは異なる時に異常を引き起こす要因を示すとき、前記保持手段によって保持されたデータを破棄する破棄手段をさらに備えることを特徴とする請求項４に記載の制御装置。
【請求項６】
データを記憶する複数の記憶装置および前記複数の記憶装置を制御する制御装置を備えるストレージ装置であって、
前記制御装置は、
上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、
前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、
前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、
を備えることを特徴とするストレージ装置。
【請求項７】
上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持ステップと、
前記主電源から前記保持ステップへの給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持ステップによって保持されたデータに誤り検出符号が付加されているか否かを判定する判定ステップと、
前記判定ステップによって判定された結果、前記保持ステップによって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持ステップによって保持されたデータを用いて前記処理を継続する継続ステップと、
を含むことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、ストレージ装置および制御方法に関する。
【背景技術】
【０００２】
従来から、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置を制御するコントローラは、電源（例えばＡＣ電源）の停止や瞬断によって揮発性メモリ（以降、「メモリ」と略記する）のデータが失われ、稼動に支障をきたしたりするのを防止するため、例えばバッテリ等のバックアップ電源によってメモリのデータを保護して、保護されたデータがある旨を不揮発性メモリに保持することがある。
【０００３】
図１２は、停電が発生した際にバッテリから電源供給を行うＲＡＩＤ装置のコントローラの構成を示す図である。図１２に示すように、コントローラは、制御部（例えばＣＰＵ）と、メモリと、不揮発性メモリ（不揮発領域）と、バッテリと、を備える。制御部が上位装置（図示しない）から指示を受けてメモリを用いて入出力処理を行っている最中に、停電が発生することがある。このとき、メモリは、入出力処理中のデータを保護するためにバックアップ電源（バッテリ）から給電し、制御部は、メモリに入出力処理中のデータがあることを示す情報を電源からの電力が途絶える前に不揮発性メモリに保持する。これにより、電源からの電力が途絶える直前に制御部によって処理されていたデータがメモリにあることがわかるため、メモリ内のデータの信頼性を保障することができる。そして、コントローラは、停電から復旧した後、不揮発性メモリに保持された情報を参照して、参照された情報がメモリにデータがあることを示す情報である場合、停電発生直前にメモリに保持されていたデータを活用して処理を続行する。
【０００４】
また、ＲＡＩＤ装置の中には、データの信頼性を向上させるために、コントローラが冗長化されているものがある。例えば、図１３に示すＲＡＩＤ装置では、コントローラが二重化され、二重化されたそれぞれのコントローラが同期をとって同一内容のデータを磁気ディスク装置に記憶する。
【０００５】
このようなＲＡＩＤ装置では、二重化された双方のコントローラへの電源からの給電が同時に停止される場合がある。例えば、停電が発生した場合である。この場合、図１４に示すように、双方のコントローラが停電による異常を検知したとき、各コントローラは、メモリにデータがあることを示す情報を不揮発性メモリに保持する。そして、双方のコントローラは、停電から復旧した後、自己の不揮発性メモリに保持された情報をそれぞれ参照して、参照された情報がメモリにデータがあることを示す情報である場合、停電発生直前にメモリに保持されていたデータを活用して処理を続行する。
【０００６】
また、同様のＲＡＩＤ装置において、二重化された双方のコントローラへの電源からの給電が異なる時間に停止される場合がある。例えば、図１５に示すように、一方のコントローラ１０が他方のコントローラ３０より先行して異常を検出すると、コントローラ１０は、メモリにデータがあることを示す情報を自己の不揮発性メモリに保持するとともに、コントローラ３０に対して異常が検出されたことを通知する（ステップ（１））。すると、コントローラ３０は、コントローラ１０との同期を停止して（ステップ（２））、コントローラ１０の不揮発性メモリにコントローラ１０のメモリのデータが最新でないことを示す情報を格納する（ステップ（３））。
【０００７】
その後、コントローラ３０が異常を検出すると、自己のメモリにデータがあることを示す情報を自己の不揮発性メモリに保持する。そして、電源が再投入されると、コントローラ１０は、自己の不揮発性メモリに保持された情報を参照して、参照された情報によって自己のメモリのデータが最新でないと判断できるため、当該データを破棄する。一方、コントローラ３０は、自己の不揮発性メモリに保持された情報を参照して、参照された情報に自己のメモリのデータが最新でない旨の情報がないため、異常発生直前にメモリに保持されていたデータを活用して処理を続行する。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＲＡＩＤ装置のコントローラに電源からの給電が一旦停止された後に復旧した場合、不揮発性メモリを利用してメモリのデータを活用する従来の技術では、コントローラは、不揮発性メモリに異常が発生したとき、不揮発性メモリに保持されたメモリのデータに関する情報を読み出せないため、メモリのデータを有効に活用することができないという問題がある。
【０００９】
すなわち、ＲＡＩＤ装置のコントローラは、停電が発生すると、停電発生直前の入出力処理中のデータがメモリにあることを示す情報を不揮発性メモリに保持するが、その後何らかの原因により不揮発性メモリから当該情報を読み出せなくなると、メモリにデータがあるか否かを判断することができなくなる。その結果、コントローラは、停電から復旧しても、メモリのデータを信頼して良いのか悪いのかを判断することができず、メモリのデータを活用することができない。これは、二重化された双方のコントローラに給電が停止されるような異常が発生したときであっても同じである。
【００１０】
本発明は、上記に鑑みてなされたものであって、給電停止時にメモリのデータの信頼性の有無を保持しておく不揮発性メモリに異常が生じても、給電開始時にメモリのデータを有効に活用することができる制御装置、ストレージ装置および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した問題を解決し、目的を達成するために、制御装置は、上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、を備えた構成を採る。
【００１２】
かかる構成によれば、制御装置は、保持手段によって保持されたデータに誤り検出符号が付加されていることがわかると、主電源から保持手段への給電が停止された直前に処理に用いられていたデータが保持手段に保持されていることがわかる。
【発明の効果】
【００１３】
以上により、制御装置、ストレージ装置および制御方法は、給電停止時にメモリのデータの信頼性の有無を保持しておく不揮発性メモリに異常が生じても、給電開始時にメモリのデータを有効に活用することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に、本発明に係る制御装置、ストレージ装置および制御方法の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。
【実施例１】
【００１５】
図１は、実施例１に係るストレージ装置の例としてＲＡＩＤ装置を含むＲＡＩＤシステムの全体構成の一例を示す図である。図１に示すように、ＲＡＩＤ装置２は、ＲＡＩＤ装置２の上位装置であるサーバ１と接続され、制御装置１０と、記憶装置２０と、を備える。制御装置１０は、サーバ接続インタフェース部１１と、制御部１２と、メモリ１３と、フラッシュメモリ１４と、バッテリ１５と、電源管理部１６と、を備える。制御装置１０は、サーバ１からの入出力要求を取得して、取得された入出力要求に応じて、データを記憶装置２０に入出力する入出力処理を行う。
【００１６】
サーバ接続インタフェース部１１は、サーバ１とＲＡＩＤ装置２とがデータのやりとりを行うインタフェースであり、例えばポート等を含んでいる。
【００１７】
制御部１２は、サーバ１からの入出力要求に応じた処理中に、ＡＣ電源からメモリ１３への給電が停止される要因となる異常を検知すると、メモリ１３にデータがあることを示す情報をフラッシュメモリ１４に保持する。その後、制御部１２は、図示していないが、自装置をシャットダウンする。ここで、ＡＣ電源からメモリ１３への給電が停止される要因となる異常とは、例えば停電、停電以外の給電異常および制御装置１０内に搭載される装置（ＣＰＵ（Central Processing Unit）等）の故障等の異常をいい、以降「メモリ給電異常」と略記するものとする。また、メモリ１３にデータがあることを示す情報とは、「メモリ給電異常」が検知される直前に入出力処理の対象となっていたデータがメモリ１３にあることを、シャットダウンされた後復旧した制御部１２に知らせる情報である。この情報がフラッシュメモリ１４に保持されていれば、制御部１２は、シャットダウンされた後復旧したとき、「メモリ給電異常」が検知される直前に入出力処理の対象となっていたデータを用いて、入出力処理を継続することができる。
【００１８】
制御部１２は、ＡＣ電源からメモリ１３への給電が一旦停止された後に復旧したとき、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、制御部１２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されているか否かを判定する。このとき、制御部１２は、フラッシュメモリ１４が異常である旨を検知すると、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判断するのにフラッシュメモリ１４に保持された情報を利用することができないため、メモリ１３の任意のアドレスからデータを読み出す。例えば、制御部１２は、メモリ１３の任意のアドレスから誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分とを読み出す。そして、制御部１２は、読み出された情報データ部分について、誤り検出符号を用いて誤り検出を行う。制御部１２は、データの誤りが検出されないとの結果が得られたとき、データに誤り検出符号が付加されていることがわかり、ＡＣ電源からメモリ１３への給電が停止された直前に入出力処理の対象となっていたデータがメモリ１３に保持されていることがわかるため、メモリ１３に保持されたデータを用いて入出力処理を継続する。一方、制御部１２は、データに誤りが検出されるとの結果が得られたとき、メモリ１３内のデータに誤り検出符号が付加されていない無意味なデータである可能性があるため、メモリ１３を初期化する。なお、誤り検出符号は、例えばＥＣＣ（Error Correcting Code）であるが、これに限定されない。
【００１９】
メモリ１３は、ＡＣ電源またはバッテリ１５から給電されなくなると保持されたデータを失ってしまう揮発性メモリであり、例えばＤＲＡＭ（Dynamic Random Access Memory）を含んでいる。メモリ１３は、制御部１２によって入出力処理がされているとき「メモリ給電異常」によってＡＣ電源から給電が途絶えると、入出力処理に支障が生じるのを防止するためにシャットダウン前にバッテリ１５から給電され、入出力処理によって用いられていたデータを保持する。
【００２０】
フラッシュメモリ１４は、給電されなくても保持されたデータを失わない不揮発性メモリである。
【００２１】
バッテリ１５は、主電源をバックアップするバックアップ電源であり、入出力処理中にＡＣ電源から給電が停止されたメモリ１３にＡＣ電源の代わりに給電する。
【００２２】
電源管理部１６は、ＡＣ電源の電圧等を常時監視して、停電や電源異常が発生したか否かを判断して、停電や電源異常が発生したと判断したとき、異常の要因とともに異常である旨の通知を制御部１２に出力する。ここで、停電以外の電源異常には、例えば電圧異常または静電気その他の要因による瞬断による異常等が含まれるが、これに限定されない。
【００２３】
ハードディスク制御インタフェース部（以降、ＨＤＤ制御インタフェース部）１８は、制御装置１０と記憶装置２０との間のデータのやりとりを行うインタフェースであり、例えばポート等を含んでいる。
【００２４】
記憶装置２０は、複数のハードディスクから構成され、各ハードディスクにデータを記憶している。
【００２５】
次に、図２は、実施例１に係る制御部の構成を示す機能ブロック図である。図２に示すように、制御部１２は、異常処理部１２０と、復旧処理部１３０と、を備える。
【００２６】
異常処理部１２０は、「メモリ給電異常」時の異常処理を行い、異常監視部１２１と、データ有り情報書込部１２２と、を備える。
【００２７】
異常監視部１２１は、電源管理部１６や制御装置１０内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」を検知すると、「メモリ給電異常」であることをデータ有り情報書込部１２２に通知する。例えば、異常監視部１２１は、「メモリ給電異常」の要因とともに「メモリ給電異常」である旨を示す情報を、電源管理部１６や制御装置１０内の個々の装置から取得すると、「メモリ給電異常」であることをデータ有り情報書込部１２２に通知する。
【００２８】
データ有り情報書込部１２２は、「メモリ給電異常」であることが異常監視部１２１から通知されると、メモリ１３に入出力処理の対象となっていたデータがあるために、メモリ１３にデータがあることを示す情報をフラッシュメモリ１４に格納する。なお、データ有り情報書込部１２２は、メモリ１３に入出力処理の対象となっていたデータがあるために、メモリ１３にデータがあることを示す特定コードを、メモリ１３に書き込んでも良い。この特定コードは、あらかじめ定められた数字であっても良いし、記号であっても良い。
【００２９】
復旧処理部１３０は、「メモリ給電異常」によってシャットダウンされた後の復旧処理を行い、起動検知部１３１と、データ有り判定部（不揮発メモリ）１３２と、データ有り判定部（揮発メモリ）１３３と、処理継続部１３４と、メモリ初期化部１３５と、を備える。
【００３０】
起動検知部１３１は、ＡＣ電源が投入されたことを検知すると、ＡＣ電源が投入されたことをデータ有り判定部（不揮発メモリ）１３２に通知する。
【００３１】
データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリを用いて、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されているか否かを判定する。このとき、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常である旨を検知すると、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判断することができないため、フラッシュメモリ１４が異常である旨をデータ有り判定部（揮発メモリ）１３３に通知する。また、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていると判定されたとき、メモリ１３に入出力処理の対象となっていたデータがあることを処理継続部１３４に通知する。一方、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていないと判定されたとき、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【００３２】
データ有り判定部（揮発メモリ）１３３は、フラッシュメモリ１４が異常であるとき、メモリ１３を用いて、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、データ有り判定部（揮発メモリ）１３３は、フラッシュメモリ１４が異常である旨がデータ有り判定部（不揮発メモリ）１３２から通知されると、メモリ１３の任意のアドレスから誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分とを読み出す。そして、データ有り判定部（揮発メモリ）１３３は、読み出された情報データ部分について、誤り検出符号を用いて誤り検出を行う。ここで、データ有り判定部（揮発メモリ）１３３は、データの誤りが検出されないとの結果が得られた場合に、メモリ１３内のデータに誤り検出符号が付加されていることがわかり、ＡＣ電源からメモリ１３への給電が停止された直前に入出力処理の対象となっていたデータがメモリ１３に保持されていることがわかるため、メモリ１３に入出力処理の対象となっていたデータがあることを処理継続部１３４に通知する。一方、データ有り判定部（揮発メモリ）１３３は、データに誤りが検出されるとの結果が得られた場合に、メモリ１３内のデータに誤り検出符号が付加されていない無意味なデータである可能性があるため、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【００３３】
ここで、データ有り判定部（揮発メモリ）１３３は、メモリ１３に入出力処理の対象となっていたデータがあるか否かをさらに正確に確かめるために、異常処理部１２０によってメモリ１３に特定コードが保持される場合、メモリ１３に特定コードが保持されているか否かを判定しても良い。この場合、データ有り判定部（揮発メモリ）１３３は、メモリ１３に特定コードが保持されていれば、ＡＣ電源からメモリ１３への給電が停止された直前に入出力処理の対象となっていたデータがメモリ１３に保持されていることがわかるため、メモリ１３に入出力処理の対象となっていたデータがあることがわかることになる。なお、データ有り判定部（揮発メモリ）１３３は、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定するために、任意のアドレスからデータを読み出した結果および特定コードを読み出した結果のどちらか一方を使用しても良いし、両方を使用しても良い。
【００３４】
処理継続部１３３は、メモリ１３に入出力処理の対象となっていたデータがあることがデータ有り判定部（不揮発メモリ）１３２またはデータ有り判定部（揮発メモリ）１３３から通知されると、メモリ１３に保持されたデータを用いて、入出力処理を継続する。
【００３５】
メモリ初期化部１３４は、メモリ１３に入出力処理の対象となっていたデータがないことがデータ有り判定部（不揮発メモリ）１３２またはデータ有り判定部（揮発メモリ）１３３から通知されると、メモリ１３を初期化する。
【００３６】
次に、実施例１に係る制御装置の処理を、図３を参照して説明する。図３は、実施例１に係る制御装置の処理を示すフローチャートを示す図である。
【００３７】
まず、異常処理部１２０の異常監視部１２１は、電源管理部１６や制御装置１０内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」が検知されたか否かを判定する（Ｓ１１０）。このとき、異常監視部１２１は、「メモリ給電異常」が検知されないとき（Ｓ１１０Ｎｏ）、「メモリ給電異常」が検知されるまで、同様の判定処理を繰り返す。
【００３８】
一方、異常監視部１２１は、「メモリ給電異常」が検知されるとき（Ｓ１１０Ｙｅｓ）、「メモリ給電異常」であることをデータ有り情報書込部１２２に通知する。そして、「メモリ給電異常」であることが通知されたデータ有り情報書込部１２２は、メモリ１３にデータがあることを示す情報をフラッシュメモリ１４に書き込む（Ｓ１２０）。
【００３９】
そして、バッテリ１５は、メモリ１３に給電を開始する（Ｓ１３０）。その後、制御装置１０はシャットダウンして、ＡＣ電源からの給電が停止される。
【００４０】
その後、制御装置１０がＡＣ電源から再び給電されると、起動検知部１３１は、ＡＣ電源が投入されたことを検知して（Ｓ１４０）、ＡＣ電源が投入されたことをデータ有り判定部（不揮発メモリ）１３２に通知する。
【００４１】
ＡＣ電源が投入されたことが通知されたデータ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常であるか否かを判定する（Ｓ１５０）。具体的には、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４に対してメモリ１３にデータがあることを示す情報を読み出すとき、読み出し異常であるか否かを判定する。
【００４２】
フラッシュメモリ１４が異常であると判定されると（Ｓ１５０Ｙｅｓ）、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常である旨をデータ有り判定部（揮発メモリ）１３３に通知する。
【００４３】
フラッシュメモリ１４が異常である旨がデータ有り判定部（不揮発メモリ）１３２から通知されたデータ有り判定部（揮発メモリ）１３３は、メモリ１３の任意のアドレスからデータを読み出して、読み出されたデータの誤りが検出されるか否かを判定する（Ｓ１６０）。具体的には、データ有り判定部（揮発メモリ）１３３は、メモリ１３の任意のアドレスから誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分とを読み出す。そして、データ有り判定部（揮発メモリ）１３３は、読み出された情報データ部分について、誤り検出符号を用いて誤り検出を行って、データの誤りが検出されないとの結果が得られるか否かを判定する。
【００４４】
データの誤りが検出されないと判定されると（Ｓ１６０Ｎｏ）、メモリ１３のデータに誤り検出符号が付加されていることがわかるため、データ有り判定部（揮発メモリ）１３３は、メモリ１３に入出力処理の対象となっていたデータがあることを処理継続部１３４に通知して、処理継続部１３４は、メモリ１３に保持されたデータを用いて、入出力処理を継続する（Ｓ１７０）。
【００４５】
一方、データに誤りが検出されると判定されると（Ｓ１６０Ｙｅｓ）、データ有り判定部（揮発メモリ）１３３は、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知して、メモリ初期化部１３５は、メモリ１３を初期化する（Ｓ１８０）。
【００４６】
また、フラッシュメモリ１４が正常であると判定されると（Ｓ１５０Ｎｏ）、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されているか否かを判定する（Ｓ１９０）。
【００４７】
メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていると判定されると（Ｓ１９０Ｙｅｓ）、データ有り判定部（不揮発メモリ）１３２は、メモリ１３に入出力処理の対象となっていたデータがあることを処理継続部１３４に通知して、処理継続部１３４は、メモリ１３に保持されたデータを用いて、入出力処理を継続する。
【００４８】
一方、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていないと判定されると（Ｓ１９０Ｎｏ）、データ有り判定部（不揮発メモリ）１３２は、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知して、メモリ初期化部１３５は、メモリ１３を初期化する。
【００４９】
以上のように本実施例によれば、制御装置１０は、サーバ１から指示された入出力処理中に、当該入出力処理に用いられるデータをＡＣ電源から給電してメモリ１３に格納している。そして、制御装置１０は、ＡＣ電源からメモリ１３への給電が停止された後再びＡＣ電源からの給電が開始されたとき、メモリ１３によって保持されたデータに誤り検出符号が付加されているか否かを判定する。そして、制御装置１０は、判定された結果、メモリ１３によって保持されたデータに誤り検出符号が付加されていると判定されたとき、メモリ１３によって保持されたデータを用いて入出力処理を継続する。
【００５０】
このようにして、制御装置１０は、メモリ１３によって保持されたデータに誤り検出符号が付加されていることがわかると、ＡＣ電源からメモリ１３への給電が停止された直前に入出力処理に用いられていたデータがメモリ１３に保持されていることがわかるため、給電開始時にメモリのデータを有効に活用することができる。その結果、制御装置１０は、仮にフラッシュメモリ１４に異常があってフラッシュメモリ１４に保持されたメモリ１３に関連する情報を参照できなくても、ＡＣ電源からメモリ１３への給電が停止された直前に入出力処理に用いられていたデータを有効に活用することができる。
【実施例２】
【００５１】
ところで、上記の実施例１では、シングル構成の制御装置１０がＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、メモリ１３に関連する情報を保持するフラッシュメモリ１４に異常があっても、メモリ１３を有効に活用する場合を説明した。本発明はこれに限定されるものではなく、二重化された両方の制御装置（１０、３０）が、ＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、メモリ（１３、３３）に関連する情報を保持するフラッシュメモリ（１４、３４）に異常があっても、メモリ（１３、３３）を有効に活用する場合であっても良い。
【００５２】
そこで、実施例２では、二重化された両方の制御装置（１０、３０）が、ＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、メモリ（１３、３３）に関連する情報を保持するフラッシュメモリ（１４、３４）に異常があっても、メモリ（１３、３３）を有効に活用する場合を説明する。まず、実施例２に係るＲＡＩＤシステムの全体構成について図４を参照しながら説明する。図４は、実施例２に係るＲＡＩＤシステムの全体構成の一例を示す図である。図４に示すように、実施例２に係るＲＡＩＤシステムでは、実施例１に係るＲＡＩＤシステム（図１）にサーバ４と制御装置３０が追加されている。なお、図４において、図１と同じ部分には同じ符号を付し、詳しい説明を省略する。
【００５３】
サーバ１およびサーバ４は、ともにＲＡＩＤ装置２の上位装置であり、ＲＡＩＤ装置２に対して入出力要求を指示する。サーバ１は、ＲＡＩＤ装置２の制御装置１０および制御装置３０と接続パスで接続されている。サーバ２もサーバ１と同様にＲＡＩＤ装置２の制御装置１０および制御装置３０と接続パスで接続されている。
【００５４】
制御装置１０および制御装置３０は、二重化されており、それぞれサーバ１（およびサーバ４）から同一の入出力要求の指示を取得すると、メモリ１３上のデータとメモリ３３上のデータとが同一となるように同期を常にとって、同一内容のデータを記憶装置２０に格納する。なお、制御装置１０を「０系」とし、制御装置３０を「１系」というものとする。また、以下、制御装置１０の機能を説明するが、制御装置３０の機能は、制御装置１０と同様であるため、その説明を省略する。
【００５５】
サーバ接続インタフェース部１１−１は、サーバ１とＲＡＩＤ装置２とがデータのやりとりを行うインタフェースであり、サーバ接続インタフェース部１１−２は、サーバ２とＲＡＩＤ装置２とがデータのやりとりを行うインタフェースである。
【００５６】
制御部１２は、サーバ（１、４）からの入出力要求に応じた処理中に、ＡＣ電源からメモリ１３への給電が停止される要因となる異常を検知すると、検知された異常要因をメモリ１３に書き込む。ここで、異常要因には、制御装置１０と制御装置３０とが同時に異常を引き起こすような要因と、制御装置１０と制御装置３０とが異なる時に異常を引き起こすような要因とがある。制御装置１０と制御装置３０とが同時に異常を引き起こすような要因には、例えば停電があり、制御装置１０と制御装置３０とが異なる時に異常を引き起こすような要因には、それぞれの制御装置（１０、３０）内で異常を引き起こすような要因であり、例えば停電以外の給電異常および制御装置（１０、３０）内に搭載される装置の故障等の異常を引き起こす要因があるが、これに限定されない。
【００５７】
制御部１２は、ＡＣ電源からメモリ１３への給電が一旦停止された後に復旧したとき、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定し、当該データがあると判定されるとき、当該データが最新のデータであるか否かを判定する。具体的には、制御部１２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されているか否かを判定する。このとき、制御部１２は、フラッシュメモリ１４が異常である旨を検知すると、メモリ１３の任意のアドレスからデータを読み出す。そして、制御部１２は、読み出されたデータの誤りが検出されたか否かを判定する。制御部１２は、データに誤りが検出されないと判定されたとき、メモリ１３から異常要因を読み出して、読み出された異常要因が他系（１系）と同時に異常を引き起こすような要因であるか否かを判定する。制御部１２は、異常要因が自系（０系）と他系（１系）とが同時に異常を引き起こすような要因であると判定されるとき、両系の制御装置（１０、３０）が同時にシャットダウンされており、どちらのメモリ（１３、３３）にも同一且つ最新のデータが保持されていることがわかるため、メモリ１３に保持されたデータを用いて入出力処理を継続する。一方、制御部１２は、異常要因が自系（０系）と他系（１系）とが同時に異常を引き起こすような要因でないと判定されるとき、自系（０系）および他系（１系）の異常が検知された時期の先後を判別できずメモリ（１３、３３）に保持されたデータの新旧を判断できないため、当該データを破棄するためにメモリ１３を初期化する。
【００５８】
なお、制御部１２は、フラッシュメモリ１４が異常でないとき、すなわち、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていると判定されるとき、データが最新でないことを示す情報がフラッシュメモリ１４に保持されているか否かを判定する。ここで、データが最新でないことを示す情報とは、メモリ１３上のデータが最新でないことを示す情報である。制御装置３０よりも先行して制御装置１０に異常が発生したとき、制御装置１０は入出力処理を先行して終了するため、制御装置１０のメモリ１３上のデータは制御装置３０のメモリ３３上のデータよりも古くなる。すなわち、メモリ１３上のデータは最新ではないことになる。そこで、制御装置３０が、制御装置１０のメモリ１３上のデータが最新でないことを示す情報を制御装置１０のフラッシュメモリ１４に格納する。そして、制御部１２は、データが最新でないことを示す情報がフラッシュメモリ１４に保持されているとき、メモリ１３を初期化し、データが最新でないことを示す情報がフラッシュメモリ１４に保持されていないとき、メモリ１３に保持されたデータを用いて入出力処理を継続する。
【００５９】
これにより、制御装置１０は、メモリ１３上のデータが最新でない旨の情報が保持されたフラッシュメモリに異常がある場合であっても、メモリ１３に保持された異常要因によってメモリ上のデータが最新であるか否かを判断することができるため、メモリ１３上のデータが最新であるときだけメモリ１３に保持されたデータを用いて入出力処理を継続することができる。その結果、制御装置１０は、両系のメモリ１３、３３上のデータが不整合となることを防止することができる。
【００６０】
次に、実施例２に係る制御部１２の構成について図５を参照しながら説明する。図５は、実施例２に係る制御部１２の構成を示す機能ブロック図である。図５に示すように、実施例２に係る制御部１２では、実施例に係る制御部１２（図２）に異常要因情報書込部５１０と異常要因判定部５２０とが追加されている。なお、図５において、図２と同じ部分には同じ符号を付し、詳しい説明を省略する。なお、制御部３２の機能は、制御部１２と同様であるため、その説明を省略する。
【００６１】
異常監視部１２１は、電源管理部１６や制御装置１０内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」を検知すると、「メモリ給電異常」であることをデータ有り情報書込部１２２および異常要因情報書込部５１０に通知する。例えば、異常監視部１２１は、「メモリ給電異常」が発生した異常の要因とともに「メモリ給電異常」である旨を示す情報を、電源管理部１６や制御装置１０内の個々の装置から取得すると、「メモリ給電異常」であることをデータ有り情報書込部１２２に通知し、異常の要因を異常要因情報書込部５１０に通知する。
【００６２】
異常要因情報書込部５１０は、異常監視部１２１から異常の要因が通知されると、検知された異常の要因を含む異常要因情報をメモリ１３に書き込む。
【００６３】
データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリを用いて、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定し、当該データがあると判定されるとき、当該データが最新のデータであるか否かを判定する。具体的には、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されているか否かを判定する。このとき、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常である旨を検知すると、フラッシュメモリ１４が異常である旨をデータ有り判定部（揮発メモリ）１３３に通知する。
【００６４】
データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていると判定されたとき、メモリ１３上のデータが最新でないことを示す情報がフラッシュメモリ１４に保持されているか否かを判定する。データ有り判定部（不揮発メモリ）１３２は、メモリ１３上のデータが最新でないことを示す情報がフラッシュメモリ１４に保持されていないと判定されたとき、メモリ１３上のデータが最新であることを処理継続部１３４に通知する。一方、データ有り判定部（不揮発メモリ）１３２は、メモリ１３上のデータが最新でないことを示す情報がフラッシュメモリ１４に保持されていると判定されたとき、メモリ１３上のデータが最新でないことをメモリ初期化部１３５に通知する。なお、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていないと判定されたとき、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【００６５】
データ有り判定部（揮発メモリ）１３３は、メモリ１３を用いて、メモリ１３に入出力処理の対象となっていたデータがあるか否かを判定する。具体的には、データ有り判定部（揮発メモリ）１３３は、データ有り判定部（不揮発メモリ）１３２からフラッシュメモリ１４が異常である旨が通知されると、データの誤りが検出されるか否かを判定する。データ有り判定部（揮発メモリ）１３３は、データの誤りが検出されないと判定されるとき、メモリ１３に入出力処理の対象となっていたデータがあることを異常要因判定部５２０に通知する。一方、データ有り判定部（揮発メモリ）１３３は、データの誤りが検出されると判定されるとき、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【００６６】
異常要因判定部５２０は、メモリ１３を用いて、メモリ１３上のデータが最新のデータであるか否かを判定する。具体的には、異常要因判定部５２０は、データ有り判定部（揮発メモリ）１３３からメモリ１３に入出力処理の対象となっていたデータがあることが通知されると、メモリ１３から異常要因情報を読み出して、読み出された異常要因情報に含まれた異常要因が他系（１系）と同時に異常を引き起こすような要因（例えば停電）であるか否かを判定する。そして、異常要因判定部５２０は、異常要因が他系（１系）と同時に異常を引き起こすような要因であると判定されるとき、メモリ１３上のデータが最新のデータであるため、メモリ１３上のデータが最新であることを処理継続部１３４に通知する。一方、異常要因判定部５２０は、異常要因が他系（１系）と同時に異常を引き起こすような要因でないと判定されるとき、メモリ１３上のデータの新旧を判断できないため、メモリ１３上のデータが最新でないことをメモリ初期化部１３５に通知する。
【００６７】
処理継続部１３４は、メモリ１３上のデータが最新であることがデータ有り判定部（不揮発メモリ）１３２または異常要因判定部５２０から通知されると、メモリ１３に保持されたデータを用いて、入出力処理を継続する。
【００６８】
メモリ初期化部１３５は、メモリ１３に入出力処理の対象となっていたデータがないことまたはメモリ１３上のデータが最新でないことが、データ有り判定部（不揮発メモリ）１３２、データ有り判定部（揮発メモリ）１３３または異常要因判定部５２０から通知されると、メモリ１３を初期化する。
【００６９】
次に、実施例２に係る制御装置の処理を、図６を参照して説明する。図６は、実施例２に係る制御装置の処理を示すフローチャートである。なお、制御装置１０が、入出力処理中に、ＡＣ電源からメモリ１３への給電が停止されたものとして説明する。
【００７０】
まず、異常処理部１２０の異常監視部１２１は、電源管理部１６や制御装置１０内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」が検知されたか否かを判定する（Ｓ２１０）。このとき、異常監視部１２１は、「メモリ給電異常」が検知されないとき（Ｓ２１０Ｎｏ）、「メモリ給電異常」が検知されるまで、同様の判定処理を繰り返す。
【００７１】
一方、異常監視部１２１は、「メモリ給電異常」が検知されるとき（Ｓ２１０Ｙｅｓ）、「メモリ給電異常」であることをデータ有り情報書込部１２２に通知し、異常の要因を異常要因情報書込部５１０に通知する。そして、「メモリ給電異常」であることが通知されたデータ有り情報書込部１２２は、メモリ１３にデータがあることを示す情報をフラッシュメモリ１４に書き込む（Ｓ２２０）。なお、制御装置１０が制御装置３０より先行して異常が発生したとき、制御装置１０のフラッシュメモリ１４には、制御装置３０によって、メモリ１３上のデータが最新でないことを示す情報が書き込まれる。
【００７２】
また、異常の要因が通知された異常要因情報書込部５１０は、通知された異常の要因に対応する異常要因コードをメモリ１３に書き込む（Ｓ２３０）。
【００７３】
そして、バッテリ１５は、メモリ１３に給電を開始する（Ｓ２４０）。その後、制御装置１０はシャットダウンして、ＡＣ電源からの給電が停止される。
【００７４】
その後、制御装置１０がＡＣ電源から再び給電されると、起動検知部１３１は、ＡＣ電源が投入されたことを検知して（Ｓ２５０）、ＡＣ電源が投入されたことをデータ有り判定部（不揮発メモリ）１３２に通知する。
【００７５】
ＡＣ電源が投入されたことが通知されたデータ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常であるか否かを判定する（Ｓ２６０）。具体的には、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４に対してメモリ１３にデータがあることを示す情報を読み出すとき、読み出し異常であるか否かを判定する。
【００７６】
フラッシュメモリ１４が異常であると判定されると（Ｓ２６０Ｙｅｓ）、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常である旨をデータ有り判定部（揮発メモリ）１３３に通知する。
【００７７】
フラッシュメモリ１４が異常である旨がデータ有り判定部（不揮発メモリ）１３２から通知されたデータ有り判定部（揮発メモリ）１３３は、メモリ１３の任意のアドレスからデータを読み出して、読み出されたデータの誤りが検出されるか否かを判定する（Ｓ２７０）。
【００７８】
データの誤りが検出されないと判定されると（Ｓ２７０Ｎｏ）、メモリ１３のデータに誤り検出符号が付加されていることがわかるため、データ有り判定部（揮発メモリ）１３３は、メモリ１３に入出力処理の対象となっていたデータがあることを異常要因判定部５２０に通知する。
【００７９】
一方、データの誤りが検出されると判定されると（Ｓ２７０Ｙｅｓ）、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【００８０】
メモリ１３に入出力処理の対象となっていたデータがあることがデータ有り判定部（揮発メモリ）１３３から通知された異常要因判定部５２０は、メモリ１３に保持された異常要因コードが停電（他系と同時に異常を引き起こすような要因）であるか否かを判定する（Ｓ２８０）。
【００８１】
異常要因コードが停電を示すコードであると判定されると（Ｓ２８０Ｙｅｓ）、異常要因判定部５２０は、停電が他系と同時に異常を引き起こすような要因であるため、メモリ１３上のデータが最新であることを処理継続部１３４に通知する。
【００８２】
一方、異常要因コードが停電を示すコードでないと判定されると（Ｓ２８０Ｎｏ）、異常要因判定部５２０は、メモリ１３上のデータが最新でないことをメモリ初期化部１３５に通知する。
【００８３】
また、フラッシュメモリ１４が正常であると判定されると（Ｓ２６０Ｎｏ）、データ有り判定部（不揮発メモリ）１３２は、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されているか否かを判定する（Ｓ２９０）。
【００８４】
メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていると判定されると（Ｓ２９０Ｙｅｓ）、データ有り判定部（不揮発メモリ）１３２は、メモリ１３上のデータが最新でないことを示す情報がフラッシュメモリ１４に保持されているか否かを判定する（Ｓ３００）。
【００８５】
一方、メモリ１３にデータがあることを示す情報がフラッシュメモリ１４に保持されていないと判定されると（Ｓ２９０Ｎｏ）、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【００８６】
メモリ１３上のデータが最新でないことを示す情報がフラッシュメモリ１４に保持されていると判定されると（Ｓ３００Ｙｅｓ）、メモリ１３上のデータが最新でないことをメモリ初期化部１３５に通知する。
【００８７】
一方、メモリ１３上のデータが最新でないことを示す情報がフラッシュメモリ１４に保持されていないと判定されると（Ｓ３００Ｎｏ）、メモリ１３上のデータが最新であることを処理継続部１３４に通知する。
【００８８】
そして、メモリ初期化部１３５は、データ有り判定部（不揮発メモリ）１３２からメモリ１３に入出力処理の対象となっていたデータがないことまたはメモリ１３上のデータが最新でないことが通知されたとき、または、データ有り判定部（揮発メモリ）１３３からメモリ１３上のデータが最新でないことが通知されたとき、メモリ１３を初期化する（Ｓ３２０）。
【００８９】
そして、処理継続部１３４は、データ有り判定部（不揮発メモリ）１３２からメモリ１３上のデータが最新であることが通知されたとき、または、データ有り判定部（揮発メモリ）１３３からメモリ１３上のデータが最新であることが通知されたとき、メモリ１３に保持されたデータを用いて、入出力処理を継続する（Ｓ３１０）。
【００９０】
ここで、図７および図８を参照して、異常要因に対応した制御装置の復旧動作について説明する。図７では、異常要因が他系と同時に異常を引き起こすような要因の例である停電の場合について説明し、図８では、異常要因が他系と異なる時の異常を引き起こすような要因の例である停電以外の場合について説明する。
【００９１】
図７は、異常要因が停電の場合の制御装置の復旧動作を示す図である。図７に示すように、停電によってＡＣ電源からの給電が停止された制御装置１０のフラッシュメモリ１４には、メモリ１３上にデータがあることを示す情報が保持され、メモリ１３には、停電を示す異常要因情報が保持されている。そして、ＡＣ電源からの給電が再投入された制御装置１０は、フラッシュメモリ１４に異常が発生したとき、フラッシュメモリ１４に保持されたメモリ１３に関連する情報を参照することができないため、メモリ１３に保持された異常要因情報を参照する。すると、制御装置１０は、異常要因情報が停電であるため、メモリ１３上のデータが最新であることがわかり、メモリ１３に保持されたデータを用いて制御装置１０を復旧する。
【００９２】
この場合、制御装置１０と同様にＡＣ電源からの給電が停止された制御装置３０は、ＡＣ電源からの給電が再投入された後の復旧時に新たに何らかの異常が発生しても、制御装置１０のメモリ１３上のデータが最新であるため、後にメモリ１３上のデータを用いてメモリ３３を正しく復旧することができる。
【００９３】
図８は、異常要因が停電以外の場合の制御装置の復旧動作を示す図である。なお、図８の例では、制御装置１０が制御装置３０よりも先行して異常が発生したものとする。図８に示すように、停電以外の異常要因によってＡＣ電源からの給電が停止された制御装置１０のフラッシュメモリ１４には、メモリ１３上にデータがあることを示す情報およびメモリ１３上のデータが最新でないことを示す情報が保持されている。また、メモリ１３には、停電以外の異常要因を示す異常要因情報が保持されている。そして、ＡＣ電源からの給電が再投入された制御装置１０は、フラッシュメモリ１４に異常が発生したとき、フラッシュメモリ１４に保持されたメモリ１３に関連する情報を参照することができないため、メモリ１３に保持された異常要因情報を参照する。すると、制御装置１０は、異常要因情報が停電以外の異常要因であり制御装置３０と同時に引き起こされた異常でないため、メモリ１３上のデータが最新でないおそれがあることとなる。したがって、制御装置１０は、メモリ１３に保持されたデータを破棄する。これにより、制御装置１０は、最新でないおそれのあるデータを正しく破棄することができ、最新でないおそれのあるデータを用いて誤って復旧することから回避することができる。
【００９４】
この場合、制御装置１０と同様にＡＣ電源からの給電が停止された制御装置３０は、ＡＣ電源からの給電が再投入された後の復旧時に新たに何らかの異常が発生しても、後にメモリ１３上の最新でないおそれのあるデータを用いてメモリ３３を誤って復旧することから回避することができる。
【００９５】
以上のように本実施例によれば、制御装置１０は、サーバ（１、４）から指示された入出力処理中に、当該入出力処理に用いられるデータをＡＣ電源から給電してメモリ１３に格納している。また、そして、制御装置１０は、ＡＣ電源からメモリ１３への給電が停止された後再びＡＣ電源からの給電が開始されたとき、メモリ１３によって保持されたデータに誤り検出符号が付加されているか否かを判定する。そして、制御装置１０は、メモリ１３によって保持されたデータに誤り検出符号が付加されていると判定されたとき、メモリ１３に書き込まれた異常要因情報が、他系の制御装置３０と同時に異常を引き起こす要因であるか否かを判定する。そして、制御装置１０は、他系の制御装置３０と同時に異常を引き起こす要因であると判定されたとき、メモリ１３に保持されたデータを用いて入出力処理を継続する。
【００９６】
このようにして、制御装置１０は、万一フラッシュメモリ１４に異常があっても、メモリ１３に保持された異常要因情報を参照してメモリ１３のデータが最新であるか否かを判定できるため、メモリ１３のデータが最新であるときはＡＣ電源からメモリ１３への給電が停止された直前に入出力処理に用いられていたデータを有効に活用することができる。
【実施例３】
【００９７】
ところで、上記の実施例１では、シングル構成の制御装置１０がＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、メモリ１３に関連する情報を保持するフラッシュメモリ１４に異常があっても、メモリ１３を有効に活用する場合を説明した。本発明はこれに限定されるものではなく、二重化された両方の制御装置（１０、３０）が、ＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、メモリ（１３、３３）に関連する情報を保持するフラッシュメモリ（１４、３４）に異常があっても、メモリ（１３、３３）を有効に活用する場合であっても良い。この場合、上記の実施例２では、二重化された両方の制御装置（１０、３０）が、ＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、フラッシュメモリ（１４、３４）に異常があっても、メモリ（１３、３３）に保持された異常要因情報を参照して、メモリ（１３、３３）上のデータが最新であるか否かを判定した。本発明はこれに限定されるものではなく、二重化された両方の制御装置（１０、３０）が、ＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、フラッシュメモリ（１４、３４）に異常があっても、他系の制御装置（３０、１０）によって指示されてメモリ（１３、３３）に格納した情報を参照して、メモリ（１３、３３）上のデータが最新であるか否かを判定しても良い。
【００９８】
そこで、実施例３では、二重化された両方の制御装置（１０、３０）が、ＡＣ電源からメモリ１３への給電が停止された後に再びＡＣ電源からの給電が開始されたとき、フラッシュメモリ（１４、３４）に異常があっても、他系の制御装置（３０、１０）によって指示されてメモリ（１３、３３）に格納した情報を参照して、メモリ（１３、３３）上のデータが最新であるか否かを判定する場合を説明する。なお、実施例３に係るＲＡＩＤシステムの全体構成は、実施例２に係るＲＡＩＤシステムの全体構成と同様であるため、その説明を省略する。
【００９９】
そこで、実施例３に係る制御部（１２、３２）の構成について図９を参照しながら説明する。図９は、実施例３に係る制御部１２の構成を示す機能ブロック図である。図９に示すように、実施例３に係る制御部１２では、実施例２に係る制御部１２（図５）に異常通知部９１０とデータ非最新情報書込分９２０とが追加され、異常要因判定部５２０がデータ破棄判定部９３０に変更されている。また、実施例３に係る制御部３２は、データ破棄指示部９４０を備える。なお、図９において、図５と同じ部分には同じ符号を付し、詳しい説明を省略する。
【０１００】
異常通知部９１０は、「メモリ給電異常」である旨を示す情報を異常監視部１２１から取得すると、制御装置１０がＡＣ電源からメモリ１３への給電が停止されることを他系の制御装置３０に知らせるために、制御装置３０の制御部３２に対して「メモリ給電異常」である旨の情報を通知する。なお、制御装置１０は、制御装置３０より後に異常が発生したときは、既に制御装置３０と同期していないため、当該情報を制御装置３０に対して通知しないものとしても良い。
【０１０１】
データ非最新情報書込部９２０は、メモリ１３上のデータが最新でない旨の情報が制御部３２のデータ破棄指示部９４０から通知されると、メモリ１３上のデータが最新でない旨のデータ非最新情報をメモリ１３に書き込む。ここで、データ非最新情報とは、メモリ１３上のデータが最新でないことを示す情報である。制御装置３０よりも先行して制御装置１０に異常が発生したとき、制御装置１０は入出力処理を先行して終了するため、制御装置１０のメモリ１３上のデータは制御装置３０のメモリ３３上のデータよりも古くなる。すなわち、メモリ１３上のデータは最新ではないことになる。
【０１０２】
データ破棄判定部９３０は、メモリ１３を用いて、自装置のメモリ１３上のデータが最新のデータであるか否かを判定する。具体的には、データ破棄判定部９３０は、データ有り判定部（揮発メモリ）１３３からメモリ１３に入出力処理の対象となっていたデータがあることが通知されると、メモリ１３にデータ非最新情報があるか否かを判定する。そして、データ破棄判定部９３０は、メモリ１３にデータ非最新情報があると判定されるとき、メモリ１３上のデータが最新のデータでないため、メモリ１３上のデータが最新でないことをメモリ初期化部１３５に通知する。一方、データ破棄判定部９３０は、メモリ１３にデータ非最新情報がないと判定されるとき、メモリ１３上のデータが最新のデータであるため、メモリ１３上のデータが最新であることを処理継続部１３４に通知する。
【０１０３】
データ破棄指示部９４０は、制御装置１０の異常通知部９１０から「メモリ給電異常」である旨を示す情報が通知されると、制御装置１０が「メモリ給電異常」によって自装置（制御装置３０）より先行して入出力処理を停止することになり、制御装置１０のメモリ１３上のデータが自装置（制御装置３０）のメモリ３３上のデータより古いことになるため、制御装置１０のメモリ１３上のデータが最新でない旨の情報をデータ非最新情報書込部９２０に通知する。
【０１０４】
次に、実施例３に係る制御装置の処理を、図１０を参照して説明する。図１０は、実施例３に係る制御装置の処理を示すフローチャートである。なお、制御装置１０が、制御装置３０より先行して、入出力処理中にＡＣ電源からメモリ１３への給電が停止されるものとして説明する。
【０１０５】
まず、異常処理部１２０の異常監視部１２１は、電源管理部１６や制御装置１０+-内の個々の装置から出力される「メモリ給電異常」の通知を監視して、「メモリ給電異常」が検知されたか否かを判定する（Ｓ４１０）。このとき、異常監視部１２１は、「メモリ給電異常」が検知されないとき（Ｓ４１０Ｎｏ）、「メモリ給電異常」が検知されるまで、同様の判定処理を繰り返す。
【０１０６】
一方、異常監視部１２１は、「メモリ給電異常」が検知されるとき（Ｓ４１０Ｙｅｓ）、「メモリ給電異常」であることをデータ有り情報書込部１２２および異常通知部９１０に通知する。なお、図１０の例では、制御装置１０が、制御装置３０より先行して、ＡＣ電源からメモリ１３への給電が停止されているため、異常監視部１２１によって検知される「メモリ給電異常」は、例えば停電以外の給電異常および制御装置内に搭載される装置（ＣＰＵ等）の故障等の異常を含んでいる。
【０１０７】
「メモリ給電異常」であることが通知された異常通知部９１０は、自装置が「メモリ給電異常」である旨の情報を他系の制御装置３０のデータ破棄指示部９４０に通知する（Ｓ４２０）。また、自装置が「メモリ給電異常」であることが通知されたデータ有り情報書込部１２２は、メモリ１３にデータがあることを示す情報をフラッシュメモリ１４に書き込む（Ｓ４３０）。なお、制御装置１０は、制御装置３０より先行して「メモリ給電異常」が発生したため、制御装置３０によって、メモリ１３上のデータが最新でないことを示す情報をフラッシュメモリ１４に書き込まれる。
【０１０８】
また、他系の制御装置３０のデータ破棄指示部９４０からメモリ１３上のデータが最新でない旨の情報が通知されたデータ非最新情報書込部９２０は、メモリ１３上のデータが最新でない旨のデータ非最新情報をメモリ１３に書き込む（Ｓ４４０）。
【０１０９】
そして、バッテリ１５は、メモリ１３に給電を開始する（Ｓ４５０）。その後、制御装置１０はシャットダウンして、ＡＣ電源からの給電が停止される。
【０１１０】
引き続き、制御装置１０がＡＣ電源から再び給電されると、起動検知部１３１は、ＡＣ電源が投入されたことを検知して（Ｓ４６０）、ＡＣ電源が投入されたことをデータ有り判定部（不揮発メモリ）１３２に通知する。
【０１１１】
ＡＣ電源が投入されたことが通知されたデータ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常であるか否かを判定する（Ｓ４７０）。具体的には、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４に対してメモリ１３にデータがあることを示す情報を読み出すとき、読み出し異常であるか否かを判定する。
【０１１２】
フラッシュメモリ１４が異常であると判定されると（Ｓ４７０Ｙｅｓ）、データ有り判定部（不揮発メモリ）１３２は、フラッシュメモリ１４が異常である旨をデータ有り判定部（揮発メモリ）１３３に通知する。
【０１１３】
フラッシュメモリ１４が異常である旨がデータ有り判定部（不揮発メモリ）１３２から通知されたデータ有り判定部（揮発メモリ）１３３は、メモリ１３の任意のアドレスからデータを読み出して、データの誤りが検出されるか否かを判定する（Ｓ４８０）。
【０１１４】
データの誤りが検出されないと判定されると（Ｓ４８０Ｎｏ）、データ有り判定部（揮発メモリ）１３３は、メモリ１３のデータに誤り検出符号が付加されていることがわかるため、メモリ１３に入出力処理の対象となっていたデータがあることをデータ破棄判定部９３０に通知する。
【０１１５】
一方、データの誤りが検出されると判定されると（Ｓ４８０Ｙｅｓ）、メモリ１３に入出力処理の対象となっていたデータがないことをメモリ初期化部１３５に通知する。
【０１１６】
メモリ１３に入出力処理の対象となっていたデータがあることがデータ有り判定部（揮発メモリ）１３３から通知されたデータ破棄判定部９３０は、メモリ１３にデータ非最新情報があるか否かを判定する（Ｓ４９０）。
【０１１７】
メモリ１３にデータ非最新情報がないと判定されると（Ｓ４９０Ｎｏ）、データ破棄判定部９３０は、メモリ１３のデータが最新であるため、メモリ１３上のデータが最新であることを処理継続部１３４に通知する。そして、処理継続部１３４は、メモリ１３に保持されたデータを用いて、入出力処理を継続する（Ｓ５２０）。
【０１１８】
一方、メモリ１３にデータ非最新情報があると判定されると（Ｓ４９０Ｙｅｓ）、データ破棄判定部９３０は、メモリ１３のデータが最新でないため、メモリ１３上のデータが最新でないことをメモリ初期化部１３５に通知する。そして、メモリ初期化部１３４は、メモリ１３を初期化する（Ｓ５３０）。
【０１１９】
なお、フラッシュメモリ１４が正常であると判定された場合（Ｓ４７０Ｎｏ）の処理は、実施例２に係る制御装置の処理（図６：Ｓ２９０〜Ｓ３２０）と同様であるため、説明を省略する（Ｓ５００〜Ｓ５３０）。
【０１２０】
ここで、図１１を参照して、実施例３に係る制御装置の復旧動作の例について説明する。図１１の例では、制御装置１０および制御装置３０に先後して「メモリ給電異常」が発生して、先行して「メモリ給電異常」が発生した制御装置１０のフラッシュメモリ１４に異常が発生した場合について説明する。なお、制御装置１０が、制御装置３０より先行して、「メモリ給電異常」が発生しているため、この「メモリ給電異常」は、例えば停電以外の給電異常および制御装置内に搭載される装置（ＣＰＵ等）の故障等の異常を含んでいる。
【０１２１】
図１１に示すように、制御装置１０に制御装置３０より先行して「メモリ給電異常」が発生すると、「メモリ給電異常」が発生していない制御装置３０は、制御装置１０に「メモリ給電異常」が発生していることを検出して（ステップ（１））、制御装置１０との同期を停止する（ステップ（２））。そして、制御装置３０は、制御装置１０にメモリ１３上のデータを破棄させるために、メモリ１３上のデータが最新でない旨の情報を通知する（ステップ（３））。メモリ１３上のデータが最新でない旨の情報が通知された制御装置１０は、メモリ１０にデータ非最新情報を書き込む。なお、このとき、制御装置１０は、フラッシュメモリ１４にメモリ１３上にデータが最新でない情報を、制御装置３０によって書き込まれる。
【０１２２】
その後、制御装置３０に「メモリ給電異常」が発生して両方の制御装置（１０、３０）がシャットダウンすることになると、その後、ＡＣ電源が再投入される。すると、制御装置１０は、フラッシュメモリ１４が異常であるためメモリ１３にデータがあることを示す情報およびメモリ１３上のデータが最新でない情報が保持されたフラッシュメモリ１４からこれらの情報を参照できず、メモリ１３を参照してメモリ１３上のデータが最新であるか否かを判定する。ここで、制御装置１０は、制御装置３０によって通知されたメモリ１３上のデータが最新でない旨のデータ非最新情報がメモリ１３に保持されているため、メモリ１３上のデータが最新でないと判定して、メモリ１３上のデータを破棄する。これにより、制御装置１０は、メモリ１３上の最新でないデータを正しく破棄することができ、メモリ１３上の最新でないデータを用いて自装置を誤って復旧することから回避することができる。
【０１２３】
一方、制御装置３０は、フラッシュメモリ３４に異常が発生していないときは、フラッシュメモリ３４を参照して、メモリ３３上のデータが最新でない旨の情報が保持されていないため、メモリ３３上のデータを用いて自装置を復旧する。制御装置３０が自装置の復旧時に、仮に新たに何らかの異常が発生しても、制御装置３０は、後に制御装置１０のメモリ１３上の最新でないデータを用いて、メモリ３３を誤って復旧することから回避することができる。
【０１２４】
なお、後に「メモリ給電異常」が発生した制御装置３０のフラッシュメモリ１４に異常が発生した場合については、制御装置３０は、制御装置１０より後に「メモリ給電異常」が発生しているため、メモリ３３にはデータ非最新情報が保持されておらず最新のデータが保持されていることがわかり、メモリ３３上の最新のデータを用いて自装置を正しく復旧することができる。
【０１２５】
以上のように本実施例によれば、制御装置１０は、ＡＣ電源からメモリ１３への給電が停止されることを検知したとき、ＡＣ電源からメモリ１３への給電が停止されることを自装置と同期中の制御装置３０に通知する。その後、制御装置１０は、当該通知に対する応答として、メモリ１３に保持されているデータが最新でない旨のデータ非最新情報を制御装置３０から取得して、当該データ非最新情報をメモリ１３に書き込む。そして、制御装置１０は、メモリ１３にデータ非最新情報が保持されているか否かを判定して、メモリ１３にデータ非最新情報が保持されていると判定されたとき、メモリ１３に保持されたデータを用いて入出力処理を継続する。
【０１２６】
このようにして、制御装置１０は、仮にフラッシュメモリ１４に異常があっても、メモリ１３に保持されたデータ非最新情報を参照してメモリ１３上のデータが最新であるか否かを判定できるため、メモリ１３上のデータが最新であるときは入出力処理を継続することができ、ＡＣ電源からメモリ１３への給電が停止された直前に入出力処理に用いられていたデータを有効に活用することができる。
【０１２７】
なお、制御装置１０および制御装置３０にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ（Micro Processing Unit）、ＭＣＵ（Micro Controller Unit）等のマイクロ・コンピュータ）および当該ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）にて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現されても良い。
【０１２８】
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
【０１２９】
（付記１）上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、
前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、
前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、
を備えることを特徴とする制御装置。
【０１３０】
（付記２）前記判定手段は、
前記処理に用いられたデータが前記保持手段に保持されていることを示す情報を保持する不揮発性メモリが異常であるとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定することを特徴とする付記１に記載の制御装置。
【０１３１】
（付記３）前記判定手段は、
前記保持手段によって保持されたデータにＥＣＣが付加されているか否かを判定することを特徴とする付記１または付記２に記載の制御装置。
【０１３２】
（付記４）前記判定手段は、
誤り検出符号が付加される情報データの単位長さに相当する情報データ部分と、当該情報データ部分に付加される誤り検出符号の長さに相当する誤り検出符号部分と、を前記保持手段から読み出す読出手段と、
前記読出手段によって読み出された情報データ部分について、誤り検出符号部分を用いて誤り検出する誤り検出手段と、を含み、
前記誤り検出手段によって誤りなしの結果が得られた場合に、誤り検出符号が付加されていると判定することを特徴とする付記１から付記３のいずれか１つに記載の制御装置。
【０１３３】
（付記５）前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、前記処理中のデータが保持されていることを示す情報を前記保持手段に書き込むデータ有り情報書込手段と、
前記データ有り情報書込手段によって書き込まれた情報が、前記保持手段に保持されているか否かを判定するデータ有り情報判定手段と、をさらに備えることを特徴とする付記１から付記４のいずれか１つに記載の制御装置。
【０１３４】
（付記６）前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、給電を停止させる要因を示す異常要因情報を前記保持手段に書き込む異常要因書込手段と、
前記異常要因書込手段によって書き込まれた異常原因情報が、自装置に同期する他の装置においても自装置と同時に異常を引き起こす要因を示すか否かを判定する異常要因判定手段をさらに備え、
前記継続手段は、
前記異常要因判定手段によって前記異常原因情報が、前記他の装置においても自装置と同時に異常を引き起こす要因を示すとき、前記保持手段によって保持されたデータを用いて前記処理を継続することを特徴とする付記１に記載の制御装置。
【０１３５】
（付記７）前記異常要因判定手段によって前記異常原因情報が、前記他の装置において自装置とは異なる時に異常を引き起こす要因を示すとき、前記保持手段によって保持されたデータを破棄する破棄手段をさらに備えることを特徴とする付記６に記載の制御装置。
【０１３６】
（付記８）前記主電源から前記保持手段への給電が停止されることを検知する検知手段と、
前記検知手段によって前記主電源から前記保持手段への給電が停止されることが検知されたとき、前記保持手段への給電が停止されることを自装置と同期中の他の装置に通知する通知手段と、
前記通知手段による通知に対する応答として、前記保持手段に保持されているデータが最新でない旨の情報を前記他の装置から取得する取得手段と、
前記取得手段によって取得された情報を前記保持手段に書き込む非最新情報書込手段と、をさらに備えることを特徴とする付記１に記載の制御装置。
【０１３７】
（付記９）データを記憶する複数の記憶装置および前記複数の記憶装置を制御する制御装置を備えるストレージ装置であって、
前記制御装置は、
上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持手段と、
前記主電源から前記保持手段への給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持手段によって保持されたデータに誤り検出符号が付加されているか否かを判定する判定手段と、
前記判定手段によって判定された結果、前記保持手段によって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持手段によって保持されたデータを用いて前記処理を継続する継続手段と、
を備えることを特徴とするストレージ装置。
【０１３８】
（付記１０）上位装置から指示された処理中に、前記処理に用いられるデータを主電源から給電して保持する保持ステップと、
前記主電源から前記保持ステップへの給電が停止された後再び前記主電源からの給電が開始されたとき、前記保持ステップによって保持されたデータに誤り検出符号が付加されているか否かを判定する判定ステップと、
前記判定ステップによって判定された結果、前記保持ステップによって保持されたデータに誤り検出符号が付加されていると判定されたとき、前記保持ステップによって保持されたデータを用いて前記処理を継続する継続ステップと、
を含むことを特徴とする制御方法。
【図面の簡単な説明】
【０１３９】
【図１】実施例１に係るＲＡＩＤシステムの全体構成の一例を示す図である。
【図２】実施例１に係る制御部の構成を示す機能ブロック図である。
【図３】実施例１に係る制御装置の処理を示すフローチャートである。
【図４】実施例２に係るＲＡＩＤシステムの全体構成の一例を示す図である。
【図５】実施例２に係る制御部の構成を示す機能ブロック図である。
【図６】実施例２に係る制御装置の処理を示すフローチャートである。
【図７】異常要因が停電の場合の制御装置の復旧動作を示す図である。
【図８】異常要因が停電以外の場合の制御装置の復旧動作を示す図である。
【図９】実施例３に係る制御部の構成を示す機能ブロック図である。
【図１０】実施例３に係る制御装置の処理を示すフローチャートである。
【図１１】実施例３に係る制御装置の復旧動作の例を示す図である。
【図１２】従来の停電時におけるＲＡＩＤ装置のコントローラの構成の例を示す図である。
【図１３】従来のＲＡＩＤ装置のコントローラの構成の例を示す図である。
【図１４】同時に異常が発生した場合のＲＡＩＤ装置のコントローラの復旧動作を示す図である。
【図１５】時間差で異常が発生した場合のＲＡＩＤ装置のコントローラの復旧動作を示す図である。
【符号の説明】
【０１４０】
１２  制御部
１２０  異常処理部
１２１  異常監視部
１２２  データ有り情報書込部
１３０  復旧処理部
１３１  起動検知部
１３２  データ有り判定部（不揮発メモリ）
１３３  データ有り判定部（揮発メモリ）
１３４  処理継続部
１３５  メモリ初期化部
【図１】
2010146362.tif 000003
【図２】
2010146362.tif 000004
【図３】
2010146362.tif 000005
【図４】
2010146362.tif 000006
【図５】
2010146362.tif 000007
【図６】
2010146362.tif 000008
【図７】
2010146362.tif 000009
【図８】
2010146362.tif 000010
【図９】
2010146362.tif 000011
【図１０】
2010146362.tif 000012
【図１１】
2010146362.tif 000013
【図１２】
2010146362.tif 000014
【図１３】
2010146362.tif 000015
【図１４】
2010146362.tif 000016
【図１５】
2010146362.tif 000017