(57)【要約】【課題】プロセッサに記憶デバイスを直接接続するプロトコルにおいて、書込みデータが正しく記憶デバイスに送付されたかどうかを検出する。【解決手段】プロセッサと、メモリと、記憶デバイスと、を有する計算機システムであって、プロセッサは、書込みコマンドによる書込み対象のデータ領域のデータを無効化するためのコマンドを記憶デバイスに送信し、記憶デバイスは、書込み対象のデータ領域のデータを無効化し、プロセッサは、書込み対象のデータ領域にデータを書込むための書込みコマンドを記憶デバイスに送信し、記憶デバイスは、書込みコマンドに従って書込み対象のデータ領域にデータを書き込み、データの書き込みに成功した領域のデータを有効化し、データの書き込みに失敗した領域のデータの無効化を維持する。【選択図】図１
2020086483.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続される記憶デバイスと、を有する計算機システムであって、
前記プロセッサは、前記記憶デバイスに書込みコマンドを送信する前に、前記書込みコマンドによる書込み対象のデータ領域のデータを無効化するためのコマンドを前記記憶デバイスに送信し、
前記記憶デバイスは、前記書込み対象のデータ領域のデータを無効化するためのコマンドに従って前記書込み対象のデータ領域のデータを無効化し、
前記プロセッサは、前記書込み対象のデータ領域にデータを書込むための書込みコマンドを前記記憶デバイスに送信し、
前記記憶デバイスは、
前記書込みコマンドに従って前記書込み対象のデータ領域にデータを書き込み、
前記書込み対象のデータ領域の少なくとも一部へのデータの書込みに成功した場合、当該データの書き込みに成功した領域のデータを有効化し、
前記書込み対象のデータ領域の少なくとも一部へのデータの書込みに失敗した場合、当該データの書き込みに失敗した領域のデータの無効化を維持することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記記憶デバイスは、前記プロセッサから、データが無効化されている領域を対象とする読出しコマンドを受信すると、前記データが無効化されていることを示す情報を前記プロセッサに送信することを特徴とする計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記記憶デバイスは、
前記書込み対象のデータ領域のデータを無効化するためのコマンドに従って、前記書込み対象のデータ領域に対する読出しコマンドを受信した場合に読出しエラーを返すことを示すマークを前記書込み対象のデータ領域に付与することで、前記書込み対象のデータ領域のデータを無効化し、
前記書込み対象のデータ領域のうち前記書込みコマンドに従ってデータの書込みに成功した領域の前記マークを削除し、
前記読出しコマンドの対象の領域の少なくとも一部に前記マークが付与されている場合に、読出しエラーを前記プロセッサに送信することを特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムであって、
前記書込み対象のデータ領域のデータを無効化するためのコマンドは、前記書込み対象のデータ領域への所定のパターンのデータの書込みを伴うコマンドであり、
前記記憶デバイスは、前記所定のパターンのデータを前記書込み対象の領域に書き込み、
読出しコマンドに従って前記所定のパターンのデータを読み出した場合、読み出した前記所定のパターンのデータを前記プロセッサに送信することを特徴とする計算機システム。
【請求項５】
請求項４に記載の計算機システムであって、
前記記憶デバイスは、
前記書込み対象のデータ領域への所定のパターンのデータの書込みを伴う無効化のためのコマンドを受信すると、前記書込み対象のデータ領域のデータが無効であることを示す付加データをさらに書き込み、
前記書込み対象のデータ領域のうち前記書込みコマンドによる書込みに成功した領域に対応する前記付加データを、当該領域のデータが有効であることを示す付加データに更新し、
前記読出しコマンドの対象の領域から読み出したデータと、前記読出しコマンドの対象の領域に対応する前記付加データとを前記プロセッサに送信することを特徴とする計算機システム。
【請求項６】
請求項４に記載の計算機システムであって、
前記記憶デバイスは、
前記書込み対象のデータ領域への所定のパターンのデータの書込みを伴う無効化のためのコマンドを受信すると、前記書込み対象のデータ領域のデータが無効であることを示す付加データをさらに書き込み、
前記書込み対象のデータ領域のうち前記書込みコマンドによる書込みに成功した領域に対応する前記付加データを、当該領域のデータが有効であることを示す付加データに更新し、
前記読出しコマンドの対象の領域に対応する前記付加データが前記読出しコマンドの対象の領域のデータが無効であることを示す付加データであった場合には、前記データが無効化されていることを示す情報を前記プロセッサに送信することを特徴とする計算機システム。
【請求項７】
請求項１に記載の計算機システムであって、
前記記憶デバイスは、前記書込みコマンドを受信すると、前記書込みコマンドによる書き込み対象のデータの取得要求を前記プロセッサに送信し、
前記プロセッサは、前記取得要求に従って、前記メモリからデータを読み出して前記記憶デバイスに送信し、
前記記憶デバイスは、前記プロセッサから受信したデータを前記書込み対象のデータ領域に書き込むことを特徴とする計算機システム。
【請求項８】
プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続される記憶デバイスと、を有する計算機システムにおける記憶デバイスの制御方法であって、
前記プロセッサが、前記記憶デバイスに書込みコマンドを送信する前に、前記書込みコマンドによる書込み対象のデータ領域のデータを無効化するためのコマンドを前記記憶デバイスに送信する第１手順と、
前記記憶デバイスが、前記書込み対象のデータ領域のデータを無効化するためのコマンドに従って前記書込み対象のデータ領域のデータを無効化する第２手順と、
前記プロセッサが、前記書込み対象のデータ領域にデータを書込むための書込みコマンドを前記記憶デバイスに送信する第３手順と、
前記記憶デバイスが、前記書込みコマンドに従って前記書込み対象のデータ領域にデータを書き込む第４手順と、を含み、
前記第４手順において、前記記憶デバイスは、前記書込み対象のデータ領域の少なくとも一部へのデータの書込みに成功した場合、当該データの書き込みに成功した領域のデータを有効化し、前記書込み対象のデータ領域の少なくとも一部へのデータの書込みに失敗した場合、当該データの書き込みに失敗した領域のデータの無効化を維持することを特徴とする記憶デバイスの制御方法。
【請求項９】
請求項８に記載の記憶デバイスの制御方法であって、
前記記憶デバイスが、前記プロセッサから、データが無効化されている領域を対象とする読出しコマンドを受信すると、前記データが無効化されていることを示す情報を前記プロセッサに送信する第５手順をさらに含むことを特徴とする記憶デバイスの制御方法。
【請求項１０】
請求項９に記載の記憶デバイスの制御方法であって、
前記第２手順において、前記記憶デバイスは、前記書込み対象のデータ領域のデータを無効化するためのコマンドに従って、前記書込み対象のデータ領域に対する読出しコマンドを受信した場合に読出しエラーを返すことを示すマークを前記書込み対象のデータ領域に付与することで、前記書込み対象のデータ領域を無効化し、
前記第４手順において、前記記憶デバイスは、前記書込み対象のデータ領域のうち前記書込みコマンドに従ってデータの書込みに成功した領域の前記マークを削除し、
前記第５手順において、前記記憶デバイスは、前記読出しコマンドの対象の領域の少なくとも一部に前記マークが付与されている場合に、読出しエラーを前記プロセッサに送信することを特徴とする記憶デバイスの制御方法。
【請求項１１】
請求項８に記載の記憶デバイスの制御方法であって、
前記書込み対象のデータ領域のデータを無効化するためのコマンドは、前記書込み対象のデータ領域に所定のパターンのデータの書込みを伴うコマンドであり、
前記第２手順において、前記記憶デバイスは、前記所定のパターンのデータを前記書込み対象の領域に書き込み、
前記記憶デバイスの制御方法は、前記記憶デバイスが、読出しコマンドに従って前記所定のパターンのデータを読み出した場合、読み出した前記所定のパターンのデータを前記プロセッサに送信する第６手順をさらに含むことを特徴とする記憶デバイスの制御方法。
【請求項１２】
請求項１１に記載の記憶デバイスの制御方法であって、
前記第２手順において、前記記憶デバイスは、前記書込み対象のデータ領域のデータが無効であることを示す付加データをさらに書き込み、
前記第４手順において、前記記憶デバイスは、前記書込み対象のデータ領域のうち書込みに成功した領域に対応する前記付加データを、当該領域のデータが有効であることを示す付加データに更新し、
前記第６手順において、前記記憶デバイスは、前記読出しコマンドの対象の領域から読み出したデータと、前記読出しコマンドの対象の領域に対応する前記付加データとを前記プロセッサに送信することを特徴とする記憶デバイスの制御方法。
【請求項１３】
請求項１１に記載の記憶デバイスの制御方法であって、
前記第２手順において、前記記憶デバイスは、前記書込み対象のデータ領域のデータが無効であることを示す付加データをさらに書き込み、
前記第４手順において、前記記憶デバイスは、前記書込み対象のデータ領域のうち書込みに成功した領域に対応する前記付加データを、当該領域のデータが有効であることを示す付加データに更新し、
前記第６手順において、前記記憶デバイスは、前記読出しコマンドの対象の領域に対応する前記付加データが前記読出しコマンドの対象の領域のデータが無効であることを示す付加データであった場合には、前記データが無効化されていることを示す情報を前記プロセッサに送信することを特徴とする記憶デバイスの制御方法。
【請求項１４】
請求項８に記載の記憶デバイスの制御方法であって、
前記記憶デバイスが、前記書込みコマンドを受信すると、前記書込みコマンドによる書き込み対象のデータの取得要求を前記プロセッサに送信する手順と、
前記プロセッサが、前記取得要求に従って、前記メモリからデータを読み出して前記記憶デバイスに送信する手順と、をさらに含み、
前記第４手順において、前記記憶デバイスは、前記プロセッサから受信したデータを前記書込み対象のデータ領域に書き込むことを特徴とする記憶デバイスの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステム等の計算機システムにおける、記憶デバイスの書込み障害に関する。
【背景技術】
【０００２】
ストレージシステムでは、コントローラと、不揮発の記憶デバイスを備え、コントローラ内には、システム制御を行うプロセッサと、データを蓄える揮発性のメモリを備える構成を採る。例えば特許文献１には、その一例が開示されている。このようなストレージシステムでは、コントローラのメモリ内に一端格納したユーザデータを、記憶デバイスに書込むことによって、データ保持を行う。
【０００３】
このような記憶デバイスは、コントローラとの間のユーザデータの送受信を確実に行うため、特定の通信プロトコルを用いる。このプロトコルの例は、例えばSCSI(Small Computer System Interface)、Fibre Channel及びSAS(Serial Attached SCSI)である。このようなプロトコルは、コントローラにプロセッサの他に専用のプロトコル制御部を備え、プロトコル制御部には送受するデータの正当性を高めるため、データ保護コードを付与したり、付与されたデータ保護コードをチェックしたりする機能を持つ。
【０００４】
またこのような、データ保護コードの付与を利用して、記憶デバイスへのデータ書込み時に新しいデータが書込めたことを、データ毎に識別番号を付与して保証する技術も、特許文献１にて開示されている。データ毎に異なる識別番号を付与すると、新しいデータの書込みに失敗した場合、データを読み出したときに古い識別番号が付与された古いデータが読み出される。このため、識別番号を調べることで、書込みが失敗したために古いデータが読みだされたことが識別される。
【０００５】
これに対し、近年では、記憶デバイスをプロトコル制御部なしにコントローラのプロセッサに直接接続するNVM Express（登録商標）などの新しいプロトコルも作られている。このようなプロトコルを用いる場合、プロトコル制御部がないので、データ保護コード及び識別番号の付与・チェックはコントローラのプロセッサで行う必要がある。
【０００６】
またこのような記憶デバイスへの通信プロトコルでは、記憶デバイスの障害発生をテストするために、記憶デバイス上の指定したデータを意図的に訂正不可誤り（Uncorrectable Error）状態にするコマンド（データ無効化コマンド）が定義されている。例えばSCSIでは非特許文献１にてWrite Longコマンドが定義されている。またNVM Expressでは非特許文献２にて、Write Uncorrectableコマンドが定義されている。これらのコマンドは各プロトコルにおいて、例えばオプショナルのコマンドである。これらのデータ無効化コマンドを使うと、記憶デバイスの特定のデータをUncorrectable Error状態にすることができ、記憶デバイスの障害発生のテストや、記憶デバイスに障害が発生した時のストレージシステムの障害処理の動作テストを行うことができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−６４３６３号公報
【非特許文献】
【０００８】
【非特許文献１】Information technology - SCSI Block Commands - 4 (SBC-4) : Revision 13 17 February 2017 : Project T10/BSR INCITS 506 : International Committee for Information Technology Standards (INCITS) T10 Technical Committee
【非特許文献２】NVM Express Revision 1.3：May 1, 2017：NVM Express, Inc.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
NVM Expressなど、プロセッサに記憶デバイスを直接接続するプロトコルにおいて、データ保護や識別番号の付与・チェックはプロセッサで実行する必要がある。このためプロセッサの負荷が高まり、ストレージシステムとして、性能低下が発生する。
【００１０】
しかし、このような記憶デバイスを直接プロセッサに接続するプロトコルを用いる場合、このようなデータ保護コード及び識別番号の付与・チェックを行わないと、プロトコル制御部がないので、書込みデータが正しく記憶デバイスに送付されたかどうか、及び正しく書込まれたかどうかは、記憶デバイス自身でチェックするしかなく、記憶デバイスにおける一時故障で書込みデータが失われても、検出することができない。
【００１１】
記憶デバイスへのデータ書込みが正しく行われたかどうかをチェックする別の方法としては、一旦データを書込んだ後で、再度データを読み出してチェックする方法もあるが、再度のデータ読出しを伴うので、オーバーヘッドが高い。
【００１２】
本発明は以上の問題に鑑みてなされたものであり、その主な目的は、NVM Expressなど、プロセッサに記憶デバイスを直接接続するプロトコルにおいて、記憶デバイスへのデータ書込みが正しく行われたかどうかを、低いオーバーヘッドでチェックすることである。
【００１３】
本発明の目的は、更に、これまで記憶デバイスの障害発生のテストに用いられてきた記憶デバイス上の指定したデータを意図的に訂正不可誤り（Uncorrectable Error）状態にするデータ無効化コマンドを、障害発生のテストではなく、記憶デバイスのデータ書込みにおいてデータが障害なく正しく書けたかどうかをチェックすることに使って、データ書込みのチェックのオーバーヘッドを低減することである。
【課題を解決するための手段】
【００１４】
上記の課題の少なくとも一つを解決するために、本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下の通りである。すなわち、プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続される記憶デバイスと、を有する計算機システムであって、前記プロセッサは、前記記憶デバイスに書込みコマンドを送信する前に、前記書込みコマンドによる書込み対象のデータ領域のデータを無効化するためのコマンドを前記記憶デバイスに送信し、前記記憶デバイスは、前記書込み対象のデータ領域のデータを無効化するためのコマンドに従って前記書込み対象のデータ領域のデータを無効化し、前記プロセッサは、前記書込み対象のデータ領域にデータを書込むための書込みコマンドを前記記憶デバイスに送信し、前記記憶デバイスは、前記書込みコマンドに従って前記書込み対象のデータ領域にデータを書き込み、前記書込み対象のデータ領域の少なくとも一部へのデータの書込みに成功した場合、当該データの書き込みに成功した領域のデータを有効化し、前記書込み対象のデータ領域の少なくとも一部へのデータの書込みに失敗した場合、当該データの書き込みに失敗した領域のデータの無効化を維持することを特徴とする。
【発明の効果】
【００１５】
本発明の一態様によれば、記憶デバイスをプロセッサに直結するNVM Expressのようなプロトコルにおいて、記憶デバイスへのデータ書込みが正しく行われたかどうかのチェックのオーバーヘッドを低減することができる。
【００１６】
上記した以外の課題、構成及び効果は、以下の実施形態の説明によって明らかにされる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施例による、記憶デバイスの接続例を示すブロック図及び処理の流れの例を示すシーケンス図である。
【図２】本発明の実施例による、データの読出しまでを含めた処理の流れの例を示すシーケンス図である。
【図３】本発明の実施例による、記憶デバイスで動作する、記憶デバイスの制御プログラムのデータ書込み処理の例を示すフローチャートである。
【図４】本発明の実施例による、記憶デバイスで動作する、記憶デバイスの制御プログラムのデータ読出し処理の例を示すフローチャートである。
【図５】本発明の実施例による、記憶デバイスで動作する、記憶デバイスの制御プログラムのデータ書込み処理の別の例を示すフローチャートである。
【図６】本発明の実施例による、記憶デバイスで動作する、記憶デバイスの制御プログラムのデータ読出し処理の別の例を示すフローチャートである。
【図７】本発明の実施例による、プロセッサで動作する、制御プログラムのデータ読出し処理の例を示すフローチャートである。
【図８】本発明の実施例による、プロセッサと記憶デバイスでやり取りされるコマンド及び応答報告の例を示す説明図である。
【図９】本発明の実施例による、プロセッサと記憶デバイスでやり取りされるデータ及びメタデータの例を示す説明図である。
【図１０】本発明の実施例による、データの読出しまでを含めた処理の流れの別の例を示すシーケンス図である。
【図１１】本発明の実施例による、記憶デバイスで動作する、記憶デバイスの制御プログラムのデータ読出し処理の更に別の例を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。
【実施例１】
【００１９】
図１及び図８を用いて、本発明の実施例１を説明する。
【００２０】
図１（ａ）は、本発明の実施例に関わる記憶デバイスとプロセッサの接続の構成の例を示すブロック図である。プロセッサ１０１は、メモリ１０２に接続され、メモリ１０２上に置かれた命令コード（制御プログラム）を実行し、メモリ１０２上の命令コードとは異なる場所におかれたデータを読み書きして、処理を行う。すなわち、以下の説明においてプロセッサ１０１が実行する処理は、メモリ１０２上の制御プログラムに従って実行される。
【００２１】
またプロセッサ１０１は、記憶デバイス１０３に接続されている。記憶デバイス１０３は、不揮発記憶デバイスであり、例えば、不揮発半導体記憶デバイスである。プロセッサ１０１と記憶デバイス１０３はプロセッサ１０１が備えるＩＯバス１０４で接続される。ＩＯバスの代表的な例は、ＰＣＩ  Ｅｘｐｒｅｓｓである。プロセッサ１０１、メモリ１０２及び記憶デバイス１０３が計算機システムを構成する。
【００２２】
なお、図１（ａ）では省略されているが、記憶デバイス１０３もプロセッサ及びメモリを内蔵しており、プロセッサがメモリ上の制御プログラムを実行することで、種々の処理が実現される。すなわち、以下の説明において記憶デバイス１０３が実行する処理は、記憶デバイス１０３に内蔵されたプロセッサが、記憶デバイス１０３に内蔵されたメモリ上のプログラムに従って実行する。
【００２３】
また記憶デバイス１０３は、データをある程度の大きさのブロック単位で読み書きされる。プロセッサ１０１は、ブロック単位でデータを読み書きするコマンドを記憶デバイス１０３に送信する。このようなコマンドのうち、データを書込むＷｒｉｔｅコマンドの例を図８（ｂ）に、データを読み出すＲｅａｄコマンドの例を図８（ｃ）に示す。
【００２４】
Ｗｒｉｔｅコマンドは、当該コマンドがＷｒｉｔｅコマンドであることを示すコマンドコード、複数のＷｒｉｔｅコマンドどうしを識別するタグ、記憶デバイス１０３上のデータブロックを指定するブロックアドレス、書込むブロック数、及び、書込みデータのメモリ１０２上の場所を指定する書込みデータメモリアドレスを持つ。
【００２５】
Ｒｅａｄコマンドは、当該コマンドがＲｅａｄコマンドであることを示すコマンドコード、複数のＲｅａｄコマンドどうしを識別するタグ、記憶デバイス１０３上のデータブロックを指定するブロックアドレス、読出すブロック数、及び、読出しデータのメモリ１０２上の場所を指定する読出しデータメモリアドレスを持つ。
【００２６】
このようにＲｅａｄコマンド及びＷｒｉｔｅコマンドにメモリ１０２上のデータのアドレスを付与することで、プロセッサ１０１に直接接続された記憶デバイス１０３が、メモリ１０２上に直接書込みデータを格納し、あるいはメモリ１０２上から直接読み出しデータを取得することができる。
【００２７】
また、本実施例においては、データを記憶デバイス１０３に書き込む前にデータ無効化コマンドを記憶デバイス１０３に送付し、データ無効化処理を実施する。データ無効化コマンドの例を図８（ａ）に示す。データ無効化コマンドは、データそのものは必要としないので、当該コマンドがデータ無効化コマンドであることを示すコマンドコード、複数のデータ無効化コマンドを識別するタグ、無効化する記憶デバイス１０３上のデータブロックを指定するブロックアドレス、及び、無効化するブロック数からなり、メモリ１０２上のアドレスは付与されない。
【００２８】
次に図１（ｂ）を用いて、このデータ書込み動作を詳しく説明する。
【００２９】
図１（ｂ）の処理において、データを記憶デバイス１０３に書き込む時には、まずプロセッサ１０１からデータ無効化コマンドを記憶デバイス１０３に手順１１０で送付する。記憶デバイス１０３は受信したデータ無効化コマンドに指定されたデータブロックに対し、データ無効化処理を手順１１１で実施する。ここで指定されるデータブロックは、その後に送付されるＷｒｉｔｅコマンドによって指定されるデータブロックと同一である。これによって、後のＷｒｉｔｅコマンドによる書込み対象の領域が無効化される。図１（ｂ）では省略されているが、記憶デバイス１０３は、手順１１１のデータ無効化処理が終了すると、データ無効化コマンド完了報告をプロセッサ１０１に送信する。
【００３０】
次に、プロセッサ１０１からＷｒｉｔｅコマンドを手順１１２で記憶デバイス１０３に送付する。記憶デバイス１０３はＷｒｉｔｅコマンドを受信すると、指定された書込みデータのメモリアドレスに従って、プロセッサ１０１を経由してメモリ１０２上の書込みデータを取得するデータ取得要求を手順１１３で送付する。
【００３１】
プロセッサ１０１は送付されたデータ取得要求に従って、メモリ１０２上のＷｒｉｔｅデータを手順１１４で取得する。その後手順１１５で、プロセッサ１０１はメモリ１０２から取得したデータを記憶デバイス１０３に送付する。記憶デバイス１０３は手順１１５で送付された書込みデータを手順１１６でデバイス内のＷｒｉｔｅコマンドで指定されたブロックアドレスに書込む。
【００３２】
なお、この手順１１４及び手順１１５におけるプロセッサ１０１の動作は、手順１１３で記憶デバイス１０３から送付されるデータ取得要求に従って動作するハードウェアを、プロセッサ１０１上に設けて実現しても良いし、プロセッサ１０１上で動作するソフトウェアで実現しても良い。
【００３３】
以上の動作によって、手順１１１で書込み前に書込みブロックアドレスのブロックはすべて無効化されているので、もし手順１１４のメモリ１０２上のＷｒｉｔｅデータの取得、手順１１５のＷｒｉｔｅデータの送付、又は手順１１６の記憶デバイス内のＷｒｉｔｅデータ書込みのいずれかにおける何らかの誤動作ないし障害によってデータを正しく記憶デバイス１０３内に書込めなかった場合、当該ブロックのデータは無効化されたままとなり、その後の読出しで検出することができる。
【実施例２】
【００３４】
次に図１（ａ）、図２、図３、図４、図８を用いて、本発明の実施例２を説明する。以下に説明する相違点を除き、実施例２の各部は、図１、図８（ａ）〜図８（ｃ）等に示された実施例１の同一の符号を付された各部と同一であるため、それらの説明は省略する。
【００３５】
本発明の実施例２では、記憶デバイス１０３は、データ無効化コマンド、ＷｒｉｔｅコマンドまたはＲｅａｄコマンドを受信し、それぞれデータ無効化処理、Ｗｒｉｔｅ処理またはＲｅａｄ処理を完了したら、プロセッサ１０１へそれぞれデータ無効化コマンド完了報告、Ｗｒｉｔｅコマンド完了報告、Ｒｅａｄコマンド完了報告または無効データ報告を行う。データ無効化コマンド完了報告の例を図８（ｄ）に、Ｗｒｉｔｅコマンド完了報告の例を図８（ｅ）に、Ｒｅａｄコマンド完了報告の例を図８（ｆ）に、無効データ報告の例を図８（ｇ）に示す。
【００３６】
本実施例においても、実施例１と同じく、図１（ａ）に示す通り、プロセッサ１０１とメモリ１０２と、記憶デバイス１０３があり、メモリ１０２はプロセッサ１０１に接続され、記憶デバイス１０３はプロセッサ１０１とＩＯバス１０４で接続されるものとする。
【００３７】
本実施例では、図２を用いて、記憶デバイス１０３に対するデータ書込みと、その後の記憶デバイス１０３からのデータ読出しの動作を説明する。
【００３８】
図２において、初めに記憶デバイス１０３にデータを書込む前に、プロセッサ１０１から当該領域のデータを無効化するデータ無効化コマンドを手順２０１で記憶デバイス１０３に送付する。このデータ無効化コマンドの例は、図８（ａ）に示した通りである。
【００３９】
データ無効化コマンドを受信した記憶デバイス１０３は、手順２０２で指定されたデータ無効化の処理を実施する。実施例１の場合と同様に、ここで指定されるデータブロックは、その後に送付されるＷｒｉｔｅコマンドによって指定されるデータブロックと同一である。これによって、後のＷｒｉｔｅコマンドによる書込み対象の領域が無効化される。データ無効化処理が完了すると、手順２０３にて記憶デバイス１０３は、プロセッサ１０１にデータ無効化コマンドの完了を報告する。
【００４０】
プロセッサ１０１は、次に、当該領域へデータを書込むＷｒｉｔｅコマンドを、手順２０４にて記憶デバイス１０３に送付する。このＷｒｉｔｅコマンドの例は図８（ｂ）に示した通りである。
【００４１】
記憶デバイス１０３は、Ｗｒｉｔｅコマンドの送付を手順２０４で受けると、指定された書込みデータのメモリアドレスに従って、プロセッサ１０１を経由してメモリ１０２上の書込みデータを取得するデータ取得要求を手順２０５で送付する。
【００４２】
プロセッサ１０１は送付されたデータ取得要求に従って、メモリ１０２上のＷｒｉｔｅデータを手順２０６で取得する。その後手順２０７で、プロセッサ１０１は、メモリ１０２から取得したデータを記憶デバイス１０３に送付する。
【００４３】
記憶デバイス１０３は、手順２０７で送付された書込みデータを手順２０８でデバイス内のＷｒｉｔｅコマンドで指定されたブロックアドレスに書込む。なお、この手順２０６及び手順２０７におけるプロセッサ１０１の動作は、手順２０５で記憶デバイス１０３より送付されるデータ取得要求に従って動作するハードウェアを、プロセッサ１０１上に設けて実現しても良いし、プロセッサ１０１上で動作するソフトウェアで実現しても良い。
【００４４】
記憶デバイス１０３は、手順２０８のデバイス内への書込みが完了すると、手順２０９にてＷｒｉｔｅコマンド完了報告をプロセッサ１０１に報告する。
【００４５】
プロセッサ１０１は、次に手順２１０にて、Ｒｅａｄコマンドを記憶デバイス１０３に送付する。このＲｅａｄコマンドの例は、図８（ｃ）に示す通りである。記憶デバイス１０３はＲｅａｄコマンドを受信すると、手順２１１にてデバイス内の指定されたブロックアドレスから、当該データを読み出す。次に手順２１２で、読出したデータをプロセッサ１０１に送付する。
【００４６】
プロセッサ１０１は、送付されたデータを手順２１３でメモリ１０２に格納する。このメモリ１０２へのデータの格納は、手順２１２で記憶デバイス１０３から送付されるデータに従って動作するハードウェアを、プロセッサ１０１上に設けて実現しても良いし、プロセッサ１０１上で動作するソフトウェアで実現しても良い。
【００４７】
記憶デバイス１０３は、最後に手順２１１のデータ読出しにおいて正しくデータが読み出せた場合はＲｅａｄコマンド完了報告を、手順２１１にて無効化されたデータを読み出そうとした場合には、無効データ報告を、手順２１４にてプロセッサ１０１に報告する。
【００４８】
本実施例の記憶デバイス１０３の動作を、図３及び図４を用いて更に詳しく説明する。
【００４９】
図３は、図２の手順２０１から手順２０９における、記憶デバイス１０３がデータ無効化コマンド及びＷｒｉｔｅコマンドを受信した時の動作のフローチャートの例である。
【００５０】
図３において、記憶デバイス１０３は、ステップ３００にてデータ無効化コマンドを受信する。これは図２の手順２０１に相当する。記憶デバイス１０３は、次にステップ３０１に進み、受信したデータ無効化コマンドの指示に従って、データ無効化処理を実施する。そしてステップ３０２にて、記憶デバイス１０３は、指定された領域の無効化処理が完了したかどうか判定し、完了するまでステップ３０１に戻ってデータ無効化処理を実施する。このステップ３０１及び３０２の処理は、図２の手順２０２に相当する。
【００５１】
なお、ステップ３０１において、記憶デバイス１０３は、データ無効化コマンドによって指定されたデータブロックに実際に何らかの（例えば所定のパターンの）無効であることを示すようなデータを書き込んでもよいが、そのようなデータを書き込むことなく（又は書き込んだ上で）、それらのブロックに対するＲｅａｄコマンドを受けた場合に読出しエラーを返すことを示すマークを付与してもよい。この場合、ステップ３１０では書込みに成功した場合には、当該データに対応するマークが削除される。実際にデータを書き込まずに所定のマークを付与することによって、記憶デバイスの処理の負荷が軽減される。
【００５２】
ステップ３０２にて、指定された領域の無効化処理が完了したと判定されると、ステップ３０３に進み、記憶デバイス１０３は、プロセッサ１０１にデータ無効化完了報告を行う。これは図２の手順２０３に相当する。
【００５３】
ステップ３０４にて、記憶デバイス１０３はＷｒｉｔｅコマンドを受信する。これは図２の手順２０４に相当する。図３においては、記憶デバイス１０３は次に受信したＷｒｉｔｅコマンドに従って、ステップ３０５にてＷｒｉｔｅデータ取得要求をプロセッサ１０１に送付する。その後ステップ３０６にて、記憶デバイス１０３は要求したＷｒｉｔｅデータを受信する。
【００５４】
ステップ３０７にて、記憶デバイス１０３はＷｒｉｔｅデータを正常に受信したかどうか判定する。判定の結果正常なデータ受信に成功していたら、ステップ３０８にて、記憶デバイス１０３は記憶デバイス１０３内の内部記憶メディアにデータを書込む。記憶デバイス１０３が半導体ドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、すなわち不揮発半導体記憶デバイスであれば、内部記憶メディアは例えば、半導体ドライブに内蔵されるフラッシュメモリチップである。
【００５５】
ステップ３０９にて、記憶デバイス１０３は内部記憶メディアに対してデータの書込みが成功したかどうかを判定する。成功したと判定した場合には、ステップ３１０にて記憶デバイス１０３は当該データを有効化する処理を行う。
【００５６】
ステップ３０７でＷｒｉｔｅデータの受信に成功していなかった時、及びステップ３０９で内部記憶メディアへのデータ書込みが成功しなかった時には、ステップ３１１に達し、記憶デバイス１０３は当該データに対し無効化した状態を維持する。
【００５７】
ステップ３１２にて、記憶デバイス１０３は受信したＷｒｉｔｅコマンドに指定された領域をすべて処理したかどうかを判定し、処理が完了していなければ、ステップ３０５に戻ってその後の処理を繰り返す。
【００５８】
処理が完了した場合には、ステップ３１３に進み、記憶デバイス１０３はプロセッサ１０１にＷｒｉｔｅ完了報告を実施して、処理を終了する。
【００５９】
図４は、図２の手順２１０から２１４における、記憶デバイス１０３がＲｅａｄコマンドを受信した時の動作のフローチャートの例である。
【００６０】
図４において、記憶デバイス１０３は、ステップ４００にて、Ｒｅａｄコマンドを受信する。記憶デバイス１０３は、次にステップ４０１に進み、指定されたデータを内部記憶メディアから読み出す。ここで、図３と同じく、記憶デバイス１０３が半導体ドライブであれば、内部記憶メディアは例えば、半導体ドライブに内蔵されるフラッシュメモリチップである。
【００６１】
記憶デバイス１０３は、次にステップ４０２において、内部記憶メディアから読み出したデータが有効なデータであるかどうか、判定する。判定した結果有効なデータであれば、ステップ４０３にて記憶デバイス１０３は当該データをプロセッサ１０１に送信する。そして、次にステップ４０４に進み、記憶デバイス１０３はＲｅａｄコマンドで指定された全領域について読出しを行ったか判定する。判定の結果まだ読出しを行っていない領域があれば、ステップ４０１に戻って、記憶デバイス１０３はその後の処理を繰り返す。
【００６２】
ステップ４０４の判定の結果、指定されたすべての領域の読出しが完了したのであれば、ステップ４０５にて記憶デバイス１０３はＲｅａｄ完了報告をプロセッサ１０１に送付し、処理を終了する。
【００６３】
ステップ４０２にて、内部記憶メディアから読み出したデータが有効でないと判定された場合には、ステップ４０６に進み、記憶デバイス１０３はプロセッサ１０１に無効データ報告を行って処理を終了する。例えば、図３のステップ３０１において、無効化されたままのブロックに対するＲｅａｄコマンドを受けた場合には、ステップ４０２において、読出しエラーを返すことを示すマークが付与されているので、それにより読み出したデータが有効でないと判定され、ステップ４０６において、無効データ報告として読出しエラーが送付される。
【００６４】
本実施例では、以上の処理を実行することによって、記憶デバイス１０３からのデータ読出し時に、データ書込みが成功していなかった場合、プロセッサ１０１に無効なデータであることが報告され、プロセッサ１０１が判定することができる。また無効データであるかどうかは、記憶デバイス１０３からプロセッサ１０１に報告されるため、プロセッサ１０１で改めて読み出したデータを検査する必要はなく、プロセッサ１０１におけるオーバーヘッドが低減可能である。
【実施例３】
【００６５】
次に図１（ａ）、図５、図６、図９、図１０を用いて、本発明の実施例３を説明する。以下に説明する相違点を除き、実施例３の各部は、図１〜図４、図８等に示された実施例１〜２の同一の符号を付された各部と同一であるため、それらの説明は省略する。
【００６６】
本発明の実施例３では、記憶デバイス１０３には、図９（ａ）に示す１ブロックずつのデータに対して、図９（ｂ）または（ｃ）に示すようにメタデータを付与したデータを格納するものとする。このうち図９（ｂ）は、データの１ブロックに対しメタデータをそれぞれ付与した形式の例、図９（ｃ）は、データのすべてのブロックに対するメタデータをデータのブロックとは別にまとめて付与する形式の例を示す。
【００６７】
また、実施例１及び２ではデータ無効化コマンドが使用されたが、これは書込み対象の領域を無効化するためのコマンドの一例であり、他のコマンドが使用されてもよい。実施例３では、記憶デバイス１０３の書込み対象の領域を無効化するためのコマンドとして、データ無効化コマンドの替わりにゼロデータＷｒｉｔｅコマンドを用いる例を示す。ゼロデータＷｒｉｔｅコマンドの例を図９（ｄ）に示す。書込むデータがゼロデータと定まっているので、ゼロデータＷｒｉｔｅコマンドは、図８（ａ）のデータ無効化コマンドと同じく、コマンドコード、複数のゼロデータＷｒｉｔｅコマンドを識別するタグ、ゼロデータを書込む記憶デバイス１０３上のデータブロックを指定するブロックアドレス、及びゼロデータを書込むブロック数からなり、メモリ１０２上のアドレスは付与されない。
【００６８】
更に本実施例において、ゼロデータＷｒｉｔｅコマンドを受けた記憶デバイス１０３は、データとしてゼロデータを書込むが、メタデータとしてはすべて’１’を書込む。これに対して、通常のＷｒｉｔｅコマンドを受けた場合、記憶デバイス１０３は、データとして当該Ｗｒｉｔｅコマンドに応じて（すなわち後述する図１０の手順２５７で送付された）Ｗｒｉｔｅデータを書込み、メタデータとしては’０’を書込む。
【００６９】
本実施例においても、実施例１及び実施例２と同じく、図１（ａ）に示す通り、プロセッサ１０１とメモリ１０２と、記憶デバイス１０３があり、メモリ１０２はプロセッサ１０１に接続され、記憶デバイス１０３はプロセッサ１０１とＩＯバス１０４で接続される。
【００７０】
本実施例では、図１０を参照して、記憶デバイス１０３に対するデータ書込みと、その後の記憶デバイス１０３からのデータ読出しの動作を説明する。
【００７１】
図１０では、初めに手順２５１にて、プロセッサ１０１から記憶デバイス１０３に対し、ゼロデータＷｒｉｔｅコマンドを送付する。次に手順２５２にて、記憶デバイス１０３は送付されたゼロデータＷｒｉｔｅコマンドに従って、ゼロデータ書込み処理を実施する。その後、手順２５３にて、実施例２の図２における手順２０３と同じように、ゼロデータのＷｒｉｔｅコマンド完了報告をプロセッサ１０１に送付する。その後の手順２５４から手順２６４までは、図５及び図６を参照して説明する相違点を除いて、図２の手順２０４から２１４までの動作と同じである。
【００７２】
次に、本実施例３における記憶デバイス１０３の動作を、図５及び図６を参照して更に詳しく説明する。
【００７３】
図５は、図１０の手順２５１から２５９における、記憶デバイス１０３がゼロデータＷｒｉｔｅコマンド及びＷｒｉｔｅコマンドを受信した時の動作のフローチャートの例である。
【００７４】
図５において、記憶デバイス１０３は、ステップ５００にてゼロデータＷｒｉｔｅコマンドを受信する。これは図１０の手順２５１に相当する。記憶デバイス１０３は、次にステップ５０１に進み、受信したゼロデータＷｒｉｔｅコマンドの指示に従って、内部記憶メディアにゼロデータを書込む。但しその際、メタデータは’１’として書込みを行う。ここで、実施例２の図３、図４と同じく、記憶デバイス１０３が半導体ドライブであれば、内部記憶メディアは例えば、半導体ドライブに内蔵されるフラッシュメモリチップである。
【００７５】
そしてステップ５０２にて、記憶デバイス１０３は指定された領域のゼロデータ書込みが完了したかどうか判定し、完了するまでステップ５０１に戻ってゼロデータの書込みを実施する。このステップ５０１、５０２の処理は、図１０の手順２５２に相当する。
【００７６】
ステップ５０２にて、指定された領域のゼロデータ書込み処理が完了したと判定されると、ステップ５０３に進み、記憶デバイス１０３は、プロセッサ１０１にゼロデータ書込みの完了報告を行う。これは図１０の手順２５３に相当する。
【００７７】
ステップ５０４にて、記憶デバイス１０３はＷｒｉｔｅコマンドを受信する。これは図１０の手順２５４に相当する。次に、ステップ５０５にて記憶デバイス１０３は、受信したＷｒｉｔｅコマンドに従って、Ｗｒｉｔｅデータ取得要求をプロセッサ１０１に送付する。その後ステップ５０６にて、記憶デバイス１０３は要求したＷｒｉｔｅデータを受信する。ステップ５０７にて、記憶デバイス１０３はＷｒｉｔｅデータを正常に受信したかどうか判定する。判定の結果正常なデータ受信に成功していたら、ステップ５０８にて、記憶デバイス１０３は内部記憶メディアにデータを書込む。
【００７８】
ステップ５０９にて、記憶デバイス１０３は内部記憶メディアに対してデータの書込みが成功したかどうかを判定する。成功したと判定した場合には、ステップ５１０にて、メタデータに’０’を書込む。
【００７９】
ステップ５０７でＷｒｉｔｅデータの受信に成功していなかった時、及びステップ５０９で内部記憶メディアへのデータ書込みが成功しなかった時には、ステップ５１１に達し、記憶デバイス１０３は当該データとしてメタデータを’１’としたゼロデータを維持する。
【００８０】
ステップ５１２にて、受信したＷｒｉｔｅコマンドに指定された領域をすべて処理したかどうかを判定し、処理が完了していなければ、ステップ５０５に戻ってその後の処理を繰り返す。
【００８１】
完了した場合には、ステップ５１３に進み、記憶デバイス１０３はプロセッサ１０１にＷｒｉｔｅ完了報告を実施して、処理を終了する。
【００８２】
図６は、図１０の手順２６０から２６４における、記憶デバイス１０３がＲｅａｄコマンドを受信した時の動作のフローチャートの例である。
【００８３】
図６において、記憶デバイス１０３は、ステップ６０１にて、Ｒｅａｄコマンドを受信する。記憶デバイス１０３は、次にステップ６０２に進み、指定されたデータを内部記憶メディアから読み出す。ここで、図５と同じく、記憶デバイス１０３が半導体ドライブであれば、内部記憶メディアは例えば、半導体ドライブに内蔵されるフラッシュメモリチップである。
【００８４】
記憶デバイス１０３は、次にステップ６０３において、内部記憶メディアから読み出したデータのメタデータが’１’であるかどうかを判定する。判定した結果メタデータが’１’でなければ正常に書込まれたデータと判断し、ステップ６０４にて記憶デバイス１０３は当該データをプロセッサ１０１に送信する。この際、‘１’でないメタデータも、当該データに付与して送信される。
【００８５】
ステップ６０３にて、内部記憶メディアから読み出したデータのメタデータが’１’であると判定された場合には、正常に書込まれたデータでないと判断し、ステップ６０５に進み、記憶デバイス１０３はプロセッサ１０１に、値が’１’のメタデータを付与したゼロデータを送信する。
【００８６】
ステップ６０４及びステップ６０５のいずれの場合にも、次にステップ６０６に進み、記憶デバイス１０３はＲｅａｄコマンドで指定された全領域について読出しを行ったか判定する。判定の結果まだ読出しを行っていない領域があれば、ステップ６０２に戻って、その後の処理を繰り返す。
【００８７】
ステップ６０６で判定の結果、指定されたすべての領域の読出しが完了したのであれば、ステップ６０７にて記憶デバイス１０３はＲｅａｄ完了報告をプロセッサ１０１に送付し、処理を終了する。
【００８８】
図７は、Ｒｅａｄコマンドを記憶デバイス１０３に送信して記憶デバイス１０３からデータを読み出す際のプロセッサ１０１における処理のフローチャートの例である。
【００８９】
図７において、プロセッサ１０１はステップ７００にてＲｅａｄコマンドを送信する。そしてステップ７０１にてプロセッサ１０１はＲｅａｄデータを受信する。受信したデータは、メタデータと共にメモリ１０２に格納される。次にステップ７０２にてプロセッサ１０１はＲｅａｄ完了報告を受信する。
【００９０】
その後、ステップ７０３にて、プロセッサ１０１はメモリ１０２に格納したデータのメタデータを順に調べて、メタデータが’１’であるかどうか判定する。メタデータが’１’でないと判定された場合には、正常なデータを受信したと判断して、ステップ７０４に進み、プロセッサ１０１は正常なデータを受信した時の処理を行う。
【００９１】
次にステップ７０５で、プロセッサ１０１は受信したＲｅａｄデータすべてに対して処理が完了したかどうか判定し、完了していない場合には、ステップ７０３に戻って処理を繰り返す。
【００９２】
またステップ７０３にてメタデータが’１’であると判定された場合にはステップ７０６に進み、プロセッサ１０１はデータ異常時の処理を行う。
【００９３】
以上の処理を実行することによって、記憶デバイス１０３からのデータ読出し時に、データ書込みが成功していなかった場合、プロセッサ１０１にメタデータが’１’であるデータが読み出されるので、データ書込みが成功していなかったことを検出することができる。また、データ無効化コマンドではなく、メタデータを’１’とするゼロデータＷｒｉｔｅコマンドを用いることによって、上記の効果を得ることができる。
【００９４】
なお、上記のゼロデータＷｒｉｔｅコマンドは、所定のパターンのデータと、メタデータとを書き込むためのコマンドの一例であり、ゼロデータ以外のパターンのデータを書き込むためのコマンドが利用できる場合には、そのコマンドを使用してもよい。また、そのコマンドによって書き込まれたデータのパターンによって、当該データが通常のＷｒｉｔｅコマンドによって書き込まれたものでない（すなわち無効なデータである）ことが識別できる場合には、プロセッサ１０１は、ステップ７０３において、メタデータによらずに、受信したＲｅａｄデータのパターンに基づいて、正常なデータを受信したか否かを判定してもよい。この場合、記憶デバイス１０３は、ステップ５０１において、ゼロデータＷｒｉｔｅコマンドに応じてメタデータを付与しなくてよいし、ステップ６０４及び６０５においてメタデータを送信しなくてよい。
【実施例４】
【００９５】
次に図１（ａ）、図５、図９、図１０、図１１を用いて、本発明の実施例４を説明する。以下に説明する相違点を除き、実施例４の各部は、図１〜図１０等に示された実施例１〜３の同一の符号を付された各部と同一であるため、それらの説明は省略する。
【００９６】
本発明の実施例４では、記憶デバイス１０３には、実施例３と同じく、図９（ａ）に示す１ブロックずつのデータに対して、図９（ｂ）または（ｃ）に示すようにメタデータを付与したデータが格納される。
【００９７】
また本実施例４においても、記憶デバイス１０３に対してデータ無効化コマンドの替わりに、ゼロデータＷｒｉｔｅコマンドを用いる。ゼロデータＷｒｉｔｅコマンドについては、実施例３と同じく図９（ｄ）に例を示す。更に本実施例においても、ゼロデータＷｒｉｔｅコマンドは、データにはゼロデータを書込むが、メタデータはすべて’１’を書込む。これに対して、通常のＷｒｉｔｅコマンドでデータを書込んだ場合は、メタデータは’０’とする。
【００９８】
本実施例においても、実施例１〜３と同じく、図１（ａ）に示す通り、プロセッサ１０１とメモリ１０２と、記憶デバイス１０３があり、メモリ１０２はプロセッサ１０１に接続され、記憶デバイス１０３はプロセッサ１０１とＩＯバス１０４で接続されるものとする。
【００９９】
本実施例における、記憶デバイス１０３に対するデータ書込みと、その後の記憶デバイス１０３からのデータ読出しの動作の例は、実施例３において、図１０に示したものと同じである。説明も実施例３における図１０の説明と同じである。
【０１００】
本実施例では、図１０の手順２６０から２６４における、記憶デバイス１０３がＲｅａｄコマンドを受信した時の動作のフローチャートの例として、図６に替えて、図１１を用いる。
【０１０１】
図１１において、記憶デバイス１０３は、ステップ６５０にて、Ｒｅａｄコマンドを受信する。記憶デバイス１０３は、次にステップ６５１に進み、指定されたデータを内部記憶メディアから読み出す。ここで、図５と同じく、記憶デバイス１０３が半導体ドライブであれば、内部記憶メディアは例えば、半導体ドライブに内蔵されるフラッシュメモリチップである。
【０１０２】
記憶デバイス１０３は、次にステップ６５２において、内部記憶メディアから読み出したデータのメタデータが’１’であるかどうかを判定する。判定した結果メタデータが’１’でなければ正常に書込まれたデータと判断し、ステップ６５３にて記憶デバイス１０３は当該データをプロセッサ１０１に送信する。ステップ６５３においては、記憶デバイス１０３は、当該データにメタデータを付与してプロセッサ１０１に送信しても良いし、メタデータを取り除いて送信してもよい。これは予めプロセッサ１０１と記憶デバイス１０３の間で取決めておくものとする。
【０１０３】
次にステップ６５４に進み、記憶デバイス１０３はＲｅａｄコマンドで指定された全領域について読出しを行ったか判定する。判定の結果まだ読出しを行っていない領域があれば、ステップ６５１に戻って、その後の処理を繰り返す。
【０１０４】
ステップ６５４で判定の結果、指定されたすべての領域の読出しが完了したのであれば、ステップ６５５にて記憶デバイス１０３はＲｅａｄ完了報告をプロセッサ１０１に送付し、処理を終了する。
【０１０５】
ステップ６５２において、内部記憶メディアから読み出したデータのメタデータが’１’であると判定された場合には、正常に書込まれたデータでないと判断し、ステップ６５６に進み、記憶デバイス１０３はプロセッサ１０１に無効データ報告を行って、処理を終了する。
【０１０６】
以上の処理を実行することによって、記憶デバイス１０３からのデータ読出し時に、データ書込みが成功していなかった場合、プロセッサ１０１に無効データ報告が行われることによって、書込みの失敗を検出することができる。
【０１０７】
更に、正常なデータ書込みが行われていなかった場合、記憶デバイス１０３から無効データ報告が行われるので、プロセッサ１０１にてメタデータが‘１’であるかどうかを判定しなくとも、記憶デバイス１０３からの報告が正常なＲｅａｄ完了報告か、無効データ報告かに基づいて、正常なデータ書込みが行われていなかったことを判定することができる。これによって、判定に関するプロセッサ１０１の処理を軽減することができる。
【０１０８】
なお、実施例３と同様に、実施例４でも、ゼロデータＷｒｉｔｅコマンドの代わりに、ゼロデータ以外のパターンのデータを書き込むためのコマンドが使用されてもよい。また、そのコマンドによって書き込まれたデータのパターンによって、当該データが無効か否かを識別できる場合には、記憶デバイス１０３は、ステップ６５２において、メタデータによらずに、読み出したデータのパターンに基づいて、そのデータが正常に書き込まれたものであるかを判定してもよい。
【０１０９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明のより良い理解のために詳細に説明したのであり、必ずしも説明の全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１１０】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によってハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによってソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【０１１１】
また、制御線及び情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線及び情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１１２】
１０１…プロセッサ
１０２…メモリ
１０３…記憶デバイス
【図１】
2020086483.tif 000003
【図２】
2020086483.tif 000004
【図３】
2020086483.tif 000005
【図４】
2020086483.tif 000006
【図５】
2020086483.tif 000007
【図６】
2020086483.tif 000008
【図７】
2020086483.tif 000009
【図８】
2020086483.tif 000010
【図９】
2020086483.tif 000011
【図１０】
2020086483.tif 000012
【図１１】
2020086483.tif 000013