情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法
【課題】信頼性が劣化した不揮発性メモリをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【解決手段】外部記憶装置は、不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、移行条件が成立したとき、不揮発性メモリのリード動作のみをサポートするインタフェースコントローラに切り替える。ホスト装置は、外部記憶装置から取得した情報に基づき不揮発性メモリをリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、不揮発性メモリのリード動作のみをサポートするインタフェースドライバに切り替える。
【解決手段】外部記憶装置は、不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、移行条件が成立したとき、不揮発性メモリのリード動作のみをサポートするインタフェースコントローラに切り替える。ホスト装置は、外部記憶装置から取得した情報に基づき不揮発性メモリをリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、不揮発性メモリのリード動作のみをサポートするインタフェースドライバに切り替える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法に関する。
【背景技術】
【0002】
コンピュータシステムに用いられる外部記憶装置として、NAND型フラッシュメモリなどの不揮発性半導体メモリを搭載したSSD(Solid State Drive)が注目されている。フラッシュメモリは、磁気ディスク装置に比べ、高速、軽量などの利点を有している。SSD内には、複数のフラッシュメモリチップ、ホスト装置からの要求に応じて各フラッシュメモリチップのリード/ライト制御を行うコントローラ、各フラッシュメモリチップとホスト装置との間でデータ転送を行うためのバッファメモリ、電源回路、ホスト装置に対する接続インタフェースなどを備えている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2009−217603号公報
【特許文献2】特開2008−090539号公報
【特許文献3】特開2002−351621号公報
【特許文献4】特開2006−18848号公報
【特許文献5】特開平07−78102号公報
【特許文献6】特開2004−151785号公報
【特許文献7】特開2005−190075号公報
【特許文献8】特開2008−90539号公報
【特許文献9】特開2001−75813号公報
【非特許文献】
【0004】
【非特許文献1】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
【非特許文献2】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“
【非特許文献3】S.M.A.R.T. attributes meaninghttp://www.ariolic.com/activesmart/smart-attributes/
【非特許文献4】S.M.A.R.T. attributes meaninghttp://www.siguardian.com/products/siguardian/on_line_help/s_m_a_r_t_attribute_meaning.html
【非特許文献5】Self-Monitoring, Analysis and Reporting Technology :: Attributeshttp://smartlinux.sourceforge.net/smart/attributes.php
【非特許文献6】SNIA, Solid State Storage Performance Test Specification Version0.9http://www.snia.org/
【非特許文献7】Serial ATA International Organization: Serial ATA Revision 3.1RC Clean DRAFT 2010.09.29 554頁〜558頁 13.9 Phy Event Counters (Optional)
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の一つの実施形態は、ライト動作不可能になった外部記憶装置をリード動作のみ可能なデバイスとして正常にホスト装置に認識させることが可能な情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一つの実施形態によれば、情報処理装置は、ホスト装置と、外部記憶装置とを備える。外部記憶装置は、リード及びライト可能な不揮発性メモリと、ホスト装置と接続されるインタフェースコントローラと、第1の制御部とを備える。インタフェースコントローラは、第1の制御部は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第1のインタフェースコントローラから第2のインタフェースコントローラへ前記インタフェースコントローラを切り替える。ホスト装置は、前記外部記憶装置を動作させるためのインタフェースドライバと、第2の制御部とを備える。第2の制御部は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える。
【図面の簡単な説明】
【0007】
【図1】図1は、第1の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図2】図2は、NANDメモリチップの内部構成例を示すブロック図である。
【図3】図3は、NANDメモリチップに含まれる1個のプレーンの構成例を示す回路図である。
【図4】図4は、4値データ記憶方式でのしきい値分布を示す図である。
【図5】図5は、SSD制御ツールをSSDに保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図6】図6は、SSD制御ツールをその他の外部記憶装置に保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図7】図7は、SSD制御ツールをWEBからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図8】図8は、SSD制御ツールを光学ドライブからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図9】図9は、SSD制御ツールをUSBメモリからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図10】図10は、コンピュータシステムの外観的構成を示す図である。
【図11】図11は、ホストの機能構成例を示すブロック図である。
【図12】図12は、ホストの階層的機能構成例を示すブロック図である。
【図13】図13は、SSDの管理情報を示す図である。
【図14】図14は、SSDの書き込み動作例を示すフローチャートである。
【図15】図15は、SSDのNANDメモリの整理の動作例を示すフローチャートである。
【図16】図16は、SSDの読み出し動作例を示すフローチャートである。
【図17】図17は、SSDのエラー発生時の動作例を示すフローチャートである。
【図18】図18は、SSDのリードオンリーモード移行条件が成立したときの動作例を示すフローチャートである。
【図19】図19は、統計情報の生の値とSSDの不良率の関係を示すグラフである。
【図20】図20は、統計情報の生の値とSSDの性能の関係を示すグラフである。
【図21】図21は、SSDの起動時の動作例を示すフローチャートである。
【図22】図22は、ホストの起動時の動作例を示すフローチャートである。
【図23】図23は、ホストの動作中の動作例を示すフローチャートである。
【図24】図24は、ホストでのドライブ表示画面例を示す図である。
【図25】図25は、ホストの起動時の他の動作例を示すフローチャートである。
【図26】図26は、統計情報X01〜X19、X23、X24の管理テーブルの一例を示す図である。
【図27】図27は、ホストの起動時の他の動作例を示すフローチャートである。
【図28】図28は、ホストの他の構成例を示すブロック図である。
【図29】図29は、図28に示すホストを採用した場合のホスト起動時の動作例を示すフローチャートである。
【図30】図30は、第2の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図31】図31は、第3の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図32】図32は、第4の実施形態のコンピュータシステムの外観的構成例を示す図である。
【図33】図33は、第4の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【発明を実施するための形態】
【0008】
不揮発性半導体メモリには、NAND型フラッシュメモリのように、データを記憶させる場合にブロック単位で一度データを消去してからその後に書き込みを行うもの、ページ単位で書き込み/読み出しを行うものなど、消去/書き込み/読み出しの単位が固定されているものがある。一方、パーソナルコンピュータなどのホスト機器がハードディスクをはじめとする2次記憶装置に対してデータの書き込み/読み出しを行う単位は、セクタと呼ばれる。セクタは、半導体記憶装置の消去/書き込み/読み出しの単位とは独立に定められる。例えば、不揮発性半導体メモリの消去/書き込み/読み出しの単位は、ホスト機器の書き込み/読み出しの単位よりも大きい場合がある。
【0009】
また、フラッシュメモリを用いてパーソナルコンピュータの二次記憶装置を構成する場合、誤りが多いなどの理由によって記憶領域として使用できなくなるブロック(不良ブロック、バッドブロック)や、読み出せなくなる領域(不良領域)などが生じる場合がある。このような不良ブロック数や不良領域数が上限値を超えた場合には、新たな不良ブロックや不良領域を登録することができないので、バッファメモリ(キャッシュメモリ)に格納されているデータとライト要求のあったデータの両方をフラッシュメモリへ書き込むことを保障できない。このため、不良ブロック数や不良領域数が所定値を超えた場合には、フラッシュメモリに空き容量があるにも関わらず、突然データの書き込みが不能になるといった問題があった。
【0010】
それに対する解決策として、NAND型フラッシュメモリで発生したバッドクラスタの数とバッドブロックの数を管理し、バッドクラスタ数、バッドブロック数に応じて、ホスト装置からNAND型フラッシュメモリへのデータの書き込みの際の動作モードを切り替えるという方法がある。クラスタとは、SSDでの論理アドレスとしての管理単位である。クラスタサイズは、セクタサイズの2以上の自然数倍であり、クラスタアドレスは、LBAの所定のビットから上位のビット列で構成される。
この方法においては、SSDの動作モードは、例えば以下の3つのモードに分かれる。
・WBモード(Write Back Mode):キャッシュメモリに一旦データを書き込み、所定の条件に基づきNAND型フラッシュメモリへの追い出しを行う通常の動作モード。
・WTモード:(Write Through Mode):一回のライト要求でキャッシュメモリに書き込まれたデータを、NAND型フラッシュメモリに都度書き込む動作モード。NAND型フラッシュメモリに都度書き込むことで、ホストから書き込まれたデータをできるだけ保障する。SSDは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、WTモードへと遷移する。
・ROモード(Read Only Mode):NAND型フラッシュメモリへの書き込みを伴う処理を全て禁ずるモード。ホストからの全てのライト要求に対してエラーを返し書き込みを行わないようにすることで、SSDが寿命に近づいたときに、ホストからすでに書き込まれていたデータをできるだけ保障できるようにしている。SSDは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、またはフリーブロックが不足となったとき、ROモードへと遷移する。
【0011】
WBモード及びWTモードにおいては、SSDはホストからリード要求とライト要求の両方を受け付けて処理をする。一方、ROモードにおいては、SSDはホストからリード要求を受け付けて処理をするが、ホストからのライト要求に対しては処理をせずエラーを返す。
【0012】
Windows(登録商標)などのオペレーティングシステム(OS)を搭載したホストに対してSSDが接続されたとき、ホストはSSDに対してライト要求を送信し、ライト要求が正常に処理されたとき、ホストはSSDを利用可能な外部記憶装置として認識する。
【0013】
一方、上記ROモードに遷移したSSDがWindows(登録商標)を搭載したホストに接続されたとき、ホストがSSDに対してライト要求を送信すると、SSDはホストにエラーを返すため、ホストはSSDを利用可能な外部記憶装置として認識しない場合がある。そのため、読み出しは可能なROモードのSSDをホストに接続しても、過去に記録したデータをSSDから読み出せない可能性があった。
【0014】
そこで、本実施形態においては、ROモードに移行したSSDをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【0015】
以下に添付図面を参照して、実施形態にかかる情報処理装置、外部記憶装置、ホスト装置、中継装置及び情報処理装置の制御方法を詳細に説明する。なお、これら実施形態により本発明が限定されるものではない。
【0016】
(第1の実施形態)
図1にコンピュータシステムの第1の実施形態の構成を示す。本コンピュータシステム1は、外部記憶装置としてのSSD10と、ホスト100と、SSD10とホスト100とを結ぶメモリインタフェースとしての例えばATAインタフェース90とから構成されている。外部記憶装置として、SSD10以外にハードディスクドライブやハイブリッドハードディスクドライブや、USBメモリや、SDカードなど、他の読み書き可能な不揮発性記憶装置であってもよい。ホスト100としては、パーソナルコンピュータ、スチルカメラあるいはビデオカメラなどの撮像装置などであってもよいし、タブレットコンピュータやスマートフォンやゲーム機器やカーナビゲーションシステムなどであってもよい。
【0017】
図1に示すように、SSD10は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下NANDメモリと略す)20と、ATAインタフェース90を介してホスト100との信号の送受信を行うインタフェースコントローラ30と、インタフェースコントローラ30とNANDメモリ20との中間バッファとして機能するキャシュメモリ(CM)40aを有する揮発性半導体メモリとしてのRAM(Random Access Memory)40と、NANDメモリ20及びRAM40の管理、制御、及びインタフェースコントローラ30の制御を司るメモリコントローラ50と、SSD10の起動時に初期化等を含む各種起動時処理を行うブートローダとしてのIPL(Initial Program Loader)55と、NANDメモリ20から読み出されたデータの誤り訂正処理を実行するECC訂正回路58と、これら構成要素を接続するバス57を備える。IPL55はメモリコントローラ50に含まれてもよい。ATAインタフェース90のかわりに、USB(Universal Serial Bus)インタフェースなど、その他のインタフェースを用いてもよい。
【0018】
RAM40としては、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase Change Random Access Memory)などを採用することができる。RAM40はメモリコントローラ50に含まれてもよい。
【0019】
NANDメモリ20は、ホスト100によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、RAM40で管理される管理情報をバックアップ用に記憶したりする。NANDメモリ20は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。NANDメモリ20は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、NANDメモリ20では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。
【0020】
図2にNANDメモリ20を構成するNANDメモリチップの内部構成例を示す。NANDメモリ20は、1以上の個数のNANDメモリチップ20080より成る。NANDメモリチップ20080は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。メモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。本実施形態では、個々のメモリセルが上位ページ及び下位ページを使用しての2bit/cellの4値記憶方式の書き込み方式である場合について説明するが、個々のメモリセルが単一ページを使用しての1bit/cellの2値記憶方式の書き込み方式、または上位ページ及び中位ページ及び下位ページを使用しての3bit/cellの8値記憶方式の書き込み方式である場合、あるいは4bit/cell以上の多値記憶方式の書き込み方式を採用する場合であっても本発明の本質は変わらない。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開2010−161199号公報や特開2011−29586号公報に記述されるような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【0021】
図2に示すように、NANDメモリチップ20080は、データを記憶するメモリセルをマトリックス状に配置してなるメモリセルアレイ20082を備えている。メモリセルアレイ20082は複数のビット線と複数のワード線と共通ソース線を含み、ビット線とワード線の交点に電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ20082には、ビット線を制御するためのビット制御回路20083、及びワード線電圧を制御するためのワード線制御回路20085が接続されている。すなわち、ビット線制御回路20083は、ビット線を介してメモリセルアレイ20082中のメモリセルのデータを読み出す一方、ビット線を介してメモリセルアレイ20082中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行う。
【0022】
ビット線制御回路20083には、カラムデコーダ20084、データ入出力バッファ20089及びデータ入出力端子20088が接続されている。メモリセルアレイ20082から読み出されたメモリセルのデータは、ビット線制御回路20083、データ入出力バッファ20089を介してデータ入出力端子20088から外部へ出力される。また、外部からデータ入出力端子20088に入力された書き込みデータは、データ入出力バッファ20089を介して、カラムデコーダ20084によってビット線制御回路20083に入力され、指定されたメモリセルへの書き込みが行われる。
【0023】
また、メモリセルアレイ20082、ビット線制御回路20083、カラムデコーダ20084、データ入出力バッファ20089、及びワード線制御回路20085は、制御回路20086に接続されている。制御回路20086は、制御信号入力端子20087に入力される制御信号に従い、メモリセルアレイ20082、ビット線制御回路20083、カラムデコーダ20084、データ入出力バッファ20089、及びワード線制御回路20085を制御するための制御信号及び制御電圧を発生させる。NANDメモリチップ20080のうち、メモリセルアレイ20082以外の回路部分をNANDコントローラ(NANDC)20081と呼ぶ。
【0024】
図3は、図2に示すメモリセルアレイ20082の構成を示している。メモリセルアレイ20082はNANDセル型メモリセルアレイであり、複数のNANDセルを含んで構成されている。1つのNANDセルは、直列接続されたメモリセルからなるメモリストリングMSと、その両端に接続される選択ゲートS1、S2とにより構成されている。選択ゲートS1はビット線BLに接続され、選択ゲートS2はソース線SRCに接続されている。同一のロウに配置されたメモリセルMCの制御ゲートはワード線WL0〜WLm-1に共通接続されている。また、第1の選択ゲートS1はセレクト線SGDに共通接続され、第2の選択ゲートS2はセレクト線SGSに共通接続されている。
【0025】
メモリセルアレイ20082は、1または複数のプレーンを含んでおり、プレーンは複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。
【0026】
また、1つのワード線に接続された複数のメモリセルは、1物理セクタを構成する。この物理セクタ毎にデータが書き込まれ、読み出される(この物理セクタは、後述するLBAの論理セクタとは無関係である)。1物理セクタには、2bit/cell書き込み方式(4値)の場合例えば2ページ分のデータが記憶される。一方、1bit/cell書き込み方式(2値)の場合は、1物理セクタに例えば1ページ分のデータが記憶され、3bit/cell書き込み方式(8値)の場合、1物理セクタに例えば3ページ分のデータが記憶される。
【0027】
リード動作、プログラムベリファイ動作及びプログラム動作時において、メモリコントローラ50から受信した物理アドレスに応じて、1本のワード線が選択され、1物理セクタが選択される。この物理セクタ内のページの切り替えは物理アドレスによって行われる。本実施形態ではNANDメモリ20は2bit/cell書き込み方式であり、メモリコントローラ50は物理セクタには上位ページ(Upper Page)と下位ページ(Lower Page)の2ページが物理ページとして割り当てられていると取扱い、それら全ページに対して物理アドレスが割り当てられている。
【0028】
2bit/cellの4値NANDメモリは、1つのメモリセルにおける閾値電圧が、4通りの分布を持ち得るように構成されている。図4は、4値NANDセル型フラッシュメモリのメモリセルに記憶される2ビットの4値データ(データ“11”、“01”、“10”、“00”)とメモリセルの閾値電圧分布との関係を示している。なお、図4において、VA1は、下位ページのみ書き込み済みで上位ページが未書き込みの物理セクタについて、2つのデータを読み出す場合に選択ワード線に印加される電圧であり、VA1Vは、A1への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。
【0029】
また、VA2、VB2、VC2は、下位ページと上位ページが書き込み済みの物理セクタについて、4つのデータを読み出す場合に選択ワード線に印加される電圧であり、VA2V、VB2V、VC2Vは、各閾値電圧分布への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。また、Vread1、Vread2は、データの読み出しを行う場合に、NANDセル中の非選択メモリセルに対し印加され、その保持データに拘わらず当該非選択メモリセルを導通させる読み出し電圧を示している。さらに、Vev1、Vev2は、メモリセルのデータを消去する場合において、その消去が完了したか否かを確認するためメモリセルに印加される消去ベリファイ電圧であり、負の値を有する。その大きさは、隣接メモリセルの干渉の影響を考慮して決定される。上述の各電圧の大小関係は、
Vev1<VA1<VA1V<Vread1
Vev2<VA2<VA2V<VB2<VB2V<VC2<VC2V<Vread2
である。
【0030】
なお、消去ベリファイ電圧Vev1、Vev2、Vev3は前述の通り負の値であるが、実際に消去ベリファイ動作においてメモリセルMCの制御ゲートに印加される電圧は、負の値ではなく、ゼロ又は正の値である。すなわち、実際の消去ベリファイ動作においては、メモリセルMCのバックゲートに正の電圧を与え、メモリセルMCの制御ゲートには、ゼロ又はバックゲート電圧より小さい正の値の電圧を印加している。換言すれば、消去ベリファイ電圧Vev1、Vev2、Vev3は、等価的に負の値を有する電圧である。
【0031】
ブロック消去後のメモリセルの閾値電圧分布ERは、その上限値も負の値であり、データ“11”が割り当てられる。下位ページおよび上位ページ書き込み状態のデータ“11”、“01”、“10”、“00”のメモリセルは、それぞれ正の閾値電圧分布ER2、A2、B2、C2を有し(A2、B2、C2の下限値も正の値である)、データ“01”の閾値電圧分布A2が最も電圧値が低く、データ“00”の閾値電圧分布C2が最も電圧値が高く、各種閾値電圧分布の電圧値はA2<B2<C2の関係を有する。下位ページ書き込みかつ上位ページ未書き込み状態のデータ“10”のメモリセルは、正の閾値電圧分布A1を有する(A1の下限値も正の値である)。なお、図4に示す閾値電圧分布はあくまでも一例であって、本発明はこれに限定されるものではない。例えば、図4では閾値電圧分布A2,B2,C2は全て正の閾値電圧分布であるとして説明したが、閾値電圧分布A2は負の電圧の分布であり、閾値電圧分布B2、C2が正の電圧の分布であるような場合も、本発明の範囲に含まれる。また、閾値電圧分布ER1・ER2は正の値であったとしても、本発明はこれに限定されるものではない。また、本実施形態ではER2、A2、B2、C2のデータの対応関係がそれぞれ“11”、“01”、“10”、“00”であるとしているが、たとえばそれぞれ“11”、“01” 、“00”、“10”であるような他の対応関係であってもよい。
【0032】
1つのメモリセルの2ビットデータは、下位ページデータと上位ページデータからなり、下位ページデータと上位ページデータは別々の書き込み動作、つまり、2回の書き込み動作により、メモリセルに書き込まれる。データを“*@”と標記するとき、*は上位ページデータを、@は下位ページデータを表している。
【0033】
まず、下位ページデータの書き込みを、図4の1段目〜2段目を参照して説明する。全てのメモリセルは、消去状態の閾値電圧分布ERを有し、データ“11”を記憶しているものとする。図14に示すように、下位ページデータの書き込みを行うと、メモリセルの閾値電圧分布ERは、下位ページデータの値(“1”、或いは“0”)に応じて、2つの閾値電圧分布(ER1、A1)に分けられる。下位ページデータの値が“1”の場合には、消去状態の閾値電圧分布ERを維持するのでER1=ERであるが、ER1>ERであってもよい。
【0034】
一方、下位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VA1Vを設定し、このベリファイ電圧VA1V以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“10”)に変化する。書き込み動作を所定回繰り返しても閾値電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
【0035】
次に、上位ページデータの書き込みを、図4の2段目〜3段目を参照して説明する。上位ページデータの書き込みは、チップの外部から入力される書き込みデータ(上位ページデータ)と、メモリセルに既に書き込まれている下位ページデータとに基づいて行われる。
【0036】
即ち、図4の2段目〜3段目に示すように、上位ページデータの値が“1”の場合には、メモリセルのトンネル酸化膜に高電界がかからないようにし、メモリセルの閾値電圧Vthの上昇を防止する。その結果、データ“11”(消去状態の閾値電圧分布ER1)のメモリセルは、データ“11”をそのまま維持し(ER2)、データ“10”(閾値電圧分布A1)のメモリセルは、データ“10”をそのまま維持する(B2)。ただし、各分布間の電圧マージンを確保するという点で、上述のベリファイ電圧VA1Vよりも大きい正のベリファイ電圧VB2Vを用いて閾値電圧分布の下限値を調整し、これにより閾値電圧分布の幅を狭めた閾値電圧分布B2を形成するのが望ましい。下限値調整を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
【0037】
一方、上位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VA2V、VC2Vを設定し、このベリファイ電圧VA1V以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、データ“11”(消去状態の閾値電圧分布ER1)のメモリセルは、閾値電圧分布A2のデータ“01”に変化し、データ“10”(A1)のメモリセルは、閾値電圧分布C2のデータ“00”に変化する。このとき、ベリファイ電圧VA2V、VC2Vが用いられて、閾値電圧分布A2、C2の下限値が調整される。書き込み動作を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
【0038】
一方、消去動作においては、消去ベリファイ電位Vevを設定し、このベリファイ電圧Vev以下の閾値電圧となるまで消去動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“00”)に変化する。消去動作を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する消去は「消去エラー」となる。
【0039】
以上が、一般的な4値記憶方式におけるデータ書き込み方式の一例である。3ビット以上の多ビット記憶方式においても、上記の動作に更に上位のページデータに応じ、閾値電圧分布を8通り以上に分割する動作が加わるのみであるので、基本的な動作は同様である。
【0040】
RAM40は、ホスト100とNANDメモリ20間でのデータ転送用キャッシュとして機能するキャッシュメモリ(CM)40aを有する。また、RAM40は、管理情報記憶用メモリ及び作業領域用メモリとして機能する。RAM40で管理される管理テーブルは、NANDメモリ20に記憶されている各種管理テーブルが起動時などに展開されたものであり、定期的あるいは電源断時にNANDメモリ20に退避保存される。
【0041】
メモリコントローラ50は、NANDメモリ20に記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト100からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト100−NANDメモリ20間のデータ転送制御、RAM40及びNANDメモリ20に記憶された各種管理テーブルの更新・管理などを実行する。
【0042】
ホスト100はSSD10に対し、リード要求またはライト要求を発行する際には、ATAインタフェース90を介して論理アドレスとしてのLBA(Logical Block Addressing)を入力する。LBAは、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。また、ホスト100はSSD10に対し、リード要求またはライト要求を発行する際には、LBAと併せて、リード要求またはライト要求の対象となるセクタサイズを入力する。
【0043】
インタフェースコントローラ30は、リード/ライトが可能な通常の動作モードで使用されるATAコントローラなどのリードライトモード用のインタフェースコントローラ(以下、RWIFコントローラと略す)31と、読み出しのみ許可されるリードオンリーモードにおいて使用される読み出し専用メディアの規格のコントローラである例えばATAPI(ATA Packet Interface)コントローラなどのリードオンリーモード用のインタフェースコントローラ(以下、ROIFコントローラと略す)32と、RWIFコントローラ31及びROIFコントローラ32のいずれかを選択可能な選択スイッチ33,34を含む。
【0044】
選択スイッチ33は、RWIFコントローラ31及びROIFコントローラ32のいずれか一方を排他的に選択してATAインタフェース90と接続し、選択スイッチ34は、RWIFコントローラ31及びROIFコントローラ32のいずれか一方を排他的に選択してバス57と接続する。RWIFコントローラ31の選択状態においては、選択スイッチ33はATAインタフェース90とRWIFコントローラ31を電気的接続状態にしており、スイッチ34はバス57とRWIFコントローラ31を電気的接続状態にしている。ROIFコントローラ32の選択状態においては、選択スイッチ33はATAインタフェース90とROIFコントローラ32を電気的接続状態にしており、スイッチ34はバス57とROIFコントローラ32を電気的接続状態にしている。
【0045】
RWIFコントローラ31はSSD10がATAデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、ATA/ATAPI Command Set-2 (ACS-2)で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を00hに、LBA(23:16)を00hとしてホスト100に出力することで、SSD10がATAデバイスであることをホスト100に通知することができる。ROIFコントローラ32はSSD10がATAPIデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト100に出力することで、SSD10がATAPIデバイスであることをホスト100に通知することができる。
【0046】
ROIFコントローラ32は、SSD10が書き込みコマンドをサポートせず読み出し専用であることをホスト100に通知するよう構成される。例えば、ATAインタフェース90を介してホスト100からINCITS Multi-Media Commands-6 (MMC-6)に採用されているコマンドGET CONFIGURATION(46h)を受信したとき、ROIFコントローラ32は、Random Writable(Feature Number=0020h)、Incremental Streaming Writable (Feature Number=0021h)、Write Once(Feature Number=0025h)などのFeaturesにおいて、ライト系機能は全て非サポートであることをホスト100に返信する。これにより、ホスト100側がOSとしてWindows(登録商標)などを使用している場合でも、SSD10が読み出し可能なデバイスとして認識させることが可能となる。なお、ROIFコントローラ32は、RWIFコントローラ31と同じく、SSD10がATAデバイスであることをホスト100に明示的に示すよう構成され、ATAインタフェース90を介してホスト100からデバイス識別情報、たとえばACS−2記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト100に返信するよう構成されてもよい。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0047】
なお、インタフェースコントローラ30及びそれに含まれる各種コントローラの機能は、すべてをLSIなどのハードウェアとして実装してもよいし、一部または全部をファームウェアなどのソフトウェアとして実装してもよい。ファームウェアは、SSD電源オフ時はNANDメモリ20上に保存されているが、ファームウェアとして実装する場合は、SSD電源起動時にRAM40上またはメモリコントローラ50上に、IPL55によって読み出されるようにすればよい。
【0048】
RWIFコントローラ31は、ホスト100からのリード要求、ライト要求、その他要求及びデータを受信し、受信した要求やデータをメモリコントローラ50に送信したり、メモリコントローラ50の制御によりRAM40にデータを送信したりする機能を持つ。また、RWIFコントローラ31は、ホスト100からデバイス識別情報の送信要求を受信したときは、自身が読み書き両方可能なデバイスであるという識別情報をホスト100に対して送信する。
【0049】
ROIFコントローラ32は、ホスト100からのリード要求、ライト要求を除くその他要求及びデータを受信し、受信した要求やデータをメモリコントローラ50に送信したり、メモリコントローラ50の制御によりRAM40にデータを送信したりする機能を持つ。また、ROIFコントローラ32は、ホスト100からデバイス識別情報の送信要求を受信したときは、自身が書き込みをサポートしていないというデバイス識別情報をホスト100に対して送信する。これにより、ホスト100はSSD10が書き込みを非サポートであると認識することになるので、ホスト100からSSD10にライト要求が送信されることはない。自身が書き込みをサポートしていないというデバイス識別情報をホスト100に対して送信後に、ホスト100からSSD10にライト要求が送信された場合には、ROIFコントローラ32がホスト100に対してエラーを返すようにしてもよい。ROIFコントローラ32は、NANDメモリ20の書き込み動作を伴わないコマンドに対しては、RWIFコントローラ31と同様の処理を行ってもよい。
【0050】
IPL55は、SSD10の電源投入時に起動され、NANDメモリ20、RAM40、メモリコントローラ50及びインタフェースコントローラ30の初期化処理を行う。その際、IPL55は、NANDメモリ20の管理情報をNANDメモリ20またはRAM40から読み出す。IPL55は、読み出した管理情報に基づきリードオンリーモード移行条件が成立するか否か、すなわちSSD10が通常の動作モードで使用される状態にあるかあるいはリードオンリーモードにおいて使用される状態にあるかを判断する。IPL55は、この判断の結果、通常モードであると判断した場合は、RWIFコントローラ31を選択するように選択スイッチ33、34を設定し、ROIFコントローラ32を非選択状態にする。一方、IPL55は、読み出した管理情報に基づきSSD10がリードオンリーモードにおいて使用される状態にあると判断すると、ROIFコントローラ32を選択するように選択スイッチ33,34を設定し、RWIFコントローラ31を非選択状態にする。リードオンリーモード移行条件については、後で詳述する。
【0051】
また、メモリコントローラ50は、リード/ライト可能な通常の状態でSSD10が動作中においても、リードオンリーモード状態へ移行させるためのリードオンリーモード移行条件が成立するか否かを判定しており、通常の状態でSSD10が動作中にリードオンリーモード移行条件が成立した場合は、後述のリードオンリーモード移行処理を実行する。このリードオンリーモード移行処理によって、結果的にインタフェースコントローラ30はROIFコントローラ32に切り替わる。
【0052】
つぎに、ホスト100の構成について説明する。ホスト100は、オペレーティングシステム(OS)150と、SSD制御ツール110と、SSD10用のインタフェースドライバ120を含む。インタフェースドライバ120は、SSD10がリード/ライト可能な通常の動作モードであるときに使用されるATAドライバなどのリードライトモード用のインタフェースドライバ(以下、RWIFドライバと略す)121と、SSD10がリードオンリーモードであるときに使用されるATAPIドライバの読み出し専用ドライバなどのリードオンリーモード用のインタフェースドライバ(以下、ROIFドライバと略す)122と、SSD10に適用されるドライバをRWIFドライバ121及びROIFドライバ122より選択する選択スイッチ123,124を含む。SSD制御ツール110は、選択スイッチ123,124を介して、SSD10に適用されるドライバをRWIFドライバ121またはROIFドライバ122のいずれか一方から選択するか、あるいはどちらも非選択状態にすることが可能である。ソフトウェア140は、SSD制御ツール110以外のソフトウェアであって、SSD10を使用するソフトウェアである。
【0053】
SSD制御ツール110は、例えば、図5に示すように、ホスト100が電源オフになっているときはSSD10のNANDメモリ20の領域にSSD制御ツール110Aとして格納されているが、ホスト100の起動時またはプログラム起動時に、NANDメモリ20から主メモリ202にロードされる。一方、ホスト100に複数の外部記憶装置が接続されている場合は、図6に示すように、SSD制御ツール110は、SSD制御ツール100Bとして、SSD10とは別の外部記憶装置300の領域に格納されており、ホスト100の起動時またはプログラム起動時に、外部記憶装置300から主メモリ202にロードされるようにしてもよい。特に、外部記憶装置300がOS150を格納するシステムドライブとして使用されており、SSD10が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブとしての外部記憶装置300にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブとしてのSSD10にはユーザデータを格納するドライブとして使用するというように、ドライブ10とドライブ300の役割を明確に分ける観点で、システムドライブとしての外部記憶装置300にSSD制御ツール110を格納することが望ましい。
【0054】
SSD制御ツール110のセットアップをユーザが行う労力を省く観点では、例えば図5や図6に示したように、SSD制御ツール110がSSD10や外部記憶装置300に格納された状態でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザがSSD制御ツールのインストールの可否を選択できるようにする観点、及びユーザに最新のSSD制御ツールを提供できるようにするという観点では、SSD制御ツールは、WEBからのダウンロード、またはDVD−ROMやUSBメモリなど外部記憶媒体からのインストールによりSSD10や外部記憶装置300に格納できるようにすることが望ましい。
【0055】
図7はSSD制御ツールをWEBからダウンロードする場合の一例を示すものである。図7において、SSD制御ツール110CはWEBサーバ内の記憶媒体400に格納されており、SSD制御ツール110Cはインターネットやローカルネットワークや無線LANなどのネットワークを介して、たとえばLANコントローラ208を経由してSSD10あるいは外部記憶装置300にダウンロードされる。
【0056】
図8はDVD−ROMやCD−ROMなど光学メディアからSSD制御ツールをインストールする場合の一例を示すものである。SSD制御ツール110DはDVD−ROMやCD−ROMなどの光学メディア500に格納されており、光学メディア500が光学ドライブ206にセットされることで、SSD制御ツール110Dは光学ドライブ206を介してSSD10あるいは外部記憶装置300にインストールされる。
【0057】
図9はUSBメモリからSSD制御ツールをインストールする場合の一例を示すものである。SSD制御ツール110EはUSBメモリ600に格納されており、USBメモリ600がUSBコントローラ209に接続されることで、SSD制御ツール110EはUSBコントローラ209を介してSSD10あるいは外部記憶装置300にインストールされる。USBメモリ600のかわりに、SDカードなどその他外部メモリであってもよいのはもちろんである。ユーザによる入手容易性の観点から、光学メディア500やUSBメモリ600はSSD10の出荷時に、付属品としてSSD10と一緒に梱包されていることが望ましい。一方、光学メディア500やUSBメモリ600は、ソフトウェア商品として単独に販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【0058】
選択スイッチ124は、RWIFドライバ121及びROIFドライバ122のいずれか一方を排他的に選択してATAインタフェース90と接続し、選択スイッチ123は、RWIFドライバ121及びROIFドライバ122のいずれか一方を排他的に選択してソフトウェア140と接続する。RWIFドライバ121の選択状態においては、選択スイッチ124はATAインタフェース90とRWIFドライバ121を接続状態にしており、スイッチ123はソフトウェア140とRWIFドライバ121を接続状態にしている。ROIFドライバ122の選択状態においては、選択スイッチ124はATAインタフェース90とROIFドライバ122を接続状態にしており、選択スイッチ123はソフトウェア140とROIFドライバ122を接続状態にしている。
【0059】
図10に、コンピュータシステム1の外観的構成を示す。図10は、一般的なデスクトップ型のパーソナルコンピュータの構成を示している。SSD10はATAインタフェース90としてのSATAケーブルを介してマザーボード130に物理的に接続され、マザーボード130上に実装されたサウスブリッジを介して、マザーボード130上に取り付けられたCPU(図示せず)に電気的に接続されている。SSD10は電源ケーブル131を介して電源回路132に接続されている。マザーボード130には、ディスプレイ133、キーボード134、マウス135などが接続されている。コンピュータシステムとしては、デスクトップ型に限らず、ラップトップ型やノート型のパーソナルコンピュータにも適用可能である。
【0060】
図11は、SSD10を搭載したホスト100のシステム構成例を示すものである。ホスト100は、CPU200、ノースブリッジ201、DRAMなどの主メモリ202、表示コントローラ203、ディスプレイ133、サウスブリッジ205、光学ドライブ206、BIOS−ROM207、LANコントローラ208、USBコントローラ209、キーボード134、マウス135等を備えている。
【0061】
CPU200は、コンピュータシステムの動作を制御するために設けられたプロセッサであり、SSD10から主メモリ202にロードされるオペレーティングシステム(OS)を実行する。更に、光学ドライブ206が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU200は、それらの処理を実行する。
【0062】
また、CPU200は、BIOS−ROM207に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、コンピュータシステム内のハードウェア制御のためのプログラムである。
【0063】
ノースブリッジ201は、CPU200のローカルバスと接続するブリッジデバイスである。ノースブリッジ201には、主メモリ202をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ201は、表示コントローラ203との通信などを実行する機能も有している。
【0064】
主メモリ202は、プログラムやデータを一時的に記憶し、CPU200のワークエリアとして機能する。主メモリ202は、例えばDRAMから構成される。
【0065】
ビデオコントローラ203は、コンピュータシステムのディスプレイ133を制御するビデオ再生コントローラである。
【0066】
サウスブリッジ205は、CPU200のローカルバスと接続するブリッジデバイスである。サウスブリッジ205は、各種ソフトウェア及びデータを格納する記憶装置であるSSD10を、ATAインタフェース90を介して制御する。
【0067】
コンピュータシステムでは、セクタ単位でSSD10へのアクセスを行う。ATAインタフェース90を介して、ライトコマンド(ライト要求)、リードコマンド(リード要求)、フラッシュコマンド等がSSD10に入力される。
【0068】
また、サウスブリッジ205は、BIOS−ROM207、光学ドライブ206、LANコントローラ208、USBコントローラ209をアクセス制御するための機能も有している。USBコントローラ209にキーボード134、マウス135が接続されている。
【0069】
図11において、OS150、SSD制御ツール110、RWIFドライバ121、ROIFドライバ122などを含むインタフェースドライバ120、ソフトウェア140は、コンピュータシステムの電源がオフの時はSSD10上に保持されており、ホストの電源オン時またはそれらの機能を呼び出した際は、SSD10から主メモリ202上にロードされる。主メモリ202上にロードされたインタフェースドライバ120はノースブリッジ201を介してCPU200に読み出され、読み出されたインタフェースドライバの情報をもとにCPU200がサウスブリッジ205を介してSSD10の制御を行う。
【0070】
図12に、コンピュータシステムの各種要素の階層構造を示す。SSD制御ツール110及びソフトウェア140は、通常はSSD10と直接通信せずに、OS150及びインタフェースドライバ120を経由してSSD10と通信する。SSD制御ツール110やソフトウェア140がSSD10に対しリード要求、ライト要求などの命令を送信する必要が生じた場合、SSD制御ツール110やソフトウェア140は、OS150にファイル単位のアクセス要求を送信する。OS150はOS150に内包されるファイル管理テーブルを参照し、アクセス要求のあったファイルに対応するSSD10の論理アドレス(LBA)を特定し、対応するLBAを含む命令をインタフェースドライバ120に送信する。インタフェースドライバ120はOS150からの命令を当該インタフェース固有の命令に変換し、SSDに送信する。
【0071】
SSD10から応答が返ってきた場合、インタフェースドライバ120が当該インタフェース固有の応答をOS150の命令に変換してOS150に送信する。OS150は変換後の応答がどのソフトウェアに対する応答かを特定し、特定したソフトウェアに対して応答を返す。
【0072】
一方、SSD制御ツール110は、インタフェースドライバ120に対してOS150を介さずに直接アクセスすることができる。SSD制御ツール110は、インタフェースドライバに直接アクセスすることで、インタフェースドライバのうち、RWIFドライバ121とROIFドライバ122のどちらが有効であるかを排他的に選択することができる。RWIFドライバ121が有効である場合は、RWIFドライバ121がOS150とSSD10との中継をし、ROIFドライバ122は何もしない。ROIFドライバ122が有効である場合は、ROIFドライバ122がOS150とSSD10との中継をし、RWIFドライバ121は何もしない。なお、SSD制御ツール110は、OS150を介して、RWIFドライバ121とROIFドライバ122を択一選択することとしてもよい。
【0073】
SSD制御ツール110は、ホスト起動時またはSSD接続時、SSDのデバイス識別情報をSSD10から取得する。このデバイス識別情報に基づきSSD10が読み書き可能なデバイスであるか書き込み非サポートのデバイスであるかを判定し、この判定結果に基づきインタフェースドライバ120の切り替え設定を行う。SSD10が読み書き可能なデバイスであると判定した場合は、RWIFドライバ121を有効とし、SSD10が書き込み非サポートのデバイスであると判定した場合は、ROIFドライバ122を有効とする。また、SSD制御ツール110は、ライト要求に対するSSD10からの応答がエラーであった場合、SSD10がリードオンリーモードに切り替わったと判断し、SSD10を再起動するとともに、インタフェースドライバ120をRWIFドライバ121からROIFドライバ122に切り替える。
【0074】
SSD10のデータ破壊や故障によるユーザデータ損失を防止する観点では、ROIFドライバ122は、SSD10に対する書き込みコマンドを一切送信しないよう構成されることが望ましい。しかし、ROIFドライバ122は、たとえばオペレーティングシステムのシステム情報など一部のデータをSSD10に書き込む必要がある場合は、例外としてSSD10に当該データを書き込むことを許可してもよいが、当該データはデータ量がNANDメモリ20の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいSSD10に対してデータを書き込んでしまうことを防止するために、ROIFドライバ122は、たとえばACS-2記載の35h WRITE DMA EXTや61h WRITE FPDMA QUEUEDのような、SSD10に対する通常の書き込みコマンドは一切送信せず、SSD10に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりSSD10に対する書き込みを許可するようにすることが望ましい。ROIFドライバ122の適用時(ROモード時)であっても例外的に特殊コマンドを用いた書き込みを行えるようにする場合、SSD10がROモードである場合であっても、前記した特殊コマンドをホスト100から受理して正常にデータ書き込み処理するようメモリコントローラ50およびROIFコントローラ32が構成される必要がある。
【0075】
図5にSSD10で使用する管理情報の構成を示す。この管理情報は、前述したように、NANDメモリ20で不揮発記憶されている。NANDメモリ20で記憶された管理情報がSSD10の起動時にRAM40に展開されて使用される。RAM40上の管理情報は、定期的あるいは電源断時にNANDメモリ20に退避保存される。RAM40がMRAMやFeRAMなどのような不揮発RAMである場合には、この管理情報はRAM40にのみ記憶されるようにしてもよく、この場合はこの管理情報はNANDメモリ20には記憶されない。
【0076】
図5に示すように、管理情報には、フリーブロックテーブル21と、バッドブロックテーブル22と、アクティブブロックテーブル23と、アクティブページテーブル24、リードオンリー(RO)モードフラグ25と、統計情報26を含む。
・フリーブロックテーブル(FBテーブル)21は、NANDメモリ20に書き込みを行うときに書き込み用に新規に割り当てることのできるNANDメモリの物理ブロック(フリーブロック:FB)のIDを管理する。また、物理ブロックID毎に消去回数を管理している。
・バッドブロックテーブル(BBテーブル)22は、誤りが多いなど記憶領域として使用できない物理ブロック(物理ブロック)としてのバッドブロック(BB)のIDを管理する。
・アクティブブロックテーブル(ABテーブル)23は、用途が割り当てられた物理ブロックであるアクティブブロック(AB)を管理する。ABテーブル23では、LBAと、アクティブブロック(AB)のIDとの対応関係を管理する。また、物理ブロックID毎に消去回数を管理している。
・アクティブページテーブル(APテーブル)24は、LBAと、用途が割り当てられた物理ブロックID及び物理ページIDとの対応関係を管理する。
・ROモードフラグ25は、出荷時及び通常時は0が書き込まれ、SSDがROモードとして動作するときに1が書き込まれる。
・統計情報26は、SSD10の信頼性に関わる種々のパラメータ(X01〜X24)を格納する。
【0077】
統計情報としては、バッドブロック数総計(統計情報X01)、消去回数総計(統計情報X02)、消去回数平均値(統計情報X03)、NANDメモリの書き込みエラー発生回数累積値(統計情報X04)、NANDメモリの消去エラー発生回数累積値(統計情報X05)、読み出し論理セクタ数総計(統計情報X06)、書き込み論理セクタ数総計(統計情報X07)、ECC訂正不能回数総計(統計情報X08)、nビット〜mビットECC訂正単位総計数(統計情報X09)、SATA通信のRエラー発生回数(統計情報X10)、SATA通信のエラー発生回数(統計情報X11)、RAM40のエラー発生回数(統計情報X12)、SSD10の使用時間総計(統計情報X13)、温度が推奨動作温度の最高値を上回った時間累計(統計情報X14)、温度が推奨動作温度の最低値を下回った時間累計(統計情報X15)、コマンドの応答時間最大値(統計情報X16)、コマンドの応答時間平均値(統計情報X17)、NANDメモリの応答時間最大値(統計情報X18)、NANDの応答時間平均値(統計情報X19)、現在温度(統計情報X20)、最高温度(統計情報X21)、最低温度(統計情報X22)、統計情報増加率(統計情報X23)、NAND整理失敗フラグ(統計情報X24)などが含まれる。
【0078】
バッドブロック数総計(統計情報X01)について説明する。SSD10内のNANDメモリ20の物理ブロックが一つバッドブロックとして追加されるごとに統計情報X01が1インクリメントされる。統計情報X01はSSD10の製造時(検査工程前)にゼロにリセットされていることが望ましく、検査工程でエラーが発生したり、閾値分布の分布間マージンが少ないことが判明したブロックは、あらかじめバッドブロックに加えておくことがさらに望ましい。統計情報X01は、統計情報26に格納せずBBテーブル22から直接計算してもよい。統計情報X01が大きいほど信頼性が悪化していることを示す。
【0079】
消去回数総計(統計情報X02)について説明する。統計情報X02はSSD10内のNANDメモリ20の全ブロックの消去回数累計値を示す。SSD10内のNANDメモリ20の物理ブロックが一つ消去されるごとに統計情報X02が1インクリメントされる。統計情報X02はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X02はSSD統計情報26に格納せずFBテーブル21、BBテーブル22、ABテーブル23から直接計算してもよい。統計情報X02が大きいほど信頼性が悪化していることを示す。
【0080】
消去回数平均値(統計情報X03)について説明する。統計情報X03はSSD10内のNANDメモリ20の全ブロックの消去回数の1ブロックあたり平均値を示す。管理情報を格納するブロックなど一部のブロックを統計情報X03の集計対象から除外してもよい。統計情報X03はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X03は統計情報26に格納せずFBテーブル21、BBテーブル22、ABテーブル23から直接計算してもよい。統計情報X03が大きいほど信頼性が悪化していることを示す。
【0081】
NANDメモリの書き込みエラー発生回数累積値(統計情報X04)について説明する。統計情報X04はSSD10内のNANDメモリ20で書き込みエラーが1書き込み単位で発生するごとに1加算される(ブロック単位で加算してもよい)。統計情報X04はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X04が大きいほど信頼性が悪化していることを示す。
【0082】
NANDメモリの消去エラー発生回数累積値(統計情報X05)について説明する。統計情報X05はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。SSD10内のNANDメモリ20で消去エラーが1ブロックで発生するごとに統計情報X05が1加算される。複数のブロックをまとめて消去単位とし、この消去単位1つで消去エラーが発生するごとに統計情報X05に1加算するようにしてもよい。統計情報X05が大きいほど信頼性が悪化していることを示す。
【0083】
読み出し論理セクタ数総計(統計情報X06))について説明する。統計情報X06は、インタフェースコントローラ30が読み出しデータとしてホスト装置100に送信したデータの論理セクタ数合計である。統計情報X06はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X06が大きいほど信頼性が悪化していることを示す。
【0084】
書き込み論理セクタ数総計(統計情報X07)について説明する。統計情報X07は、RWIFコントローラ31が書き込みデータとしてホスト装置100から受信したデータの論理セクタ数合計である。統計情報X07はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X07が大きいほど信頼性が悪化していることを示す。
【0085】
ECC訂正不能回数総計(統計情報X08)について説明する。ECC訂正回路58が行うECC訂正によりエラービットが修復できなかった場合に、1読み出し単位ごとに統計情報X08を1インクリメントする。メモリコントローラ50がNANDメモリ20からデータを読み出すと、メモリコントローラ50は読み出したデータをECC訂正回路58に送信して、データ誤りがある場合はECC訂正を行い、訂正したデータをインタフェースコントローラ30を介してホストに送信する。データ誤りがECC訂正回路58によって訂正できなかった場合は、メモリコントローラは統計情報X08をカウントアップするか、訂正できなかったデータ誤り量で統計情報X08をインクリメントする。エラー訂正できなかったエラービット数の推定値を加算するようにしてもよいし、エラー訂正できなかったブロックの数を加算するようにしてもよい。統計情報X08はSSD10の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X08が大きいほど信頼性が悪化していることを示す。
【0086】
nビット〜mビットECC訂正単位総計数(統計情報X09)について説明する。n,mは自然数で、0≦n≦m≦訂正可能最大ビット数である。ECC訂正回路58がECC訂正単位(たとえば物理ページ)に対してECC訂正を行った時、全エラービットが正常に修復され、かつ修復されたエラービット数がn以上m以下である場合、ECC訂正単位1つにつき「nビット〜mビットECC訂正単位総計数」を1加算する。ECC訂正により1訂正単位につき最大64ビット訂正可能である場合、たとえば、「1ビット〜8ビットECC訂正単位総計数」「9ビット〜16ビットECC訂正単位総計数」「17ビット〜24ビットECC訂正単位総計数」「25ビット〜32ビットECC訂正単位総計数」「33ビット〜40ビットECC訂正単位総計数」「41ビット〜48ビットECC訂正単位総計数」「49ビット〜56ビットECC訂正単位総計数」「57ビット〜64ビットECC訂正単位総計数」の8つのパラメータを用意し、ECC訂正が正常に行われた場合、1ECC訂正単位のECC訂正につきこれら8つのパラメータのうちいずれか1つに1がインクリメントされる(または訂正したデータ誤り量でインクリメントしてもよい)。統計情報X09はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X09が大きいほど信頼性が悪化していることを示す。
【0087】
SATA通信のRエラー発生回数(統計情報X10)について説明する。統計情報X10はSATA規格におけるRエラー(Reception Error, R_ERR)が1回発生するごとに1インクリメントされる。ホストとSSDの間で送受信されるフレームにたとえばCRCエラーなど何らかのエラーがあった場合、Rエラーとしてカウントされる。統計情報X10として、SATA規格のPhy Event Countersのカウンタのいずれかを採用してもよい。統計情報X10はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X10が大きいほど信頼性が悪化していることを示す。
【0088】
SATA通信のエラー発生回数(統計情報X11)について説明する。統計情報X11は、その他の(Rエラー以外の)SATA通信での異常が1回発生するごとに1インクリメントされる。たとえば、ATAインタフェース90やインタフェースコントローラ30やメモリコントローラ50がSATA Generation3規格として設計されているにも関わらず、実際にSSD10やホスト装置100との間でネゴシエーションされた通信規格がGeneration2のようなGeneration3より低速の通信規格であった場合、SATA通信上のエラーとみなし、統計情報X11を1インクリメントする。統計情報X11はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0089】
RAM40のエラー発生回数(統計情報X12)について説明する。たとえば、RAM40にECC回路やエラー検知回路を搭載している場合、ECC訂正できなかった旨の信号やエラー検知された旨の信号をRAM40からメモリコントローラ50が受け取った場合、統計情報X12を1インクリメントする。統計情報X12はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0090】
SSD10の使用時間総計(統計情報X13)について説明する。SSD10の電源がONになっている間、メモリコントローラ50がクロックをカウントしたり内部の時計回路から時刻情報を受信することで、経過時間をインクリメントする。あるいは、メモリコントローラ50がホスト装置100から定期的にホスト装置100の時刻情報を受信するようにし、その時刻情報の差分をインクリメントするようにしてもよい。統計情報X13は、SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0091】
温度が推奨動作温度の最高値を上回った時間累計(統計情報X14)について説明する。たとえば、SSD10の基板上、メモリコントローラ50内、NANDメモリ20内など、SSD10内に温度計が実装されている場合、メモリコントローラ50は温度計から定期的に温度情報を受信する。受信した温度が推奨動作温度(たとえば100℃)を上回った場合、メモリコントローラ50はクロックや内部の時計やホスト装置100から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0092】
温度が推奨動作温度の最低値を下回った時間累計(統計情報X15)について説明する。SSD10内に温度計が実装されている場合、メモリコントローラ50は温度計から定期的に温度情報を受信する。受信した温度が推奨動作温度(たとえば−40℃)を下回った場合、メモリコントローラ50はクロックや内部の時計やホスト装置100から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。統計情報X15は、SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0093】
コマンドの応答時間最大値(統計情報X16)について説明する。統計情報X16は、ホスト装置100からコマンドを受信してから、ホスト装置100へ応答するまで(またはコマンド実行完了するまで)に要した時間(またはクロック数)の最大値である。X16を上回る応答時間が発生した場合は、この応答時間をX16に上書きする。コマンドそれぞれに対して統計情報X16を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX16がゼロにリセットされていることが望ましい。なお、たとえばコマンドの応答時間としては、
・SSD10の読み出し応答時間:SSD10がホスト100よりリード要求を受信してから、読み出したデータをホスト100に対し送信完了するまでの時間
・SSD10の書き込み応答時間:SSD10がホスト100よりライト要求を受信してから、書き込み完了通知をホスト100に対し返すまでの時間。または、SSD10がホスト100よりライト要求を受信してから、ホスト100より書き込みデータを受信完了するまでの時間。
などがある。応答時間は、例えば、メモリコントローラ50の内部クロックをカウントすることによって計時すればよい。
【0094】
コマンドの応答時間平均値(統計情報X17)について説明する。統計情報X17は、ホスト装置100からコマンドを受信してから、ホスト装置100へ応答するまで(またはコマンド実行完了するまで)に要した時間(またはクロック数)の平均値である。たとえば応答時間リストを一定数RAM40に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報X17を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX17がゼロにリセットされていることが望ましい。
【0095】
NANDメモリの応答時間最大値(統計情報X18)について説明する。統計情報X18は、メモリコントローラ50がNANDメモリ20に命令してから応答を得る(またはコマンド実行完了通知を受信する)までに要した時間(またはクロック数)の最大値である。X18を上回る応答時間が発生した場合は、この応答時間をX18に上書きする。コマンドそれぞれに対して統計情報X18を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX18がゼロにリセットされていることが望ましい。なお、たとえばNANDメモリの応答時間としては、
・NANDメモリ20の読み出し応答時間:メモリコントローラ50がNANDメモリ20に対しリード要求を発行してから、NANDメモリ20からのデータ読み出しが完了するまでの時間
・NANDメモリ20の書き込み応答時間:メモリコントローラ50がNANDメモリ20に対しライト要求を発行してから、NANDメモリ20へのデータ書き込みが完了するまでの時間
・NANDメモリ20の消去応答時間:メモリコントローラ50がNANDメモリ20に対し消去命令を発行してから、NANDメモリ20の消去が完了するまでの時間
などがある。応答時間は、例えば、メモリコントローラ50の内部クロックをカウントすることによって計時すればよい。
【0096】
NANDメモリの応答時間平均値(統計情報X19)について説明する。統計情報X19は、メモリコントローラ50がNANDメモリ20に命令してから応答を得る(またはコマンド実行完了通知を受信する)までに要した時間(またはクロック数)の平均値である。たとえば応答時間リストを一定数RAM40に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報X19を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX19がゼロにリセットされていることが望ましい。
【0097】
現在温度(統計情報X20)について説明する。SSD10内に温度計が実装されている場合、メモリコントローラ50は温度計から定期的に温度情報を受信する。メモリコントローラ50は温度計から最後に受信した温度を現在温度として統計情報X20に保持する。この値が極端に大きいと(たとえば85℃以上)、SSD10の信頼性に悪影響があり、また、この温度が極端に小さいと(たとえば−10℃以下)、SSD10の信頼性に悪影響があると判断する。
【0098】
最高温度(統計情報X21)について説明する。メモリコントローラ50は、現在温度X20の最大値を最高温度として統計情報X21に保持する。この値が極端に大きいと(たとえば85℃以上)、SSD10の信頼性に悪影響がある。メモリコントローラ50は、X21よりも大きい現在温度を温度計から受信した時、X21を現在温度に書き換える。SSD10製造時(検査工程前)またはSSD10出荷時にはX21がSSD10の動作温度にくらべて十分に小さい温度(たとえば−40℃)にリセットされていることが望ましい。
【0099】
最低温度(統計情報X22)について説明する。メモリコントローラ50は、現在温度X20の最小値を最低温度として統計情報X22に保持する。この値が極端に小さいと(たとえば−40℃以下)、SSD10の信頼性に悪影響がある。メモリコントローラ50は、X22よりも小さい現在温度を温度計から受信した時、X22を現在温度に書き換える。SSD10製造時(検査工程前)またはSSD10出荷時にはX22がSSD10の動作温度にくらべて十分に大きい温度(たとえば120℃)にリセットされていることが望ましい。
【0100】
統計情報増加率(統計情報X23)について説明する。統計情報X01〜X19の最新でない情報(たとえば一定時刻前や、SSD10をパワーオンした時の値や前回SSD10をパワーダウンしたときの値など)を別途保持しておく。統計情報X23は、例えば、下記のいずれかで定義される。
統計情報増加率=(最新統計情報)―(旧情報)
統計情報増加率=((最新統計情報)―(旧情報))/(旧情報を取得してからの経過時間)
統計情報増加率=((最新統計情報)―(旧情報))/(旧情報を取得してからのNANDアクセス回数)
SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0101】
NAND整理失敗フラグ(統計情報X24)について説明する。統計情報X24が1になっていると、NAND整理によっても動作に十分な数のフリーブロック数を確保できないことになる。SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0102】
統計情報26としては、上述したすべてのパラメータを格納してもよいし、これらの一部あるいはどれか一つのみを格納してもよい。統計情報26は最新情報をRAM40上に保持し、定期的にNANDメモリ20にバックアップすることが望ましい。一方、RAM40やNANDメモリ20のどちらか一方にのみ保存するようにしてもよいし、当該統計情報をホスト装置100に送信して、ホスト装置100やホスト装置100に接続された記憶装置に保存するようにしてもよい。
【0103】
つぎに、図14を用いてSSD10での書き込み動作を説明する。SSD10がホスト100からライト要求を受信した場合は(ステップS100)、メモリコントローラ50はRAM40上のフリーブロックテーブル21を検索し(ステップS101)、現在のフリーブロック数を取得する。そして、メモリコントローラ50は、フリーブロック数が所定の閾値より少ない場合は(ステップS102)、後述する「NAND整理」を行い(ステップS120)、フリーブロック数が所定の閾値より多い場合は(ステップS102)、フリーブロックテーブル21から新たにフリーブロックを確保し、確保したフリーブロックの物理ブロックIDを取得する。
【0104】
そして、メモリコントローラ50は、取得したフリーブロックに対して書き込み動作を行い(ステップS103)、さらにホスト100から受信したLBA及び物理ブロックID及び当該物理ブロックの消去回数をアクティブブロックテーブル23に追加し、さらにLBA、物理ブロックID及び物理ページIDをアクティブページテーブル24に追加し(ステップS104)、書き込みを行った物理ブロックをフリーブロックテーブル21から削除する(ステップS105)。メモリコントローラ50は以上の書き込み処理の内容を統計情報26に反映する。
【0105】
つぎに、図15を用いてSSD10でのNAND整理(図14:ステップS120)の動作例を説明する。物理ブロックに含まれる全ページのうちアクティブページテーブル24に登録されているページ(有効ページ)はLBAに対応付けられている。一方、物理ブロックに含まれている全てのページが有効ページであるとは限らず、有効ページに該当しないページ(無効ページ)はLBAに対応付けられていない。有効ページとは最新のデータを記憶しているページであり、無効ページとは同一LBAのデータが他の場所に書きこまれ、参照されることがなくなったページである。物理ブロックは無効ページの分だけデータに空きがあることになり、有効ページのデータを集めて違うブロックに書き直すNAND整理を実行することでフリーブロックを確保することができる。
【0106】
まず、行番号i=0にし、空き領域累計数S=0にする(ステップS121)。メモリコントローラ50は、アクティブブロックテーブル23の先頭行(i=0)を読み出し、先頭行の物理ブロックID(現在物理ブロックID)を取得する(ステップS122)。つぎに、アクティブページテーブル24を読み出し、アクティブページテーブル24における現在物理ブロックIDに対応する有効ページのIDをすべて取得する(ステップS123)。そして、メモリコントローラ50は、取得した有効ページIDの個数分のサイズを物理ブロックのサイズから減算することで、現在物理ブロックのうち無効ページのサイズvを求め(ステップS124)、v>0であるときは(ステップS125)、現在物理ブロックをNAND整理対象ブロックリストに加える(ステップS127)。さらに、メモリコントローラ50は、空き領域累計数Sに現在物理ブロックの無効ページサイズvを加算し、空き領域累計数Sを更新する(ステップS128)。
【0107】
ステップS125でv=0である場合、あるいはステップS125で空き領域累計数Sが物理ブロックサイズに到達していない場合は、メモリコントローラ50は、列番号iを+1し(ステップS126)、アクティブブロックテーブル23の次の行(i=1)を読み出し、次の行の物理ブロックID(現在物理ブロックID)を取得する(ステップS122)。以下同様にして、ステップS123〜S128の手順を実行する。そして、ステップS129で空き領域累計数Sが物理ブロックサイズに到達するまで、ステップS122〜S129の手順を繰り返す。
【0108】
そして、ステップS129において、これまでに取得した無効ページのサイズ総量Sが物理ブロックのサイズより大きくなった場合は、メモリコントローラ50は、NAND整理対象ブロックリスト上の全有効ページのデータをNANDメモリ20から読み出してRAM40に書き込み(ステップS130)、さらに、NAND整理対象ブロックリスト上の全物理ブロックに対して消去処理を行い(ステップS131)、消去処理を行った全物理ブロックをアクティブブロックテーブル23から削除してフリーブロックテーブル21に追加し(その際、消去回数をインクリメントする)、読み出した全ページをアクティブページテーブル24から削除する(ステップS132)。そして、メモリコントローラ50は、フリーブロックテーブル21から新たなフリーブロックを取得し、取得したフリーブロックに対しRAM40に書き込んだデータを書き込み(ステップS133)、データを書き込んだフリーブロックの物理ブロックID、対応するLBA及び当該ブロックの消去回数をアクティブブロックテーブル23に追加し、さらにデータを書き込んだページ及び対応するLBAをアクティブページテーブル24に追加し(ステップS134)、データが書き込まれたブロックのブロックIDをフリーブロックテーブル21から削除する(ステップS135)。メモリコントローラ50は上記NAND整理の処理内容を統計情報26に反映する。なお、ステップS131の消去処理はステップS120のNAND整理内では行わずに、ステップS103の書き込み動作直前におこなって消去回数をインクリメントするようにしてもよい。
【0109】
このようなNAND整理により、書き込みに対し十分な数のフリーブロックを確保できるのが通常である。NAND整理によっても、書き込みに対し十分な数のフリーブロックを確保できなかった場合は(ステップS136)、後述する「ROモード移行処理」を行う(ステップS137)。
【0110】
上記NAND整理は、ホスト100からライト要求を受信した時だけでなく、ホストから最後に命令を受信してから所定時間経過した時、またはホスト100からスタンバイやアイドル状態に移行するコマンドを受信した時などに実行してもよい。
【0111】
つぎに、図16を用いてSSD10での読み出し処理について説明する。SSD10がホスト100からリード要求を受信した場合は(ステップS140)、メモリコントローラ50は、アクティブブロックテーブル23を検索し(ステップS141)、ホスト100から受信したLBAに対応する物理ブロックIDがアクティブブロックテーブル23に存在するか否かを調べる(ステップS142)。アクティブブロックテーブル23に物理ブロックIDが存在する場合は、メモリコントローラ50は、アクティブページテーブル24の該当物理ブロックIDに含まれる物理ページIDを取得し(ステップS144)、取得した物理ページIDに対応する物理ページからデータを読み出し(ステップS145)、読み出したデータを、RAM40を介してホスト100へ送信する(ステップS146)。メモリコントローラ50は以上の読み出し処理の内容を統計情報26に反映する。
【0112】
ステップS142において、ホスト100から受信したLBAに対応する物理ブロックIDがアクティブブロックテーブル23上に存在しない場合、メモリコントローラ50は、NANDメモリ20からの読み出し動作を行わずに、例えば全ビットが‘0’であるデータを、ホスト100からの要求に対応するデータ長分、ホスト100に送信する(ステップS143)。
【0113】
次に、図17を用いてSSD10でのエラー処理について説明する。ホスト100からのライト要求やリード要求に対する処理は通常は上記のように行われるが、NANDメモリ20に対する書き込み動作(プログラム動作)で書き込みエラーが発生する場合、NANDメモリ20に対する消去動作で消去エラーが発生する場合、NANDメモリ20に対する読み出し動作の際にECC(Error Correcting Code)エラー(誤り訂正処理の失敗)が生じる場合などがあり、これらに対する例外処理が必要となる。
【0114】
メモリコントローラ50は、上記の何れかのエラーが発生した場合(ステップS150)、エラーが発生した物理ブロックをバッドブロックテーブル22に追加し(ステップS151)、エラーが発生した物理ブロックをアクティブブロックテーブル23及びフリーブロックテーブル21から削除することで(ステップS152)、以後は、エラーが発生した物理ブロックにアクセスできないようにする。この際、エラーが発生した物理ブロックのデータを別の物理ブロックにコピーしてもよい。メモリコントローラ50は上記のエラー処理の内容を統計情報26に反映する。これらエラー処理の一例を、読み出し処理、書き込み処理、NAND整理処理の解説において紹介したが、このエラー処理はこれらの例に限らず、NANDメモリ20に対する全ての読み出し処理、書き込み処理、消去処理に対して適用可能であることは言うまでもない。
【0115】
SSD10を利用しているうちに、例えば、NANDメモリ20の各ブロックの信頼性が劣化していき、バッドブロックの数が増えていき、フリーブロック数とアクティブブロック数の和が減っていくことになる。さらにSSD10を使用していると、NAND整理を行っても、書き込み処理を行うのに十分なフリーブロック数を確保できなくなり、これがSSD10の寿命である。このような場合に、ROモード移行条件が成立したと判断して、ROモード移行処理を行う。
【0116】
次に、図18を用いてSSD10でのROモード移行処理について説明する。SSD10が動作中、メモリコントローラ50は、統計情報26を監視することにより、ROモード移行条件が成立したか否かを判定している(ステップS160)。ROモード移行のクライテリアとしてのRMAXとして、たとえば、
RMAX=信頼性保証できる統計情報の値の上限値
を採用する。
【0117】
RMAXは各統計情報X01〜X19、X23、X24に対して、それぞれ別の値を採用することができる。RMAXは、たとえば図19に示すように、統計情報の生の値(Raw Data)と、SSD10の不良率の関係を開発段階に導き出し、不良率が許容値(たとえば100ppm)を超える時の統計情報の生の値をRMAXとして採用することが望ましい。不良率として、SSD10の不良率の代わりにSSD10に書き込まれたデータの不良率や、NANDメモリ20の不良率や、NANDメモリ20のメモリセルの不良率などその他不良率を採用してもよい。たとえば、SSD10の開発段階で、多数個(たとえば100個)の試験用SSD10群に対して高温で書き込み動作を繰り返しながら、書き込んだデータが一定時間以上正しく記憶され続けるかを検証する摩耗試験を行い、同時に統計情報をモニタしつづけ、不良率が一定割合に到達する時点での前記統計情報の生の値をRMAXとして採用すればよい。たとえば、摩耗したSSD10のLBA全域に対して高温状態(たとえば75℃)で初期条件としてデータ(たとえばランダムデータ)を書き込み、高温状態(たとえば85℃)である時間以上放置して、その後SSD10の温度を下げ(たとえば25℃)、SSD10のLBA全域に対して読み出し動作を行い、読み出したデータがECC訂正できない場合(またはECC訂正できないデータが一定数以上の場合、または読み出したデータと初期条件で書き込んだデータが一致しない場合、または読み出しができなかった場合)、これをSSD10の不良として定義し、不良したSSD10の数を、試験を行ったSSD10の数で割った値を不良率として採用すればよい。この不良率が、前述した許容できる不良率を統計的に有意に下回る統計情報の生の値をRMAXとして採用すればよい。RMAXにある程度マージンをもたせて、
RMAX´=RMAX−マージン
としたRMAX´をRMAXとして採用してもよい。
【0118】
また、RMAXは開発時の設計シミュレーションによって求めてもよい。たとえば、設計シミュレーションにより、SSD10の不良率などの不良率がある一定値以上となるような統計情報の値を求めておき、その値をRMAXとして採用する。
【0119】
また、RMAXは、図20に示すように、SSD10の性能(読み出し性能や書き込み性能など)が所定値以下となる統計情報の値をSSD10の測定やシミュレーションにより特定し、これをRMAXとして採用してもよい。たとえば、NANDメモリの信頼性が悪化するとNANDメモリのメモリセルから読み出されるデータが誤っている確率が増大するため、データ読み出し時のECC訂正に要する時間が増大し、SSD10の信頼性とSSD10の読み出し性能との間には強い相関が現れる可能性がある。たとえば、シーケンシャルな読み出し性能の測定として、以下の性能測定を行う。
1.SSD10に対し、ACS-2のF4h SECURITY ERASE UNIT (Normal Erase)を行う。
2.SSD10のLBA全域に対し、データ(たとえばランダムなデータ)をシーケンシャルに書き込む。
3.全LBAに対してシーケンシャルに読み出しを行い、単位時間あたりに読み出されたデータ量平均値(単位MiB/s)を求める(読み出し速度)。その他、性能情報(たとえば性能速度)の測定には、非特許文献6に記述されるような規格に従い測定を行ってもよい。
【0120】
このようにして、図20に示すように、性能情報の統計情報依存性を求め、たとえばSSD10の出荷時のシーケンシャルな読み出し速度期待値が400MiB/sであって、公開スペックの規定などにより許容できる最低性能が300MiBである場合、読み出し速度期待値が300MiBとなるような統計情報の値を求め、これをRMAXとして採用すればよい。
【0121】
このように、RMAXは開発者が任意に定めることができ、上記に示した以外の方法や基準によっても定めることが可能である。
【0122】
メモリコントローラ50はRMAXと統計情報の値(X01〜X19、X23、X24のいずれか)を比較し、統計情報の値>RMAX、または統計情報の値≧RMAXとなった時、SSD10が寿命に到達しROモードに移行すべきと判断する(ステップS160:Yes)。たとえば、NAND整理失敗フラグ(統計情報X24)の場合、これが1である場合にSSD10が寿命に到達しROモードに移行すべきと判断する。たとえば、バッドブロック数総計(統計情報X01)の場合、これが所定値を上回った場合にSSD10が寿命に到達しROモードに移行すべきと判断する。
【0123】
メモリコントローラ50は統計情報の値(X01〜X19、X23、X24のいずれか)のうち複数個をそれぞれRMAXと比較し、いずれか一つがRMAX以上である場合にROモードに移行すべきと判断するようにしてもよい。
【0124】
上記のようにして、メモリコントローラ50はSSD10が寿命に到達したか否か(SSD10が異常状態であるか否か)を判定し、SSD10が寿命に到達したと判定された場合(SSD10が異常状態であると判定された場合)、後で詳述するROモード移行処理を行う(ステップS160:Yes)。
【0125】
なお、たとえば統計情報として現在温度X20、最高温度X21を採用する場合、たとえばRMAXとしてRMAX=85℃を採用し、統計情報の値>RMAX、または統計情報の値≧RMAXのようなたとえば動作保証外の温度になった時、SSD10が異常状態でROモードに移行すべきと判断し(ステップS160:Yes)、その後、統計情報の値≦RMAX−MAXマージン、または統計情報の値<RMAX−MAXマージンとなって正常温度にもどったとき、SSD10が正常状態にもどったためROモードから通常モードに移行すべきと判断することが望ましい(ステップS160:No)。MAXマージンはゼロ以上の値であるが、ROモードと通常モードとの切り替えが頻繁に発生することを防止するために、MAXマージンはゼロより大きい値とすることが望ましい(たとえばMAXマージン=5℃)。
【0126】
本実施形態において紹介した統計情報X01〜X19、X23、X24以外にも、統計情報は種々の形態をとりうるが、本発明はこれらに対しても適用可能である。また、X01〜X19、X23、X24と不良率の関係には正の相関関係が存在するが、不良率と負の相関関係が存在する統計情報に対しても本発明は適用可能である(たとえば、SSD10が出荷後に体験した最低温度など)。その場合、RMAXの代わりに、信頼性保証できる下限値RMINを採用し、統計情報がRMINを下回った場合にSSD10が寿命に到達したと判断し、ROモードに移行すればよい。
【0127】
特に、たとえば統計情報として現在温度X20、最低温度X22を採用する場合、たとえばRMINとしてRMIN=−10℃を採用し、統計情報の値<RMIN、または統計情報の値≦RMINのようなたとえば動作保証外の温度になった時、SSD10が異常状態でROモードに移行すべきと判断し(ステップS160:Yes)、その後、統計情報の値≧RMIN+MINマージン、または統計情報の値>RMIN+MINマージンとなって正常温度にもどったとき、SSD10が正常状態にもどったためROモードから通常モードに移行すべきと判断することが望ましい(ステップS160:No)。MINマージンはゼロ以上の値であるが、ROモードと通常モードとの切り替えが頻繁に発生することを防止するために、MINマージンはゼロより大きい値とすることが望ましい(たとえばMINマージン=5℃)。
【0128】
SSD10が寿命に到達していなくても、統計情報があらかじめ定められたRMAXを上回ったり、あるいは通常動作ではありえない異常値を示した場合などにおいても、ROモード移行処理を行うことが望ましい。
【0129】
ROモード移行条件が成立すると(ステップS160:Yes)、つぎのようなROモード移行処理が開始される。まず、メモリコントローラ50は、現在行われているNANDメモリ20に対する書き込み処理を全てキャンセルし(ステップS161)、ホスト100から受信した全てのライト要求に対してエラーを返し、ホスト100から受信したライト要求のキュー全てを削除するのが望ましい(ステップS162)。つぎに、メモリコントローラ50は、NANDメモリ20上の管理情報におけるROモードフラグ25に1を書き込む(ステップS163)。この時、RAM40上の管理情報のうち、ROモードフラグ25以外のテーブルを全てNANDメモリ20上の管理情報に反映させてもよい。その後、SSD10は電源を遮断されるかリセットされるまで、ホスト100から受信したライト要求の全てに対してエラーを返す(ステップS164、S165)。
【0130】
つぎに、図21を用いてSSD10の起動処理について説明する。SSD10が起動すると、IPL55がNANDメモリ20上の管理情報におけるROモードフラグ25を読み出し(ステップS170)、ROモードフラグ25を判別する(ステップS171)。ROモードフラグ25が0である場合は(ステップS171)、IPL55は、通常モードにすべく、インタフェースコントローラ30のRWIFコントローラ31を有効にし(ステップS172)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS173)。
【0131】
一方、ROモードフラグ25が1である場合は、IPL55は、ROモードにすべく、ROIFコントローラ32を有効にし(ステップS174)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS175)。ROモードにおいては、SSD10は書き込みをサポートしない読み出し専用デバイスとして振る舞う。なお、ROモードに移行後は、SSD10は読み出し動作のみを行えばよいので、読み出し動作の速度が速くなるように管理テーブル内の情報を再配置するようにしてもよい。
【0132】
つぎに、ホスト100側の動作について説明する。まず、図22を用いてホスト100の起動時の動作を説明する。ホスト100が起動すると、ホスト100はSSD制御ツール110を起動する(ステップS201)。OS150がWindows(登録商標)である場合は、SSD制御ツール110を例えばスタートアップ登録したりあるいはサービスプログラム登録したりすることで、SSD制御ツール110を起動時の常駐プログラムに設定しておくことで、SSD制御ツール110を自動起動させることが可能となる。また、ホスト100の起動に用いられるシステムディスクとしては、SSD10でもよいし、予めシステムをインストールされているSSD10とは別に用意されたSSDまたはハードディスクドライブ(HDD)でもよいし、ブートプログラムをインストールされたDVD−ROM、CD−ROM、USBメモリなどでもよい。
【0133】
SSD制御ツール110が起動されると、SSD制御ツールはSSD10のデバイス情報を取得するべく、SSD100に対しデバイス識別情報の送信要求を送信する。前述したように、SSD10において、RWIFコントローラ31が有効である場合、SSD制御ツール110は、たとえばACS-2で記述されているDevice SignatureにおけるLBA(7:0)やLBA(15:8)を通じてSSD10がATAデバイスであることを認識でき、RWIFコントローラ31は、ホスト100からたとえばACS−2記載のECh IDENTIFY DEVICEなどのデバイス識別情報の送信要求を受信したときは、自身が読み書き両方可能なデバイスであるという識別情報をホスト100に対して送信する。また、SSD10において、ROIFコントローラ32が有効である場合、SSD制御ツール110は、たとえばACS-2で記述されているDevice SignatureにおけるLBA(7:0)やLBA(15:8)を通じてSSD10がATAPIデバイスであることを認識でき、ROIFコントローラ32は、ホスト100からたとえばMMC-6記載の46h GET CONFIGURATIONなどのデバイス識別情報の送信要求を受信したときは、自身が書き込みをサポートしていないというデバイス識別情報をホスト100に対して送信する。このようにして、SSD制御ツール110は、SSD10からデバイス識別情報を取得する(ステップS202)。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0134】
SSD制御ツール110は、SSD10から返ってきた情報が、書き込み非サポートのデバイスである場合は(ステップS203)、SSD10をROモードとして動作させるべく、選択スイッチ123,124を切り替え設定して、RWIFドライバ121を無効にし(ステップS206)、ROIFドライバ122を有効にする(ステップS207)。一方、SSD10から返ってきた情報が、書き込み非サポートのデバイスでない場合(ステップS203)、SSD制御ツール110は、SSD10を通常モードとして動作させるべく、選択スイッチ123,124を切り替え設定して、ROIFドライバ122を無効にし(ステップS204)、RWIFドライバ121を有効にする(ステップS205)。
【0135】
つぎに、図23を用いてホスト100が動作中におけるSSD制御ツール110の動作を示す。SSD10がROモードに移行したことを迅速に検知するためには、SSD制御ツール110は、SSD10が通常モードであるときは、ホスト100からのライト要求に対するSSD10からの応答を監視し続けることが望ましい(ステップS210)。なお、SSD10がROモードである時は、SSD10にはライト要求が送信されないため、SSD制御ツール110は、SSD10の応答を監視しなくてもよい。
【0136】
通常モードでSSD10へ送信されたライト要求に関して、エラーが返ってきたとき(1回のエラーでもよいし、複数回のエラーでもよい)、SSD制御ツール110は、SSD10が図18に示したROモード移行処理を開始して全てのライト要求に対してエラーを返している状態であると判断し、RWIFドライバ121を無効化する(ステップS211)。SSD10を書き込み専用デバイスとして迅速に認識させる観点では、SSD制御ツール110は、SATA規格のCOMRESETや、ACS−2記載のSCT Command Transportのベンダ独自のコマンドや、その他ベンダ独自のコマンドなどを用いて、SSD10にリセットコマンドを送るなどしてSSD10を再起動させることが望ましい(ステップS212)。この再起動処理またはユーザによるコンピュータシステム1の再起動またはSSD10の電源OFF/ONにより、SSD10は図21に示した処理を行うことで、ROモードに移行する。また、SSD制御ツール110は、ROIFドライバ122を有効化する(ステップS213)。
【0137】
以上のようにして、ホスト100は、SSD10がROモード移行化処理開始直後及びROモード中において、SSD10を利用不可能な外部記憶装置として誤認識することなくSSD10に対する読み出し処理を確実に行うことができる。
【0138】
図24は、ホスト100にOSとしてWindows(登録商標)が用いられているときのドライブ表示を示すものであり、ドライブDとしてSSDが接続されているとする。SSDが通常の読み書き可能な状態にあるときは、図24(a)に示すように、ドライブDの種類は「ローカルディスク」と表示される。しかし、SSD制御ツール110が、図22、図23の処理によってドライブDを書き込み非サポートのデバイスであると認識した後は、図24(b)に示すように、ドライブDの種類は例えば「CD−ROM」や「DVD−ROM」や「ROMドライブ」と表示される。
【0139】
ところで、上記では、SSD10において、図18におけるROモード移行条件に用いる統計情報として、統計情報X01〜X19、X23、X24を採用するようにしたが、他の統計情報を用いて、ROモード移行条件の成立を判定するようにしてもよい。
【0140】
例えば、SSD10において、特開2009−217603号公報に記載されているクラスタという管理単位が導入されている場合、バッドクラスタ数をROモード移行条件に採用してもよい。クラスタサイズは、セクタサイズの2以上の自然数倍であり、クラスタアドレスは、LBAの所定のビットから上位のビット列で構成される。SSD10では、管理情報として、バッドクラスタのクラスタアドレス(クラスタID)を管理するバッドクラスタテーブルを保有する。そして、例えば、NANDメモリ20から読み出しを行った時にECC訂正回路58でのECC処理の際にECC訂正エラーが発生すると、メモリコントローラ50はECC訂正エラーが発生したクラスタをバッドクラスタテーブルに登録する。このバッドクラスタテーブルの登録内容に基づきバッドクラスタ数を取得することが可能である。したがって、SSD10が通常モードで動作しているとき、メモリコントローラ50は、RAM40に記憶された管理情報におけるバッドクラスタテーブルの例えばエントリ数に基づき現在のバッドクラスタ数を取得し、取得したバッドクラスタ数を閾値と比較し、バッドクラスタ数が閾値以上である時、ROモード移行条件が成立したと判定する。
【0141】
また、図18、図21のフローチャートでは、SSD10においてROモードフラグ25を介在させることによって、SSD起動時にリードオンリーモード移行条件が成立しているか否かを判定したが、起動時、上述したROモード移行条件に用いる各種管理情報のうちの少なくとも1つがROモード移行条件を満足しているか否かを直接判定することで、リードオンリーモードに移行するか否かを決定するようにしてもよい。
【0142】
つぎに、ホスト100に搭載されるSSD制御ツール110の処理についての変形例について説明する。例えば、図23に示した動作手順に代えて、図25に示すような動作手順を採用してもよい。図25においては、SSD10が通常モードで動作しているとき、SSD制御ツール110は、定期的にSSD10に対してSSD10の統計情報を取得するためのコマンドを発行する(ステップS220)。このコマンドとして、例えば、メモリの自己診断機能である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の情報を受信したSSD10においては、メモリコントローラ50が統計情報X01〜X19、X23、X24の一つまたは一部または全てを取得し、取得した統計情報をホスト100に返信する。このSSD10から返信された統計情報を受信することで、SSD制御ツール110は、統計情報を取得する(ステップS221)。
【0143】
図26は、統計情報X01〜X19、X23、X24に関する管理テーブルを示すものである。例えば、B0h/D0h SMART READ DATAを用いる場合、図26に示すように、統計情報26の構成要素(X01〜X19、X23、X24など)それぞれに対し、属性ID(attribute ID)を割り当てるが、属性IDをこれら構成要素の一部のみに割り当ててもよいのはもちろんである。これら統計情報26の構成要素に関し、規格化後、最良値としてSMABを採用し、規格化後の信頼性保証下限値としてSMAL=SMAB*AMALR(0≦AMALR<1)(SMALは整数で、四捨五入、小数点以下切り上げ、小数点以下切り上げのいずれかにより少数から整数に変換される)を採用し、
attribute value = SMAL + SMAB×(1-AMALR)×(RMAX−生の値)/ RMAX
attribute Threshold=30(固定値)
(生の値)=統計情報の生の値
により、メモリコントローラ50は、S.M.A.R.T情報のattribute value(図26の「Value」)を計算してSSD制御ツール110に送信する。attribute Thresholdは、図26の「Threshold」であり、生の値は、図26の「Raw Data」である。
【0144】
規格化後の最良値SMABは任意の自然数であればよく、たとえばSMAB=100を採用してもよい。AMALRは0≦AMALR<1をみたす任意の数であればよく、たとえばAMALR=0.3を採用してもよい。また、RMAX、AMALRおよびSMABは各X01〜X19、X23、X24に対して、それぞれ別の値を採用することができる。SMAB=100で、AMALR=0.3を採用した時、採用対象の統計情報に関してattribute valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、attribute valueが30かそれ以下の値に到達することになる。Attribute ValueがThresholdを超過しているか否かを検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
【0145】
図26の「Worst」をSSD制御ツール110がSSD10の寿命を診断する仕様として採用してもよい。「Worst」はattribute valueの最悪値としてメモリコントローラ50に計算される。たとえば、X01〜X19、X23の場合、Worstは、たとえばSSD10が出荷後の(または製造後の)、attribute valueの最小値である。あるいは、Worstとして、過去ある一定時間範囲内のattribute valueの最小値をWorst Valueとして採用してもよいし、ある一定回数(一定データ量)通信または処理が行われた過去にさかのぼって、その過去から現在に至るまでの最小値をworst valueとして採用してもよい。
【0146】
図26の「Raw Data」(Raw Value)をSSD制御ツール110がSSD10の寿命を診断する仕様として採用してもよい。統計情報(たとえば、X01〜X19、X23、X24)の生の値がRaw DataとしてSSD10からSSD制御ツール110に送信される。この場合、SSD制御ツール110は、RMAXをSSD制御ツール110内にすでに保持しているかSSD10から別途読み出すかその他記憶装置から読み出すかしてRMAXを取得し、RMAXとRaw Dataを比較し、Raw Data>RMAXまたはRaw Data≧RMAXとなった時、SSD10が寿命に到達したと判断する。たとえば、NAND整理失敗フラグの場合、これが1である場合にSSD10が寿命に到達したと判断する。たとえば、バッドブロック数総計の場合、これが所定値を上回った場合にSSD10が寿命に到達したと判断する。Raw Dataとして、必ずしも統計情報の生の値を出力する必要はなく、たとえば、統計情報の生の値を四則演算した値をRaw Dataとしてメモリコントローラ50がSSD制御ツール110に送信し、同じくRMAXを四則演算した値と比較することで判定を行ってもよい。また、統計情報の生の値を暗号化したデータをRaw Dataとしてメモリコントローラ50がSSD制御ツール110に送信し、メモリコントローラ50がこれを復号化して復号化後のデータをRMAXと比較することで判定を行ってもよい。
【0147】
SSD制御ツール110は、取得した統計情報を所定の閾値、たとえばRMAXやRMINなどと比較し(ステップS222)、SSD10の統計情報がRMAXを上回っている時(またはX24=1である時、または統計情報がRMINを下回っている時)などSSD10が寿命に到達した(あるいは寿命寸前であるか、あるいは異常状態であるか)と判断される場合(ステップS222:Yes)、図23と同様、RWIFドライバ121を無効化する(ステップS223)。SSD制御ツール110は、SSD10を再起動してもよい(ステップS224)。SSD10再起動後、SSD制御ツール110はROIFドライバ122を有効化する(ステップS225)。
【0148】
また、SSD10が通常モードであるときのホスト100での動作として、図27に示すような動作手順を採用してもよい。この動作手順では、SSD10が通常モードで動作しているとき、SSD制御ツール110は、定期的にSSD10に対してS.M.A.R.TのコマンドであるSMART READ DATAまたはベンダー独自のコマンドを発行する(ステップS240)。このS.M.A.R.Tの情報を受信したSSD10においては、メモリコントローラ50がRAM40に記憶された管理情報におけるバッドクラスタテーブルの例えばエントリ数に基づき現在のバッドクラスタ数を取得し、取得したバッドクラスタ数をホスト100に返信する。このSSD10から返信されたバッドクラスタ数を受信することで、SSD制御ツール110は、バッドクラスタ数を取得する(ステップS241)。
【0149】
SSD制御ツール110は、取得したバッドクラスタ数を所定の閾値と比較し(ステップS242)、SSD10のバッドクラスタ数が閾値以上である時、図13と同様、RWIFドライバ121を無効化し(ステップS243)、SSD10を再起動し(ステップS244)、ROIFドライバ122を有効化する(ステップS245)。
【0150】
また、SSD制御ツール110にバックアップ機能を搭載してもよい。SSD10がリードオンリーモードに移行している状態では、SSD10のデータリテンション特性が悪化していると考えられるため、できるだけ早急にSSD10上のユーザデータを他の2次記憶装置に退避させることが必要である。図28は、SSD制御ツール110がバックアップ機能を搭載している場合の、ホスト100の構成を示す図である。ホスト100には、2次記憶装置(他のSSD、ハードディスクドライブ、携帯ディスク記憶媒体など)130が接続されており、ホスト100のOSと2次記憶装置400とは2次記憶装置用ドライバ401を介して通信を行う。
【0151】
図29は、バックアップを行う場合のSSD制御ツール110の動作例を示すものである。図29では、図22に示したSSD制御ツール110の動作手順にステップS208を追加している。ステップS208でのバックアップの際、SSD制御ツール110は、「SSDがリードオンリーモードに移行しています。SSDのデータをバックアップしますか?」などのメッセージとバックアップの可否を選択する「OK」ボタン及び「キャンセル」ボタンを表示する。そして、「OK」ボタンがクリックされるとバックアップが開始され、「キャンセル」ボタンがクリックされるとバックアップは行われずにメッセージの表示が消える。ROIFドライバ122に対し、SSD10の全LBAのデータを読み出すよう命令を送る。SSD制御ツール110は、SSD10から読み出したデータのLBA(SSDのLBA)と同一のLBA(2次記憶装置400上のLBA)に、SSD10から読み出したデータを書き込むように、2次記憶装置用ドライバ401に対して命令を送る。例えば、SSD10上のLBA=0hのデータは2次記憶装置400上のLBA=0hにコピーされる。また、SSD10上のLBA=234c5hのデータは2次記憶装置400上のLBA=234c5hにコピーされる。
【0152】
なお、このバックアップ処理の際、SSD制御ツール110は、ホスト100のOSに対し、SSD10の全ファイルを2次記憶装置400にコピーするよう命令を送るようにしてもよい。この場合、OSはOSに含まれるファイル管理テーブルを参照し、SSD10の全ファイルの全LBAを取得し、取得したLBAの全データを読み出し、読み出したデータを2次記憶装置400に書き込み、書き込んだLBAとファイルのインデックスが対応付けられるようにファイル管理テーブルを更新する。また、SSD10のマスターブートレコード(MBR)情報をはじめとするパーティションの情報及びファイルシステム管理領域にアクセスし、使用されている領域やファイルの情報を取得し、取得した情報をもとに、SSD10のデータについてのROMイメージを作成し、作成したROMイメージを他の記憶装置に保存するようにしてもよい。
【0153】
また、本実施形態では、簡単のため、NANDメモリ20の物理アドレスは管理情報においてLBAに対して直接関連付けられていたが、たとえば特開2009−217603号のようにセクタサイズの2以上の自然数倍の管理単位を用いてLBAを管理し、LBAではなく、前記管理単位とNANDメモリ20の物理アドレスとの対応関係を管理情報に記述するようにしてもよい。NANDメモリ20の物理アドレスとLBAの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAの対応関係を記述するテーブル(論物変換テーブル)の取る形態は、本発明の本質には影響しない。NAND型フラッシュメモリ以外の不揮発性メモリに関しても、不揮発性メモリの物理アドレスとLBAの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAの対応関係を記述するテーブル(論物変換テーブル)の取る形態は、本発明の本質には影響しない。
【0154】
管理情報部で用いる信頼性情報にかかわりのない情報は、本発明の本質には影響しない。以上の信頼性情報についての要件は、第2の実施形態以降の実施形態にも当てはまる。
【0155】
このように第1の実施形態によれば、SSD10において、リードオンリーモード移行条件が成立したか否かを判定し、リードオンリーモード移行条件が成立した場合、インタフェースコントローラを読み出し専用のものに切り替えるとともに、ホスト100において、SSD10から取得した情報に基づきSSD10をリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、SSD制御用のインタフェースドライバを読み出し専用のものに切り替えるようにしているので、リードオンリーモードに移行したSSDをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【0156】
(第2の実施形態)
第1の実施形態では、SSD10への機能実装及びホスト100への機能実装の両方を使用した。第2の実施形態では、SSD10への機能実装のみを適用した場合を示す。SSD10及びホスト100の両方に機能を実装すると最も効果的であるが、SSD10のみに機能を実装しても十分に効果を発揮することができる。
【0157】
図30にコンピュータシステムの第2の実施形態の構成を示す。この第2の実施形態においては、SSD10に、第1の実施形態で説明したインタフェースコントローラ30を搭載しており、ホスト100側には、SSD10用のインタフェースドライバ120を切り替えるSSD制御ツール110を搭載してはいない。図30において、図1に示した構成要素と同一機能を有する構成要素については同一符号を付し、重複する説明は省略する。第2の実施形態では、IPL55の機能をメモリコントローラ50に搭載している。第2の実施形態のSSD10においても、先の第1の実施形態で説明したSSD10の機能を全て搭載可能である。
【0158】
この第2の実施形態においては、メモリコントローラ50は、SSD10をリード/ライト可能な通常の状態からリードオンリーモード状態へ移行させる前述したリードオンリーモード移行条件が成立するか否かをSSD起動時あるいはSSDの動作中に前述した管理情報を用いて判定しており、リードオンリーモード移行条件が成立した場合、インタフェースコントローラ30をRWIFコントローラ31からROIFコントローラ32に切り替える。RWIFコントローラ31は、ホスト100から要求があった場合、本ドライブはリードライト可能なドライブである旨を示すデバイス識別情報をホストに送信する。ROIFコントローラ32は、ホスト100から要求があった場合、本ドライブは読み出し専用ドライブである旨を示すデバイス識別情報をホストに送信する。
【0159】
RWIFコントローラ31はSSD10がATAデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、ATA/ATAPI Command Set-2 (ACS-2)で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を00hに、LBA(23:16)を00hとしてホスト100に出力することで、SSD10がATAデバイスであることをホスト100に通知することができる。ROIFコントローラ32はSSD10がATAPIデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、前記ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト100に出力することで、SSD10がATAPIデバイスであることをホスト100に通知することができる。
【0160】
ROIFコントローラ32は、SSD10が書き込みコマンドをサポートせず読み出し専用であることをホスト100に通知するよう構成される。例えば、ATAインタフェース90を介してホスト100から、INCITS Multi-Media Commands-6 (MMC-6)に採用されている コマンドGET CONFIGURATION(46h)を受信したとき、ROIFコントローラ32は、Random Writable(Feature Number=0020h)、Incremental Streaming Writable (Feature Number=0021h)、Write Once(Feature Number=0025h)などのFeaturesにおいて、ライト系機能は全て非サポートであることをホスト100に返信する。なお、ROIFコントローラ32は、RWIFコントローラ31と同じく、SSD10がATAデバイスであることをホスト100に明示的に示すよう構成され、ATAインタフェース90を介してホスト100からデバイス識別情報、たとえばACS−2記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト100に返信するよう構成されてもよい。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0161】
例えば、第1の実施形態で用いた図18を参照すれば、SSD10が動作中、メモリコントローラ50は、ROモード移行条件が成立したか否かを判定している(図18:ステップS160)。ROモード移行条件の成立の具体例としては、統計情報X01〜X19、X23、X24のうち少なくとも一つがRMAXを上回っている時、またはX24=1である時、または統計情報がRMINを下回っている時、などのようにSSD10が寿命に到達した(あるいは寿命寸前である、あるいは異常状態である)と判断される場合などの条件がある。
【0162】
ROモード移行条件が成立すると、メモリコントローラ50は、現在行われているNANDメモリ20に対する書き込み処理を全てキャンセルし(ステップS161)、ホスト100から受信した全てのライト要求に対してエラーを返し、ホスト100から受信したライト要求のキュー全てを削除するのが望ましい(ステップS162)。つぎに、メモリコントローラ50は、NANDメモリ20上の管理情報におけるROモードフラグ25に1を書き込む(ステップS163)。その後、SSD10は電源を遮断されるかリセットされるまで、ホスト100から受信したライト要求の全てに対してエラーを返す(ステップS164、S165)。
【0163】
また、SSD10の起動時には、例えば、先の第1の実施形態で用いた図21と同様の動作を実行する。すなわち、SSD10が起動すると、メモリコントローラ50内のIPL55がNANDメモリ20上の管理情報におけるROモードフラグ25を読み出し(ステップS170)、ROモードフラグ25を判別する(ステップS171)。ROモードフラグ25が0である場合は(ステップS171)、IPL55は、通常モードにすべく、インタフェースコントローラ30のRWIFコントローラ31を有効にし(ステップS172)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS173)。
【0164】
一方、ROモードフラグ25が1である場合は、IPL55は、ROモードにすべく、ROIFコントローラ32を有効にし(ステップS174)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS175)。ROモードにおいては、SSD10は書き込みをサポートしない読み出し専用デバイスとして振る舞う。
【0165】
ホスト100はホスト起動時、またはデバイス接続時、接続されているデバイスに対して識別情報を要求する。SSD10は、通常モードにおいては、RWIFコントローラ31がホスト100に対してSSD10が読み書き可能であることを示すデバイス識別情報をホストに対して返すので、ホスト100はSSD10を読み書き可能であるデバイスとして認識する。一方、ROモードにおいては、SSD10は、ROIFコントローラ32がホスト100に対してSSD10が書き込み非サポートの読み出し専用ドライブであることを示すデバイス識別情報を返すので、ホスト100はSSD10を書き込み非サポートデバイスとして認識する。よって、ROモード時においては、ホスト100からSSD10にライト要求が送られることはない。このように、ROモードにおいては、SSD10は書き込みをサポートしないデバイスとして振る舞って、ホスト100から書き込み以外のアクセスが可能になる。また、ホスト100にOSとしてWindows(登録商標)が搭載されている場合でも、SSD10が読み出し可能なデバイスであるとして認識されることが可能になる。
【0166】
このようにして、SSD10の信頼性悪化時にSSD10が書き込み非サポートの外部記憶装置であるという識別情報をSSD10からホスト100に通知することで、ホスト100にとっては、あたかもSSD10が読み書き可能な外部記憶装置から書き込み非サポートの外部記憶装置に切り替わったかのように見える。したがって、ホスト100にとっては、信頼性が悪化したSSD10は読み出しのみ可能なデバイスとして振る舞うために、ホスト100は例えばSSD10をCD−ROMやDVD−ROMのような一般的な読み出し専用外部記憶装置として扱うことができる。
【0167】
(第3の実施形態)
第3の実施形態では、ホスト100への機能実装のみを適用した場合を示す。SSD10及びホスト100の両方に機能を実装すると最も効果的であるが、ホスト100のみに機能を実装しても効果を十分に発揮することができる。
【0168】
図31にコンピュータシステムの第3の実施形態の構成を示す。この第3の実施形態においては、ホスト100に、第1の実施形態で説明したインタフェースドライバ120及びSSD制御ツール110を搭載しており、SSD10側には、RWIFコントローラ31及びROIFコントローラ32が切り替え可能なインタフェースコントローラ30を搭載してはいない。図31において、図1に示した構成要素と同一機能を有する構成要素については同一符号を付し、重複する説明は省略する。インタフェースコントローラ30に代えて、RWIFコントローラ31のみが搭載されたインタフェースコントローラ38が搭載されている。第3の実施形態のホスト100においても、先の第1の実施形態で説明したホスト100の機能を全て搭載可能である。
【0169】
この第3の実施形態においては、SSD制御ツール110は、先の第1の実施形態の図25、図27などで説明した動作と同様の動作を実行する。ホスト100が起動すると、ホスト100はSSD制御ツール110を起動する。SSD制御ツールは、たとえばWindows(商標)においてスタートアップメニューやサービスやレジストリに登録されるなどして、ホスト100の起動とおもに自動的に起動されることが望ましい。一方、SSD制御ツールは、キーボード134やマウス135などにより、ユーザによって任意に起動されてもよい。SSD制御ツール110が起動されると、例えば図25の場合、SSD制御ツール110はSSD10の統計情報X01〜X19、X23、X24などのうち少なくとも一つを取得するべく、SSD100に対し統計情報の送信要求を送信する(図25:ステップS220)。この送信要求としては、例えば、前述したように、メモリの自己診断機能であるS.M.A.R.TのコマンドであるSMART READ DATAまたはACS-2に記述されているSCT Command Transportまたはベンダー独自のコマンドを採用してもよい。
【0170】
このようにして、SSD制御ツール110は、統計情報を取得する(ステップS221)。SSD制御ツール110は、SSD10から返ってきた統計情報を閾値(たとえば第1の実施形態で述べたRMAXやRMIN)と比較する(ステップS222)。例えば、統計情報の取得にACS-2記載のB0h/D0h SMART READ DATAを用いる場合、SSD制御ツール110は、統計情報26の構成要素(X01〜X19、X23、X24など)のうち少なくとも一つの統計情報を、図26に示すAttribute Value、Threshold、Worst ValueおよびRaw Data(Raw Value)の形態で取得する。メモリコントローラ50によるAttribute Value、Threshold、Worst ValueおよびRaw Data(Raw Value)の計算方法は第1の実施形態と同じであり、このようにして計算された情報が、B0h/D0h SMART READ DATAに対する読み出しデータとしてSSD10から制御ツール110に送信される。
【0171】
たとえば、SMARTのAttribute ValueとThresholdを、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Attribute ValueとThresholdの比較を行い、たとえばAttribute Value<Threshold(またはAttribute Value≦Threshold)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。第1の実施形態のように、たとえばSMAB=100で、AMALR=0.3を採用した時、採用対象の統計情報に関してattribute valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、attribute valueが30かそれ未満の値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。Attribute ValueがThresholdを超過しているか否かを検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
【0172】
たとえば、SMARTのWorst ValueとThresholdを、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Worst ValueとThresholdの比較を行い、たとえばWorst Value<Threshold(またはWorst Value≦Threshold)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。第1の実施形態のように、たとえばSMAB=100で、AMALR=0.3を採用した時、採用対象の統計情報に関してWorst Valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、Worst Valueが30かそれ未満の値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。
【0173】
たとえば、SSD10の信頼性悪化とともに増大していくようなSMARTのRaw Data(Raw Value)を、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Raw ValueとRMAXの比較を行い、たとえばRaw Value≧RMAX(またはRaw Value>RMAX)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。RMAXは主メモリ202上、たとえばSSD制御ツール110上に保持されているパラメータである。RMAXはコンピュータシステム1の電源OFF時は不揮発情報としてSSD10に格納されていることが望ましく、電源ON時に例えば図5や図6のようにSSD制御ツールが主メモリ202にロードされる時、主メモリ202にロードされる。RMAXは第1の実施形態のようにSSD10の開発時に決定されることが望ましく、SSD制御ツールのインストール元となる領域、たとえばWEBサーバーの記憶媒体400上の領域や、光学記憶媒体500上の領域や、USBメモリ600の領域に格納されている。
【0174】
Raw Valueは、SSD10の信頼性が劣化するにつれて徐々に増加していき、SSD10が信頼性保証できなくなったとき、Raw ValueがRMAXかそれより大きい値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。RMAXは統計情報X01〜X19、X23など構成要素のそれぞれに対し、別々の値を採用してもよい。
【0175】
たとえば、SSD10の信頼性悪化とともに減少していくようなSMARTのRaw Data(Raw Value)を、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Raw ValueとRMINの比較を行い、たとえばRaw Value≦RMIN(またはRaw Value<RMIN)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。RMINは主メモリ202上、たとえばSSD制御ツール110上に保持されているパラメータである。RMINはコンピュータシステム1の電源OFF時は不揮発情報としてSSD10に格納されていることが望ましく、電源ON時に例えば図5や図6のようにSSD制御ツールが主メモリ202にロードされる時、主メモリ202にロードされる。RMINは第1の実施形態のようにSSD10の開発時に決定されることが望ましく、SSD制御ツールのインストール元となる領域、たとえばWEBサーバーの記憶媒体400上の領域や、光学記憶媒体500上の領域や、USBメモリ600の領域に格納されている。
【0176】
Raw Valueは、SSD10の信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき、Raw ValueがRMINかそれ未満の値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。RMINは統計情報X01〜X19、X23など構成要素のそれぞれに対し、別々の値を採用してもよい。
【0177】
たとえば、SMARTのRaw Data(Raw Value)として統計情報X24を受信して、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Raw Valueが1であるか否かの判定を行い、Raw Value=1であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。SSD10の信頼性が劣化しNAND整理によっても十分な数のフリーブロックがメモリコントローラ50により確保できなかった場合、メモリコントローラ50によりRaw Valueが1にセットされ、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。
【0178】
ステップS222の比較の結果、SSD10にROモード移行条件が成立していると判断した場合、すなわちSSD10をリードオンリーメモリとして認識すべきと判断した場合(ステップS222:Yes)、ROIFドライバ122を有効にする(ステップS225)。また、SSD制御ツール110は図12におけるオペレーティングシステム150内のシステムパラメータを操作することで、オペレーティングシステム150にSSD10をリードオンリーメモリとして認識させてもよい。ステップS225の前に、SSD制御ツール110はリセットコマンド等を送信してSSD10を再起動するのが望ましい(S224)。
【0179】
なお、SSD制御ツール110は、図25、図27などに示したステップS220、ステップS221及びステップS222(図25の場合)の手順、すなわちSSD10への統計情報の送信要求、及びSSD10をリードオンリーメモリとして認識すべきとの判断を、ホスト100が動作中も定期的に行うようにするのが望ましい。たとえば、一定時間おきに、SMART READ DATAを発行し、SSD10をリードオンリメモリとして認識すべきか否かの判断を行うようにするとよい。前記要求及び判断をホスト100の起動時に行うようにしてもよく、SSD制御ツール110の割り込み処理回数を低減するために、前記要求及び判断をホスト100起動後のみに行うようにしてもよい。そして、SSD10をリードオンリーメモリとして認識すべきと判断した場合は、インタフェースドライバ120のROIFドライバ122を有効にする。SSD制御ツール110の割り込み処理回数を低減するために、SSD10をリードオンリメモリとして認識した後は、統計情報の送信要求やROモード移行判断を行わないようにすることが望ましい。
【0180】
また、SSD制御ツール110は、SSD10の起動または接続を認識すると、前記要求および判断を行うようにしてもよい。たとえば、インタフェース90がSATAインタフェースである場合、ホスト100のSSD10に関するステータスレジスタが7Fhから50hになったとき、SSD10が起動または接続されたと判断し、前記要求および判断を行うようにしてもよい。
【0181】
また、前記リードオンリーメモリとして認識すべきとの判断は、メモリコントローラ50が行うようにし、SSD制御ツール110はSMART READ DATAまたはSCT Command Transportまたはベンダー独自のコマンドを通じてその判断結果のみを受信するようにしてもよい。たとえば、第1の実施形態と同様の判断基準でメモリコントローラ50によってリードオンリーメモリとして認識すべきと判断された時は、SMART READ DATAによりSSD制御ツール110はSSD10からAttribute Valueとして数値0を受信し、そうでないとき(通常時)は数値100を受信し、リードオンリーメモリとして認識すべき場合とそうでない場合のどちらにおいてもThresholdとしては数値70を受信し、Attribute Value < Thresholdの時(ステップS222:Yes)、リードオンリーメモリとして認識すべきと判断し、Attribute Value > Thresholdのとき(ステップS222:No)は、リードオンリーメモリとして認識すべきでないと判断するようにしてもよい。判断結果の受信にWorst ValueやRaw Valueを用いてもよいのはもちろんである。
【0182】
なお、統計情報として、たとえば現在温度X20、最高温度X21、最低温度X22を採用する場合は、温度異常は一時的なものである可能性があるため、SSD制御ツール110がステップS225によってROIFドライバを有効化した後に、たとえばAttribute Value≧Threshold(またはAttribute Value>Threshold)となって通常状態に復帰したと判断されたときは、ROIFドライバを無効化し、RWIFドライバを有効化してもよい。
【0183】
SSD10のデータ破壊や故障によるユーザデータ損失を防止する観点では、ROIFドライバ122は、SSD10に対する書き込みコマンドを一切送信しないよう構成されることが望ましい。一方、ROIFドライバ122は、たとえばオペレーティングシステムのシステム情報など一部のデータをSSD10に書き込む必要がある場合は、例外としてSSD10に当該データを書き込むことを許可してもよいが、当該データはデータ量がNANDメモリ20の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいSSD10に対してデータを書き込んでしまうことを防止するために、IOIFドライバ122は、たとえばACS-2記載の35h WRITE DMA EXTや61h WRITE FPDMA QUEUEDのような、SSD10に対する通常の書き込みコマンドは一切送信せず、SSD10に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりSSD2に対する書き込みを許可するようにすることが望ましい。
【0184】
第3の実施形態においても、SSD制御ツール110は、図5に示したように、ホスト装置100が電源オフになっているときはSSD10のNANDメモリ20の領域110Aに格納されているが、ホスト装置100の起動時またはプログラム起動時に、領域110Aから領域110にロードされる。一方、ホスト装置に複数の不揮発性記憶装置が接続されている場合は、図6に示すように、SSD制御ツールは、SSD10とは別の不揮発性記憶装置300の領域110Bに格納されており、ホスト装置100の起動時またはプログラム起動時に、領域110Bから領域110にロードされるようにしてもよい。特に、不揮発性記憶装置300がOSを格納するシステムドライブとして使用されており、SSD10が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ300にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ10にはユーザデータを格納するドライブとして使用するというように、ドライブ10とドライブ300の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置300に制御ツールを格納することが望ましい。
【0185】
第3の実施形態においても、制御ツールのセットアップをユーザが行う労力を省く観点では、例えば図5や図6のように、SSD制御ツールがSSD10や不揮発性記憶装置300に格納された状態でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザがSSD制御ツールのインストールの可否を選択できるようにする観点、およびユーザに最新の制御ツールを提供できるようにするという観点では、制御ツールは、図7に示したWEBからのダウンロード、または図8に示したDVD−ROMからのインストール、さらには図9に示したUSBメモリなど外部記憶媒体からのインストールにより、SSD10や不揮発性記憶装置300に格納できるようにすることが望ましい。第3の実施形態においても、ユーザによる入手容易性の観点から、光学メディア500やUSBメモリ600はSSD10の出荷時に、付属品としてSSD10と一緒に梱包されて販売されることが望ましい。一方、光学メディア500やUSBメモリ600はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【0186】
このようにして、ホスト100に搭載されたSSD制御ツール110がSSD10の信頼性状態(統計情報)を判定し、この判定結果に基づいてSSD用のインタフェースドライバを選択することとしたので、SSD10の信頼性悪化時(寿命到達時、異常状態時)、OSやその他ソフトウェアにとっては、あたかもSSD10が読み書き可能な外部記憶装置から書き込み非サポートの外部記憶装置に切り替わったかのように見える。したがって、OSやその他ソフトウェアにとっては、信頼性悪化したSSD10は読み出しのみ可能なデバイスとして振る舞うために、ホスト100はSSD10をCD−ROMやDVD−ROMのような一般的な読み出し専用外部記憶装置として扱うことができる。
【0187】
(第4の実施形態)
第1及び第2の実施形態では、SSD10が読み出し専用デバイスであるという情報をSSD10がホスト100に対し送信していた。SSD10とは別に用意されたインタフェース中継デバイス700を用い、インタフェース中継デバイス700がホスト100に対しSSD10が読み出し専用デバイスであるという情報をホスト100に対して送信してもよい。このインタフェース中継デバイス700を読み出し専用ブリッジと呼ぶ。
【0188】
図32は、図10に示したコンピュータシステムに読み出し専用ブリッジ700を接続した状態を示すものである。図33は、読み出し専用ブリッジが接続された第4の実施形態のコンピュータシステムを示すブロック図である。読み出し専用ブリッジ700はホスト100に対して読み出し専用デバイスであるという情報を送信するよう構成される。読み出し専用デバイスであるという情報は、たとえば前述のMMC-6に採用されている前述したコマンドGET CONFIGURATION(46h)を用いてもよいし、他のコマンドを用いてもよい。さらに、読み出し専用ブリッジ700は、ホスト100から受信した各種命令及び応答をSSD10に送信し、SSD10から受信した各種命令及び応答をホストに送信するなど、ホスト側インタフェースとSSD側インタフェースの中継の役割を果たすよう構成される。ホスト側インタフェースとSSD側インタフェースのインタフェース規格が異なる場合は、読み出し専用ブリッジ700は、受信したコマンド及び応答を送信側インタフェースに合うように変換して送信する。ホスト側インタフェースがSATAインタフェースである場合、読み出し専用ブリッジ700はSSD10がATAPIデバイスであることをホスト100に明示的に示すよう構成されてもよい。たとえば、前記ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト100に出力することで、SSD10がATAPIデバイスであることをホスト100に通知することができる。
【0189】
ホスト100の通常利用時は、SSD10は、図10に示したように、ATAインタフェース90としてのSATAケーブルや、USBケーブルによってホスト100のマザーボード130に接続されている。ホスト100に搭載されているSSD制御ツール110が前述したACS−2記載のS.M.A.R.T情報などによって統計情報を取得して、この管理情報と閾値との比較によって、たとえば統計情報>RMAXまたは統計情報<RMINまたはX24=1の条件がを満たされるなどにより、SSD10の信頼性が劣化していると判断すると、SSD制御ツール110は、ディスプレイ133上に「SSDの寿命が近づいています。読み出し専用ブリッジのデバイス側端子をSSDに接続し、読み出し専用ブリッジのホスト側端子をパソコンに接続し、SSDのデータをバックアップしてください。」などのメッセージを含む警告ウィンドウ(または警告ダイアログ)を表示する。なお、管理情報と比較する閾値(RMAXやRMINなど)をホスト100内に保持して信頼性劣化の判断をSSD制御ツール110が行うようにしてもよいし、前記閾値をSSD10内に保持して信頼性劣化の判断をSSD10のメモリコントローラ50が行い、管理情報が閾値を超過したという情報のみをメモリコントローラ50がホスト100に送信することにしてもよい。
【0190】
ディスプレイ133上に表示された警告メッセージに従って、ユーザが、図32に示すように、SSD10と読み出し専用ブリッジ700とをSATAケーブルまたはUSBケーブルなどで接続し、読み出し専用ブリッジ700とマザーボード130をSATAケーブルやUSBケーブルなどで接続する。
【0191】
この後、ホスト100が起動されると、読み出し専用ブリッジ700はホスト100に対して、SSD10が読み出し専用デバイスであるという情報を送信する。これにより、ホスト100は、読み出し専用ブリッジ700のインタフェースドライバ170として読み出し専用の例えばATAPIドライバの読み出し専用ドライバを適用し、またホスト上でSSD10はたとえばCD−ROMやDVD−ROMなどのような読み出し専用デバイスとして認識される。なお、読み出し専用ブリッジ700は、SSD10がATAデバイスであることをホスト100に明示的に示すよう構成され、ATAインタフェースを介してホスト100からデバイス識別情報、たとえばACS−2記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト100に返信するよう構成されてもよい。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0192】
このようにこの実施形態では、SSDに対して書き込みが不可能な場合、またはSSDに対する書き込み動作が保証されない場合、SSDに対する書き込み動作がSSD内のデータの欠損やSSDの故障を招く恐れがある場合などの状況下においても、ホスト100とSSDとの間に読み出し専用ブリッジ700を接続するだけで、ホスト100はSSD10に対して読み出し動作を行うことができる。
【0193】
なお、読み出し専用ブリッジ700を接続した状況下でホストの起動に用いられるシステムディスクとしては、SSD10でもよいし、予めシステムをインストールされているSSD10とは別に用意されたSSDまたはハードディスクドライブ(HDD)でもよいし、ブートプログラムをインストールされたDVD−ROM、CD−ROM、USBメモリなどでもよい。
【0194】
なお、読み出し専用ブリッジ700が接続された場合においても、ホスト100は、SSDのデータをバックアップするような機能を備えたSSD制御ツール110あるいはその他のソフトウェアを保持していてもよい。このバックアップ機能を備えたソフトウェアは、読み出し専用ブリッジ700が接続されたことを検知すると、このソフトウェアのウィンドウ内に「読み出し専用ブリッジが接続されています。SSDのデータをバックアップしますか?」などのメッセージとバックアップの可否を選択する「OK」ボタン及び「キャンセル」ボタンが表示される。そして、「OK」ボタンがクリックされるとバックアップが開始され、「キャンセル」ボタンがクリックされるとバックアップは行われずにメッセージの表示が消える。「キャンセル」ボタンが押された場合でも、バックアップは後で行うことができる。
【0195】
なお、第1〜第4の実施形態においては、不揮発性メモリとしてNANDメモリを採用した場合について述べたが、不揮発性メモリとして、ハードディスクドライブ(HDD)などNANDメモリ以外の不揮発性メモリに第1〜第4の実施形態を適用してもよい。また、不揮発性メモリとして、特開2011−161199号公報や特開2011−29586号公報で示されているような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【0196】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0197】
1 コンピュータシステム、10 SSD、20 NAND型フラッシュメモリ(NANDメモリ)、21 フリーブロックテーブル、22 バッドブロックテーブル、23 アクティブブロックテーブル、24 アクティブページテーブル、25 リードオンリー(RO)モードフラグ、30 インタフェースコントローラ、31 RWIFコントローラ、32 ROIFコントローラ、33,34 選択スイッチ、38 インタフェースコントローラ、50 メモリコントローラ、57 バス、58 ECC訂正回路、90 ATAインタフェース、100 ホスト、110 SSD制御ツール、120 インタフェースドライバ、121 RWIFドライバ、122 ROIFドライバ、123,124 選択スイッチ、170 インタフェースドライバ、700 インタフェース中継デバイス(読み出し専用)、400 2次記憶装置。
【技術分野】
【0001】
本発明の実施形態は、情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法に関する。
【背景技術】
【0002】
コンピュータシステムに用いられる外部記憶装置として、NAND型フラッシュメモリなどの不揮発性半導体メモリを搭載したSSD(Solid State Drive)が注目されている。フラッシュメモリは、磁気ディスク装置に比べ、高速、軽量などの利点を有している。SSD内には、複数のフラッシュメモリチップ、ホスト装置からの要求に応じて各フラッシュメモリチップのリード/ライト制御を行うコントローラ、各フラッシュメモリチップとホスト装置との間でデータ転送を行うためのバッファメモリ、電源回路、ホスト装置に対する接続インタフェースなどを備えている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2009−217603号公報
【特許文献2】特開2008−090539号公報
【特許文献3】特開2002−351621号公報
【特許文献4】特開2006−18848号公報
【特許文献5】特開平07−78102号公報
【特許文献6】特開2004−151785号公報
【特許文献7】特開2005−190075号公報
【特許文献8】特開2008−90539号公報
【特許文献9】特開2001−75813号公報
【非特許文献】
【0004】
【非特許文献1】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
【非特許文献2】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“
【非特許文献3】S.M.A.R.T. attributes meaninghttp://www.ariolic.com/activesmart/smart-attributes/
【非特許文献4】S.M.A.R.T. attributes meaninghttp://www.siguardian.com/products/siguardian/on_line_help/s_m_a_r_t_attribute_meaning.html
【非特許文献5】Self-Monitoring, Analysis and Reporting Technology :: Attributeshttp://smartlinux.sourceforge.net/smart/attributes.php
【非特許文献6】SNIA, Solid State Storage Performance Test Specification Version0.9http://www.snia.org/
【非特許文献7】Serial ATA International Organization: Serial ATA Revision 3.1RC Clean DRAFT 2010.09.29 554頁〜558頁 13.9 Phy Event Counters (Optional)
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の一つの実施形態は、ライト動作不可能になった外部記憶装置をリード動作のみ可能なデバイスとして正常にホスト装置に認識させることが可能な情報処理装置、外部記憶装置、ホスト装置、中継装置、制御プログラム及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一つの実施形態によれば、情報処理装置は、ホスト装置と、外部記憶装置とを備える。外部記憶装置は、リード及びライト可能な不揮発性メモリと、ホスト装置と接続されるインタフェースコントローラと、第1の制御部とを備える。インタフェースコントローラは、第1の制御部は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第1のインタフェースコントローラから第2のインタフェースコントローラへ前記インタフェースコントローラを切り替える。ホスト装置は、前記外部記憶装置を動作させるためのインタフェースドライバと、第2の制御部とを備える。第2の制御部は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える。
【図面の簡単な説明】
【0007】
【図1】図1は、第1の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図2】図2は、NANDメモリチップの内部構成例を示すブロック図である。
【図3】図3は、NANDメモリチップに含まれる1個のプレーンの構成例を示す回路図である。
【図4】図4は、4値データ記憶方式でのしきい値分布を示す図である。
【図5】図5は、SSD制御ツールをSSDに保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図6】図6は、SSD制御ツールをその他の外部記憶装置に保存する場合のコンピュータシステムの機能構成例を示すブロック図である。
【図7】図7は、SSD制御ツールをWEBからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図8】図8は、SSD制御ツールを光学ドライブからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図9】図9は、SSD制御ツールをUSBメモリからインストールする場合のコンピュータシステムの機能構成例を示すブロック図である。
【図10】図10は、コンピュータシステムの外観的構成を示す図である。
【図11】図11は、ホストの機能構成例を示すブロック図である。
【図12】図12は、ホストの階層的機能構成例を示すブロック図である。
【図13】図13は、SSDの管理情報を示す図である。
【図14】図14は、SSDの書き込み動作例を示すフローチャートである。
【図15】図15は、SSDのNANDメモリの整理の動作例を示すフローチャートである。
【図16】図16は、SSDの読み出し動作例を示すフローチャートである。
【図17】図17は、SSDのエラー発生時の動作例を示すフローチャートである。
【図18】図18は、SSDのリードオンリーモード移行条件が成立したときの動作例を示すフローチャートである。
【図19】図19は、統計情報の生の値とSSDの不良率の関係を示すグラフである。
【図20】図20は、統計情報の生の値とSSDの性能の関係を示すグラフである。
【図21】図21は、SSDの起動時の動作例を示すフローチャートである。
【図22】図22は、ホストの起動時の動作例を示すフローチャートである。
【図23】図23は、ホストの動作中の動作例を示すフローチャートである。
【図24】図24は、ホストでのドライブ表示画面例を示す図である。
【図25】図25は、ホストの起動時の他の動作例を示すフローチャートである。
【図26】図26は、統計情報X01〜X19、X23、X24の管理テーブルの一例を示す図である。
【図27】図27は、ホストの起動時の他の動作例を示すフローチャートである。
【図28】図28は、ホストの他の構成例を示すブロック図である。
【図29】図29は、図28に示すホストを採用した場合のホスト起動時の動作例を示すフローチャートである。
【図30】図30は、第2の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図31】図31は、第3の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【図32】図32は、第4の実施形態のコンピュータシステムの外観的構成例を示す図である。
【図33】図33は、第4の実施形態のコンピュータシステムの機能構成例を示すブロック図である。
【発明を実施するための形態】
【0008】
不揮発性半導体メモリには、NAND型フラッシュメモリのように、データを記憶させる場合にブロック単位で一度データを消去してからその後に書き込みを行うもの、ページ単位で書き込み/読み出しを行うものなど、消去/書き込み/読み出しの単位が固定されているものがある。一方、パーソナルコンピュータなどのホスト機器がハードディスクをはじめとする2次記憶装置に対してデータの書き込み/読み出しを行う単位は、セクタと呼ばれる。セクタは、半導体記憶装置の消去/書き込み/読み出しの単位とは独立に定められる。例えば、不揮発性半導体メモリの消去/書き込み/読み出しの単位は、ホスト機器の書き込み/読み出しの単位よりも大きい場合がある。
【0009】
また、フラッシュメモリを用いてパーソナルコンピュータの二次記憶装置を構成する場合、誤りが多いなどの理由によって記憶領域として使用できなくなるブロック(不良ブロック、バッドブロック)や、読み出せなくなる領域(不良領域)などが生じる場合がある。このような不良ブロック数や不良領域数が上限値を超えた場合には、新たな不良ブロックや不良領域を登録することができないので、バッファメモリ(キャッシュメモリ)に格納されているデータとライト要求のあったデータの両方をフラッシュメモリへ書き込むことを保障できない。このため、不良ブロック数や不良領域数が所定値を超えた場合には、フラッシュメモリに空き容量があるにも関わらず、突然データの書き込みが不能になるといった問題があった。
【0010】
それに対する解決策として、NAND型フラッシュメモリで発生したバッドクラスタの数とバッドブロックの数を管理し、バッドクラスタ数、バッドブロック数に応じて、ホスト装置からNAND型フラッシュメモリへのデータの書き込みの際の動作モードを切り替えるという方法がある。クラスタとは、SSDでの論理アドレスとしての管理単位である。クラスタサイズは、セクタサイズの2以上の自然数倍であり、クラスタアドレスは、LBAの所定のビットから上位のビット列で構成される。
この方法においては、SSDの動作モードは、例えば以下の3つのモードに分かれる。
・WBモード(Write Back Mode):キャッシュメモリに一旦データを書き込み、所定の条件に基づきNAND型フラッシュメモリへの追い出しを行う通常の動作モード。
・WTモード:(Write Through Mode):一回のライト要求でキャッシュメモリに書き込まれたデータを、NAND型フラッシュメモリに都度書き込む動作モード。NAND型フラッシュメモリに都度書き込むことで、ホストから書き込まれたデータをできるだけ保障する。SSDは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、WTモードへと遷移する。
・ROモード(Read Only Mode):NAND型フラッシュメモリへの書き込みを伴う処理を全て禁ずるモード。ホストからの全てのライト要求に対してエラーを返し書き込みを行わないようにすることで、SSDが寿命に近づいたときに、ホストからすでに書き込まれていたデータをできるだけ保障できるようにしている。SSDは、バッドクラスタテーブルまたはバッドブロックテーブルの残エントリ数が所定数以下になったとき、またはフリーブロックが不足となったとき、ROモードへと遷移する。
【0011】
WBモード及びWTモードにおいては、SSDはホストからリード要求とライト要求の両方を受け付けて処理をする。一方、ROモードにおいては、SSDはホストからリード要求を受け付けて処理をするが、ホストからのライト要求に対しては処理をせずエラーを返す。
【0012】
Windows(登録商標)などのオペレーティングシステム(OS)を搭載したホストに対してSSDが接続されたとき、ホストはSSDに対してライト要求を送信し、ライト要求が正常に処理されたとき、ホストはSSDを利用可能な外部記憶装置として認識する。
【0013】
一方、上記ROモードに遷移したSSDがWindows(登録商標)を搭載したホストに接続されたとき、ホストがSSDに対してライト要求を送信すると、SSDはホストにエラーを返すため、ホストはSSDを利用可能な外部記憶装置として認識しない場合がある。そのため、読み出しは可能なROモードのSSDをホストに接続しても、過去に記録したデータをSSDから読み出せない可能性があった。
【0014】
そこで、本実施形態においては、ROモードに移行したSSDをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【0015】
以下に添付図面を参照して、実施形態にかかる情報処理装置、外部記憶装置、ホスト装置、中継装置及び情報処理装置の制御方法を詳細に説明する。なお、これら実施形態により本発明が限定されるものではない。
【0016】
(第1の実施形態)
図1にコンピュータシステムの第1の実施形態の構成を示す。本コンピュータシステム1は、外部記憶装置としてのSSD10と、ホスト100と、SSD10とホスト100とを結ぶメモリインタフェースとしての例えばATAインタフェース90とから構成されている。外部記憶装置として、SSD10以外にハードディスクドライブやハイブリッドハードディスクドライブや、USBメモリや、SDカードなど、他の読み書き可能な不揮発性記憶装置であってもよい。ホスト100としては、パーソナルコンピュータ、スチルカメラあるいはビデオカメラなどの撮像装置などであってもよいし、タブレットコンピュータやスマートフォンやゲーム機器やカーナビゲーションシステムなどであってもよい。
【0017】
図1に示すように、SSD10は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下NANDメモリと略す)20と、ATAインタフェース90を介してホスト100との信号の送受信を行うインタフェースコントローラ30と、インタフェースコントローラ30とNANDメモリ20との中間バッファとして機能するキャシュメモリ(CM)40aを有する揮発性半導体メモリとしてのRAM(Random Access Memory)40と、NANDメモリ20及びRAM40の管理、制御、及びインタフェースコントローラ30の制御を司るメモリコントローラ50と、SSD10の起動時に初期化等を含む各種起動時処理を行うブートローダとしてのIPL(Initial Program Loader)55と、NANDメモリ20から読み出されたデータの誤り訂正処理を実行するECC訂正回路58と、これら構成要素を接続するバス57を備える。IPL55はメモリコントローラ50に含まれてもよい。ATAインタフェース90のかわりに、USB(Universal Serial Bus)インタフェースなど、その他のインタフェースを用いてもよい。
【0018】
RAM40としては、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase Change Random Access Memory)などを採用することができる。RAM40はメモリコントローラ50に含まれてもよい。
【0019】
NANDメモリ20は、ホスト100によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、RAM40で管理される管理情報をバックアップ用に記憶したりする。NANDメモリ20は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。NANDメモリ20は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、NANDメモリ20では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。
【0020】
図2にNANDメモリ20を構成するNANDメモリチップの内部構成例を示す。NANDメモリ20は、1以上の個数のNANDメモリチップ20080より成る。NANDメモリチップ20080は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。メモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。本実施形態では、個々のメモリセルが上位ページ及び下位ページを使用しての2bit/cellの4値記憶方式の書き込み方式である場合について説明するが、個々のメモリセルが単一ページを使用しての1bit/cellの2値記憶方式の書き込み方式、または上位ページ及び中位ページ及び下位ページを使用しての3bit/cellの8値記憶方式の書き込み方式である場合、あるいは4bit/cell以上の多値記憶方式の書き込み方式を採用する場合であっても本発明の本質は変わらない。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開2010−161199号公報や特開2011−29586号公報に記述されるような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【0021】
図2に示すように、NANDメモリチップ20080は、データを記憶するメモリセルをマトリックス状に配置してなるメモリセルアレイ20082を備えている。メモリセルアレイ20082は複数のビット線と複数のワード線と共通ソース線を含み、ビット線とワード線の交点に電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ20082には、ビット線を制御するためのビット制御回路20083、及びワード線電圧を制御するためのワード線制御回路20085が接続されている。すなわち、ビット線制御回路20083は、ビット線を介してメモリセルアレイ20082中のメモリセルのデータを読み出す一方、ビット線を介してメモリセルアレイ20082中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行う。
【0022】
ビット線制御回路20083には、カラムデコーダ20084、データ入出力バッファ20089及びデータ入出力端子20088が接続されている。メモリセルアレイ20082から読み出されたメモリセルのデータは、ビット線制御回路20083、データ入出力バッファ20089を介してデータ入出力端子20088から外部へ出力される。また、外部からデータ入出力端子20088に入力された書き込みデータは、データ入出力バッファ20089を介して、カラムデコーダ20084によってビット線制御回路20083に入力され、指定されたメモリセルへの書き込みが行われる。
【0023】
また、メモリセルアレイ20082、ビット線制御回路20083、カラムデコーダ20084、データ入出力バッファ20089、及びワード線制御回路20085は、制御回路20086に接続されている。制御回路20086は、制御信号入力端子20087に入力される制御信号に従い、メモリセルアレイ20082、ビット線制御回路20083、カラムデコーダ20084、データ入出力バッファ20089、及びワード線制御回路20085を制御するための制御信号及び制御電圧を発生させる。NANDメモリチップ20080のうち、メモリセルアレイ20082以外の回路部分をNANDコントローラ(NANDC)20081と呼ぶ。
【0024】
図3は、図2に示すメモリセルアレイ20082の構成を示している。メモリセルアレイ20082はNANDセル型メモリセルアレイであり、複数のNANDセルを含んで構成されている。1つのNANDセルは、直列接続されたメモリセルからなるメモリストリングMSと、その両端に接続される選択ゲートS1、S2とにより構成されている。選択ゲートS1はビット線BLに接続され、選択ゲートS2はソース線SRCに接続されている。同一のロウに配置されたメモリセルMCの制御ゲートはワード線WL0〜WLm-1に共通接続されている。また、第1の選択ゲートS1はセレクト線SGDに共通接続され、第2の選択ゲートS2はセレクト線SGSに共通接続されている。
【0025】
メモリセルアレイ20082は、1または複数のプレーンを含んでおり、プレーンは複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。
【0026】
また、1つのワード線に接続された複数のメモリセルは、1物理セクタを構成する。この物理セクタ毎にデータが書き込まれ、読み出される(この物理セクタは、後述するLBAの論理セクタとは無関係である)。1物理セクタには、2bit/cell書き込み方式(4値)の場合例えば2ページ分のデータが記憶される。一方、1bit/cell書き込み方式(2値)の場合は、1物理セクタに例えば1ページ分のデータが記憶され、3bit/cell書き込み方式(8値)の場合、1物理セクタに例えば3ページ分のデータが記憶される。
【0027】
リード動作、プログラムベリファイ動作及びプログラム動作時において、メモリコントローラ50から受信した物理アドレスに応じて、1本のワード線が選択され、1物理セクタが選択される。この物理セクタ内のページの切り替えは物理アドレスによって行われる。本実施形態ではNANDメモリ20は2bit/cell書き込み方式であり、メモリコントローラ50は物理セクタには上位ページ(Upper Page)と下位ページ(Lower Page)の2ページが物理ページとして割り当てられていると取扱い、それら全ページに対して物理アドレスが割り当てられている。
【0028】
2bit/cellの4値NANDメモリは、1つのメモリセルにおける閾値電圧が、4通りの分布を持ち得るように構成されている。図4は、4値NANDセル型フラッシュメモリのメモリセルに記憶される2ビットの4値データ(データ“11”、“01”、“10”、“00”)とメモリセルの閾値電圧分布との関係を示している。なお、図4において、VA1は、下位ページのみ書き込み済みで上位ページが未書き込みの物理セクタについて、2つのデータを読み出す場合に選択ワード線に印加される電圧であり、VA1Vは、A1への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。
【0029】
また、VA2、VB2、VC2は、下位ページと上位ページが書き込み済みの物理セクタについて、4つのデータを読み出す場合に選択ワード線に印加される電圧であり、VA2V、VB2V、VC2Vは、各閾値電圧分布への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。また、Vread1、Vread2は、データの読み出しを行う場合に、NANDセル中の非選択メモリセルに対し印加され、その保持データに拘わらず当該非選択メモリセルを導通させる読み出し電圧を示している。さらに、Vev1、Vev2は、メモリセルのデータを消去する場合において、その消去が完了したか否かを確認するためメモリセルに印加される消去ベリファイ電圧であり、負の値を有する。その大きさは、隣接メモリセルの干渉の影響を考慮して決定される。上述の各電圧の大小関係は、
Vev1<VA1<VA1V<Vread1
Vev2<VA2<VA2V<VB2<VB2V<VC2<VC2V<Vread2
である。
【0030】
なお、消去ベリファイ電圧Vev1、Vev2、Vev3は前述の通り負の値であるが、実際に消去ベリファイ動作においてメモリセルMCの制御ゲートに印加される電圧は、負の値ではなく、ゼロ又は正の値である。すなわち、実際の消去ベリファイ動作においては、メモリセルMCのバックゲートに正の電圧を与え、メモリセルMCの制御ゲートには、ゼロ又はバックゲート電圧より小さい正の値の電圧を印加している。換言すれば、消去ベリファイ電圧Vev1、Vev2、Vev3は、等価的に負の値を有する電圧である。
【0031】
ブロック消去後のメモリセルの閾値電圧分布ERは、その上限値も負の値であり、データ“11”が割り当てられる。下位ページおよび上位ページ書き込み状態のデータ“11”、“01”、“10”、“00”のメモリセルは、それぞれ正の閾値電圧分布ER2、A2、B2、C2を有し(A2、B2、C2の下限値も正の値である)、データ“01”の閾値電圧分布A2が最も電圧値が低く、データ“00”の閾値電圧分布C2が最も電圧値が高く、各種閾値電圧分布の電圧値はA2<B2<C2の関係を有する。下位ページ書き込みかつ上位ページ未書き込み状態のデータ“10”のメモリセルは、正の閾値電圧分布A1を有する(A1の下限値も正の値である)。なお、図4に示す閾値電圧分布はあくまでも一例であって、本発明はこれに限定されるものではない。例えば、図4では閾値電圧分布A2,B2,C2は全て正の閾値電圧分布であるとして説明したが、閾値電圧分布A2は負の電圧の分布であり、閾値電圧分布B2、C2が正の電圧の分布であるような場合も、本発明の範囲に含まれる。また、閾値電圧分布ER1・ER2は正の値であったとしても、本発明はこれに限定されるものではない。また、本実施形態ではER2、A2、B2、C2のデータの対応関係がそれぞれ“11”、“01”、“10”、“00”であるとしているが、たとえばそれぞれ“11”、“01” 、“00”、“10”であるような他の対応関係であってもよい。
【0032】
1つのメモリセルの2ビットデータは、下位ページデータと上位ページデータからなり、下位ページデータと上位ページデータは別々の書き込み動作、つまり、2回の書き込み動作により、メモリセルに書き込まれる。データを“*@”と標記するとき、*は上位ページデータを、@は下位ページデータを表している。
【0033】
まず、下位ページデータの書き込みを、図4の1段目〜2段目を参照して説明する。全てのメモリセルは、消去状態の閾値電圧分布ERを有し、データ“11”を記憶しているものとする。図14に示すように、下位ページデータの書き込みを行うと、メモリセルの閾値電圧分布ERは、下位ページデータの値(“1”、或いは“0”)に応じて、2つの閾値電圧分布(ER1、A1)に分けられる。下位ページデータの値が“1”の場合には、消去状態の閾値電圧分布ERを維持するのでER1=ERであるが、ER1>ERであってもよい。
【0034】
一方、下位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VA1Vを設定し、このベリファイ電圧VA1V以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“10”)に変化する。書き込み動作を所定回繰り返しても閾値電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
【0035】
次に、上位ページデータの書き込みを、図4の2段目〜3段目を参照して説明する。上位ページデータの書き込みは、チップの外部から入力される書き込みデータ(上位ページデータ)と、メモリセルに既に書き込まれている下位ページデータとに基づいて行われる。
【0036】
即ち、図4の2段目〜3段目に示すように、上位ページデータの値が“1”の場合には、メモリセルのトンネル酸化膜に高電界がかからないようにし、メモリセルの閾値電圧Vthの上昇を防止する。その結果、データ“11”(消去状態の閾値電圧分布ER1)のメモリセルは、データ“11”をそのまま維持し(ER2)、データ“10”(閾値電圧分布A1)のメモリセルは、データ“10”をそのまま維持する(B2)。ただし、各分布間の電圧マージンを確保するという点で、上述のベリファイ電圧VA1Vよりも大きい正のベリファイ電圧VB2Vを用いて閾値電圧分布の下限値を調整し、これにより閾値電圧分布の幅を狭めた閾値電圧分布B2を形成するのが望ましい。下限値調整を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
【0037】
一方、上位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VA2V、VC2Vを設定し、このベリファイ電圧VA1V以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、データ“11”(消去状態の閾値電圧分布ER1)のメモリセルは、閾値電圧分布A2のデータ“01”に変化し、データ“10”(A1)のメモリセルは、閾値電圧分布C2のデータ“00”に変化する。このとき、ベリファイ電圧VA2V、VC2Vが用いられて、閾値電圧分布A2、C2の下限値が調整される。書き込み動作を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する書き込みは「書き込みエラー」となる。
【0038】
一方、消去動作においては、消去ベリファイ電位Vevを設定し、このベリファイ電圧Vev以下の閾値電圧となるまで消去動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“00”)に変化する。消去動作を所定回繰り返しても敷地電圧に到達しなかった場合(または閾値電圧に到達しないメモリセル数が所定値以上の場合)、当該物理ページに対する消去は「消去エラー」となる。
【0039】
以上が、一般的な4値記憶方式におけるデータ書き込み方式の一例である。3ビット以上の多ビット記憶方式においても、上記の動作に更に上位のページデータに応じ、閾値電圧分布を8通り以上に分割する動作が加わるのみであるので、基本的な動作は同様である。
【0040】
RAM40は、ホスト100とNANDメモリ20間でのデータ転送用キャッシュとして機能するキャッシュメモリ(CM)40aを有する。また、RAM40は、管理情報記憶用メモリ及び作業領域用メモリとして機能する。RAM40で管理される管理テーブルは、NANDメモリ20に記憶されている各種管理テーブルが起動時などに展開されたものであり、定期的あるいは電源断時にNANDメモリ20に退避保存される。
【0041】
メモリコントローラ50は、NANDメモリ20に記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト100からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト100−NANDメモリ20間のデータ転送制御、RAM40及びNANDメモリ20に記憶された各種管理テーブルの更新・管理などを実行する。
【0042】
ホスト100はSSD10に対し、リード要求またはライト要求を発行する際には、ATAインタフェース90を介して論理アドレスとしてのLBA(Logical Block Addressing)を入力する。LBAは、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。また、ホスト100はSSD10に対し、リード要求またはライト要求を発行する際には、LBAと併せて、リード要求またはライト要求の対象となるセクタサイズを入力する。
【0043】
インタフェースコントローラ30は、リード/ライトが可能な通常の動作モードで使用されるATAコントローラなどのリードライトモード用のインタフェースコントローラ(以下、RWIFコントローラと略す)31と、読み出しのみ許可されるリードオンリーモードにおいて使用される読み出し専用メディアの規格のコントローラである例えばATAPI(ATA Packet Interface)コントローラなどのリードオンリーモード用のインタフェースコントローラ(以下、ROIFコントローラと略す)32と、RWIFコントローラ31及びROIFコントローラ32のいずれかを選択可能な選択スイッチ33,34を含む。
【0044】
選択スイッチ33は、RWIFコントローラ31及びROIFコントローラ32のいずれか一方を排他的に選択してATAインタフェース90と接続し、選択スイッチ34は、RWIFコントローラ31及びROIFコントローラ32のいずれか一方を排他的に選択してバス57と接続する。RWIFコントローラ31の選択状態においては、選択スイッチ33はATAインタフェース90とRWIFコントローラ31を電気的接続状態にしており、スイッチ34はバス57とRWIFコントローラ31を電気的接続状態にしている。ROIFコントローラ32の選択状態においては、選択スイッチ33はATAインタフェース90とROIFコントローラ32を電気的接続状態にしており、スイッチ34はバス57とROIFコントローラ32を電気的接続状態にしている。
【0045】
RWIFコントローラ31はSSD10がATAデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、ATA/ATAPI Command Set-2 (ACS-2)で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を00hに、LBA(23:16)を00hとしてホスト100に出力することで、SSD10がATAデバイスであることをホスト100に通知することができる。ROIFコントローラ32はSSD10がATAPIデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト100に出力することで、SSD10がATAPIデバイスであることをホスト100に通知することができる。
【0046】
ROIFコントローラ32は、SSD10が書き込みコマンドをサポートせず読み出し専用であることをホスト100に通知するよう構成される。例えば、ATAインタフェース90を介してホスト100からINCITS Multi-Media Commands-6 (MMC-6)に採用されているコマンドGET CONFIGURATION(46h)を受信したとき、ROIFコントローラ32は、Random Writable(Feature Number=0020h)、Incremental Streaming Writable (Feature Number=0021h)、Write Once(Feature Number=0025h)などのFeaturesにおいて、ライト系機能は全て非サポートであることをホスト100に返信する。これにより、ホスト100側がOSとしてWindows(登録商標)などを使用している場合でも、SSD10が読み出し可能なデバイスとして認識させることが可能となる。なお、ROIFコントローラ32は、RWIFコントローラ31と同じく、SSD10がATAデバイスであることをホスト100に明示的に示すよう構成され、ATAインタフェース90を介してホスト100からデバイス識別情報、たとえばACS−2記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト100に返信するよう構成されてもよい。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0047】
なお、インタフェースコントローラ30及びそれに含まれる各種コントローラの機能は、すべてをLSIなどのハードウェアとして実装してもよいし、一部または全部をファームウェアなどのソフトウェアとして実装してもよい。ファームウェアは、SSD電源オフ時はNANDメモリ20上に保存されているが、ファームウェアとして実装する場合は、SSD電源起動時にRAM40上またはメモリコントローラ50上に、IPL55によって読み出されるようにすればよい。
【0048】
RWIFコントローラ31は、ホスト100からのリード要求、ライト要求、その他要求及びデータを受信し、受信した要求やデータをメモリコントローラ50に送信したり、メモリコントローラ50の制御によりRAM40にデータを送信したりする機能を持つ。また、RWIFコントローラ31は、ホスト100からデバイス識別情報の送信要求を受信したときは、自身が読み書き両方可能なデバイスであるという識別情報をホスト100に対して送信する。
【0049】
ROIFコントローラ32は、ホスト100からのリード要求、ライト要求を除くその他要求及びデータを受信し、受信した要求やデータをメモリコントローラ50に送信したり、メモリコントローラ50の制御によりRAM40にデータを送信したりする機能を持つ。また、ROIFコントローラ32は、ホスト100からデバイス識別情報の送信要求を受信したときは、自身が書き込みをサポートしていないというデバイス識別情報をホスト100に対して送信する。これにより、ホスト100はSSD10が書き込みを非サポートであると認識することになるので、ホスト100からSSD10にライト要求が送信されることはない。自身が書き込みをサポートしていないというデバイス識別情報をホスト100に対して送信後に、ホスト100からSSD10にライト要求が送信された場合には、ROIFコントローラ32がホスト100に対してエラーを返すようにしてもよい。ROIFコントローラ32は、NANDメモリ20の書き込み動作を伴わないコマンドに対しては、RWIFコントローラ31と同様の処理を行ってもよい。
【0050】
IPL55は、SSD10の電源投入時に起動され、NANDメモリ20、RAM40、メモリコントローラ50及びインタフェースコントローラ30の初期化処理を行う。その際、IPL55は、NANDメモリ20の管理情報をNANDメモリ20またはRAM40から読み出す。IPL55は、読み出した管理情報に基づきリードオンリーモード移行条件が成立するか否か、すなわちSSD10が通常の動作モードで使用される状態にあるかあるいはリードオンリーモードにおいて使用される状態にあるかを判断する。IPL55は、この判断の結果、通常モードであると判断した場合は、RWIFコントローラ31を選択するように選択スイッチ33、34を設定し、ROIFコントローラ32を非選択状態にする。一方、IPL55は、読み出した管理情報に基づきSSD10がリードオンリーモードにおいて使用される状態にあると判断すると、ROIFコントローラ32を選択するように選択スイッチ33,34を設定し、RWIFコントローラ31を非選択状態にする。リードオンリーモード移行条件については、後で詳述する。
【0051】
また、メモリコントローラ50は、リード/ライト可能な通常の状態でSSD10が動作中においても、リードオンリーモード状態へ移行させるためのリードオンリーモード移行条件が成立するか否かを判定しており、通常の状態でSSD10が動作中にリードオンリーモード移行条件が成立した場合は、後述のリードオンリーモード移行処理を実行する。このリードオンリーモード移行処理によって、結果的にインタフェースコントローラ30はROIFコントローラ32に切り替わる。
【0052】
つぎに、ホスト100の構成について説明する。ホスト100は、オペレーティングシステム(OS)150と、SSD制御ツール110と、SSD10用のインタフェースドライバ120を含む。インタフェースドライバ120は、SSD10がリード/ライト可能な通常の動作モードであるときに使用されるATAドライバなどのリードライトモード用のインタフェースドライバ(以下、RWIFドライバと略す)121と、SSD10がリードオンリーモードであるときに使用されるATAPIドライバの読み出し専用ドライバなどのリードオンリーモード用のインタフェースドライバ(以下、ROIFドライバと略す)122と、SSD10に適用されるドライバをRWIFドライバ121及びROIFドライバ122より選択する選択スイッチ123,124を含む。SSD制御ツール110は、選択スイッチ123,124を介して、SSD10に適用されるドライバをRWIFドライバ121またはROIFドライバ122のいずれか一方から選択するか、あるいはどちらも非選択状態にすることが可能である。ソフトウェア140は、SSD制御ツール110以外のソフトウェアであって、SSD10を使用するソフトウェアである。
【0053】
SSD制御ツール110は、例えば、図5に示すように、ホスト100が電源オフになっているときはSSD10のNANDメモリ20の領域にSSD制御ツール110Aとして格納されているが、ホスト100の起動時またはプログラム起動時に、NANDメモリ20から主メモリ202にロードされる。一方、ホスト100に複数の外部記憶装置が接続されている場合は、図6に示すように、SSD制御ツール110は、SSD制御ツール100Bとして、SSD10とは別の外部記憶装置300の領域に格納されており、ホスト100の起動時またはプログラム起動時に、外部記憶装置300から主メモリ202にロードされるようにしてもよい。特に、外部記憶装置300がOS150を格納するシステムドライブとして使用されており、SSD10が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブとしての外部記憶装置300にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブとしてのSSD10にはユーザデータを格納するドライブとして使用するというように、ドライブ10とドライブ300の役割を明確に分ける観点で、システムドライブとしての外部記憶装置300にSSD制御ツール110を格納することが望ましい。
【0054】
SSD制御ツール110のセットアップをユーザが行う労力を省く観点では、例えば図5や図6に示したように、SSD制御ツール110がSSD10や外部記憶装置300に格納された状態でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザがSSD制御ツールのインストールの可否を選択できるようにする観点、及びユーザに最新のSSD制御ツールを提供できるようにするという観点では、SSD制御ツールは、WEBからのダウンロード、またはDVD−ROMやUSBメモリなど外部記憶媒体からのインストールによりSSD10や外部記憶装置300に格納できるようにすることが望ましい。
【0055】
図7はSSD制御ツールをWEBからダウンロードする場合の一例を示すものである。図7において、SSD制御ツール110CはWEBサーバ内の記憶媒体400に格納されており、SSD制御ツール110Cはインターネットやローカルネットワークや無線LANなどのネットワークを介して、たとえばLANコントローラ208を経由してSSD10あるいは外部記憶装置300にダウンロードされる。
【0056】
図8はDVD−ROMやCD−ROMなど光学メディアからSSD制御ツールをインストールする場合の一例を示すものである。SSD制御ツール110DはDVD−ROMやCD−ROMなどの光学メディア500に格納されており、光学メディア500が光学ドライブ206にセットされることで、SSD制御ツール110Dは光学ドライブ206を介してSSD10あるいは外部記憶装置300にインストールされる。
【0057】
図9はUSBメモリからSSD制御ツールをインストールする場合の一例を示すものである。SSD制御ツール110EはUSBメモリ600に格納されており、USBメモリ600がUSBコントローラ209に接続されることで、SSD制御ツール110EはUSBコントローラ209を介してSSD10あるいは外部記憶装置300にインストールされる。USBメモリ600のかわりに、SDカードなどその他外部メモリであってもよいのはもちろんである。ユーザによる入手容易性の観点から、光学メディア500やUSBメモリ600はSSD10の出荷時に、付属品としてSSD10と一緒に梱包されていることが望ましい。一方、光学メディア500やUSBメモリ600は、ソフトウェア商品として単独に販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【0058】
選択スイッチ124は、RWIFドライバ121及びROIFドライバ122のいずれか一方を排他的に選択してATAインタフェース90と接続し、選択スイッチ123は、RWIFドライバ121及びROIFドライバ122のいずれか一方を排他的に選択してソフトウェア140と接続する。RWIFドライバ121の選択状態においては、選択スイッチ124はATAインタフェース90とRWIFドライバ121を接続状態にしており、スイッチ123はソフトウェア140とRWIFドライバ121を接続状態にしている。ROIFドライバ122の選択状態においては、選択スイッチ124はATAインタフェース90とROIFドライバ122を接続状態にしており、選択スイッチ123はソフトウェア140とROIFドライバ122を接続状態にしている。
【0059】
図10に、コンピュータシステム1の外観的構成を示す。図10は、一般的なデスクトップ型のパーソナルコンピュータの構成を示している。SSD10はATAインタフェース90としてのSATAケーブルを介してマザーボード130に物理的に接続され、マザーボード130上に実装されたサウスブリッジを介して、マザーボード130上に取り付けられたCPU(図示せず)に電気的に接続されている。SSD10は電源ケーブル131を介して電源回路132に接続されている。マザーボード130には、ディスプレイ133、キーボード134、マウス135などが接続されている。コンピュータシステムとしては、デスクトップ型に限らず、ラップトップ型やノート型のパーソナルコンピュータにも適用可能である。
【0060】
図11は、SSD10を搭載したホスト100のシステム構成例を示すものである。ホスト100は、CPU200、ノースブリッジ201、DRAMなどの主メモリ202、表示コントローラ203、ディスプレイ133、サウスブリッジ205、光学ドライブ206、BIOS−ROM207、LANコントローラ208、USBコントローラ209、キーボード134、マウス135等を備えている。
【0061】
CPU200は、コンピュータシステムの動作を制御するために設けられたプロセッサであり、SSD10から主メモリ202にロードされるオペレーティングシステム(OS)を実行する。更に、光学ドライブ206が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU200は、それらの処理を実行する。
【0062】
また、CPU200は、BIOS−ROM207に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、コンピュータシステム内のハードウェア制御のためのプログラムである。
【0063】
ノースブリッジ201は、CPU200のローカルバスと接続するブリッジデバイスである。ノースブリッジ201には、主メモリ202をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ201は、表示コントローラ203との通信などを実行する機能も有している。
【0064】
主メモリ202は、プログラムやデータを一時的に記憶し、CPU200のワークエリアとして機能する。主メモリ202は、例えばDRAMから構成される。
【0065】
ビデオコントローラ203は、コンピュータシステムのディスプレイ133を制御するビデオ再生コントローラである。
【0066】
サウスブリッジ205は、CPU200のローカルバスと接続するブリッジデバイスである。サウスブリッジ205は、各種ソフトウェア及びデータを格納する記憶装置であるSSD10を、ATAインタフェース90を介して制御する。
【0067】
コンピュータシステムでは、セクタ単位でSSD10へのアクセスを行う。ATAインタフェース90を介して、ライトコマンド(ライト要求)、リードコマンド(リード要求)、フラッシュコマンド等がSSD10に入力される。
【0068】
また、サウスブリッジ205は、BIOS−ROM207、光学ドライブ206、LANコントローラ208、USBコントローラ209をアクセス制御するための機能も有している。USBコントローラ209にキーボード134、マウス135が接続されている。
【0069】
図11において、OS150、SSD制御ツール110、RWIFドライバ121、ROIFドライバ122などを含むインタフェースドライバ120、ソフトウェア140は、コンピュータシステムの電源がオフの時はSSD10上に保持されており、ホストの電源オン時またはそれらの機能を呼び出した際は、SSD10から主メモリ202上にロードされる。主メモリ202上にロードされたインタフェースドライバ120はノースブリッジ201を介してCPU200に読み出され、読み出されたインタフェースドライバの情報をもとにCPU200がサウスブリッジ205を介してSSD10の制御を行う。
【0070】
図12に、コンピュータシステムの各種要素の階層構造を示す。SSD制御ツール110及びソフトウェア140は、通常はSSD10と直接通信せずに、OS150及びインタフェースドライバ120を経由してSSD10と通信する。SSD制御ツール110やソフトウェア140がSSD10に対しリード要求、ライト要求などの命令を送信する必要が生じた場合、SSD制御ツール110やソフトウェア140は、OS150にファイル単位のアクセス要求を送信する。OS150はOS150に内包されるファイル管理テーブルを参照し、アクセス要求のあったファイルに対応するSSD10の論理アドレス(LBA)を特定し、対応するLBAを含む命令をインタフェースドライバ120に送信する。インタフェースドライバ120はOS150からの命令を当該インタフェース固有の命令に変換し、SSDに送信する。
【0071】
SSD10から応答が返ってきた場合、インタフェースドライバ120が当該インタフェース固有の応答をOS150の命令に変換してOS150に送信する。OS150は変換後の応答がどのソフトウェアに対する応答かを特定し、特定したソフトウェアに対して応答を返す。
【0072】
一方、SSD制御ツール110は、インタフェースドライバ120に対してOS150を介さずに直接アクセスすることができる。SSD制御ツール110は、インタフェースドライバに直接アクセスすることで、インタフェースドライバのうち、RWIFドライバ121とROIFドライバ122のどちらが有効であるかを排他的に選択することができる。RWIFドライバ121が有効である場合は、RWIFドライバ121がOS150とSSD10との中継をし、ROIFドライバ122は何もしない。ROIFドライバ122が有効である場合は、ROIFドライバ122がOS150とSSD10との中継をし、RWIFドライバ121は何もしない。なお、SSD制御ツール110は、OS150を介して、RWIFドライバ121とROIFドライバ122を択一選択することとしてもよい。
【0073】
SSD制御ツール110は、ホスト起動時またはSSD接続時、SSDのデバイス識別情報をSSD10から取得する。このデバイス識別情報に基づきSSD10が読み書き可能なデバイスであるか書き込み非サポートのデバイスであるかを判定し、この判定結果に基づきインタフェースドライバ120の切り替え設定を行う。SSD10が読み書き可能なデバイスであると判定した場合は、RWIFドライバ121を有効とし、SSD10が書き込み非サポートのデバイスであると判定した場合は、ROIFドライバ122を有効とする。また、SSD制御ツール110は、ライト要求に対するSSD10からの応答がエラーであった場合、SSD10がリードオンリーモードに切り替わったと判断し、SSD10を再起動するとともに、インタフェースドライバ120をRWIFドライバ121からROIFドライバ122に切り替える。
【0074】
SSD10のデータ破壊や故障によるユーザデータ損失を防止する観点では、ROIFドライバ122は、SSD10に対する書き込みコマンドを一切送信しないよう構成されることが望ましい。しかし、ROIFドライバ122は、たとえばオペレーティングシステムのシステム情報など一部のデータをSSD10に書き込む必要がある場合は、例外としてSSD10に当該データを書き込むことを許可してもよいが、当該データはデータ量がNANDメモリ20の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいSSD10に対してデータを書き込んでしまうことを防止するために、ROIFドライバ122は、たとえばACS-2記載の35h WRITE DMA EXTや61h WRITE FPDMA QUEUEDのような、SSD10に対する通常の書き込みコマンドは一切送信せず、SSD10に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりSSD10に対する書き込みを許可するようにすることが望ましい。ROIFドライバ122の適用時(ROモード時)であっても例外的に特殊コマンドを用いた書き込みを行えるようにする場合、SSD10がROモードである場合であっても、前記した特殊コマンドをホスト100から受理して正常にデータ書き込み処理するようメモリコントローラ50およびROIFコントローラ32が構成される必要がある。
【0075】
図5にSSD10で使用する管理情報の構成を示す。この管理情報は、前述したように、NANDメモリ20で不揮発記憶されている。NANDメモリ20で記憶された管理情報がSSD10の起動時にRAM40に展開されて使用される。RAM40上の管理情報は、定期的あるいは電源断時にNANDメモリ20に退避保存される。RAM40がMRAMやFeRAMなどのような不揮発RAMである場合には、この管理情報はRAM40にのみ記憶されるようにしてもよく、この場合はこの管理情報はNANDメモリ20には記憶されない。
【0076】
図5に示すように、管理情報には、フリーブロックテーブル21と、バッドブロックテーブル22と、アクティブブロックテーブル23と、アクティブページテーブル24、リードオンリー(RO)モードフラグ25と、統計情報26を含む。
・フリーブロックテーブル(FBテーブル)21は、NANDメモリ20に書き込みを行うときに書き込み用に新規に割り当てることのできるNANDメモリの物理ブロック(フリーブロック:FB)のIDを管理する。また、物理ブロックID毎に消去回数を管理している。
・バッドブロックテーブル(BBテーブル)22は、誤りが多いなど記憶領域として使用できない物理ブロック(物理ブロック)としてのバッドブロック(BB)のIDを管理する。
・アクティブブロックテーブル(ABテーブル)23は、用途が割り当てられた物理ブロックであるアクティブブロック(AB)を管理する。ABテーブル23では、LBAと、アクティブブロック(AB)のIDとの対応関係を管理する。また、物理ブロックID毎に消去回数を管理している。
・アクティブページテーブル(APテーブル)24は、LBAと、用途が割り当てられた物理ブロックID及び物理ページIDとの対応関係を管理する。
・ROモードフラグ25は、出荷時及び通常時は0が書き込まれ、SSDがROモードとして動作するときに1が書き込まれる。
・統計情報26は、SSD10の信頼性に関わる種々のパラメータ(X01〜X24)を格納する。
【0077】
統計情報としては、バッドブロック数総計(統計情報X01)、消去回数総計(統計情報X02)、消去回数平均値(統計情報X03)、NANDメモリの書き込みエラー発生回数累積値(統計情報X04)、NANDメモリの消去エラー発生回数累積値(統計情報X05)、読み出し論理セクタ数総計(統計情報X06)、書き込み論理セクタ数総計(統計情報X07)、ECC訂正不能回数総計(統計情報X08)、nビット〜mビットECC訂正単位総計数(統計情報X09)、SATA通信のRエラー発生回数(統計情報X10)、SATA通信のエラー発生回数(統計情報X11)、RAM40のエラー発生回数(統計情報X12)、SSD10の使用時間総計(統計情報X13)、温度が推奨動作温度の最高値を上回った時間累計(統計情報X14)、温度が推奨動作温度の最低値を下回った時間累計(統計情報X15)、コマンドの応答時間最大値(統計情報X16)、コマンドの応答時間平均値(統計情報X17)、NANDメモリの応答時間最大値(統計情報X18)、NANDの応答時間平均値(統計情報X19)、現在温度(統計情報X20)、最高温度(統計情報X21)、最低温度(統計情報X22)、統計情報増加率(統計情報X23)、NAND整理失敗フラグ(統計情報X24)などが含まれる。
【0078】
バッドブロック数総計(統計情報X01)について説明する。SSD10内のNANDメモリ20の物理ブロックが一つバッドブロックとして追加されるごとに統計情報X01が1インクリメントされる。統計情報X01はSSD10の製造時(検査工程前)にゼロにリセットされていることが望ましく、検査工程でエラーが発生したり、閾値分布の分布間マージンが少ないことが判明したブロックは、あらかじめバッドブロックに加えておくことがさらに望ましい。統計情報X01は、統計情報26に格納せずBBテーブル22から直接計算してもよい。統計情報X01が大きいほど信頼性が悪化していることを示す。
【0079】
消去回数総計(統計情報X02)について説明する。統計情報X02はSSD10内のNANDメモリ20の全ブロックの消去回数累計値を示す。SSD10内のNANDメモリ20の物理ブロックが一つ消去されるごとに統計情報X02が1インクリメントされる。統計情報X02はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X02はSSD統計情報26に格納せずFBテーブル21、BBテーブル22、ABテーブル23から直接計算してもよい。統計情報X02が大きいほど信頼性が悪化していることを示す。
【0080】
消去回数平均値(統計情報X03)について説明する。統計情報X03はSSD10内のNANDメモリ20の全ブロックの消去回数の1ブロックあたり平均値を示す。管理情報を格納するブロックなど一部のブロックを統計情報X03の集計対象から除外してもよい。統計情報X03はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X03は統計情報26に格納せずFBテーブル21、BBテーブル22、ABテーブル23から直接計算してもよい。統計情報X03が大きいほど信頼性が悪化していることを示す。
【0081】
NANDメモリの書き込みエラー発生回数累積値(統計情報X04)について説明する。統計情報X04はSSD10内のNANDメモリ20で書き込みエラーが1書き込み単位で発生するごとに1加算される(ブロック単位で加算してもよい)。統計情報X04はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X04が大きいほど信頼性が悪化していることを示す。
【0082】
NANDメモリの消去エラー発生回数累積値(統計情報X05)について説明する。統計情報X05はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。SSD10内のNANDメモリ20で消去エラーが1ブロックで発生するごとに統計情報X05が1加算される。複数のブロックをまとめて消去単位とし、この消去単位1つで消去エラーが発生するごとに統計情報X05に1加算するようにしてもよい。統計情報X05が大きいほど信頼性が悪化していることを示す。
【0083】
読み出し論理セクタ数総計(統計情報X06))について説明する。統計情報X06は、インタフェースコントローラ30が読み出しデータとしてホスト装置100に送信したデータの論理セクタ数合計である。統計情報X06はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X06が大きいほど信頼性が悪化していることを示す。
【0084】
書き込み論理セクタ数総計(統計情報X07)について説明する。統計情報X07は、RWIFコントローラ31が書き込みデータとしてホスト装置100から受信したデータの論理セクタ数合計である。統計情報X07はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X07が大きいほど信頼性が悪化していることを示す。
【0085】
ECC訂正不能回数総計(統計情報X08)について説明する。ECC訂正回路58が行うECC訂正によりエラービットが修復できなかった場合に、1読み出し単位ごとに統計情報X08を1インクリメントする。メモリコントローラ50がNANDメモリ20からデータを読み出すと、メモリコントローラ50は読み出したデータをECC訂正回路58に送信して、データ誤りがある場合はECC訂正を行い、訂正したデータをインタフェースコントローラ30を介してホストに送信する。データ誤りがECC訂正回路58によって訂正できなかった場合は、メモリコントローラは統計情報X08をカウントアップするか、訂正できなかったデータ誤り量で統計情報X08をインクリメントする。エラー訂正できなかったエラービット数の推定値を加算するようにしてもよいし、エラー訂正できなかったブロックの数を加算するようにしてもよい。統計情報X08はSSD10の製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X08が大きいほど信頼性が悪化していることを示す。
【0086】
nビット〜mビットECC訂正単位総計数(統計情報X09)について説明する。n,mは自然数で、0≦n≦m≦訂正可能最大ビット数である。ECC訂正回路58がECC訂正単位(たとえば物理ページ)に対してECC訂正を行った時、全エラービットが正常に修復され、かつ修復されたエラービット数がn以上m以下である場合、ECC訂正単位1つにつき「nビット〜mビットECC訂正単位総計数」を1加算する。ECC訂正により1訂正単位につき最大64ビット訂正可能である場合、たとえば、「1ビット〜8ビットECC訂正単位総計数」「9ビット〜16ビットECC訂正単位総計数」「17ビット〜24ビットECC訂正単位総計数」「25ビット〜32ビットECC訂正単位総計数」「33ビット〜40ビットECC訂正単位総計数」「41ビット〜48ビットECC訂正単位総計数」「49ビット〜56ビットECC訂正単位総計数」「57ビット〜64ビットECC訂正単位総計数」の8つのパラメータを用意し、ECC訂正が正常に行われた場合、1ECC訂正単位のECC訂正につきこれら8つのパラメータのうちいずれか1つに1がインクリメントされる(または訂正したデータ誤り量でインクリメントしてもよい)。統計情報X09はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X09が大きいほど信頼性が悪化していることを示す。
【0087】
SATA通信のRエラー発生回数(統計情報X10)について説明する。統計情報X10はSATA規格におけるRエラー(Reception Error, R_ERR)が1回発生するごとに1インクリメントされる。ホストとSSDの間で送受信されるフレームにたとえばCRCエラーなど何らかのエラーがあった場合、Rエラーとしてカウントされる。統計情報X10として、SATA規格のPhy Event Countersのカウンタのいずれかを採用してもよい。統計情報X10はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。統計情報X10が大きいほど信頼性が悪化していることを示す。
【0088】
SATA通信のエラー発生回数(統計情報X11)について説明する。統計情報X11は、その他の(Rエラー以外の)SATA通信での異常が1回発生するごとに1インクリメントされる。たとえば、ATAインタフェース90やインタフェースコントローラ30やメモリコントローラ50がSATA Generation3規格として設計されているにも関わらず、実際にSSD10やホスト装置100との間でネゴシエーションされた通信規格がGeneration2のようなGeneration3より低速の通信規格であった場合、SATA通信上のエラーとみなし、統計情報X11を1インクリメントする。統計情報X11はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0089】
RAM40のエラー発生回数(統計情報X12)について説明する。たとえば、RAM40にECC回路やエラー検知回路を搭載している場合、ECC訂正できなかった旨の信号やエラー検知された旨の信号をRAM40からメモリコントローラ50が受け取った場合、統計情報X12を1インクリメントする。統計情報X12はSSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0090】
SSD10の使用時間総計(統計情報X13)について説明する。SSD10の電源がONになっている間、メモリコントローラ50がクロックをカウントしたり内部の時計回路から時刻情報を受信することで、経過時間をインクリメントする。あるいは、メモリコントローラ50がホスト装置100から定期的にホスト装置100の時刻情報を受信するようにし、その時刻情報の差分をインクリメントするようにしてもよい。統計情報X13は、SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0091】
温度が推奨動作温度の最高値を上回った時間累計(統計情報X14)について説明する。たとえば、SSD10の基板上、メモリコントローラ50内、NANDメモリ20内など、SSD10内に温度計が実装されている場合、メモリコントローラ50は温度計から定期的に温度情報を受信する。受信した温度が推奨動作温度(たとえば100℃)を上回った場合、メモリコントローラ50はクロックや内部の時計やホスト装置100から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0092】
温度が推奨動作温度の最低値を下回った時間累計(統計情報X15)について説明する。SSD10内に温度計が実装されている場合、メモリコントローラ50は温度計から定期的に温度情報を受信する。受信した温度が推奨動作温度(たとえば−40℃)を下回った場合、メモリコントローラ50はクロックや内部の時計やホスト装置100から取得する時刻情報をもとに、推定動作温度以上で動作している時間数をインクリメントしていく。統計情報X15は、SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0093】
コマンドの応答時間最大値(統計情報X16)について説明する。統計情報X16は、ホスト装置100からコマンドを受信してから、ホスト装置100へ応答するまで(またはコマンド実行完了するまで)に要した時間(またはクロック数)の最大値である。X16を上回る応答時間が発生した場合は、この応答時間をX16に上書きする。コマンドそれぞれに対して統計情報X16を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX16がゼロにリセットされていることが望ましい。なお、たとえばコマンドの応答時間としては、
・SSD10の読み出し応答時間:SSD10がホスト100よりリード要求を受信してから、読み出したデータをホスト100に対し送信完了するまでの時間
・SSD10の書き込み応答時間:SSD10がホスト100よりライト要求を受信してから、書き込み完了通知をホスト100に対し返すまでの時間。または、SSD10がホスト100よりライト要求を受信してから、ホスト100より書き込みデータを受信完了するまでの時間。
などがある。応答時間は、例えば、メモリコントローラ50の内部クロックをカウントすることによって計時すればよい。
【0094】
コマンドの応答時間平均値(統計情報X17)について説明する。統計情報X17は、ホスト装置100からコマンドを受信してから、ホスト装置100へ応答するまで(またはコマンド実行完了するまで)に要した時間(またはクロック数)の平均値である。たとえば応答時間リストを一定数RAM40に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報X17を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX17がゼロにリセットされていることが望ましい。
【0095】
NANDメモリの応答時間最大値(統計情報X18)について説明する。統計情報X18は、メモリコントローラ50がNANDメモリ20に命令してから応答を得る(またはコマンド実行完了通知を受信する)までに要した時間(またはクロック数)の最大値である。X18を上回る応答時間が発生した場合は、この応答時間をX18に上書きする。コマンドそれぞれに対して統計情報X18を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX18がゼロにリセットされていることが望ましい。なお、たとえばNANDメモリの応答時間としては、
・NANDメモリ20の読み出し応答時間:メモリコントローラ50がNANDメモリ20に対しリード要求を発行してから、NANDメモリ20からのデータ読み出しが完了するまでの時間
・NANDメモリ20の書き込み応答時間:メモリコントローラ50がNANDメモリ20に対しライト要求を発行してから、NANDメモリ20へのデータ書き込みが完了するまでの時間
・NANDメモリ20の消去応答時間:メモリコントローラ50がNANDメモリ20に対し消去命令を発行してから、NANDメモリ20の消去が完了するまでの時間
などがある。応答時間は、例えば、メモリコントローラ50の内部クロックをカウントすることによって計時すればよい。
【0096】
NANDメモリの応答時間平均値(統計情報X19)について説明する。統計情報X19は、メモリコントローラ50がNANDメモリ20に命令してから応答を得る(またはコマンド実行完了通知を受信する)までに要した時間(またはクロック数)の平均値である。たとえば応答時間リストを一定数RAM40に保持しておき、その応答時間リストの平均値を算出することにより得られる。コマンドそれぞれに対して統計情報X19を保持してもよい。SSD10製造時(検査工程前)またはSSD10出荷時にはX19がゼロにリセットされていることが望ましい。
【0097】
現在温度(統計情報X20)について説明する。SSD10内に温度計が実装されている場合、メモリコントローラ50は温度計から定期的に温度情報を受信する。メモリコントローラ50は温度計から最後に受信した温度を現在温度として統計情報X20に保持する。この値が極端に大きいと(たとえば85℃以上)、SSD10の信頼性に悪影響があり、また、この温度が極端に小さいと(たとえば−10℃以下)、SSD10の信頼性に悪影響があると判断する。
【0098】
最高温度(統計情報X21)について説明する。メモリコントローラ50は、現在温度X20の最大値を最高温度として統計情報X21に保持する。この値が極端に大きいと(たとえば85℃以上)、SSD10の信頼性に悪影響がある。メモリコントローラ50は、X21よりも大きい現在温度を温度計から受信した時、X21を現在温度に書き換える。SSD10製造時(検査工程前)またはSSD10出荷時にはX21がSSD10の動作温度にくらべて十分に小さい温度(たとえば−40℃)にリセットされていることが望ましい。
【0099】
最低温度(統計情報X22)について説明する。メモリコントローラ50は、現在温度X20の最小値を最低温度として統計情報X22に保持する。この値が極端に小さいと(たとえば−40℃以下)、SSD10の信頼性に悪影響がある。メモリコントローラ50は、X22よりも小さい現在温度を温度計から受信した時、X22を現在温度に書き換える。SSD10製造時(検査工程前)またはSSD10出荷時にはX22がSSD10の動作温度にくらべて十分に大きい温度(たとえば120℃)にリセットされていることが望ましい。
【0100】
統計情報増加率(統計情報X23)について説明する。統計情報X01〜X19の最新でない情報(たとえば一定時刻前や、SSD10をパワーオンした時の値や前回SSD10をパワーダウンしたときの値など)を別途保持しておく。統計情報X23は、例えば、下記のいずれかで定義される。
統計情報増加率=(最新統計情報)―(旧情報)
統計情報増加率=((最新統計情報)―(旧情報))/(旧情報を取得してからの経過時間)
統計情報増加率=((最新統計情報)―(旧情報))/(旧情報を取得してからのNANDアクセス回数)
SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0101】
NAND整理失敗フラグ(統計情報X24)について説明する。統計情報X24が1になっていると、NAND整理によっても動作に十分な数のフリーブロック数を確保できないことになる。SSD10製造時(検査工程前)にゼロにリセットされていることが望ましい。この値が大きいほど信頼性が悪化していることを示す。
【0102】
統計情報26としては、上述したすべてのパラメータを格納してもよいし、これらの一部あるいはどれか一つのみを格納してもよい。統計情報26は最新情報をRAM40上に保持し、定期的にNANDメモリ20にバックアップすることが望ましい。一方、RAM40やNANDメモリ20のどちらか一方にのみ保存するようにしてもよいし、当該統計情報をホスト装置100に送信して、ホスト装置100やホスト装置100に接続された記憶装置に保存するようにしてもよい。
【0103】
つぎに、図14を用いてSSD10での書き込み動作を説明する。SSD10がホスト100からライト要求を受信した場合は(ステップS100)、メモリコントローラ50はRAM40上のフリーブロックテーブル21を検索し(ステップS101)、現在のフリーブロック数を取得する。そして、メモリコントローラ50は、フリーブロック数が所定の閾値より少ない場合は(ステップS102)、後述する「NAND整理」を行い(ステップS120)、フリーブロック数が所定の閾値より多い場合は(ステップS102)、フリーブロックテーブル21から新たにフリーブロックを確保し、確保したフリーブロックの物理ブロックIDを取得する。
【0104】
そして、メモリコントローラ50は、取得したフリーブロックに対して書き込み動作を行い(ステップS103)、さらにホスト100から受信したLBA及び物理ブロックID及び当該物理ブロックの消去回数をアクティブブロックテーブル23に追加し、さらにLBA、物理ブロックID及び物理ページIDをアクティブページテーブル24に追加し(ステップS104)、書き込みを行った物理ブロックをフリーブロックテーブル21から削除する(ステップS105)。メモリコントローラ50は以上の書き込み処理の内容を統計情報26に反映する。
【0105】
つぎに、図15を用いてSSD10でのNAND整理(図14:ステップS120)の動作例を説明する。物理ブロックに含まれる全ページのうちアクティブページテーブル24に登録されているページ(有効ページ)はLBAに対応付けられている。一方、物理ブロックに含まれている全てのページが有効ページであるとは限らず、有効ページに該当しないページ(無効ページ)はLBAに対応付けられていない。有効ページとは最新のデータを記憶しているページであり、無効ページとは同一LBAのデータが他の場所に書きこまれ、参照されることがなくなったページである。物理ブロックは無効ページの分だけデータに空きがあることになり、有効ページのデータを集めて違うブロックに書き直すNAND整理を実行することでフリーブロックを確保することができる。
【0106】
まず、行番号i=0にし、空き領域累計数S=0にする(ステップS121)。メモリコントローラ50は、アクティブブロックテーブル23の先頭行(i=0)を読み出し、先頭行の物理ブロックID(現在物理ブロックID)を取得する(ステップS122)。つぎに、アクティブページテーブル24を読み出し、アクティブページテーブル24における現在物理ブロックIDに対応する有効ページのIDをすべて取得する(ステップS123)。そして、メモリコントローラ50は、取得した有効ページIDの個数分のサイズを物理ブロックのサイズから減算することで、現在物理ブロックのうち無効ページのサイズvを求め(ステップS124)、v>0であるときは(ステップS125)、現在物理ブロックをNAND整理対象ブロックリストに加える(ステップS127)。さらに、メモリコントローラ50は、空き領域累計数Sに現在物理ブロックの無効ページサイズvを加算し、空き領域累計数Sを更新する(ステップS128)。
【0107】
ステップS125でv=0である場合、あるいはステップS125で空き領域累計数Sが物理ブロックサイズに到達していない場合は、メモリコントローラ50は、列番号iを+1し(ステップS126)、アクティブブロックテーブル23の次の行(i=1)を読み出し、次の行の物理ブロックID(現在物理ブロックID)を取得する(ステップS122)。以下同様にして、ステップS123〜S128の手順を実行する。そして、ステップS129で空き領域累計数Sが物理ブロックサイズに到達するまで、ステップS122〜S129の手順を繰り返す。
【0108】
そして、ステップS129において、これまでに取得した無効ページのサイズ総量Sが物理ブロックのサイズより大きくなった場合は、メモリコントローラ50は、NAND整理対象ブロックリスト上の全有効ページのデータをNANDメモリ20から読み出してRAM40に書き込み(ステップS130)、さらに、NAND整理対象ブロックリスト上の全物理ブロックに対して消去処理を行い(ステップS131)、消去処理を行った全物理ブロックをアクティブブロックテーブル23から削除してフリーブロックテーブル21に追加し(その際、消去回数をインクリメントする)、読み出した全ページをアクティブページテーブル24から削除する(ステップS132)。そして、メモリコントローラ50は、フリーブロックテーブル21から新たなフリーブロックを取得し、取得したフリーブロックに対しRAM40に書き込んだデータを書き込み(ステップS133)、データを書き込んだフリーブロックの物理ブロックID、対応するLBA及び当該ブロックの消去回数をアクティブブロックテーブル23に追加し、さらにデータを書き込んだページ及び対応するLBAをアクティブページテーブル24に追加し(ステップS134)、データが書き込まれたブロックのブロックIDをフリーブロックテーブル21から削除する(ステップS135)。メモリコントローラ50は上記NAND整理の処理内容を統計情報26に反映する。なお、ステップS131の消去処理はステップS120のNAND整理内では行わずに、ステップS103の書き込み動作直前におこなって消去回数をインクリメントするようにしてもよい。
【0109】
このようなNAND整理により、書き込みに対し十分な数のフリーブロックを確保できるのが通常である。NAND整理によっても、書き込みに対し十分な数のフリーブロックを確保できなかった場合は(ステップS136)、後述する「ROモード移行処理」を行う(ステップS137)。
【0110】
上記NAND整理は、ホスト100からライト要求を受信した時だけでなく、ホストから最後に命令を受信してから所定時間経過した時、またはホスト100からスタンバイやアイドル状態に移行するコマンドを受信した時などに実行してもよい。
【0111】
つぎに、図16を用いてSSD10での読み出し処理について説明する。SSD10がホスト100からリード要求を受信した場合は(ステップS140)、メモリコントローラ50は、アクティブブロックテーブル23を検索し(ステップS141)、ホスト100から受信したLBAに対応する物理ブロックIDがアクティブブロックテーブル23に存在するか否かを調べる(ステップS142)。アクティブブロックテーブル23に物理ブロックIDが存在する場合は、メモリコントローラ50は、アクティブページテーブル24の該当物理ブロックIDに含まれる物理ページIDを取得し(ステップS144)、取得した物理ページIDに対応する物理ページからデータを読み出し(ステップS145)、読み出したデータを、RAM40を介してホスト100へ送信する(ステップS146)。メモリコントローラ50は以上の読み出し処理の内容を統計情報26に反映する。
【0112】
ステップS142において、ホスト100から受信したLBAに対応する物理ブロックIDがアクティブブロックテーブル23上に存在しない場合、メモリコントローラ50は、NANDメモリ20からの読み出し動作を行わずに、例えば全ビットが‘0’であるデータを、ホスト100からの要求に対応するデータ長分、ホスト100に送信する(ステップS143)。
【0113】
次に、図17を用いてSSD10でのエラー処理について説明する。ホスト100からのライト要求やリード要求に対する処理は通常は上記のように行われるが、NANDメモリ20に対する書き込み動作(プログラム動作)で書き込みエラーが発生する場合、NANDメモリ20に対する消去動作で消去エラーが発生する場合、NANDメモリ20に対する読み出し動作の際にECC(Error Correcting Code)エラー(誤り訂正処理の失敗)が生じる場合などがあり、これらに対する例外処理が必要となる。
【0114】
メモリコントローラ50は、上記の何れかのエラーが発生した場合(ステップS150)、エラーが発生した物理ブロックをバッドブロックテーブル22に追加し(ステップS151)、エラーが発生した物理ブロックをアクティブブロックテーブル23及びフリーブロックテーブル21から削除することで(ステップS152)、以後は、エラーが発生した物理ブロックにアクセスできないようにする。この際、エラーが発生した物理ブロックのデータを別の物理ブロックにコピーしてもよい。メモリコントローラ50は上記のエラー処理の内容を統計情報26に反映する。これらエラー処理の一例を、読み出し処理、書き込み処理、NAND整理処理の解説において紹介したが、このエラー処理はこれらの例に限らず、NANDメモリ20に対する全ての読み出し処理、書き込み処理、消去処理に対して適用可能であることは言うまでもない。
【0115】
SSD10を利用しているうちに、例えば、NANDメモリ20の各ブロックの信頼性が劣化していき、バッドブロックの数が増えていき、フリーブロック数とアクティブブロック数の和が減っていくことになる。さらにSSD10を使用していると、NAND整理を行っても、書き込み処理を行うのに十分なフリーブロック数を確保できなくなり、これがSSD10の寿命である。このような場合に、ROモード移行条件が成立したと判断して、ROモード移行処理を行う。
【0116】
次に、図18を用いてSSD10でのROモード移行処理について説明する。SSD10が動作中、メモリコントローラ50は、統計情報26を監視することにより、ROモード移行条件が成立したか否かを判定している(ステップS160)。ROモード移行のクライテリアとしてのRMAXとして、たとえば、
RMAX=信頼性保証できる統計情報の値の上限値
を採用する。
【0117】
RMAXは各統計情報X01〜X19、X23、X24に対して、それぞれ別の値を採用することができる。RMAXは、たとえば図19に示すように、統計情報の生の値(Raw Data)と、SSD10の不良率の関係を開発段階に導き出し、不良率が許容値(たとえば100ppm)を超える時の統計情報の生の値をRMAXとして採用することが望ましい。不良率として、SSD10の不良率の代わりにSSD10に書き込まれたデータの不良率や、NANDメモリ20の不良率や、NANDメモリ20のメモリセルの不良率などその他不良率を採用してもよい。たとえば、SSD10の開発段階で、多数個(たとえば100個)の試験用SSD10群に対して高温で書き込み動作を繰り返しながら、書き込んだデータが一定時間以上正しく記憶され続けるかを検証する摩耗試験を行い、同時に統計情報をモニタしつづけ、不良率が一定割合に到達する時点での前記統計情報の生の値をRMAXとして採用すればよい。たとえば、摩耗したSSD10のLBA全域に対して高温状態(たとえば75℃)で初期条件としてデータ(たとえばランダムデータ)を書き込み、高温状態(たとえば85℃)である時間以上放置して、その後SSD10の温度を下げ(たとえば25℃)、SSD10のLBA全域に対して読み出し動作を行い、読み出したデータがECC訂正できない場合(またはECC訂正できないデータが一定数以上の場合、または読み出したデータと初期条件で書き込んだデータが一致しない場合、または読み出しができなかった場合)、これをSSD10の不良として定義し、不良したSSD10の数を、試験を行ったSSD10の数で割った値を不良率として採用すればよい。この不良率が、前述した許容できる不良率を統計的に有意に下回る統計情報の生の値をRMAXとして採用すればよい。RMAXにある程度マージンをもたせて、
RMAX´=RMAX−マージン
としたRMAX´をRMAXとして採用してもよい。
【0118】
また、RMAXは開発時の設計シミュレーションによって求めてもよい。たとえば、設計シミュレーションにより、SSD10の不良率などの不良率がある一定値以上となるような統計情報の値を求めておき、その値をRMAXとして採用する。
【0119】
また、RMAXは、図20に示すように、SSD10の性能(読み出し性能や書き込み性能など)が所定値以下となる統計情報の値をSSD10の測定やシミュレーションにより特定し、これをRMAXとして採用してもよい。たとえば、NANDメモリの信頼性が悪化するとNANDメモリのメモリセルから読み出されるデータが誤っている確率が増大するため、データ読み出し時のECC訂正に要する時間が増大し、SSD10の信頼性とSSD10の読み出し性能との間には強い相関が現れる可能性がある。たとえば、シーケンシャルな読み出し性能の測定として、以下の性能測定を行う。
1.SSD10に対し、ACS-2のF4h SECURITY ERASE UNIT (Normal Erase)を行う。
2.SSD10のLBA全域に対し、データ(たとえばランダムなデータ)をシーケンシャルに書き込む。
3.全LBAに対してシーケンシャルに読み出しを行い、単位時間あたりに読み出されたデータ量平均値(単位MiB/s)を求める(読み出し速度)。その他、性能情報(たとえば性能速度)の測定には、非特許文献6に記述されるような規格に従い測定を行ってもよい。
【0120】
このようにして、図20に示すように、性能情報の統計情報依存性を求め、たとえばSSD10の出荷時のシーケンシャルな読み出し速度期待値が400MiB/sであって、公開スペックの規定などにより許容できる最低性能が300MiBである場合、読み出し速度期待値が300MiBとなるような統計情報の値を求め、これをRMAXとして採用すればよい。
【0121】
このように、RMAXは開発者が任意に定めることができ、上記に示した以外の方法や基準によっても定めることが可能である。
【0122】
メモリコントローラ50はRMAXと統計情報の値(X01〜X19、X23、X24のいずれか)を比較し、統計情報の値>RMAX、または統計情報の値≧RMAXとなった時、SSD10が寿命に到達しROモードに移行すべきと判断する(ステップS160:Yes)。たとえば、NAND整理失敗フラグ(統計情報X24)の場合、これが1である場合にSSD10が寿命に到達しROモードに移行すべきと判断する。たとえば、バッドブロック数総計(統計情報X01)の場合、これが所定値を上回った場合にSSD10が寿命に到達しROモードに移行すべきと判断する。
【0123】
メモリコントローラ50は統計情報の値(X01〜X19、X23、X24のいずれか)のうち複数個をそれぞれRMAXと比較し、いずれか一つがRMAX以上である場合にROモードに移行すべきと判断するようにしてもよい。
【0124】
上記のようにして、メモリコントローラ50はSSD10が寿命に到達したか否か(SSD10が異常状態であるか否か)を判定し、SSD10が寿命に到達したと判定された場合(SSD10が異常状態であると判定された場合)、後で詳述するROモード移行処理を行う(ステップS160:Yes)。
【0125】
なお、たとえば統計情報として現在温度X20、最高温度X21を採用する場合、たとえばRMAXとしてRMAX=85℃を採用し、統計情報の値>RMAX、または統計情報の値≧RMAXのようなたとえば動作保証外の温度になった時、SSD10が異常状態でROモードに移行すべきと判断し(ステップS160:Yes)、その後、統計情報の値≦RMAX−MAXマージン、または統計情報の値<RMAX−MAXマージンとなって正常温度にもどったとき、SSD10が正常状態にもどったためROモードから通常モードに移行すべきと判断することが望ましい(ステップS160:No)。MAXマージンはゼロ以上の値であるが、ROモードと通常モードとの切り替えが頻繁に発生することを防止するために、MAXマージンはゼロより大きい値とすることが望ましい(たとえばMAXマージン=5℃)。
【0126】
本実施形態において紹介した統計情報X01〜X19、X23、X24以外にも、統計情報は種々の形態をとりうるが、本発明はこれらに対しても適用可能である。また、X01〜X19、X23、X24と不良率の関係には正の相関関係が存在するが、不良率と負の相関関係が存在する統計情報に対しても本発明は適用可能である(たとえば、SSD10が出荷後に体験した最低温度など)。その場合、RMAXの代わりに、信頼性保証できる下限値RMINを採用し、統計情報がRMINを下回った場合にSSD10が寿命に到達したと判断し、ROモードに移行すればよい。
【0127】
特に、たとえば統計情報として現在温度X20、最低温度X22を採用する場合、たとえばRMINとしてRMIN=−10℃を採用し、統計情報の値<RMIN、または統計情報の値≦RMINのようなたとえば動作保証外の温度になった時、SSD10が異常状態でROモードに移行すべきと判断し(ステップS160:Yes)、その後、統計情報の値≧RMIN+MINマージン、または統計情報の値>RMIN+MINマージンとなって正常温度にもどったとき、SSD10が正常状態にもどったためROモードから通常モードに移行すべきと判断することが望ましい(ステップS160:No)。MINマージンはゼロ以上の値であるが、ROモードと通常モードとの切り替えが頻繁に発生することを防止するために、MINマージンはゼロより大きい値とすることが望ましい(たとえばMINマージン=5℃)。
【0128】
SSD10が寿命に到達していなくても、統計情報があらかじめ定められたRMAXを上回ったり、あるいは通常動作ではありえない異常値を示した場合などにおいても、ROモード移行処理を行うことが望ましい。
【0129】
ROモード移行条件が成立すると(ステップS160:Yes)、つぎのようなROモード移行処理が開始される。まず、メモリコントローラ50は、現在行われているNANDメモリ20に対する書き込み処理を全てキャンセルし(ステップS161)、ホスト100から受信した全てのライト要求に対してエラーを返し、ホスト100から受信したライト要求のキュー全てを削除するのが望ましい(ステップS162)。つぎに、メモリコントローラ50は、NANDメモリ20上の管理情報におけるROモードフラグ25に1を書き込む(ステップS163)。この時、RAM40上の管理情報のうち、ROモードフラグ25以外のテーブルを全てNANDメモリ20上の管理情報に反映させてもよい。その後、SSD10は電源を遮断されるかリセットされるまで、ホスト100から受信したライト要求の全てに対してエラーを返す(ステップS164、S165)。
【0130】
つぎに、図21を用いてSSD10の起動処理について説明する。SSD10が起動すると、IPL55がNANDメモリ20上の管理情報におけるROモードフラグ25を読み出し(ステップS170)、ROモードフラグ25を判別する(ステップS171)。ROモードフラグ25が0である場合は(ステップS171)、IPL55は、通常モードにすべく、インタフェースコントローラ30のRWIFコントローラ31を有効にし(ステップS172)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS173)。
【0131】
一方、ROモードフラグ25が1である場合は、IPL55は、ROモードにすべく、ROIFコントローラ32を有効にし(ステップS174)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS175)。ROモードにおいては、SSD10は書き込みをサポートしない読み出し専用デバイスとして振る舞う。なお、ROモードに移行後は、SSD10は読み出し動作のみを行えばよいので、読み出し動作の速度が速くなるように管理テーブル内の情報を再配置するようにしてもよい。
【0132】
つぎに、ホスト100側の動作について説明する。まず、図22を用いてホスト100の起動時の動作を説明する。ホスト100が起動すると、ホスト100はSSD制御ツール110を起動する(ステップS201)。OS150がWindows(登録商標)である場合は、SSD制御ツール110を例えばスタートアップ登録したりあるいはサービスプログラム登録したりすることで、SSD制御ツール110を起動時の常駐プログラムに設定しておくことで、SSD制御ツール110を自動起動させることが可能となる。また、ホスト100の起動に用いられるシステムディスクとしては、SSD10でもよいし、予めシステムをインストールされているSSD10とは別に用意されたSSDまたはハードディスクドライブ(HDD)でもよいし、ブートプログラムをインストールされたDVD−ROM、CD−ROM、USBメモリなどでもよい。
【0133】
SSD制御ツール110が起動されると、SSD制御ツールはSSD10のデバイス情報を取得するべく、SSD100に対しデバイス識別情報の送信要求を送信する。前述したように、SSD10において、RWIFコントローラ31が有効である場合、SSD制御ツール110は、たとえばACS-2で記述されているDevice SignatureにおけるLBA(7:0)やLBA(15:8)を通じてSSD10がATAデバイスであることを認識でき、RWIFコントローラ31は、ホスト100からたとえばACS−2記載のECh IDENTIFY DEVICEなどのデバイス識別情報の送信要求を受信したときは、自身が読み書き両方可能なデバイスであるという識別情報をホスト100に対して送信する。また、SSD10において、ROIFコントローラ32が有効である場合、SSD制御ツール110は、たとえばACS-2で記述されているDevice SignatureにおけるLBA(7:0)やLBA(15:8)を通じてSSD10がATAPIデバイスであることを認識でき、ROIFコントローラ32は、ホスト100からたとえばMMC-6記載の46h GET CONFIGURATIONなどのデバイス識別情報の送信要求を受信したときは、自身が書き込みをサポートしていないというデバイス識別情報をホスト100に対して送信する。このようにして、SSD制御ツール110は、SSD10からデバイス識別情報を取得する(ステップS202)。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0134】
SSD制御ツール110は、SSD10から返ってきた情報が、書き込み非サポートのデバイスである場合は(ステップS203)、SSD10をROモードとして動作させるべく、選択スイッチ123,124を切り替え設定して、RWIFドライバ121を無効にし(ステップS206)、ROIFドライバ122を有効にする(ステップS207)。一方、SSD10から返ってきた情報が、書き込み非サポートのデバイスでない場合(ステップS203)、SSD制御ツール110は、SSD10を通常モードとして動作させるべく、選択スイッチ123,124を切り替え設定して、ROIFドライバ122を無効にし(ステップS204)、RWIFドライバ121を有効にする(ステップS205)。
【0135】
つぎに、図23を用いてホスト100が動作中におけるSSD制御ツール110の動作を示す。SSD10がROモードに移行したことを迅速に検知するためには、SSD制御ツール110は、SSD10が通常モードであるときは、ホスト100からのライト要求に対するSSD10からの応答を監視し続けることが望ましい(ステップS210)。なお、SSD10がROモードである時は、SSD10にはライト要求が送信されないため、SSD制御ツール110は、SSD10の応答を監視しなくてもよい。
【0136】
通常モードでSSD10へ送信されたライト要求に関して、エラーが返ってきたとき(1回のエラーでもよいし、複数回のエラーでもよい)、SSD制御ツール110は、SSD10が図18に示したROモード移行処理を開始して全てのライト要求に対してエラーを返している状態であると判断し、RWIFドライバ121を無効化する(ステップS211)。SSD10を書き込み専用デバイスとして迅速に認識させる観点では、SSD制御ツール110は、SATA規格のCOMRESETや、ACS−2記載のSCT Command Transportのベンダ独自のコマンドや、その他ベンダ独自のコマンドなどを用いて、SSD10にリセットコマンドを送るなどしてSSD10を再起動させることが望ましい(ステップS212)。この再起動処理またはユーザによるコンピュータシステム1の再起動またはSSD10の電源OFF/ONにより、SSD10は図21に示した処理を行うことで、ROモードに移行する。また、SSD制御ツール110は、ROIFドライバ122を有効化する(ステップS213)。
【0137】
以上のようにして、ホスト100は、SSD10がROモード移行化処理開始直後及びROモード中において、SSD10を利用不可能な外部記憶装置として誤認識することなくSSD10に対する読み出し処理を確実に行うことができる。
【0138】
図24は、ホスト100にOSとしてWindows(登録商標)が用いられているときのドライブ表示を示すものであり、ドライブDとしてSSDが接続されているとする。SSDが通常の読み書き可能な状態にあるときは、図24(a)に示すように、ドライブDの種類は「ローカルディスク」と表示される。しかし、SSD制御ツール110が、図22、図23の処理によってドライブDを書き込み非サポートのデバイスであると認識した後は、図24(b)に示すように、ドライブDの種類は例えば「CD−ROM」や「DVD−ROM」や「ROMドライブ」と表示される。
【0139】
ところで、上記では、SSD10において、図18におけるROモード移行条件に用いる統計情報として、統計情報X01〜X19、X23、X24を採用するようにしたが、他の統計情報を用いて、ROモード移行条件の成立を判定するようにしてもよい。
【0140】
例えば、SSD10において、特開2009−217603号公報に記載されているクラスタという管理単位が導入されている場合、バッドクラスタ数をROモード移行条件に採用してもよい。クラスタサイズは、セクタサイズの2以上の自然数倍であり、クラスタアドレスは、LBAの所定のビットから上位のビット列で構成される。SSD10では、管理情報として、バッドクラスタのクラスタアドレス(クラスタID)を管理するバッドクラスタテーブルを保有する。そして、例えば、NANDメモリ20から読み出しを行った時にECC訂正回路58でのECC処理の際にECC訂正エラーが発生すると、メモリコントローラ50はECC訂正エラーが発生したクラスタをバッドクラスタテーブルに登録する。このバッドクラスタテーブルの登録内容に基づきバッドクラスタ数を取得することが可能である。したがって、SSD10が通常モードで動作しているとき、メモリコントローラ50は、RAM40に記憶された管理情報におけるバッドクラスタテーブルの例えばエントリ数に基づき現在のバッドクラスタ数を取得し、取得したバッドクラスタ数を閾値と比較し、バッドクラスタ数が閾値以上である時、ROモード移行条件が成立したと判定する。
【0141】
また、図18、図21のフローチャートでは、SSD10においてROモードフラグ25を介在させることによって、SSD起動時にリードオンリーモード移行条件が成立しているか否かを判定したが、起動時、上述したROモード移行条件に用いる各種管理情報のうちの少なくとも1つがROモード移行条件を満足しているか否かを直接判定することで、リードオンリーモードに移行するか否かを決定するようにしてもよい。
【0142】
つぎに、ホスト100に搭載されるSSD制御ツール110の処理についての変形例について説明する。例えば、図23に示した動作手順に代えて、図25に示すような動作手順を採用してもよい。図25においては、SSD10が通常モードで動作しているとき、SSD制御ツール110は、定期的にSSD10に対してSSD10の統計情報を取得するためのコマンドを発行する(ステップS220)。このコマンドとして、例えば、メモリの自己診断機能である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の情報を受信したSSD10においては、メモリコントローラ50が統計情報X01〜X19、X23、X24の一つまたは一部または全てを取得し、取得した統計情報をホスト100に返信する。このSSD10から返信された統計情報を受信することで、SSD制御ツール110は、統計情報を取得する(ステップS221)。
【0143】
図26は、統計情報X01〜X19、X23、X24に関する管理テーブルを示すものである。例えば、B0h/D0h SMART READ DATAを用いる場合、図26に示すように、統計情報26の構成要素(X01〜X19、X23、X24など)それぞれに対し、属性ID(attribute ID)を割り当てるが、属性IDをこれら構成要素の一部のみに割り当ててもよいのはもちろんである。これら統計情報26の構成要素に関し、規格化後、最良値としてSMABを採用し、規格化後の信頼性保証下限値としてSMAL=SMAB*AMALR(0≦AMALR<1)(SMALは整数で、四捨五入、小数点以下切り上げ、小数点以下切り上げのいずれかにより少数から整数に変換される)を採用し、
attribute value = SMAL + SMAB×(1-AMALR)×(RMAX−生の値)/ RMAX
attribute Threshold=30(固定値)
(生の値)=統計情報の生の値
により、メモリコントローラ50は、S.M.A.R.T情報のattribute value(図26の「Value」)を計算してSSD制御ツール110に送信する。attribute Thresholdは、図26の「Threshold」であり、生の値は、図26の「Raw Data」である。
【0144】
規格化後の最良値SMABは任意の自然数であればよく、たとえばSMAB=100を採用してもよい。AMALRは0≦AMALR<1をみたす任意の数であればよく、たとえばAMALR=0.3を採用してもよい。また、RMAX、AMALRおよびSMABは各X01〜X19、X23、X24に対して、それぞれ別の値を採用することができる。SMAB=100で、AMALR=0.3を採用した時、採用対象の統計情報に関してattribute valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、attribute valueが30かそれ以下の値に到達することになる。Attribute ValueがThresholdを超過しているか否かを検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
【0145】
図26の「Worst」をSSD制御ツール110がSSD10の寿命を診断する仕様として採用してもよい。「Worst」はattribute valueの最悪値としてメモリコントローラ50に計算される。たとえば、X01〜X19、X23の場合、Worstは、たとえばSSD10が出荷後の(または製造後の)、attribute valueの最小値である。あるいは、Worstとして、過去ある一定時間範囲内のattribute valueの最小値をWorst Valueとして採用してもよいし、ある一定回数(一定データ量)通信または処理が行われた過去にさかのぼって、その過去から現在に至るまでの最小値をworst valueとして採用してもよい。
【0146】
図26の「Raw Data」(Raw Value)をSSD制御ツール110がSSD10の寿命を診断する仕様として採用してもよい。統計情報(たとえば、X01〜X19、X23、X24)の生の値がRaw DataとしてSSD10からSSD制御ツール110に送信される。この場合、SSD制御ツール110は、RMAXをSSD制御ツール110内にすでに保持しているかSSD10から別途読み出すかその他記憶装置から読み出すかしてRMAXを取得し、RMAXとRaw Dataを比較し、Raw Data>RMAXまたはRaw Data≧RMAXとなった時、SSD10が寿命に到達したと判断する。たとえば、NAND整理失敗フラグの場合、これが1である場合にSSD10が寿命に到達したと判断する。たとえば、バッドブロック数総計の場合、これが所定値を上回った場合にSSD10が寿命に到達したと判断する。Raw Dataとして、必ずしも統計情報の生の値を出力する必要はなく、たとえば、統計情報の生の値を四則演算した値をRaw Dataとしてメモリコントローラ50がSSD制御ツール110に送信し、同じくRMAXを四則演算した値と比較することで判定を行ってもよい。また、統計情報の生の値を暗号化したデータをRaw Dataとしてメモリコントローラ50がSSD制御ツール110に送信し、メモリコントローラ50がこれを復号化して復号化後のデータをRMAXと比較することで判定を行ってもよい。
【0147】
SSD制御ツール110は、取得した統計情報を所定の閾値、たとえばRMAXやRMINなどと比較し(ステップS222)、SSD10の統計情報がRMAXを上回っている時(またはX24=1である時、または統計情報がRMINを下回っている時)などSSD10が寿命に到達した(あるいは寿命寸前であるか、あるいは異常状態であるか)と判断される場合(ステップS222:Yes)、図23と同様、RWIFドライバ121を無効化する(ステップS223)。SSD制御ツール110は、SSD10を再起動してもよい(ステップS224)。SSD10再起動後、SSD制御ツール110はROIFドライバ122を有効化する(ステップS225)。
【0148】
また、SSD10が通常モードであるときのホスト100での動作として、図27に示すような動作手順を採用してもよい。この動作手順では、SSD10が通常モードで動作しているとき、SSD制御ツール110は、定期的にSSD10に対してS.M.A.R.TのコマンドであるSMART READ DATAまたはベンダー独自のコマンドを発行する(ステップS240)。このS.M.A.R.Tの情報を受信したSSD10においては、メモリコントローラ50がRAM40に記憶された管理情報におけるバッドクラスタテーブルの例えばエントリ数に基づき現在のバッドクラスタ数を取得し、取得したバッドクラスタ数をホスト100に返信する。このSSD10から返信されたバッドクラスタ数を受信することで、SSD制御ツール110は、バッドクラスタ数を取得する(ステップS241)。
【0149】
SSD制御ツール110は、取得したバッドクラスタ数を所定の閾値と比較し(ステップS242)、SSD10のバッドクラスタ数が閾値以上である時、図13と同様、RWIFドライバ121を無効化し(ステップS243)、SSD10を再起動し(ステップS244)、ROIFドライバ122を有効化する(ステップS245)。
【0150】
また、SSD制御ツール110にバックアップ機能を搭載してもよい。SSD10がリードオンリーモードに移行している状態では、SSD10のデータリテンション特性が悪化していると考えられるため、できるだけ早急にSSD10上のユーザデータを他の2次記憶装置に退避させることが必要である。図28は、SSD制御ツール110がバックアップ機能を搭載している場合の、ホスト100の構成を示す図である。ホスト100には、2次記憶装置(他のSSD、ハードディスクドライブ、携帯ディスク記憶媒体など)130が接続されており、ホスト100のOSと2次記憶装置400とは2次記憶装置用ドライバ401を介して通信を行う。
【0151】
図29は、バックアップを行う場合のSSD制御ツール110の動作例を示すものである。図29では、図22に示したSSD制御ツール110の動作手順にステップS208を追加している。ステップS208でのバックアップの際、SSD制御ツール110は、「SSDがリードオンリーモードに移行しています。SSDのデータをバックアップしますか?」などのメッセージとバックアップの可否を選択する「OK」ボタン及び「キャンセル」ボタンを表示する。そして、「OK」ボタンがクリックされるとバックアップが開始され、「キャンセル」ボタンがクリックされるとバックアップは行われずにメッセージの表示が消える。ROIFドライバ122に対し、SSD10の全LBAのデータを読み出すよう命令を送る。SSD制御ツール110は、SSD10から読み出したデータのLBA(SSDのLBA)と同一のLBA(2次記憶装置400上のLBA)に、SSD10から読み出したデータを書き込むように、2次記憶装置用ドライバ401に対して命令を送る。例えば、SSD10上のLBA=0hのデータは2次記憶装置400上のLBA=0hにコピーされる。また、SSD10上のLBA=234c5hのデータは2次記憶装置400上のLBA=234c5hにコピーされる。
【0152】
なお、このバックアップ処理の際、SSD制御ツール110は、ホスト100のOSに対し、SSD10の全ファイルを2次記憶装置400にコピーするよう命令を送るようにしてもよい。この場合、OSはOSに含まれるファイル管理テーブルを参照し、SSD10の全ファイルの全LBAを取得し、取得したLBAの全データを読み出し、読み出したデータを2次記憶装置400に書き込み、書き込んだLBAとファイルのインデックスが対応付けられるようにファイル管理テーブルを更新する。また、SSD10のマスターブートレコード(MBR)情報をはじめとするパーティションの情報及びファイルシステム管理領域にアクセスし、使用されている領域やファイルの情報を取得し、取得した情報をもとに、SSD10のデータについてのROMイメージを作成し、作成したROMイメージを他の記憶装置に保存するようにしてもよい。
【0153】
また、本実施形態では、簡単のため、NANDメモリ20の物理アドレスは管理情報においてLBAに対して直接関連付けられていたが、たとえば特開2009−217603号のようにセクタサイズの2以上の自然数倍の管理単位を用いてLBAを管理し、LBAではなく、前記管理単位とNANDメモリ20の物理アドレスとの対応関係を管理情報に記述するようにしてもよい。NANDメモリ20の物理アドレスとLBAの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAの対応関係を記述するテーブル(論物変換テーブル)の取る形態は、本発明の本質には影響しない。NAND型フラッシュメモリ以外の不揮発性メモリに関しても、不揮発性メモリの物理アドレスとLBAの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAの対応関係を記述するテーブル(論物変換テーブル)の取る形態は、本発明の本質には影響しない。
【0154】
管理情報部で用いる信頼性情報にかかわりのない情報は、本発明の本質には影響しない。以上の信頼性情報についての要件は、第2の実施形態以降の実施形態にも当てはまる。
【0155】
このように第1の実施形態によれば、SSD10において、リードオンリーモード移行条件が成立したか否かを判定し、リードオンリーモード移行条件が成立した場合、インタフェースコントローラを読み出し専用のものに切り替えるとともに、ホスト100において、SSD10から取得した情報に基づきSSD10をリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、SSD制御用のインタフェースドライバを読み出し専用のものに切り替えるようにしているので、リードオンリーモードに移行したSSDをリード動作のみ可能なデバイスとして正常にホストに認識させることを可能とする。
【0156】
(第2の実施形態)
第1の実施形態では、SSD10への機能実装及びホスト100への機能実装の両方を使用した。第2の実施形態では、SSD10への機能実装のみを適用した場合を示す。SSD10及びホスト100の両方に機能を実装すると最も効果的であるが、SSD10のみに機能を実装しても十分に効果を発揮することができる。
【0157】
図30にコンピュータシステムの第2の実施形態の構成を示す。この第2の実施形態においては、SSD10に、第1の実施形態で説明したインタフェースコントローラ30を搭載しており、ホスト100側には、SSD10用のインタフェースドライバ120を切り替えるSSD制御ツール110を搭載してはいない。図30において、図1に示した構成要素と同一機能を有する構成要素については同一符号を付し、重複する説明は省略する。第2の実施形態では、IPL55の機能をメモリコントローラ50に搭載している。第2の実施形態のSSD10においても、先の第1の実施形態で説明したSSD10の機能を全て搭載可能である。
【0158】
この第2の実施形態においては、メモリコントローラ50は、SSD10をリード/ライト可能な通常の状態からリードオンリーモード状態へ移行させる前述したリードオンリーモード移行条件が成立するか否かをSSD起動時あるいはSSDの動作中に前述した管理情報を用いて判定しており、リードオンリーモード移行条件が成立した場合、インタフェースコントローラ30をRWIFコントローラ31からROIFコントローラ32に切り替える。RWIFコントローラ31は、ホスト100から要求があった場合、本ドライブはリードライト可能なドライブである旨を示すデバイス識別情報をホストに送信する。ROIFコントローラ32は、ホスト100から要求があった場合、本ドライブは読み出し専用ドライブである旨を示すデバイス識別情報をホストに送信する。
【0159】
RWIFコントローラ31はSSD10がATAデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、ATA/ATAPI Command Set-2 (ACS-2)で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を00hに、LBA(23:16)を00hとしてホスト100に出力することで、SSD10がATAデバイスであることをホスト100に通知することができる。ROIFコントローラ32はSSD10がATAPIデバイスであることをホスト100に明示的に示すよう構成されるのが望ましい。たとえば、前記ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト100に出力することで、SSD10がATAPIデバイスであることをホスト100に通知することができる。
【0160】
ROIFコントローラ32は、SSD10が書き込みコマンドをサポートせず読み出し専用であることをホスト100に通知するよう構成される。例えば、ATAインタフェース90を介してホスト100から、INCITS Multi-Media Commands-6 (MMC-6)に採用されている コマンドGET CONFIGURATION(46h)を受信したとき、ROIFコントローラ32は、Random Writable(Feature Number=0020h)、Incremental Streaming Writable (Feature Number=0021h)、Write Once(Feature Number=0025h)などのFeaturesにおいて、ライト系機能は全て非サポートであることをホスト100に返信する。なお、ROIFコントローラ32は、RWIFコントローラ31と同じく、SSD10がATAデバイスであることをホスト100に明示的に示すよう構成され、ATAインタフェース90を介してホスト100からデバイス識別情報、たとえばACS−2記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト100に返信するよう構成されてもよい。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0161】
例えば、第1の実施形態で用いた図18を参照すれば、SSD10が動作中、メモリコントローラ50は、ROモード移行条件が成立したか否かを判定している(図18:ステップS160)。ROモード移行条件の成立の具体例としては、統計情報X01〜X19、X23、X24のうち少なくとも一つがRMAXを上回っている時、またはX24=1である時、または統計情報がRMINを下回っている時、などのようにSSD10が寿命に到達した(あるいは寿命寸前である、あるいは異常状態である)と判断される場合などの条件がある。
【0162】
ROモード移行条件が成立すると、メモリコントローラ50は、現在行われているNANDメモリ20に対する書き込み処理を全てキャンセルし(ステップS161)、ホスト100から受信した全てのライト要求に対してエラーを返し、ホスト100から受信したライト要求のキュー全てを削除するのが望ましい(ステップS162)。つぎに、メモリコントローラ50は、NANDメモリ20上の管理情報におけるROモードフラグ25に1を書き込む(ステップS163)。その後、SSD10は電源を遮断されるかリセットされるまで、ホスト100から受信したライト要求の全てに対してエラーを返す(ステップS164、S165)。
【0163】
また、SSD10の起動時には、例えば、先の第1の実施形態で用いた図21と同様の動作を実行する。すなわち、SSD10が起動すると、メモリコントローラ50内のIPL55がNANDメモリ20上の管理情報におけるROモードフラグ25を読み出し(ステップS170)、ROモードフラグ25を判別する(ステップS171)。ROモードフラグ25が0である場合は(ステップS171)、IPL55は、通常モードにすべく、インタフェースコントローラ30のRWIFコントローラ31を有効にし(ステップS172)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS173)。
【0164】
一方、ROモードフラグ25が1である場合は、IPL55は、ROモードにすべく、ROIFコントローラ32を有効にし(ステップS174)、その後RAM40にNANDメモリ20上の管理情報を読み出す(ステップS175)。ROモードにおいては、SSD10は書き込みをサポートしない読み出し専用デバイスとして振る舞う。
【0165】
ホスト100はホスト起動時、またはデバイス接続時、接続されているデバイスに対して識別情報を要求する。SSD10は、通常モードにおいては、RWIFコントローラ31がホスト100に対してSSD10が読み書き可能であることを示すデバイス識別情報をホストに対して返すので、ホスト100はSSD10を読み書き可能であるデバイスとして認識する。一方、ROモードにおいては、SSD10は、ROIFコントローラ32がホスト100に対してSSD10が書き込み非サポートの読み出し専用ドライブであることを示すデバイス識別情報を返すので、ホスト100はSSD10を書き込み非サポートデバイスとして認識する。よって、ROモード時においては、ホスト100からSSD10にライト要求が送られることはない。このように、ROモードにおいては、SSD10は書き込みをサポートしないデバイスとして振る舞って、ホスト100から書き込み以外のアクセスが可能になる。また、ホスト100にOSとしてWindows(登録商標)が搭載されている場合でも、SSD10が読み出し可能なデバイスであるとして認識されることが可能になる。
【0166】
このようにして、SSD10の信頼性悪化時にSSD10が書き込み非サポートの外部記憶装置であるという識別情報をSSD10からホスト100に通知することで、ホスト100にとっては、あたかもSSD10が読み書き可能な外部記憶装置から書き込み非サポートの外部記憶装置に切り替わったかのように見える。したがって、ホスト100にとっては、信頼性が悪化したSSD10は読み出しのみ可能なデバイスとして振る舞うために、ホスト100は例えばSSD10をCD−ROMやDVD−ROMのような一般的な読み出し専用外部記憶装置として扱うことができる。
【0167】
(第3の実施形態)
第3の実施形態では、ホスト100への機能実装のみを適用した場合を示す。SSD10及びホスト100の両方に機能を実装すると最も効果的であるが、ホスト100のみに機能を実装しても効果を十分に発揮することができる。
【0168】
図31にコンピュータシステムの第3の実施形態の構成を示す。この第3の実施形態においては、ホスト100に、第1の実施形態で説明したインタフェースドライバ120及びSSD制御ツール110を搭載しており、SSD10側には、RWIFコントローラ31及びROIFコントローラ32が切り替え可能なインタフェースコントローラ30を搭載してはいない。図31において、図1に示した構成要素と同一機能を有する構成要素については同一符号を付し、重複する説明は省略する。インタフェースコントローラ30に代えて、RWIFコントローラ31のみが搭載されたインタフェースコントローラ38が搭載されている。第3の実施形態のホスト100においても、先の第1の実施形態で説明したホスト100の機能を全て搭載可能である。
【0169】
この第3の実施形態においては、SSD制御ツール110は、先の第1の実施形態の図25、図27などで説明した動作と同様の動作を実行する。ホスト100が起動すると、ホスト100はSSD制御ツール110を起動する。SSD制御ツールは、たとえばWindows(商標)においてスタートアップメニューやサービスやレジストリに登録されるなどして、ホスト100の起動とおもに自動的に起動されることが望ましい。一方、SSD制御ツールは、キーボード134やマウス135などにより、ユーザによって任意に起動されてもよい。SSD制御ツール110が起動されると、例えば図25の場合、SSD制御ツール110はSSD10の統計情報X01〜X19、X23、X24などのうち少なくとも一つを取得するべく、SSD100に対し統計情報の送信要求を送信する(図25:ステップS220)。この送信要求としては、例えば、前述したように、メモリの自己診断機能であるS.M.A.R.TのコマンドであるSMART READ DATAまたはACS-2に記述されているSCT Command Transportまたはベンダー独自のコマンドを採用してもよい。
【0170】
このようにして、SSD制御ツール110は、統計情報を取得する(ステップS221)。SSD制御ツール110は、SSD10から返ってきた統計情報を閾値(たとえば第1の実施形態で述べたRMAXやRMIN)と比較する(ステップS222)。例えば、統計情報の取得にACS-2記載のB0h/D0h SMART READ DATAを用いる場合、SSD制御ツール110は、統計情報26の構成要素(X01〜X19、X23、X24など)のうち少なくとも一つの統計情報を、図26に示すAttribute Value、Threshold、Worst ValueおよびRaw Data(Raw Value)の形態で取得する。メモリコントローラ50によるAttribute Value、Threshold、Worst ValueおよびRaw Data(Raw Value)の計算方法は第1の実施形態と同じであり、このようにして計算された情報が、B0h/D0h SMART READ DATAに対する読み出しデータとしてSSD10から制御ツール110に送信される。
【0171】
たとえば、SMARTのAttribute ValueとThresholdを、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Attribute ValueとThresholdの比較を行い、たとえばAttribute Value<Threshold(またはAttribute Value≦Threshold)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。第1の実施形態のように、たとえばSMAB=100で、AMALR=0.3を採用した時、採用対象の統計情報に関してattribute valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、attribute valueが30かそれ未満の値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。Attribute ValueがThresholdを超過しているか否かを検知する手段として、ACS-2に記載のコマンドであるB0h/DAh SMART RETURN STATUSを用い、当該コマンドのOutputからAttribute ValueがThresholdを超過しているか否かを判断してもよい。
【0172】
たとえば、SMARTのWorst ValueとThresholdを、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Worst ValueとThresholdの比較を行い、たとえばWorst Value<Threshold(またはWorst Value≦Threshold)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。第1の実施形態のように、たとえばSMAB=100で、AMALR=0.3を採用した時、採用対象の統計情報に関してWorst Valueの最良値が100(たとえば出荷直後に100)になっており、信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき(統計情報の生の値がRMAXに等しいかそれ以上になったとき)、Worst Valueが30かそれ未満の値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。
【0173】
たとえば、SSD10の信頼性悪化とともに増大していくようなSMARTのRaw Data(Raw Value)を、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Raw ValueとRMAXの比較を行い、たとえばRaw Value≧RMAX(またはRaw Value>RMAX)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。RMAXは主メモリ202上、たとえばSSD制御ツール110上に保持されているパラメータである。RMAXはコンピュータシステム1の電源OFF時は不揮発情報としてSSD10に格納されていることが望ましく、電源ON時に例えば図5や図6のようにSSD制御ツールが主メモリ202にロードされる時、主メモリ202にロードされる。RMAXは第1の実施形態のようにSSD10の開発時に決定されることが望ましく、SSD制御ツールのインストール元となる領域、たとえばWEBサーバーの記憶媒体400上の領域や、光学記憶媒体500上の領域や、USBメモリ600の領域に格納されている。
【0174】
Raw Valueは、SSD10の信頼性が劣化するにつれて徐々に増加していき、SSD10が信頼性保証できなくなったとき、Raw ValueがRMAXかそれより大きい値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。RMAXは統計情報X01〜X19、X23など構成要素のそれぞれに対し、別々の値を採用してもよい。
【0175】
たとえば、SSD10の信頼性悪化とともに減少していくようなSMARTのRaw Data(Raw Value)を、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Raw ValueとRMINの比較を行い、たとえばRaw Value≦RMIN(またはRaw Value<RMIN)であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。RMINは主メモリ202上、たとえばSSD制御ツール110上に保持されているパラメータである。RMINはコンピュータシステム1の電源OFF時は不揮発情報としてSSD10に格納されていることが望ましく、電源ON時に例えば図5や図6のようにSSD制御ツールが主メモリ202にロードされる時、主メモリ202にロードされる。RMINは第1の実施形態のようにSSD10の開発時に決定されることが望ましく、SSD制御ツールのインストール元となる領域、たとえばWEBサーバーの記憶媒体400上の領域や、光学記憶媒体500上の領域や、USBメモリ600の領域に格納されている。
【0176】
Raw Valueは、SSD10の信頼性が劣化するにつれて徐々に減少していき、SSD10が信頼性保証できなくなったとき、Raw ValueがRMINかそれ未満の値に到達することになり、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。RMINは統計情報X01〜X19、X23など構成要素のそれぞれに対し、別々の値を採用してもよい。
【0177】
たとえば、SMARTのRaw Data(Raw Value)として統計情報X24を受信して、SSD10の寿命(または異常状態)を診断するための比較データとして用いる場合、SSD制御ツール110は、Raw Valueが1であるか否かの判定を行い、Raw Value=1であった場合、SSD制御ツールはSSD10が寿命に到達した(または異常事態である)と判定する。SSD10の信頼性が劣化しNAND整理によっても十分な数のフリーブロックがメモリコントローラ50により確保できなかった場合、メモリコントローラ50によりRaw Valueが1にセットされ、SSD制御ツール110はSSD10をリードオンリーメモリとして認識すべきと判断する(ステップS222:Yes)。
【0178】
ステップS222の比較の結果、SSD10にROモード移行条件が成立していると判断した場合、すなわちSSD10をリードオンリーメモリとして認識すべきと判断した場合(ステップS222:Yes)、ROIFドライバ122を有効にする(ステップS225)。また、SSD制御ツール110は図12におけるオペレーティングシステム150内のシステムパラメータを操作することで、オペレーティングシステム150にSSD10をリードオンリーメモリとして認識させてもよい。ステップS225の前に、SSD制御ツール110はリセットコマンド等を送信してSSD10を再起動するのが望ましい(S224)。
【0179】
なお、SSD制御ツール110は、図25、図27などに示したステップS220、ステップS221及びステップS222(図25の場合)の手順、すなわちSSD10への統計情報の送信要求、及びSSD10をリードオンリーメモリとして認識すべきとの判断を、ホスト100が動作中も定期的に行うようにするのが望ましい。たとえば、一定時間おきに、SMART READ DATAを発行し、SSD10をリードオンリメモリとして認識すべきか否かの判断を行うようにするとよい。前記要求及び判断をホスト100の起動時に行うようにしてもよく、SSD制御ツール110の割り込み処理回数を低減するために、前記要求及び判断をホスト100起動後のみに行うようにしてもよい。そして、SSD10をリードオンリーメモリとして認識すべきと判断した場合は、インタフェースドライバ120のROIFドライバ122を有効にする。SSD制御ツール110の割り込み処理回数を低減するために、SSD10をリードオンリメモリとして認識した後は、統計情報の送信要求やROモード移行判断を行わないようにすることが望ましい。
【0180】
また、SSD制御ツール110は、SSD10の起動または接続を認識すると、前記要求および判断を行うようにしてもよい。たとえば、インタフェース90がSATAインタフェースである場合、ホスト100のSSD10に関するステータスレジスタが7Fhから50hになったとき、SSD10が起動または接続されたと判断し、前記要求および判断を行うようにしてもよい。
【0181】
また、前記リードオンリーメモリとして認識すべきとの判断は、メモリコントローラ50が行うようにし、SSD制御ツール110はSMART READ DATAまたはSCT Command Transportまたはベンダー独自のコマンドを通じてその判断結果のみを受信するようにしてもよい。たとえば、第1の実施形態と同様の判断基準でメモリコントローラ50によってリードオンリーメモリとして認識すべきと判断された時は、SMART READ DATAによりSSD制御ツール110はSSD10からAttribute Valueとして数値0を受信し、そうでないとき(通常時)は数値100を受信し、リードオンリーメモリとして認識すべき場合とそうでない場合のどちらにおいてもThresholdとしては数値70を受信し、Attribute Value < Thresholdの時(ステップS222:Yes)、リードオンリーメモリとして認識すべきと判断し、Attribute Value > Thresholdのとき(ステップS222:No)は、リードオンリーメモリとして認識すべきでないと判断するようにしてもよい。判断結果の受信にWorst ValueやRaw Valueを用いてもよいのはもちろんである。
【0182】
なお、統計情報として、たとえば現在温度X20、最高温度X21、最低温度X22を採用する場合は、温度異常は一時的なものである可能性があるため、SSD制御ツール110がステップS225によってROIFドライバを有効化した後に、たとえばAttribute Value≧Threshold(またはAttribute Value>Threshold)となって通常状態に復帰したと判断されたときは、ROIFドライバを無効化し、RWIFドライバを有効化してもよい。
【0183】
SSD10のデータ破壊や故障によるユーザデータ損失を防止する観点では、ROIFドライバ122は、SSD10に対する書き込みコマンドを一切送信しないよう構成されることが望ましい。一方、ROIFドライバ122は、たとえばオペレーティングシステムのシステム情報など一部のデータをSSD10に書き込む必要がある場合は、例外としてSSD10に当該データを書き込むことを許可してもよいが、当該データはデータ量がNANDメモリ20の容量に対して十分に小さいことが望ましい。さらに望ましくは、ユーザが誤って書き込みコマンドを送信してしまいSSD10に対してデータを書き込んでしまうことを防止するために、IOIFドライバ122は、たとえばACS-2記載の35h WRITE DMA EXTや61h WRITE FPDMA QUEUEDのような、SSD10に対する通常の書き込みコマンドは一切送信せず、SSD10に対して例外的にデータを書き込む必要がある場合は、たとえばINCITS ACS-2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなど、特殊なコマンドを用いたコマンドのみによりSSD2に対する書き込みを許可するようにすることが望ましい。
【0184】
第3の実施形態においても、SSD制御ツール110は、図5に示したように、ホスト装置100が電源オフになっているときはSSD10のNANDメモリ20の領域110Aに格納されているが、ホスト装置100の起動時またはプログラム起動時に、領域110Aから領域110にロードされる。一方、ホスト装置に複数の不揮発性記憶装置が接続されている場合は、図6に示すように、SSD制御ツールは、SSD10とは別の不揮発性記憶装置300の領域110Bに格納されており、ホスト装置100の起動時またはプログラム起動時に、領域110Bから領域110にロードされるようにしてもよい。特に、不揮発性記憶装置300がOSを格納するシステムドライブとして使用されており、SSD10が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブ300にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブ10にはユーザデータを格納するドライブとして使用するというように、ドライブ10とドライブ300の役割を明確に分ける観点で、システムドライブとしての不揮発性記憶装置300に制御ツールを格納することが望ましい。
【0185】
第3の実施形態においても、制御ツールのセットアップをユーザが行う労力を省く観点では、例えば図5や図6のように、SSD制御ツールがSSD10や不揮発性記憶装置300に格納された状態でコンピュータシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザがSSD制御ツールのインストールの可否を選択できるようにする観点、およびユーザに最新の制御ツールを提供できるようにするという観点では、制御ツールは、図7に示したWEBからのダウンロード、または図8に示したDVD−ROMからのインストール、さらには図9に示したUSBメモリなど外部記憶媒体からのインストールにより、SSD10や不揮発性記憶装置300に格納できるようにすることが望ましい。第3の実施形態においても、ユーザによる入手容易性の観点から、光学メディア500やUSBメモリ600はSSD10の出荷時に、付属品としてSSD10と一緒に梱包されて販売されることが望ましい。一方、光学メディア500やUSBメモリ600はソフトウェア商品として単独で販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
【0186】
このようにして、ホスト100に搭載されたSSD制御ツール110がSSD10の信頼性状態(統計情報)を判定し、この判定結果に基づいてSSD用のインタフェースドライバを選択することとしたので、SSD10の信頼性悪化時(寿命到達時、異常状態時)、OSやその他ソフトウェアにとっては、あたかもSSD10が読み書き可能な外部記憶装置から書き込み非サポートの外部記憶装置に切り替わったかのように見える。したがって、OSやその他ソフトウェアにとっては、信頼性悪化したSSD10は読み出しのみ可能なデバイスとして振る舞うために、ホスト100はSSD10をCD−ROMやDVD−ROMのような一般的な読み出し専用外部記憶装置として扱うことができる。
【0187】
(第4の実施形態)
第1及び第2の実施形態では、SSD10が読み出し専用デバイスであるという情報をSSD10がホスト100に対し送信していた。SSD10とは別に用意されたインタフェース中継デバイス700を用い、インタフェース中継デバイス700がホスト100に対しSSD10が読み出し専用デバイスであるという情報をホスト100に対して送信してもよい。このインタフェース中継デバイス700を読み出し専用ブリッジと呼ぶ。
【0188】
図32は、図10に示したコンピュータシステムに読み出し専用ブリッジ700を接続した状態を示すものである。図33は、読み出し専用ブリッジが接続された第4の実施形態のコンピュータシステムを示すブロック図である。読み出し専用ブリッジ700はホスト100に対して読み出し専用デバイスであるという情報を送信するよう構成される。読み出し専用デバイスであるという情報は、たとえば前述のMMC-6に採用されている前述したコマンドGET CONFIGURATION(46h)を用いてもよいし、他のコマンドを用いてもよい。さらに、読み出し専用ブリッジ700は、ホスト100から受信した各種命令及び応答をSSD10に送信し、SSD10から受信した各種命令及び応答をホストに送信するなど、ホスト側インタフェースとSSD側インタフェースの中継の役割を果たすよう構成される。ホスト側インタフェースとSSD側インタフェースのインタフェース規格が異なる場合は、読み出し専用ブリッジ700は、受信したコマンド及び応答を送信側インタフェースに合うように変換して送信する。ホスト側インタフェースがSATAインタフェースである場合、読み出し専用ブリッジ700はSSD10がATAPIデバイスであることをホスト100に明示的に示すよう構成されてもよい。たとえば、前記ACS-2で記述されているDevice Signatureにおいて、LBA(7:0)を01hに、LBA(15:8)を14hに、LBA(23:16)をEBhとしてホスト100に出力することで、SSD10がATAPIデバイスであることをホスト100に通知することができる。
【0189】
ホスト100の通常利用時は、SSD10は、図10に示したように、ATAインタフェース90としてのSATAケーブルや、USBケーブルによってホスト100のマザーボード130に接続されている。ホスト100に搭載されているSSD制御ツール110が前述したACS−2記載のS.M.A.R.T情報などによって統計情報を取得して、この管理情報と閾値との比較によって、たとえば統計情報>RMAXまたは統計情報<RMINまたはX24=1の条件がを満たされるなどにより、SSD10の信頼性が劣化していると判断すると、SSD制御ツール110は、ディスプレイ133上に「SSDの寿命が近づいています。読み出し専用ブリッジのデバイス側端子をSSDに接続し、読み出し専用ブリッジのホスト側端子をパソコンに接続し、SSDのデータをバックアップしてください。」などのメッセージを含む警告ウィンドウ(または警告ダイアログ)を表示する。なお、管理情報と比較する閾値(RMAXやRMINなど)をホスト100内に保持して信頼性劣化の判断をSSD制御ツール110が行うようにしてもよいし、前記閾値をSSD10内に保持して信頼性劣化の判断をSSD10のメモリコントローラ50が行い、管理情報が閾値を超過したという情報のみをメモリコントローラ50がホスト100に送信することにしてもよい。
【0190】
ディスプレイ133上に表示された警告メッセージに従って、ユーザが、図32に示すように、SSD10と読み出し専用ブリッジ700とをSATAケーブルまたはUSBケーブルなどで接続し、読み出し専用ブリッジ700とマザーボード130をSATAケーブルやUSBケーブルなどで接続する。
【0191】
この後、ホスト100が起動されると、読み出し専用ブリッジ700はホスト100に対して、SSD10が読み出し専用デバイスであるという情報を送信する。これにより、ホスト100は、読み出し専用ブリッジ700のインタフェースドライバ170として読み出し専用の例えばATAPIドライバの読み出し専用ドライバを適用し、またホスト上でSSD10はたとえばCD−ROMやDVD−ROMなどのような読み出し専用デバイスとして認識される。なお、読み出し専用ブリッジ700は、SSD10がATAデバイスであることをホスト100に明示的に示すよう構成され、ATAインタフェースを介してホスト100からデバイス識別情報、たとえばACS−2記載のコマンドECh IDENTIFY DEVICEを受信したとき、ライト系機能は全て非サポートであることをホスト100に返信するよう構成されてもよい。SSD10がリードオンリデバイスであるか否かの通知方法はこれ以外の様々な形態をとってもよい。
【0192】
このようにこの実施形態では、SSDに対して書き込みが不可能な場合、またはSSDに対する書き込み動作が保証されない場合、SSDに対する書き込み動作がSSD内のデータの欠損やSSDの故障を招く恐れがある場合などの状況下においても、ホスト100とSSDとの間に読み出し専用ブリッジ700を接続するだけで、ホスト100はSSD10に対して読み出し動作を行うことができる。
【0193】
なお、読み出し専用ブリッジ700を接続した状況下でホストの起動に用いられるシステムディスクとしては、SSD10でもよいし、予めシステムをインストールされているSSD10とは別に用意されたSSDまたはハードディスクドライブ(HDD)でもよいし、ブートプログラムをインストールされたDVD−ROM、CD−ROM、USBメモリなどでもよい。
【0194】
なお、読み出し専用ブリッジ700が接続された場合においても、ホスト100は、SSDのデータをバックアップするような機能を備えたSSD制御ツール110あるいはその他のソフトウェアを保持していてもよい。このバックアップ機能を備えたソフトウェアは、読み出し専用ブリッジ700が接続されたことを検知すると、このソフトウェアのウィンドウ内に「読み出し専用ブリッジが接続されています。SSDのデータをバックアップしますか?」などのメッセージとバックアップの可否を選択する「OK」ボタン及び「キャンセル」ボタンが表示される。そして、「OK」ボタンがクリックされるとバックアップが開始され、「キャンセル」ボタンがクリックされるとバックアップは行われずにメッセージの表示が消える。「キャンセル」ボタンが押された場合でも、バックアップは後で行うことができる。
【0195】
なお、第1〜第4の実施形態においては、不揮発性メモリとしてNANDメモリを採用した場合について述べたが、不揮発性メモリとして、ハードディスクドライブ(HDD)などNANDメモリ以外の不揮発性メモリに第1〜第4の実施形態を適用してもよい。また、不揮発性メモリとして、特開2011−161199号公報や特開2011−29586号公報で示されているような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【0196】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0197】
1 コンピュータシステム、10 SSD、20 NAND型フラッシュメモリ(NANDメモリ)、21 フリーブロックテーブル、22 バッドブロックテーブル、23 アクティブブロックテーブル、24 アクティブページテーブル、25 リードオンリー(RO)モードフラグ、30 インタフェースコントローラ、31 RWIFコントローラ、32 ROIFコントローラ、33,34 選択スイッチ、38 インタフェースコントローラ、50 メモリコントローラ、57 バス、58 ECC訂正回路、90 ATAインタフェース、100 ホスト、110 SSD制御ツール、120 インタフェースドライバ、121 RWIFドライバ、122 ROIFドライバ、123,124 選択スイッチ、170 インタフェースドライバ、700 インタフェース中継デバイス(読み出し専用)、400 2次記憶装置。
【特許請求の範囲】
【請求項1】
ホスト装置と、外部記憶装置とを備える情報処理装置において、
外部記憶装置は、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第1のインタフェースコントローラから第2のインタフェースコントローラへ前記インタフェースコントローラを切り替える第1の制御部と、
を備え、
前記ホスト装置は、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースドライバとが択一選択可能なインタフェースドライバと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える第2の制御部と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記第1の制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第2の制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項1または請求項2に記載の情報処理装置。
【請求項4】
前記第1のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第2のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト動作のうちのリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項1乃至請求項3の何れか一つに記載の情報処理装置。
【請求項5】
前記第2のインタフェースコントローラは、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記第2の制御部は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項1乃至請求項4の何れか一つに記載の情報処理装置。
【請求項6】
前記第2の制御部は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップすることを特徴とする請求項1乃至請求項5の何れかに記載の情報処理装置。
【請求項7】
ホスト装置と、リード及びライト可能な不揮発性メモリを有する外部記憶装置とを備える情報処理装置の制御方法において、
前記外部記憶装置は、前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、前記ホスト装置と接続されるインタフェースコントローラを不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースコントローラから前記不揮発性メモリのリード動作のみをサポートする第2のインタフェースコントローラに切り替え、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記外部記憶装置を動作させるためのインタフェースドライバを前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバから前記不揮発性メモリのリード動作のみをサポートする第2のインタフェースドライバに切り替える
ことを特徴とする情報処理装置の制御方法。
【請求項8】
前記外部記憶装置は、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記ホスト装置は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項7に記載の情報処理装置の制御方法。
【請求項9】
前記ホスト装置は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項7または請求項8に記載の情報処理装置の制御方法。
【請求項10】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースドライバとが択一選択可能なインタフェースコントローラと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える制御部と、
を備えることを特徴とするホスト装置。
【請求項11】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項10に記載のホスト装置。
【請求項12】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項10または請求項11に記載のホスト装置。
【請求項13】
前記制御部は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項10乃至請求項12の何れか一つに記載のホスト装置。
【請求項14】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースドライバとが択一選択可能なインタフェースコントローラを備えるホスト装置にロードされる制御プログラムであって、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える制御部を備えることを特徴とする制御プログラム。
【請求項15】
前記制御部は、外部記憶装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項14に記載の制御プログラム。
【請求項16】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項14に記載の制御プログラム。
【請求項17】
前記制御部は、外部記憶装置に対し統計情報の送信を要求し、外部記憶装置から受信した統計情報と閾値との比較を行い、統計情報が閾値を超過しているとき、外部記憶装置をリードオンリーメモリとして認識すべきと判断することを特徴とする請求項14乃至請求項16の何れか一つに記載の制御プログラム。
【請求項18】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項14乃至請求項17の何れか一つに記載の制御プログラム。
【請求項19】
前記制御部は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項14乃至請求項18の何れか一つに記載の制御プログラム。
【請求項20】
ホスト装置に接続される外部記憶装置であって、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第1のインタフェースコントローラから第2のインタフェースコントローラへ前記インタフェースコントローラを切り替える制御部と、
を備えることを特徴とする外部記憶装置。
【請求項21】
前記制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項20に記載の外部記憶装置。
【請求項22】
前記第1のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第2のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項20または請求項21に記載の外部記憶装置。
【請求項23】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置において、
前記ホスト装置は、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部と、
を備え、
前記中継装置は、
前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、
前記制御部は、中継装置からの前記通知に応答して前記中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置。
【請求項24】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置の制御方法において、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知し、
前記中継装置は、前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知し、
前記ホスト装置は、中継装置からの前記通知に応答して、前記中継装置を動作させるためのインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置の制御方法。
【請求項25】
リード及びライト可能な不揮発性メモリを有する外部記憶装置と、
前記外部記憶装置から受信した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部を有するホスト装置と
の間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置であって、
前記ホスト装置の起動時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、前記通知部によるホスト装置への通知によって、ホスト装置において、中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用可能とすることを特徴とする中継装置。
【請求項1】
ホスト装置と、外部記憶装置とを備える情報処理装置において、
外部記憶装置は、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第1のインタフェースコントローラから第2のインタフェースコントローラへ前記インタフェースコントローラを切り替える第1の制御部と、
を備え、
前記ホスト装置は、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースドライバとが択一選択可能なインタフェースドライバと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える第2の制御部と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記第1の制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第2の制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項1または請求項2に記載の情報処理装置。
【請求項4】
前記第1のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第2のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト動作のうちのリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項1乃至請求項3の何れか一つに記載の情報処理装置。
【請求項5】
前記第2のインタフェースコントローラは、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記第2の制御部は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項1乃至請求項4の何れか一つに記載の情報処理装置。
【請求項6】
前記第2の制御部は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記不揮発性メモリの記憶データを他の記憶媒体にバックアップすることを特徴とする請求項1乃至請求項5の何れかに記載の情報処理装置。
【請求項7】
ホスト装置と、リード及びライト可能な不揮発性メモリを有する外部記憶装置とを備える情報処理装置の制御方法において、
前記外部記憶装置は、前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、前記ホスト装置と接続されるインタフェースコントローラを不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースコントローラから前記不揮発性メモリのリード動作のみをサポートする第2のインタフェースコントローラに切り替え、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記外部記憶装置を動作させるためのインタフェースドライバを前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバから前記不揮発性メモリのリード動作のみをサポートする第2のインタフェースドライバに切り替える
ことを特徴とする情報処理装置の制御方法。
【請求項8】
前記外部記憶装置は、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記ホスト装置は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項7に記載の情報処理装置の制御方法。
【請求項9】
前記ホスト装置は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項7または請求項8に記載の情報処理装置の制御方法。
【請求項10】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、
前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースドライバとが択一選択可能なインタフェースコントローラと、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える制御部と、
を備えることを特徴とするホスト装置。
【請求項11】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項10に記載のホスト装置。
【請求項12】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項10または請求項11に記載のホスト装置。
【請求項13】
前記制御部は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項10乃至請求項12の何れか一つに記載のホスト装置。
【請求項14】
リード及びライト可能な不揮発性メモリを有する外部記憶装置が接続されるホスト装置であって、前記外部記憶装置を動作させるためのインタフェースドライバであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースドライバと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースドライバとが択一選択可能なインタフェースコントローラを備えるホスト装置にロードされる制御プログラムであって、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替える制御部を備えることを特徴とする制御プログラム。
【請求項15】
前記制御部は、外部記憶装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項14に記載の制御プログラム。
【請求項16】
前記制御部は、ホスト装置の動作中及び起動時に、前記不揮発性メモリをリードオンリーメモリとして認識すべきか否かを判定することを特徴とする請求項14に記載の制御プログラム。
【請求項17】
前記制御部は、外部記憶装置に対し統計情報の送信を要求し、外部記憶装置から受信した統計情報と閾値との比較を行い、統計情報が閾値を超過しているとき、外部記憶装置をリードオンリーメモリとして認識すべきと判断することを特徴とする請求項14乃至請求項16の何れか一つに記載の制御プログラム。
【請求項18】
前記外部記憶装置は、前記不揮発性メモリにリード動作のみを行わせるリードオンリーモードに移行した後に、ホスト装置からライト要求を受信したとき、エラーを前記ホスト装置に返信し、
前記制御部は、外部記憶装置からエラーを受信すると、第1のインタフェースドライバから第2のインタフェースドライバへ前記インタフェースドライバを切り替えることを特徴とする請求項14乃至請求項17の何れか一つに記載の制御プログラム。
【請求項19】
前記制御部は、前記インタフェースドライバを、第1のインタフェースドライバから第2のインタフェースドライバへ切り替えた後、前記外部記憶装置の記憶データを他の記憶媒体にバックアップするか否かを明示的にユーザに通知し、承認が得られた場合、前記外部記憶装置の記憶データを他の記憶媒体にバックアップすることを特徴とする請求項14乃至請求項18の何れか一つに記載の制御プログラム。
【請求項20】
ホスト装置に接続される外部記憶装置であって、
リード及びライト可能な不揮発性メモリと、
前記ホスト装置と接続されるインタフェースコントローラであって、前記不揮発性メモリのリード及びライト動作をサポートする第1のインタフェースコントローラと、前記不揮発性メモリのリード及びライト動作のうちのリード動作のみをサポートする第2のインタフェースコントローラとが択一選択可能なインタフェースコントローラと、
前記不揮発性メモリにリード及びライト動作のうちのリード動作のみを行わせるリードオンリーモードに移行させる移行条件が成立するか否かを判定し、前記移行条件が成立したとき、第1のインタフェースコントローラから第2のインタフェースコントローラへ前記インタフェースコントローラを切り替える制御部と、
を備えることを特徴とする外部記憶装置。
【請求項21】
前記制御部は、外部記憶装置の動作中及び起動時に前記移行条件が成立するか否かを判定することを特徴とする請求項20に記載の外部記憶装置。
【請求項22】
前記第1のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリード及びライト可能なデバイスであることをホスト装置に通知し、
前記第2のインタフェースコントローラは、ホスト装置からのアクセスに応答して自身がリードのみ可能なデバイスであることをホスト装置に通知することを特徴とする請求項20または請求項21に記載の外部記憶装置。
【請求項23】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置において、
前記ホスト装置は、
前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部と、
を備え、
前記中継装置は、
前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、
前記制御部は、中継装置からの前記通知に応答して前記中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置。
【請求項24】
ホスト装置と、リード及びライト可能な不揮発性メモリを備える外部記憶装置と、ホスト装置と外部記憶装置との間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置とを備える情報処理装置の制御方法において、
前記ホスト装置は、前記外部記憶装置から取得した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知し、
前記中継装置は、前記ホスト装置の起動検出時、自身がリードのみ可能なデバイスであることをホスト装置に通知し、
前記ホスト装置は、中継装置からの前記通知に応答して、前記中継装置を動作させるためのインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用する
ことを特徴とする情報処理装置の制御方法。
【請求項25】
リード及びライト可能な不揮発性メモリを有する外部記憶装置と、
前記外部記憶装置から受信した情報に基づき前記不揮発性メモリをリード及びライト動作のうちのリード動作のみ可能なリードオンリーメモリとして認識すべきか否かを判定し、リードオンリーメモリとして認識すべきと判断したとき、前記中継装置をホスト装置と外部記憶装置との間に接続すべきことを明示的にユーザに通知する制御部を有するホスト装置と
の間に接続可能であって、前記ホスト装置及び前記外部記憶装置間で情報の中継を行う中継装置であって、
前記ホスト装置の起動時、自身がリードのみ可能なデバイスであることをホスト装置に通知する通知部
を備え、前記通知部によるホスト装置への通知によって、ホスト装置において、中継装置を動作させるインタフェースドライバとして、外部記憶装置のリード及びライト動作のうちのリード動作のみをサポートするインタフェースドライバを適用可能とすることを特徴とする中継装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【公開番号】特開2012−198869(P2012−198869A)
【公開日】平成24年10月18日(2012.10.18)
【国際特許分類】
【出願番号】特願2011−162330(P2011−162330)
【出願日】平成23年7月25日(2011.7.25)
【特許番号】特許第5002719号(P5002719)
【特許公報発行日】平成24年8月15日(2012.8.15)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成24年10月18日(2012.10.18)
【国際特許分類】
【出願日】平成23年7月25日(2011.7.25)
【特許番号】特許第5002719号(P5002719)
【特許公報発行日】平成24年8月15日(2012.8.15)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]