(57)【要約】      （修正有）【課題】複数の記憶装置を関連付けて制御する場合において、起動途中の記憶装置に対して、上位装置からアクセスが発生した際に好適に対応する仕組みを提供する【解決手段】本記憶制御装置は、上位装置と、複数の記憶装置とに接続され、複数の記憶装置の何れかへのライト要求を上位装置から受信する。ここで、本記憶制御装置は、複数の記憶装置のうちライト要求のアクセス先に指定された記憶装置がまだ起動していない場合に、当該ライト要求に係るデータを保留し、アクセス先に指定された記憶装置がレディ状態になると、保留したライト要求に係るデータを当該記憶装置に書き込む。【選択図】図２
2019061483.tif 000002
【特許請求の範囲】
【請求項１】
上位装置と、複数の記憶装置とに接続された記憶制御装置であって、
前記複数の記憶装置の何れかへのライト要求を前記上位装置から受信する受信手段と、
前記複数の記憶装置のうち前記ライト要求のアクセス先に指定された記憶装置がまだ起動していない場合に、当該ライト要求に係るデータを保留する保留手段と、
前記アクセス先に指定された記憶装置がレディ状態になると、前記保留手段によって保留された前記ライト要求に係るデータを該記憶装置に書き込む書込手段と
を備えることを特徴とする記憶制御装置。
【請求項２】
前記保留手段は、前記複数の記憶装置のうち既にレディ状態である記憶装置に前記ライト要求に係るデータを書き込むことによって該データを保留することを特徴とする請求項１に記載の記憶制御装置。
【請求項３】
前記保留手段は、前記記憶制御装置に設けられたＲＡＭに、前記ライト要求に係るデータを書き込むことによって該データを保留することを特徴とする請求項１に記載の記憶制御装置。
【請求項４】
前記保留手段は、前記記憶制御装置に設けられたフラッシュメモリに、前記ライト要求を保留していること、及び前記ライト要求に係るデータを保留している場所を示す保留情報を格納し、
前記書込手段は、前記保留手段によって前記フラッシュメモリに格納された保留情報を参照して、保留された前記ライト要求に係るデータを取得することを特徴とする請求項１乃至３の何れか１項に記載の記憶制御装置。
【請求項５】
前記書込手段は、前記複数の記憶装置の全てがレディ状態にある場合に、ライト要求を受け付けると、前記複数の記憶装置の全てに対して該ライト要求に係るデータを書き込むことを特徴とする請求項１乃至４の何れか１項に記載の記憶制御装置。
【請求項６】
前記書込手段は、前記保留手段によって保留された前記ライト要求に係るデータを当該記憶装置に書き込む際に、前記上位装置からの他のアクセス要求を前記受信手段によって受信すると、前記ライト要求に係るデータを当該記憶装置に書き込む前に、前記上位装置からの他のアクセス要求を優先して処理することを特徴とする請求項１乃至５の何れか１項に記載の記憶制御装置。
【請求項７】
前記複数の記憶装置の何れか１つがレディ状態になると前記上位装置にアクセス許可を通知する通知手段をさらに備えることを特徴とする請求項１乃至６の何れか１項に記載の記憶制御装置。
【請求項８】
前記複数の記憶装置の何れか１つがレディ状態になった際に、前記保留手段によって保留された前記ライト要求に係るデータがあれば、前記通知手段による通知の前に、前記書込手段による書き込みが行われることを特徴とする請求項７に記載の記憶制御装置。
【請求項９】
前記複数の記憶装置は、少なくとも１つのＳＳＤ（Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅ）と、前記ＳＳＤよりも起動が遅い、少なくとも１つのＨＤＤ（Ｈａｒｄ Ｄｉｓｋ Ｄｒｉｖｅ）を含むことを特徴とする請求項１乃至８の何れか１項に記載の記憶制御装置。
【請求項１０】
前記ＳＳＤと前記ＨＤＤとの間でミラーリングを実行する実行手段をさらに備えることを特徴とする請求項９に記載の記憶制御装置。
【請求項１１】
前記ＳＳＤと前記ＨＤＤとは、１つの記憶装置として取り扱われることを特徴とする請求項９に記載の記憶制御装置。
【請求項１２】
情報処理装置であって、
上位装置と、
複数の記憶装置と、
請求項１乃至１１の何れか１項に記載の記憶制御装置と
を備えることを特徴とする情報処理装置。
【請求項１３】
上位装置と、複数の記憶装置とに接続された記憶制御装置の制御方法であって、
受信手段が、前記複数の記憶装置の何れかへのライト要求を前記上位装置から受信する受信工程と、
保留手段が、前記複数の記憶装置のうち前記ライト要求のアクセス先に指定された記憶装置がまだ起動していない場合に、当該ライト要求に係るデータを保留する保留工程と、
書込手段が、前記アクセス先に指定された記憶装置がレディ状態になると、前記保留工程で保留された前記ライト要求に係るデータを該記憶装置に書き込む書込工程と
を含むことを特徴とする記憶制御装置の制御方法。
【請求項１４】
上位装置と、複数の記憶装置とに接続された記憶制御装置の制御方法における各工程をコンピュータに実行させるためのプログラムであって、前記制御方法は、
受信手段が、前記複数の記憶装置の何れかへのライト要求を前記上位装置から受信する受信工程と、
保留手段が、前記複数の記憶装置のうち前記ライト要求のアクセス先に指定された記憶装置がまだ起動していない場合に、当該ライト要求に係るデータを保留する保留工程と、
書込手段が、前記アクセス先に指定された記憶装置がレディ状態になると、前記保留工程で保留された前記ライト要求に係るデータを該記憶装置に書き込む書込工程と
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置、その制御方法、プログラム、及び情報処理装置に関するものである。
【背景技術】
【０００２】
記憶制御装置には、記憶装置（例えば、Ｈａｒｄ Ｄｉｓｋ Ｄｒｉｖｅ、以下ではＨＤＤと略記する。）に格納するデータの保護を目的として、複数の記憶装置に同一のデータを格納するミラーリング（ＲＡＩＤ１）を行うものがある。ミラーリングを行う記憶制御装置は、上位装置であるホストと接続され、ホストから見ると１つの記憶装置のように振る舞う。
【０００３】
ＨＤＤは、磁性体を塗布したディスクを高速回転し、磁気ヘッドを移動することで、情報を記録し読み出す記憶装置である。しかし、電源を投入してからディスクが所定の回転速度に達して、データのリードライトが可能になるまでに長い時間（スピンアップ時間）を要する。
【０００４】
一方、近年半導体記憶素子であるフラッシュメモリを搭載したＳＳＤ（Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅ）が普及してきており、ＳＳＤはＨＤＤと比較して、以下の特徴を持っている。
・スピンアップが不要なため起動時間が短い。
・データのリード、ライトが高速。
・記憶容量あたりの単価が高い。
そのため、ミラーリングを構成する記憶装置の全てにＳＳＤを搭載すれば高速な情報処理装置を構築できるが、非常に高価になってしまう。そこで、高速なＳＳＤと安価なＨＤＤという異なるデバイスを用いてミラーリングを行うことが考えられている。
【０００５】
しかし、起動時間の短いＳＳＤを使用しても従来の記憶制御装置では複数の記憶装置に同一データを格納するために、接続されている全ての記憶装置の起動完了を待ってから、ホストに対して起動の完了を通知していた。このような起動完了までの待機時間を低減するために、特許文献１は、ミラーリングでのリード動作については１つの記憶装置のみで完結するため、１つの記憶装置の起動完了のみをもって、ホストに対して起動の完了を通知することを提案している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１６−１４６０８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記従来技術には以下に記載する課題がある。例えば、上記従来技術においては、リード動作のみに対応しており、ライト動作には対応していない。従って、上記従来技術では、ホストからライトの要求が発生すると、全ての記憶装置の起動を待つ必要がある。このように、ホストの処理が待たされてしまうという課題はまだ解決されていない。
【０００８】
本発明は、上述の問題の少なくとも一つに鑑みて成されたものであり、複数の記憶装置を関連付けて制御する場合において、起動途中の記憶装置に対して、上位装置からアクセスが発生した際に好適に対応する仕組みを提供することを目的とする。
【０００９】
記憶装置において、上位装置からアクセスが発生した際に好適に対応する仕組みを提供することをさらに別の目的とする。
【課題を解決するための手段】
【００１０】
本発明は、上位装置と、複数の記憶装置とに接続された記憶制御装置であって、前記複数の記憶装置の何れかへのライト要求を前記上位装置から受信する受信手段と、前記複数の記憶装置のうち前記ライト要求のアクセス先に指定された記憶装置がまだ起動していない場合に、当該ライト要求に係るデータを保留する保留手段と、前記アクセス先に指定された記憶装置がレディ状態になると、前記保留手段によって保留された前記ライト要求に係るデータを該記憶装置に書き込む書込手段とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、複数の記憶装置を関連付けて制御する場合において、起動途中の記憶装置に対して、上位装置からアクセスが発生した際に好適に対応することができる。また、本発明によれば、記憶装置において、上位装置からアクセスが発生した際に好適に対応することができる。
【図面の簡単な説明】
【００１２】
【図１】一実施形態に係る印刷システムの構成を示す概略図。
【図２】一実施形態に係る記憶装置制御部１１１の内部構成を示すブロック図。
【図３】一実施形態に係る起動時のシーケンス図。
【図４】一実施形態に係る記憶装置制御部の動作を表すフローチャート。
【図５】一実施形態に係るシングルモード時の動作を表すフローチャート。
【図６】一実施形態に係るリカバリモード時の動作を表すフローチャート。
【図７】一実施形態に係るミラーリングモード時の動作を表すフローチャート。
【図８】一実施形態に係るライト保留レジスタの構成を示す概略図。
【図９】一実施形態に係る記憶装置制御部１１１の内部構成を示すブロック図。
【図１０】一実施形態に係るライト保留レジスタの構成を示す概略図。
【図１１】一実施形態に係るシングルモード時の動作を表すフローチャート。
【図１２】一実施形態に係るリカバリモード時の動作を表すフローチャート。
【図１３】一実施形態に係るリカバリモード時の動作を表すフローチャート。
【図１４】一実施形態に係る記憶装置制御部の動作を表すフローチャート。
【図１５】一実施形態に係る縮退モード時の動作を表すフローチャート。
【図１６】一実施形態に係るＪＢＯＤの概要を表す図。
【図１７】一実施形態に係る記憶装置制御部の動作を表すフローチャート。
【図１８】一実施形態に係るシングルモード時の動作を表すフローチャート。
【図１９】一実施形態に係るリカバリモード時の動作を表すフローチャート。
【図２０】一実施形態に係るハイブリッドモード時の動作を表すフローチャート。
【図２１】一実施形態に係るライト保留レジスタの構成を示す概略図。
【発明を実施するための形態】
【００１３】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確立されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１４】
＜第１の実施形態＞
＜印刷システムの構成＞
以下では、本発明の第１の実施形態について説明する。まず、図１を参照して、本実施形態に係る、印刷システムの構成例について説明する。本印刷システムは、情報処理装置の一例である印刷装置１００とパーソナルコンピュータ（以下、ＰＣと略記する。）１２０とで構成され、これらがＬＡＮ（Ｌｏｃａｌ ａｒｅａ ｎｅｔｗｏｒｋ）等のネットワーク１３０を介して接続されている。印刷装置１００は、メイン制御部１０１、記憶装置制御部１１１、操作部１１２、スキャナ部１１３、プリンタ部１１４、ＳＳＤ１１５、及びＨＤＤ１１６を含んで構成される。また、メイン制御部１０１は、メインＣＰＵ１０２、ＲＯＭ１０３、ＲＡＭ１０４、ＬＡＮ−ＩＦ（インタフェース）１０５、フラッシュメモリ１０６、及び画像処理部１０７を備える。
【００１５】
メインＣＰＵ１０２は、ＲＯＭ１０３に記憶されたプログラムをＲＡＭ１０４に読み出して実行することにより、各部の制御や各種演算処理を実現する。ＲＯＭ１０３は、不揮発性メモリであり、ＢＩＯＳ（Ｂａｓｉｃ Ｉｎｐｕｔ／Ｏｕｔｐｕｔ Ｓｙｓｔｅｍ）プログラムや制御パラメータ等が格納される。フラッシュメモリを接続すれば、オンボードでの書き換えも可能である。ＲＡＭ１０４は、ＤＲＡＭ等の揮発性メモリであり、プログラムの作業領域や印刷データの格納領域等の用途に用いられる。
【００１６】
ＬＡＮ−ＩＦ１０５は、印刷装置１００に接続されるＬＡＮ１３０とのインタフェースであり、一般的にはＴＣＰ／ＩＰプロトコルに対応する。ネットワークケーブルを介して外部のパーソナルコンピュータ１２０などのネットワーク対応機器と接続され、ネットワーク経由での印刷処理を行うことができる。また、ルータを介してインターネットに接続することも可能である。
【００１７】
フラッシュメモリ１０６には、起動プログラム、各種アプリケーションプログラム及び各種パラメータ等が格納されている。画像処理部１０７は、ＬＡＮ−ＩＦ１０５又はスキャナ部１１３で取り込んだ画像データに対して、各種画像処理を実行する。操作部１１２には、不図示の操作パネル上の液晶画面表示やボタン等が設けられ、それらを操作することにより印刷装置１００の各種設定及び状態の確認をすることができる。スキャナ部１１３はＣＣＤ等の読み取り素子を用いて画像をデジタルデータとして読み取る。プリンタ部１１４は、不図示のプリントエンジンと給紙系及び排紙系から構成され、画像処理部１０７で処理した画像データを紙等に印刷する。
【００１８】
ＳＳＤ１１５及びＨＤＤ１１６は、アプリケーションプログラムの設定パラメータや印刷処理時の一時的な作業領域及びユーザデータの格納場所として利用される。記憶装置制御部１１１は、メイン制御部１０１内のメインＣＰＵ１０２とＳＳＤ１１５及びＨＤＤ１１６との中間に位置し、それら各々のデバイスとＳＡＴＡ（Ｓｅｒｉａｌ Ａｄｖａｎｃｅｄ Ｔｅｃｈｎｏｌｏｇｙ Ａｔｔａｃｈｍｅｎｔ）規格に準拠したインタフェースで接続される。また、記憶装置制御部１１１はＳＳＤ１１５、ＨＤＤ１１６等のストレージデバイスを制御する機能に加え、ＳＳＤ１１５とＨＤＤ１１６の同一のデータを格納するミラーリング機能を有する。即ち、ホストであるメインＣＰＵ１０２からのライトデータをＳＳＤ１１５とＨＤＤ１１６の両方に書き込む。一方、ホストからのリード要求に対しては、ＳＳＤ１１５及びＨＤＤ１１６の何れかからデータを読み出し、このリードデータをメインＣＰＵ１０２へ転送する。
【００１９】
ここでは、記憶装置制御部１１１、ＳＳＤ１１５、及びＨＤＤ１１６をメイン制御部１０１に接続される外部装置として構成している。しかし、本発明はこれに限定されず、例えば、記憶装置制御部１１１、ＳＳＤ１１５、及びＨＤＤ１１６をメイン制御部１０１の内部に組み込んで構成してもよい。
【００２０】
＜記憶装置制御部の構成＞
次に、図２を参照して、本実施形態に係る記憶装置制御部１１１の内部構成例について説明する。記憶装置制御部１１１は、ＣＰＵ２０１、メモリ制御部２０２、フラッシュメモリ２０３、ＲＡＭ２０４、ＳＡＴＡ−Ｄｅｖｉｃｅ制御部２０５、ＳＡＴＡ−Ｈｏｓｔ制御部２０６、２０７、ＳＡＴＡ−ＩＦ＿Ｈ２０８及びＳＡＴＡ−ＩＦ＿Ｄ２０９、２１０を備える。各部は、システムバス２１１によって構成される。
【００２１】
ＣＰＵ２０１は、システム制御や各種演算処理を行う。メモリ制御部２０２は、各種メモリデバイスへの入出力制御やＤＭＡ制御を行う。フラッシュメモリ２０３は、書き換え可能な不揮発性メモリであり、制御プログラムや暗号/復号化プログラム及び制御パラメータ等が格納される。また、フラッシュメモリ２０３には、ライト保留レジスタ２２０が設けられる。ライト保留レジスタは、ストレージへのライトができない場合にライト情報を保持しておくためのもので、図８に示すように構成されている。
【００２２】
図８に示すように、ライト保留レジスタ２２０は、ライトアドレス８０１、データサイズ８０２、及びこれらライト情報が有効か否かを示す有効ビット８０３を格納する領域を含んで構成される。有効ビット８０３は、「１」で有効、即ちライトアクセスが保留された状態を示し、「０」で無効、即ち保留されたライトアクセスが実行されたことを示す。つまり、有効ビット８０３が「１」であれば、ライト命令が保留されていることを示す。本実施形態では、ライト保留レジスタ２２０を記憶装置制御部１１１のフラッシュメモリ２０３内に設ける一例を説明したが、本発明を限定する意図はなく、例えば、ライト要求に係るデータを保留（保持）する先の記憶装置、例えばＳＳＤ１１５に設けてもよい。これにより、記憶装置制御部１１１におけるフラッシュメモリ２０３の容量を低減することができる。
【００２３】
図２の説明に戻る。ＲＡＭ２０４は、書き換え可能で高速にアクセスできる揮発性メモリであり、フラッシュメモリ２０３に格納されたプログラムの一部のロードやその作業領域、データのバッファ領域として用いられる。ＳＡＴＡ−Ｄｅｖｉｃｅ制御部２０５は、ＳＡＴＡ規格に準拠したインタフェースであるＳＡＴＡ−ＩＦ＿Ｈ２０８を介してＳＡＴＡ−Ｈｏｓｔであるメイン制御部１０１内のメインＣＰＵ１０２（以下、「ホスト」と称する。）と接続される。ＳＡＴＡ−Ｄｅｖｉｃｅ制御部２０５は、ホストからのデータ入出力要求に対する制御処理を行う。
【００２４】
ＳＡＴＡ−Ｈｏｓｔ制御部２０６は、ＳＡＴＡ規格に準拠したインタフェースであるＳＡＴＡ−ＩＦ＿Ｄ２０９を介してＳＡＴＡ−ＤｅｖｉｃｅであるＳＳＤ１１５と接続され、ＳＳＤ１１５とのデータ入出力制御を行う。また、ＳＡＴＡ−Ｈｏｓｔ制御部２０７は、ＳＡＴＡ規格に準拠したインタフェースであるＳＡＴＡ−ＩＦ＿Ｄ２１０を介してＳＡＴＡ−ＤｅｖｉｃｅであるＨＤＤ１１６と接続され、ＨＤＤ１１６とのデータ入出力制御を行う。即ち、記憶装置制御部１１１は、“ホスト”であるメインＣＰＵ１０２から“デバイス”であるＳＳＤ１１５及びＨＤＤ１１６へのデータ入出力要求に対してＳＡＴＡ−ＳＡＴＡブリッジ装置としての機能を有する。システムバス２１１は、制御バス、データバス及び任意ブロック間のローカルバスを便宜的にまとめて表現したものである。
【００２５】
＜省電力モードからの復帰シーケンス＞
次に、図３を参照して、本実施形態に係る省電力モードから通常モードへの復帰シーケンスについて説明する。ここでのシーケンスは、メインＣＰＵ１０２、記憶装置制御部１１１、ＳＳＤ１１５及びＨＤＤ１１６間の復帰シーケンスを時系列に表現したものである。ＳＡＴＡ規格によれば、まず電源オン時に所定のシーケンス処理を経て各ＩＦ間の通信リンクを確立することが必要である。以下ではリンク確立までの過程を時系列に説明する。
【００２６】
まず、印刷装置１００に電源が投入された後、メインＣＰＵ１０２と記憶装置制御部１１１との間でＯＯＢ（Ｏｕｔ  ｏｆ  Ｂａｎｄ）シーケンス３０１と呼ばれる特定コマンド（ＣＯＭＲＥＳＥＴ、ＣＯＭＩＮＩＴ、ＣＯＭＷＡＫＥ）の相互送信が行われる。このＯＯＢシーケンス３０１によりメインＣＰＵ１０２と記憶装置制御部１１１との間で通信リンクが確立する。同様に記憶装置制御部１１１とＳＳＤ１１５との間でもＯＯＢシーケンス３０３が行われ通信リンクが確立する。同様に記憶装置制御部１１１とＨＤＤ１１６との間でもＯＯＢシーケンス３０４が行われ通信リンクが確立する。
【００２７】
ＳＳＤ１１５は、ホスト（メインＣＰＵ１０２）からのコマンドに応答できる状態になったら、ＤＲＤＹ（Ｄｅｖｉｃｅ  Ｒｅａｄｙ）ビットをセット（１をセット）する。そして、ＳＳＤ１１５は、ＤＲＤＹをセットしたＲｅｇＤＨ（Ｒｅｇｉｓｔｅｒ  Ｄｅｖｉｃｅ  ｔｏ  Ｈｏｓｔ）３０５を記憶装置制御部１１１に対して送信する。続いて、記憶装置制御部１１１は、ＲｅｇＤＨを受信すると、メインＣＰＵ１０２に対してＤＲＤＹビットをセットしてＲｅｇＤＨ３０６を送信する。
【００２８】
一方、ＨＤＤ１１６は、ディスクが回転し所定の回転速度に達するまでに数秒〜１０数秒の時間を要するため、すぐにレディ状態にはならない。しかしながら、本実施形態によれば、メインＣＰＵ１０２は、記憶装置制御部１１１からＲｅｇＤＨ（ＤＲＤＹ＝１）を受信しているため、ＨＤＤ１１６のＲｅｇＤＨ（ＤＲＤＹ＝１）状態を待たずにリード３０７やライト３０８のデータアクセスが可能となる。その後、ＨＤＤ１１６からＲｅｇＤＨ（ＤＲＤＹ＝１）を受信したら、それまでのライトのリカバリを実施して、データの整合をとってミラーリング状態となる。このような動作を行う記憶装置制御部１１１の詳細な動作を以下にて説明する。
【００２９】
＜記憶装置制御部の処理手順＞
次に、図４を参照して、記憶装置制御部１１１の動作の処理手順について説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。
【００３０】
まず、Ｓ４０１で、ＣＰＵ２０１は、メインＣＰＵ１０２、ＳＳＤ１１５、及びＨＤＤ１１６の各々とＯＯＢシーケンス処理を行い、通信リンクを確立する。続いて、Ｓ４０２で、ＣＰＵ２０１は、ＳＳＤ１１５又はＨＤＤ１１６からＲｅｇＤＨ（ＤＲＤＹ＝１）が通知されるのを待機すべく、一定時間経過しても通知がない場合にリトライを行うためのリトライタイマーを起動する。そして、Ｓ４０３で、ＣＰＵ２０１は、ＳＳＤ１１５又はＨＤＤ１１６からＲｅｇＤＨ（ＤＲＤＹ＝１）の通知があるか否かを判断する。
【００３１】
Ｓ４０３でＳＳＤ１１５又はＨＤＤ１１６からアクセス許可（Ｄｅｖｉｃｅ Ｒｅａｄｙ）を示すＲｅｇＤＨ（ＤＲＤＹ＝１）の通知があると判断すると（Ｙｅｓ）、Ｓ４０６に進み、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２にＲｅｇＤＨ（ＤＲＤＹ＝１）を通知する。そしてＳ４０７で、ＣＰＵ２０１は、シングルモードのサブルーチンに進む。サブルーチンＳ４０７「シングルモード」については後述する。
【００３２】
一方、Ｓ４０３でＳＳＤ１１５又はＨＤＤ１１６からＲｅｇＤＨ（ＤＲＤＹ＝１）が通知されない場合（Ｎｏ）、Ｓ４０４に進み、ＣＰＵ２０１は、リトライタイマーをチェックし、リトライが必要な時間が経過しているか否かを判断する。Ｓ４０４でリトライが必要な時間が経過していないと判断したら（Ｎｏ）、Ｓ４０３に処理を戻す。一方、リトライが必要な時間が経過していると判断したら（Ｙｅｓ）、Ｓ４０５に進む。
【００３３】
Ｓ４０５で、ＣＰＵ２０１は、リトライ回数をチェックし、リトライ回数が所定の回数を超えたか否かを判断する。Ｓ４０５でリトライ回数が所定の回数を超えていない場合（Ｎｏ）は、ＣＰＵ２０１は、Ｓ４０１に処理を戻し、ＯＯＢシーケンス処理からやり直す。一方、Ｓ４０５でリトライ回数が所定の回数を超えている場合（Ｙｅｓ）は、ＣＰＵ２０１は、異常なエラー状態であると判断し、処理を終了する。
【００３４】
Ｓ４０７の後にＳ４０８に進み、ＣＰＵ２０１は、Ｓ４０３で通知のなかった方のストレージデバイスからのＲｅｇＤＨ（ＤＲＤＹ＝１）の通知を待機し、全てのストレージデバイスからＲｅｇＤＨ（ＤＲＤＹ＝１）が通知されたか否かを判断する。Ｓ４０８で全てのストレージデバイスからＲｅｇＤＨ（ＤＲＤＹ＝１）の通知がない場合（Ｎｏ）、Ｓ４１１に進み、ＣＰＵ２０１は、リトライタイマーをチェックし、リトライが必要な時間が経過しているか否かを判断する。Ｓ４１１でリトライが必要な時間が経過していないと判断したら（Ｎｏ）、Ｓ４０７に処理を戻し、リトライが必要な時間が経過していると判断したら（Ｙｅｓ）、Ｓ４１２に進む。
【００３５】
Ｓ４１２で、ＣＰＵ２０１は、リトライ回数をチェックし、リトライ回数が所定の回数を超えたか否かを判断する。Ｓ４１２でリトライ回数が所定の回数を超えていない場合（Ｎｏ）、Ｓ４１３に移行し、ＣＰＵ２０１は、レディ状態になっていないデバイスに対してＯＯＢシーケンス処理を行う。一方、Ｓ４１２でリトライ回数が所定の回数を超えている場合（Ｙｅｓ）は、片側のストレージデバイスの故障等が考えられるため、縮退モードのサブルーチンであるＳ４１５に進む。サブルーチンＳ４１５の「縮退モード」については後述する。
【００３６】
一方、Ｓ４０８で全てのストレージデバイスからＲｅｇＤＨ（ＤＲＤＹ＝１）の通知がある場合（Ｙｅｓ）、リカバリモードのサブルーチンＳ４０９に進む。サブルーチンＳ４０９の「リカバリモード」については後述する。Ｓ４０９の後、ミラーリングモードのサブルーチンＳ４１０に進む。サブルーチンＳ４１０の「ミラーリングモード」については後述する。
【００３７】
＜シングルモード＞
次に、図５を参照して、上記サブルーチンＳ４０７の「シングルモード」における処理手順について説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。ここで、シングルモードとは、ＳＳＤ１１５及びＨＤＤ１１６の一方が起動した状態で動作するモードのことを示す。
【００３８】
まずＳ５０１で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２からリード要求があるか否かを判断する。Ｓ５０１でメインＣＰＵ１０２からリード要求がある場合（Ｙｅｓ）、Ｓ５０２に進み、ＣＰＵ２０１は、ＲｅｇＤＨ（ＤＲＤＹ＝１）の通知があったストレージデバイス（ここでは仮にＳＳＤ１１５として説明する。）に対してリードアクセスを行う。さらに、ＣＰＵ２０１は、リードしたデータをホスト側のメインＣＰＵ１０２に転送する。そしてメインルーチンに戻る。
【００３９】
一方、Ｓ５０１でメインＣＰＵ１０２からリード要求がない場合（Ｎｏ）Ｓ５０３に進み、ＣＰＵ２０１は、メインＣＰＵ１０２からライト要求があるか否かを判断する。Ｓ５０３でメインＣＰＵ１０２からライト要求がある場合（Ｙｅｓ）、Ｓ５０４に進み、ＣＰＵ２０１は、ＲｅｇＤＨ（ＤＲＤＹ＝１）の通知があったＳＳＤ１１５に対してライトアクセスを行う。ここでは、シングルモードで動作しており、ＳＳＤ１１５はレディ状態であるがＨＤＤ１１６がまだ起動していない状態である。従って、当該ライト要求がＨＤＤ１１６を指定するものであっても、当該ライト要求に係るデータをレディ状態のＳＳＤ１１５に書き込むことにより保留する。続いて、Ｓ５０５で、ＣＰＵ２０１は、フラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３がクリア「０」であるレジスタを検索し、このレジスタに保留情報として、ライトアドレス及びデータサイズを書き込み、有効ビット８０３を「１」にセットする。一方、Ｓ５０３でメインＣＰＵ１０２からライト要求がない場合（Ｎｏ）は、処理を終了し、メインルーチンに戻る。
【００４０】
＜リカバリモード＞
次に、図６を参照して、上記サブルーチンＳ４０９「リカバリモード」における動作を図６のフローチャートにて説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。ここで、リカバリモードとは、シングルモード中にライト要求の保留データが例えばＳＳＤ１１５に保持された場合において、もう一方の記憶装置であるＨＤＤ１１６の起動後に当該保留データを用いて当該ＨＤＤ１１６へライトアクセスを行うモードである。
【００４１】
まずＳ６０１で、ＣＰＵ２０１は、フラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３が「１」にセットされているレジスタがあるか否かを判断する。つまり、ライト保留があるか否かを判断している。有効ビット８０３が「１」にセットされているレジスタがない場合（Ｎｏ）、処理を終了し、メインルーチンに戻る。
【００４２】
一方、有効ビット８０３が「１」にセットされているレジスタがある場合（Ｙｅｓ）、Ｓ６０２に進み、ＣＰＵ２０１は、当該レジスタのライトアドレス８０１及びデータサイズ８０２を読み出す。続いて、Ｓ６０３で、ＣＰＵ２０１は、読み出したライトアドレス情報とデータサイズ情報に基づき、ＳＳＤ１１５からデータをリードする（取得する）。
【００４３】
次に、Ｓ６０４で、ＣＰＵ２０１は、書込手段として機能し、リードデータをＨＤＤ１１６にライトする。ライトが完了するとＳ６０５に進み、ＣＰＵ２０１は、Ｓ６０２で読み出したレジスタの有効ビットを「０」にクリアし、処理をＳ６０１に戻す。
【００４４】
＜ミラーリングモード＞
次に、図７を参照して、上記サブルーチンＳ４１０「ミラーリングモード」における動作を図７のフローチャートにて説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。ここで、ミラーリングモードとは、ＳＳＤ１１５及びＨＤＤ１１６の両方が起動状態にあり、データのライト要求を両方の記憶装置に対して行うモードを示す。
【００４５】
まずＳ７０１で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２からリード要求があるか否かを判断する。Ｓ７０１でメインＣＰＵ１０２からリード要求がある場合（Ｙｅｓ）、Ｓ７０２に進み、ＣＰＵ２０１は、ＳＳＤ１１５に対してリードアクセスを行い、リードしたデータをホスト側のメインＣＰＵ１０２に転送し、Ｓ７０５に進む。
【００４６】
一方、Ｓ７０１でメインＣＰＵ１０２からリード要求がない場合（Ｎｏ）、Ｓ７０３に進み、ＣＰＵ２０１は、メインＣＰＵ１０２からライト要求があるか否かを判断する。Ｓ７０３でメインＣＰＵ１０２からライト要求がある場合（Ｙｅｓ）は、Ｓ７０４に進み、ＣＰＵ２０１は、ＳＳＤ１１５とＨＤＤ１１６に対してライトアクセスを行い、Ｓ７０５に進む。
【００４７】
Ｓ７０５で、ＣＰＵ２０１は、メインＣＰＵ１０２からストレージの電源をオフする前に発行されるＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信したか否かを判断する。Ｓ７０５でＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信していない場合（Ｎｏ）、Ｓ７０１に戻る。一方、Ｓ７０５でＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信した場合（Ｙｅｓ）、Ｓ７０６に進み、ＣＰＵ２０１は、ＳＳＤ１１５とＨＤＤ１１６に対してＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを送信し、終了する。
【００４８】
＜縮退モード＞
次に、図１５を参照して、上記サブルーチンＳ４１５「縮退モード」における動作を図１５のフローチャートにて説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。ここで、縮退モードとは、ミラーリングモードと異なり、ミラーリングモードではＳＳＤ１１５及びＨＤＤ１１６にデータをライトするのに対し、縮退モードではＳＳＤ１１５のみにデータをライトするモードである。
【００４９】
まずＳ１５０１で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２からリード要求があるか否かを判断する。Ｓ１５０１でメインＣＰＵ１０２からリード要求がある場合（Ｙｅｓ）、Ｓ１５０２に進み、ＳＳＤ１１５に対してリードアクセスを行い、リードしたデータをホスト側のメインＣＰＵ１０２に転送し、Ｓ１５０５に進む。
【００５０】
一方、Ｓ１５０１でメインＣＰＵ１０２からリード要求がない場合（Ｎｏ）、Ｓ１５０３に進み、ＣＰＵ２０１は、メインＣＰＵ１０２からライト要求があるか否かを判断する。Ｓ１５０３でメインＣＰＵ１０２からライト要求がある場合（Ｙｅｓ）、Ｓ１５０４に進み、ＣＰＵ２０１は、ＳＳＤ１１５に対してライトアクセスを行い、Ｓ１５０５に進む。一方、Ｓ１５０３でメインＣＰＵ１０２からライト要求がない場合（Ｎｏ）は、そのままＳ１５０５に進む。
【００５１】
Ｓ１５０５で、ＣＰＵ２０１は、そしてメインＣＰＵ１０２からストレージの電源をオフする前に発行されるＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信したか否かを判断する。Ｓ１５０５でＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信していない場合（Ｎｏ）は、Ｓ１５０１に戻る。一方、Ｓ１５０５でＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信した場合（Ｙｅｓ）、Ｓ１５０６に進み、ＳＳＤ１１５に対してＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを送信し、処理を終了する。このように、ミラーリングモードと縮退モードは、Ｓ７０４とＳ１５０４との処理が異なる。
【００５２】
以上説明したように、本実施形態に係る記憶制御装置（記憶装置制御部）は、上位装置と、複数の記憶装置とに接続され、複数の記憶装置の何れかへのライト要求を上位装置から受信する。ここで、本記憶制御装置は、複数の記憶装置のうちライト要求のアクセス先に指定された記憶装置がまだ起動していない場合に、当該ライト要求に係るデータを保留し、アクセス先に指定された記憶装置がレディ状態になると、保留したライト要求に係るデータを当該記憶装置に書き込む。また、本実施形態によれば、複数の記憶装置に含まれる少なくとも１つのＳＳＤ１１５と少なくとも１つのＨＤＤ１１６とを関連付けて制御することにより、ミラーリングを行う。ミラーリング制御には、シングルモードとリカバリモードとを設けることで、全てのストレージデバイスがレディ状態になっていなくても、リードのみならずライトも可能となる。従って、電源投入時の起動時間及び省電力モードからの復帰時間を短縮することが可能となる。このように、本実施形態によれば、複数の記憶装置を関連付けて制御する場合において、起動途中の記憶装置に対して、上位装置からアクセスが発生した際に好適に対応する仕組みを提供することができる。
【００５３】
＜第２の実施形態＞
以下では、本発明の第２の実施形態について説明する。上記第１の実施形態では、保留したライトデータを最初にレディ状態となったストレージデバイス（上記第１の実施形態ではＳＳＤ１１５）からリードして、そのデータをＨＤＤ１１６にライトしたが、この部分を変更したものである。
【００５４】
＜記憶装置制御部の構成＞
図９を参照して、本実施形態における記憶装置制御部１１１の構成例について説明する。図９において上記第１の実施形態と同一の構成は同一の番号を付し、説明を省略する。本実施形態の特徴的なところは、ＲＡＭ２０４内に保留データバッファ９０１を設けたことと、フラッシュメモリ２０３内のライト保留レジスタ９０２の構成を変更したことである。まず保留データバッファは、保留するライトのデータを保持しておくものである。
【００５５】
ライト保留レジスタ９０２の構成を図１０に示す。図１０において上記第１の実施形態で説明した図８と同一なものは同一の番号を付し、説明を省略する。１００１はＲＡＭアドレス保持用領域であり、ＲＡＭ２０４内に設けた保留データバッファ内のどこにデータを保持しているかを示すアドレス情報を格納する。
【００５６】
＜シングルモード＞
以下では、本実施形態に係る記憶装置制御部１１１の処理手順について説明する。メインフローチャートは上記第１の実施形態で説明した図４と全く同一のため説明は省略する。サブルーチンＳ４０７「シングルモード」とサブルーチンＳ４０９「リカバリモード」の一部が変更になる。
【００５７】
まず、図１１を参照して、本実施形態に係るサブルーチンＳ４０７の「シングルモード」の処理手順を説明する。例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。Ｓ５０４「ＲｅｇＤＨ（ＤＲＤＹ＝１）の通知があったＳＳＤ１１５に対してライトアクセスを行う」までの動作は上記第１の実施形態で説明した図５のフローチャートと同一のため説明を省略する。
【００５８】
Ｓ５０４に続いてＳ１１０１で、ＣＰＵ２０１は、ライトデータを保留データバッファ９０１に書き込む。続いて、Ｓ１１０２で、ＣＰＵ２０１は、フラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３がクリア「０」であるレジスタを検索する。さらに、ＣＰＵ２０１は、検索したレジスタにライトアドレス、データサイズ及び保留データバッファ９０１のＲＡＭアドレスを書き込み、有効ビット８０３を「１」にセットし、メインルーチンに戻る。
【００５９】
＜リカバリモード＞
次に、図１２を参照して、本実施形態におけるサブルーチンＳ４０９「リカバリモード」の処理手順を説明する。例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。上記第１の実施形態と同じ番号を付しているステップは上記第１の実施形態と同一の動作のため説明は省略する。
【００６０】
Ｓ６０１でフラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３が「１」にセットされているレジスタがある場合は、Ｓ１２０１に進む。Ｓ１２０１で、ＣＰＵ２０１は、同じレジスタのライトアドレス８０１、データサイズ８０２及びＲＡＭアドレスを読み出す。続いて、Ｓ１２０２で、ＣＰＵ２０１は、Ｓ１２０１で読み出したＲＡＭアドレス情報とデータサイズ情報をもとにＲＡＭ２０４からデータをリードして、Ｓ６０４に進む。その後は上記第１の実施形態で説明した図６のフローチャートと同様であるため説明を省略する。
【００６１】
以上説明したように、本実施形態によれば、複数の記憶装置のうち何れかの記憶装置がレディ状態でない場合に、当該記憶装置に対するライト要求に係るデータを記憶装置制御部１１１に設けられたＲＡＭ２０４に格納する。これにより、リカバリモードで保留していたライトデータをＳＳＤ１１５から読み出す必要がなく、ホスト側のメインＣＰＵ１０２からのリードアクセスとの競合がなくなるため、データの処理の高速化が可能となる。
【００６２】
＜第３の実施形態＞
以下では、本発明の第３の実施形態について説明する。上記第１の実施形態では、サブルーチンＳ４０９「リカバリモード」ではＨＤＤ１１６へのライトの保留がある場合は、保留されたライトデータを全てＨＤＤ１１６に書き込むことを優先したが、本実施形態ではこの部分を変更したものである。この「リカバリモード」の動作以外は構成を含めて上記第１の実施形態と同一であるため説明を省略する。
【００６３】
＜リカバリモード＞
図１３を参照して、本実施形態におけるサブルーチンＳ４０９「リカバリモード」の処理手順を説明する。例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。上記第１の実施形態と比較して特徴的な動作はホスト側のメインＣＰＵ１０２からのアクセス要求（リード要求又はライト要求）を優先するところである。
【００６４】
まずＳ１３０１で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２からリード要求があるか否かを判断する。Ｓ１３０１でメインＣＰＵ１０２からリード要求がある場合（Ｙｅｓ）、Ｓ１３０２で、ＣＰＵ２０１は、ＳＳＤ１１５に対してリードアクセスを行い、リードしたデータをホスト側のメインＣＰＵ１０２に転送する。一方、Ｓ１３０１でメインＣＰＵ１０２からリード要求がない場合（Ｎｏ）、Ｓ１３０３で、ＣＰＵ２０１は、メインＣＰＵ１０２からライト要求があるか否かを判断する。
【００６５】
Ｓ１３０３でメインＣＰＵ１０２からライト要求がある場合（Ｙｅｓ）、Ｓ１３０４で、ＣＰＵ２０１は、ＳＳＤ１１５とＨＤＤ１１６に対してライトアクセスを行い、Ｓ６０１に進む。一方、Ｓ１３０３でメインＣＰＵ１０２からライト要求がない場合（Ｎｏ）はＳ６０１に進む。Ｓ６０１からＳ６０５までの動作は上記第１の実施形態と同一であるため説明を省略する。Ｓ６０５に続いてＳ１３０１に戻り、ＣＰＵ２０１は、メインＣＰＵ１０２からリード要求があるか否かを判断する。
【００６６】
以上説明したように、本実施形態によれば、リカバリモードで保留していたライトデータの処理よりホスト側のメインＣＰＵ１０２からのリード要求又はライト要求のアクセス要求を優先して処理する。これにより、情報処理装置の起動時間及び復帰時間の短縮がより高速化される。
【００６７】
＜第４の実施形態＞
以下では、本発明の第４の実施形態について説明する。本実施形態は、上記第１の実施形態のシングルモード又はリカバリモードの途中で不意の電源遮断が発生し、ＨＤＤ１１６へのライト保留が残った状態でパワーオンした場合を考慮したものである。上記第１の実施形態と動作が同一であるステップには同一の番号を付し、説明を省略する。
【００６８】
＜記憶装置制御部の処理手順＞
図１４を参照して、本実施形態に係る記憶装置制御部１１１の動作の処理手順を説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。図１４において上記第１の実施形態で説明した図４のフローチャートと同一であるステップについては同一の番号を付し説明を省略する。
【００６９】
Ｓ４０３でＳＳＤ１１５又はＨＤＤ１１６からＲｅｇＤＨ（ＤＲＤＹ＝１）の通知がある場合、Ｓ１４０１に進む。Ｓ１４０１で、ＣＰＵ２０１は、フラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３が「１」にセットされているレジスタがあるか否かを判断する。Ｓ１４０１で有効ビット８０３が「１」にセットされているレジスタがない場合（Ｎｏ）、Ｓ４０６に移行し以降の動作は上記第１の実施形態で説明した図４のフローチャートと同一である。
【００７０】
一方、Ｓ１４０１で有効ビット８０３が「１」にセットされているレジスタがある場合（Ｙｅｓ）、Ｓ１４０２に進む。Ｓ１４０２で、ＣＰＵ２０１は、Ｓ４０３で通知がない方のストレージデバイスからのＲｅｇＤＨ（ＤＲＤＹ＝１）の通知を待ち、全てのストレージデバイスからＲｅｇＤＨ（ＤＲＤＹ＝１）が通知されたか否かを判断する。Ｓ１４０２で全てのストレージデバイスからＲｅｇＤＨ（ＤＲＤＹ＝１）の通知があったと判断しない場合（Ｎｏ）、Ｓ１４０５に進み、ＣＰＵ２０１は、リトライタイマーをチェックし、リトライが必要な時間が経過しているか否かを判断する。Ｓ１４０５でリトライが必要な時間が経過していないと判断したら（Ｎｏ）、Ｓ１４０２に戻り、リトライが必要な時間が経過していると判断したら（Ｙｅｓ）、Ｓ１４０６に進む。
【００７１】
Ｓ１４０６で、ＣＰＵ２０１は、次にリトライ回数をチェックし、リトライ回数が所定の回数を超えたか否かを判断する。Ｓ１４０６でリトライ回数が所定の回数を超えていない場合（Ｎｏ）、Ｓ１４０７に移行し、ＣＰＵ２０１は、レディ状態になっていないデバイスに対してＯＯＢシーケンス処理を行う。続いて、Ｓ１４０８で、ＣＰＵ２０１は、リトライタイマーを起動してＳ１４０２に処理を戻す。
【００７２】
一方、Ｓ１４０６でリトライ回数が所定の回数を超えている場合（Ｙｅｓ）は、片側のストレージデバイスの故障等が考えられるため、縮退モードのサブルーチンＳ４１５に進む。またＳ１４０２で全てのストレージデバイスからＲｅｇＤＨ（ＤＲＤＹ＝１）の通知がある場合（Ｙｅｓ）は、リカバリモードのサブルーチンＳ１４０３に進む。サブルーチンＳ１４０３「リカバリモード」の動作は、上記第１の実施形態のサブルーチンＳ４０９「リカバリモード」と同一のため、説明を省略する。そしてリカバリモード終了後、Ｓ１４０４で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２にＲｅｇＤＨ（ＤＲＤＹ＝１）を通知する。そしてサブルーチンＳ４１０「ミラーリングモード」に進む。
【００７３】
以上説明したように、本実施形態によれば、リカバリモードの完了前に不意な電源遮断が発生した場合であっても、次の起動時にライト保留の有無を判断しライト保留が残っている場合は、最初にリカバリを行う。従って、不意の電源遮断が発生した場合であっても、複数のストレージデバイス間のデータの整合を保つことができる。
【００７４】
＜第５の実施形態＞
以下では、本発明の第５の実施形態について説明する。上記第１乃至第４の実施形態では、複数のストレージデバイスに同一のデータを格納するミラーリングモードで動作させたとの形態について説明した。しかし、本発明は、複数のディスクをまとめて大容量のストレージを実現するＪＢＯＤ（Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  Ｏｆ  Ｄｉｓｋｓ）にも適用でき、これについて本実施形態で説明する。
【００７５】
＜ＪＢＯＤ＞
図１６を参照して、ＪＢＯＤの概要を説明する。図１６において、１１５と１１６はそれぞれ記憶装置であり、本実施形態において１１５は容量６４ＧＢのＳＳＤ、１１６は容量２５６ＧＢのＨＤＤとする。
【００７６】
印刷装置１００の記憶装置制御部１１１は、これらＳＳＤ１１５とＨＤＤ１１６を仮想的に結合し、印刷装置１００内のメイン制御部１０１のメインＣＰＵ１０２に対して容量が３２０ＧＢの１つの記憶装置１６０１として取り扱う。ただし、ライトデータを一時的に格納しておくためのテンポラリ領域１６０２を予め確保しておく。
【００７７】
また、記憶装置制御部１１１の内部構成は、フラッシュメモリ２０３内のライト保留レジスタ２２０の構成が異なるのみで他は上記第１の実施形態と同じである。ここで、図２１を参照して、本実施形態に係るライト保留レジスタ２２０の構成例について説明する。図２１において上記第１の実施形態で説明した図８と同一なものは同一の番号を付し、説明を省略する。２１０１はテンポラリアドレス保持用領域であり、テンポラリ領域１６０２内のどこに保持したかを示すアドレス情報を格納する。
【００７８】
＜記憶装置制御部の処理手順＞
次に、図１７を参照して、本実施形態に係る記憶装置制御部１１１の動作の処理手順を説明する。以下で説明する処理は、例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。図１７において上記第４の実施形態で説明した図１４のフローチャートと同一であるステップについては同一の番号を付し、説明を省略する。
【００７９】
上記第４の実施形態ではＳ４１２でリトライ回数が所定の回数を超えている場合（Ｙｅｓ）には、サブルーチンＳ４１５「縮退モード」に移行した。しかし、本実施形態では、ＪＢＯＤが機能できなくなるため、ホスト側のメインＣＰＵにＲｅｇＤＨ（ＤＲＤＹ＝０）、即ちＤｅｖｉｃｅ  Ｎｏｔ  Ｒｅａｄｙを通知する。上記第４の実施形態とは、サブルーチンＳ１７０２の「シングルモード」と、サブルーチンＳ１７０１及びＳ１７０３の「リカバリモード」との動作が異なる。また、サブルーチン「ミラーリングモード」がサブルーチンＳ１７０４「ハイブリッドモード」に変更される。以下では順に説明する。
【００８０】
＜シングルモード＞
図１８を参照して、サブルーチンＳ１７０２の「シングルモード」における動作の処理手順について説明する。例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。
【００８１】
まず、Ｓ１８０１で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２からリード要求があるか否かを判断する。Ｓ１８０１でメインＣＰＵ１０２からリード要求がある場合（Ｙｅｓ）、Ｓ１８０２に進み、ＣＰＵ２０１は、アクセス先がＲｅｇＤＨ（ＤＲＤＹ＝１）を通知したストレージデバイス（ここではＳＳＤ１１５とする。）であるか否かを判断する。Ｓ１８０２でアクセス先がＳＳＤ１１５であると判断した場合（Ｙｅｓ）、Ｓ１８０３に進み、ＣＰＵ２０１は、ＳＳＤ１１５に対してリードアクセスを行い、リードしたデータをホスト側のメインＣＰＵ１０２に転送する。そしてメインルーチンに戻る。また、Ｓ１８０２でアクセス先がＳＳＤ１１５でないと判断した場合（Ｎｏ）、何もせずにメインルーチンに戻る。
【００８２】
一方、Ｓ１８０１でメインＣＰＵ１０２からリード要求がない場合（Ｎｏ）、Ｓ１８０４に進み、ＣＰＵ２０１は、メインＣＰＵ１０２からライト要求があるか否かを判断する。Ｓ１８０４でメインＣＰＵ１０２からライト要求がある場合（Ｙｅｓ）、Ｓ１８０５に進み、ＣＰＵ２０１は、アクセス先がＲｅｇＤＨ（ＤＲＤＹ＝１）を通知したストレージデバイスか否かを判断する。Ｓ１８０５でアクセス先がＳＳＤ１１５であると判断した場合（Ｙｅｓ）、Ｓ１８０６に進み、ＣＰＵ２０１は、ＳＳＤ１１５に対してライトアクセスを行い、メインルーチンに戻る。
【００８３】
一方、Ｓ１８０５でアクセス先がＳＳＤ１１５でないと判断した場合（Ｎｏ）、Ｓ１８０７に進み、ＣＰＵ２０１は、ＳＳＤ１１５のテンポラリ領域１６０２にデータをライトする。続いて、Ｓ１８０８で、ＣＰＵ２０１は、フラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３がクリア「０」であるレジスタを検索する。さらに、ＣＰＵ２０１は、検索したレジスタにライトアドレス、データサイズ、そしてＳ１８０７でＳＳＤ１１５のテンポラリ領域１６０２に書き込んだアドレスをテンポラリアドレスとして書き込み、有効ビット８０３を「１」にセットする。そしてメインルーチンに戻る。
【００８４】
＜リカバリモード＞
次に、図１９を参照して、サブルーチンＳ１７０１、１７０３「リカバリモード」における動作の処理手順について説明する。例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。
【００８５】
まず、Ｓ１９０１で、ＣＰＵ２０１は、フラッシュメモリ２０３内のライト保留レジスタ２２０の有効ビット８０３が「１」にセットされているレジスタがあるか否かを判断する。有効ビット８０３が「１」にセットされているレジスタがない場合（Ｎｏ）、メインルーチンに戻る。
【００８６】
一方、有効ビット８０３が「１」にセットされているレジスタがある場合（Ｙｅｓ）、Ｓ１９０２に進み、ＣＰＵ２０１は、同じレジスタのライトアドレス８０１及びデータサイズ８０２、テンポラリアドレス２１０１を読み出す。続いて、Ｓ１９０３で、ＣＰＵ２０１は、読み出したテンポラリアドレス情報とデータサイズ情報に基づいて、ＳＳＤ１１５からデータをリードする。Ｓ１９０４で、ＣＰＵ２０１は、リードデータをＳ１９０２で読み出したライトアドレス情報に基づいて、ＨＤＤ１１６にライトする。さらに、Ｓ１９０５で、ＣＰＵ２０１は、ライトが完了したらＳ１９０２で読み出したレジスタの有効ビットを「０」にクリアし、Ｓ１９０１に戻る。
【００８７】
＜ハイブリッドモード＞
次に、図２０を参照して、サブルーチンＳ１７０４「ハイブリッドモード」における動作の処理手順について説明する。例えばＣＰＵ２０１がフラッシュメモリ２０３等に格納されたプログラムをＲＡＭ２０４に読み出して実行することにより実現される。ここで、ハイブリッドモードとは、上記第１乃至第４のミラーリングモードとは異なり、ＳＳＤ１１５及びＨＤＤ１１６の何れか一方のみに、例えばアクセス先の記憶装置に対してのみライトアクセス又はリードアクセスを行うモードである。
【００８８】
まず、Ｓ２００１で、ＣＰＵ２０１は、ホスト側のメインＣＰＵ１０２からリード要求があるか否かを判断する。Ｓ２００１でメインＣＰＵ１０２からリード要求がある場合（Ｙｅｓ）、Ｓ２００２に進み、ＣＰＵ２０１は、アクセス先のデバイスに対してリードアクセスを行い、リードしたデータをホスト側のメインＣＰＵ１０２に転送して、Ｓ２００５に進む。
【００８９】
一方、Ｓ２００１でメインＣＰＵ１０２からリード要求がない場合（Ｎｏ）、Ｓ２００３に進み、ＣＰＵ２０１は、メインＣＰＵ１０２からライト要求があるか否かを判断する。Ｓ２００３でメインＣＰＵ１０２からライト要求がある場合（Ｙｅｓ）、Ｓ２００４に進み、ＣＰＵ２０１は、アクセス先のデバイスに対してライトアクセスを行う。続いて、Ｓ２００５で、ＣＰＵ２０１は、メインＣＰＵ１０２からストレージの電源をオフする前に発行されるＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信したか否かを判断する。Ｓ２００５でＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信していない場合（Ｎｏ）は、Ｓ２００１に戻る。一方、Ｓ２００５でＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを受信した場合（Ｙｅｓ）、Ｓ２２０６に進み、ＣＰＵ２０１は、ＳＳＤ１１５とＨＤＤ１１６に対してＳｔａｎｄｂｙ Ｉｍｍｅｄｉａｔｅコマンドを送信するし、メインルーチンに戻る。
【００９０】
以上説明したように、本実施形態によれば、ＪＢＯＤ制御にシングルモードとリカバリモードを設ける。これにより、全ての記憶装置がレディ状態になっていなくても、レディ状態になっている記憶装置のリードライトのみならず、レディ状態になっていない記憶装置のライトも可能となる。よって、パワーオン時の起動時間及び省電力モードからの復帰時間を短縮することが可能となる。
【００９１】
なお、本発明は上記実施形態に限らず様々な変形が可能である。例えば、ライト要求に係るデータのアクセス先が既に保持している保留データとして保持しているアドレスへのライト要求である場合には、既に保持している保留データに上書きするように制御してもよい。これにより、不要なリカバリ処理を削減することができ、起動時間や復帰時間を短縮することができる。
【００９２】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９３】
１００：印刷装置、１０１：メイン制御部、１０２：メインＣＰＵ、１０３：ＲＯＭ、１０４：ＲＡＭ、１０５：ＬＡＮ−ＩＦ、１０６：フラッシュメモリ、１０７：画像処理部、１１１：記憶装置制御部、１１２：操作部、１１３：スキャナ部、１１４：プリンタ部、１１５：ＳＳＤ、１１６：ＨＤＤ、１２０：ＰＣ、１３０：ネットワーク
【図１】
2019061483.tif 000003
【図２】
2019061483.tif 000004
【図３】
2019061483.tif 000005
【図４】
2019061483.tif 000006
【図５】
2019061483.tif 000007
【図６】
2019061483.tif 000008
【図７】
2019061483.tif 000009
【図８】
2019061483.tif 000010
【図９】
2019061483.tif 000011
【図１０】
2019061483.tif 000012
【図１１】
2019061483.tif 000013
【図１２】
2019061483.tif 000014
【図１３】
2019061483.tif 000015
【図１４】
2019061483.tif 000016
【図１５】
2019061483.tif 000017
【図１６】
2019061483.tif 000018
【図１７】
2019061483.tif 000019
【図１８】
2019061483.tif 000020
【図１９】
2019061483.tif 000021
【図２０】
2019061483.tif 000022
【図２１】
2019061483.tif 000023