(57)【要約】【課題】信頼性が劣化した不揮発性メモリをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。【解決手段】外部記憶装置は、不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、移行条件が成立したとき、不揮発性メモリのリード動作のみをサポートするインタフェースコントローラに切り替える。ホスト装置は、外部記憶装置から取得した情報に基づき不揮発性メモリをリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、不揮発性メモリのリード動作のみをサポートするインタフェースドライバに切り替える。【選択図】図１
2012198869.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置と、外部記憶装置とを備える情報処理装置において、
外部記憶装置は、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第１のインタフェースコントローラから第２のインタフェースコントローラへ前記インタフェースコントローラを切り替える第１の制御部と、
を備え、
前記ホスト装置は、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースドライバとが択一選択可能なインタフェースドライバと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える第２の制御部と、
を備えることを特徴とする情報処理装置。 
【請求項２】
前記第１の制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項１に記載の情報処理装置。 
【請求項３】
前記第２の制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１または請求項２に記載の情報処理装置。 
【請求項４】
前記第１のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第２のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト動作のうちのリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項１乃至請求項３の何れか一つに記載の情報処理装置。 
【請求項５】
前記第２のインタフェースコントローラは、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記第２の制御部は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項１乃至請求項４の何れか一つに記載の情報処理装置。 
【請求項６】
前記第２の制御部は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップすることを特徴とする請求項１乃至請求項５の何れかに記載の情報処理装置。 
【請求項７】
ホスト装置と、リード及びライト可能な不揮発性メモリを有する外部記憶装置とを備える情報処理装置の制御方法において、
前記外部記憶装置は、前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、前記ホスト装置と接続されるインタフェースコントローラを不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースコントローラから前記不揮発性メモリのリード動作のみをサポートする第２のインタフェースコントローラに切り替え、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記外部記憶装置を動作させるためのインタフェースドライバを前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバから前記不揮発性メモリのリード動作のみをサポートする第２のインタフェースドライバに切り替える
ことを特徴とする情報処理装置の制御方法。 
【請求項８】
前記外部記憶装置は、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記ホスト装置は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項７に記載の情報処理装置の制御方法。 
【請求項９】
前記ホスト装置は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項７または請求項８に記載の情報処理装置の制御方法。 
【請求項１０】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースドライバとが択一選択可能なインタフェースコントローラと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える制御部と、
を備えることを特徴とするホスト装置。 
【請求項１１】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１０に記載のホスト装置。 
【請求項１２】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項１０または請求項１１に記載のホスト装置。 
【請求項１３】
前記制御部は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項１０乃至請求項１２の何れか一つに記載のホスト装置。 
【請求項１４】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースドライバとが択一選択可能なインタフェースコントローラを備えるホスト装置にロードされる制御プログラムであって、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える制御部を備えることを特徴とする制御プログラム。
【請求項１５】
前記制御部は、外部記憶装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１４に記載の制御プログラム。
【請求項１６】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１４に記載の制御プログラム。
【請求項１７】
前記制御部は、外部記憶装置に対し統計情報の送信を要求し、外部記憶装置から受信した統計情報と閾値との比較を行い、統計情報が閾値を超過しているとき、外部記憶装置をリードオンリーメモリとして認識すべきと判断することを特徴とする請求項１４乃至請求項１６の何れか一つに記載の制御プログラム。
【請求項１８】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項１４乃至請求項１７の何れか一つに記載の制御プログラム。 
【請求項１９】
前記制御部は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項１４乃至請求項１８の何れか一つに記載の制御プログラム。 
【請求項２０】
ホスト装置に接続される外部記憶装置であって、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第１のインタフェースコントローラから第２のインタフェースコントローラへ前記インタフェースコントローラを切り替える制御部と、
を備えることを特徴とする外部記憶装置。 
【請求項２１】
前記制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項２０に記載の外部記憶装置。 
【請求項２２】
前記第１のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第２のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項２０または請求項２１に記載の外部記憶装置。 
【請求項２３】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置において、
前記ホスト装置は、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部と、
を備え、
前記中継装置は、
前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、
前記制御部は、中継装置からの前記通知に応答して前記中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置。 
【請求項２４】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置の制御方法において、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知し、
前記中継装置は、前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知し、
前記ホスト装置は、中継装置からの前記通知に応答して、前記中継装置を動作させるためのインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置の制御方法。 
【請求項２５】
リード及びライト可能な不揮発性メモリを有する外部記憶装置と、
前記外部記憶装置から受信した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部を有するホスト装置と
の間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置であって、
前記ホスト装置の起動時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、前記通知部によるホスト装置への通知によって、ホスト装置において、中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用可能とすることを特徴とする中継装置。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
コンピュータシステムに用いられる外部記憶装置として、ＮＡＮＤ型フラッシュメモリなどの不揮発性半導体メモリを搭載したＳＳＤ（Solid State Drive）が注目されている。フラッシュメモリは、磁気ディスク装置に比べ、高速、軽量などの利点を有している。ＳＳＤ内には、複数のフラッシュメモリチップ、ホスト装置からの要求に応じて各フラッシュメモリチップのリード／ライト制御を行うコントローラ、各フラッシュメモリチップとホスト装置との間でデータ転送を行うためのバッファメモリ、電源回路、ホスト装置に対する接続インタフェースなどを備えている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２１７６０３号公報
【特許文献２】特開２００８−０９０５３９号公報
【特許文献３】特開２００２−３５１６２１号公報
【特許文献４】特開２００６−１８８４８号公報
【特許文献５】特開平０７−７８１０２号公報
【特許文献６】特開２００４−１５１７８５号公報
【特許文献７】特開２００５−１９００７５号公報
【特許文献８】特開２００８−９０５３９号公報
【特許文献９】特開２００１−７５８１３号公報
【非特許文献】
【０００４】
【非特許文献１】ATA/ATAPI Command Set - 2 (ACS-2) d2015r6 Feb.22.2011http://www.t13.org/Documents/UploadedDocuments/docs2011/d2015r6-ATAATAPI_Command_Set_-_2_ACS-2.pdf  ・73頁目〜74頁目、290頁目〜306頁目：SELF-MONITORING, ANALYSIS, AND REPORTING TECHNOLOGY (SMART)   ・98頁目〜99頁目、50頁目：Data Set Management Command （トリムコマンド）  ・p374, “Table 220 - Device Signature for Normal Output”  ・342頁目〜365頁目：SCT Command Transport
【非特許文献２】INCITS T10, INFORMATION TECHNOLOGY - Multi-Media Commands-6 (MMC-6)http://www.t10.org/drafts.htm#MMC_Family  ・p215-p217 “Defined Features”  ・p357-p359, “6.5 GET CONFIGURATION Command“
【非特許文献３】S.M.A.R.T. attributes meaninghttp://www.ariolic.com/activesmart/smart-attributes/
【非特許文献４】S.M.A.R.T. attributes meaninghttp://www.siguardian.com/products/siguardian/on_line_help/s_m_a_r_t_attribute_meaning.html
【非特許文献５】Self-Monitoring, Analysis and Reporting Technology :: Attributeshttp://smartlinux.sourceforge.net/smart/attributes.php
【非特許文献６】SNIA, Solid State Storage Performance Test Specification Version0.9http://www.snia.org/
【非特許文献７】Serial ATA International Organization: Serial ATA Revision 3.1RC Clean DRAFT 2010.09.29  ５５４頁〜５５８頁 13.9 Phy Event Counters (Optional)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の一つの実施形態は、ライト動作不可能になった外部記憶装置をリード動作のみ可能なデバイスとして正常にホスト装置に認識させることが可能な情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態によれば、情報処理装置は、ホスト装置と、外部記憶装置とを備える。外部記憶装置は、リード及びライト可能な不揮発性メモリと、ホスト装置と接続されるインタフェースコントローラと、第１の制御部とを備える。インタフェースコントローラは、第１の制御部は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第１のインタフェースコントローラから第２のインタフェースコントローラへ前記インタフェースコントローラを切り替える。ホスト装置は、前記外部記憶装置を動作させるためのインタフェースドライバと、第２の制御部とを備える。第２の制御部は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図２】図２は、ＮＡＮＤメモリチップの内部構成例を示すブロック図である。
【図３】図３は、ＮＡＮＤメモリチップに含まれる１個のプレーンの構成例を示す回路図である。
【図４】図４は、４値データ記憶方式でのしきい値分布を示す図である。
【図５】図５は、ＳＳＤ制御ツールをＳＳＤに保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図６】図６は、ＳＳＤ制御ツールをその他の外部記憶装置に保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図７】図７は、ＳＳＤ制御ツールをＷＥＢからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図８】図８は、ＳＳＤ制御ツールを光学ドライブからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図９】図９は、ＳＳＤ制御ツールをＵＳＢメモリからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図１０】図１０は、コンピュータシステムの外観的構成を示す図である。
【図１１】図１１は、ホストの機能構成例を示すブロック図である。
【図１２】図１２は、ホストの階層的機能構成例を示すブロック図である。
【図１３】図１３は、ＳＳＤの管理情報を示す図である。
【図１４】図１４は、ＳＳＤの書き込み動作例を示すフローチャートである。
【図１５】図１５は、ＳＳＤのＮＡＮＤメモリの整理の動作例を示すフローチャートである。
【図１６】図１６は、ＳＳＤの読み出し動作例を示すフローチャートである。
【図１７】図１７は、ＳＳＤのエラー発生時の動作例を示すフローチャートである。
【図１８】図１８は、ＳＳＤのリードオンリーモード移行条件が成立したときの動作例を示すフローチャートである。
【図１９】図１９は、統計情報の生の値とＳＳＤの不良率の関係を示すグラフである。
【図２０】図２０は、統計情報の生の値とＳＳＤの性能の関係を示すグラフである。
【図２１】図２１は、ＳＳＤの起動時の動作例を示すフローチャートである。
【図２２】図２２は、ホストの起動時の動作例を示すフローチャートである。
【図２３】図２３は、ホストの動作中の動作例を示すフローチャートである。
【図２４】図２４は、ホストでのドライブ表示画面例を示す図である。
【図２５】図２５は、ホストの起動時の他の動作例を示すフローチャートである。
【図２６】図２６は、統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４の管理テーブルの一例を示す図である。
【図２７】図２７は、ホストの起動時の他の動作例を示すフローチャートである。
【図２８】図２８は、ホストの他の構成例を示すブロック図である。
【図２９】図２９は、図２８に示すホストを採用した場合のホスト起動時の動作例を示すフローチャートである。
【図３０】図３０は、第２の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図３１】図３１は、第３の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図３２】図３２は、第４の実施形態のコンピュータシステムの外観的構成例を示す図である。
【図３３】図３３は、第４の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【発明を実施するための形態】
【０００８】
不揮発性半導体メモリには、ＮＡＮＤ型フラッシュメモリのように、データを記憶させる場合にブロック単位で一度データを消去してからその後に書き込みを行うもの、ページ単位で書き込み／読み出しを行うものなど、消去／書き込み／読み出しの単位が固定されているものがある。一方、パーソナルコンピュータなどのホスト機器がハードディスクをはじめとする２次記憶装置に対してデータの書き込み／読み出しを行う単位は、セクタと呼ばれる。セクタは、半導体記憶装置の消去／書き込み／読み出しの単位とは独立に定められる。例えば、不揮発性半導体メモリの消去／書き込み／読み出しの単位は、ホスト機器の書き込み／読み出しの単位よりも大きい場合がある。
【０００９】
また、フラッシュメモリを用いてパーソナルコンピュータの二次記憶装置を構成する場合、誤りが多いなどの理由によって記憶領域として使用できなくなるブロック（不良ブロック、バッドブロック）や、読み出せなくなる領域（不良領域）などが生じる場合がある。このような不良ブロック数や不良領域数が上限値を超えた場合には、新たな不良ブロックや不良領域を登録することができないので、バッファメモリ（キャッシュメモリ）に格納されているデータとライト要求のあったデータの両方をフラッシュメモリへ書き込むことを保障できない。このため、不良ブロック数や不良領域数が所定値を超えた場合には、フラッシュメモリに空き容量があるにも関わらず、突然データの書き込みが不能になるといった問題があった。
【００１０】
それに対する解決策として、ＮＡＮＤ型フラッシュメモリで発生したバッドクラスタの数とバッドブロックの数を管理し、バッドクラスタ数、バッドブロック数に応じて、ホスト装置からＮＡＮＤ型フラッシュメモリへのデータの書き込みの際の動作モードを切り替えるという方法がある。クラスタとは、ＳＳＤでの論理アドレスとしての管理単位である。クラスタサイズは、セクタサイズの２以上の自然数倍であり、クラスタアドレスは、ＬＢＡの所定のビットから上位のビット列で構成される。
この方法においては、ＳＳＤの動作モードは、例えば以下の３つのモードに分かれる。
・ＷＢモード（Write Back Mode）：キャッシュメモリに一旦データを書き込み、所定の条件に基づきＮＡＮＤ型フラッシュメモリへの追い出しを行う通常の動作モード。
・ＷＴモード：（Write Through Mode）：一回のライト要求でキャッシュメモリに書き込まれたデータを、ＮＡＮＤ型フラッシュメモリに都度書き込む動作モード。ＮＡＮＤ型フラッシュメモリに都度書き込むことで、ホストから書き込まれたデータをできるだけ保障する。ＳＳＤは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、ＷＴモードへと遷移する。
・ＲＯモード（Read Only Mode）：ＮＡＮＤ型フラッシュメモリへの書き込みを伴う処理を全て禁ずるモード。ホストからの全てのライト要求に対してエラーを返し書き込みを行わないようにすることで、ＳＳＤが寿命に近づいたときに、ホストからすでに書き込まれていたデータをできるだけ保障できるようにしている。ＳＳＤは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、またはフリーブロックが不足となったとき、ＲＯモードへと遷移する。
【００１１】
ＷＢモード及びＷＴモードにおいては、ＳＳＤはホストからリード要求とライト要求の両方を受け付けて処理をする。一方、ＲＯモードにおいては、ＳＳＤはホストからリード要求を受け付けて処理をするが、ホストからのライト要求に対しては処理をせずエラーを返す。
【００１２】
Windows(登録商標)などのオペレーティングシステム(ＯＳ)を搭載したホストに対してＳＳＤが接続されたとき、ホストはＳＳＤに対してライト要求を送信し、ライト要求が正常に処理されたとき、ホストはＳＳＤを利用可能な外部記憶装置として認識する。
【００１３】
一方、上記ＲＯモードに遷移したＳＳＤがWindows(登録商標)を搭載したホストに接続されたとき、ホストがＳＳＤに対してライト要求を送信すると、ＳＳＤはホストにエラーを返すため、ホストはＳＳＤを利用可能な外部記憶装置として認識しない場合がある。そのため、読み出しは可能なＲＯモードのＳＳＤをホストに接続しても、過去に記録したデータをＳＳＤから読み出せない可能性があった。
【００１４】
そこで、本実施形態においては、ＲＯモードに移行したＳＳＤをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【００１５】
以下に添付図面を参照して、実施形態にかかる情報処理装置、外部記憶装置、ホスト装置、中継装置及び情報処理装置の制御方法を詳細に説明する。なお、これら実施形態により本発明が限定されるものではない。
【００１６】
（第１の実施形態）
図１にコンピュータシステムの第１の実施形態の構成を示す。本コンピュータシステム１は、外部記憶装置としてのＳＳＤ１０と、ホスト１００と、ＳＳＤ１０とホスト１００とを結ぶメモリインタフェースとしての例えばＡＴＡインタフェース９０とから構成されている。外部記憶装置として、ＳＳＤ１０以外にハードディスクドライブやハイブリッドハードディスクドライブや、ＵＳＢメモリや、ＳＤカードなど、他の読み書き可能な不揮発性記憶装置であってもよい。ホスト１００としては、パーソナルコンピュータ、スチルカメラあるいはビデオカメラなどの撮像装置などであってもよいし、タブレットコンピュータやスマートフォンやゲーム機器やカーナビゲーションシステムなどであってもよい。
【００１７】
図１に示すように、ＳＳＤ１０は、不揮発性半導体メモリとしてのＮＡＮＤ型フラッシュメモリ（以下ＮＡＮＤメモリと略す）２０と、ＡＴＡインタフェース９０を介してホスト１００との信号の送受信を行うインタフェースコントローラ３０と、インタフェースコントローラ３０とＮＡＮＤメモリ２０との中間バッファとして機能するキャシュメモリ（ＣＭ）４０ａを有する揮発性半導体メモリとしてのＲＡＭ（Random Access Memory）４０と、ＮＡＮＤメモリ２０及びＲＡＭ４０の管理、制御、及びインタフェースコントローラ３０の制御を司るメモリコントローラ５０と、ＳＳＤ１０の起動時に初期化等を含む各種起動時処理を行うブートローダとしてのＩＰＬ（Initial Program Loader)５５と、ＮＡＮＤメモリ２０から読み出されたデータの誤り訂正処理を実行するＥＣＣ訂正回路５８と、これら構成要素を接続するバス５７を備える。ＩＰＬ５５はメモリコントローラ５０に含まれてもよい。ＡＴＡインタフェース９０のかわりに、ＵＳＢ（Universal Serial Bus）インタフェースなど、その他のインタフェースを用いてもよい。
【００１８】
ＲＡＭ４０としては、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＰＲＡＭ（Phase Change Random Access Memory）などを採用することができる。ＲＡＭ４０はメモリコントローラ５０に含まれてもよい。
【００１９】
ＮＡＮＤメモリ２０は、ホスト１００によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、ＲＡＭ４０で管理される管理情報をバックアップ用に記憶したりする。ＮＡＮＤメモリ２０は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。ＮＡＮＤメモリ２０は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、ＮＡＮＤメモリ２０では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。
【００２０】
図２にＮＡＮＤメモリ２０を構成するＮＡＮＤメモリチップの内部構成例を示す。ＮＡＮＤメモリ２０は、１以上の個数のＮＡＮＤメモリチップ２００８０より成る。ＮＡＮＤメモリチップ２００８０は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。メモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（Metal Oxide Semiconductor Field Effect Transistor）から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（浮遊ゲート電極）、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。本実施形態では、個々のメモリセルが上位ページ及び下位ページを使用しての２bit/cellの４値記憶方式の書き込み方式である場合について説明するが、個々のメモリセルが単一ページを使用しての１bit/cellの２値記憶方式の書き込み方式、または上位ページ及び中位ページ及び下位ページを使用しての３bit/cellの８値記憶方式の書き込み方式である場合、あるいは４bit/cell以上の多値記憶方式の書き込み方式を採用する場合であっても本発明の本質は変わらない。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、ＭＯＮＯＳ（Metal-Oxide-Nitride-Oxide-Silicon）型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。ＭＯＮＯＳ型のメモリセルトランジスタについても同様に、１ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開２０１０−１６１１９９号公報や特開２０１１−２９５８６号公報に記述されるような３次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【００２１】
図２に示すように、ＮＡＮＤメモリチップ２００８０は、データを記憶するメモリセルをマトリックス状に配置してなるメモリセルアレイ２００８２を備えている。メモリセルアレイ２００８２は複数のビット線と複数のワード線と共通ソース線を含み、ビット線とワード線の交点に電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ２００８２には、ビット線を制御するためのビット制御回路２００８３、及びワード線電圧を制御するためのワード線制御回路２００８５が接続されている。すなわち、ビット線制御回路２００８３は、ビット線を介してメモリセルアレイ２００８２中のメモリセルのデータを読み出す一方、ビット線を介してメモリセルアレイ２００８２中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行う。
【００２２】
ビット線制御回路２００８３には、カラムデコーダ２００８４、データ入出力バッファ２００８９及びデータ入出力端子２００８８が接続されている。メモリセルアレイ２００８２から読み出されたメモリセルのデータは、ビット線制御回路２００８３、データ入出力バッファ２００８９を介してデータ入出力端子２００８８から外部へ出力される。また、外部からデータ入出力端子２００８８に入力された書き込みデータは、データ入出力バッファ２００８９を介して、カラムデコーダ２００８４によってビット線制御回路２００８３に入力され、指定されたメモリセルへの書き込みが行われる。
【００２３】
また、メモリセルアレイ２００８２、ビット線制御回路２００８３、カラムデコーダ２００８４、データ入出力バッファ２００８９、及びワード線制御回路２００８５は、制御回路２００８６に接続されている。制御回路２００８６は、制御信号入力端子２００８７に入力される制御信号に従い、メモリセルアレイ２００８２、ビット線制御回路２００８３、カラムデコーダ２００８４、データ入出力バッファ２００８９、及びワード線制御回路２００８５を制御するための制御信号及び制御電圧を発生させる。ＮＡＮＤメモリチップ２００８０のうち、メモリセルアレイ２００８２以外の回路部分をＮＡＮＤコントローラ（ＮＡＮＤＣ）２００８１と呼ぶ。
【００２４】
図３は、図２に示すメモリセルアレイ２００８２の構成を示している。メモリセルアレイ２００８２はＮＡＮＤセル型メモリセルアレイであり、複数のＮＡＮＤセルを含んで構成されている。１つのＮＡＮＤセルは、直列接続されたメモリセルからなるメモリストリングＭＳと、その両端に接続される選択ゲートＳ１、Ｓ２とにより構成されている。選択ゲートＳ１はビット線ＢＬに接続され、選択ゲートＳ２はソース線ＳＲＣに接続されている。同一のロウに配置されたメモリセルＭＣの制御ゲートはワード線ＷＬ0〜ＷＬm-1に共通接続されている。また、第１の選択ゲートＳ１はセレクト線ＳＧＤに共通接続され、第２の選択ゲートＳ２はセレクト線ＳＧＳに共通接続されている。
【００２５】
メモリセルアレイ２００８２は、１または複数のプレーンを含んでおり、プレーンは複数のブロックを含んでいる。各ブロックは、複数のＮＡＮＤセルにより構成され、このブロック単位でデータが消去される。
【００２６】
また、１つのワード線に接続された複数のメモリセルは、１物理セクタを構成する。この物理セクタ毎にデータが書き込まれ、読み出される（この物理セクタは、後述するＬＢＡの論理セクタとは無関係である）。１物理セクタには、２bit/cell書き込み方式（４値）の場合例えば２ページ分のデータが記憶される。一方、１bit/cell書き込み方式（２値）の場合は、１物理セクタに例えば1ページ分のデータが記憶され、３bit/cell書き込み方式（８値）の場合、１物理セクタに例えば３ページ分のデータが記憶される。
【００２７】
リード動作、プログラムベリファイ動作及びプログラム動作時において、メモリコントローラ５０から受信した物理アドレスに応じて、１本のワード線が選択され、１物理セクタが選択される。この物理セクタ内のページの切り替えは物理アドレスによって行われる。本実施形態ではＮＡＮＤメモリ２０は２bit/cell書き込み方式であり、メモリコントローラ５０は物理セクタには上位ページ（Upper Page）と下位ページ（Lower Page）の２ページが物理ページとして割り当てられていると取扱い、それら全ページに対して物理アドレスが割り当てられている。
【００２８】
２bit/cellの４値ＮＡＮＤメモリは、１つのメモリセルにおける閾値電圧が、４通りの分布を持ち得るように構成されている。図４は、４値ＮＡＮＤセル型フラッシュメモリのメモリセルに記憶される２ビットの４値データ（データ“１１”、“０１”、“１０”、“００”）とメモリセルの閾値電圧分布との関係を示している。なお、図４において、ＶＡ１は、下位ページのみ書き込み済みで上位ページが未書き込みの物理セクタについて、２つのデータを読み出す場合に選択ワード線に印加される電圧であり、ＶＡ１Ｖは、Ａ１への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。
【００２９】
また、ＶＡ２、ＶＢ２、ＶＣ２は、下位ページと上位ページが書き込み済みの物理セクタについて、４つのデータを読み出す場合に選択ワード線に印加される電圧であり、ＶＡ２Ｖ、ＶＢ２Ｖ、ＶＣ２Ｖは、各閾値電圧分布への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。また、Ｖｒｅａｄ１、Ｖｒｅａｄ２は、データの読み出しを行う場合に、ＮＡＮＤセル中の非選択メモリセルに対し印加され、その保持データに拘わらず当該非選択メモリセルを導通させる読み出し電圧を示している。さらに、Ｖｅｖ１、Ｖｅｖ２は、メモリセルのデータを消去する場合において、その消去が完了したか否かを確認するためメモリセルに印加される消去ベリファイ電圧であり、負の値を有する。その大きさは、隣接メモリセルの干渉の影響を考慮して決定される。上述の各電圧の大小関係は、
Ｖｅｖ１＜ＶＡ１＜ＶＡ１Ｖ＜Ｖｒｅａｄ１
Ｖｅｖ２＜ＶＡ２＜ＶＡ２Ｖ＜ＶＢ２＜ＶＢ２Ｖ＜ＶＣ２＜ＶＣ２Ｖ＜Ｖｒｅａｄ２
である。
【００３０】
なお、消去ベリファイ電圧Ｖｅｖ１、Ｖｅｖ２、Ｖｅｖ３は前述の通り負の値であるが、実際に消去ベリファイ動作においてメモリセルＭＣの制御ゲートに印加される電圧は、負の値ではなく、ゼロ又は正の値である。すなわち、実際の消去ベリファイ動作においては、メモリセルＭＣのバックゲートに正の電圧を与え、メモリセルＭＣの制御ゲートには、ゼロ又はバックゲート電圧より小さい正の値の電圧を印加している。換言すれば、消去ベリファイ電圧Ｖｅｖ１、Ｖｅｖ２、Ｖｅｖ３は、等価的に負の値を有する電圧である。
【００３１】
ブロック消去後のメモリセルの閾値電圧分布ＥＲは、その上限値も負の値であり、データ“１１”が割り当てられる。下位ページおよび上位ページ書き込み状態のデータ“１１”、“０１”、“１０”、“００”のメモリセルは、それぞれ正の閾値電圧分布ＥＲ２、Ａ２、Ｂ２、Ｃ２を有し（Ａ２、Ｂ２、Ｃ２の下限値も正の値である）、データ“０１”の閾値電圧分布Ａ２が最も電圧値が低く、データ“００”の閾値電圧分布Ｃ２が最も電圧値が高く、各種閾値電圧分布の電圧値はＡ２＜Ｂ２＜Ｃ２の関係を有する。下位ページ書き込みかつ上位ページ未書き込み状態のデータ“１０”のメモリセルは、正の閾値電圧分布Ａ１を有する（Ａ１の下限値も正の値である）。なお、図４に示す閾値電圧分布はあくまでも一例であって、本発明はこれに限定されるものではない。例えば、図４では閾値電圧分布Ａ２，Ｂ２，Ｃ２は全て正の閾値電圧分布であるとして説明したが、閾値電圧分布Ａ２は負の電圧の分布であり、閾値電圧分布Ｂ２、Ｃ２が正の電圧の分布であるような場合も、本発明の範囲に含まれる。また、閾値電圧分布ＥＲ１・ＥＲ２は正の値であったとしても、本発明はこれに限定されるものではない。また、本実施形態ではＥＲ２、Ａ２、Ｂ２、Ｃ２のデータの対応関係がそれぞれ“１１”、“０１”、“１０”、“００”であるとしているが、たとえばそれぞれ“１１”、“０１” 、“００”、“１０”であるような他の対応関係であってもよい。
【００３２】
１つのメモリセルの２ビットデータは、下位ページデータと上位ページデータからなり、下位ページデータと上位ページデータは別々の書き込み動作、つまり、２回の書き込み動作により、メモリセルに書き込まれる。データを“＊＠”と標記するとき、＊は上位ページデータを、＠は下位ページデータを表している。
【００３３】
まず、下位ページデータの書き込みを、図４の１段目〜２段目を参照して説明する。全てのメモリセルは、消去状態の閾値電圧分布ＥＲを有し、データ“１１”を記憶しているものとする。図１４に示すように、下位ページデータの書き込みを行うと、メモリセルの閾値電圧分布ＥＲは、下位ページデータの値（“１”、或いは“０”）に応じて、２つの閾値電圧分布（ＥＲ１、Ａ１）に分けられる。下位ページデータの値が“１”の場合には、消去状態の閾値電圧分布ＥＲを維持するのでＥＲ１＝ＥＲであるが、ＥＲ１＞ＥＲであってもよい。
【００３４】
一方、下位ページデータの値が“０”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Ｖｔｈを所定量だけ上昇させる。具体的には、ベリファイ電位ＶＡ１Ｖを設定し、このベリファイ電圧ＶＡ１Ｖ以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、メモリセルは、書き込み状態（データ“１０”）に変化する。書き込み動作を所定回繰り返しても閾値電圧に到達しなかった場合（または閾値電圧に到達しないメモリセル数が所定値以上の場合）、当該物理ページに対する書き込みは「書き込みエラー」となる。
【００３５】
次に、上位ページデータの書き込みを、図４の２段目〜３段目を参照して説明する。上位ページデータの書き込みは、チップの外部から入力される書き込みデータ（上位ページデータ）と、メモリセルに既に書き込まれている下位ページデータとに基づいて行われる。
【００３６】
即ち、図４の２段目〜３段目に示すように、上位ページデータの値が“１”の場合には、メモリセルのトンネル酸化膜に高電界がかからないようにし、メモリセルの閾値電圧Ｖｔｈの上昇を防止する。その結果、データ“１１”（消去状態の閾値電圧分布ＥＲ１）のメモリセルは、データ“１１”をそのまま維持し（ＥＲ２）、データ“１０”（閾値電圧分布Ａ１）のメモリセルは、データ“１０”をそのまま維持する（Ｂ２）。ただし、各分布間の電圧マージンを確保するという点で、上述のベリファイ電圧ＶＡ１Ｖよりも大きい正のベリファイ電圧ＶＢ２Ｖを用いて閾値電圧分布の下限値を調整し、これにより閾値電圧分布の幅を狭めた閾値電圧分布Ｂ２を形成するのが望ましい。下限値調整を所定回繰り返しても敷地電圧に到達しなかった場合（または閾値電圧に到達しないメモリセル数が所定値以上の場合）、当該物理ページに対する書き込みは「書き込みエラー」となる。
【００３７】
一方、上位ページデータの値が“０”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Ｖｔｈを所定量だけ上昇させる。具体的には、ベリファイ電位ＶＡ２Ｖ、ＶＣ２Ｖを設定し、このベリファイ電圧ＶＡ１Ｖ以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、データ“１１”（消去状態の閾値電圧分布ＥＲ１）のメモリセルは、閾値電圧分布Ａ２のデータ“０１”に変化し、データ“１０”（Ａ１）のメモリセルは、閾値電圧分布Ｃ２のデータ“００”に変化する。このとき、ベリファイ電圧ＶＡ２Ｖ、ＶＣ２Ｖが用いられて、閾値電圧分布Ａ２、Ｃ２の下限値が調整される。書き込み動作を所定回繰り返しても敷地電圧に到達しなかった場合（または閾値電圧に到達しないメモリセル数が所定値以上の場合）、当該物理ページに対する書き込みは「書き込みエラー」となる。
【００３８】
一方、消去動作においては、消去ベリファイ電位Ｖｅｖを設定し、このベリファイ電圧Ｖｅｖ以下の閾値電圧となるまで消去動作が繰り返される。その結果、メモリセルは、書き込み状態（データ“００”）に変化する。消去動作を所定回繰り返しても敷地電圧に到達しなかった場合（または閾値電圧に到達しないメモリセル数が所定値以上の場合）、当該物理ページに対する消去は「消去エラー」となる。
【００３９】
以上が、一般的な４値記憶方式におけるデータ書き込み方式の一例である。３ビット以上の多ビット記憶方式においても、上記の動作に更に上位のページデータに応じ、閾値電圧分布を８通り以上に分割する動作が加わるのみであるので、基本的な動作は同様である。
【００４０】
ＲＡＭ４０は、ホスト１００とＮＡＮＤメモリ２０間でのデータ転送用キャッシュとして機能するキャッシュメモリ（ＣＭ）４０ａを有する。また、ＲＡＭ４０は、管理情報記憶用メモリ及び作業領域用メモリとして機能する。ＲＡＭ４０で管理される管理テーブルは、ＮＡＮＤメモリ２０に記憶されている各種管理テーブルが起動時などに展開されたものであり、定期的あるいは電源断時にＮＡＮＤメモリ２０に退避保存される。
【００４１】
メモリコントローラ５０は、ＮＡＮＤメモリ２０に記憶されたシステムプログラム（ファームウエア）を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト１００からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト１００−ＮＡＮＤメモリ２０間のデータ転送制御、ＲＡＭ４０及びＮＡＮＤメモリ２０に記憶された各種管理テーブルの更新・管理などを実行する。
【００４２】
ホスト１００はＳＳＤ１０に対し、リード要求またはライト要求を発行する際には、ＡＴＡインタフェース９０を介して論理アドレスとしてのＬＢＡ（Logical Block Addressing）を入力する。ＬＢＡは、セクタ（サイズ：例えば５１２Ｂ）に対して０からの通し番号をつけた論理アドレスである。また、ホスト１００はＳＳＤ１０に対し、リード要求またはライト要求を発行する際には、ＬＢＡと併せて、リード要求またはライト要求の対象となるセクタサイズを入力する。
【００４３】
インタフェースコントローラ３０は、リード／ライトが可能な通常の動作モードで使用されるＡＴＡコントローラなどのリードライトモード用のインタフェースコントローラ（以下、ＲＷＩＦコントローラと略す）３１と、読み出しのみ許可されるリードオンリーモードにおいて使用される読み出し専用メディアの規格のコントローラである例えばＡＴＡＰＩ（ATA Packet Interface）コントローラなどのリードオンリーモード用のインタフェースコントローラ（以下、ＲＯＩＦコントローラと略す）３２と、ＲＷＩＦコントローラ３１及びＲＯＩＦコントローラ３２のいずれかを選択可能な選択スイッチ３３，３４を含む。
【００４４】
選択スイッチ３３は、ＲＷＩＦコントローラ３１及びＲＯＩＦコントローラ３２のいずれか一方を排他的に選択してＡＴＡインタフェース９０と接続し、選択スイッチ３４は、ＲＷＩＦコントローラ３１及びＲＯＩＦコントローラ３２のいずれか一方を排他的に選択してバス５７と接続する。ＲＷＩＦコントローラ３１の選択状態においては、選択スイッチ３３はＡＴＡインタフェース９０とＲＷＩＦコントローラ３１を電気的接続状態にしており、スイッチ３４はバス５７とＲＷＩＦコントローラ３１を電気的接続状態にしている。ＲＯＩＦコントローラ３２の選択状態においては、選択スイッチ３３はＡＴＡインタフェース９０とＲＯＩＦコントローラ３２を電気的接続状態にしており、スイッチ３４はバス５７とＲＯＩＦコントローラ３２を電気的接続状態にしている。
【００４５】
ＲＷＩＦコントローラ３１はＳＳＤ１０がＡＴＡデバイスであることをホスト１００に明示的に示すよう構成されるのが望ましい。たとえば、ATA/ATAPI Command Set-2 (ACS-2)で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を00hに、LBA(23:16)を00hとしてホスト１００に出力することで、ＳＳＤ１０がＡＴＡデバイスであることをホスト１００に通知することができる。ＲＯＩＦコントローラ３２はＳＳＤ１０がＡＴＡＰＩデバイスであることをホスト１００に明示的に示すよう構成されるのが望ましい。たとえば、ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト１００に出力することで、ＳＳＤ１０がＡＴＡＰＩデバイスであることをホスト１００に通知することができる。
【００４６】
ＲＯＩＦコントローラ３２は、ＳＳＤ１０が書き込みコマンドをサポートせず読み出し専用であることをホスト１００に通知するよう構成される。例えば、ＡＴＡインタフェース９０を介してホスト１００からINCITS Multi-Media Commands-6 (MMC-6)に採用されているコマンドGET CONFIGURATION（46h）を受信したとき、ＲＯＩＦコントローラ３２は、Random Writable(Feature Number=0020h)、Incremental Streaming Writable (Feature Number=0021h)、Write Once(Feature Number=0025h)などのFeaturesにおいて、ライト系機能は全て非サポートであることをホスト１００に返信する。これにより、ホスト１００側がＯＳとしてWindows（登録商標）などを使用している場合でも、ＳＳＤ１０が読み出し可能なデバイスとして認識させることが可能となる。なお、ＲＯＩＦコントローラ３２は、ＲＷＩＦコントローラ３１と同じく、ＳＳＤ１０がＡＴＡデバイスであることをホスト１００に明示的に示すよう構成され、ＡＴＡインタフェース９０を介してホスト１００からデバイス識別情報、たとえばＡＣＳ−２記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト１００に返信するよう構成されてもよい。ＳＳＤ１０がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【００４７】
なお、インタフェースコントローラ３０及びそれに含まれる各種コントローラの機能は、すべてをＬＳＩなどのハードウェアとして実装してもよいし、一部または全部をファームウェアなどのソフトウェアとして実装してもよい。ファームウェアは、ＳＳＤ電源オフ時はＮＡＮＤメモリ２０上に保存されているが、ファームウェアとして実装する場合は、ＳＳＤ電源起動時にＲＡＭ４０上またはメモリコントローラ５０上に、ＩＰＬ５５によって読み出されるようにすればよい。
【００４８】
ＲＷＩＦコントローラ３１は、ホスト１００からのリード要求、ライト要求、その他要求及びデータを受信し、受信した要求やデータをメモリコントローラ５０に送信したり、メモリコントローラ５０の制御によりＲＡＭ４０にデータを送信したりする機能を持つ。また、ＲＷＩＦコントローラ３１は、ホスト１００からデバイス識別情報の送信要求を受信したときは、自身が読み書き両方可能なデバイスであるという識別情報をホスト１００に対して送信する。
【００４９】
ＲＯＩＦコントローラ３２は、ホスト１００からのリード要求、ライト要求を除くその他要求及びデータを受信し、受信した要求やデータをメモリコントローラ５０に送信したり、メモリコントローラ５０の制御によりＲＡＭ４０にデータを送信したりする機能を持つ。また、ＲＯＩＦコントローラ３２は、ホスト１００からデバイス識別情報の送信要求を受信したときは、自身が書き込みをサポートしていないというデバイス識別情報をホスト１００に対して送信する。これにより、ホスト１００はＳＳＤ１０が書き込みを非サポートであると認識することになるので、ホスト１００からＳＳＤ１０にライト要求が送信されることはない。自身が書き込みをサポートしていないというデバイス識別情報をホスト１００に対して送信後に、ホスト１００からＳＳＤ１０にライト要求が送信された場合には、ＲＯＩＦコントローラ３２がホスト１００に対してエラーを返すようにしてもよい。ＲＯＩＦコントローラ３２は、ＮＡＮＤメモリ２０の書き込み動作を伴わないコマンドに対しては、ＲＷＩＦコントローラ３１と同様の処理を行ってもよい。
【００５０】
ＩＰＬ５５は、ＳＳＤ１０の電源投入時に起動され、ＮＡＮＤメモリ２０、ＲＡＭ４０、メモリコントローラ５０及びインタフェースコントローラ３０の初期化処理を行う。その際、ＩＰＬ５５は、ＮＡＮＤメモリ２０の管理情報をＮＡＮＤメモリ２０またはＲＡＭ４０から読み出す。ＩＰＬ５５は、読み出した管理情報に基づきリードオンリーモード移行条件が成立するか否か、すなわちＳＳＤ１０が通常の動作モードで使用される状態にあるかあるいはリードオンリーモードにおいて使用される状態にあるかを判断する。ＩＰＬ５５は、この判断の結果、通常モードであると判断した場合は、ＲＷＩＦコントローラ３１を選択するように選択スイッチ３３、３４を設定し、ＲＯＩＦコントローラ３２を非選択状態にする。一方、ＩＰＬ５５は、読み出した管理情報に基づきＳＳＤ１０がリードオンリーモードにおいて使用される状態にあると判断すると、ＲＯＩＦコントローラ３２を選択するように選択スイッチ３３，３４を設定し、ＲＷＩＦコントローラ３１を非選択状態にする。リードオンリーモード移行条件については、後で詳述する。
【００５１】
また、メモリコントローラ５０は、リード／ライト可能な通常の状態でＳＳＤ１０が動作中においても、リードオンリーモード状態へ移行させるためのリードオンリーモード移行条件が成立するか否かを判定しており、通常の状態でＳＳＤ１０が動作中にリードオンリーモード移行条件が成立した場合は、後述のリードオンリーモード移行処理を実行する。このリードオンリーモード移行処理によって、結果的にインタフェースコントローラ３０はＲＯＩＦコントローラ３２に切り替わる。
【００５２】
つぎに、ホスト１００の構成について説明する。ホスト１００は、オペレーティングシステム（ＯＳ）１５０と、ＳＳＤ制御ツール１１０と、ＳＳＤ１０用のインタフェースドライバ１２０を含む。インタフェースドライバ１２０は、ＳＳＤ１０がリード／ライト可能な通常の動作モードであるときに使用されるＡＴＡドライバなどのリードライトモード用のインタフェースドライバ（以下、ＲＷＩＦドライバと略す）１２１と、ＳＳＤ１０がリードオンリーモードであるときに使用されるＡＴＡＰＩドライバの読み出し専用ドライバなどのリードオンリーモード用のインタフェースドライバ（以下、ＲＯＩＦドライバと略す）１２２と、ＳＳＤ１０に適用されるドライバをＲＷＩＦドライバ１２１及びＲＯＩＦドライバ１２２より選択する選択スイッチ１２３，１２４を含む。ＳＳＤ制御ツール１１０は、選択スイッチ１２３，１２４を介して、ＳＳＤ１０に適用されるドライバをＲＷＩＦドライバ１２１またはＲＯＩＦドライバ１２２のいずれか一方から選択するか、あるいはどちらも非選択状態にすることが可能である。ソフトウェア１４０は、ＳＳＤ制御ツール１１０以外のソフトウェアであって、ＳＳＤ１０を使用するソフトウェアである。
【００５３】
ＳＳＤ制御ツール１１０は、例えば、図５に示すように、ホスト１００が電源オフになっているときはＳＳＤ１０のＮＡＮＤメモリ２０の領域にＳＳＤ制御ツール１１０Ａとして格納されているが、ホスト１００の起動時またはプログラム起動時に、ＮＡＮＤメモリ２０から主メモリ２０２にロードされる。一方、ホスト１００に複数の外部記憶装置が接続されている場合は、図６に示すように、ＳＳＤ制御ツール１１０は、ＳＳＤ制御ツール１００Ｂとして、ＳＳＤ１０とは別の外部記憶装置３００の領域に格納されており、ホスト１００の起動時またはプログラム起動時に、外部記憶装置３００から主メモリ２０２にロードされるようにしてもよい。特に、外部記憶装置３００がＯＳ１５０を格納するシステムドライブとして使用されており、ＳＳＤ１０が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブとしての外部記憶装置３００にはＯＳやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブとしてのＳＳＤ１０にはユーザデータを格納するドライブとして使用するというように、ドライブ１０とドライブ３００の役割を明確に分ける観点で、システムドライブとしての外部記憶装置３００にＳＳＤ制御ツール１１０を格納することが望ましい。
【００５４】
ＳＳＤ制御ツール１１０のセットアップをユーザが行う労力を省く観点では、例えば図５や図６に示したように、ＳＳＤ制御ツール１１０がＳＳＤ１０や外部記憶装置３００に格納された状態でコンピュータシステム１が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザがＳＳＤ制御ツールのインストールの可否を選択できるようにする観点、及びユーザに最新のＳＳＤ制御ツールを提供できるようにするという観点では、ＳＳＤ制御ツールは、ＷＥＢからのダウンロード、またはＤＶＤ−ＲＯＭやＵＳＢメモリなど外部記憶媒体からのインストールによりＳＳＤ１０や外部記憶装置３００に格納できるようにすることが望ましい。
【００５５】
図７はＳＳＤ制御ツールをＷＥＢからダウンロードする場合の一例を示すものである。図７において、ＳＳＤ制御ツール１１０ＣはＷＥＢサーバ内の記憶媒体４００に格納されており、ＳＳＤ制御ツール１１０Ｃはインターネットやローカルネットワークや無線ＬＡＮなどのネットワークを介して、たとえばＬＡＮコントローラ２０８を経由してＳＳＤ１０あるいは外部記憶装置３００にダウンロードされる。
【００５６】
図８はＤＶＤ−ＲＯＭやＣＤ−ＲＯＭなど光学メディアからＳＳＤ制御ツールをインストールする場合の一例を示すものである。ＳＳＤ制御ツール１１０ＤはＤＶＤ−ＲＯＭやＣＤ−ＲＯＭなどの光学メディア５００に格納されており、光学メディア５００が光学ドライブ２０６にセットされることで、ＳＳＤ制御ツール１１０Ｄは光学ドライブ２０６を介してＳＳＤ１０あるいは外部記憶装置３００にインストールされる。
【００５７】
図９はＵＳＢメモリからＳＳＤ制御ツールをインストールする場合の一例を示すものである。ＳＳＤ制御ツール１１０ＥはＵＳＢメモリ６００に格納されており、ＵＳＢメモリ６００がＵＳＢコントローラ２０９に接続されることで、ＳＳＤ制御ツール１１０ＥはＵＳＢコントローラ２０９を介してＳＳＤ１０あるいは外部記憶装置３００にインストールされる。ＵＳＢメモリ６００のかわりに、ＳＤカードなどその他外部メモリであってもよいのはもちろんである。ユーザによる入手容易性の観点から、光学メディア５００やＵＳＢメモリ６００はＳＳＤ１０の出荷時に、付属品としてＳＳＤ１０と一緒に梱包されていることが望ましい。一方、光学メディア５００やＵＳＢメモリ６００は、ソフトウェア商品として単独に販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【００５８】
選択スイッチ１２４は、ＲＷＩＦドライバ１２１及びＲＯＩＦドライバ１２２のいずれか一方を排他的に選択してＡＴＡインタフェース９０と接続し、選択スイッチ１２３は、ＲＷＩＦドライバ１２１及びＲＯＩＦドライバ１２２のいずれか一方を排他的に選択してソフトウェア１４０と接続する。ＲＷＩＦドライバ１２１の選択状態においては、選択スイッチ１２４はＡＴＡインタフェース９０とＲＷＩＦドライバ１２１を接続状態にしており、スイッチ１２３はソフトウェア１４０とＲＷＩＦドライバ１２１を接続状態にしている。ＲＯＩＦドライバ１２２の選択状態においては、選択スイッチ１２４はＡＴＡインタフェース９０とＲＯＩＦドライバ１２２を接続状態にしており、選択スイッチ１２３はソフトウェア１４０とＲＯＩＦドライバ１２２を接続状態にしている。
【００５９】
図１０に、コンピュータシステム１の外観的構成を示す。図１０は、一般的なデスクトップ型のパーソナルコンピュータの構成を示している。ＳＳＤ１０はＡＴＡインタフェース９０としてのＳＡＴＡケーブルを介してマザーボード１３０に物理的に接続され、マザーボード１３０上に実装されたサウスブリッジを介して、マザーボード１３０上に取り付けられたＣＰＵ（図示せず）に電気的に接続されている。ＳＳＤ１０は電源ケーブル１３１を介して電源回路１３２に接続されている。マザーボード１３０には、ディスプレイ１３３、キーボード１３４、マウス１３５などが接続されている。コンピュータシステムとしては、デスクトップ型に限らず、ラップトップ型やノート型のパーソナルコンピュータにも適用可能である。
【００６０】
図１１は、ＳＳＤ１０を搭載したホスト１００のシステム構成例を示すものである。ホスト１００は、ＣＰＵ２００、ノースブリッジ２０１、ＤＲＡＭなどの主メモリ２０２、表示コントローラ２０３、ディスプレイ１３３、サウスブリッジ２０５、光学ドライブ２０６、ＢＩＯＳ−ＲＯＭ２０７、ＬＡＮコントローラ２０８、ＵＳＢコントローラ２０９、キーボード１３４、マウス１３５等を備えている。
【００６１】
ＣＰＵ２００は、コンピュータシステムの動作を制御するために設けられたプロセッサであり、ＳＳＤ１０から主メモリ２０２にロードされるオペレーティングシステム（ＯＳ）を実行する。更に、光学ドライブ２０６が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ２００は、それらの処理を実行する。
【００６２】
また、ＣＰＵ２００は、ＢＩＯＳ−ＲＯＭ２０７に格納されたシステムＢＩＯＳ（Basic Input Output System）も実行する。尚、システムＢＩＯＳは、コンピュータシステム内のハードウェア制御のためのプログラムである。
【００６３】
ノースブリッジ２０１は、ＣＰＵ２００のローカルバスと接続するブリッジデバイスである。ノースブリッジ２０１には、主メモリ２０２をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ２０１は、表示コントローラ２０３との通信などを実行する機能も有している。
【００６４】
主メモリ２０２は、プログラムやデータを一時的に記憶し、ＣＰＵ２００のワークエリアとして機能する。主メモリ２０２は、例えばＤＲＡＭから構成される。
【００６５】
ビデオコントローラ２０３は、コンピュータシステムのディスプレイ１３３を制御するビデオ再生コントローラである。
【００６６】
サウスブリッジ２０５は、ＣＰＵ２００のローカルバスと接続するブリッジデバイスである。サウスブリッジ２０５は、各種ソフトウェア及びデータを格納する記憶装置であるＳＳＤ１０を、ＡＴＡインタフェース９０を介して制御する。
【００６７】
コンピュータシステムでは、セクタ単位でＳＳＤ１０へのアクセスを行う。ＡＴＡインタフェース９０を介して、ライトコマンド（ライト要求）、リードコマンド（リード要求）、フラッシュコマンド等がＳＳＤ１０に入力される。
【００６８】
また、サウスブリッジ２０５は、ＢＩＯＳ−ＲＯＭ２０７、光学ドライブ２０６、ＬＡＮコントローラ２０８、ＵＳＢコントローラ２０９をアクセス制御するための機能も有している。ＵＳＢコントローラ２０９にキーボード１３４、マウス１３５が接続されている。
【００６９】
図１１において、ＯＳ１５０、ＳＳＤ制御ツール１１０、ＲＷＩＦドライバ１２１、ＲＯＩＦドライバ１２２などを含むインタフェースドライバ１２０、ソフトウェア１４０は、コンピュータシステムの電源がオフの時はＳＳＤ１０上に保持されており、ホストの電源オン時またはそれらの機能を呼び出した際は、ＳＳＤ１０から主メモリ２０２上にロードされる。主メモリ２０２上にロードされたインタフェースドライバ１２０はノースブリッジ２０１を介してＣＰＵ２００に読み出され、読み出されたインタフェースドライバの情報をもとにＣＰＵ２００がサウスブリッジ２０５を介してＳＳＤ１０の制御を行う。
【００７０】
図１２に、コンピュータシステムの各種要素の階層構造を示す。ＳＳＤ制御ツール１１０及びソフトウェア１４０は、通常はＳＳＤ１０と直接通信せずに、ＯＳ１５０及びインタフェースドライバ１２０を経由してＳＳＤ１０と通信する。ＳＳＤ制御ツール１１０やソフトウェア１４０がＳＳＤ１０に対しリード要求、ライト要求などの命令を送信する必要が生じた場合、ＳＳＤ制御ツール１１０やソフトウェア１４０は、ＯＳ１５０にファイル単位のアクセス要求を送信する。ＯＳ１５０はＯＳ１５０に内包されるファイル管理テーブルを参照し、アクセス要求のあったファイルに対応するＳＳＤ１０の論理アドレス（ＬＢＡ）を特定し、対応するＬＢＡを含む命令をインタフェースドライバ１２０に送信する。インタフェースドライバ１２０はＯＳ１５０からの命令を当該インタフェース固有の命令に変換し、ＳＳＤに送信する。
【００７１】
ＳＳＤ１０から応答が返ってきた場合、インタフェースドライバ１２０が当該インタフェース固有の応答をＯＳ１５０の命令に変換してＯＳ１５０に送信する。ＯＳ１５０は変換後の応答がどのソフトウェアに対する応答かを特定し、特定したソフトウェアに対して応答を返す。
【００７２】
一方、ＳＳＤ制御ツール１１０は、インタフェースドライバ１２０に対してＯＳ１５０を介さずに直接アクセスすることができる。ＳＳＤ制御ツール１１０は、インタフェースドライバに直接アクセスすることで、インタフェースドライバのうち、ＲＷＩＦドライバ１２１とＲＯＩＦドライバ１２２のどちらが有効であるかを排他的に選択することができる。ＲＷＩＦドライバ１２１が有効である場合は、ＲＷＩＦドライバ１２１がＯＳ１５０とＳＳＤ１０との中継をし、ＲＯＩＦドライバ１２２は何もしない。ＲＯＩＦドライバ１２２が有効である場合は、ＲＯＩＦドライバ１２２がＯＳ１５０とＳＳＤ１０との中継をし、ＲＷＩＦドライバ１２１は何もしない。なお、ＳＳＤ制御ツール１１０は、ＯＳ１５０を介して、ＲＷＩＦドライバ１２１とＲＯＩＦドライバ１２２を択一選択することとしてもよい。
【００７３】
ＳＳＤ制御ツール１１０は、ホスト起動時またはＳＳＤ接続時、ＳＳＤのデバイス識別情報をＳＳＤ１０から取得する。このデバイス識別情報に基づきＳＳＤ１０が読み書き可能なデバイスであるか書き込み非サポートのデバイスであるかを判定し、この判定結果に基づきインタフェースドライバ１２０の切り替え設定を行う。ＳＳＤ１０が読み書き可能なデバイスであると判定した場合は、ＲＷＩＦドライバ１２１を有効とし、ＳＳＤ１０が書き込み非サポートのデバイスであると判定した場合は、ＲＯＩＦドライバ１２２を有効とする。また、ＳＳＤ制御ツール１１０は、ライト要求に対するＳＳＤ１０からの応答がエラーであった場合、ＳＳＤ１０がリードオンリーモードに切り替わったと判断し、ＳＳＤ１０を再起動するとともに、インタフェースドライバ１２０をＲＷＩＦドライバ１２１からＲＯＩＦドライバ１２２に切り替える。
【００７４】
ＳＳＤ１０のデータ破壊や故障によるユーザデータ損失を防止する観点では、ＲＯＩＦドライバ１２２は、ＳＳＤ１０に対する書き込みコマンドを一切送信しないよう構成されることが望ましい。しかし、ＲＯＩＦドライバ１２２は、たとえばオペレーティングシステムのシステム情報など一部のデータをＳＳＤ１０に書き込む必要がある場合は、例外としてＳＳＤ１０に当該データを書き込むことを許可してもよいが、当該データはデータ量がＮＡＮＤメモリ２０の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいＳＳＤ１０に対してデータを書き込んでしまうことを防止するために、ＲＯＩＦドライバ１２２は、たとえばACS-2記載の35h WRITE DMA EXTや61h WRITE FPDMA QUEUEDのような、ＳＳＤ１０に対する通常の書き込みコマンドは一切送信せず、ＳＳＤ１０に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりＳＳＤ１０に対する書き込みを許可するようにすることが望ましい。ＲＯＩＦドライバ１２２の適用時（ＲＯモード時）であっても例外的に特殊コマンドを用いた書き込みを行えるようにする場合、ＳＳＤ１０がＲＯモードである場合であっても、前記した特殊コマンドをホスト１００から受理して正常にデータ書き込み処理するようメモリコントローラ５０およびＲＯＩＦコントローラ３２が構成される必要がある。
【００７５】
図５にＳＳＤ１０で使用する管理情報の構成を示す。この管理情報は、前述したように、ＮＡＮＤメモリ２０で不揮発記憶されている。ＮＡＮＤメモリ２０で記憶された管理情報がＳＳＤ１０の起動時にＲＡＭ４０に展開されて使用される。ＲＡＭ４０上の管理情報は、定期的あるいは電源断時にＮＡＮＤメモリ２０に退避保存される。ＲＡＭ４０がＭＲＡＭやＦｅＲＡＭなどのような不揮発ＲＡＭである場合には、この管理情報はＲＡＭ４０にのみ記憶されるようにしてもよく、この場合はこの管理情報はＮＡＮＤメモリ２０には記憶されない。
【００７６】
図５に示すように、管理情報には、フリーブロックテーブル２１と、バッドブロックテーブル２２と、アクティブブロックテーブル２３と、アクティブページテーブル２４、リードオンリー（ＲＯ）モードフラグ２５と、統計情報２６を含む。
・フリーブロックテーブル（ＦＢテーブル）２１は、ＮＡＮＤメモリ２０に書き込みを行うときに書き込み用に新規に割り当てることのできるＮＡＮＤメモリの物理ブロック（フリーブロック：ＦＢ）のＩＤを管理する。また、物理ブロックＩＤ毎に消去回数を管理している。
・バッドブロックテーブル（ＢＢテーブル）２２は、誤りが多いなど記憶領域として使用できない物理ブロック（物理ブロック）としてのバッドブロック（ＢＢ）のＩＤを管理する。
・アクティブブロックテーブル（ＡＢテーブル）２３は、用途が割り当てられた物理ブロックであるアクティブブロック（ＡＢ）を管理する。ＡＢテーブル２３では、ＬＢＡと、アクティブブロック（ＡＢ）のＩＤとの対応関係を管理する。また、物理ブロックＩＤ毎に消去回数を管理している。
・アクティブページテーブル（ＡＰテーブル）２４は、ＬＢＡと、用途が割り当てられた物理ブロックＩＤ及び物理ページＩＤとの対応関係を管理する。
・ＲＯモードフラグ２５は、出荷時及び通常時は０が書き込まれ、ＳＳＤがＲＯモードとして動作するときに１が書き込まれる。
・統計情報２６は、ＳＳＤ１０の信頼性に関わる種々のパラメータ（Ｘ０１〜Ｘ２４）を格納する。
【００７７】
統計情報としては、バッドブロック数総計（統計情報Ｘ０１）、消去回数総計（統計情報Ｘ０２）、消去回数平均値（統計情報Ｘ０３）、ＮＡＮＤメモリの書き込みエラー発生回数累積値（統計情報Ｘ０４）、ＮＡＮＤメモリの消去エラー発生回数累積値（統計情報Ｘ０５）、読み出し論理セクタ数総計（統計情報Ｘ０６）、書き込み論理セクタ数総計（統計情報Ｘ０７）、ＥＣＣ訂正不能回数総計（統計情報Ｘ０８）、nビット〜mビットＥＣＣ訂正単位総計数（統計情報Ｘ０９）、ＳＡＴＡ通信のRエラー発生回数（統計情報Ｘ１０）、ＳＡＴＡ通信のエラー発生回数（統計情報Ｘ１１）、ＲＡＭ４０のエラー発生回数（統計情報Ｘ１２）、ＳＳＤ１０の使用時間総計（統計情報Ｘ１３）、温度が推奨動作温度の最高値を上回った時間累計（統計情報Ｘ１４）、温度が推奨動作温度の最低値を下回った時間累計（統計情報Ｘ１５）、コマンドの応答時間最大値（統計情報Ｘ１６）、コマンドの応答時間平均値（統計情報Ｘ１７）、ＮＡＮＤメモリの応答時間最大値（統計情報Ｘ１８）、ＮＡＮＤの応答時間平均値（統計情報Ｘ１９）、現在温度（統計情報Ｘ２０）、最高温度（統計情報Ｘ２１）、最低温度（統計情報Ｘ２２）、統計情報増加率（統計情報Ｘ２３）、ＮＡＮＤ整理失敗フラグ（統計情報Ｘ２４）などが含まれる。
【００７８】
バッドブロック数総計（統計情報Ｘ０１）について説明する。ＳＳＤ１０内のＮＡＮＤメモリ２０の物理ブロックが一つバッドブロックとして追加されるごとに統計情報Ｘ０１が１インクリメントされる。統計情報Ｘ０１はＳＳＤ１０の製造時（検査工程前）にゼロにリセットされていることが望ましく、検査工程でエラーが発生したり、閾値分布の分布間マージンが少ないことが判明したブロックは、あらかじめバッドブロックに加えておくことがさらに望ましい。統計情報Ｘ０１は、統計情報２６に格納せずＢＢテーブル２２から直接計算してもよい。統計情報Ｘ０１が大きいほど信頼性が悪化していることを示す。
【００７９】
消去回数総計（統計情報Ｘ０２）について説明する。統計情報Ｘ０２はＳＳＤ１０内のＮＡＮＤメモリ２０の全ブロックの消去回数累計値を示す。ＳＳＤ１０内のＮＡＮＤメモリ２０の物理ブロックが一つ消去されるごとに統計情報Ｘ０２が１インクリメントされる。統計情報Ｘ０２はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０２はＳＳＤ統計情報２６に格納せずＦＢテーブル２１、ＢＢテーブル２２、ＡＢテーブル２３から直接計算してもよい。統計情報Ｘ０２が大きいほど信頼性が悪化していることを示す。
【００８０】
消去回数平均値（統計情報Ｘ０３）について説明する。統計情報Ｘ０３はＳＳＤ１０内のＮＡＮＤメモリ２０の全ブロックの消去回数の１ブロックあたり平均値を示す。管理情報を格納するブロックなど一部のブロックを統計情報Ｘ０３の集計対象から除外してもよい。統計情報Ｘ０３はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０３は統計情報２６に格納せずＦＢテーブル２１、ＢＢテーブル２２、ＡＢテーブル２３から直接計算してもよい。統計情報Ｘ０３が大きいほど信頼性が悪化していることを示す。
【００８１】
ＮＡＮＤメモリの書き込みエラー発生回数累積値（統計情報Ｘ０４）について説明する。統計情報Ｘ０４はＳＳＤ１０内のＮＡＮＤメモリ２０で書き込みエラーが１書き込み単位で発生するごとに１加算される（ブロック単位で加算してもよい）。統計情報Ｘ０４はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０４が大きいほど信頼性が悪化していることを示す。
【００８２】
ＮＡＮＤメモリの消去エラー発生回数累積値（統計情報Ｘ０５）について説明する。統計情報Ｘ０５はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。ＳＳＤ１０内のＮＡＮＤメモリ２０で消去エラーが１ブロックで発生するごとに統計情報Ｘ０５が１加算される。複数のブロックをまとめて消去単位とし、この消去単位１つで消去エラーが発生するごとに統計情報Ｘ０５に１加算するようにしてもよい。統計情報Ｘ０５が大きいほど信頼性が悪化していることを示す。
【００８３】
読み出し論理セクタ数総計（統計情報Ｘ０６））について説明する。統計情報Ｘ０６は、インタフェースコントローラ３０が読み出しデータとしてホスト装置１００に送信したデータの論理セクタ数合計である。統計情報Ｘ０６はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０６が大きいほど信頼性が悪化していることを示す。
【００８４】
書き込み論理セクタ数総計（統計情報Ｘ０７）について説明する。統計情報Ｘ０７は、ＲＷＩＦコントローラ３１が書き込みデータとしてホスト装置１００から受信したデータの論理セクタ数合計である。統計情報Ｘ０７はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０７が大きいほど信頼性が悪化していることを示す。
【００８５】
ＥＣＣ訂正不能回数総計（統計情報Ｘ０８）について説明する。ＥＣＣ訂正回路５８が行うＥＣＣ訂正によりエラービットが修復できなかった場合に、１読み出し単位ごとに統計情報Ｘ０８を１インクリメントする。メモリコントローラ５０がＮＡＮＤメモリ２０からデータを読み出すと、メモリコントローラ５０は読み出したデータをＥＣＣ訂正回路５８に送信して、データ誤りがある場合はＥＣＣ訂正を行い、訂正したデータをインタフェースコントローラ３０を介してホストに送信する。データ誤りがＥＣＣ訂正回路５８によって訂正できなかった場合は、メモリコントローラは統計情報Ｘ０８をカウントアップするか、訂正できなかったデータ誤り量で統計情報Ｘ０８をインクリメントする。エラー訂正できなかったエラービット数の推定値を加算するようにしてもよいし、エラー訂正できなかったブロックの数を加算するようにしてもよい。統計情報Ｘ０８はＳＳＤ１０の製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０８が大きいほど信頼性が悪化していることを示す。
【００８６】
ｎビット〜ｍビットＥＣＣ訂正単位総計数（統計情報Ｘ０９）について説明する。ｎ，ｍは自然数で、０≦ｎ≦ｍ≦訂正可能最大ビット数である。ＥＣＣ訂正回路５８がＥＣＣ訂正単位（たとえば物理ページ）に対してＥＣＣ訂正を行った時、全エラービットが正常に修復され、かつ修復されたエラービット数がｎ以上ｍ以下である場合、ＥＣＣ訂正単位１つにつき「ｎビット〜ｍビットＥＣＣ訂正単位総計数」を１加算する。ＥＣＣ訂正により１訂正単位につき最大６４ビット訂正可能である場合、たとえば、「１ビット〜８ビットＥＣＣ訂正単位総計数」「９ビット〜１６ビットＥＣＣ訂正単位総計数」「１７ビット〜２４ビットＥＣＣ訂正単位総計数」「２５ビット〜３２ビットＥＣＣ訂正単位総計数」「３３ビット〜４０ビットＥＣＣ訂正単位総計数」「４１ビット〜４８ビットＥＣＣ訂正単位総計数」「４９ビット〜５６ビットＥＣＣ訂正単位総計数」「５７ビット〜６４ビットＥＣＣ訂正単位総計数」の８つのパラメータを用意し、ＥＣＣ訂正が正常に行われた場合、１ＥＣＣ訂正単位のＥＣＣ訂正につきこれら８つのパラメータのうちいずれか１つに１がインクリメントされる（または訂正したデータ誤り量でインクリメントしてもよい）。統計情報Ｘ０９はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ０９が大きいほど信頼性が悪化していることを示す。
【００８７】
ＳＡＴＡ通信のＲエラー発生回数（統計情報Ｘ１０）について説明する。統計情報Ｘ１０はＳＡＴＡ規格におけるＲエラー（Reception Error, R_ERR）が１回発生するごとに１インクリメントされる。ホストとＳＳＤの間で送受信されるフレームにたとえばＣＲＣエラーなど何らかのエラーがあった場合、Ｒエラーとしてカウントされる。統計情報Ｘ１０として、SATA規格のPhy Event Countersのカウンタのいずれかを採用してもよい。統計情報Ｘ１０はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。統計情報Ｘ１０が大きいほど信頼性が悪化していることを示す。
【００８８】
ＳＡＴＡ通信のエラー発生回数（統計情報Ｘ１１）について説明する。統計情報Ｘ１１は、その他の（Ｒエラー以外の）ＳＡＴＡ通信での異常が１回発生するごとに１インクリメントされる。たとえば、ＡＴＡインタフェース９０やインタフェースコントローラ３０やメモリコントローラ５０がSATA Generation3規格として設計されているにも関わらず、実際にＳＳＤ１０やホスト装置１００との間でネゴシエーションされた通信規格がGeneration2のようなGeneration3より低速の通信規格であった場合、ＳＡＴＡ通信上のエラーとみなし、統計情報Ｘ１１を１インクリメントする。統計情報Ｘ１１はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【００８９】
ＲＡＭ４０のエラー発生回数（統計情報Ｘ１２）について説明する。たとえば、ＲＡＭ４０にＥＣＣ回路やエラー検知回路を搭載している場合、ＥＣＣ訂正できなかった旨の信号やエラー検知された旨の信号をＲＡＭ４０からメモリコントローラ５０が受け取った場合、統計情報Ｘ１２を１インクリメントする。統計情報Ｘ１２はＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【００９０】
ＳＳＤ１０の使用時間総計（統計情報Ｘ１３）について説明する。ＳＳＤ１０の電源がＯＮになっている間、メモリコントローラ５０がクロックをカウントしたり内部の時計回路から時刻情報を受信することで、経過時間をインクリメントする。あるいは、メモリコントローラ５０がホスト装置１００から定期的にホスト装置１００の時刻情報を受信するようにし、その時刻情報の差分をインクリメントするようにしてもよい。統計情報Ｘ１３は、ＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【００９１】
温度が推奨動作温度の最高値を上回った時間累計（統計情報Ｘ１４）について説明する。たとえば、ＳＳＤ１０の基板上、メモリコントローラ５０内、ＮＡＮＤメモリ２０内など、ＳＳＤ１０内に温度計が実装されている場合、メモリコントローラ５０は温度計から定期的に温度情報を受信する。受信した温度が推奨動作温度（たとえば１００℃）を上回った場合、メモリコントローラ５０はクロックや内部の時計やホスト装置１００から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。ＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【００９２】
温度が推奨動作温度の最低値を下回った時間累計（統計情報Ｘ１５）について説明する。ＳＳＤ１０内に温度計が実装されている場合、メモリコントローラ５０は温度計から定期的に温度情報を受信する。受信した温度が推奨動作温度（たとえば−４０℃）を下回った場合、メモリコントローラ５０はクロックや内部の時計やホスト装置１００から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。統計情報Ｘ１５は、ＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【００９３】
コマンドの応答時間最大値（統計情報Ｘ１６）について説明する。統計情報Ｘ１６は、ホスト装置１００からコマンドを受信してから、ホスト装置１００へ応答するまで（またはコマンド実行完了するまで）に要した時間（またはクロック数）の最大値である。Ｘ１６を上回る応答時間が発生した場合は、この応答時間をＸ１６に上書きする。コマンドそれぞれに対して統計情報Ｘ１６を保持してもよい。ＳＳＤ１０製造時（検査工程前）またはＳＳＤ１０出荷時にはＸ１６がゼロにリセットされていることが望ましい。なお、たとえばコマンドの応答時間としては、
・ＳＳＤ１０の読み出し応答時間：ＳＳＤ１０がホスト１００よりリード要求を受信してから、読み出したデータをホスト１００に対し送信完了するまでの時間
・ＳＳＤ１０の書き込み応答時間：ＳＳＤ１０がホスト１００よりライト要求を受信してから、書き込み完了通知をホスト１００に対し返すまでの時間。または、ＳＳＤ１０がホスト１００よりライト要求を受信してから、ホスト１００より書き込みデータを受信完了するまでの時間。
などがある。応答時間は、例えば、メモリコントローラ５０の内部クロックをカウントすることによって計時すればよい。
【００９４】
コマンドの応答時間平均値（統計情報Ｘ１７）について説明する。統計情報Ｘ１７は、ホスト装置１００からコマンドを受信してから、ホスト装置１００へ応答するまで（またはコマンド実行完了するまで）に要した時間（またはクロック数）の平均値である。たとえば応答時間リストを一定数ＲＡＭ４０に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報Ｘ１７を保持してもよい。ＳＳＤ１０製造時（検査工程前）またはＳＳＤ１０出荷時にはＸ１７がゼロにリセットされていることが望ましい。
【００９５】
ＮＡＮＤメモリの応答時間最大値（統計情報Ｘ１８）について説明する。統計情報Ｘ１８は、メモリコントローラ５０がＮＡＮＤメモリ２０に命令してから応答を得る（またはコマンド実行完了通知を受信する）までに要した時間（またはクロック数）の最大値である。Ｘ１８を上回る応答時間が発生した場合は、この応答時間をＸ１８に上書きする。コマンドそれぞれに対して統計情報Ｘ１８を保持してもよい。ＳＳＤ１０製造時（検査工程前）またはＳＳＤ１０出荷時にはＸ１８がゼロにリセットされていることが望ましい。なお、たとえばＮＡＮＤメモリの応答時間としては、
・ＮＡＮＤメモリ２０の読み出し応答時間：メモリコントローラ５０がＮＡＮＤメモリ２０に対しリード要求を発行してから、ＮＡＮＤメモリ２０からのデータ読み出しが完了するまでの時間
・ＮＡＮＤメモリ２０の書き込み応答時間：メモリコントローラ５０がＮＡＮＤメモリ２０に対しライト要求を発行してから、ＮＡＮＤメモリ２０へのデータ書き込みが完了するまでの時間
・ＮＡＮＤメモリ２０の消去応答時間：メモリコントローラ５０がＮＡＮＤメモリ２０に対し消去命令を発行してから、ＮＡＮＤメモリ２０の消去が完了するまでの時間
などがある。応答時間は、例えば、メモリコントローラ５０の内部クロックをカウントすることによって計時すればよい。
【００９６】
ＮＡＮＤメモリの応答時間平均値（統計情報Ｘ１９）について説明する。統計情報Ｘ１９は、メモリコントローラ５０がＮＡＮＤメモリ２０に命令してから応答を得る（またはコマンド実行完了通知を受信する）までに要した時間（またはクロック数）の平均値である。たとえば応答時間リストを一定数ＲＡＭ４０に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報Ｘ１９を保持してもよい。ＳＳＤ１０製造時（検査工程前）またはＳＳＤ１０出荷時にはＸ１９がゼロにリセットされていることが望ましい。
【００９７】
現在温度（統計情報Ｘ２０）について説明する。ＳＳＤ１０内に温度計が実装されている場合、メモリコントローラ５０は温度計から定期的に温度情報を受信する。メモリコントローラ５０は温度計から最後に受信した温度を現在温度として統計情報Ｘ２０に保持する。この値が極端に大きいと（たとえば８５℃以上）、ＳＳＤ１０の信頼性に悪影響があり、また、この温度が極端に小さいと（たとえば−１０℃以下）、ＳＳＤ１０の信頼性に悪影響があると判断する。
【００９８】
最高温度（統計情報Ｘ２１）について説明する。メモリコントローラ５０は、現在温度Ｘ２０の最大値を最高温度として統計情報Ｘ２１に保持する。この値が極端に大きいと（たとえば８５℃以上）、ＳＳＤ１０の信頼性に悪影響がある。メモリコントローラ５０は、Ｘ２１よりも大きい現在温度を温度計から受信した時、Ｘ２１を現在温度に書き換える。ＳＳＤ１０製造時（検査工程前）またはＳＳＤ１０出荷時にはＸ２１がＳＳＤ１０の動作温度にくらべて十分に小さい温度（たとえば−４０℃）にリセットされていることが望ましい。
【００９９】
最低温度（統計情報Ｘ２２）について説明する。メモリコントローラ５０は、現在温度Ｘ２０の最小値を最低温度として統計情報Ｘ２２に保持する。この値が極端に小さいと（たとえば−４０℃以下）、ＳＳＤ１０の信頼性に悪影響がある。メモリコントローラ５０は、Ｘ２２よりも小さい現在温度を温度計から受信した時、Ｘ２２を現在温度に書き換える。ＳＳＤ１０製造時（検査工程前）またはＳＳＤ１０出荷時にはＸ２２がＳＳＤ１０の動作温度にくらべて十分に大きい温度（たとえば１２０℃）にリセットされていることが望ましい。
【０１００】
統計情報増加率（統計情報Ｘ２３）について説明する。統計情報Ｘ０１〜Ｘ１９の最新でない情報（たとえば一定時刻前や、ＳＳＤ１０をパワーオンした時の値や前回ＳＳＤ１０をパワーダウンしたときの値など）を別途保持しておく。統計情報Ｘ２３は、例えば、下記のいずれかで定義される。
統計情報増加率＝（最新統計情報）―（旧情報）
統計情報増加率＝（（最新統計情報）―（旧情報））／（旧情報を取得してからの経過時間）
統計情報増加率＝（（最新統計情報）―（旧情報））／（旧情報を取得してからのＮＡＮＤアクセス回数）
ＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【０１０１】
ＮＡＮＤ整理失敗フラグ（統計情報Ｘ２４）について説明する。統計情報Ｘ２４が１になっていると、ＮＡＮＤ整理によっても動作に十分な数のフリーブロック数を確保できないことになる。ＳＳＤ１０製造時（検査工程前）にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【０１０２】
統計情報２６としては、上述したすべてのパラメータを格納してもよいし、これらの一部あるいはどれか一つのみを格納してもよい。統計情報２６は最新情報をＲＡＭ４０上に保持し、定期的にＮＡＮＤメモリ２０にバックアップすることが望ましい。一方、ＲＡＭ４０やＮＡＮＤメモリ２０のどちらか一方にのみ保存するようにしてもよいし、当該統計情報をホスト装置１００に送信して、ホスト装置１００やホスト装置１００に接続された記憶装置に保存するようにしてもよい。
【０１０３】
つぎに、図１４を用いてＳＳＤ１０での書き込み動作を説明する。ＳＳＤ１０がホスト１００からライト要求を受信した場合は（ステップＳ１００）、メモリコントローラ５０はＲＡＭ４０上のフリーブロックテーブル２１を検索し（ステップＳ１０１）、現在のフリーブロック数を取得する。そして、メモリコントローラ５０は、フリーブロック数が所定の閾値より少ない場合は（ステップＳ１０２）、後述する「ＮＡＮＤ整理」を行い（ステップＳ１２０）、フリーブロック数が所定の閾値より多い場合は（ステップＳ１０２）、フリーブロックテーブル２１から新たにフリーブロックを確保し、確保したフリーブロックの物理ブロックＩＤを取得する。
【０１０４】
そして、メモリコントローラ５０は、取得したフリーブロックに対して書き込み動作を行い（ステップＳ１０３）、さらにホスト１００から受信したＬＢＡ及び物理ブロックＩＤ及び当該物理ブロックの消去回数をアクティブブロックテーブル２３に追加し、さらにＬＢＡ、物理ブロックＩＤ及び物理ページＩＤをアクティブページテーブル２４に追加し（ステップＳ１０４）、書き込みを行った物理ブロックをフリーブロックテーブル２１から削除する（ステップＳ１０５）。メモリコントローラ５０は以上の書き込み処理の内容を統計情報２６に反映する。
【０１０５】
つぎに、図１５を用いてＳＳＤ１０でのＮＡＮＤ整理（図１４：ステップＳ１２０）の動作例を説明する。物理ブロックに含まれる全ページのうちアクティブページテーブル２４に登録されているページ（有効ページ）はＬＢＡに対応付けられている。一方、物理ブロックに含まれている全てのページが有効ページであるとは限らず、有効ページに該当しないページ（無効ページ）はＬＢＡに対応付けられていない。有効ページとは最新のデータを記憶しているページであり、無効ページとは同一ＬＢＡのデータが他の場所に書きこまれ、参照されることがなくなったページである。物理ブロックは無効ページの分だけデータに空きがあることになり、有効ページのデータを集めて違うブロックに書き直すＮＡＮＤ整理を実行することでフリーブロックを確保することができる。
【０１０６】
まず、行番号ｉ＝０にし、空き領域累計数Ｓ＝０にする（ステップＳ１２１）。メモリコントローラ５０は、アクティブブロックテーブル２３の先頭行（ｉ＝０）を読み出し、先頭行の物理ブロックＩＤ（現在物理ブロックＩＤ）を取得する（ステップＳ１２２）。つぎに、アクティブページテーブル２４を読み出し、アクティブページテーブル２４における現在物理ブロックＩＤに対応する有効ページのＩＤをすべて取得する（ステップＳ１２３）。そして、メモリコントローラ５０は、取得した有効ページＩＤの個数分のサイズを物理ブロックのサイズから減算することで、現在物理ブロックのうち無効ページのサイズｖを求め（ステップＳ１２４）、ｖ＞０であるときは（ステップＳ１２５）、現在物理ブロックをＮＡＮＤ整理対象ブロックリストに加える（ステップＳ１２７）。さらに、メモリコントローラ５０は、空き領域累計数Ｓに現在物理ブロックの無効ページサイズｖを加算し、空き領域累計数Ｓを更新する（ステップＳ１２８）。
【０１０７】
ステップＳ１２５でｖ＝０である場合、あるいはステップＳ１２５で空き領域累計数Ｓが物理ブロックサイズに到達していない場合は、メモリコントローラ５０は、列番号ｉを＋１し（ステップＳ１２６）、アクティブブロックテーブル２３の次の行（ｉ＝１）を読み出し、次の行の物理ブロックＩＤ（現在物理ブロックＩＤ）を取得する（ステップＳ１２２）。以下同様にして、ステップＳ１２３〜Ｓ１２８の手順を実行する。そして、ステップＳ１２９で空き領域累計数Ｓが物理ブロックサイズに到達するまで、ステップＳ１２２〜Ｓ１２９の手順を繰り返す。
【０１０８】
そして、ステップＳ１２９において、これまでに取得した無効ページのサイズ総量Ｓが物理ブロックのサイズより大きくなった場合は、メモリコントローラ５０は、ＮＡＮＤ整理対象ブロックリスト上の全有効ページのデータをＮＡＮＤメモリ２０から読み出してＲＡＭ４０に書き込み（ステップＳ１３０）、さらに、ＮＡＮＤ整理対象ブロックリスト上の全物理ブロックに対して消去処理を行い（ステップＳ１３１）、消去処理を行った全物理ブロックをアクティブブロックテーブル２３から削除してフリーブロックテーブル２１に追加し（その際、消去回数をインクリメントする）、読み出した全ページをアクティブページテーブル２４から削除する（ステップＳ１３２）。そして、メモリコントローラ５０は、フリーブロックテーブル２１から新たなフリーブロックを取得し、取得したフリーブロックに対しＲＡＭ４０に書き込んだデータを書き込み（ステップＳ１３３）、データを書き込んだフリーブロックの物理ブロックＩＤ、対応するＬＢＡ及び当該ブロックの消去回数をアクティブブロックテーブル２３に追加し、さらにデータを書き込んだページ及び対応するＬＢＡをアクティブページテーブル２４に追加し（ステップＳ１３４）、データが書き込まれたブロックのブロックＩＤをフリーブロックテーブル２１から削除する（ステップＳ１３５）。メモリコントローラ５０は上記ＮＡＮＤ整理の処理内容を統計情報２６に反映する。なお、ステップＳ１３１の消去処理はステップＳ１２０のＮＡＮＤ整理内では行わずに、ステップＳ１０３の書き込み動作直前におこなって消去回数をインクリメントするようにしてもよい。
【０１０９】
このようなＮＡＮＤ整理により、書き込みに対し十分な数のフリーブロックを確保できるのが通常である。ＮＡＮＤ整理によっても、書き込みに対し十分な数のフリーブロックを確保できなかった場合は（ステップＳ１３６）、後述する「ＲＯモード移行処理」を行う（ステップＳ１３７）。
【０１１０】
上記ＮＡＮＤ整理は、ホスト１００からライト要求を受信した時だけでなく、ホストから最後に命令を受信してから所定時間経過した時、またはホスト１００からスタンバイやアイドル状態に移行するコマンドを受信した時などに実行してもよい。
【０１１１】
つぎに、図１６を用いてＳＳＤ１０での読み出し処理について説明する。ＳＳＤ１０がホスト１００からリード要求を受信した場合は（ステップＳ１４０）、メモリコントローラ５０は、アクティブブロックテーブル２３を検索し（ステップＳ１４１）、ホスト１００から受信したＬＢＡに対応する物理ブロックＩＤがアクティブブロックテーブル２３に存在するか否かを調べる（ステップＳ１４２）。アクティブブロックテーブル２３に物理ブロックＩＤが存在する場合は、メモリコントローラ５０は、アクティブページテーブル２４の該当物理ブロックＩＤに含まれる物理ページＩＤを取得し（ステップＳ１４４）、取得した物理ページＩＤに対応する物理ページからデータを読み出し（ステップＳ１４５）、読み出したデータを、ＲＡＭ４０を介してホスト１００へ送信する（ステップＳ１４６）。メモリコントローラ５０は以上の読み出し処理の内容を統計情報２６に反映する。
【０１１２】
ステップＳ１４２において、ホスト１００から受信したＬＢＡに対応する物理ブロックＩＤがアクティブブロックテーブル２３上に存在しない場合、メモリコントローラ５０は、ＮＡＮＤメモリ２０からの読み出し動作を行わずに、例えば全ビットが‘０’であるデータを、ホスト１００からの要求に対応するデータ長分、ホスト１００に送信する（ステップＳ１４３）。
【０１１３】
次に、図１７を用いてＳＳＤ１０でのエラー処理について説明する。ホスト１００からのライト要求やリード要求に対する処理は通常は上記のように行われるが、ＮＡＮＤメモリ２０に対する書き込み動作（プログラム動作）で書き込みエラーが発生する場合、ＮＡＮＤメモリ２０に対する消去動作で消去エラーが発生する場合、ＮＡＮＤメモリ２０に対する読み出し動作の際にＥＣＣ（Error Correcting Code）エラー（誤り訂正処理の失敗）が生じる場合などがあり、これらに対する例外処理が必要となる。
【０１１４】
メモリコントローラ５０は、上記の何れかのエラーが発生した場合（ステップＳ１５０）、エラーが発生した物理ブロックをバッドブロックテーブル２２に追加し（ステップＳ１５１）、エラーが発生した物理ブロックをアクティブブロックテーブル２３及びフリーブロックテーブル２１から削除することで（ステップＳ１５２）、以後は、エラーが発生した物理ブロックにアクセスできないようにする。この際、エラーが発生した物理ブロックのデータを別の物理ブロックにコピーしてもよい。メモリコントローラ５０は上記のエラー処理の内容を統計情報２６に反映する。これらエラー処理の一例を、読み出し処理、書き込み処理、ＮＡＮＤ整理処理の解説において紹介したが、このエラー処理はこれらの例に限らず、ＮＡＮＤメモリ２０に対する全ての読み出し処理、書き込み処理、消去処理に対して適用可能であることは言うまでもない。
【０１１５】
ＳＳＤ１０を利用しているうちに、例えば、ＮＡＮＤメモリ２０の各ブロックの信頼性が劣化していき、バッドブロックの数が増えていき、フリーブロック数とアクティブブロック数の和が減っていくことになる。さらにＳＳＤ１０を使用していると、ＮＡＮＤ整理を行っても、書き込み処理を行うのに十分なフリーブロック数を確保できなくなり、これがＳＳＤ１０の寿命である。このような場合に、ＲＯモード移行条件が成立したと判断して、ＲＯモード移行処理を行う。
【０１１６】
次に、図１８を用いてＳＳＤ１０でのＲＯモード移行処理について説明する。ＳＳＤ１０が動作中、メモリコントローラ５０は、統計情報２６を監視することにより、ＲＯモード移行条件が成立したか否かを判定している（ステップＳ１６０）。ＲＯモード移行のクライテリアとしてのＲＭＡＸとして、たとえば、
ＲＭＡＸ＝信頼性保証できる統計情報の値の上限値
を採用する。
【０１１７】
ＲＭＡＸは各統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４に対して、それぞれ別の値を採用することができる。ＲＭＡＸは、たとえば図１９に示すように、統計情報の生の値（Raw Data）と、ＳＳＤ１０の不良率の関係を開発段階に導き出し、不良率が許容値（たとえば100ppm）を超える時の統計情報の生の値をＲＭＡＸとして採用することが望ましい。不良率として、ＳＳＤ１０の不良率の代わりにＳＳＤ１０に書き込まれたデータの不良率や、ＮＡＮＤメモリ２０の不良率や、ＮＡＮＤメモリ２０のメモリセルの不良率などその他不良率を採用してもよい。たとえば、ＳＳＤ１０の開発段階で、多数個（たとえば100個）の試験用ＳＳＤ１０群に対して高温で書き込み動作を繰り返しながら、書き込んだデータが一定時間以上正しく記憶され続けるかを検証する摩耗試験を行い、同時に統計情報をモニタしつづけ、不良率が一定割合に到達する時点での前記統計情報の生の値をＲＭＡＸとして採用すればよい。たとえば、摩耗したＳＳＤ１０のＬＢＡ全域に対して高温状態（たとえば７５℃）で初期条件としてデータ（たとえばランダムデータ）を書き込み、高温状態（たとえば８５℃）である時間以上放置して、その後ＳＳＤ１０の温度を下げ（たとえば２５℃）、ＳＳＤ１０のＬＢＡ全域に対して読み出し動作を行い、読み出したデータがＥＣＣ訂正できない場合（またはＥＣＣ訂正できないデータが一定数以上の場合、または読み出したデータと初期条件で書き込んだデータが一致しない場合、または読み出しができなかった場合）、これをＳＳＤ１０の不良として定義し、不良したＳＳＤ１０の数を、試験を行ったＳＳＤ１０の数で割った値を不良率として採用すればよい。この不良率が、前述した許容できる不良率を統計的に有意に下回る統計情報の生の値をＲＭＡＸとして採用すればよい。ＲＭＡＸにある程度マージンをもたせて、
ＲＭＡＸ´＝ＲＭＡＸ−マージン
としたＲＭＡＸ´をＲＭＡＸとして採用してもよい。
【０１１８】
また、ＲＭＡＸは開発時の設計シミュレーションによって求めてもよい。たとえば、設計シミュレーションにより、ＳＳＤ１０の不良率などの不良率がある一定値以上となるような統計情報の値を求めておき、その値をＲＭＡＸとして採用する。
【０１１９】
また、ＲＭＡＸは、図２０に示すように、ＳＳＤ１０の性能（読み出し性能や書き込み性能など）が所定値以下となる統計情報の値をＳＳＤ１０の測定やシミュレーションにより特定し、これをＲＭＡＸとして採用してもよい。たとえば、ＮＡＮＤメモリの信頼性が悪化するとＮＡＮＤメモリのメモリセルから読み出されるデータが誤っている確率が増大するため、データ読み出し時のＥＣＣ訂正に要する時間が増大し、ＳＳＤ１０の信頼性とＳＳＤ１０の読み出し性能との間には強い相関が現れる可能性がある。たとえば、シーケンシャルな読み出し性能の測定として、以下の性能測定を行う。
１．ＳＳＤ１０に対し、ACS-2のF4h SECURITY ERASE UNIT (Normal Erase)を行う。
２．ＳＳＤ１０のＬＢＡ全域に対し、データ（たとえばランダムなデータ）をシーケンシャルに書き込む。
３．全ＬＢＡに対してシーケンシャルに読み出しを行い、単位時間あたりに読み出されたデータ量平均値（単位ＭｉＢ／ｓ）を求める（読み出し速度）。その他、性能情報（たとえば性能速度）の測定には、非特許文献６に記述されるような規格に従い測定を行ってもよい。
【０１２０】
このようにして、図２０に示すように、性能情報の統計情報依存性を求め、たとえばＳＳＤ１０の出荷時のシーケンシャルな読み出し速度期待値が４００ＭｉＢ／ｓであって、公開スペックの規定などにより許容できる最低性能が３００ＭｉＢである場合、読み出し速度期待値が３００ＭｉＢとなるような統計情報の値を求め、これをＲＭＡＸとして採用すればよい。
【０１２１】
このように、ＲＭＡＸは開発者が任意に定めることができ、上記に示した以外の方法や基準によっても定めることが可能である。
【０１２２】
メモリコントローラ５０はＲＭＡＸと統計情報の値（Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４のいずれか）を比較し、統計情報の値＞ＲＭＡＸ、または統計情報の値≧ＲＭＡＸとなった時、ＳＳＤ１０が寿命に到達しＲＯモードに移行すべきと判断する（ステップＳ１６０：Ｙｅｓ）。たとえば、ＮＡＮＤ整理失敗フラグ（統計情報Ｘ２４）の場合、これが１である場合にＳＳＤ１０が寿命に到達しＲＯモードに移行すべきと判断する。たとえば、バッドブロック数総計（統計情報Ｘ０１）の場合、これが所定値を上回った場合にＳＳＤ１０が寿命に到達しＲＯモードに移行すべきと判断する。
【０１２３】
メモリコントローラ５０は統計情報の値（Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４のいずれか）のうち複数個をそれぞれＲＭＡＸと比較し、いずれか一つがＲＭＡＸ以上である場合にＲＯモードに移行すべきと判断するようにしてもよい。
【０１２４】
上記のようにして、メモリコントローラ５０はＳＳＤ１０が寿命に到達したか否か（ＳＳＤ１０が異常状態であるか否か）を判定し、ＳＳＤ１０が寿命に到達したと判定された場合（ＳＳＤ１０が異常状態であると判定された場合）、後で詳述するＲＯモード移行処理を行う（ステップＳ１６０：Ｙｅｓ）。
【０１２５】
なお、たとえば統計情報として現在温度Ｘ２０、最高温度Ｘ２１を採用する場合、たとえばＲＭＡＸとしてＲＭＡＸ＝８５℃を採用し、統計情報の値＞ＲＭＡＸ、または統計情報の値≧ＲＭＡＸのようなたとえば動作保証外の温度になった時、ＳＳＤ１０が異常状態でＲＯモードに移行すべきと判断し（ステップＳ１６０：Ｙｅｓ）、その後、統計情報の値≦ＲＭＡＸ−ＭＡＸマージン、または統計情報の値＜ＲＭＡＸ−ＭＡＸマージンとなって正常温度にもどったとき、ＳＳＤ１０が正常状態にもどったためＲＯモードから通常モードに移行すべきと判断することが望ましい（ステップＳ１６０：Ｎｏ）。ＭＡＸマージンはゼロ以上の値であるが、ＲＯモードと通常モードとの切り替えが頻繁に発生することを防止するために、ＭＡＸマージンはゼロより大きい値とすることが望ましい（たとえばＭＡＸマージン＝５℃）。
【０１２６】
本実施形態において紹介した統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４以外にも、統計情報は種々の形態をとりうるが、本発明はこれらに対しても適用可能である。また、Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４と不良率の関係には正の相関関係が存在するが、不良率と負の相関関係が存在する統計情報に対しても本発明は適用可能である（たとえば、ＳＳＤ１０が出荷後に体験した最低温度など）。その場合、ＲＭＡＸの代わりに、信頼性保証できる下限値ＲＭＩＮを採用し、統計情報がＲＭＩＮを下回った場合にＳＳＤ１０が寿命に到達したと判断し、ＲＯモードに移行すればよい。
【０１２７】
特に、たとえば統計情報として現在温度Ｘ２０、最低温度Ｘ２２を採用する場合、たとえばＲＭＩＮとしてＲＭＩＮ＝−１０℃を採用し、統計情報の値＜ＲＭＩＮ、または統計情報の値≦ＲＭＩＮのようなたとえば動作保証外の温度になった時、ＳＳＤ１０が異常状態でＲＯモードに移行すべきと判断し（ステップＳ１６０：Ｙｅｓ）、その後、統計情報の値≧ＲＭＩＮ＋ＭＩＮマージン、または統計情報の値＞ＲＭＩＮ＋ＭＩＮマージンとなって正常温度にもどったとき、ＳＳＤ１０が正常状態にもどったためＲＯモードから通常モードに移行すべきと判断することが望ましい（ステップＳ１６０：Ｎｏ）。ＭＩＮマージンはゼロ以上の値であるが、ＲＯモードと通常モードとの切り替えが頻繁に発生することを防止するために、ＭＩＮマージンはゼロより大きい値とすることが望ましい（たとえばＭＩＮマージン＝５℃）。
【０１２８】
ＳＳＤ１０が寿命に到達していなくても、統計情報があらかじめ定められたＲＭＡＸを上回ったり、あるいは通常動作ではありえない異常値を示した場合などにおいても、ＲＯモード移行処理を行うことが望ましい。
【０１２９】
ＲＯモード移行条件が成立すると（ステップＳ１６０：Ｙｅｓ）、つぎのようなＲＯモード移行処理が開始される。まず、メモリコントローラ５０は、現在行われているＮＡＮＤメモリ２０に対する書き込み処理を全てキャンセルし（ステップＳ１６１）、ホスト１００から受信した全てのライト要求に対してエラーを返し、ホスト１００から受信したライト要求のキュー全てを削除するのが望ましい（ステップＳ１６２）。つぎに、メモリコントローラ５０は、ＮＡＮＤメモリ２０上の管理情報におけるＲＯモードフラグ２５に１を書き込む（ステップＳ１６３）。この時、ＲＡＭ４０上の管理情報のうち、ＲＯモードフラグ２５以外のテーブルを全てＮＡＮＤメモリ２０上の管理情報に反映させてもよい。その後、ＳＳＤ１０は電源を遮断されるかリセットされるまで、ホスト１００から受信したライト要求の全てに対してエラーを返す（ステップＳ１６４、Ｓ１６５）。
【０１３０】
つぎに、図２１を用いてＳＳＤ１０の起動処理について説明する。ＳＳＤ１０が起動すると、ＩＰＬ５５がＮＡＮＤメモリ２０上の管理情報におけるＲＯモードフラグ２５を読み出し（ステップＳ１７０）、ＲＯモードフラグ２５を判別する（ステップＳ１７１）。ＲＯモードフラグ２５が０である場合は（ステップＳ１７１）、ＩＰＬ５５は、通常モードにすべく、インタフェースコントローラ３０のＲＷＩＦコントローラ３１を有効にし（ステップＳ１７２）、その後ＲＡＭ４０にＮＡＮＤメモリ２０上の管理情報を読み出す（ステップＳ１７３）。
【０１３１】
一方、ＲＯモードフラグ２５が１である場合は、ＩＰＬ５５は、ＲＯモードにすべく、ＲＯＩＦコントローラ３２を有効にし（ステップＳ１７４）、その後ＲＡＭ４０にＮＡＮＤメモリ２０上の管理情報を読み出す（ステップＳ１７５）。ＲＯモードにおいては、ＳＳＤ１０は書き込みをサポートしない読み出し専用デバイスとして振る舞う。なお、ＲＯモードに移行後は、ＳＳＤ１０は読み出し動作のみを行えばよいので、読み出し動作の速度が速くなるように管理テーブル内の情報を再配置するようにしてもよい。
【０１３２】
つぎに、ホスト１００側の動作について説明する。まず、図２２を用いてホスト１００の起動時の動作を説明する。ホスト１００が起動すると、ホスト１００はＳＳＤ制御ツール１１０を起動する（ステップＳ２０１）。ＯＳ１５０がWindows（登録商標）である場合は、ＳＳＤ制御ツール１１０を例えばスタートアップ登録したりあるいはサービスプログラム登録したりすることで、ＳＳＤ制御ツール１１０を起動時の常駐プログラムに設定しておくことで、ＳＳＤ制御ツール１１０を自動起動させることが可能となる。また、ホスト１００の起動に用いられるシステムディスクとしては、ＳＳＤ１０でもよいし、予めシステムをインストールされているＳＳＤ１０とは別に用意されたＳＳＤまたはハードディスクドライブ（ＨＤＤ）でもよいし、ブートプログラムをインストールされたＤＶＤ−ＲＯＭ、ＣＤ−ＲＯＭ、ＵＳＢメモリなどでもよい。
【０１３３】
ＳＳＤ制御ツール１１０が起動されると、ＳＳＤ制御ツールはＳＳＤ１０のデバイス情報を取得するべく、ＳＳＤ１００に対しデバイス識別情報の送信要求を送信する。前述したように、ＳＳＤ１０において、ＲＷＩＦコントローラ３１が有効である場合、ＳＳＤ制御ツール１１０は、たとえばACS-2で記述されているDevice SignatureにおけるLBA(7:0)やLBA(15:8)を通じてＳＳＤ１０がＡＴＡデバイスであることを認識でき、ＲＷＩＦコントローラ３１は、ホスト１００からたとえばＡＣＳ−２記載のECh IDENTIFY DEVICEなどのデバイス識別情報の送信要求を受信したときは、自身が読み書き両方可能なデバイスであるという識別情報をホスト１００に対して送信する。また、ＳＳＤ１０において、ＲＯＩＦコントローラ３２が有効である場合、ＳＳＤ制御ツール１１０は、たとえばACS-2で記述されているDevice SignatureにおけるLBA(7:0)やLBA(15:8)を通じてＳＳＤ１０がＡＴＡＰＩデバイスであることを認識でき、ＲＯＩＦコントローラ３２は、ホスト１００からたとえばMMC-6記載の46h GET CONFIGURATIONなどのデバイス識別情報の送信要求を受信したときは、自身が書き込みをサポートしていないというデバイス識別情報をホスト１００に対して送信する。このようにして、ＳＳＤ制御ツール１１０は、ＳＳＤ１０からデバイス識別情報を取得する（ステップＳ２０２）。ＳＳＤ１０がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【０１３４】
ＳＳＤ制御ツール１１０は、ＳＳＤ１０から返ってきた情報が、書き込み非サポートのデバイスである場合は（ステップＳ２０３）、ＳＳＤ１０をＲＯモードとして動作させるべく、選択スイッチ１２３，１２４を切り替え設定して、ＲＷＩＦドライバ１２１を無効にし（ステップＳ２０６）、ＲＯＩＦドライバ１２２を有効にする（ステップＳ２０７）。一方、ＳＳＤ１０から返ってきた情報が、書き込み非サポートのデバイスでない場合（ステップＳ２０３）、ＳＳＤ制御ツール１１０は、ＳＳＤ１０を通常モードとして動作させるべく、選択スイッチ１２３，１２４を切り替え設定して、ＲＯＩＦドライバ１２２を無効にし（ステップＳ２０４）、ＲＷＩＦドライバ１２１を有効にする（ステップＳ２０５）。
【０１３５】
つぎに、図２３を用いてホスト１００が動作中におけるＳＳＤ制御ツール１１０の動作を示す。ＳＳＤ１０がＲＯモードに移行したことを迅速に検知するためには、ＳＳＤ制御ツール１１０は、ＳＳＤ１０が通常モードであるときは、ホスト１００からのライト要求に対するＳＳＤ１０からの応答を監視し続けることが望ましい（ステップＳ２１０）。なお、ＳＳＤ１０がＲＯモードである時は、ＳＳＤ１０にはライト要求が送信されないため、ＳＳＤ制御ツール１１０は、ＳＳＤ１０の応答を監視しなくてもよい。
【０１３６】
通常モードでＳＳＤ１０へ送信されたライト要求に関して、エラーが返ってきたとき（１回のエラーでもよいし、複数回のエラーでもよい）、ＳＳＤ制御ツール１１０は、ＳＳＤ１０が図１８に示したＲＯモード移行処理を開始して全てのライト要求に対してエラーを返している状態であると判断し、ＲＷＩＦドライバ１２１を無効化する（ステップＳ２１１）。ＳＳＤ１０を書き込み専用デバイスとして迅速に認識させる観点では、ＳＳＤ制御ツール１１０は、ＳＡＴＡ規格のＣＯＭＲＥＳＥＴや、ＡＣＳ−２記載のSCT Command Transportのベンダ独自のコマンドや、その他ベンダ独自のコマンドなどを用いて、ＳＳＤ１０にリセットコマンドを送るなどしてＳＳＤ１０を再起動させることが望ましい（ステップＳ２１２）。この再起動処理またはユーザによるコンピュータシステム１の再起動またはＳＳＤ１０の電源ＯＦＦ／ＯＮにより、ＳＳＤ１０は図２１に示した処理を行うことで、ＲＯモードに移行する。また、ＳＳＤ制御ツール１１０は、ＲＯＩＦドライバ１２２を有効化する（ステップＳ２１３）。
【０１３７】
以上のようにして、ホスト１００は、ＳＳＤ１０がＲＯモード移行化処理開始直後及びＲＯモード中において、ＳＳＤ１０を利用不可能な外部記憶装置として誤認識することなくＳＳＤ１０に対する読み出し処理を確実に行うことができる。
【０１３８】
図２４は、ホスト１００にＯＳとしてWindows（登録商標）が用いられているときのドライブ表示を示すものであり、ドライブＤとしてＳＳＤが接続されているとする。ＳＳＤが通常の読み書き可能な状態にあるときは、図２４（ａ）に示すように、ドライブＤの種類は「ローカルディスク」と表示される。しかし、ＳＳＤ制御ツール１１０が、図２２、図２３の処理によってドライブＤを書き込み非サポートのデバイスであると認識した後は、図２４（ｂ）に示すように、ドライブＤの種類は例えば「ＣＤ−ＲＯＭ」や「ＤＶＤ−ＲＯＭ」や「ＲＯＭドライブ」と表示される。
【０１３９】
ところで、上記では、ＳＳＤ１０において、図１８におけるＲＯモード移行条件に用いる統計情報として、統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４を採用するようにしたが、他の統計情報を用いて、ＲＯモード移行条件の成立を判定するようにしてもよい。
【０１４０】
例えば、ＳＳＤ１０において、特開２００９−２１７６０３号公報に記載されているクラスタという管理単位が導入されている場合、バッドクラスタ数をＲＯモード移行条件に採用してもよい。クラスタサイズは、セクタサイズの２以上の自然数倍であり、クラスタアドレスは、ＬＢＡの所定のビットから上位のビット列で構成される。ＳＳＤ１０では、管理情報として、バッドクラスタのクラスタアドレス（クラスタＩＤ）を管理するバッドクラスタテーブルを保有する。そして、例えば、ＮＡＮＤメモリ２０から読み出しを行った時にＥＣＣ訂正回路５８でのＥＣＣ処理の際にＥＣＣ訂正エラーが発生すると、メモリコントローラ５０はＥＣＣ訂正エラーが発生したクラスタをバッドクラスタテーブルに登録する。このバッドクラスタテーブルの登録内容に基づきバッドクラスタ数を取得することが可能である。したがって、ＳＳＤ１０が通常モードで動作しているとき、メモリコントローラ５０は、ＲＡＭ４０に記憶された管理情報におけるバッドクラスタテーブルの例えばエントリ数に基づき現在のバッドクラスタ数を取得し、取得したバッドクラスタ数を閾値と比較し、バッドクラスタ数が閾値以上である時、ＲＯモード移行条件が成立したと判定する。
【０１４１】
また、図１８、図２１のフローチャートでは、ＳＳＤ１０においてＲＯモードフラグ２５を介在させることによって、ＳＳＤ起動時にリードオンリーモード移行条件が成立しているか否かを判定したが、起動時、上述したＲＯモード移行条件に用いる各種管理情報のうちの少なくとも１つがＲＯモード移行条件を満足しているか否かを直接判定することで、リードオンリーモードに移行するか否かを決定するようにしてもよい。
【０１４２】
つぎに、ホスト１００に搭載されるＳＳＤ制御ツール１１０の処理についての変形例について説明する。例えば、図２３に示した動作手順に代えて、図２５に示すような動作手順を採用してもよい。図２５においては、ＳＳＤ１０が通常モードで動作しているとき、ＳＳＤ制御ツール１１０は、定期的にＳＳＤ１０に対してＳＳＤ１０の統計情報を取得するためのコマンドを発行する（ステップＳ２２０）。このコマンドとして、例えば、メモリの自己診断機能であるS.M.A.R.T（Self-Monitoring Analysis and Reporting Technology）のコマンドであるSMART READ DATA（B0h（D0h））またはACS-2に記述されているSCT Command Transportまたはベンダー独自のコマンドを採用してもよい。このS.M.A.R.Tの情報を受信したＳＳＤ１０においては、メモリコントローラ５０が統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４の一つまたは一部または全てを取得し、取得した統計情報をホスト１００に返信する。このＳＳＤ１０から返信された統計情報を受信することで、ＳＳＤ制御ツール１１０は、統計情報を取得する（ステップＳ２２１）。
【０１４３】
図２６は、統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４に関する管理テーブルを示すものである。例えば、B0h/D0h SMART READ DATAを用いる場合、図２６に示すように、統計情報２６の構成要素（Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４など）それぞれに対し、属性ＩＤ（attribute ID）を割り当てるが、属性ＩＤをこれら構成要素の一部のみに割り当ててもよいのはもちろんである。これら統計情報２６の構成要素に関し、規格化後、最良値としてSMABを採用し、規格化後の信頼性保証下限値としてSMAL=SMAB*AMALR（０≦AMALR＜１）（SMALは整数で、四捨五入、小数点以下切り上げ、小数点以下切り上げのいずれかにより少数から整数に変換される）を採用し、
attribute value ＝ SMAL + SMAB×（1-AMALR）×(ＲＭＡＸ−生の値)／ ＲＭＡＸ
attribute Threshold＝30（固定値）
（生の値）＝統計情報の生の値
により、メモリコントローラ５０は、S.M.A.R.T情報のattribute value（図２６の「Value」）を計算してＳＳＤ制御ツール１１０に送信する。attribute Thresholdは、図２６の「Threshold」であり、生の値は、図２６の「Raw Data」である。
【０１４４】
規格化後の最良値ＳＭＡＢは任意の自然数であればよく、たとえばＳＭＡＢ＝１００を採用してもよい。ＡＭＡＬＲは０≦ＡＭＡＬＲ＜１をみたす任意の数であればよく、たとえばＡＭＡＬＲ＝０．３を採用してもよい。また、ＲＭＡＸ、ＡＭＡＬＲおよびＳＭＡＢは各Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４に対して、それぞれ別の値を採用することができる。ＳＭＡＢ＝１００で、ＡＭＡＬＲ＝０．３を採用した時、採用対象の統計情報に関してattribute valueの最良値が１００（たとえば出荷直後に１００）になっており、信頼性が劣化するにつれて徐々に減少していき、ＳＳＤ１０が信頼性保証できなくなったとき（統計情報の生の値がＲＭＡＸに等しいかそれ以上になったとき）、attribute valueが３０かそれ以下の値に到達することになる。Attribute ValueがThresholdを超過しているか否かを検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
【０１４５】
図２６の「Worst」をＳＳＤ制御ツール１１０がＳＳＤ１０の寿命を診断する仕様として採用してもよい。「Worst」はattribute valueの最悪値としてメモリコントローラ５０に計算される。たとえば、Ｘ０１〜Ｘ１９、Ｘ２３の場合、Worstは、たとえばＳＳＤ１０が出荷後の（または製造後の）、attribute valueの最小値である。あるいは、Worstとして、過去ある一定時間範囲内のattribute valueの最小値をWorst Valueとして採用してもよいし、ある一定回数（一定データ量）通信または処理が行われた過去にさかのぼって、その過去から現在に至るまでの最小値をworst valueとして採用してもよい。
【０１４６】
図２６の「Raw Data」（Raw Value）をＳＳＤ制御ツール１１０がＳＳＤ１０の寿命を診断する仕様として採用してもよい。統計情報（たとえば、Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４）の生の値がRaw DataとしてＳＳＤ１０からＳＳＤ制御ツール１１０に送信される。この場合、ＳＳＤ制御ツール１１０は、ＲＭＡＸをＳＳＤ制御ツール１１０内にすでに保持しているかＳＳＤ１０から別途読み出すかその他記憶装置から読み出すかしてＲＭＡＸを取得し、ＲＭＡＸとRaw Dataを比較し、Raw Data＞RMAXまたはRaw Data≧RMAXとなった時、ＳＳＤ１０が寿命に到達したと判断する。たとえば、ＮＡＮＤ整理失敗フラグの場合、これが１である場合にＳＳＤ１０が寿命に到達したと判断する。たとえば、バッドブロック数総計の場合、これが所定値を上回った場合にＳＳＤ１０が寿命に到達したと判断する。Raw Dataとして、必ずしも統計情報の生の値を出力する必要はなく、たとえば、統計情報の生の値を四則演算した値をRaw Dataとしてメモリコントローラ５０がＳＳＤ制御ツール１１０に送信し、同じくＲＭＡＸを四則演算した値と比較することで判定を行ってもよい。また、統計情報の生の値を暗号化したデータをRaw Dataとしてメモリコントローラ５０がＳＳＤ制御ツール１１０に送信し、メモリコントローラ５０がこれを復号化して復号化後のデータをＲＭＡＸと比較することで判定を行ってもよい。
【０１４７】
ＳＳＤ制御ツール１１０は、取得した統計情報を所定の閾値、たとえばＲＭＡＸやＲＭＩＮなどと比較し（ステップＳ２２２）、ＳＳＤ１０の統計情報がＲＭＡＸを上回っている時（またはＸ２４＝１である時、または統計情報がＲＭＩＮを下回っている時）などＳＳＤ１０が寿命に到達した（あるいは寿命寸前であるか、あるいは異常状態であるか）と判断される場合（ステップＳ２２２：Ｙｅｓ）、図２３と同様、ＲＷＩＦドライバ１２１を無効化する（ステップＳ２２３）。ＳＳＤ制御ツール１１０は、ＳＳＤ１０を再起動してもよい（ステップＳ２２４）。ＳＳＤ１０再起動後、ＳＳＤ制御ツール１１０はＲＯＩＦドライバ１２２を有効化する（ステップＳ２２５）。
【０１４８】
また、ＳＳＤ１０が通常モードであるときのホスト１００での動作として、図２７に示すような動作手順を採用してもよい。この動作手順では、ＳＳＤ１０が通常モードで動作しているとき、ＳＳＤ制御ツール１１０は、定期的にＳＳＤ１０に対してS.M.A.R.TのコマンドであるSMART READ DATAまたはベンダー独自のコマンドを発行する（ステップＳ２４０）。このS.M.A.R.Tの情報を受信したＳＳＤ１０においては、メモリコントローラ５０がＲＡＭ４０に記憶された管理情報におけるバッドクラスタテーブルの例えばエントリ数に基づき現在のバッドクラスタ数を取得し、取得したバッドクラスタ数をホスト１００に返信する。このＳＳＤ１０から返信されたバッドクラスタ数を受信することで、ＳＳＤ制御ツール１１０は、バッドクラスタ数を取得する（ステップＳ２４１）。
【０１４９】
ＳＳＤ制御ツール１１０は、取得したバッドクラスタ数を所定の閾値と比較し（ステップＳ２４２）、ＳＳＤ１０のバッドクラスタ数が閾値以上である時、図１３と同様、ＲＷＩＦドライバ１２１を無効化し（ステップＳ２４３）、ＳＳＤ１０を再起動し（ステップＳ２４４）、ＲＯＩＦドライバ１２２を有効化する（ステップＳ２４５）。
【０１５０】
また、ＳＳＤ制御ツール１１０にバックアップ機能を搭載してもよい。ＳＳＤ１０がリードオンリーモードに移行している状態では、ＳＳＤ１０のデータリテンション特性が悪化していると考えられるため、できるだけ早急にＳＳＤ１０上のユーザデータを他の２次記憶装置に退避させることが必要である。図２８は、ＳＳＤ制御ツール１１０がバックアップ機能を搭載している場合の、ホスト１００の構成を示す図である。ホスト１００には、２次記憶装置（他のＳＳＤ、ハードディスクドライブ、携帯ディスク記憶媒体など）１３０が接続されており、ホスト１００のＯＳと２次記憶装置４００とは２次記憶装置用ドライバ４０１を介して通信を行う。
【０１５１】
図２９は、バックアップを行う場合のＳＳＤ制御ツール１１０の動作例を示すものである。図２９では、図２２に示したＳＳＤ制御ツール１１０の動作手順にステップＳ２０８を追加している。ステップＳ２０８でのバックアップの際、ＳＳＤ制御ツール１１０は、「ＳＳＤがリードオンリーモードに移行しています。ＳＳＤのデータをバックアップしますか？」などのメッセージとバックアップの可否を選択する「ＯＫ」ボタン及び「キャンセル」ボタンを表示する。そして、「ＯＫ」ボタンがクリックされるとバックアップが開始され、「キャンセル」ボタンがクリックされるとバックアップは行われずにメッセージの表示が消える。ＲＯＩＦドライバ１２２に対し、ＳＳＤ１０の全ＬＢＡのデータを読み出すよう命令を送る。ＳＳＤ制御ツール１１０は、ＳＳＤ１０から読み出したデータのＬＢＡ（ＳＳＤのＬＢＡ）と同一のＬＢＡ（２次記憶装置４００上のＬＢＡ）に、ＳＳＤ１０から読み出したデータを書き込むように、２次記憶装置用ドライバ４０１に対して命令を送る。例えば、ＳＳＤ１０上のＬＢＡ＝０ｈのデータは２次記憶装置４００上のＬＢＡ＝０ｈにコピーされる。また、ＳＳＤ１０上のＬＢＡ＝２３４ｃ５ｈのデータは２次記憶装置４００上のＬＢＡ＝２３４ｃ５ｈにコピーされる。
【０１５２】
なお、このバックアップ処理の際、ＳＳＤ制御ツール１１０は、ホスト１００のＯＳに対し、ＳＳＤ１０の全ファイルを２次記憶装置４００にコピーするよう命令を送るようにしてもよい。この場合、ＯＳはＯＳに含まれるファイル管理テーブルを参照し、ＳＳＤ１０の全ファイルの全ＬＢＡを取得し、取得したＬＢＡの全データを読み出し、読み出したデータを２次記憶装置４００に書き込み、書き込んだＬＢＡとファイルのインデックスが対応付けられるようにファイル管理テーブルを更新する。また、ＳＳＤ１０のマスターブートレコード（ＭＢＲ）情報をはじめとするパーティションの情報及びファイルシステム管理領域にアクセスし、使用されている領域やファイルの情報を取得し、取得した情報をもとに、ＳＳＤ１０のデータについてのＲＯＭイメージを作成し、作成したＲＯＭイメージを他の記憶装置に保存するようにしてもよい。
【０１５３】
また、本実施形態では、簡単のため、ＮＡＮＤメモリ２０の物理アドレスは管理情報においてＬＢＡに対して直接関連付けられていたが、たとえば特開２００９−２１７６０３号のようにセクタサイズの２以上の自然数倍の管理単位を用いてＬＢＡを管理し、ＬＢＡではなく、前記管理単位とＮＡＮＤメモリ２０の物理アドレスとの対応関係を管理情報に記述するようにしてもよい。ＮＡＮＤメモリ２０の物理アドレスとＬＢＡの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとＬＢＡの対応関係を記述するテーブル（論物変換テーブル）の取る形態は、本発明の本質には影響しない。ＮＡＮＤ型フラッシュメモリ以外の不揮発性メモリに関しても、不揮発性メモリの物理アドレスとＬＢＡの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとＬＢＡの対応関係を記述するテーブル（論物変換テーブル）の取る形態は、本発明の本質には影響しない。
【０１５４】
管理情報部で用いる信頼性情報にかかわりのない情報は、本発明の本質には影響しない。以上の信頼性情報についての要件は、第２の実施形態以降の実施形態にも当てはまる。
【０１５５】
このように第１の実施形態によれば、ＳＳＤ１０において、リードオンリーモード移行条件が成立したか否かを判定し、リードオンリーモード移行条件が成立した場合、インタフェースコントローラを読み出し専用のものに切り替えるとともに、ホスト１００において、ＳＳＤ１０から取得した情報に基づきＳＳＤ１０をリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、ＳＳＤ制御用のインタフェースドライバを読み出し専用のものに切り替えるようにしているので、リードオンリーモードに移行したＳＳＤをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【０１５６】
（第２の実施形態）
第１の実施形態では、ＳＳＤ１０への機能実装及びホスト１００への機能実装の両方を使用した。第２の実施形態では、ＳＳＤ１０への機能実装のみを適用した場合を示す。ＳＳＤ１０及びホスト１００の両方に機能を実装すると最も効果的であるが、ＳＳＤ１０のみに機能を実装しても十分に効果を発揮することができる。
【０１５７】
図３０にコンピュータシステムの第２の実施形態の構成を示す。この第２の実施形態においては、ＳＳＤ１０に、第１の実施形態で説明したインタフェースコントローラ３０を搭載しており、ホスト１００側には、ＳＳＤ１０用のインタフェースドライバ１２０を切り替えるＳＳＤ制御ツール１１０を搭載してはいない。図３０において、図１に示した構成要素と同一機能を有する構成要素については同一符号を付し、重複する説明は省略する。第２の実施形態では、ＩＰＬ５５の機能をメモリコントローラ５０に搭載している。第２の実施形態のＳＳＤ１０においても、先の第１の実施形態で説明したＳＳＤ１０の機能を全て搭載可能である。
【０１５８】
この第２の実施形態においては、メモリコントローラ５０は、ＳＳＤ１０をリード／ライト可能な通常の状態からリードオンリーモード状態へ移行させる前述したリードオンリーモード移行条件が成立するか否かをＳＳＤ起動時あるいはＳＳＤの動作中に前述した管理情報を用いて判定しており、リードオンリーモード移行条件が成立した場合、インタフェースコントローラ３０をＲＷＩＦコントローラ３１からＲＯＩＦコントローラ３２に切り替える。ＲＷＩＦコントローラ３１は、ホスト１００から要求があった場合、本ドライブはリードライト可能なドライブである旨を示すデバイス識別情報をホストに送信する。ＲＯＩＦコントローラ３２は、ホスト１００から要求があった場合、本ドライブは読み出し専用ドライブである旨を示すデバイス識別情報をホストに送信する。
【０１５９】
ＲＷＩＦコントローラ３１はＳＳＤ１０がＡＴＡデバイスであることをホスト１００に明示的に示すよう構成されるのが望ましい。たとえば、ATA/ATAPI Command Set-2 (ACS-2)で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を00hに、LBA(23:16)を00hとしてホスト１００に出力することで、ＳＳＤ１０がＡＴＡデバイスであることをホスト１００に通知することができる。ＲＯＩＦコントローラ３２はＳＳＤ１０がＡＴＡＰＩデバイスであることをホスト１００に明示的に示すよう構成されるのが望ましい。たとえば、前記ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト１００に出力することで、ＳＳＤ１０がＡＴＡＰＩデバイスであることをホスト１００に通知することができる。 
【０１６０】
ＲＯＩＦコントローラ３２は、ＳＳＤ１０が書き込みコマンドをサポートせず読み出し専用であることをホスト１００に通知するよう構成される。例えば、ＡＴＡインタフェース９０を介してホスト１００から、INCITS Multi-Media Commands-6 (MMC-6)に採用されている コマンドGET CONFIGURATION（46h）を受信したとき、ＲＯＩＦコントローラ３２は、Random Writable(Feature Number=0020h)、Incremental Streaming Writable (Feature Number=0021h)、Write Once(Feature Number=0025h)などのFeaturesにおいて、ライト系機能は全て非サポートであることをホスト１００に返信する。なお、ＲＯＩＦコントローラ３２は、ＲＷＩＦコントローラ３１と同じく、ＳＳＤ１０がＡＴＡデバイスであることをホスト１００に明示的に示すよう構成され、ＡＴＡインタフェース９０を介してホスト１００からデバイス識別情報、たとえばＡＣＳ−２記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト１００に返信するよう構成されてもよい。ＳＳＤ１０がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【０１６１】
例えば、第１の実施形態で用いた図１８を参照すれば、ＳＳＤ１０が動作中、メモリコントローラ５０は、ＲＯモード移行条件が成立したか否かを判定している（図１８：ステップＳ１６０）。ＲＯモード移行条件の成立の具体例としては、統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４のうち少なくとも一つがＲＭＡＸを上回っている時、またはＸ２４＝１である時、または統計情報がＲＭＩＮを下回っている時、などのようにＳＳＤ１０が寿命に到達した（あるいは寿命寸前である、あるいは異常状態である）と判断される場合などの条件がある。
【０１６２】
ＲＯモード移行条件が成立すると、メモリコントローラ５０は、現在行われているＮＡＮＤメモリ２０に対する書き込み処理を全てキャンセルし（ステップＳ１６１）、ホスト１００から受信した全てのライト要求に対してエラーを返し、ホスト１００から受信したライト要求のキュー全てを削除するのが望ましい（ステップＳ１６２）。つぎに、メモリコントローラ５０は、ＮＡＮＤメモリ２０上の管理情報におけるＲＯモードフラグ２５に１を書き込む（ステップＳ１６３）。その後、ＳＳＤ１０は電源を遮断されるかリセットされるまで、ホスト１００から受信したライト要求の全てに対してエラーを返す（ステップＳ１６４、Ｓ１６５）。
【０１６３】
また、ＳＳＤ１０の起動時には、例えば、先の第１の実施形態で用いた図２１と同様の動作を実行する。すなわち、ＳＳＤ１０が起動すると、メモリコントローラ５０内のＩＰＬ５５がＮＡＮＤメモリ２０上の管理情報におけるＲＯモードフラグ２５を読み出し（ステップＳ１７０）、ＲＯモードフラグ２５を判別する（ステップＳ１７１）。ＲＯモードフラグ２５が０である場合は（ステップＳ１７１）、ＩＰＬ５５は、通常モードにすべく、インタフェースコントローラ３０のＲＷＩＦコントローラ３１を有効にし（ステップＳ１７２）、その後ＲＡＭ４０にＮＡＮＤメモリ２０上の管理情報を読み出す（ステップＳ１７３）。
【０１６４】
一方、ＲＯモードフラグ２５が１である場合は、ＩＰＬ５５は、ＲＯモードにすべく、ＲＯＩＦコントローラ３２を有効にし（ステップＳ１７４）、その後ＲＡＭ４０にＮＡＮＤメモリ２０上の管理情報を読み出す（ステップＳ１７５）。ＲＯモードにおいては、ＳＳＤ１０は書き込みをサポートしない読み出し専用デバイスとして振る舞う。
【０１６５】
ホスト１００はホスト起動時、またはデバイス接続時、接続されているデバイスに対して識別情報を要求する。ＳＳＤ１０は、通常モードにおいては、ＲＷＩＦコントローラ３１がホスト１００に対してＳＳＤ１０が読み書き可能であることを示すデバイス識別情報をホストに対して返すので、ホスト１００はＳＳＤ１０を読み書き可能であるデバイスとして認識する。一方、ＲＯモードにおいては、ＳＳＤ１０は、ＲＯＩＦコントローラ３２がホスト１００に対してＳＳＤ１０が書き込み非サポートの読み出し専用ドライブであることを示すデバイス識別情報を返すので、ホスト１００はＳＳＤ１０を書き込み非サポートデバイスとして認識する。よって、ＲＯモード時においては、ホスト１００からＳＳＤ１０にライト要求が送られることはない。このように、ＲＯモードにおいては、ＳＳＤ１０は書き込みをサポートしないデバイスとして振る舞って、ホスト１００から書き込み以外のアクセスが可能になる。また、ホスト１００にＯＳとしてWindows（登録商標）が搭載されている場合でも、ＳＳＤ１０が読み出し可能なデバイスであるとして認識されることが可能になる。
【０１６６】
このようにして、ＳＳＤ１０の信頼性悪化時にＳＳＤ１０が書き込み非サポートの外部記憶装置であるという識別情報をＳＳＤ１０からホスト１００に通知することで、ホスト１００にとっては、あたかもＳＳＤ１０が読み書き可能な外部記憶装置から書き込み非サポートの外部記憶装置に切り替わったかのように見える。したがって、ホスト１００にとっては、信頼性が悪化したＳＳＤ１０は読み出しのみ可能なデバイスとして振る舞うために、ホスト１００は例えばＳＳＤ１０をＣＤ−ＲＯＭやＤＶＤ−ＲＯＭのような一般的な読み出し専用外部記憶装置として扱うことができる。
【０１６７】
（第３の実施形態）
第３の実施形態では、ホスト１００への機能実装のみを適用した場合を示す。ＳＳＤ１０及びホスト１００の両方に機能を実装すると最も効果的であるが、ホスト１００のみに機能を実装しても効果を十分に発揮することができる。
【０１６８】
図３１にコンピュータシステムの第３の実施形態の構成を示す。この第３の実施形態においては、ホスト１００に、第１の実施形態で説明したインタフェースドライバ１２０及びＳＳＤ制御ツール１１０を搭載しており、ＳＳＤ１０側には、ＲＷＩＦコントローラ３１及びＲＯＩＦコントローラ３２が切り替え可能なインタフェースコントローラ３０を搭載してはいない。図３１において、図１に示した構成要素と同一機能を有する構成要素については同一符号を付し、重複する説明は省略する。インタフェースコントローラ３０に代えて、ＲＷＩＦコントローラ３１のみが搭載されたインタフェースコントローラ３８が搭載されている。第３の実施形態のホスト１００においても、先の第１の実施形態で説明したホスト１００の機能を全て搭載可能である。
【０１６９】
この第３の実施形態においては、ＳＳＤ制御ツール１１０は、先の第１の実施形態の図２５、図２７などで説明した動作と同様の動作を実行する。ホスト１００が起動すると、ホスト１００はＳＳＤ制御ツール１１０を起動する。ＳＳＤ制御ツールは、たとえばWindows（商標）においてスタートアップメニューやサービスやレジストリに登録されるなどして、ホスト１００の起動とおもに自動的に起動されることが望ましい。一方、ＳＳＤ制御ツールは、キーボード１３４やマウス１３５などにより、ユーザによって任意に起動されてもよい。ＳＳＤ制御ツール１１０が起動されると、例えば図２５の場合、ＳＳＤ制御ツール１１０はＳＳＤ１０の統計情報Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４などのうち少なくとも一つを取得するべく、ＳＳＤ１００に対し統計情報の送信要求を送信する（図２５：ステップＳ２２０）。この送信要求としては、例えば、前述したように、メモリの自己診断機能であるS.M.A.R.TのコマンドであるSMART READ DATAまたはACS-2に記述されているSCT Command Transportまたはベンダー独自のコマンドを採用してもよい。
【０１７０】
このようにして、ＳＳＤ制御ツール１１０は、統計情報を取得する（ステップＳ２２１）。ＳＳＤ制御ツール１１０は、ＳＳＤ１０から返ってきた統計情報を閾値（たとえば第１の実施形態で述べたＲＭＡＸやＲＭＩＮ）と比較する（ステップＳ２２２）。例えば、統計情報の取得にACS-2記載のB0h/D0h SMART READ DATAを用いる場合、ＳＳＤ制御ツール１１０は、統計情報２６の構成要素（Ｘ０１〜Ｘ１９、Ｘ２３、Ｘ２４など）のうち少なくとも一つの統計情報を、図２６に示すAttribute Value、Threshold、Worst ValueおよびRaw Data(Raw Value)の形態で取得する。メモリコントローラ５０によるAttribute Value、Threshold、Worst ValueおよびRaw Data(Raw Value)の計算方法は第１の実施形態と同じであり、このようにして計算された情報が、B0h/D0h SMART READ DATAに対する読み出しデータとしてＳＳＤ１０から制御ツール１１０に送信される。
【０１７１】
たとえば、SMARTのAttribute ValueとThresholdを、ＳＳＤ１０の寿命（または異常状態）を診断するための比較データとして用いる場合、ＳＳＤ制御ツール１１０は、Attribute ValueとThresholdの比較を行い、たとえばAttribute Value＜Threshold（またはAttribute Value≦Threshold）であった場合、ＳＳＤ制御ツールはＳＳＤ１０が寿命に到達した（または異常事態である）と判定する。第１の実施形態のように、たとえばＳＭＡＢ＝１００で、ＡＭＡＬＲ＝０．３を採用した時、採用対象の統計情報に関してattribute valueの最良値が１００（たとえば出荷直後に１００）になっており、信頼性が劣化するにつれて徐々に減少していき、ＳＳＤ１０が信頼性保証できなくなったとき（統計情報の生の値がＲＭＡＸに等しいかそれ以上になったとき）、attribute valueが３０かそれ未満の値に到達することになり、ＳＳＤ制御ツール１１０はＳＳＤ１０をリードオンリーメモリとして認識すべきと判断する（ステップＳ２２２：Ｙｅｓ）。Attribute ValueがThresholdを超過しているか否かを検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
【０１７２】
たとえば、SMARTのWorst ValueとThresholdを、ＳＳＤ１０の寿命（または異常状態）を診断するための比較データとして用いる場合、ＳＳＤ制御ツール１１０は、Worst ValueとThresholdの比較を行い、たとえばWorst Value＜Threshold（またはWorst Value≦Threshold）であった場合、ＳＳＤ制御ツールはＳＳＤ１０が寿命に到達した（または異常事態である）と判定する。第１の実施形態のように、たとえばＳＭＡＢ＝１００で、ＡＭＡＬＲ＝０．３を採用した時、採用対象の統計情報に関してWorst Valueの最良値が１００（たとえば出荷直後に１００）になっており、信頼性が劣化するにつれて徐々に減少していき、ＳＳＤ１０が信頼性保証できなくなったとき（統計情報の生の値がＲＭＡＸに等しいかそれ以上になったとき）、Worst Valueが３０かそれ未満の値に到達することになり、ＳＳＤ制御ツール１１０はＳＳＤ１０をリードオンリーメモリとして認識すべきと判断する（ステップＳ２２２：Ｙｅｓ）。
【０１７３】
たとえば、ＳＳＤ１０の信頼性悪化とともに増大していくようなSMARTのRaw Data（Raw Value）を、ＳＳＤ１０の寿命（または異常状態）を診断するための比較データとして用いる場合、ＳＳＤ制御ツール１１０は、Raw ValueとＲＭＡＸの比較を行い、たとえばRaw Value≧RMAX（またはRaw Value＞RMAX）であった場合、ＳＳＤ制御ツールはＳＳＤ１０が寿命に到達した（または異常事態である）と判定する。ＲＭＡＸは主メモリ２０２上、たとえばＳＳＤ制御ツール１１０上に保持されているパラメータである。ＲＭＡＸはコンピュータシステム１の電源OFF時は不揮発情報としてＳＳＤ１０に格納されていることが望ましく、電源ON時に例えば図５や図６のようにＳＳＤ制御ツールが主メモリ２０２にロードされる時、主メモリ２０２にロードされる。ＲＭＡＸは第１の実施形態のようにＳＳＤ１０の開発時に決定されることが望ましく、ＳＳＤ制御ツールのインストール元となる領域、たとえばＷＥＢサーバーの記憶媒体４００上の領域や、光学記憶媒体５００上の領域や、ＵＳＢメモリ６００の領域に格納されている。
【０１７４】
Raw Valueは、ＳＳＤ１０の信頼性が劣化するにつれて徐々に増加していき、ＳＳＤ１０が信頼性保証できなくなったとき、Raw ValueがＲＭＡＸかそれより大きい値に到達することになり、ＳＳＤ制御ツール１１０はＳＳＤ１０をリードオンリーメモリとして認識すべきと判断する（ステップＳ２２２：Ｙｅｓ）。ＲＭＡＸは統計情報Ｘ０１〜Ｘ１９、Ｘ２３など構成要素のそれぞれに対し、別々の値を採用してもよい。
【０１７５】
たとえば、ＳＳＤ１０の信頼性悪化とともに減少していくようなSMARTのRaw Data（Raw Value）を、ＳＳＤ１０の寿命（または異常状態）を診断するための比較データとして用いる場合、ＳＳＤ制御ツール１１０は、Raw ValueとＲＭＩＮの比較を行い、たとえばRaw Value≦ＲＭＩＮ（またはRaw Value＜ＲＭＩＮ）であった場合、ＳＳＤ制御ツールはＳＳＤ１０が寿命に到達した（または異常事態である）と判定する。ＲＭＩＮは主メモリ２０２上、たとえばＳＳＤ制御ツール１１０上に保持されているパラメータである。ＲＭＩＮはコンピュータシステム１の電源OFF時は不揮発情報としてＳＳＤ１０に格納されていることが望ましく、電源ON時に例えば図５や図６のようにＳＳＤ制御ツールが主メモリ２０２にロードされる時、主メモリ２０２にロードされる。ＲＭＩＮは第１の実施形態のようにＳＳＤ１０の開発時に決定されることが望ましく、ＳＳＤ制御ツールのインストール元となる領域、たとえばＷＥＢサーバーの記憶媒体４００上の領域や、光学記憶媒体５００上の領域や、ＵＳＢメモリ６００の領域に格納されている。
【０１７６】
Raw Valueは、ＳＳＤ１０の信頼性が劣化するにつれて徐々に減少していき、ＳＳＤ１０が信頼性保証できなくなったとき、Raw ValueがＲＭＩＮかそれ未満の値に到達することになり、ＳＳＤ制御ツール１１０はＳＳＤ１０をリードオンリーメモリとして認識すべきと判断する（ステップＳ２２２：Ｙｅｓ）。ＲＭＩＮは統計情報Ｘ０１〜Ｘ１９、Ｘ２３など構成要素のそれぞれに対し、別々の値を採用してもよい。
【０１７７】
たとえば、SMARTのRaw Data（Raw Value）として統計情報Ｘ２４を受信して、ＳＳＤ１０の寿命（または異常状態）を診断するための比較データとして用いる場合、ＳＳＤ制御ツール１１０は、Raw Valueが１であるか否かの判定を行い、Raw Value＝１であった場合、ＳＳＤ制御ツールはＳＳＤ１０が寿命に到達した（または異常事態である）と判定する。ＳＳＤ１０の信頼性が劣化しＮＡＮＤ整理によっても十分な数のフリーブロックがメモリコントローラ５０により確保できなかった場合、メモリコントローラ５０によりRaw Valueが１にセットされ、ＳＳＤ制御ツール１１０はＳＳＤ１０をリードオンリーメモリとして認識すべきと判断する（ステップＳ２２２：Ｙｅｓ）。
【０１７８】
ステップＳ２２２の比較の結果、ＳＳＤ１０にＲＯモード移行条件が成立していると判断した場合、すなわちＳＳＤ１０をリードオンリーメモリとして認識すべきと判断した場合（ステップＳ２２２：Ｙｅｓ）、ＲＯＩＦドライバ１２２を有効にする（ステップＳ２２５）。また、ＳＳＤ制御ツール１１０は図１２におけるオペレーティングシステム１５０内のシステムパラメータを操作することで、オペレーティングシステム１５０にＳＳＤ１０をリードオンリーメモリとして認識させてもよい。ステップＳ２２５の前に、ＳＳＤ制御ツール１１０はリセットコマンド等を送信してＳＳＤ１０を再起動するのが望ましい（Ｓ２２４）。
【０１７９】
なお、ＳＳＤ制御ツール１１０は、図２５、図２７などに示したステップＳ２２０、ステップＳ２２１及びステップＳ２２２（図２５の場合）の手順、すなわちＳＳＤ１０への統計情報の送信要求、及びＳＳＤ１０をリードオンリーメモリとして認識すべきとの判断を、ホスト１００が動作中も定期的に行うようにするのが望ましい。たとえば、一定時間おきに、SMART READ DATAを発行し、ＳＳＤ１０をリードオンリメモリとして認識すべきか否かの判断を行うようにするとよい。前記要求及び判断をホスト１００の起動時に行うようにしてもよく、ＳＳＤ制御ツール１１０の割り込み処理回数を低減するために、前記要求及び判断をホスト１００起動後のみに行うようにしてもよい。そして、ＳＳＤ１０をリードオンリーメモリとして認識すべきと判断した場合は、インタフェースドライバ１２０のＲＯＩＦドライバ１２２を有効にする。ＳＳＤ制御ツール１１０の割り込み処理回数を低減するために、ＳＳＤ１０をリードオンリメモリとして認識した後は、統計情報の送信要求やＲＯモード移行判断を行わないようにすることが望ましい。
【０１８０】
また、ＳＳＤ制御ツール１１０は、ＳＳＤ１０の起動または接続を認識すると、前記要求および判断を行うようにしてもよい。たとえば、インタフェース９０がＳＡＴＡインタフェースである場合、ホスト１００のＳＳＤ１０に関するステータスレジスタが７Ｆｈから５０ｈになったとき、ＳＳＤ１０が起動または接続されたと判断し、前記要求および判断を行うようにしてもよい。
【０１８１】
また、前記リードオンリーメモリとして認識すべきとの判断は、メモリコントローラ５０が行うようにし、ＳＳＤ制御ツール１１０はSMART READ DATAまたはSCT Command Transportまたはベンダー独自のコマンドを通じてその判断結果のみを受信するようにしてもよい。たとえば、第１の実施形態と同様の判断基準でメモリコントローラ５０によってリードオンリーメモリとして認識すべきと判断された時は、SMART READ DATAによりＳＳＤ制御ツール１１０はＳＳＤ１０からAttribute Valueとして数値０を受信し、そうでないとき（通常時）は数値１００を受信し、リードオンリーメモリとして認識すべき場合とそうでない場合のどちらにおいてもThresholdとしては数値７０を受信し、Attribute Value ＜ Thresholdの時（ステップＳ２２２：Ｙｅｓ）、リードオンリーメモリとして認識すべきと判断し、Attribute Value > Thresholdのとき（ステップＳ２２２：Ｎｏ）は、リードオンリーメモリとして認識すべきでないと判断するようにしてもよい。判断結果の受信にWorst ValueやRaw Valueを用いてもよいのはもちろんである。
【０１８２】
なお、統計情報として、たとえば現在温度Ｘ２０、最高温度Ｘ２１、最低温度Ｘ２２を採用する場合は、温度異常は一時的なものである可能性があるため、ＳＳＤ制御ツール１１０がステップＳ２２５によってＲＯＩＦドライバを有効化した後に、たとえばAttribute Value≧Threshold（またはAttribute Value＞Threshold）となって通常状態に復帰したと判断されたときは、ＲＯＩＦドライバを無効化し、ＲＷＩＦドライバを有効化してもよい。
【０１８３】
ＳＳＤ１０のデータ破壊や故障によるユーザデータ損失を防止する観点では、ＲＯＩＦドライバ１２２は、ＳＳＤ１０に対する書き込みコマンドを一切送信しないよう構成されることが望ましい。一方、ＲＯＩＦドライバ１２２は、たとえばオペレーティングシステムのシステム情報など一部のデータをＳＳＤ１０に書き込む必要がある場合は、例外としてＳＳＤ１０に当該データを書き込むことを許可してもよいが、当該データはデータ量がＮＡＮＤメモリ２０の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいＳＳＤ１０に対してデータを書き込んでしまうことを防止するために、ＩＯＩＦドライバ１２２は、たとえばACS-2記載の35h WRITE DMA EXTや61h WRITE FPDMA QUEUEDのような、ＳＳＤ１０に対する通常の書き込みコマンドは一切送信せず、ＳＳＤ１０に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりＳＳＤ２に対する書き込みを許可するようにすることが望ましい。
【０１８４】
第３の実施形態においても、ＳＳＤ制御ツール１１０は、図５に示したように、ホスト装置１００が電源オフになっているときはＳＳＤ１０のＮＡＮＤメモリ２０の領域１１０Ａに格納されているが、ホスト装置１００の起動時またはプログラム起動時に、領域１１０Ａから領域１１０にロードされる。一方、ホスト装置に複数の不揮発性記憶装置が接続されている場合は、図６に示すように、ＳＳＤ制御ツールは、ＳＳＤ１０とは別の不揮発性記憶装置３００の領域１１０Ｂに格納されており、ホスト装置１００の起動時またはプログラム起動時に、領域１１０Ｂから領域１１０にロードされるようにしてもよい。特に、不揮発性記憶装置３００がＯＳを格納するシステムドライブとして使用されており、ＳＳＤ１０が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ３００にはＯＳやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ１０にはユーザデータを格納するドライブとして使用するというように、ドライブ１０とドライブ３００の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置３００に制御ツールを格納することが望ましい。
【０１８５】
第３の実施形態においても、制御ツールのセットアップをユーザが行う労力を省く観点では、例えば図５や図６のように、ＳＳＤ制御ツールがＳＳＤ１０や不揮発性記憶装置３００に格納された状態でコンピュータシステム１が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザがＳＳＤ制御ツールのインストールの可否を選択できるようにする観点、およびユーザに最新の制御ツールを提供できるようにするという観点では、制御ツールは、図７に示したＷＥＢからのダウンロード、または図８に示したＤＶＤ−ＲＯＭからのインストール、さらには図９に示したＵＳＢメモリなど外部記憶媒体からのインストールにより、ＳＳＤ１０や不揮発性記憶装置３００に格納できるようにすることが望ましい。第３の実施形態においても、ユーザによる入手容易性の観点から、光学メディア５００やＵＳＢメモリ６００はＳＳＤ１０の出荷時に、付属品としてＳＳＤ１０と一緒に梱包されて販売されることが望ましい。一方、光学メディア５００やＵＳＢメモリ６００はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【０１８６】
このようにして、ホスト１００に搭載されたＳＳＤ制御ツール１１０がＳＳＤ１０の信頼性状態（統計情報）を判定し、この判定結果に基づいてＳＳＤ用のインタフェースドライバを選択することとしたので、ＳＳＤ１０の信頼性悪化時（寿命到達時、異常状態時）、ＯＳやその他ソフトウェアにとっては、あたかもＳＳＤ１０が読み書き可能な外部記憶装置から書き込み非サポートの外部記憶装置に切り替わったかのように見える。したがって、ＯＳやその他ソフトウェアにとっては、信頼性悪化したＳＳＤ１０は読み出しのみ可能なデバイスとして振る舞うために、ホスト１００はＳＳＤ１０をＣＤ−ＲＯＭやＤＶＤ−ＲＯＭのような一般的な読み出し専用外部記憶装置として扱うことができる。
【０１８７】
（第４の実施形態）
第１及び第２の実施形態では、ＳＳＤ１０が読み出し専用デバイスであるという情報をＳＳＤ１０がホスト１００に対し送信していた。ＳＳＤ１０とは別に用意されたインタフェース中継デバイス７００を用い、インタフェース中継デバイス７００がホスト１００に対しＳＳＤ１０が読み出し専用デバイスであるという情報をホスト１００に対して送信してもよい。このインタフェース中継デバイス７００を読み出し専用ブリッジと呼ぶ。
【０１８８】
図３２は、図１０に示したコンピュータシステムに読み出し専用ブリッジ７００を接続した状態を示すものである。図３３は、読み出し専用ブリッジが接続された第４の実施形態のコンピュータシステムを示すブロック図である。読み出し専用ブリッジ７００はホスト１００に対して読み出し専用デバイスであるという情報を送信するよう構成される。読み出し専用デバイスであるという情報は、たとえば前述のMMC-6に採用されている前述したコマンドGET CONFIGURATION（46h）を用いてもよいし、他のコマンドを用いてもよい。さらに、読み出し専用ブリッジ７００は、ホスト１００から受信した各種命令及び応答をＳＳＤ１０に送信し、ＳＳＤ１０から受信した各種命令及び応答をホストに送信するなど、ホスト側インタフェースとＳＳＤ側インタフェースの中継の役割を果たすよう構成される。ホスト側インタフェースとＳＳＤ側インタフェースのインタフェース規格が異なる場合は、読み出し専用ブリッジ７００は、受信したコマンド及び応答を送信側インタフェースに合うように変換して送信する。ホスト側インタフェースがＳＡＴＡインタフェースである場合、読み出し専用ブリッジ７００はＳＳＤ１０がＡＴＡＰＩデバイスであることをホスト１００に明示的に示すよう構成されてもよい。たとえば、前記ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト１００に出力することで、ＳＳＤ１０がＡＴＡＰＩデバイスであることをホスト１００に通知することができる。
【０１８９】
ホスト１００の通常利用時は、ＳＳＤ１０は、図１０に示したように、ＡＴＡインタフェース９０としてのＳＡＴＡケーブルや、ＵＳＢケーブルによってホスト１００のマザーボード１３０に接続されている。ホスト１００に搭載されているＳＳＤ制御ツール１１０が前述したＡＣＳ−２記載のS.M.A.R.T情報などによって統計情報を取得して、この管理情報と閾値との比較によって、たとえば統計情報＞ＲＭＡＸまたは統計情報＜ＲＭＩＮまたはＸ２４＝１の条件がを満たされるなどにより、ＳＳＤ１０の信頼性が劣化していると判断すると、ＳＳＤ制御ツール１１０は、ディスプレイ１３３上に「ＳＳＤの寿命が近づいています。読み出し専用ブリッジのデバイス側端子をＳＳＤに接続し、読み出し専用ブリッジのホスト側端子をパソコンに接続し、ＳＳＤのデータをバックアップしてください。」などのメッセージを含む警告ウィンドウ（または警告ダイアログ）を表示する。なお、管理情報と比較する閾値（ＲＭＡＸやＲＭＩＮなど）をホスト１００内に保持して信頼性劣化の判断をＳＳＤ制御ツール１１０が行うようにしてもよいし、前記閾値をＳＳＤ１０内に保持して信頼性劣化の判断をＳＳＤ１０のメモリコントローラ５０が行い、管理情報が閾値を超過したという情報のみをメモリコントローラ５０がホスト１００に送信することにしてもよい。
【０１９０】
ディスプレイ１３３上に表示された警告メッセージに従って、ユーザが、図３２に示すように、ＳＳＤ１０と読み出し専用ブリッジ７００とをＳＡＴＡケーブルまたはＵＳＢケーブルなどで接続し、読み出し専用ブリッジ７００とマザーボード１３０をＳＡＴＡケーブルやＵＳＢケーブルなどで接続する。
【０１９１】
この後、ホスト１００が起動されると、読み出し専用ブリッジ７００はホスト１００に対して、ＳＳＤ１０が読み出し専用デバイスであるという情報を送信する。これにより、ホスト１００は、読み出し専用ブリッジ７００のインタフェースドライバ１７０として読み出し専用の例えばＡＴＡＰＩドライバの読み出し専用ドライバを適用し、またホスト上でＳＳＤ１０はたとえばＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどのような読み出し専用デバイスとして認識される。なお、読み出し専用ブリッジ７００は、ＳＳＤ１０がＡＴＡデバイスであることをホスト１００に明示的に示すよう構成され、ＡＴＡインタフェースを介してホスト１００からデバイス識別情報、たとえばＡＣＳ−２記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト１００に返信するよう構成されてもよい。ＳＳＤ１０がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【０１９２】
このようにこの実施形態では、ＳＳＤに対して書き込みが不可能な場合、またはＳＳＤに対する書き込み動作が保証されない場合、ＳＳＤに対する書き込み動作がＳＳＤ内のデータの欠損やＳＳＤの故障を招く恐れがある場合などの状況下においても、ホスト１００とＳＳＤとの間に読み出し専用ブリッジ７００を接続するだけで、ホスト１００はＳＳＤ１０に対して読み出し動作を行うことができる。
【０１９３】
なお、読み出し専用ブリッジ７００を接続した状況下でホストの起動に用いられるシステムディスクとしては、ＳＳＤ１０でもよいし、予めシステムをインストールされているＳＳＤ１０とは別に用意されたＳＳＤまたはハードディスクドライブ（ＨＤＤ）でもよいし、ブートプログラムをインストールされたＤＶＤ−ＲＯＭ、ＣＤ−ＲＯＭ、ＵＳＢメモリなどでもよい。
【０１９４】
なお、読み出し専用ブリッジ７００が接続された場合においても、ホスト１００は、ＳＳＤのデータをバックアップするような機能を備えたＳＳＤ制御ツール１１０あるいはその他のソフトウェアを保持していてもよい。このバックアップ機能を備えたソフトウェアは、読み出し専用ブリッジ７００が接続されたことを検知すると、このソフトウェアのウィンドウ内に「読み出し専用ブリッジが接続されています。ＳＳＤのデータをバックアップしますか？」などのメッセージとバックアップの可否を選択する「ＯＫ」ボタン及び「キャンセル」ボタンが表示される。そして、「ＯＫ」ボタンがクリックされるとバックアップが開始され、「キャンセル」ボタンがクリックされるとバックアップは行われずにメッセージの表示が消える。「キャンセル」ボタンが押された場合でも、バックアップは後で行うことができる。
【０１９５】
なお、第１〜第４の実施形態においては、不揮発性メモリとしてＮＡＮＤメモリを採用した場合について述べたが、不揮発性メモリとして、ハードディスクドライブ（ＨＤＤ）などＮＡＮＤメモリ以外の不揮発性メモリに第１〜第４の実施形態を適用してもよい。また、不揮発性メモリとして、特開２０１１−１６１１９９号公報や特開２０１１−２９５８６号公報で示されているような３次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【０１９６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１９７】
１  コンピュータシステム、１０  ＳＳＤ、２０  ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤメモリ）、２１  フリーブロックテーブル、２２  バッドブロックテーブル、２３  アクティブブロックテーブル、２４  アクティブページテーブル、２５  リードオンリー（ＲＯ）モードフラグ、３０  インタフェースコントローラ、３１  ＲＷＩＦコントローラ、３２  ＲＯＩＦコントローラ、３３，３４  選択スイッチ、３８  インタフェースコントローラ、５０  メモリコントローラ、５７  バス、５８  ＥＣＣ訂正回路、９０  ＡＴＡインタフェース、１００  ホスト、１１０  ＳＳＤ制御ツール、１２０  インタフェースドライバ、１２１  ＲＷＩＦドライバ、１２２  ＲＯＩＦドライバ、１２３，１２４  選択スイッチ、１７０  インタフェースドライバ、７００  インタフェース中継デバイス（読み出し専用）、４００  ２次記憶装置。
【図１】
2012198869.tif 000003
【図２】
2012198869.tif 000004
【図３】
2012198869.tif 000005
【図４】
2012198869.tif 000006
【図５】
2012198869.tif 000007
【図６】
2012198869.tif 000008
【図７】
2012198869.tif 000009
【図８】
2012198869.tif 000010
【図９】
2012198869.tif 000011
【図１０】
2012198869.tif 000012
【図１１】
2012198869.tif 000013
【図１２】
2012198869.tif 000014
【図１３】
2012198869.tif 000015
【図１４】
2012198869.tif 000016
【図１５】
2012198869.tif 000017
【図１６】
2012198869.tif 000018
【図１７】
2012198869.tif 000019
【図１８】
2012198869.tif 000020
【図１９】
2012198869.tif 000021
【図２０】
2012198869.tif 000022
【図２１】
2012198869.tif 000023
【図２２】
2012198869.tif 000024
【図２３】
2012198869.tif 000025
【図２４】
2012198869.tif 000026
【図２５】
2012198869.tif 000027
【図２６】
2012198869.tif 000028
【図２７】
2012198869.tif 000029
【図２８】
2012198869.tif 000030
【図２９】
2012198869.tif 000031
【図３０】
2012198869.tif 000032
【図３１】
2012198869.tif 000033
【図３２】
2012198869.tif 000034
【図３３】
2012198869.tif 000035
【手続補正書】
【提出日】平成24年3月29日(2012.3.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホスト装置と、外部記憶装置とを備える情報処理装置において、
外部記憶装置は、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第１のインタフェースコントローラから第２のインタフェースコントローラへ前記インタフェースコントローラを切り替える第１の制御部と、
を備え、
前記ホスト装置は、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースドライバとが択一選択可能なインタフェースドライバと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える第２の制御部と、
を備え、
リードオンリーメモリとして認識すべきと判断された前記外部記憶装置が前記ホスト装置に接続されたとき、前記ホスト装置が前記第２のインタフェースドライバを選択し、前記外部記憶装置が前記第２のインタフェースコントローラを選択することで、前記ホスト装置は前記外部記憶装置にライト要求を発行することなく、前記外部記憶装置をリードオンリーメモリとして認識することを特徴とする情報処理装置。
【請求項２】
前記第１の制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２の制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１または請求項２に記載の情報処理装置。
【請求項４】
前記第１のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第２のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト動作のうちのリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項１乃至請求項３の何れか一つに記載の情報処理装置。
【請求項５】
前記第２のインタフェースコントローラは、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記第２の制御部は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項１乃至請求項４の何れか一つに記載の情報処理装置。
【請求項６】
前記第２の制御部は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップすることを特徴とする請求項１乃至請求項５の何れかに記載の情報処理装置。
【請求項７】
ホスト装置と、リード及びライト可能な不揮発性メモリを有する外部記憶装置とを備える情報処理装置の制御方法において、
前記外部記憶装置は、前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、前記ホスト装置と接続されるインタフェースコントローラを不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースコントローラから前記不揮発性メモリのリード動作のみをサポートする第２のインタフェースコントローラに切り替え、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記外部記憶装置を動作させるためのインタフェースドライバを前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバから前記不揮発性メモリのリード動作のみをサポートする第２のインタフェースドライバに切り替える
ことを特徴とする情報処理装置の制御方法。
【請求項８】
前記外部記憶装置は、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記ホスト装置は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項７に記載の情報処理装置の制御方法。
【請求項９】
前記ホスト装置は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項７または請求項８に記載の情報処理装置の制御方法。
【請求項１０】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースドライバとが択一選択可能なインタフェースドライバと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える制御部と、
を備え、
リードオンリーメモリとして認識すべきと判断された前記外部記憶装置が前記ホスト装置に接続されたとき、前記ホスト装置が前記第２のインタフェースドライバを選択することで、前記ホスト装置は前記外部記憶装置にライト要求を発行することなく、前記外部記憶装置をリードオンリーメモリとして認識することを特徴とするホスト装置。
【請求項１１】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１０に記載のホスト装置。
【請求項１２】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項１０または請求項１１に記載のホスト装置。
【請求項１３】
前記制御部は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項１０乃至請求項１２の何れか一つに記載のホスト装置。
【請求項１４】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースドライバとが択一選択可能なインタフェースコントローラを備えるホスト装置にロードされる制御プログラムであって、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替える制御部を備えることを特徴とする制御プログラム。
【請求項１５】
前記制御部は、外部記憶装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１４に記載の制御プログラム。
【請求項１６】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項１４に記載の制御プログラム。
【請求項１７】
前記制御部は、外部記憶装置に対し統計情報の送信を要求し、外部記憶装置から受信した統計情報と閾値との比較を行い、統計情報が閾値を超過しているとき、外部記憶装置をリードオンリーメモリとして認識すべきと判断することを特徴とする請求項１４乃至請求項１６の何れか一つに記載の制御プログラム。
【請求項１８】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第１のインタフェースドライバから第２のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項１４乃至請求項１７の何れか一つに記載の制御プログラム。
【請求項１９】
前記制御部は、前記インタフェースドライバを、第１のインタフェースドライバから第２のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項１４乃至請求項１８の何れか一つに記載の制御プログラム。
【請求項２０】
ホスト装置に接続される外部記憶装置であって、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第１のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第２のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第１のインタフェースコントローラから第２のインタフェースコントローラへ前記インタフェースコントローラを切り替える制御部と、
を備え、
前記リードオンリーモードへの移行条件が成立した前記外部記憶装置が前記ホスト装置に接続されたとき、前記外部記憶装置が前記第２のインタフェースコントローラを選択することで、前記ホスト装置は前記外部記憶装置にライト要求を発行することなく、前記外部記憶装置をリードオンリーメモリとして認識することを特徴とする外部記憶装置。
【請求項２１】
前記制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項２０に記載の外部記憶装置。
【請求項２２】
前記第１のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第２のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項２０または請求項２１に記載の外部記憶装置。
【請求項２３】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置において、
前記ホスト装置は、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部と、
を備え、
前記中継装置は、
前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、
前記制御部は、中継装置からの前記通知に応答して前記中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置。
【請求項２４】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置の制御方法において、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知し、
前記中継装置は、前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知し、
前記ホスト装置は、中継装置からの前記通知に応答して、前記中継装置を動作させるためのインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置の制御方法。
【請求項２５】
リード及びライト可能な不揮発性メモリを有する外部記憶装置と、
前記外部記憶装置から受信した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部を有するホスト装置と
の間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置であって、
前記ホスト装置の起動時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、前記通知部によるホスト装置への通知によって、ホスト装置において、中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用可能とすることを特徴とする中継装置。