(57)【要約】【課題】  バリアーコマンドに基づいてデータを順に格納するストレージ装置を提供する。【解決手段】  不揮発性メモリ装置を含んだストレージ装置にデータをプログラムする方法は、ホストから第１バリアーコマンド、第２バリアーコマンド及び第３バリアーコマンドを受信し、ホストから第１バリアーコマンドに対応する第１データ、第２バリアーコマンドに対応する第２データ、第３バリアーコマンドに対応する第３データを受信し、第１及び第２バリアーコマンドを併合し、そして前記第１及び第２データを前記第１及び第２バリアーコマンドの順序に対応して連続的に不揮発性メモリ装置にプログラムし、第１及び第２データ全てのプログラム完了を検証し、第１及び第２データのプログラムが完了されれば、第１及び第２データをマップインし、そして第１又は第２データのプログラムが完了されなければ、第１及び第２データ全てをマップアウトし、そしてマップイン又はマップアウトの後に、不揮発性メモリ装置に第３データをプログラムする。【選択図】      図１
2019125366.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリ装置を含んだストレージ装置にデータをプログラムする方法であって、
ホストから第１バリアーコマンド、第２バリアーコマンド、及び第３バリアーコマンドを受信し、
前記ホストから前記第１バリアーコマンドに対応する第１データ、前記第２バリアーコマンドに対応する第２データ、前記第３バリアーコマンドに対応する第３データを受信し、
前記第１及び第２バリアーコマンドを併合し、そして前記第１及び第２データを前記第１及び第２バリアーコマンドの順序に対応して連続的に前記不揮発性メモリ装置にプログラムし、
前記第１及び第２データ全てのプログラム完了を検証し、
前記第１及び第２データのプログラムが完了されれば、前記第１及び第２データをマップインし、そして前記第１データ及び前記第２データのうち少なくとも１つのプログラムが完了されなければ、前記第１及び第２データ全てをマップアウトし、そして
前記マップイン又は前記マップアウトの後に、前記不揮発性メモリ装置に前記第３データをプログラムする、
ことを含む方法。
【請求項２】
前記第１乃至第３バリアーコマンドの各々は、プログラムコマンドを含む、請求項１に記載の方法。
【請求項３】
前記第１乃至第３バリアーコマンドの各々は、前記不揮発性メモリ装置のスペア領域にフラッグ情報で表記される、請求項１に記載の方法。
【請求項４】
前記フラッグ情報は、エポック番号であり、前記併合された第１及び第２バリアーコマンドは、同一なエポック番号を有する、請求項３に記載の方法。
【請求項５】
前記第２バリアーコマンドのエポック番号に追加的に遂行完了記録ビットを記載する、請求項４に記載の方法。
【請求項６】
前記第１及び第２データのプログラム完了を検証することは、遂行完了記録ビットを参照して検証することを含む、請求項４に記載の方法。
【請求項７】
前記第１データは、前記ホストから、前記第１バリアーコマンドの受信の後に連続的に提供される、請求項１に記載の方法。
【請求項８】
前記第２データは、前記ホストから、前記第２バリアーコマンドの受信に続いて提供される、請求項１に記載の方法。
【請求項９】
前記第１及び第２データのプログラム完了を検証した後に、前記第３データがプログラムされる、請求項１に記載の方法。
【請求項１０】
前記第１及び第２データは、前記不揮発性メモリ装置の第１ブロックにプログラムされ、前記第３データは、前記不揮発性メモリ装置の第２ブロックにプログラムされる、請求項９に記載の方法。
【請求項１１】
前記マップインは、前記第１及び第２データを有効データとして分類する、請求項１に記載の方法。
【請求項１２】
前記マップアウトは、前記第１及び第２データを無効データとして分類する、請求項１に記載の方法。
【請求項１３】
前記無効データとして分類された前記第１及び第２データに対するガーベッジコレクションを遂行することをさらに含む請求項１２に記載の方法。
【請求項１４】
前記第１及び第２データの量は、前記不揮発性メモリ装置のプログラム単位と同一であるか、或いは小さい、請求項１に記載の方法。
【請求項１５】
前記第１及び第２データの前記量が前記プログラム単位より小さい場合、前記第１及び第２データは、第４データと共に前記不揮発性メモリ装置にプログラムされる、請求項１４に記載の方法。
【請求項１６】
不揮発性メモリ装置を制御するメモリコントローラの動作方法であって、
ホストから第１バリアーコマンドと第１プログラムコマンド、第２バリアーコマンドと第２プログラムコマンド、及び第３バリアーコマンドと第３プログラムコマンドを受信し、
前記ホストから前記第１バリアーコマンドに対応する第１データ、前記第２バリアーコマンドに対応する第２データ、前記第３バリアーコマンドに対応する第３データを受信し、
前記第１乃至第３バリアーコマンドを併合して前記第１乃至第３データを連続的に前記不揮発性メモリ装置にプログラムし、
前記第１乃至第３データのプログラムの成否を検証し、前記第１乃至第３データが全てプログラムされれば、前記第１乃至第３データを有効データとして分類し、そして前記第１乃至第３データのうち少なくとも１つのデータがプログラムされなければ、前記第１乃至第３データを全て無効データとして分類する、
ことを含む動作方法。
【請求項１７】
前記第１乃至第３データの各々のサイズの合計は、前記不揮発性メモリ装置のプログラム単位と同一であるか、或いは小さい、請求項１６に記載の動作方法。
【請求項１８】
前記第１乃至第３データのプログラムの成否は、遂行完了記録ビットを参照して検証される、請求項１６に記載の動作方法。
【請求項１９】
ホストと、
前記ホストから第１乃至第３バリアーコマンドを受信し、そして前記第１乃至第３バリアーコマンドに各々対応しプログラムされる第１乃至第３データを前記ホストから受信するストレージ装置と、を含み、
前記ストレージ装置は、
前記第１乃至第３データを格納する複数の不揮発性メモリ装置と、
前記複数の不揮発性メモリ装置を制御し、前記第１乃至第３バリアーコマンドを併合し、前記第１乃至第３データを連続的にプログラムし、前記第１乃至第３データのプログラム完了の成否を判別し、前記第１乃至第３データが全てプログラム完了されれば、前記第１乃至第３データを有効データにマップインし、前記第１乃至第３データのうち少なくとも１つのデータがプログラム完了されなければ、前記第１乃至第３データを無効データにマップアウトするメモリコントローラと、を含む、
コンピュータシステム。
【請求項２０】
前記ホストは、前記第１乃至第３バリアーコマンドを前記ストレージ装置に提供する時、前記第１乃至第３データを前記第１乃至第３バリアーコマンドに各々対応してフラッシュしない、請求項１９に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ装置に係り、さらに詳細にはバリアーコマンドに基づいてデータを順に格納するストレージ装置に係る。
【背景技術】
【０００２】
ストレージ装置は不揮発性記憶媒体として、ストレージ装置に格納されたデータは電源供給に関わらず、永久的に或いは半永久的に保持されることができる。一般的に、ストレージ装置はホストから提供されたデータを不揮発性メモリではないバッファメモリに先に格納し、その次に、バッファメモリのデータを不揮発性メモリに格納する。しかし、上述したプログラム動作によってホストの書込み要請の順序が保障されないことがある。
【０００３】
ホストは書込み順序を保障するために、データを伝送し、そのデータがストレージ装置の不揮発性メモリに格納される時まで（フラッシュ（ｆｌｕｓｈ））待ち、そしてその次に、データをストレージ装置に伝送することがある。このような動作によってホストの性能が低下してしまい得る。したがって、ホストの性能低下無しで書込み要請の順序を保障することができるストレージ装置が必要である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国登録特許第８，００６，０４７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は上述した技術的課題を解決するためのものであって、本発明の目的はバリアーコマンドに基づいてデータを順に格納するストレージ装置を提供することにある。
【課題を解決するための手段】
【０００６】
本発明の実施形態に係る、不揮発性メモリ装置を含むストレージ装置にデータをプログラムする方法は、ホストから第１バリアーコマンド（ｂａｒｒｉｅｒ  ｃｏｍｍａｎｄ）、第２バリアーコマンド、及び第３バリアーコマンドを受信し、前記ホストから前記第１バリアーコマンドに対応する第１データ、前記第２バリアーコマンドに対応する第２データ、前記第３バリアーコマンドに対応する第３データを受信し、前記第１及び第２バリアーコマンドを併合（ｍｅｒｇｅ）し、そして前記第１及び第２データを前記第１及び第２バリアーコマンドの順序に対応して連続的に前記不揮発性メモリ装置にプログラムし、前記第１及び第２データ全てのプログラム完了を検証（ｖｅｒｉｆｙ）し、前記第１及び第２データのプログラムが完了されれば、前記第１及び第２データをマップイン（ｍａｐ  ｉｎ）し、そして前記第１データ及び前記第２データのうち少なくとも１つのプログラムが完了されなければ、前記第１及び第２データ全てをマップアウト（ｍａｐ  ｏｕｔ）し、そして前記マップイン又は前記マップアウトの後に、前記不揮発性メモリ装置に前記第３データをプログラムする。
【０００７】
本発明の他の実施形態に係る、不揮発性メモリ装置を制御するメモリコントローラの動作方法は、ホストから第１バリアーコマンドと第１プログラムコマンド、第２バリアーコマンドと第２プログラムコマンド、及び第３バリアーコマンドと第３プログラムコマンドを受信し、ホストから第１バリアーコマンドに対応する第１データ、第２バリアーコマンドに対応する第２データ、第３バリアーコマンドに対応する第３データを受信し、前記第１乃至第３バリアーコマンドを併合して前記第１乃至第３データを連続的に前記不揮発性メモリ装置にプログラムし、前記第１乃至第３データのプログラムの成否を検証（ｖｅｒｉｆｙ）し、前記第１乃至第３データが全てプログラムされれば、前記第１乃至第３データを有効（ｖａｌｉｄ）データとして分類し、そして前記第１乃至第３データのうち少なくとも１つのデータがプログラムされなければ、前記第１乃至第３データを全て無効（ｉｎｖａｌｉｄ）データとして分類する。
【０００８】
本発明のその他の実施形態に係るコンピュータシステムは、ホストと、前記ホストから第１乃至第３バリアーコマンドを受信し、そして前記第１乃至第３バリアーコマンドに各々対応しプログラムされる第１乃至第３データをホストから受信するストレージ装置と、を含み、前記ストレージ装置は、前記第１乃至第３データを格納する複数の不揮発性メモリ装置と、前記複数の不揮発性メモリ装置を制御し、前記第１乃至第３バリアーコマンドを併合し、前記第１乃至第３データを連続的にプログラムし、前記第１乃至第３データのプログラム完了の成否を判別し、前記第１乃至第３データが全てプログラム完了されれば、前記第１乃至第３データを有効データにマップイン（ｍａｐ  ｉｎ）し、前記第１乃至第３データのうち少なくとも１つのデータがプログラム完了されなければ、前記第１乃至第３データを無効データにマップアウト（ｍａｐ  ｏｕｔ）するメモリコントローラと、を含む。
【発明の効果】
【０００９】
本発明の実施形態によれば、ストレージ装置は書込み順序を守るためのバリアーコマンドをサポートすることができる。このようなストレージ装置と通信するホストは、順に要請した書込み要請がストレージ装置によって各々完了される時まで待たずに、書込み要請を順にストレージ装置に提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態に係るコンピュータシステムを例示的に示すブロック図である。
【図２】図１のホストがストレージ装置にジャーナリングを遂行する動作を例示的に示すタイミング図である。
【図３】図１のコントローラをさらに具体的に示すブロック図である。
【図４】本発明の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。
【図５】本発明の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。
【図６】本発明の他の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。
【図７】本発明のその他の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。
【図８】本発明の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。
【図９】本発明の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。
【図１０】本発明の他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。
【図１１】本発明の他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。
【図１２】本発明のその他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。
【図１３】本発明のその他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。
【図１４】図１の不揮発性メモリ装置の不揮発性メモリの中で１つを例示的に示すブロック図である。
【図１５】図１４のメモリセルアレイに含まれたメモリブロックの中で３次元構造の第１ブロックを例示的に示す回路図である。
【図１６】図１のストレージ装置の動作方法を例示的に示す順序図である。
【図１７】本発明の実施形態に係って、書込み順序のためのシステム呼出を支援するホストのソフトウェアスタックを図示する。
【図１８】図１７のホストがストレージ装置にジャーナリングを遂行する動作を例示的に示すタイミング図である。
【図１９】本発明の実施形態に係って、ストレージ装置のＩＯＰＳ及びコマンドキューの深さを例示的に図示する。
【発明を実施するための形態】
【００１１】
以下、本発明の技術分野で通常の知識を有する者が本発明を容易に実施できる程度に、実施形態が明確かつ詳細に記載される。
【００１２】
図１は本発明の実施形態に係るコンピュータシステムを例示的に示すブロック図である。コンピュータシステム１０はホスト１００及びストレージ装置２００を含む。コンピュータシステム１０は個人用コンピュータ、サーバー、ワークステーション、ノートブック型コンピューター、タブレット、モバイル装置、スマートフォン等のような電子装置に適用されるか、或いは具現されることができる。ホスト１００はバリアーコマンド（ｂａｒｒｉｅｒ  ｃｏｍｍａｎｄ）及びデータをストレージ装置２００（例えば、ＳＳＤ（ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅ））に伝送する。ストレージ装置２００はバリアーコマンドに基づいてデータを内部に格納する。ホスト１００はバリアーコマンドを発行してデータの書込み順序をストレージ装置２００に通知し、ストレージ装置２００はバリアーコマンドに基づいてホスト１００が要請したデータの書込み順序を守る。ホスト１００はプロセシングユニット１１０、ホストメモリ１２０、及びインターフェイス回路１３０を含む。
【００１３】
プロセシングユニット１１０はホストメモリ１２０にロード（ｌｏａｄ）されたソフトウェアを実行する。例えば、プロセシングユニット１１０はアプリケーションプログラム（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍ）、ファイルシステム（ｆｉｌｅ  ｓｙｓｔｅｍ）、ブロック入出力スケジューラー（ｂｌｏｃｋ  Ｉ／Ｏ  ｓｃｈｅｄｕｌｅｒ）、及び装置ドライバー（ｄｅｖｉｃｅ  ｄｒｉｖｅｒ）を実行する。プロセシングユニット１１０は同種マルチ−コアプロセッサ（ｈｏｍｏｇｅｎｅｏｕｓ  ｍｕｌｔｉ−ｃｏｒｅ  ｐｒｏｃｅｓｓｏｒ）又は異種マルチ−コアプロセッサ（ｈｅｔｅｒｏｇｅｎｅｏｕｓ  ｍｕｌｔｉ−ｃｏｒｅ  ｐｒｏｃｅｓｓｏｒ）を含む。例えば、プロセシングユニット１１０はＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、ＩＳＰ（ｉｍａｇｅ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、ＤＳＰ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、ＧＰＵ（ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、ＶＰＵ（ｖｉｓｉｏｎ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、及びＮＰＵ（ｎｅｕｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）のうちの少なくとも１つを含む。
【００１４】
ホストメモリ１２０にはコンピュータシステム１０内すべてのハードウェアとソフトウェアを管理するオペレーティングシステムＯＳがロード（ｌｏａｄ）される。さらに具体的に、ホストメモリ１２０にはユーザー空間（ｕｓｅｒ  ｓｐａｃｅ）に含まれるアプリケーションプログラム１２１とカーネル（ｋｅｒｎｅｌ）空間に含まれるファイルシステム１２２、ブロック入出力スケジューラー１２３、及び装置ドライバー１２５がロードされる。ホストメモリ１２０にロードされたソフトウェア階層１２１〜１２３、１２５はストレージ装置２００にアクセスするためのソフトウェアスタック（ｓｔａｃｋ）に含まれる。ホストメモリ１２０はＤＲＡＭ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）装置又はＳＲＡＭ（ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）装置のような記憶媒体を含む。
【００１５】
アプリケーションプログラム１２１は基本的なサービスとして実行されるか、又は使用者の要請によって実行される。アプリケーションプログラム１２１が位置するユーザー空間とファイルシステム１２２、ブロック入出力スケジューラー１２３、装置ドライバー１２５等を含むカーネルが位置するカーネル空間は互いに分離される。アプリケーションプログラム１２１はストレージ装置２００のような資源に直接的にアクセスできない。代わりに、アプリケーションプログラム１２１はシステム呼出（ｓｙｓｔｅｍ  ｃａｌｌ）関数が含まれたライブラリ（図示せず）上に定義された関数を呼出し、カーネルに必要である作業を要請する。システム呼出関数が呼出されると、ユーザーモードからカーネルモードに転換される（ｓｗｉｔｃｈ）。
【００１６】
ファイルシステム１２２はストレージ装置２００に格納されるファイル又はデータを管理する。例えば、ファイルシステム１２２はＦＡＴ（ｆｉｌｅ  ａｌｌｏｃａｔｉｏｎ  ｔａｂｌｅ）、ＮＴＦＳ（ｎｅｗ  ｔｅｃｈｎｏｌｏｇｙ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ＨＦＳ（ｈｉｅｒａｒｃｈｉｃａｌ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ＨＰＦＳ（ｈｉｇｈ  ｐｅｒｆｏｒｍａｎｃｅ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ＵＦＳ（ｕｎｉｘ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ｅｘｔ２（ｓｅｃｏｎｄａｒｙ  ｅｘｔｅｎｄｅｄ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ｅｘｔ３、ｅｘｔ４、ＪＦＳ（ｊｏｕｒｎａｌｉｎｇ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ＩＳＯ  ９６６０、Ｆｉｌｅｓ−１１、ＶｘＦＳ（ｖｅｒｉｔａｓ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ＺＦＳ、ＲｅｉｓｅｒＦＳ、ＵＤＦ（ｕｎｉｖｅｒｓａｌ  ｄｉｓｋ  ｆｏｒｍａｔ）等を含むことができる。特に、ファイルシステム１２２はＳＰＯ（ｓｕｄｄｅｎ  ｐｏｗｅｒ  ｏｆｆ）又はシステムクラッシュ（ｓｙｓｔｅｍ  ｃｒａｓｈ）によってデータベース、ファイル、又はデータの一貫性が維持されないことを防止するためにジャーナリング（ｊｏｕｒｎａｌｉｎｇ）を遂行する。
【００１７】
ブロック入出力スケジューラー１２３はブロック階層に位置する。ブロック入出力スケジューラー１２３はファイルシステム１２２から入出力ＩＯ要請を受信し、受信されたＩＯ要請をスケジューラーキュー１２４に格納する。ブロック入出力スケジューラー１２３はスケジューラーキュー１２４を管理する。ブロック入出力スケジューラー１２３はＩＯ要請を併合するか、ＩＯ要請の順序を調整する（再配列（ｒｅ−ｏｒｄｅｒｉｎｇ））。例えば、スケジューラーキュー１２４はＮｏｏｐスケジューラー、Ｄｅａｄｌｉｎｅスケジューラー、Ａｎｔｉｃｉｐａｔｏｒｙスケジューラー、ＣＦＱ（ｃｏｍｐｌｅｔｅｌｙ  ｆａｉｒ  ｑｕｅｕｉｎｇ）スケジューラー等を含む。
【００１８】
装置ドライバー１２５はストレージ装置２００のようなハードウェア装置を制御するためにカーネルの一部分として動作するプログラムである。装置ドライバー１２５はスケジューラーキュー１２４内のＩＯ要請を取り出し、ストレージ装置２００を制御するコマンドを生成する。装置ドライバー１２５はスケジューラーキュー１２４のＩＯ要請を処理する。例えば、装置ドライバー１２５はブロック単位にストレージ装置２００にデータ入出力を遂行するブロックデバイスである。実施形態において、ホストメモリ１２０にロードされるプログラム、ソフトウェア階層は図１で図示されたことに限定されない。
【００１９】
インターフェイス回路１３０はホスト１００とストレージ装置２００との間の物理的な連結を提供する。例えば、インターフェイス回路１３０はホスト１００で生成される多様なＩＯ要請に対応するコマンド、アドレス、データ等をストレージ装置２００との通信方式に応じて変換する。
【００２０】
ホスト１００はバリアーコマンド及びデータをストレージ装置２００に伝送する。ホスト１００はバリアーコマンドを発行することによってストレージ装置２００にデータを順に（ｉｎ  ｏｒｄｅｒ）書き込むことを要請する。ストレージ装置２００はホスト１００からバリアーコマンド及びバリアーコマンドに対応するデータを受信する。ストレージ装置２００はコントローラ２１０、バッファメモリ２２０、及び不揮発性メモリ装置２３０を含む。
【００２１】
ストレージ装置２００はコントローラ２１０、バッファメモリ２２０、及び不揮発性メモリ装置２３０を含む。コントローラ２１０はバッファメモリ２２０及び不揮発性メモリ装置２３０の動作を制御する。コントローラ２１０は不揮発性メモリ装置２３０よりデータ入出力速度が速いバッファメモリ２２０にホスト１００から受信されたデータを格納し（バッファーリング（ｂｕｆｆｅｒｉｎｇ））、次いで、バッファメモリ２２０に格納されたデータを不揮発性メモリ装置２３０に書き込むか、或いはプログラムする。
【００２２】
実施形態において、コントローラ２１０とインターフェイス回路１３０とはＵＳＢ（ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＳＣＳＩ（ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）、ＰＣＩｅ（ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）、Ｍ−ＰＣＩｅ（ｍｏｂｉｌｅ  ＰＣＩｅ）、ＮＶＭｅ（ｎｏｎｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ  ｅｘｐｒｅｓｓ）、ＡＴＡ（ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）、ＰＡＴＡ（ｐａｒａｌｌｅｌ  ＡＴＡ）、ＳＡＴＡ（ｓｅｒｉａｌ  ＡＴＡ）、ＳＡＳ（ｓｅｒｉａｌ  ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＩＤＥ（ｉｎｔｅｇｒａｔｅｄ  ｄｒｉｖｅ  ｅｌｅｃｔｒｏｎｉｃｓ）、ＵＦＳ（ｕｎｉｖｅｒｓａｌ  ｆｌａｓｈ  ｓｔｏｒａｇｅ）、Ｆｉｒｅｗｉｒｅ等のような多様なインターフェイス規約（ｉｎｔｅｒｆａｃｅ  ｐｒｏｔｏｃｏｌ）のうちの１つ以上に応じて互いに通信することができる。
【００２３】
バッファメモリ２２０はホスト１００から受信されたデータ又は不揮発性メモリ装置２３０から受信されたデータを一時的に格納する。バッファメモリ２２０はホスト１００の論理アドレスＬＡ（或いは、論理ブロックアドレスＬＢＡ）と不揮発性メモリ装置２３０の物理アドレスＰＡ（或いは、物理ブロックアドレスＰＢＡ）の関係を示すマッピングテーブルを格納する。バッファメモリ２２０はＤＲＡＭ装置又はＳＲＡＭ装置を利用して具現される。
【００２４】
不揮発性メモリ装置２３０は第１チャンネルＣＨ１を通じてコントローラ２１０と通信する不揮発性メモリ、第２チャンネルＣＨ２を通じてコントローラ２１０と通信する不揮発性メモリ、及び第３チャンネルＣＨ３を通じてコントローラ２１０と通信する不揮発性メモリを含む。不揮発性メモリ装置２３０とコントローラ２１０との間のチャンネルの数は図１で図示されたことに限定されない。不揮発性メモリの各々はＮＡＮＤフラッシュメモリセル、ＮＯＲフラッシュメモリセル、ＲＲＡＭ（登録商標（ｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））セル、ＦＲＡＭ（登録商標（ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））セル、ＰＲＡＭ（ｐｈａｓｅ  ｃｈａｎｇｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）セル、ＴＲＡＭ（ｔｈｙｒｉｓｔｏｒ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）セル、ＭＲＡＭ（ｍａｇｎｅｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）セル等のような不揮発性メモリセルを含むことができる。以下の説明で、第１乃至第３不揮発性メモリの各々はＮＡＮＤフラッシュメモリセルを含むことと仮定する。
【００２５】
実施形態において、コントローラ２１０はバッファメモリ２２０をキャッシュ（ｃａｃｈｅ）メモリとして利用する。コントローラ２１０はバッファメモリ２２０に不揮発性メモリ装置２３０のプログラム単位（ｐｒｏｇｒａｍ  ｕｎｉｔ）に対応するデータを格納及び併合し、併合されたデータを不揮発性メモリ装置２３０に１度にプログラムする。上述した動作によって、不揮発性メモリ装置２３０の寿命及び性能が改善されるが、ホスト１００から書込みコマンドを受信した順にデータの集合が不揮発性メモリ装置２３０にプログラムされないことがあり得る。ここで、データの集合は書込みコマンドに各々対応するデータの複数形態を示すための用語であり、マルチデータ又は複数のデータと称されてもよい。ホスト１００はストレージ装置２００に格納されるデータの種類又はアプリケーションプログラム１２１に基づいてデータの集合が不揮発性メモリ装置２３０に順にプログラムされるように、バリアーコマンドを発行する。
【００２６】
図２は図１のホストがジャーナリングを遂行する動作を例示的に示すタイミング図である。図２は図１を参照して説明される。例えば、ホストメモリ１２０にロードされたオペレーティングシステム（例えば、アンドロイドオペレーティングシステム（ａｎｄｒｏｉｄ  ＯＳ））はキャッシュフラッシュコマンド（ｃａｃｈｅ  ｆｌｕｓｈ  ｃｏｍｍａｎｄ）を頻繁に生成する。オペレーティングシステムはデータが不揮発性メモリ装置２３０に実際にプログラムされることを保障するために、キャッシュフラッシュコマンドを生成することができるが、データの集合が不揮発性メモリ装置２３０に書き込まれる順序を保障するために、キャッシュフラッシュコマンドを生成することもできる。前述した通り、ファイルシステム１２２はジャーナリングを遂行する。ホスト１００はデータベースファイルの一部を修正する場合、修正されなければならないデータ元本をジャーナルにバックアップし、データベースファイルを修正し、そしてジャーナルを削除する。ファイルシステム１２２がジャーナルトランザクション（ｔｒａｎｓａｃｔｉｏｎ）を遂行完了（ｃｏｍｍｉｔ）するために、又はデータベースに対する一貫性を維持するために、キャッシュフラッシュコマンドをストレージ装置２００に伝送する。このようなキャッシュフラッシュコマンドは書込み順序を守るためのものである。
【００２７】
図２を参照すれば、ジャーナルをバックアップする時又はデータベースファイル修正の後にｆｓｙｎｃ（）のようなシステム呼出が呼出される。ｆｓｙｎｃ（）が開始されると、ファイルシステム１２２はファイルデータＤをストレージ装置２００に伝送するためにブロック階層のスケジューラーキュー１２４に書込み要請を挿入する。書込み要請はストレージ装置２００にディスパッチ（ｄｉｓｐａｔｃｈ）される。ファイルシステム１２２はファイルデータＤのＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）伝送が完了される時まで待つ。ＤＭＡ伝送はプロセシングユニット１１０と独立的なホスト１００内のＤＭＡコントローラ（図示せず）がストレージ装置２００と直接的にデータを交換することを意味する。ファイルシステム１２２は、ファイルデータＤのＤＭＡ伝送が完了されると、ジャーナルトランザクションを遂行完了するために、ＪＢＤ（ｊｏｕｒｎａｌ  ｂｌｏｃｋ  ｄｅｖｉｃｅ）をトリガー（ｔｒｉｇｇｅｒ）する。ＪＢＤはファイルシステム１２２がジャーナリングのために確保したホストメモリ１２０の一部で実行されるスレッド（ｔｈｒｅａｄ）である。
【００２８】
ＪＢＤはジャーナルデータＪＤをストレージ装置２００に伝送するためにスケジューラーキュー１２４に書込み要請を挿入する。装置ドライバー１２５によって書込み要請はストレージ装置２００にディスパッチされる。ＪＢＤはジャーナルデータＪＤのＤＭＡ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）伝送が完了される時まで待つ。ファイルシステム１２２は、ジャーナルデータＪＤのＤＭＡ伝送が完了されると、ジャーナルデータＪＤがバッファメモリ２２０で不揮発性メモリ装置２３０にフラッシュされるように、スケジューラーキュー１２４にフラッシュ要請を挿入する。装置ドライバー１２５によってフラッシュ要請はストレージ装置２００にディスパッチされる（即ち、キャッシュフラッシュコマンドの伝送）。ジャーナルデータＪＤのフラッシュが完了されると、スケジューラーキュー１２４に挿入された書込み要請がストレージ装置２００にディスパッチされる。このような書込み要請に応じてジャーナルコミット（ｊｏｕｒｎａｌ  ｃｏｍｍｉｔ；ＪＣ）のＤＭＡ伝送が完了され、ジャーナルコミットＪＣのフラッシュが完了されると、ｆｓｙｎｃ（）がリターン（ｒｅｔｕｒｎ）される。ジャーナルコミットＪＣが不揮発性メモリ装置２３０に書き込まれた後に、ファイルシステム１２２はジャーナリングトランザクションを遂行完了する。ジャーナリングトランザクションを遂行完了した後にファイルシステム１２２は他の動作を遂行する。
【００２９】
図２を参照すれば、ファイルシステム１２２は、ジャーナリングを遂行する間、書込み順序を守るために、ファイルデータＤのＤＭＡ伝送、ジャーナルデータＪＤのＤＭＡ伝送及びフラッシュ、及びジャーナルコミットＪＣのＤＭＡ伝送及びフラッシュが全て完了される時まで待たなければならない。図２で説明されたジャーナリングはストレージ装置２００内部の並列処理を無力化する（ｎｅｕｔｒａｌｉｚｅ）か、又はコントローラ２１０のコマンドキューの深さ（ｄｅｐｔｈ）を減少させるかしてしまい得る。特に、ホスト１００の動作はストレージ装置２００内部のセルプログラミングに必要である時間だけ遅延される。したがって、ホスト１００は書込み順序を守り、キャッシュフラッシュコマンドによる遅延を減らすために、キャッシュフラッシュコマンドの代わりにバリアーコマンドを生成する。ホスト１００はキャッシュフラッシュコマンドの代わりにバリアーコマンドを発行し、バリアーコマンドに応じたストレージ装置２００の動作が完了される時まで待たずに他の動作を遂行することができる。
【００３０】
実施形態において、バリアーコマンドはホスト１００とストレージ装置２００との間のインターフェイス規約に定義されたものである。バリアーコマンドは前述したスケジューラーキュー１２４の１エントリ（ｅｎｔｒｙ）を占める。他の実施形態において、ホスト１００は書込みコマンドのフラッグ（例えば、ＲＥＱ＿ＢＡＲＲＩＥＲ）を設定することによって書込みコマンドをバリアーコマンドとして設定することができる。ストレージ装置２００は書込みコマンドのフラッグをデコーディング（ｄｅｃｏｄｉｎｇ）し、書込みコマンドがバリアーコマンドであるか否かを確認する。ストレージ装置２００はバリアーコマンドに対応するデータを順に格納する。バリアーコマンドはプログラムコマンド、即ち書込みコマンドを含む。
【００３１】
図２でｆｓｙｎｃ（）が呼出されたことと図示されたが、ｆｄａｔａｓｙｎｃ（）が呼出されてもよい。ｆｄａｔａｓｙｎｃ（）はｆｓｙｎｃ（）と類似である。ｆｓｙｎｃ（）によってファイルメタデータが修正される。しかし、ｆｄａｔａｓｙｎｃ（）が呼出される場合、新しく書き込まれたデータを読み出すためのファイルメタデータが追加修正されなかったら、ファイルメタデータが修正されないことがある。
【００３２】
図３は図１のコントローラをさらに具体的に示すブロック図である。図３は図１を参照して説明される。コントローラ２１０はプロセシングユニット２１１、ワーキングメモリ２１２、ホストインターフェイス回路２１４、バッファメモリインターフェイス回路２１５、及びフラッシュインターフェイス回路２１６を含む。コントローラ２１０はＳｏＣ（ｓｙｓｔｅｍ  ｏｎ  ｃｈｉｐ）、ＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）、又はＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）を利用して具現されることができる。バッファメモリ２２０は図１で図示されたようにコントローラ２１０と別個に提供されるか、或いは図３で図示されたようにコントローラ２１０に含まれることができる。
【００３３】
プロセシングユニット２１１はホスト１００から提供されるコマンドをデコーディングする。プロセシングユニット２１１はコマンドに基づいてコントローラ２１０の他の構成要素２１２〜２１６の動作を制御する。プロセシングユニット２１１は不揮発性メモリ装置２３０を管理するためのガーベッジコレクションや、論理アドレスと物理アドレスとの関係を示すマッピングテーブル、ウェアレベリング（ｗｅａｒ  ｌｅｖｅｌｉｎｇ）等を遂行するためのフラッシュ変換階層ＦＴＬを実行する。プロセシングユニット２１１は前述したプロセシングユニットのうちの少なくとも１つを含む。
【００３４】
ワーキングメモリ２１２はキャッシュメモリとして動作する。ワーキングメモリ２１２はプロセシングユニット２１１のデコーディング結果を格納する。例えば、ワーキングメモリ２１２の領域にはホスト１００から伝送される順にコマンドＣＭＤ１〜ＣＭＤ２を格納するコマンドキュー２１３が割当される。ここで、コマンドキュー２１３に格納されるコマンドの数は図示されたことに限定されない。そして、図示されたことと異なり、コマンドキュー２１３はプロセシングユニット２１１に、又はバッファメモリ２２０の一部領域に位置することもできる。
【００３５】
ホストインターフェイス回路２１４は上述したインターフェイス規約に応じてホスト１００と通信を遂行する。例えば、ホストインターフェイス回路２１４はＮＶＭｅプロトコルに応じて動作する。プロセシングユニット２１１はホストインターフェイス回路２１４を通じてコマンドを受信し、受信されたコマンドを順にコマンドキュー２１３に挿入する。
【００３６】
バッファメモリインターフェイス回路２１５はプロセシングユニット２１１の制御に応じてバッファメモリ２２０の読出し動作と書込み動作を制御する。バッファメモリインターフェイス回路２１５は論理アドレスと物理アドレスとの関係を示すマッピングテーブルをバッファメモリ２２０に提供する。バッファメモリインターフェイス回路２１５はバッファメモリ２２０に格納されたデータをホストインターフェイス回路２１４又はフラッシュインターフェイス回路２１６に提供する。バッファメモリインターフェイス回路２１５はホストインターフェイス回路２１４又はフラッシュインターフェイス回路２１６から提供されたデータをバッファメモリ２２０に提供する。
【００３７】
バッファメモリ２２０は書込みバックキャッシュ（ｗｒｉｔｅ  ｂａｃｋ  ｃａｃｈｅ）２２１が割当される領域と書込みバッファ（ｗｒｉｔｅ  ｂｕｆｆｅｒ）２２２が割当される領域とを含む。例えば、ホスト１００から提供され、コマンドに対応するデータのサイズが不揮発性メモリ装置２３０のプログラム単位より小さければ、データは書込みバックキャッシュ２２１に格納される。ホスト１００から提供され、コマンドに対応するデータのサイズがメモリ装置２３０のプログラム単位と同一であるか、或いはプログラム単位より大きければ、データは書込みバッファ２２２に格納される。
【００３８】
フラッシュインターフェイス回路２１６は不揮発性メモリ装置２３０とデータを交換する。フラッシュインターフェイス回路２１６はバッファメモリ２２０から提供されたデータを図１のチャンネルＣＨ１〜ＣＨ３を通じて不揮発性メモリ装置２３０に書き込むか、又は不揮発性メモリ装置２３０からチャンネルＣＨ１〜ＣＨ３を通じてデータを受信し、受信されたデータをバッファメモリ２２０に提供する。
【００３９】
以下、コントローラ２１０がバリアーコマンドを処理する多様な例示が説明される。
【００４０】
図４及び図５は本発明の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。図４及び図５は図１を参照して共に説明される。説明を簡易にするために、ストレージ装置２００のコマンドキュー２１３、書込みバックキャッシュ２２１、書込みバッファ２２２、及び図１の不揮発性メモリ装置２３０のみが例示的に図示されている。不揮発性メモリ装置２３０は複数のブロックを含むが、例示的に１つのブロックのみが図示されている。ブロックは少なくとも１つ以上の物理ページ（ｐｈｙｓｉｃａｌ  ｐａｇｅ）を含む。物理ページは読出し単位或いは書込み（プログラム）単位に対応するメモリセルを含む。ブロックのメモリセルは消去単位に対応する。
【００４１】
ストレージ装置２００のコントローラ２１０は第１書込みコマンドＷＣＭＤ１、第２バリアーコマンドＢＣＭＤ２、及び第３書込みコマンドＷＣＭＤ３を順に受信し、第１書込みコマンドＷＣＭＤ１、第２バリアーコマンドＢＣＭＤ２、及び第３書込みコマンドＷＣＭＤ３は順にコマンドキュー２１３に挿入される。図４でストレージ装置２００は第２バリアーコマンドＢＣＭＤ２をサポートできず、図５でストレージ装置２００はバリアーコマンドＢＣＭＤ２をサポートし、書込み順序を守ることと仮定する。そして、第１書込みコマンドＷＣＭＤ１に対応する第１データＤＡＴＡ１のサイズと第２バリアーコマンドＢＣＭＤ２に対応する第２データＤＡＴＡ２のサイズの各々は不揮発性メモリ装置２３０のプログラム単位（例えば、１６ＫＢ）より小さい４ＫＢであり、そして第３書込みコマンドＷＣＭＤ３に対応する第３データＤＡＴＡ３のサイズは不揮発性メモリ装置２３０のプログラム単位のような１６ＫＢであると仮定する。図４及び図５で、不揮発性メモリ装置２３０のプログラム単位と物理ページのサイズが互いに一致することと図示されたが、プログラム単位と物理ページのサイズは互いに異なってもよい。
【００４２】
例えば、コントローラ２１０は不揮発性メモリ装置２３０のプログラム時間を減少させるために、インタリービング（ｉｎｔｅｒｌｅａｖｉｎｇ）方式にマルチチャンネル、マルチウェイ、及びマルチプレーンを通じて複数の物理ページを同時にプログラムすることができる。即ち、不揮発性メモリ装置２３０のプログラム単位は不揮発性メモリ装置２３０とコントローラ２１０とを連結するチャンネルの数、チャンネルの各々に連結されたウェイの数、不揮発性メモリのプレーンの数、物理ページのサイズ、メモリセルが格納するビットの数に応じて決定される。
【００４３】
コントローラ２１０はプログラム単位より小さい第１データＤＡＴＡ１及び第２データＤＡＴＡ２を書込みバックキャッシュ２２１に格納する。例えば、コントローラ２１０はプログラム単位より小さいデータの集合を書込みバックキャッシュ２２１に併合した後、プログラム単位に対応する併合されたデータを不揮発性メモリ装置２３０にプログラムする。書込みバックキャッシュ２２１はプログラム単位より小さいデータの集合を併合するのに使用される。コントローラ２１０はプログラム単位に対応する第３データＤＡＴＡ３を書込みバッファ２２２に格納する。書込みバッファ２２２はプログラム単位と同一であるか、或いはプログラム単位より大きいデータを格納するのに使用される。
【００４４】
図４を参照すれば、コントローラ２１０はプログラム単位に対応しない第１データＤＡＴＡ１及び第２データＤＡＴＡ２に他のデータが併合される前に、プログラム単位に対応する第３データＤＡＴＡ３を第２データＤＡＴＡ２より先に不揮発性メモリ装置２３０のページにプログラムする。第３データＤＡＴＡ３がプログラムされ、それに次いで、ＳＰＯ又はシステムクラッシュが発生すると、書込みバックキャッシュ２２１に格納された第１データＤＡＴＡ１及び第２データＤＡＴＡ２は消滅される。図４のコントローラ２１０は第２バリアーコマンドＢＣＭＤ２に応じて第１データＤＡＴＡ１、第２データＤＡＴＡ２、及び第３データＤＡＴＡ３を順にプログラムすることができなくなることがある。
【００４５】
対照的に、図５を参照すれば、コントローラ２１０は第２バリアーコマンドＢＣＭＤ２をデコーディングし、第１データＤＡＴＡ１、第２データＤＡＴＡ２、及び第３データＤＡＴＡ３を順にプログラムする。コントローラ２１０は第１データＤＡＴＡ１、第２データＤＡＴＡ２、及び第３データＤＡＴＡ３の一部（８ＫＢ）を併合し、併合されたデータを不揮発性メモリ装置２３０にプログラムする。ここで、併合されたデータのサイズはプログラム単位に対応する。コントローラ２１０は第２バリアーコマンドＢＣＭＤ２に対応する第２データＤＡＴＡ２のサイズがプログラム単位より小さくても、書込みバックキャッシュ２２１又は書込みバッファ２２２から他のデータを借り、他のデータと第２データＤＡＴＡ２とを併合し、そしてプログラム単位に対応する併合されたデータを不揮発性メモリ装置２３０にプログラムする。即ち、コントローラ２１０は第２バリアーコマンドＢＣＭＤ２に基づいて第２データＤＡＴＡ２の書込み順序を守ることができる。
【００４６】
図６は本発明の他の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。図６は図１及び図５を参照して説明される。前述した図４及び図５の仮定は図６にも適用されることができ、図６でストレージ装置２００はバリアーコマンドＢＣＭＤ２をサポートし、書込み順序を守ることと仮定する。
【００４７】
再び図５を参照すれば、コントローラ２１０が第３データＤＡＴＡ３の一部を第２データＤＡＴＡ２に併合する場合、第３データＤＡＴＡ３の残りは他の物理ページにプログラムされる。第３データＤＡＴＡ３のサイズがプログラム単位に対応するにもかかわらず、第３データＤＡＴＡ３が互いに異なるページに分けられ、互いに異なるページにプログラムされ得る。この場合、第３データＤＡＴＡ３の全体を読み出すために、不揮発性メモリ装置２３０は第３データＤＡＴＡ３が格納された少なくとも２つの物理ページを活性化しなければならない。
【００４８】
図６を参照すれば、コントローラ２１０は、第３データＤＡＴＡ３の一部の代わりにダミーデータを第１データＤＡＴＡ１及び第２データＤＡＴＡ２に併合する。コントローラ２１０はダミーデータを利用して第２バリアーコマンドＢＣＭＤ２に対応する第２データＤＡＴＡ２のサイズをプログラム単位に調整する。コントローラ２１０は、第１データＤＡＴＡ１、第２データＤＡＴＡ２、及びダミーデータが併合されてプログラム単位に対応するデータを不揮発性メモリ装置２３０の物理ページにプログラムし、その次に、第３データＤＡＴＡ３を不揮発性メモリ装置２３０の他の物理ページにプログラムする。ここで、第２データＤＡＴＡ２がプログラムされた物理ページと第３データＤＡＴＡ３がプログラムされた物理ページとの位置は互いに隣接することもあり得るし、互いに離れることもあり得る。コントローラ２１０は第２バリアーコマンドＢＣＭＤ２に基づいて第２データＤＡＴＡ２の書込み順序を守ることができる。
【００４９】
図７は本発明のその他の実施形態に係って、ストレージ装置がバリアーコマンドを処理する動作を例示的に図示する。図７は図１及び図５を参照して説明される。前述した図４及び図５の仮定は図７にも適用されることができ、図７でストレージ装置２００はバリアーコマンドをサポートし、書込み順序を守ることと仮定する。
【００５０】
コントローラ２１０は書込みバックキャッシュ２２１に格納された第１データＤＡＴＡ１及び第２データＤＡＴＡ２を第１ブロックＢＬＫ１に格納し、その次に、書込みバッファ２２２に格納された第３データＤＡＴＡ３を第２ブロックＢＬＫ２に格納する。図示されないが、コントローラ２１０は第１データＤＡＴＡ１、第２データＤＡＴＡ２、及び図６のダミーデータを併合し、併合されたデータを第１ブロックＢＬＫ１に格納する。
【００５１】
図７で、プログラム単位より小さい第１データＤＡＴＡ１及び第２データＤＡＴＡ２は相対的に頻繁にアップデートされるホットデータ（ｈｏｔ  ｄａｔａ）であり、プログラム単位に対応する第３データＤＡＴＡ３は相対的に頻繁にアップデートされないコールドデータ（ｃｏｌｄ  ｄａｔａ）である。コントローラ２１０は第２バリアーコマンドＢＣＭＤ２に基づいて第２データＤＡＴＡ２の書込み順序を守りながらも、ホットデータが格納される第１ブロックＢＬＫ１とコールドデータが格納される第２ブロックＢＬＫ２とを分離する。例えば、第１ブロックＢＬＫ１のメモリセルの各々は１ビットを格納する単一レベルセルＳＬＣであり、第２ブロックＢＬＫ２のメモリセルの各々は少なくとも２ビットを格納するマルチレベルセルＭＬＣである。
【００５２】
図５乃至図７を参照すれば、コントローラ２１０は第２バリアーコマンドＢＣＭＤ２に対応する第２データＤＡＴＡ２より先に受信された第１データＤＡＴＡ１を不揮発性メモリ装置２３０にプログラムし、その次に、第２データＤＡＴＡ２を不揮発性メモリ装置２３０にプログラムし、その次に、第２データＤＡＴＡ２より後に受信された第３データＤＡＴＡ３を不揮発性メモリ装置２３０にプログラムする。図５乃至図７で図示されないが、第１データＤＡＴＡ１がプログラムされ、他のデータがプログラムされ、そして第２データＤＡＴＡ２がプログラムされてもよい。また、第２データＤＡＴＡ２がプログラムされ、他のデータがプログラムされ、そして第３データＤＡＴＡ３がプログラムされてもよい。いずれの場合でも、コントローラ２１０は他のデータのプログラムの可否に関わらず、第２データＤＡＴＡ２の書込み順序を守ることができる。
【００５３】
図８及び図９は本発明の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。図８及び図９は図１を参照して共に説明される。図８及び図９で、第１乃至第４データＤＡＴＡ１〜ＤＡＴＡ４の各々のサイズはプログラム単位に対応することと仮定する。コンピュータシステム１０でホスト１００は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を順にストレージ装置２００に伝送し、第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３をＤＭＡ方式にストレージ装置２００に伝送する。ホスト１００は第１バリアーコマンドＢＣＭＤ１、第１データＤＡＴＡ１、第２バリアーコマンドＢＣＭＤ２、第２データＤＡＴＡ２、第３バリアーコマンドＢＣＭＤ３、及び第３データＤＡＴＡ３を順に伝送する。第１データＤＡＴＡ１は第１バリアーコマンドＢＣＭＤ１受信の後に連続的に（ｓｅｑｕｅｎｔｉａｌｌｙ）提供される。第２データＤＡＴＡ２は第２バリアーコマンドＣＭＤ２受信に続いて提供される。但し、ホスト１００は第１データＤＡＴＡ１を伝送する間に、第２バリアーコマンドＢＣＭＤ２を伝送することもできる。
【００５４】
ストレージ装置２００のコントローラ２１０はホスト１００から第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を順に受信し、コマンドキュー２１３に順に挿入する。コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３に各々対応する第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を受信し、バッファメモリ２２０に格納する（１）。
【００５５】
コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３をデコーディングし、第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を受信する順序に対応して連続的に第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を順に不揮発性メモリ装置２３０にプログラムする（２）。コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３のプログラムをアトミックに（ａｔｏｍｉｃａｌｌｙ）遂行する。コントローラ２１０がアトミックプログラム（ａｔｏｍｉｃ  ｐｒｏｇｒａｍ）を遂行すれば、第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３が全て正常に不揮発性メモリ装置２３０にプログラムされる（図８参照）か、又は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３が全て不揮発性メモリ装置２３０にプログラムされない（図９参照）かである。アトミックプログラムによって、第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３の一部のみが不揮発性メモリ装置２３０にプログラムされる場合は発生しない。コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を不揮発性メモリ装置２３０にプログラムし、第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３のプログラムを遂行完了（ｃｏｍｍｉｔ）する。又は、コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３をプログラムすることなく、ロールバック（ｒｏｌｌ  ｂａｃｋ）する。コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３に対するアトミックプログラムを完了した後に第４データＤＡＴＡ４を不揮発性メモリ装置２３０にプログラムする。第４データＤＡＴＡ４に対するコマンドの図示は省略されている。
【００５６】
図８を参照すれば、第１データＤＡＴＡ１は第１物理ページ＜Ｐ１＞にプログラムされ、第２データＤＡＴＡ２は第２物理ページ＜Ｐ２＞にプログラムされ、そして第３データＤＡＴＡ３は第３物理ページ＜Ｐ３＞にプログラムされる（アトミックプログラム成功）。この場合、コントローラ２１０は第１乃至第３物理ページ＜Ｐ１：Ｐ３＞のマッピング情報をマッピングテーブルＬ２Ｐにマップイン（ｍａｐ  ｉｎ）するか、又はアップデートする（３）。ここで、マップインはコントローラ２１０が第１乃至第３物理ページ＜Ｐ１：Ｐ３＞のマッピング情報をマッピングテーブルＬ２Ｐにアップデートする動作を示す。コントローラ２１０はマップインを通じて第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を全て有効データとして分類する。コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３をマップインする。
【００５７】
図９を参照すれば、第１データＤＡＴＡ１は第１物理ページ＜Ｐ１＞にプログラムされ、第３データＤＡＴＡ３は第３物理ページ＜Ｐ３＞にプログラムされたが、ＳＰＯ又はシステムクラッシュによって第２データＤＡＴＡ２は第２物理ページ＜Ｐ２＞にプログラムされないことがある（アトミックプログラム失敗）。この場合、コントローラ２１０は第２物理ページ＜Ｐ２＞のマッピング情報のみならず、第１及び第３物理ページ＜Ｐ１、Ｐ３＞のマッピング情報もマッピングテーブルＬ２Ｐにマップアウト（ｍａｐ  ｏｕｔ）する（３）。ここで、マップアウトはコントローラ２１０が第１乃至第３物理ページ＜Ｐ１：Ｐ３＞のマッピング情報をマッピングテーブルＬ２Ｐにアップデートしない動作を示す。コントローラ２１０はマップアウトを通じて第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を全て無効データとして分類する。コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３に対するガーベッジコレクションを遂行し、第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を消去する（４）。
【００５８】
図１０及び図１１は本発明の他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。図１０及び図１１は図１を参照して共に説明される。図８及び図９の場合と類似に、コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を順に受信し、コマンドキュー２１３に順に挿入する。コントローラ２１０は複数のバリアーコマンドを併合し、処理する。例えば、コントローラ２１０は第１及び第２バリアーコマンドＢＣＭＤ１、ＢＣＭＤ２を併合する。コントローラ２１０は併合された第１及び第２バリアーコマンドＢＣＭＤ１、ＢＣＭＤ２を先に処理し、その次に、第３バリアーコマンドＢＣＭＤ３を処理する。
【００５９】
コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３に各々対応する第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を受信し、バッファメモリ２２０に格納する（１）。コントローラ２１０は第１及び第２バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３の順序に対応して連続的に第１及び第２データＤＡＴＡ１、ＤＡＴＡ２を不揮発性メモリ装置２３０の第２及び第３物理ページ＜Ｐ２、Ｐ３＞にプログラムする。その次に、コントローラ２１０は第１及び第２データＤＡＴＡ１、ＤＡＴＡ２のプログラムの遂行完了の成否を確認するためにコミットページ（ｃｏｍｍｉｔ  ｐａｇｅ）を不揮発性メモリ装置２３０の第４物理ページ＜Ｐ４＞にプログラムする（２）。
【００６０】
コントローラ２１０はコミットページを読み出すことによって第１及び第２データＤＡＴＡ１、ＤＡＴＡ２のプログラムの遂行完了の成否を確認する。コントローラ２１０は第１及び第４物理ページ＜Ｐ１、Ｐ４＞のコミットページを読み出すか、或いはスキャン（ｓｃａｎ）し、コミットページの間の第１及び第２データＤＡＴＡ１、ＤＡＴＡ２のプログラムの遂行完了の成否を確認する。図１０を参照すれば、コントローラ２１０は第１及び第２データＤＡＴＡ１、ＤＡＴＡ２を有効データとして分類し、第１及び第２物理ページ＜Ｐ１、Ｐ２＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインする（３）。逆に、図１１を参照すれば、ＳＰＯ又はシステムクラッシュによって第３物理ページ＜Ｐ３＞に第２データＤＡＴＡ２がプログラムされず、第４物理ページ＜Ｐ４＞にコミットページがプログラムされない。コントローラ２１０は第１及び第２データＤＡＴＡ１、ＤＡＴＡ２を無効データとして分類し、第１及び第２物理ページ＜Ｐ１、Ｐ２＞のマッピング情報をマッピングテーブルＬ２Ｐにマップアウトする（３）。ここで、第３物理ページ＜Ｐ３＞に第２データＤＡＴＡ２がプログラムされ、第４物理ページ＜Ｐ４＞にコミットページのみがプログラムされない場合にも、コントローラ２１０は第１及び第２物理ページ＜Ｐ１、Ｐ２＞のマッピング情報をマッピングテーブルＬ２Ｐにマップアウトする（３）。その後、コントローラ２１０は第１及び第２データＤＡＴＡ１、ＤＡＴＡ２に対するガーベッジコレクションを遂行する（４）。
【００６１】
コントローラ２１０は第１及び第２物理ページ＜Ｐ１、Ｐ２＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインするか、或いはマップアウトした後に、第３データＤＡＴＡ３を第５物理ページ＜Ｐ５＞にプログラムする。その次に、コントローラ２１０は第３データＤＡＴＡ３のプログラムの遂行完了の成否を確認するためにコミットページを第６物理ページ＜Ｐ６＞にプログラムする（４）。コントローラ２１０はコミットページを読み出すか、或いはスキャンし、コミットページの間の第３データＤＡＴＡ３のプログラム遂行完了の成否を確認する。
【００６２】
図１０を参照すれば、コントローラ２１０は第４及び第６物理ページ＜Ｐ４、Ｐ６＞の間の第５物理ページ＜Ｐ５＞にプログラムされた第３データＤＡＴＡ３を有効データとして分類し、第５物理ページ＜Ｐ５＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインする（５）。図１１を参照すれば、コントローラ２１０は第１及び第６物理ページ＜Ｐ１、Ｐ６＞の間の第５物理ページ＜Ｐ５＞にプログラムされた第３データＤＡＴＡ３を有効データとして分類し、第５物理ページ＜Ｐ５＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインする（５）。例えば、第１及び第２データＤＡＴＡ１、ＤＡＴＡ２に対するガーベッジコレクションの遂行始点（４）は第３データＤＡＴＡ３のプログラム始点（５）以後である。
【００６３】
図１２は本発明のその他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。図１２は図１を参照して説明される。図１２で、データのアトミックプログラムが全て成功したことと仮定する。
【００６４】
図８乃至図１１の場合と類似に、コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を順に受信し、コマンドキュー２１３に順に挿入する。例えば、コントローラ２１０は第２及び第３バリアーコマンドＢＣＭＤ２、ＢＣＭＤ３を併合する。コントローラ２１０は第１バリアーコマンドＢＣＭＤ１を先に処理し、その次に、併合された第２及び第３バリアーコマンドＢＣＭＤ２、ＢＣＭＤ３を処理する。コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３に各々対応する第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を受信し、バッファメモリ２２０に格納する（１）。
【００６５】
図８乃至図１１の場合と異なり、コントローラ２１０はデータのみを不揮発性メモリ装置２３０にプログラムするのではなく、フラッグ情報も共に不揮発性メモリ装置２３０にプログラムする。フラッグ情報はデータの書込み順序を示すバリアーコマンドを表記する。
【００６６】
データのエポック（ｅｐｏｃｈ）はホスト１００のバリアーコマンドに応じて決定される。エポック番号はデータのエポックを示し、バリアーコマンドを基準として先にプログラムされるデータと後にプログラムされるデータとを分類するのに使用される。コントローラ２１０はデータのフラッグ情報にデータのエポック番号を含ませる。コントローラ２１０は併合されたバリアーコマンドに対応するデータの集合には同一なエポック番号を割当する。図１２を参照すれば、コントローラ２１０は第１データＤＡＴＡ１に第１エポック番号（ｅｐｏｃｈ  ｎｕｍｂｅｒ；ＥＰ＜１＞）を割当し、第２及び第３データＤＡＴＡ２、ＤＡＴＡ３に第２エポック番号ＥＰ＜２＞を割当する。コントローラ２１０はデータのフラッグ情報にコミット記録ビット（ｃｏｍｍｉｔ  ｒｅｃｏｒｄ  ｂｉｔ；Ｃ）を含ませる。コミット記録ビットはコミットページと類似にデータのプログラム遂行完了の成否を確認するのに使用される。
【００６７】
コントローラ２１０は第１データＤＡＴＡ１、第１エポック番号ＥＰ＜１＞、及びコミット記録ビット（Ｃ）を不揮発性メモリ装置２３０の第１物理ページ＜Ｐ１＞にプログラムする（２）。コントローラ２１０は第１物理ページ＜Ｐ１＞のデータ領域に第１データＤＡＴＡ１を、そして第１物理ページ＜Ｐ１＞のスペア領域に第１エポック番号ＥＰ＜１＞及びコミット記録ビット（Ｃ）をプログラムする。図示されたことと異なり、第１エポック番号ＥＰ＜１＞及びコミット記録ビット（Ｃ）は不揮発性メモリ装置２３０の他のブロック、他のページに格納されることができる。
【００６８】
コントローラ２１０は第１物理ページ＜Ｐ１＞のコミット記録ビット（Ｃ）を読み出し、第１データＤＡＴＡ１のプログラム遂行完了の成否を確認する。コントローラ２１０は第１データＤＡＴＡ１を有効データとして分類し、第１物理ページ＜Ｐ１＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインする（３）。
【００６９】
コントローラ２１０は第１データＤＡＴＡ１と類似に、第２データＤＡＴＡ２及び第２エポック番号ＥＰ＜２＞を第２物理ページ＜Ｐ２＞に、そして第３データＤＡＴＡ３、第２エポック番号ＥＰ＜２＞、及びコミット記録ビット（Ｃ）を第３物理ページ＜Ｐ３＞にプログラムする（４）。コントローラ２１０は第３物理ページ＜Ｐ３＞のコミット記録ビット（Ｃ）を読み出し、第２及び第３データＤＡＴＡ２、ＤＡＴＡ３のプログラム遂行完了の成否を確認する。コントローラ２１０は第２及び第３データＤＡＴＡ２、ＤＡＴＡ３を有効データとして分類し、第２及び第３物理ページ＜Ｐ２、Ｐ３＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインする（５）。
【００７０】
実施形態において、コントローラ２１０は併合されたコマンドに対応し、同一なエポック番号を有するデータの集合の中で最後にプログラムされるデータ（図１２参照すれば、第３データＤＡＴＡ３）と共にコミット記録ビットをプログラムすることができる。コントローラ２１０は同一なエポック番号を有するデータの集合の中で最後にプログラムされるデータ以外の他のデータのフラッグ情報にコミット記録ビット（Ｃ）を含ませない。他の実施形態において、コントローラ２１０は併合されたコマンドに対応し、同一なエポック番号を有するデータの集合で書込み順序を再配列することができる。例えば、コントローラは第３データＤＡＴＡ３を第２物理ページ＜Ｐ２＞に、そして第２データＤＡＴＡ２とコミット記録ビット（Ｃ）を第３物理ページ＜Ｐ３＞にプログラムする。
【００７１】
図１３は本発明のその他の実施形態に係って、ストレージ装置が順に受信されたバリアーコマンドを処理する動作を例示的に図示する。図１３は図１を参照して説明される。図１３で、データに対するアトミックプログラムが全て成功し、そして第１乃至第３データのサイズの各々がプログラム単位より小さいことと仮定する。
【００７２】
図８乃至図１２の場合と類似に、コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を順に受信し、コマンドキュー２１３に順に挿入する。コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３を併合する。例えば、コントローラ２１０はバリアーデータのサイズに基づいてバリアーコマンドを併合する。併合されたバリアーコマンドに対応するデータの集合のサイズはプログラム単位である。
【００７３】
コントローラ２１０は第１乃至第３バリアーコマンドＢＣＭＤ１〜ＢＣＭＤ３に各々対応する第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を受信し、バッファメモリ２２０に格納する（１）。例えば、第１データＤＡＴＡ１は８ＫＢであり、第２データＤＡＴＡ２は４ＫＢであり、第３データ（４ＫＢ）であり、そして併合されたデータの集合のサイズは１６ＫＢであり、プログラム単位である。
【００７４】
コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を不揮発性メモリ装置２３０の第１物理ページ＜Ｐ１＞にプログラムする（２）。図示されないが、コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３のフラッグ情報（即ち、図１２のエポック番号及びコミット記録ビット）を第１物理ページ＜Ｐ１＞のスペア領域にプログラムすることもできる。他の実施形態において、第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３の位置は図示されたことに限定されず、コントローラ２１０によって再配列されることができる。コントローラ２１０は第１乃至第３データＤＡＴＡ１〜ＤＡＴＡ３を有効データとして分類し、第１物理ページ＜Ｐ１＞のマッピング情報をマッピングテーブルＬ２Ｐにマップインする（３）。
【００７５】
図１４は図１の不揮発性メモリ装置の不揮発性メモリのうちの１つを例示的に示すブロック図である。不揮発性メモリ２３１はメモリセルアレイ２３１＿１、アドレスデコーダー２３１＿２、ページバッファ２３１＿３、入出力回路２３１＿４、及び制御ロジック及び電圧発生回路２３１＿５を含む。不揮発性メモリ２３１は不揮発性メモリチップと称されてもよい。
【００７６】
メモリセルアレイ２３１＿１はメモリブロックを含む。メモリブロックの各々はセルストリングを含む。セルストリングの各々はメモリセルを含む。メモリセルはワードラインＷＬと連結される。メモリセルの各々は１ビットを格納する単一レベルセルＳＬＣ又は少なくとも２ビットを格納するマルチレベルセルＭＬＣを含む。
【００７７】
実施形態として、メモリセルアレイ２３１＿１は３次元メモリアレイを含む。３次元メモリアレイは、シリコン基板及びメモリセルの動作に関連する回路の上に配置される活性領域を有するメモリセルアレイの１つ以上の物理レベルにモノリシックに（Ｍｏｎｏｌｉｔｈｉｃａｌｌｙ）形成されることができる。メモリセルの動作に関連する回路は基板内に又は基板上に配置される。“モノリシック（Ｍｏｎｏｌｉｔｈｉｃａｌ）”という用語は、３次元メモリアレイの各レベルの層が３次元メモリアレイの下位レベルの層上に直接堆積されることを意味する。３次元メモリアレイは垂直の方向性を有し、少なくとも１つのメモリセルが他の１つのメモリセル上に位置する垂直ＮＡＮＤストリングを含む。少なくとも１つのメモリセルは電荷トラップ（Ｃｈａｒｇｅ  Ｔｒａｐ）層を含む。垂直ＮＡＮＤストリングの各々はメモリセル上に位置する少なくとも１つの選択トランジスタを含む。少なくとも１つの選択トランジスタはメモリセルと同一の構造で構成され、メモリセルと共にモノリシックに形成される。３次元メモリアレイが複数のレベルに構成され、レベルの間に共有されるワードライン又はビットラインが具備されるように、３次元メモリアレイに適合な構成は米国登録特許公報第７，６７９，１３３号、米国登録特許公報第８，５５３，４６６号、米国登録特許公報第８，６５４，５８７号、米国登録特許公報第８，５５９，２３５号、そして米国公開特許公報第２０１１／０２３３６４８号に開示されており、これらの公報は本発明の参照として含まれる。
【００７８】
アドレスデコーダー２３１＿２はワードラインＷＬ、ストリング選択ラインＳＳＬ、及び接地選択ラインＧＳＬを通じてメモリセルアレイ２３１＿１と連結される。アドレスデコーダー２３１＿２はコントローラ２１０から物理アドレスＡＤＤを受信し、物理アドレスＡＤＤをデコーディングし、ワードラインＷＬを駆動する。例えば、アドレスデコーダー２３１＿２はワードラインＷＬの中で少なくとも１つのサブワードラインを選択する。
【００７９】
ページバッファ２３１＿３はビットラインＢＬを通じてメモリセルアレイ２３１＿１と連結される。ページバッファ２３１＿３は制御ロジック及び電圧発生回路２３１＿５の制御に応じてページ単位に入出力回路２３１＿４から受信されたデータＤＡＴＡがメモリセルアレイ２３１＿１に格納されるようにビットラインＢＬを駆動するか、又はメモリセルアレイ２３１＿１に格納されたデータをページ単位に読み出し、読み出されたデータを入出力回路２３１＿４に提供する。
【００８０】
入出力回路２３１＿４はコントローラ２１０からデータＤＡＴＡを受信し、データＤＡＴＡをページバッファ２３１＿３に提供する。又は入出力回路２３１＿４はページバッファ２３１＿３からデータＤＡＴＡを受信し、受信されたデータＤＡＴＡをコントローラ２１０に提供する。入出力回路２３１＿４は制御信号ＣＴＲＬに基づいて外部装置とデータＤＡＴＡを送受信する。
【００８１】
制御ロジック及び電圧発生回路２３１＿５はコントローラ２１０からストレージコマンドＣＭＤ及び制御信号ＣＴＲＬを受信し、受信された信号に応答してアドレスデコーダー２３１＿２、ページバッファ２３１＿３、及び入出力回路２３１＿４を制御する。例えば、制御ロジック及び電圧発生回路２３１＿５は信号ＣＭＤ、ＣＴＲＬに応答してデータＤＡＴＡがメモリセルアレイ２３１＿１に格納されるように他の構成要素を制御する。制御ロジック及び電圧発生回路２３１＿５は信号ＣＭＤ、ＣＴＲＬに応答してメモリセルアレイ２３１＿１に格納されたデータＤＡＴＡが外部装置に伝送されるように他の構成要素を制御する。制御ロジック及び電圧発生回路２３１＿５は不揮発性メモリ２３１が動作するのに要求される多様な電圧を生成する。制御ロジック及び電圧発生回路２３１＿５はプログラム電圧、パス電圧、選択読出し電圧、非選択読出し電圧、消去電圧、検証電圧を生成する。制御ロジック及び電圧発生回路２３１＿５は生成された多様な電圧をアドレスデコーダー２３１＿２に提供するか、又はメモリセルアレイ２３１＿１の基板に提供する。
【００８２】
図１５は図１４のメモリセルアレイに含まれたメモリブロックの中で３次元構造の第１ブロックを例示的に示す回路図である。第１ブロックＢＬＫ１のセルストリングの数、セルストリングによって構成される行及び列の数、セルトランジスタＧＳＴ、ＭＣ、ＤＭＣ、ＳＳＴ等の数、セルトランジスタと連結されたラインＧＳＬ、ＷＬ、ＤＭＬ、ＳＳＬ等の数、及び第１ブロックＢＬＫ１の高さは図１５で図示されたことに限定されない。不揮発性メモリ装置２３０に含まれた他のメモリブロックも、また第１ブロックＢＬＫ１と類似な構造を有する。
【００８３】
第１ブロックＢＬＫ１はセルストリングＣＳ１１〜ＣＳ２２を含む。セルストリングＣＳ１１〜ＣＳ２２は行方向及び列方向に沿って配置される。セルストリングＣＳ１１、ＣＳ１２はストリング選択ラインＳＳＬ１ａ、ＳＳＬ１ｂと連結される（１行）。セルストリングＣＳ２１、ＣＳ２２はストリング選択ラインＳＳＬ２ａ、ＳＳＬ２ｂと連結される（２行）。セルストリングＣＳ１１、ＣＳ２１は第１ビットラインＢＬ１と連結される（１列）。セルストリングＣＳ１２、ＣＳ２２は第２ビットラインＢＬ２と連結される（２列）。
【００８４】
セルストリングＣＳ１１〜ＣＳ２２の各々はセルトランジスタを含む。セルストリングＣＳ１１〜ＣＳ２２の各々はストリング選択トランジスタＳＳＴａ、ＳＳＴｂ、メモリセルＭＣ１〜ＭＣ８、接地選択トランジスタＧＳＴａ、ＧＳＴｂ、及びダミーメモリセルＤＭＣ１、ＤＭＣ２を含む。セルトランジスタの各々は電荷トラップ型フラッシュ（ＣＴＦ；ｃｈａｒｇｅ  ｔｒａｐ  ｆｌａｓｈ）メモリセルである。
【００８５】
メモリセルＭＣ１〜ＭＣ８は直列に連結され、行方向及び列方向によって形成された平面と垂直になる方向である高さ方向に積層される。直列に連結されたストリング選択トランジスタＳＳＴａ、ＳＳＴｂはメモリセルＭＣ１〜ＭＣ８及びビットラインＢＬの間に提供される。直列に連結された接地選択トランジスタＧＳＴａ、ＧＳＴｂはメモリセルＭＣ１〜ＭＣ８及び共通ソースラインＣＳＬの間に提供される。メモリセルＭＣ１〜ＭＣ８及び接地選択トランジスタＧＳＴａ、ＧＳＴｂの間に第１ダミーメモリセルＤＭＣ１が提供される。メモリセルＭＣ１〜ＭＣ８及びストリング選択トランジスタＳＳＴａ、ＳＳＴｂの間に第２ダミーメモリセルＤＭＣ２が提供される。セルストリングＣＳ１１〜ＣＳ２２の接地選択トランジスタＧＳＴａ、ＧＳＴｂは接地選択ラインＧＳＬに共通に連結される。
【００８６】
第１行のセルストリングＣＳ１１、ＣＳ１２の第１接地選択トランジスタＧＳＴａは第１接地選択ラインに連結され、第２行のセルストリングＣＳ２１、ＣＳ２２の第１接地選択トランジスタＧＳＴａは第２接地選択ラインに連結される。基板（図示せず）から同一な高さに提供される接地選択トランジスタは同一な接地選択ラインに連結され、他の高さに提供される接地選択トランジスタは他の接地選択ラインに連結される。例えば、セルストリングＣＳ１１〜ＣＳ２２の第１接地選択トランジスタＧＳＴａは第１接地選択ラインに連結され、第２接地選択トランジスタＧＳＴｂは第２接地選択ラインに連結される。
【００８７】
基板（又は接地選択トランジスタＧＳＴａ、ＧＳＴｂ）から同一な高さのメモリセルは同一なワードラインに共通に連結され、互いに異なる高さのメモリセルは互いに異なるワードラインに連結される。セルストリングＣＳ１１〜ＣＳ２２の第１乃至第８メモリセルＭＣ８は第１乃至第８ワードラインＷＬ１〜ＷＬ８に各々共通に連結される。同一な高さの第１ストリング選択トランジスタＳＳＴａの中で同一な行のストリング選択トランジスタは同一なストリング選択ラインと連結され、他の行のストリング選択トランジスタは他のストリング選択ラインと連結される。例えば、第１行のセルストリングＣＳ１１、ＣＳ１２の第１ストリング選択トランジスタＳＳＴａはストリング選択ラインＳＳＬ１ａと共通に連結され、第２行のセルストリングＣＳ２１、ＣＳ２２の第１ストリング選択トランジスタＳＳＴａはストリング選択ラインＳＳＬ１ａと共通に連結される。また、第１行のセルストリングＣＳ１１、ＣＳ１２の第２ストリング選択トランジスタＳＳＴｂはストリング選択ラインＳＳＬ１ｂと共通に連結され、第２行のセルストリングＣＳ２１、ＣＳ２２の第２ストリング選択トランジスタＳＳＴｂはストリング選択ラインＳＳＬ２ｂと共通に連結される。
【００８８】
同一な行のセルストリングのストリング選択トランジスタは同一なストリング選択ラインに共通に連結される。例えば、第１行のセルストリングＣＳ１１、ＣＳ１２の第１及び第２ストリング選択トランジスタＳＳＴａ、ＳＳＴｂは同一なストリング選択ラインに共通に連結される。第２行のセルストリングＣＳ２１、ＣＳ２２の第１及び第２ストリング選択トランジスタＳＳＴａ、ＳＳＴｂは同一なストリング選択ラインに共通に連結される。同一な高さのダミーメモリセルは同一なダミーワードラインと連結され、他の高さのダミーメモリセルは他のダミーワードラインと連結される。例えば、第１ダミーメモリセルＤＭＣ１は第１ダミーワードラインＤＷＬ１と連結され、第２ダミーメモリセルＤＭＣ２は第２ダミーワードラインＤＷＬ２と連結される。
【００８９】
第１ブロックＢＬＫ１で、読出し及び書込みは行単位に遂行される。例えば、ストリング選択ラインＳＳＬ１ａ、ＳＳＬ１ｂ、ＳＳＬ２ａ、ＳＳＬ２ｂによってブロックＢＬＫａの１つの行が選択される。ストリング選択ラインＳＳＬ１ａ、ＳＳＬ１ｂにターンオン電圧が供給され、ストリング選択ラインＳＳＬ２ａ、ＳＳＬ２ｂにターンオフ電圧が供給される時、第１行のセルストリングＣＳ１１、ＣＳ１２がビットラインＢＬ１、ＢＬ２に連結される。反対の場合、第２行のセルストリングＣＳ２１、ＣＳ２２がビットラインＢＬ１、ＢＬ２に連結される。サブワードラインを駆動することによって、駆動される行のセルストリングのメモリセルの中で同一な高さのメモリセルが選択される。選択されたメモリセルは物理ページ単位に対応する。選択されたメモリセルに対する読出し及び書込み動作が遂行される。
【００９０】
図１６は図１のストレージ装置の動作方法を例示的に示す順序図である。Ｓ１１０段階で、ストレージ装置２００のコントローラ２１０はホスト１００からバリアーコマンドとバリアーコマンドに各々対応するデータ（或いはデータの集合）とを受信する。前述した通り、データはＤＭＡ方式にホスト１００から伝送される。
【００９１】
Ｓ１２０段階で、コントローラ２１０はバリアーコマンドを併合し、バリアーコマンドの順序に基づいて又はバリアーコマンドの順序に対応して、データを連続的に不揮発性メモリ装置２３０にプログラムする。コントローラ２１０は、メモリセルに格納されるビットの数、１つの物理的ページのサイズ、そしてマルチチャンネル、マルチウェイ、マルチプレーンに応じた１度にアクセスされる物理ページの数に応じて決定される不揮発性メモリ装置２３０のプログラム単位に基づいてバリアーコマンドを併合する。実施形態において、図８乃至図１３でデータはいずれか１つの物理ページ内で格納されたことと図示されたが、データは不揮発性メモリ装置２３０内の複数のチップ、複数のプレーン、複数のブロック、又は複数のページに分散されて格納されてもよい。Ｓ１２０段階のプログラムはアトミックに遂行される。
【００９２】
Ｓ１３０段階で、コントローラ２１０はＳ１２０段階のプログラム完了を検証する。コントローラ２１０は図１０及び図１１のコミットページを読み出すか、或いは図１２のコミット記録ビットを読み出す。コントローラ２１０はコミットページ又はコミット記録ビットが割当されたデータを有効データに判別し、コミットページ又はコミット記録ビットが割当されないデータを無効データとして判別する。
【００９３】
プログラム成功である場合、Ｓ１４０段階で、コントローラ２１０は有効データがプログラムされた物理ページのマッピング情報をマッピングテーブルＬ２Ｐにマップインする。プログラム失敗である場合、Ｓ１５０段階で、コントローラ２１０は無効データがプログラムされた物理ページのマッピング情報をマッピングテーブルＬ２Ｐにマップアウトする。アトミックプログラム対象であるデータの一部が格納され、データの残りが格納されなかった場合には、コントローラ２１０はデータの一部が格納された物理ページのマッピング情報をマップアウトする。実施形態において、コントローラ２１０はバリアーコマンドに対応するデータをマップイン又はマップアウトした後に、又はデータのプログラム完了の後に、他のバリアーコマンドに対応する他のデータを不揮発性メモリ装置２３０にプログラムする。
【００９４】
図１７は本発明の実施形態に係って、書込み順序のためのシステム呼出をサポートするホストのソフトウェアスタックを図示する。図１８は図１７のホストがストレージ装置にジャーナリングを遂行する動作を例示的に示すタイミング図である。図１７と図１８は図１及び図２を参照して共に説明される。ストレージ装置４００はバリアーコマンドをサポートする図１のストレージ装置２００である。
【００９５】
ホスト３００は図１のホスト１００の構成要素を含む。ホスト３００はハードウェア観点でホスト１００と実質的に同様に具現されることができる。ホスト３００でも図１のホストメモリ１２０にロードされるソフトウェアが実行されることができる。但し、ホスト１００と異なり、ホスト３００はｆｂａｒｒｉｅｒ（）又はｆｄａｔａｂａｒｒｉｅｒ（）のようなシステム呼出をサポートする。ホスト３００のホストメモリ（図１のホストメモリ１２０参照）にはバリアーファイルシステム３２２、ディスパッチャー（ｄｉｓｐａｔｃｈｅｒ）３２３、及び入出力スケジューラー３２４が各々ロードされる。
【００９６】
バリアーファイルシステム３２２はファイルシステム１２２と類似に動作する。実施形態において、ｆｓｙｎｃ（）又はｆｄａｔａｓｙｎｃ（）が呼出されると、バリアーファイルシステム３２２はヒント情報を利用してｆｓｙｎｃ（）又はｆｄａｔａｓｙｎｃ（）がデータを順に書き込むために呼出されたものであるか否かを判別する。バリアーファイルシステム３２２はファイルの拡張子が事前に決定された単語であるか、ファイル名が事前に決定された単語であるか、又はｆｓｙｎｃ（）又はｆｄａｔａｓｙｎｃ（）を呼出したプロセスの名が事前に決定された単語であるか否かを確認する。ヒント情報は事前に決定されたファイルの拡張子、事前に決定されたファイル名、又はｆｓｙｎｃ（）又はｆｄａｔａｓｙｎｃ（）を呼出したプロセスの名前を含む。
【００９７】
他の実施形態において、ｆｂａｒｒｉｅｒ（）又はｆｄａｔａｂａｒｒｉｅｒ（）が呼出されれば、バリアーファイルシステム３２２はデータを順に書込むためにｆｂａｒｒｉｅｒ（）又はｆｄａｔａｂａｒｒｉｅｒ（）が呼出されたことと判別する。ｆｄａｔａｂａｒｒｉｅｒ（）はｆｂａｒｒｉｅｒ（）と類似である。ｆｂａｒｒｉｅｒ（）によってファイルメタデータが修正される。しかし、ｆｄａｔａｂａｒｒｉｅｒ（）が呼出される場合、新しく書き込まれたデータを読み出すためのファイルメタデータが追加修正されなかったら、ファイルメタデータが修正されないことがある。バリアーファイルシステム３２２は書込み要請をディスパッチするコミットスレッド（ｃｏｍｍｉｔ  ｔｈｒｅａｄ）と書込み要請に対応するデータをストレージ装置４００にフラッシュするフラッシュスレッド（ｆｌｕｓｈ  ｔｈｒｅａｄ）をホストメモリに割当する。バリアーファイルシステム３２２はコミットスレッドとフラッシュスレッドを生成してデュアルモードジャーナリング（ｄｕａｌ  ｍｏｄｅ  ｊｏｕｒｎａｌｉｎｇ）を遂行する。
【００９８】
図１８を参照すれば、バリアーファイルシステム３２２はジャーナリングを遂行する。ジャーナルをバックアップする時、又はデータベースファイル修正の後にｆｂａｒｒｉｅｒ（）又はｆｄａｔａｂａｒｒｉｅｒ（）が呼出される。例えば、ｆｂａｒｒｉｅｒ（）が開始されると、バリアーファイルシステム３２２はファイルデータＤをストレージ装置４００に伝送するためにブロック階層のスケジューラーキュー（図示せず、図１のスケジューラーキュー１２４参照）に書込み要請を挿入する。書込み要請はストレージ装置４００にディスパッチされる。バリアーファイルシステム３２２は、ファイルシステム１２２と異なり、ファイルデータＤのＤＭＡ伝送が完了される時まで待たずにコミットスレッドをトリガーする。
【００９９】
コミットスレッドはジャーナルデータＪＤとジャーナルコミットＪＣをストレージ装置４００に伝送するためにスケジューラーキューに書込み要請を挿入する。書込み要請はストレージ装置４００にディスパッチされる。コミットスレッドはジャーナルデータＪＤのＤＭＡ伝送とジャーナルコミットＪＣのＤＭＡ伝送が完了される時まで待つ。ジャーナルデータＪＤのＤＭＡ伝送とジャーナルコミットＪＣのＤＭＡ伝送が完了されると、コミットスレッドはフラッシュスレッドをトリガーする。フラッシュスレッドはジャーナルデータＪＤとジャーナルコミットＪＣがフラッシュされるように、スケジューラーキューにフラッシュ要請を挿入する。フラッシュ要請はストレージ装置４００にディスパッチされる。ジャーナルデータＪＤとジャーナルコミットＪＣのフラッシュが完了されると、ｆｂａｒｒｉｅｒ（）がリターンされる。
【０１００】
図１８を参照すれば、ｆｓｙｎｃ（）が呼出された場合も、図１のファイルシステム１２２はファイルデータＤのＤＭＡ伝送、ジャーナルデータＪＤのＤＭＡ伝送及びフラッシュ、及びジャーナルコミットＪＣのＤＭＡ伝送及びフラッシュが全て完了される時まで待たなければならない。対照的に、ｆｂａｒｒｉｅｒ（）が呼出された場合、バリアーファイルシステム３２２はファイルデータＤ、ジャーナルデータＪＤ、及びジャーナルコミットＪＣのＤＭＡ伝送及びフラッシュが完了される時まで待たずにスケジューラーキューにＩＯ要請を連続的に挿入する。
【０１０１】
再び図１７を参照すれば、ブロック階層のディスパッチャー３２３はスケジューラーキューに入力されたＩＯ要請をストレージ装置４００のコマンドキュー（図３乃至図１３のコマンドキュー２１３参照）にディスパッチする。例えば、ディスパッチャー３２３はバリアーコマンドをコマンドキューにディスパッチする。ディスパッチャー３２３はコマンドキューの既存コマンドが処理され、その次に、バリアーコマンドが処理され、その次に、バリアーコマンド以後のコマンドが処理されることを保障する。ディスパッチャー３２３はホスト３００でストレージ装置４００にコマンドがディスパッチされる順序とストレージ装置４００のコマンドキューでコマンドが処理される順序を一致させる。ディスパッチャー３２３は順序を守る（ｏｒｄｅｒ−ｐｒｅｓｅｒｖｉｎｇ）ディスパッチャーと称される。
【０１０２】
実施形態において、ディスパッチャー３２３からディスパッチされるバリアーコマンドはバリアーフラッグを有する書込みコマンドである。他の実施形態において、ディスパッチャー３２３からディスパッチされるバリアーコマンドは書込み要請と別個にスケジューラーキューの１エントリを占める入力要請から生成されてもよい。
【０１０３】
入出力スケジューラー３２４はエポックに基づいて、ＩＯ要請がスケジューラーキューに挿入される順序とホスト３００でストレージ装置４００にコマンドがディスパッチされる順序を一致させる。入出力スケジューラー３２４はエポックの間に順序を守る。入出力スケジューラー３２４はスケジューラーキューに挿入されたＩＯ要請がバリアー書込み要請であるか否かを判別する。入出力スケジューラー３２４は挿入されたＩＯ要請がバリアー書込み要請であれば、それ以上ＩＯ要請を受信しない。したがって、バリアー書込み要請の前にスケジューラーキューに入力され、バリアー書込み要請の後にスケジューラーキューに存在する全てのＩＯ要請は１つのエポックに属することができる。入出力スケジューラー３２４はエポック内のＩＯ要請を再配列するか、或いは併合する。入出力スケジューラー３２４はスケジューラーキューに存在するＩＯ要請を装置ドライバー（図１の装置ドライバー１２５参照）に送る。入出力スケジューラー３２４は最後に出力されるＩＯ要請を新しいバリアー書込み要請として指定する。入出力スケジューラー３２４はスケジューラーキューに存在するＩＯ要請を全て送ると、新しいＩＯ要請を受信する。
【０１０４】
図１９は本発明の実施形態に係ってストレージ装置のＩＯＰＳ及びコマンドキューの深さを例示的に図示する。本発明の実施形態に係るストレージ装置は図１乃至図１８で前述したストレージ装置２００、４００である。図１９で、ＸｎＦはｔｒａｎｓｆｅｒ−ａｎｄ−ｆｌｕｓｈ方式を示し（図２参照）、Ｘはｗａｉｔ−ｏｎ−ｔｒａｎｓｆｅｒ方式を示し、そしてＯＰは本発明の実施形態に係るｏｒｄｅｒ−ｐｒｅｓｅｒｖｉｎｇ方式を示す（図１８参照）。図１９には、ＵＦＳ２．０（ＧＳ６）、ＳＳＤ（８５０  ＰＲＯ）、及びＳＳＤ（８４３ＴＮ）の各々がＸｎＦ方式、Ｘ方式、及びＯＰ方式に入出力要請を処理する場合、ＩＯＰＳ（ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｏｐｅｒａｔｉｏｎｓ  ｐｅｒ  ｓｅｃｏｎｄ）及びコマンドキューの深さが図示されている。本発明の実施形態に係るＯＰ方式によれば、前述したホスト１００、３００はデータのＤＭＡ伝送及びデータのフラッシュが完了される時まで待たずにＩＯ要請に応じるコマンドをストレージ装置２００、４００に伝送することができる。したがって、ＸｎＦ方式又はＸ方式に比べて、ＯＰ方式によれば、ストレージ装置２００、４００のＩＯＰＳ及びコマンドキューの深さが増加することができる。
【０１０５】
上で説明した内容は本発明を実施するための具体的な例である。本発明は上述した実施形態のみならず、上述した実施形態を利用して単純に設計変更するか、或いは容易に変更することができる実施形態も含む。
【符号の説明】
【０１０６】
１０    コンピュータシステム
１００  ホスト
１１０  プロセシングユニット
１２０  ホストメモリ
１２１  アプリケーションプログラム
１２２  ファイルシステム
１２３  ブロック入出力スケジューラー
１２４  スケジューラーキュー
１３０  インターフェイス回路
１２５  装置ドライバー
２００  ストレージ装置
２１０  コントローラ
２１１  プロセシングユニット
２１２  ワーキングメモリ
２１３  コマンドキュー
２１４  ホストインターフェイス回路
２１５  バッファインターフェイス回路
２１６  フラッシュインターフェイス回路
２２０  バッファメモリ
２２１  書込みバックキャッシュ
２２２  書込みバッファ
２３０  不揮発性メモリ装置
【図１】
2019125366.tif 000003
【図２】
2019125366.tif 000004
【図３】
2019125366.tif 000005
【図４】
2019125366.tif 000006
【図５】
2019125366.tif 000007
【図６】
2019125366.tif 000008
【図７】
2019125366.tif 000009
【図８】
2019125366.tif 000010
【図９】
2019125366.tif 000011
【図１０】
2019125366.tif 000012
【図１１】
2019125366.tif 000013
【図１２】
2019125366.tif 000014
【図１３】
2019125366.tif 000015
【図１４】
2019125366.tif 000016
【図１５】
2019125366.tif 000017
【図１６】
2019125366.tif 000018
【図１７】
2019125366.tif 000019
【図１８】
2019125366.tif 000020
【図１９】
2019125366.tif 000021