JP2013196164A - 不揮発性記憶装置、情報処理装置の制御方法、及び情報処理装置 - Google Patents

不揮発性記憶装置、情報処理装置の制御方法、及び情報処理装置 Download PDF

Info

Publication number
JP2013196164A
JP2013196164A JP2012060740A JP2012060740A JP2013196164A JP 2013196164 A JP2013196164 A JP 2013196164A JP 2012060740 A JP2012060740 A JP 2012060740A JP 2012060740 A JP2012060740 A JP 2012060740A JP 2013196164 A JP2013196164 A JP 2013196164A
Authority
JP
Japan
Prior art keywords
block
data
threshold voltage
cluster
physical
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012060740A
Other languages
English (en)
Other versions
JP5659178B2 (ja
Inventor
Daisuke Hashimoto
大輔 橋本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2012060740A priority Critical patent/JP5659178B2/ja
Priority to US13/789,149 priority patent/US9367444B2/en
Publication of JP2013196164A publication Critical patent/JP2013196164A/ja
Application granted granted Critical
Publication of JP5659178B2 publication Critical patent/JP5659178B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2143Clearing memory, e.g. to prevent the data from being stolen

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Read Only Memory (AREA)

Abstract

【課題】削除済みユーザデータの難読性を向上でさせる。
【解決手段】ホスト装置にとって無効なデータであって、不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理し、ホスト装置から無効な論理アドレスのデータを完全削除する命令を受信すると、受信した命令に含まれる論理アドレスに対応する物理アドレスを管理している無効データの論物変換情報から抽出し、抽出した不揮発性メモリ上の物理アドレスのデータを消去または上書きする。
【選択図】図4

Description

本発明の実施形態は、不揮発性記憶装置、情報処理装置の制御方法、及び情報処理装置に関する。
ホスト装置のオペレーティングシステム(OS)上において、データが削除される処理が実行された場合、OS上でのデータの管理情報が削除されるだけで、不揮発性記憶装置では実際にはデータが削除されないようにする方式がある。この方式では、不揮発性記憶装置としてHDD(Hard Disk Drive)が採用されている場合、OS上でのデータ削除のたびに不揮発性記憶装置上で削除処理が行われないので、削除処理が行われない分、動作のパフォーマンスが向上する。
しかしながら、この方式によれば、OS上では削除したはずの無効データが、不揮発性記憶装置上では、まだ有効なデータであると認識されている。
この問題に対し、近年、不揮発性記憶装置に対してOSにとって不要な記憶領域をOSから不揮発性記憶装置に対し削除通知として通知できる方式が開発されてきている。不揮発性記憶装置側では、削除通知によって通知された記憶領域を削除することができる。しかし、不揮発性記憶装置では、削除通知によって通知された記憶領域のデータそのものを消去処理によって消去するとは限らず、そのデータ自体が残っている場合がある。このため、ユーザによって削除されていたデータであっても、不揮発性記憶装置を分解し、内部の不揮発性メモリを解析することによって、暗号化されていないユーザデータや、暗号強度の弱いユーザデータを復元されてしまう恐れがある。
特開2011−128998号公報 米国特許出願公開第12/775767号明細書
ATA/ATAPI Command Set-2 (ACS-2) d2015r6 Feb.22.2011 98ページ目〜99ページ目、50ページ目http://www.t13.org/Documents/UploadedDocuments/docs2011/d2015r6-ATAATAPI_Command_Set_-_2_ACS-2.pdf http://www.zdnet.com/blog/storage/mac-fail-ssd-security/1293 9th USENIX Conference on File and Storage Technologies (FAST '11), 2011."Reliably Erasing Data From Flash-Based Solid State Drives"Michael Wei, Laura M. Grupp, Frederick E. Spada, Steven Swanson Feb.16, 2011 http://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf
本発明の一つの実施形態は、削除済のデータを解読困難にする不揮発性記憶装置、情報処理装置の制御方法、及び情報処理装置を提供することを目的とする。
本発明の一つの実施形態によれば、不揮発性記憶装置は、ホスト装置の外部記憶装置として機能する。不揮発性記憶装置は、リード及びライト可能な不揮発性メモリと、論物変換テーブルと、無効データ管理ログと、制御部とを備える。論物変換テーブルは、ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理する。無効データ管理ログは、ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する。制御部は、ホスト装置から無効な論理アドレスのデータを完全削除する命令を受信すると、前記受信した命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換える。
図1は、コンピュータシステムの機能構成例を示すブロック図である。 図2は、コンピュータシステムの外観的構成を示す図である。 図3は、コンピュータシステムの他の外観的構成を示す図である。 図4は、SSDの機能構成例を示すブロック図である。 図5は、NANDメモリチップの機能構成例を示すブロック図である。 図6は、NANDメモリチップに含まれる1個のプレーンの構成例を示す回路図である。 図7は、4値データ記憶方式でのしきい値分布を示す図である。 図8は、下位ページの書き込みの際のしきい値分布を示す図である。 図9は、上位ページの書き込みの際のしきい値分布を示す図である。 図10は、SSDの管理情報を示す図である。 図11は、LBAとSSDの管理単位との関係を示す図である。 図12は、LBAから物理アドレスを特定する手順を示すフローチャートである。 図13は、無効データログを示す図である。 図14は、SSDの読み出し動作例を示すフローチャートである。 図15は、SSDの読み出し動作例を示すフローチャートである。 図16は、SSDの書き込み動作例を示すフローチャートである。 図17は、SSDの書き込み動作例を示すフローチャートである。 図18は、SSDの書き込み動作例を示すフローチャートである。 図19は、トラック管理領域へトラック書き込みを行う場合の概略を示す概念図である。 図20は、トラック管理領域へトラック書き込みを行う場合の動作手順を示すフローチャートである。 図21は、クラスタ管理領域へトラック書き込みを行う場合の概略を示す概念図である。 図22は、クラスタ管理領域へトラック書き込みを行う場合の動作手順を示すフローチャートである。 図23は、トラック管理領域へクラスタ書き込みを行う場合の概略を示す概念図である。 図24は、トラック管理領域へクラスタ書き込みを行う場合の動作手順を示すフローチャートである。 図25は、クラスタ管理領域へクラスタ書き込みを行う場合の概略を示す概念図である。 図26は、クラスタ管理領域へクラスタ書き込みを行う場合の動作手順を示すフローチャートである。 図27は、NAND整理を行う場合の動作手順を示すフローチャートである。 図28は、NAND整理対象リストを示す図である。 図29は、削除処理Aと削除処理Bを選択させるホストからの命令の一例を示す図である。 図30は、削除通知を受信したときのSSDの動作例を示すフローチャートである。 図31は、削除通知バッファを示す図である。 図32は、削除通知を受信したときのSSDの動作例を示すフローチャートである。 図33は、削除処理Aを実行するときのSSDの動作例を示すフローチャートである。 図34は、削除処理Bを実行するときのSSDの動作例を示すフローチャートである。 図35は、トラック単位データ無効化処理手順を示すフローチャートである。 図36は、クラスタ単位データ無効化処理手順を示すフローチャートである。 図37は、トラック単位完全消去処理手順を示すフローチャートである。 図38は、クラスタ単位完全消去処理手順を示すフローチャートである。 図39は、消去対象一時リストを示す図である。 図40は、セクタ単位完全消去処理手順を示すフローチャートである。 図41は、削除処理Aと削除処理Bを選択させるホストからの命令の他の例を示す図である。 図42は、削除処理Bを概念的に示す図である。 図43は、消去ベリファイを行った際の閾値分布を示す図である。 図44は、ソフトプログラムを行った際の閾値分布を示す図である。 図45は、難読化のための消去処理の一例を行う際の閾値分布を示す図である。 図46は、難読化のための消去処理の他の例を行う際の閾値分布を示す図である。 図47は、難読化のための上書き破壊処理の一例を行う際の閾値分布を示す図である。 図48は、難読化のための上書き破壊処理の他の例を行う際の閾値分布を示す図である。
以下に添付図面を参照して、実施形態にかかる不揮発性記憶装置、情報処理装置の制御方法、及び情報処理装置を詳細に説明する。なお、これら実施形態により本発明が限定されるものではない。
(第1の実施形態)
まず、不揮発性記憶装置としてのSSD(Solid State Drive)2を用いた情報処理装置の全体構成について説明する。図1に情報処理装置の一例としてのコンピュータシステム1の構成を示す。本コンピュータシステム1は、不揮発性記憶装置としてのSSD2と、ホスト装置(以下、単にホストという)3と、SSD2とホスト3とを結ぶメモリインタフェース19とから構成されている。SSD2はインターフェース19を介してホスト3に接続されている。本実施の形態では、インターフェース19として、ATA(Advanced Technology Attachment)インターフェースを用いるが、USB(Universal Serial Bus)など他のインターフェースであってもよい。CPU(制御回路)4がホスト3における中央演算処理装置であり、ホスト3における種々の演算及び制御はCPU4によって行われる。CPU4はサウスブリッジ7を介してSSD2や、DVD−ROMなどの光学ドライブ10の制御を行う。CPU4は、ノースブリッジ5を介して、メインメモリ6の制御を行う。メインメモリ6は、例えば、DRAMで構成されている。
ユーザは、キーボード14やマウス15などの入力装置を通してホスト3の制御を行い、キーボード14やマウス15からの信号はUSB(Universal Serial Bus)コントローラ13及びサウスブリッジ7を介してCPU4で処理される。CPU4は、ノースブリッジ5及び表示コントローラ8を介してディスプレイ(表示装置)9に画像データやテキストデータなどを送る。ユーザは、ディスプレイ9を介してホスト3からの画像データやテキストデータなどを視認することができる。
CPU4は、BIOS(Basic Input/Output System)−ROM11に格納されたBIOSを実行する。BIOSは、ハードウェア制御のためのプログラムである。その他、CPU4は、サウスブリッジ7を介してLAN(Local Area Network)コントローラ12を制御する。
メインメモリ6は、CPU4の作業用メモリとして機能し、OS(Operating System)16を格納する記憶領域を含んでいる。OS16は、一般的に知られているように、ホスト3の入出力装置を管理し、ディスクやメモリを管理し、ソフトウェアがホスト3のハードウェアを利用可能にするための制御を行うなど、ホスト3全体を管理するプログラムである。OS16は、ホスト3が電源オフとなっている時は、SSD2のNAND型フラッシュメモリ24に格納されているが、ホスト3の起動時又はプログラム起動時に、NAND型フラッシュメモリ24からDRAM6にロードされる。
次に、コンピュータシステム1の構成例について説明する。コンピュータシステム1は、例えば、デスクトップコンピュータやノートブック型のポータブルコンピュータとして実現し得る。図2は、コンピュータシステム1としてのデスクトップコンピュータの概略図である。
デスクトップコンピュータ1は、コンピュータ本体18、ディスプレイ9、キーボード14、及びマウス15などを備えている。コンピュータ本体18は、主要なハードウェアが搭載されたマザーボード17、SSD2、及び電源装置4などを備えている。SSD2は、SATAケーブルを介してマザーボード17に物理的に接続され、マザーボード17上に実装されたサウスブリッジ7を介して、同じくマザーボード17上に実装されたCPU4に電気的に接続されている。電源装置4は、デスクトップコンピュータ1で使用される各種電源電圧を発生し、電源ケーブルを介してマザーボード17やSSD2などに電源を供給する。
図3は、コンピュータシステム1としてのポータブルコンピュータの概略図である。ポータブルコンピュータ1は、コンピュータ本体21、及びディスプレイユニット22から構成されている。ディスプレイユニット22は、例えばLCD(Liquid Crystal Display)で構成される表示装置9が組み込まれている。ディスプレイユニット22は、コンピュータ本体21に対し、この本体21の上面が露出される開放位置と本体21の上面を覆う閉塞位置との間を回動自由に取り付けられている。本体21は薄い箱形の筐体を有しており、その上面には、電源スイッチ23、キーボード14、タッチパッド20等が配置されている。また、本体21も、デスクトップコンピュータと同様に、SSD2、マザーボード、及び電源装置などを備えている。
なお、本実施形態を適用する情報処理装置としては、コンピュータシステム1の他に、スチルカメラ或いはビデオカメラなどの撮像装置などであってもよいし、ゲーム機器やカーナビゲーションシステムなどであってもよい。
図4に不揮発性記憶装置としてのSSD2のブロック図を示す。SSD2は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下NANDメモリと略す)24と、ATAインターフェース19を介してホスト3との信号の送受信を行うIFC(インターフェースコントローラ)30と、IFC30とNANDメモリ24との中間バッファとして機能するキャシュメモリ(CM)32を有するRAM(Random Access Memory)25と、NANDメモリ24およびRAM25の管理、制御、およびIFC30の制御を司るSSDコントローラ(SSDC)26と、これら構成要素を接続するバス29とを備える。
RAM25としては、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)などを採用することができる。
RAM25は、ホスト3とNANDメモリ24間でのデータ転送用キャッシュとして機能するキャッシュメモリ(CM)32を有する。また、RAM25は、管理情報31を記憶するためのメモリおよび作業領域用メモリとして機能する。RAM25で管理される管理情報31(管理テーブル)は、NANDメモリ24に記憶されている各種管理テーブルが起動時などに展開されたものであり、定期的あるいは電源断時にNANDメモリ24に退避保存される。また、RAM25では、削除通知コマンドバッファ41,無効データログ60、NAND整理対象リスト80が管理されている。これらの詳細は、後述する。
SSDC26は、NANDメモリ24に記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト3からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト3−NANDメモリ24間のデータ転送制御、RAM25およびNANDメモリ24に記憶された各種管理情報31の更新、管理などを実行する。
ホスト3はSSD10に対し、リード要求またはライト要求を発行する際には、ATAインタフェース19を介して論理アドレスとしてのLBA(Logical Block Addressing)を入力する。LBAは、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。
IFC30は、ホスト3からの読み出し命令、書き込み命令、その他命令およびデータを受信し、受信した命令やデータをSSDC26に送信したり、SSDC26の制御によりRAM25にデータを送信したりする機能を持つ。
[NANDメモリ構成]
NANDメモリ24は、1以上の個数のNANDメモリチップ27よりなる。NANDメモリ24は、ホスト3によって指定されたユーザデータを記憶したり、RAM25で管理される管理情報をバックアップ用に記憶したりする。NANDメモリ24は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。NANDメモリ24のメモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。
積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。本実施形態では、個々のメモリセルが上位ページ及び下位ページを使用しての2bit/cellの4値記憶方式の書き込み方式である場合について説明するが、1bit/cellの2値記憶、あるいは3bit/cell以上の多値記憶方式の書き込み方式を採用してもよい。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開2010−161199号公報や特開2011−29586号公報に記述されるような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
図5は、NANDメモリチップ27の構成を示している。NANDメモリチップ27は、データを記憶するメモリセルをマトリックス状に配置してなるメモリセルアレイ33を備えている。メモリセルアレイ33は複数のビット線と複数のワード線と共通ソース線を含み、ビット線とワード線の交点に電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。
メモリセルアレイ33には、ビット線を制御するためのビット線制御回路34、及びワード線電圧を制御するためのワード線制御回路36が接続されている。ビット線制御回路34は、ビット線を介してメモリセルアレイ33中のメモリセルのデータを読み出す一方、ビット線を介してメモリセルアレイ33中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行う。
ビット線制御回路34には、カラムデコーダ35、データ入出力バッファ39及びデータ入出力端子39aが接続されている。メモリセルアレイ33から読み出されたメモリセルのデータは、ビット線制御回路34、データ入出力バッファ39を介してデータ入出力端子39aから外部へ出力される。また、外部からデータ入出力端子39aに入力された書き込みデータは、データ入出力バッファ39を介して、カラムデコーダ35によってビット線制御回路34に入力され、指定されたメモリセルへの書き込みが行われる。
また、メモリセルアレイ33、ビット線制御回路34、カラムデコーダ35、データ入出力バッファ39、及びワード線制御回路36は、制御回路37に接続されている。制御回路37は、制御信号入力端子38に入力される制御信号に従い、メモリセルアレイ33、ビット線制御回路34、カラムデコーダ35、データ入出力バッファ39、及びワード線制御回路36を制御するための制御信号及び制御電圧を発生させる。NANDメモリチップ27のうち、メモリセルアレイ33以外の部分をまとめてNANDC28と呼ぶことにする。
図6は、図5に示すメモリセルアレイ33の構成を示している。メモリセルアレイ33はNANDセル型メモリセルアレイであり、複数のNANDセルを含んで構成されている。1つのNANDセルは、直列接続されたメモリセルからなるMS(メモリストリング)と、その両端に接続される選択ゲートS1、S2とにより構成されている。選択ゲートS1はビット線BLに接続され、選択ゲートS2はソース線SRCに接続されている。同一のロウに配置されたメモリセルMCの制御ゲートはワード線WL0〜WLm-1に共通接続されている。また、第1の選択ゲートS1はセレクト線SGDに共通接続され、第2の選択ゲートS2はセレクト線SGSに共通接続されている。
メモリセルアレイ33は、1または複数のプレーンを含んでおり、プレーンは複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。
また、1つのワード線に接続された複数のメモリセルは、1物理セクタを構成する。この物理セクタ毎にデータが書き込まれ、読み出される。1物理セクタには4値の場合、例えば2ページ分のデータが記憶される。
リード動作、プログラムベリファイ動作及びプログラム動作時において、SSDC26から受信した物理アドレスに応じて、1本のワード線が選択され、1物理セクタ(2ページ分)が選択される。この2ページの切り替えは物理アドレスによって行われる。
4値NANDメモリは、1つのメモリセルにおける閾値電圧が、4通りの分布を持ち得るように構成されている。図7は、4値NANDセル型フラッシュメモリのメモリセルに記憶される2ビットの4値データ(データ“11”、“10”、“01”、“00”)とメモリセルの閾値電圧分布との関係を示している。なお、図7において、V、V、Vは4つのデータを読み出す場合に選択ワード線に印加される電圧であり(電圧Vは0Vである)、VAV、VBV、VCVは、各閾値電圧分布への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。また、Vreadは、データの読み出しを行う場合に、NANDセル中の非選択メモリセルに対し印加され、その保持データに拘わらず当該非選択メモリセルを導通させる読み出し電圧を示している。さらに、Vevは、メモリセルのデータを消去する場合において、その消去が完了したか否かを確認するためメモリセルに印加される消去ベリファイ電圧であり、負の値を有する。Vevの大きさは、隣接メモリセルの干渉の影響を考慮して決定される。上述の各電圧の大小関係は、Vev<V<VAV<V<VBV<V<VCV<Vreadである。
なお、消去ベリファイ電圧Vevは前述の通り負の値であるが、実際に消去ベリファイ動作においてメモリセルMCの制御ゲートに印加される電圧は、負の値ではなく、ゼロ又は正の値である。すなわち、実際の消去ベリファイ動作においては、メモリセルMCのバックゲートに正の電圧を与え、メモリセルMCの制御ゲートには、ゼロ又はバックゲート電圧より小さい正の値の電圧を印加している。換言すれば、消去ベリファイ電圧Vevは、等価的に負の値を有する電圧である。
ブロック消去後のメモリセルの閾値電圧分布Eは、その上限値も負の値であり、データ“11”が割り当てられる。また、書き込み状態のデータ“01”、“10”、“00”のメモリセルは、それぞれ正の閾値電圧分布A、B、Cを有する(A、B、Cの下限値も正の値である)。データ“01”の閾値電圧分布Aが最も電圧値が低く、データ“00”の閾値電圧分布Cが最も電圧値が高く、データ“10”の閾値電圧分布Bは、データ“01”とデータ“00”の中間の電圧値を有する。なお、図7に示す閾値電圧分布はあくまでも一例であって、本発明はこれに限定されるものではない。例えば、図7では閾値電圧分布A,B,Cは全て正の閾値電圧分布であるとして説明したが、閾値電圧分布Aが負の電圧の分布であり、閾値電圧分布B、Cが正の電圧の分布であるような場合も、本発明の範囲に含まれる。また、閾値電圧分布Eが正の値であってもよい。
1つのメモリセルの2ビットデータは、下位ページデータと上位ページデータからなり、下位ページデータと上位ページデータは別々の書き込み動作、つまり2回の書き込み動作により、メモリセルに書き込まれる。データ“*@”と標記するとき、*は上位ページデータを、@は下位ページデータを表している。
まず、下位ページデータの書き込みを、図8を参照して説明する。全てのメモリセルは、消去状態の閾値電圧分布Eを有し、データ“11”を記憶しているものとする。図8に示すように、下位ページデータの書き込みを行うと、メモリセルの閾値電圧分布Eは、下位ページデータの値(“1”、或いは“0”)に応じて、2つの閾値電圧分布(E、B´)に分けられる。すなわち、下位ページデータの値が“1”の場合には、消去状態の閾値電圧分布Eを維持する。
一方、下位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。具体的には、ベリファイ電位VBV´を設定し、このベリファイ電圧VBV´以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、メモリセルは、書き込み状態(データ“10”)に変化する。なお、データ“10”の閾値電圧分布B´は、隣接セルへの書き込み動作の影響のため、データ“11”に比べ広い分布となっている。
次に、上位ページデータの書き込みを、図9を参照して説明する。上位ページデータの書き込みは、チップの外部から入力される書き込みデータ(上位ページデータ)と、メモリセルに既に書き込まれている下位ページデータとに基づいて行われる。
即ち、図9に示すように、上位ページデータの値が“1”の場合には、メモリセルのトンネル酸化膜に高電界がかからないようにし、メモリセルの閾値電圧Vthの上昇を防止する。その結果、データ“11”(消去状態の閾値電圧分布E)のメモリセルは、データ“11”をそのまま維持し、データ“10”(閾値電圧分布B´)のメモリセルは、データ“10”をそのまま維持する。ただし、上述のベリファイ電圧VBV´よりも大きい正規のベリファイ電圧VBVを用いて閾値電圧分布の下限値を調整し、これにより閾値電圧分布の幅を狭めた閾値電圧分布Bを形成する。
一方、上位ページデータの値が“0”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Vthを所定量だけ上昇させる。その結果、データ“11”(消去状態の閾値電圧分布E)のメモリセルは、閾値電圧分布Aのデータ“01”に変化し、データ“10”のメモリセルは、閾値電圧分布Cのデータ“00”に変化する。このとき、ベリファイ電圧VAV、VCVが用いられて、閾値電圧分布A、Cの下限値が調整される。
以上が、一般的な4値記憶方式におけるデータ書き込み方式の一例である。3ビット以上の多ビット記憶方式においても、上記の動作に更に上位のページデータに応じ、閾値電圧分布を8通りに分割する動作が加わるのみであるので、基本的な動作は同様である。
[SSD動作説明]
図4を用いてSSDの動作について説明する。SSD2はホスト3から命令を受信すると、IFC30がその命令を受信し、受信した命令をSSDC26に送信する。SSDC26は受信した命令を処理する。命令にはたとえば論理アドレスとしてのLBAが含まる。SSDC26は適宜ホスト3より受信したLBAを、管理情報31を参照することで、物理アドレスに変換する。物理アドレスビットの一部をNANDメモリチップ27の制御信号入力端子38(図5参照)に入力することで、NANDメモリチップ内のページが特定される。
図10にSSD2で使用する管理情報31の構成を示す。これらの管理情報31は、前述したように、NANDメモリ24で不揮発記憶されている。NANDメモリ24で記憶された管理情報がSSD2の起動時にRAM25に展開されて使用される。RAM25上の管理情報31は、定期的あるいは電源断時にNANDメモリ24に退避保存される。RAM40がMRAMやFeRAMなどのような不揮発RAMである場合には、この管理情報はRAM25にのみ記憶されるようにしてもよく、この場合はこの管理情報はNANDメモリ24には記憶されない。
図10に示すように、管理情報は、フリーブロックテーブル50と、アクティブブロックテーブル51と、トラックテーブル(トラック単位の論物変換テーブル)52と、クラスタテーブル(クラスタ単位の論物変換テーブル)53とを含む。
LBAは、図11に示すように、論理セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。本実施形態においては、SSD10の論理アドレス(LBA)の管理単位として、LBAの下位(s+1)ビット目から上位のビット列で構成されるクラスタアドレスと、LBAの下位(s+t+1)ビットから上位のビット列で構成されるトラックアドレスとを定義する。
すなわち、セクタは、ホスト3からの最小アクセス単位である。クラスタは、SSD内部で「小さなデータ」を管理する管理単位であり、セクタサイズの2以上の自然数倍がクラスタサイズとなるように定められる。また、トラックは、SSD内部で「大きなデータ」を管理する管理単位であり、クラスタサイズの2以上の自然数倍がトラックサイズとなるように定められる。したがって、トラックアドレスはLBAをトラックサイズで割ったものであり、トラック内アドレスはLBAをトラックサイズで割った余りであり、クラスタアドレスはLBAをクラスタサイズで割ったものであり、クラスタ内アドレスはLBAをクラスタサイズで割った余りである。
以下の説明では、便宜上、トラックのサイズは1物理ブロックに記録可能なデータのサイズに等しい(物理ブロックにECC回路で行う誤り訂正の冗長ビットが含まれる場合はこれを除いたサイズ)とし、クラスタのサイズは1物理ページに記録可能なデータのサイズに等しい(物理ページにECC回路で行う誤り訂正の冗長ビットが含まれる場合はこれを除いたサイズ)とする。
なお、管理情報のデータサイズを少なく抑えかつSSDの高性能を実現するためには、このように、LBAを論理セクタの2以上の自然数倍である複数の管理単位で管理することが望ましいが、単一の管理単位で管理するようにしたり、論理セクタで直接管理するようにしたりしても本発明の本質には影響しない。
物理アドレスは物理ブロックIDおよび物理ブロック内アドレスを含む。物理ブロックIDの特定により、NANDメモリチップおよびブロックが特定される。
フリーブロックテーブル(FBテーブル)50は、NANDメモリ24に書き込みを行うときに書き込み用に新規に割り当てることのできるNANDメモリの用途未割り当てのブロック(フリーブロック:FB)のIDを管理する。フリーブロックには、有効データは保存されていない。フリーブロックは、完全フリーブロックと、追記可能フリーブロックとを含む。完全フリーブロックは、再利用のために消去動作を行う必要があるフリーブロックであり、消去動作の実行後は、ブロックの先頭に位置するページから書き込むことが可能である。追記可能フリーブロックは、未書き込みのページが残っており、消去動作を実行することなく再利用が可能であり、残りの未書き込みのページに書き込むことが可能である。フリーブロックテーブル50では、ブロックID毎に消去回数およびブロック内追記アドレスCOFFを管理している。ブロック内追記アドレスCOFFは、ブロック内で追記可能なページの先頭アドレスを示しており、COFF=NULLの場合は、追記不可能な完全フリーブロックであり、COFF=有効値の場合は、追記可能フリーブロックである。COFFの値が大きいほど追記可能な領域が少ない。
アクティブブロックテーブル(ABテーブル)51は、用途が割り当てられたブロックであるアクティブブロック(AB)を管理する。また、ブロックID毎に消去回数およびブロック内追記アドレスCOFFを管理している。COFF=有効値の場合は、アクティブブロックであっても、ブロック内追記アドレスCOFFから追記が可能である。
トラックテーブル52は、トラックアドレスと、このトラックアドレスに対応するトラックデータが記憶されるブロックIDとの対応関係を管理する。トラックアドレス毎に無効フラグを管理する。
クラスタテーブル53は、クラスタアドレスと、このクラスタアドレスに対応するクラスタデータが記憶されるブロックIDと、このクラスタアドレスに対応するクラスタデータが記憶されるブロック内アドレスとの対応関係を管理する。クラスタアドレス毎に無効フラグを管理する。
アクティブブロックテーブル51に登録されているブロック(アクティブブロック)は、少なくともSSDC26にとっては有効なデータを保持していることになる。フリーブロックテーブル50は論理アドレス(LBA)に結び付けられていない物理ブロックをリストとして管理している。フリーブロックテーブル50に登録されているブロック(フリーブロック)は、有効なデータを保持していないことになる。
[アドレス正引き手順]
つぎに、図12を用いてSSD2においてLBAから物理アドレスを特定する手順(アドレス正引き手順)について説明する。以下の、手順は、SSDC26によって実行される。ホスト3は、ライト命令やリード命令をSSD2に実行させる際、LBA(先頭LBA)および論理セクタ長を含むコマンドをSSD2に出力する。LBA(先頭LBA)および論理セクタ長が指定されたとき、それが示すLBA領域AREAinitは始端がコマンドよって指定されたLBAであり、末端が(指定LBA+論理セクタ長−1)の連続したLBA領域となる。
SSDC26はAREAinitをトラック単位に分解し、分解後の各部分であるトラック単位のLBA領域AREAsubに対し、図12に示す処理を実行する。まず、SSDC26はAREAsubの先頭LBAからトラックアドレスAD0TRを計算する(ステップS1201)。SSDC26はトラックアドレスAD0TRをトラックテーブル52から検索し、AD0TRに対応するブロックID(ID01phys)およびトラックAD0TRの無効フラグF01invを取得する(ステップS1202)。無効フラグF01invがtrueである場合には、トラックAD0TR内は対応する物理アドレスを持たないことになり、これを「トラックAD0TRは未書き込み状態である」とする(ステップS1204)。無効フラグF01invがfalseである場合には、ブロックID(ID01phys)が有効な値であるかどうかが判定される(ステップS1205)。ブロックID(=ID01phys)が有効な値である場合には、ID01physがアクティブブロックテーブル51から検索され(ステップS1206)、ID01physの先頭位置からトラック内アドレス分シフトした位置により、指定されたLBAに対応するメモリセル位置および上位/下位ビットが特定され、物理的位置が特定される(ステップS1207)。この場合は、トラック単位のLBA領域AREAsubに対応するNANDメモリ上の物理的な位置の特定にはクラスタテーブル53を必要とせず、このようなLBA領域を「トラック管理されている」という。
ステップS1205において、ブロックID(ID01phys)が無効な値の場合には、SSDC26は、トラック単位のLBA領域AREAsubをさらにクラスタ単位に分解し、分解後の各部分であるクラスタ単位のLBA領域AREAsubsubに対し、以下の処理を実行する。SSDC26はAREAsubsubの先頭LBAからクラスタアドレスAD0CLを計算し、クラスタテーブル53からAD0CLを検索し、対応するブロックID(ID02phys)と対応するブロック内アドレスA02intを取得する(ステップS1208)。クラスタテーブル53からクラスタアドレスAD0CLが見つからなかった場合には(ステップS1209:No)、クラスタAD0CL内は対応する物理アドレスを持たないことになり、これを「クラスタAD0CLは未書き込み状態である」とする(ステップS1210)。クラスタアドレスAD0CLが見つかった場合は(ステップS1209:Yes)、ブロックID(ID02phys)とブロック内アドレスA02intの指定するページの先頭位置からクラスタ内アドレス分シフトした位置がクラスタ単位のLBA領域AREAsubsubに対応する物理的な位置となる(ステップS1211)。AREAsubsubに対応するNANDメモリ上の物理的な位置はトラックテーブル52のみからは特定できず、クラスタテーブル53の参照を必要とすることになり、このようなLBA領域を「クラスタ管理されている」という。
[無効データログ]
図13にRAM25で管理される無効データログ60の詳細を示す。無効データログ60は、トラックテーブル52およびクラスタテーブル53でLBA領域に関連付けられていない物理アドレスのうち、ホスト3にとっては無効であるが、ユーザデータ実体がNANDメモリ24上にまだ消去されずに保持されているデータである無効データの物理アドレスを管理する。無効データは、たとえばフリーブロックに保持されているデータであり、またトラックテーブル52において無効フラグがtrueになっているデータや、クラスタ管理であるにも関わらずクラスタテーブル53に含まれないデータである。無効データログ60により無効データを管理することにより、データが無効データになった後であっても、ホスト3が任意にデータ実体の消去が可能になり、ユーザデータのセキュリティが向上する。
無効データログ60は、トラック単位の無効データのログを管理するトラック管理無効データログ61と、クラスタ単位で無効データのログを管理するクラスタ管理無効データログ62を含む。トラック管理無効データログ61では、無効データについて、ブロックIDとトラックアドレスとの対応を管理する。クラスタ管理無効データログ62では、無効データについて、ブロックIDおよびブロック内アドレスとクラスタアドレスとの対応と、整理済みフラグとの対応を管理する。
どのような無効データであっても容易にデータ実体の消去を実現する観点では、無効データログ60は全ての無効データを管理することが望ましい。一方、SSD2の速度性能向上の観点では、実体の消去の必要のないデータのLBA領域をホスト3から通知をうけることで、通知されたLBA領域を無効データログ60から削除して無効データログの容量を削減するようにすることもできる。無効データログ60は、SSDC26によって、適宜NANDメモリ24にバックアップされる。また、無効データログ60は、大部分をNANDメモリ24に保持するようにして、無効データログ60の一部のみをRAM25に保持しておくようにしてもよい。
[読み出し動作]
つぎに、図14、図15を用いてSSD2における読み出し動作を説明する。図14に示すように、SSD2がホスト3から読み出し命令を受信した場合は(ステップS1301)、SSDC26がこの読み出し命令をRAM25上の読み出し命令待ち行列に追加し(ステップS1302)、読み出し命令を受理した旨をホスト3に返信する。なお、SSD2は、ホスト3に応答を返信しなくてもよい。読み出し命令待ち行列にはホスト3から受信したLBAおよび論理セクタ長も含まれており、それが示すLBA領域AREAinitは、始端が指定されたLBAであり、末端が(指定されたLBA+論理セクタ長−1)の連続したLBA領域となる。
図15に示すように、SSDC26は読み出し命令待ち行列を常時監視し続け、実行可能な読み出し命令があれば(ステップS1401:Yes)、前述したアドレス正引き手順を利用して、AREAinitをトラック管理のAREAsubやクラスタ管理のAREAsubsubの部分領域に分解し、それらが対応する物理アドレスを特定する(ステップS1402)。以下の読み出し動作は、これら各部分領域それぞれについて行われる。SSDC26は、物理アドレスを特定した部分領域が未書き込み領域であるか否かを判定し(ステップS1403)、未書き込み領域である場合は、NANDメモリ24に対して読み出し動作を行わず、たとえば0で埋め尽くされている0-fillデータを読み出したデータとみなしてホスト3に送信する(ステップS1404)。未書き込み領域でない部分領域に関しては、SSDC26は部分領域の物理アドレスに対し、NANDメモリ24から読み出しを行い(ステップS1405)、読み出したデータをIFC30を介してホスト3に送信する(ステップS1406)。なお、NANDメモリ24から読み出したデータは、いったんRAM25に書き込み、RAM25に書き込んだデータをホスト3に送信するようにしてもよい。
[書き込み動作]
つぎに、図16、図17を用いてSSD2における書き込み動作を説明する。図16に示すように、SSD2がホスト3から書き込み命令を受信した場合は(ステップS1501)、SSDC26がこの書き込み命令をRAM25上の読み出し命令待ち行列に追加し(ステップS1502)、書き込み命令を受理した旨をホスト3に返信する。なお、SSD2は、ホスト3に応答を返信しなくてもよい。書き込み命令待ち行列にはホスト3から受信したLBAおよび論理セクタ長も含まれており、それが示すLBA領域AREAinitは、始端が指定されたLBAであり、末端が(指定されたLBA+論理セクタ長−1)の連続したLBA領域となる。
図17に示すように、SSDC26は書き込み命令待ち行列を常時監視し続け、実行可能な書き込み命令があれば(ステップS1601:Yes)、ホスト3に書き込み可能であることを通知する。なお、この通知を行わないようにしてもよい。SSDC26は、図18に示すように、書き込み命令で指定されたLBA領域AREAinitをトラック単位で区切り、その各区画をトラック区画AREAwsとする(ステップS1602)。以下、ステップS1603以降はAREAwsのそれぞれに対して行うものとする。
SSDC26はトラック区画AREAwsをアドレス正引き変換する(ステップS1603)。SSDC26はトラック区画AREAwsがトラックサイズに一致するか否かを判定し(ステップS1604)、トラックサイズに一致する場合は、ステップS1606に、トラックサイズ未満である場合はステップS1605に手順を移行する。図18に示すように、トラック区画AREAwsが、トラックサイズ未満であるトラック端数部分はステップS1605へ移行し、そうでない部分はステップS1606に移行することになる。
ステップS1605の場合は、AREAwsのLBA領域をクラスタ単位の区画で区切り、区切った区画をクラスタ区画AREAwsclとする(ステップS1605)。クラスタ区画AREAwsclがクラスタサイズ未満である場合(セクタ数がクラスタサイズ未満の端数である場合)は、クラスタテーブル53によりクラスタ区画AREAwsclが所属するクラスタの物理アドレスを取得して、このクラスタに含まれる全データをNANDメモリ24からRAM25に読み出し、ホスト3から受信したAREAwsclのデータを、NANDメモリ24から読み出したデータに対してRAM25上で上書きしてこれをクラスタ区画AREAwsclのデータとする。こうすることで、クラスタ区画AREAwsclがクラスタサイズ未満である場合でも、そのデータサイズをクラスタサイズに一致させることができる。
さらに、ステップS1606、S1607においては、ステップS1603の正引き変換結果をもとに、トラック区画AREAwsが現在トラック管理されているかクラスタ管理されているかを判定し、トラック管理のAREAsubとクラスタ管理のAREAsubsubに分類する。この結果、トラック管理されているLBA領域(以下トラック管理領域という)へのトラック書き込みを行うステップS1608、クラスタ管理されているLBA領域(以下クラスタ管理領域という)へのトラック書き込みを行うステップS1609、トラック管理領域へのクラスタ書き込みを行うステップS1610、クラスタ管理領域へのクラスタ書き込みを行うステップS1611のいずれかに手順が移行される。
[S1608:トラック管理領域へのトラック書き込み]
図19にトラック管理領域へトラック書き込みを行う場合の概略を示す。トラックアドレスAREAwsを持つトラックが、最初は、ブロック(ブロックID=ID18physold)に書き込まれてトラック管理されている。このトラックAREAwsが更新され新たなトラックデータが書き込まれたとする。SSDC26は、フリーブロック(ブロックID=ID18free)を取得し、このフリーブロックに新たなトラックデータを書き込み、このブロックをアクティブブロックとする。旧トラックデータが書き込まれていたブロック(ブロックID=ID18physold)は、フリーブロックとされ、ブロックID=ID18physoldおよびトラックアドレスAREAwsがトラック単位無効データログ61に追加される。
図20にトラック管理領域へトラック書き込みを行う場合の詳細手順を示す。SSDC26はフリーブロックテーブル50を読み出し、フリーブロックのブロックID(ID18free)を取得する(ステップS1801)。フリーブロック数がフリーブロック数のクライテリア(下限値)NMF以下である場合は後述するNAND整理を行い(ステップS1803)、その後でフリーブロックのブロックID(ID18free)を取得する(ステップS1804)。NANDメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル50の消去回数が少なく、COFF=NULLのブロックを優先して割り当てるのが望ましく、COFF=NULLのブロックが存在しない場合は、COFFが大きい順に優先して割り当てるのが望ましい。また、フリーブロック数のクライテリアNMFは後述するNAND整理に必要なフリーブロック数以上であることが望ましく、不良ブロック発生時にSSD2が動作不能になることを防止するために、ある程度のマージンをもたせて設定しておくことがさらに望ましい。
SSDC26は取得したブロックID(ID18free)のフリーブロックを消去し、消去したフリーブロック(=ID18free)にホスト3から受信したトラックデータを書き込む(ステップS1805)。SSDC26はトラック管理無効データログ61およびクラスタ管理無効データログ62からブロックID(=ID18free)を検索し、ブロックID(=ID18free)のエントリ(該当行)を全て削除する(ステップS1806)。SSDC26は、ブロックID(ID18free)、その消去回数、およびCOFF=NULLをアクティブブロックテーブル51に追加し、さらにブロックID(ID18free)のエントリをフリーブロックテーブル50から削除する(ステップS1807)。
SSDC26はトラック区画AREAwsのトラックが現在対応しているブロックID(=ID18physold)をトラックテーブル52から取得する(ステップS1808)。さらに、SSDC26は、トラックテーブル52のトラック区画AREAwsの物理ブロックIDをID18freeに書き換え、また無効フラグはfalseとする(ステップS1809)。SSDC26は、ブロックID(ID18physold)をアクティブブロックテーブル51から検索し(ステップS1810)、存在する場合は、ブロックID(ID18physold)のエントリをアクティブブロックテーブル51から削除し、ブロックID(ID18physold)、消去回数、およびCOFF=NULLをフリーブロックテーブル50に追加する(ステップS1811)。さらに、SSDC26は、トラック単位無効データログ61にブロックID=ID18physoldおよびトラックアドレスAREAwsを追加する(ステップS1812)。
[S1609:クラスタ管理領域へのトラック書き込み]
図21にクラスタ管理領域へトラック書き込みを行う場合の概略を示す。トラックAREAws内の各クラスタ(クラスタアドレス=A19CL)が、最初は、複数のブロック(ブロックID=ID19physold)に分散記憶されて、クラスタ管理されている。このトラックAREAwsが更新され新たなトラックデータが書き込まれたとする。SSDC26は、フリーブロック(ブロックID=ID19free)を取得し、このフリーブロックに新たなトラックデータを書き込み、このブロックをアクティブブロックとする。旧クラスタデータ(クラスタアドレス=A19CL)が無効となり、新トラックデータ(トラックアドレス=AREAws)が有効となるよう管理テーブルが書き換えられる。ブロックID=ID19physoldおよびクラスタアドレスA19CLがクラスタ単位無効データログ62に追加される。
図22に、クラスタ管理領域へトラック書き込みを行う場合の詳細手順を示す。SSDC26はフリーブロックテーブル50を読み出し、フリーブロックのブロックID(ID19free)を取得する(ステップS1901)。フリーブロック数がフリーブロック数のクライテリアNMF以下である場合は後述するNAND整理を行い(ステップS1903)、その後でフリーブロックのブロックID(ID19free)を取得する(ステップS1904)。NANDメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル50の消去回数が少なく、COFF=NULLのブロックを優先して割り当てるのが望ましく、COFF=NULLのブロックが存在しない場合は、COFFが大きい順に優先して割り当てるのが望ましい。
SSDC26は取得したブロックID(ID19free)のフリーブロックを消去し、消去したフリーブロック(ID19free)にホスト3から受信したトラックデータを書き込む(ステップS1905)。SSDC26はトラック管理無効データログ61およびクラスタ管理無効データログ62からブロックID(ID19free)を検索し、このブロックID(ID19free)のエントリを全て削除する(ステップS1906)。SSDC26は、ブロックID(ID19free)、その消去回数、およびCOFF=NULLをアクティブブロックテーブル51に追加し、さらにブロックID(ID19free)のエントリをフリーブロックテーブル50から削除する(ステップS1907)。
SSDC26は、トラック区画AREAws内の全てのクラスタについて、クラスタアドレスA19clおよび対応する物理ブロックID(=ID19physold)を、クラスタテーブル53をもとに全て取得する(ステップS1908)。SSDC26は、トラックテーブル52のトラックアドレスAREAwsの物理ブロックIDをID19freeに書き換え、無効フラグ=falseとする(ステップS1909)。SSDC26は、クラスタテーブルからクラスタアドレスA19clをすべて検索し、該当行を全て削除する(ステップS1910)。
SSDC26は、ブロックID(=ID19physold)をクラスタテーブル53から検索する(ステップS1911)。ブロックID(=ID19physold)がクラスタテーブル53に存在する場合は(ステップS1912:Yes)、SSDC26は、クラスタ単位無効データログ62に、ブロックID=ID19physold、ブロック内アドレス、クラスタアドレスA19cl、 整理済みフラグ=falseを全て追加する(ステップS1915)。また、ブロックID(=ID19physold)がクラスタテーブル53に存在しない場合は(ステップS1912:No)、ブロックID(=ID19physold)がアクティブブロックテーブル51に存在するか否かを検索し(ステップS1913)、存在しない場合は、処理を終了する。ステップS1913において、ブロックID(=ID19physold)がアクティブブロックテーブル51に存在する場合は、ブロックID(=ID19physold)、その消去回数、およびブロックID(=ID19physold)のブロックの現在のブロック内追記アドレスCOFFをフリーブロックテーブル50に追加し、さらにブロックID(=ID19physold)のエントリをアクティブブロックテーブル51から削除し(ステップS1914)、その後、ステップS1915の処理を実行する。
[S1610:トラック管理領域へのクラスタ書き込み]
図23にトラック管理領域へクラスタ書き込みを行う場合の概略を示す。トラックアドレスAREAwsを持つトラックが、最初は、ブロック(ブロックID=ID20physold)に書き込まれてトラック管理されている。このトラックAREAws中のクラスタ(クラスタアドレス=AREAwscl)が更新され新たなクラスタデータが書き込まれたとする。SSDC26は、フリーブロック(ブロックID=ID20free)または追記可能ブロック(ブロックID=ID20ad)を取得し、取得したブロックに新たなクラスタデータを書き込む。トラックデータ(トラックアドレス=AREAws)が書き込まれていたブロック(ブロックID=ID20physold)内の全てのクラスタは、この後トラック管理からクラスタ管理に移行され、ブロックID=ID20physold、ブロック内アドレスおよびクラスタアドレス(=AREAwscl)がクラスタ単位無効データログ62に追加される。
図24に、トラック管理領域へクラスタ書き込みを行う場合の手順を示す。SSDC26はアクティブブロックテーブル51およびフリーブロックテーブル50からブロック内追記アドレスCOFFがNULLでないブロック、すなわち追記可能ブロックを検索する(ステップS2001)。追記可能ブロックが存在する場合、SSDC26は追記可能ブロックのブロックID=ID20adを取得し(ステップS2002)、ブロックID(=ID20ad)のブロック内アドレス=COFFを追記開始位置とし、ブロック内アドレス=COFFからクラスタ区画AREAwsclに対応するクラスタデータを追記する(ステップS2003)。追記されたブロックがフリーブロックである場合は、SSDC26はブロックID=ID20adのエントリをアクティブブロックテーブル51に追加して、フリーブロックテーブル50からブロックID=ID20adのエントリを削除する。SSDC26は、アクティブブロックテーブル51において、ブロック内追記アドレスCOFFを追記したクラスタサイズ分だけインクリメントする。ブロック内追記アドレスCOFFがブロックサイズを超過した場合は(ブロックID(=ID20ad)の全セルが書き込まれてこれ以上追記できなくなった場合)、SSDC26は、ブロックID(=ID20ad)のCOFF=NULLとしてアクティブブロックテーブル51を書き換える(ステップS2004)。その後、手順はステップS2012に移行される。なお、NANDメモリの消去回数を低減する観点では、追記可能ブロックの検索の優先順位はアクティブブロックを先に検索し、後でフリーブロックを検索するのが望ましい。
ステップS2001において、追記可能ブロックが存在しない場合、SSDC26はフリーブロックテーブル50を読み出し、フリーブロックのブロックID(=ID20free)を取得する(ステップS2005)。フリーブロック数がフリーブロック数のクライテリアNMF以下である場合は(ステップS2006)、後述するNAND整理を行い(ステップS2007)、その後でフリーブロックのブロックID(=ID20free)を取得する(ステップS2008)。NANDメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル50のCOFF=NULLのブロックを優先して割り当てるのが望ましく、COFF=NULLのブロックが存在しない場合は、COFFが大きい順に優先して割り当てるのが望ましい。
SSDC26は取得したブロックID(=ID20free)のブロックを消去し、この消去したブロックにホスト3から受信したクラスタデータを書き込む(ステップS2009)。SSDC26はトラック管理無効データログ61およびクラスタ管理無効データログ62からブロックID(=ID20free)を検索し、このブロックID(=ID20free)のエントリを全て削除する(ステップS2010)。また、SSDC26は、ブロックID(=ID20free)、その消去回数、およびCOFF=書き込んだクラスタサイズとしてアクティブブロックテーブル51に追加し、さらにブロックID(ID20free)のエントリをフリーブロックテーブル50から削除する(ステップS2011)。
SSDC26は、トラック区画AREAwsのトラックが現在対応しているブロックID(=ID20physold)をトラックテーブル52から取得する(ステップS2013)。SSDC26は、クラスタアドレス=AREAwscl、ブロックID=ID20adまたはID20free、ブロック内アドレス=実際に書き込んだブロック内アドレス、無効フラグ=falseとしたエントリをクラスタテーブル53に追加する(ステップS2013)。また、SSDC26は、トラック区画AREAwsで指定されるトラックに含まれるクラスタのうち、クラスタ区画AREAwsclで指定されるクラスタを除く全てのクラスタをクラスタテーブル53に追加する。このとき、ブロックID=ID20physoldとし、無効フラグ=falseとする(S2014)。SSDC26は、トラックテーブル52において、トラック区画AREAwsで指定されるトラックに対応するブロックIDをNULLに書き換える(ステップS2015)。ステップS2013〜S2015の処理により、トラック区画AREAwsに属する全データはトラック管理からクラスタ管理に移行することになる。
SSDC26は、クラスタ単位無効データログ62にブロックID=ID20physold、ブロック内アドレスおよびクラスタアドレス(=AREAwscl)を含むエントリを追加する(ステップS2016)。
[S1611:クラスタ管理領域へのクラスタ書き込み]
図25にクラスタ管理領域へクラスタ書き込みを行う場合の概略を示す。トラックAREAws内の各クラスタは、最初は、複数のブロックに分散記憶されて、クラスタ管理されている。トラックAREAws内のクラスタAREAwsclは、最初は、ブロック(ブロックID=ID21physold)に書き込まれている。このクラスタAREAwsclが更新され新たなクラスタデータが書き込まれたとする。SSDC26は、フリーブロック(ブロックID=ID21free)または追記可能ブロック(ブロックID=21ad)を取得し、取得したブロックに新たなクラスタデータを書き込む。ブロック(ブロックID=ID18physold)内の旧クラスタデータが無効となり、ブロック(ブロックID=ID21freeまたは21ad)内の新クラスタデータが有効となるよう管理テーブルが書き換えられる。ブロックID=ID21physoldおよびクラスタアドレスAREAwsclがクラスタ単位無効データログ62に追加される。
図26に、トラック管理領域へクラスタ書き込みを行う場合の手順を示す。SSDC26はアクティブブロックテーブル51およびフリーブロックテーブル50からブロック内追記アドレスCOFFがNULLでない追記可能ブロックを検索する(ステップS2101)。追記可能ブロックが存在する場合、SSDC26は追記可能ブロックのブロックID=ID21adを取得し(ステップS2102)、ブロックID(=ID21ad)のブロック内アドレス=COFFを追記開始位置とし、ブロック内アドレス=COFFからクラスタ区画AREAwsclに対応するクラスタデータを追記する(ステップS2103)。追記されたブロックがフリーブロックである場合は、SSDC26はブロックID=ID20adのエントリをアクティブブロックテーブル51に追加して、フリーブロックテーブル50からブロックID=ID20adのエントリを削除する。SSDC26は、アクティブブロックテーブル51において、ブロック内追記アドレスCOFFを追記したクラスタサイズ分だけインクリメントする。ブロック内追記アドレスCOFFがブロックサイズを超過した場合(ブロックID(=ID21ad)の全セルが書き込まれてこれ以上追記できなくなった場合)、SSDC26は、ブロックID(=ID21ad)のCOFF=NULLとしてアクティブブロックテーブル51を書き換える。(ステップS2104)なお、NANDメモリの消去回数を低減する観点では、追記可能ブロックの検索の優先順位はアクティブブロックを先に検索し、後でフリーブロックを検索するのが望ましい。
ステップS2101において、追記可能ブロックが存在しない場合、SSDC26はフリーブロックテーブル50を読み出し、フリーブロックのブロックID(=ID21free)を取得する(ステップS2105)。フリーブロック数がフリーブロック数のクライテリアNMF以下である場合は(ステップS2106)、後述するNAND整理を行い(ステップS2107)、その後でフリーブロックのブロックID(=ID21free)を取得する(ステップS2108)。NANDメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル50のCOFF=NULLのブロックを優先して割り当てるのが望ましく、COFF=NULLのブロックが存在しない場合は、COFFが大きい順に優先して割り当てるのが望ましい。
SSDC26は取得したブロックID(=ID21free)のブロックを消去し、この消去したブロックにホスト3から受信したクラスタデータを書き込む(ステップS2109)。SSDC26はトラック管理無効データログ61およびクラスタ管理無効データログ62からブロックID(=ID21free)を検索し、このブロックID(=ID21free)のエントリを全て削除する(S2110)。また、SSDC26は、ブロックID(ID21free)、その消去回数、およびCOFF=書き込んだクラスタサイズとしてアクティブブロックテーブル51に追加し、さらにブロックID(ID21free)のエントリをフリーブロックテーブル50から削除する(ステップS2111)。
SSDC26は、クラスタ区画AREAwsclのクラスタが現在対応しているブロックID(=ID21physold)をクラスタテーブル53から取得する(ステップS2112)。SSDC26は、クラスタアドレスAREAwsclについて、クラスタアドレス=クラスタ区画AREAwscl、ブロックID=ID21adまたはID21free、ブロック内アドレス=実際に書き込んだブロック内アドレス、無効フラグ=falseとなるようにクラスタテーブル53を書き換える(ステップS2113)。なお、ステップS2113において、クラスタテーブルにクラスタアドレス=AREAwsclが存在しない場合は、エントリを追加する。
SSDC26は、クラスタテーブル53において、ブロックID=ID21physoldを検索する(ステップS2114)。クラスタテーブル53にブロックID=ID21physoldが存在する場合は(ステップS2115:Yes)、クラスタ単位無効データログ62に、ブロックID=ID21physold、クラスタ区画AREAwsclで指定されるクラスタデータが書き込まれていたブロック内アドレス、クラスタアドレス=AREAwscl、整理済みフラグ=falseを追加する(ステップS2118)。また、SSDC26は、クラスタテーブル53にブロックID=ID21physoldが存在しない場合は(ステップS2115:No)、ブロックID=ID21physoldをアクティブブロックテーブル51から検索し(ステップS2116)、ブロックID=ID21physoldがアクティブブロックテーブル51に存在しない場合は、処理を終了する。また、SSDC26は、アクティブブロックテーブル51にブロックID=ID21physoldが存在する場合は、ブロックID=ID21physold、その消去回数、およびCOFF=ID21physoldのCOFFとしたエントリをフリーブロックテーブル50に追加し、ブロックID=ID21physoldのエントリをアクティブブロックテーブル51から削除する(ステップS2117)。その後、ステップS2118の手順を実行する。
[NAND整理]
SSDの全LBAの容量は、NANDメモリ24の全容量よりも小さく設計されているため、書き込み動作がトラック単位で書き込まれ続ける限りはフリーブロックが枯渇することはない。一方、クラスタ単位の書き込みが多数発生した場合、クラスタデータが書き込まれていたNANDメモリのページが無効データとなり、無効データが蓄積していくにつれてフリーブロックサイズ(=NANDメモリ容量−無効データ−管理情報)が枯渇する。NAND整理を行えば、無効データを削減することでフリーブロックを新たに確保することができる。
図27にNAND整理のフローチャートを示す。SSDC26は、クラスタ単位無効データログ62を読み出して、収集したクラスタ単位無効データの合計サイズと現在のフリーブロックサイズの合計がNAND整理のクライテリアNMFよりも大きくなるようクラスタ単位無効データを収集する(ステップS2201〜S2208)。なお、収集したクラスタ単位無効データの合計サイズ+現在のフリーブロックサイズ>クライテリアNMFであればNAND整理により十分量のフリーブロックが確保できるが、NAND整理の発生頻度を削減して速度性能を高めるためには、(合計サイズ+現在のフリーブロックサイズ>NMF+マージン)であることが望ましい。
無効データを収集する際、収集した無効データの属するブロックに含まれる全ての有効無効クラスタをNAND整理対象リスト80に加える。NAND整理対象リスト80は、図28に示すように、NAND整理対象のブロックを管理するものであり、クラスタ単位無効データログ62から収集した無効クラスタに関する情報(ブロックID、ブロック内アドレス、無効クラスタアドレス、未整理フラグ)を登録する。
具体的には、SSDC26は、クラスタ単位無効データログ62の行を更新するための変数C22colと、収集したクラスタ単位無効データの合計サイズを計算するための変数S20を初期化し(ステップS2201)、クラスタ単位無効データログ62のC22col行を読み出し、ブロックID(=ID22phys)および整理済みフラグを取得し(ステップS2202)、その整理済みフラグがtrueである場合は(ステップS2203)、変数C22colを+1して(ステップS2204)、次の行のブロックID(=ID22phys)および整理済みフラグを取得する(ステップS2202)。整理済みフラグがtrueである場合、SSDC26はブロックID(=ID22phys)がNAND整理対象リスト80に登録されているか否かを判定し(ステップS2205)、登録されている場合は、変数C22colを+1して(ステップS2204)、次の行のブロックID(=ID22phys)および整理済みフラグを取得する(ステップS2202)。ブロックID(=ID22phys)がNAND整理対象リスト80に登録されていない場合、SSDC26はクラスタ単位無効データログ62から、ブロックID=ID22physである全ての行の情報を収集し、収集した情報であるブロックID(=ID22phys)、ブロック内アドレスA22int、クラスタアドレスA22cl、未整理フラグ=trueをNAND整理対象リスト80に登録する(ステップS2206)。つぎに、SSDC26は、ステップS2206で収集した全ての無効クラスタのサイズを計算し、前回計算した合計サイズS20に加算する(ステップS2207)。つぎに、SSDC26は、計算した無効クラスタの合計サイズS20+現在のフリーブロックサイズの合計がNAND整理のクライテリアNMFより大きいか否かを判定し(ステップS2208)、このステップS2208の判定がYesとなるまで、変数C22colを+1して(ステップS2204)、上述した無効クラスタの収集を繰り返す。
ステップS2208の判定がYesとなると、SSDC26は、NAND整理対象リスト80の行を更新するための変数C222colを初期化し(ステップS2209)、NAND整理対象リスト80のC222col行を読み出し、そのブロックID(=ID22phys)および未整理フラグを取得し(ステップS2210)、その未整理フラグがtrueでないは(ステップS2211)、変数C222colを+1して(ステップS2212)、次の行の情報を取得する(ステップS2210)。整理フラグがtrueである場合、SSDC26は、クラスタテーブル53からブロックID(=ID22phys)を検索し、このブロックに含まれる全ての有効なクラスタをNANDメモリ24からRAM25に読み出し(ステップS2213)、読み出したデータを追記可能ブロックに追記する(ステップS2214〜S2217)か、フリーブロックに書き込む(ステップS2218〜S2221)。追記可能ブロックに書き込む手順は、図24のステップS2002〜S2004または、図26のステップS2102〜S2104と同じであり、またフリーブロックに書き込む手順は、図24のステップS2008〜S2011、図26のステップS2108〜S2111と同じであり、重複する説明は省略する。
SSDC26は、書き込んだ全クラスタがそれぞれの書き込み先の物理アドレスに対応するよう、クラスタテーブル53を書き換える(ステップS2222)。すなわち、書き込んだ全クラスタについて、ブロックID=ID22adまたはID22free、ブロック内アドレス=実際に書き込んだブロック内アドレス、無効フラグ=falseとなるようにクラスタテーブル53を書き換える。SSDC26は、NAND整理対象となったブロック(=ID22phys)をフリーブロックテーブル50に追加し、さらにこのブロックをアクティブブロックテーブル51から削除する(ステップS2223)。SSDC26は、NAND整理したクラスタについて、整理済みフラグ=trueとなるようクラスタ単位無効データログ62を書き換える(ステップS2224)。SSDC26は、NAND整理対象リスト80において、NAND整理したブロックに対し、未整理フラグ=falseと書き換える(ステップS2225)。NAND整理対象リスト80の最終行までの処理が終わってNAND整理が完了すると(ステップS2226)、SSDC26は、NAND整理対象リスト80をクリア(消去)する(ステップS2227)。
[削除通知]
次に削除通知について説明する。削除通知は、ホスト3のOS16でデータの削除が行われた場合に、ホスト3から不揮発性記憶装置2に対して送信される命令である。削除通知の例として、たとえば、INCITS ATA/ATAPI Command Set-2(ACS−2)で記述されているData Set Management Command(通称トリム(TRIM)コマンド)があげられる(文献1参照)。これは、OS16上でデータが削除された場合、LBAおよび論理セクタ数に関するデータ(LBA Range Entry)をメモリシステムに通知することにより、以後不揮発性記憶装置2上で、指定されたLBAから論理セクタ数分のLBA領域を空き領域として扱うことができる方式である。削除通知により、SSD2はフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、Data Set Management Commandだけでなく、たとえばベンダー独自のコマンドなどその他コマンドによって実現してもよい。
文献2〜3にあるように、LBA領域に対する削除通知の処理は、不揮発性メモリに保存されたデータそのものを消去するとは限らない。たとえば、管理情報31を書き換え、ユーザデータの実体は消去しないことによって削除通知処理は実現される。このような削除通知処理を、以後、削除処理Aという。ユーザによって削除されていたデータであっても、SSD2を分解し内部の不揮発性メモリ24を解析することによって、ユーザデータを解析されてしまう恐れがある(文献4)。本実施形態においては、当該削除通知処理において、該当するデータを解析困難な状態にする。このような削除通知処理を、以後、削除処理Bという。削除処理BはNANDメモリ24に対するアクセスが比較的多く発生することにより、削除処理Aよりも処理に時間がかかりかつNANDメモリ24の信頼性を劣化させる恐れがあるため、SSD2は削除処理Bだけでなく削除処理Aも処理可能であることが望ましい。
本実施形態においては、たとえば、SSD2はホスト3からの命令に応じて、削除処理Aと削除処理Bを任意に選択可能であるとする。本実施形態では、図29に示すように、たとえば、ACS−2のData Set Management Commandにおいて、入力パラメータであるFeatureのビット0が1でビット1が0であるとき(bit1:0=1)には、当該LBA Range Entryに対して削除処理Aが割り当てられ、ビット0が1でビット1が1であるとき(bit1:0=3)には、当該LBA Range Entryに対して削除処理Bが割り当てられるようにする。もちろん、削除処理Aと削除処理Bの割り当ては他のパラメータに従って行ってもよいし、削除処理Aと削除処理Bとで別々のコマンド番号を割り当てることにしてもよい。
図30に、削除通知コマンド受信時の動作手順を示す。SSD2がホスト3から削除通知を受信した場合は(ステップS2601)、SSDC26は、この削除通知命令を図31に示す削除通知バッファ40の削除通知コマンドバッファ41に追加し、命令を受理した旨の応答をホスト3に返信する。応答をホスト3に返信しなくてもよい。
一方、SSDC26は削除通知コマンドバッファ41を監視し、一定条件を満たした時、削除通知コマンドバッファ41を整理する。一定条件とは、
・削除通知コマンドを受信した直後、
・削除通知コマンドバッファ41が満杯になった場合、または削除通知コマンドバッファ41の使用容量が所定値を上回った場合、
・ホスト3から最後にコマンドを受信してから一定時間以上経過した場合
・スタンバイ状態やアイドル状態に移行するためのコマンドをホスト3から受信した場合
・削除通知コマンドバッファを整理するためのコマンドをホスト3から受信した場合
などがあげられる。
図32は、削除通知コマンドバッファ41にバァファリングされた削除コマンドについての処理手順を示すものである。SSDC26は、削除通知コマンドバッファ41にバァファリングされた削除通知コマンドのFeatureのビット1を判定し、Featureのビット1が0であるときは、削除処理Aへ移行し、Featureのビット1が1であるときは、削除処理Bへ移行する。(ステップS2701)
削除処理Aの場合、SSDC26は、各LBA Range Entryをトラック単位に分解し、LBA Range Entryにトラックサイズ分全て包含されているトラックアドレス(端数トラックでないトラックのアドレス)をデータ無効化用トラック管理テーブル42に追加する。なお、重複しているトラックはテーブル42に追加しない(ステップS2702)。その後、SSDC26は、テーブル42に追加されなかった各トラック(図18に示す端数トラック)をクラスタ単位に分解し、LBA Range Entryにクラスタサイズ分全て包含されているクラスタのアドレスをデータ無効化用クラスタ管理テーブル43に追加する。なお、重複しているクラスタはテーブル43に追加しない(ステップS2703)。テーブル43に追加されなかった各クラスタ(端数クラスタ)は、クラスタ未満の単位でないと管理できなく、処理速度が優先される削除処理Aにおいては、当該クラスタに対しては何もしないのが望ましい。なお、テーブル43に追加されなかった各クラスタを論理セクタ単位に分解し、データ無効化用セクタ管理テーブル44に追加してもよい。なお、重複しているセクタはテーブル44に追加しない(ステップS2704)。本実施形態では、データ無効化用セクタ管理テーブル44は削除通知バッファ41に含まれず、ステップS2704が実行されないものとする。
削除処理Bの場合、各LBA Range Entryをトラック単位に分解し、LBA Range Entryにトラックサイズ分全て包含されているトラックのアドレスを完全消去用トラック管理テーブル45に追加する。なお、重複しているトラックはテーブル45に追加しない(ステップS2705)。次に、テーブル45に追加されなかった各トラック(図18に示す端数トラック)をクラスタ単位に分解し、LBA Range Entryにクラスタサイズ分全て包含されているクラスタのアドレスを完全消去用クラスタ管理テーブル46に追加する。なお、重複しているクラスタはテーブル46に追加しない(ステップS2706)。次に、テーブル46に追加されなかった各クラスタ(端数クラスタ)を論理セクタ単位に分解し、完全消去用セクタ管理テーブル47に追加する。なお、重複しているセクタはテーブル47に追加しない(ステップS2707)。なお、処理速度優先や余分なNANDメモリ24のブロック消去を抑制するためにクラスタ単位未満のセクタ単位については削除処理Bを行わないようにしてもよいが、その場合、削除処理Bのコマンドプロトコルの仕様にクラスタ未満の単位のデータ消去は保証しない旨が記述されているのが望ましい。
最後に、SSDC26は、処理の終わった削除通知コマンドを、削除通知コマンドバッファ41から削除する(ステップS2708)。
SSDC26は、データ無効化用トラック管理テーブル42とデータ無効化用クラスタ管理テーブル43(とデータ無効化用セクタ管理テーブル44)を監視して、一定条件を満たした時、図33に示す、データ無効化用トラック管理テーブル42とデータ無効化用クラスタ管理テーブル43(とデータ無効化用セクタ管理テーブル44)の整理、すなわちトラック単位データの無効化処理(ステップS2A01)と、クラスタ単位データ無効化処理(ステップS2A02)を含む削除処理Aの実体処理を実行する。
また、SSDC26は、完全消去用トラック管理テーブル45、完全消去用クラスタ管理テーブル46、および完全消去用セクタ管理テーブル47を監視し、一定条件を満たした時、図34に示す、完全消去用トラック管理テーブル45、完全消去用クラスタ管理テーブル46、および完全消去用セクタ管理テーブル47の整理、すなわちトラック単位完全消去処理(ステップS2B01)と、クラスタ単位完全消去処理(ステップS2B02)と、セクタ単位完全消去処理(ステップS2B03)とを含む削除処理Bの実体処理を実行する。
一定条件とは、たとえば、
・テーブル42〜47が満杯になった場合、またはテーブル42〜47の使用容量が所定値を上回った場合、
・ホスト3から最後にコマンドを受信してから一定時間以上経過した場合、
・スタンバイ状態やアイドル状態に移行するためのコマンドをホスト3から受信した場合、
・テーブル42〜44を整理するためのコマンドをホスト3から受信した場合、
・テーブル45〜47を整理するためのコマンドをホスト3から受信した場合(この場合については後で詳述する)
などがあげられる。
[トラック単位データ無効化処理]
図35にデータ無効化用トラック管理テーブル42の処理手順(トラック単位データ無効化処理手順)を示す。SSDC26はテーブル42が空である時、処理を終了する。SSDC26は、テーブル42の現在行(エントリ)を管理する変数であるX1Colを1にセットする(ステップS2802)。SSDC26は、変数X1Colがテーブル42の行数を超過するまで(ステップS2810)、変数X1Colをインクリメントしながら(ステップS2809)、テーブル42の各行について以下のように該当トラックの無効化処理を行う。
SSDC26は、テーブル42の現在行からトラックアドレスを読み出して変数A1TRに代入し(ステップS2803)、トラックテーブル52からトラックアドレスA1TRを検索し(ステップS2804)、トラックアドレスA1TRが存在する場合はトラックA1TRに対応する物理ブロックをフリーブロックテーブル50に追加してアクティブブロックテーブル51から削除し(ステップS2806)、該当行の情報をトラック単位無効データログ61に追加し、トラックテーブル52の該当行の無効フラグをtrueに書き換える(ステップS2807)。トラックアドレスA1TRがトラックテーブル52に存在しない場合は、SSDC26は当該トラックA1TR内の全クラスタをデータ無効化用クラスタ管理テーブル43に追加する(ステップS2808)。全行の処理を完了したら(ステップS2810)、テーブル42を空にして処理を終了する(ステップS2811)。SSDC26は、NAND整理以外に、データ無効化処理によってもフリーブロックを確保することができる。
[クラスタ単位データ無効化処理]
図36にデータ無効化用クラスタ管理テーブル43の処理手順(クラスタ単位データ無効化処理手順)を示す。SSDC26はテーブル43が空である時、処理を終了する。SSDC26はテーブル43の現在行(エントリ)を、変数X2Colを1にセットする(ステップS2901)。SSDC26は、変数X2Colがテーブル43の行数を超過するまで(ステップS2909)、変数X2Colをインクリメントしながら(ステップS2908)、テーブル43の各行について以下のように該当クラスタの無効化処理を行う。
SSDC26はテーブル43の現在行を参照し、クラスタアドレスを読み出しこれを変数A2CLに代入する(ステップS2902)。SSDC26はクラスタテーブル53からクラスタアドレス=A2CLを検索し、該当行のブロックIDを取得して、取得したブロックIDを変数BLK2Tに代入する(ステップS2903)。SSDC26は該当行の情報(ブロックID+ブロック内アドレス+クラスタアドレス+整理済みフラグ=false)をクラスタ単位無効データログ62に追加し、この該当行をクラスタテーブル53から削除する(ステップS2904)。
SSDC26はブロックID(=BLK2T)をクラスタテーブル53から検索し(ステップS2905)、見つからないブロックについては有効なデータを全く持っていないと考えられるため(ステップS2906)、ブロックID=BLK2Tをフリーブロックテーブル50に追加してアクティブブロックテーブル51から削除する(ステップS2907)。全行の処理を完了したら(ステップS2909)、テーブル43を空にして処理を終了する(ステップS2910)。SSDC26は、NAND整理以外に、データ無効化処理によってもフリーブロックを確保することができる。
[トラック単位完全消去処理]
図37に完全消去用トラック管理テーブル45に関する処理手順(トラック単位完全消去処理手順)を示す。SSDC26はテーブル45が空である時、処理を終了する。SSDC26は、テーブル45の現在行を管理する変数であるX4Colを1にセットする(ステップS3002)。SSDC26は、変数X4Colがテーブル45の行数を超過するまで(ステップS3013)、変数X4Colをインクリメントしながら(ステップS3012)、テーブル45の各行について以下のように該当トラックの無効化処理を行う。
SSDC26は、テーブル45の現在行からトラックアドレスを読み出して変数A4TRに代入し(ステップS3003)、トラックテーブル52からトラックアドレスA4TRを検索し(ステップS3004)、トラックアドレスA4TRが存在する場合は(ステップS3005:Yes)、トラックA4TRに対応する物理ブロックをフリーブロックテーブル50に追加し、またトラックA4TRに対応する物理ブロックをアクティブブロックテーブル51から削除する(ステップS3006)。また、SSDC26は、トラックテーブル52の該当行の情報(トラックアドレス+ブロックID)をトラック単位無効データログ61に追加し、トラックテーブル52の該当行の無効フラグをtrueに書き換える(ステップS3007)。トラックテーブル52にトラックアドレスA4TRが存在しない場合は(ステップS3005:No)、SSDC26は当該トラック内の全クラスタを完全消去用クラスタ管理テーブル46に追加する(ステップS3008)。
現段階では、完全消去対象のデータは消去されていないため、以下で消去処理を行う。SSDC26はトラック単位無効データログ61からトラックアドレス=A4TRが登録された行を全て抽出する(ステップS3009)。SSDC26は、抽出された行に登録されている全てのブロックIDについて、トラックテーブル52に登録されているか否かをそれぞれ検索し、トラックテーブル52から見つかった場合は、このブロックは有効なデータを保持していることになるため、消去処理を行わず、そのまま保持する。SSDC26は、該当行全てのブロックIDについて、トラックテーブル52から見つからなかった場合は、今度は該当行全てのブロックIDについて、それぞれクラスタテーブル53から検索し、見つかった場合は、該当クラスタ全てをRAM25に読み出して、取得したフリーブロックに書き込んでバックアップし、その後、当該ブロックを消去する。これに伴い、フリーブロックテーブル50、アクティブブロックテーブル51などの管理テーブルを更新する(ステップS3010)。一方、SSDC26は、トラックアドレス=A4TRに対応付けられたブロックIDがトラックテーブル52にもクラスタテーブル53にも見つからなかった場合も、このブロックIDを持つ当該ブロックを消去する(ステップS3010)。このように、有効データをバックアップしてから該当ブロックを消去するステップS3010の手順は、図38のステップS3111−1、S3111−2、S3113、S3118〜S3123に同様の手順が詳細に示されている。
ステップS3010の処理を行うことによって、現在有効なデータは保持されつつ、完全消去対象の論理アドレスに対応する現在だけでなく過去に書き込まれたデータも削除することが可能となる。本実施形態における有効データの退避方法は実施形態の一つであり、有効データの退避方法は他にもさまざまな種類が存在し、本発明は本実施形態に限定されるものではないことはもちろんである。
SSDC26は処理を終えた行をトラック単位無効データログ61から削除する(ステップS3011)。SSDC26は、全行の処理を完了したら(ステップS3013)、テーブル42を空にして処理を終了する(ステップS3014)。SSDC26は、データ無効化処理と同様に、完全消去処理によってもフリーブロックを確保することができる。
なお、トラック単位完全消去処理においてブロック消去した場合、書き込みプロセス(図17、図20、図22、図24、図26)やNAND整理プロセス(図27)において再度ブロック消去が行われることを防ぐために、フリーブロックテーブル50に消去済みフラグの項目をもうけて、ブロック消去したら消去済みフラグをtrueに書き換えて、以後消去済みフラグがtrueであるフリーブロックは消去を行わないようにしてもよい。フリーブロックがアクティブブロックになると、消去済みフラグはFalseにリセットされる。これは以後のクラスタ単位完全消去処理やセクタ単位完全消去処理についても同様である。
[クラスタ単位完全消去処理]
図38に完全消去用クラスタ管理テーブル46に関する処理手順(クラスタ単位完全消去処理手順)を示す。SSDC26はテーブル46の現在行を管理する変数であるX5Colを1にセットする(ステップS3101)。SSDC26は、変数X5Colが末尾に到達するまで(ステップS3127)、変数X5Colをインクリメントしながら(ステップS3103)、テーブル46の各行について以下のように該当クラスタの無効化処理を行う。
SSDC26はテーブル46の現在行を参照し、クラスタアドレスを読み出しこれを変数A5CLに代入する(ステップS3102)。SSDC26はクラスタテーブル53からクラスタアドレス=A5CLを検索し、該当行のブロックIDを取得してBLK51Tに代入する(ステップS3104)。SSDC26は、クラスタテーブル53の該当行の情報(ブロックID+ブロック内アドレス+クラスタアドレス+整理済みフラグ=false)をクラスタ単位無効データログ62に追加し、この該当行をクラスタテーブル53から削除する(ステップS3105)。
SSDC26はブロックID=BLK51Tをクラスタテーブル53から検索し(ステップS3106)、ブロックID=BLK51Tがクラスタテーブル53に見つからなかった場合は、このブロックについては、他に有効なデータを全く持っていないと考えられるため、ブロックID=BLK51Tのブロックをフリーブロックテーブル50に追加して、さらにブロックID=BLK51Tのブロックをアクティブブロックテーブル51から削除する(ステップS3108)。その後、SSDC26は、クラスタ単位無効データログ62からクラスタアドレス=A5CLを検索し、該当行の情報を図39に示す消去対象一時リスト100に全て追加する(ステップS3109)。また、ブロックID=BLK51Tがクラスタテーブル53から見つかった場合も(ステップS3107:Yes)、ステップS3109の処理を実行する。消去対象一時リスト100は、消去対象のクラスタを一時的に管理するリストであり、ブロックID、ブロック内アドレス、クラスタアドレスA5CLが登録される。
SSDC26は消去対象一時リスト100の現在行を管理する変数であるY5Colを1にセットする(ステップS3110)。SSDC26は消去対象一時リスト100の末尾に到達するまで(S3125)、Y5Colをインクリメントしながら(ステップS3112)、消去対象一時リスト100の各行について以下のようにして該当クラスタの完全削除処理を行う。
SSDC26は、消去対象一時リスト100のY5Col行を読み出し、該当クラスタの属するブロックID=BLK52Tを取得し(ステップS3111)、以下のようにしてブロックBLK52Tに含まれる無効データ以外の有効データをバックアップした後(ステップS3111−1〜3122)、ブロックID=BLK52Tのブロックを消去することでブロックBLK52Tに含まれる無効データを消去する(ステップS3123)。
つまり、SSDC26はブロックID=BLK52Tをトラックテーブル52から検索し、ブロックID=BLK52Tのブロックであって、無効フラグ=falseで、トラックアドレスが有効値のエントリがトラックテーブル52において見つかった場合は、ブロックBLK52Tは有効なデータを保持していることになるため、以下のステップをスキップしてトラックデータをそのまま保持する(ステップS3111−1:Yes)。なお、このトラックをRAM25に読み出してNANDメモリ24の別のブロックに書き込むようにしてもよいが、NANDメモリ24への余分な書き込みが発生するので、望ましくない。
ブロックID=BLK52Tのブロックがトラックテーブル52において見つからなかった場合は(ステップS3111−1:No)、SSDC26はブロックID=BLK52Tのブロックをクラスタテーブル53から検索する(ステップS3111−2)。すなわち、クラスタテーブルにおいて、ブロックID=BLK52Tのブロックであって、無効フラグ=falseで、クラスタアドレスが有効値のエントリを検索する。ブロックID=BLK52Tのブロックがクラスタテーブル53において見つからなかった場合は(ステップS3111−2:No)、ブロックID=BLK52Tのブロックのデータを保持する必要がないため、ステップS3123に移行してブロックBLK52Tを消去する。
ブロックID=BLK52Tのブロックがクラスタテーブル53において見つかった場合は(ステップS3111−2:Yes)、SSDC26は、ブロックID=BLK52Tのブロックに含まれる有効クラスタを全てNANDメモリ24からRAM25上に読み出して(ステップS3113)、読み出したクラスタをNANDメモリ24のブロックに追記する(ステップS3114〜S3117)か、NANDメモリ24のブロックに新規書き込みする(ステップS3118〜S3121)。
具体的には、SSDC26は、アクティブブロックテーブル51およびフリーブロックテーブル50のブロック内追記アドレスCOFFを参照することで、追記可能ブロックが存在するか否かを判定して、追記可能ブロックが存在するか否かを判定し(ステップS3114)、追記可能ブロックが存在しない場合は、手順をステップS3118に移行する。追記可能ブロックが存在する場合、SSDC26は、追記可能ブロックのブロックID(=ID31ad)を取得し(ステップS3115)、このブロックのブロック内追記アドレスCOFFから、RAM25に読み出したクラスタデータを追記する(ステップS3116)。SSDC26は、追記可能ブロックとしてアクティブブロックを用いた場合は、ブロック内追記アドレスCOFF=COFF+クラスタサイズ合計となるように、アクティブブロックテーブル51のブロックID(=ID31ad)のエントリを更新する。また、追記可能ブロックとしてフリーブロックを用いた場合は、フリーブロックテーブル50からブロックID(=ID31ad)のエントリを削除し、アクティブブロックテーブル51にブロックID(=ID31ad)のエントリを追加する(ステップS3117)。その後、手順をステップS3122に移行される。
ステップS3118においては、SSDC26は、フリーブロックテーブル50からフリーブロックのブロックID(=ID31free)を取得し、この取得したフリーブロックを消去した後、このフリーブロックにRAM25に読み出したクラスタデータを書き込む(ステップS3119)。SSDC26はトラック管理無効データログ61およびクラスタ管理無効データログ62からブロックID(=ID31free)を検索し、このブロックID(=ID31free)のエントリを全て削除する(ステップS3120)。SSDC26は、ブロックID=ID31free、消去回数、ブロック内追記アドレスCOFF=クラスタサイズ合計を含む情報をアクティブブロックテーブル51に登録し、またブロックID(=ID31free)のエントリをフリーブロックテーブル50から削除する(ステップS3121)。その後、手順をステップS3122に移行される。
ステップS3122においては、SSDC22は、追記可能ブロックまたは新規フリーブロックに書き込んだ全クラスタについて、管理情報31を書き換える。具体的には、SSDC26は、ブロックID(=ID31freeまたはID31ad)、ブロック内アドレス、無効フラグ=falseとなるようにクラスタテーブル53を書き換える。
ステップS3123では、SSDC26は、ブロックID=BLK52Tのブロックを消去する。また、ブロックID=BLK52T、その消去回数、ブロック内追記アドレスCOFF=初期値(未書き込み状態)をフリーブロックテーブル50に追加し、ブロックID(=BLK52T)のエントリをアクティブブロックテーブル51から削除する。以上のような処理によって、現在有効なデータを別ブロックに退避してからブロック消去を行う。これにより、現在有効なデータを保持しつつ無効データの消去が可能となる。本実施形態における有効データの退避方法は実施形態の一つであり、有効データの退避方法は他にもさまざまな種類が存在し、本発明は本実施形態に限定されるものではないことは勿論である。
つぎに、SSDC26はクラスタ単位無効データログ62からブロックID=BLK52Tを検索し、該当行全てに対し、クラスタアドレス=NULL、ブロックID=NULLと書き換えることで、消去済みの無効データが重複して消去されることを防ぐ(ステップS3124)。SSDC26は消去対象一時リスト100の全行を処理し終えたら(ステップS3125)、消去対象一時リスト100をクリアする(ステップS3126)。SSDC26は、完全消去用クラスタ管理テーブル46の全行を処理し終えたら(ステップS3127)、完全消去用クラスタ管理テーブル46をクリアする(ステップS3128)。SSDC26はクラスタ単位無効データログ62からクラスタアドレス=NULLを検索して該当行を全て削除する(ステップS3128)。SSDC26は、データ無効化処理と同様に、完全消去処理によってもフリーブロックを確保することができる。
[セクタ単位完全消去処理]
図40に、完全消去用セクタ管理テーブル47の処理手順(セクタ単位完全消去処理手順)を示す。SSDC26はテーブル47が空である時は(ステップS3201:Yes)、処理を終了する。SSDC26はテーブル47の現在行を管理する変数であるX6Colを1にセットする(ステップS3202)。SSDC26は、変数X6Colが末尾に到達するまで(ステップS3215)、変数X6Colをインクリメントしながら(ステップS3204)、テーブル47の各行について以下のように該当セクタの消去処理を行う。
SSDC26はテーブル47の現在行を参照し、そのLBAを読み出しこれを変数A6LBAに代入する(ステップS3203)。A6LBAが有効値であるとき(ステップS3205:No)、SSDC26は、A6LBAからA6LBAが所属するクラスタアドレスA6CLを計算し(ステップS3206)、さらにテーブル47から同一クラスタA6CLに属するその他のセクタ(LBA=A6LBAsub)を検索する(ステップS3207)。つぎに、SSDC26は、A6LBAが属するクラスタA6CLのデータをNANDメモリ24よりRAM25に読み出し(このデータをDATA3200と呼ぶ;ステップS3208)、DATA3200のうち完全消去用セクタ管理テーブル47に属するセクタ(A6LBAおよびA6LBAsub)のみ0-fillデータで埋める(ステップS3209)。これにより、無効セクタデータのみがDATA3200から消去される。なお、0-fillデータ以外の任意のデータで、完全消去用セクタ管理テーブル47に属するセクタ(A6LBAおよびA6LBAsub)を埋めるようにしてもよい。
SSDC26は、クラスタアドレスA6CLを完全消去用クラスタ管理テーブル46に追加し(ステップS3210)、前述したクラスタ単位完全消去処理を行うことで、完全消去セクタA6LBAおよびA6LBAsubを含むクラスタA6CLのデータが完全消去される(ステップS3211)。SSDC26は、RAM25に記憶しているDATA3200をNANDメモリ24に書き込んで、管理テーブルを書き換える(ステップS3212〜ステップS3213)。これにより、クラスタA6CLのうち、有効なデータが保持されることになる。具体的には、クラスタアドレスA6CLおよびDATA3200の書き込み先の物理アドレスをクラスタテーブル53に追加し(ステップS3212)、書き込み先の物理アドレスを含むブロックをアクティブブロックテーブル51に登録し、書き込み先の物理アドレスを含むブロックをフリーブロックテーブル50から削除する(ステップS3213)。
SSDC26は、テーブル47からクラスタA6CLに属するLBAを検索し、該当行全てにNULLを記入する(ステップS3214)。これは、同一クラスタについて余分な消去を行うのを防ぐためである。SSDC26は、完全消去用セクタ管理テーブル47の全行の処理が完了すると(ステップS3215)、完全消去用セクタ管理テーブル47をクリアする(ステップS3216)。SSDC26は、データ無効化処理と同様に、完全消去処理によってもフリーブロックを確保することができる。
前述のように、削除処理Aの実体処理(図33)および削除処理Bの実体処理(図34)は種々の条件に従って行われる。削除処理Bの実体処理は、バックグラウンドで適宜行うことも可能であるが、削除済みユーザデータのセキュリティ上の観点で、ホスト3からの求めに応じて削除処理Bの実体処理を強制的に行うようにすることが望ましい。たとえば、図41に示すように、ACS−2のData Set Management Commandにおいて、入力パラメータであるFeatureのビット0が0でビット1が1である(bit1:0=2)コマンド(削除処理B実行コマンド)をSSD2がホスト3から受信した場合は、SSDC26は削除処理Bの実体処理を開始し、完了したときコマンドの完了通知をホスト3に送信するようにしてよい。
あるいは、削除処理B実行コマンドを受信したら削除処理Bの実体処理を開始してコマンドの完了通知をホスト3に送信し、バックグラウンドで削除処理Bの実体処理を行うようにしてもよい(オフライン処理)。その場合は、ホスト3は削除処理Bの実体処理の進行状況を把握できることが望ましい。例えば、ACS−2の25h READ LOG DMA EXT、B0h/D0h SMART READ DATA、Boh/D5h SMART READ LOGなどのコマンドをホスト3がSSD2に送信することで、削除処理Bの実体処理の進捗状況(完了度(%)など)を含むデータをSSDC26がホスト3に送信するようにしてもよい。もちろん、削除処理Bの実体処理開始コマンドの割り当ては他のパラメータに従って行ってもよいし、ベンダー独自のコマンドなど他のコマンドを割り当ててもよい。
以上のようにして、図42に示すように、削除処理Bを通じて、削除処理Bの対象となるLBA領域のデータの実体そのものが消去される。消去されるのは、当該LBA領域が論物変換テーブルで対応している有効なデータだけでなく(図42のA)、当該LBA領域が過去に論物変換テーブルで対応していてデータの実体がまだ残っているアクティブブロック中の無効なデータ(図42のB)や、当該LBA領域が過去に論物変換テーブルで対応していてデータの実体はまだ残っているフリーブロック中の無効なデータ(図42のC)も削除される。削除処理の対象となるLBA領域に属さないLBA領域の有効データについては、他ブロックにコピーされて保護される。
図9に示したEレベルの分布の形状から消去前のデータを解析されることを防止する観点において、本実施形態で行われるブロック消去処理は、前述した消去ベリファイ(図43)やソフトプログラム(図44)を行うことによって、Eレベル状態の閾値分布が狭くなるようにすることが望ましい。ソフトプログラムとは、ブロック消去後に読み出しを行い、Vspよりも閾値が小さいセルに対して若干の書き込みを行うことにより、Eレベル分布の下方の裾広がりを抑制する動作のことである。
解析困難度をさらに向上させるという観点では、図45に示すように、消去を行い、いったんEレベルより高い閾値に書き込みを行い、再度消去を行うようにすることが望ましく、さらにこの処理を複数回繰り返すようにしてもよい。ただし、難読性が向上する反面、速度性能が低下する。
また、図46に示すように、消去を行い、いったんEレベルより高い閾値に書き込みを行い、その後は消去を行わないようにしてもよい。
難読性や速度性能をユーザが自由にカスタマイズできるようにするという観点では、上書きと消去と上書きおよび消去との何れを実行するか、上書き回数、消去回数、上書きおよび消去の繰り返し回数、消去ベリファイやソフトプログラムの有無は、削除処理Bのコマンド内で指定できることが望ましい。たとえば、ACS−2のData Set Management Commandにおいて、入力パラメータであるLBAビットをそれらの設定用に割り当ててもよい。
このように第1の実施形態によれば、SSD2は、ホスト装置にとって無効なデータであって、NANDメモリで消去されずに保持されているデータである無効データの論物変換情報を無効データログによって管理するようにしているので、ホストがデータ消去を明示的に指定するコマンドを発行すれば、このコマンドで指定されたデータが消去される。これにより、ホストが指定したデータの難読性を向上させることができ、セキュリティ強度が向上する。また、ACS-2に規定されているSecurity Erase Unitコマンドなどを使用して全ブロックまたは全フリーブロックを一括消去する場合に比べて一度に消去する消去ブロック数を低減させることができるため、ブロックの消去回数を低減させることができSSDの信頼性悪化を抑制することができるとともに、データ消去時の処理時間を減らすことが可能になる。
(第2の実施形態)
第2の実施の形態では、削除処理Bを行うとき、ブロック消去を行うのではなく、図7に示すように、消去状態を示す閾値電圧分布Eよりも高いベリファイ電圧をブロック全体に印加することで、ブロック全体を閾値電圧分布Aまたは閾値電圧分布Bまたは閾値電圧分布Cに書き込むことで、ブロック全体を上書きしてデータを破壊するようにしてもよい。この上書き破壊の際の閾値電圧分布としては、図47に示すように、最も高い閾値電圧分布CまたはCレベルよりも高い閾値電圧分布を選択した方が、より難読性を向上させることが可能である。
また、上書き破壊は、ブロック全体ではなく、削除処理Bの対象データを含むページに対してのみ行うようにしてもよい。また、効果は低くなるが、上書き破壊するデータとしてCレベルよりも低い閾値電圧分布を選択してもよく、例えば、図48に示すように、上書き破壊データとしてBレベルを採用し、EレベルおよびAレベルのデータに対してはBレベルのデータを書き込み、BレベルおよびCレベルのデータに対しては書き込みを行わないようにして難読性を高めてもよい。
第2の実施形態では、ブロック消去ではなく上書き破壊によって削除処理Bを行うようにしているので、ブロック消去回数が削減され、SSDの長寿命化に寄与する。
(第3の実施形態)
OS16上において、各ファイルのプロパティの属性に、オプションとして「保護データ」という項目をつけるようにしてもよい。この「保護データ」という項目にチェックが入っているファイルを削除した場合は、削除処理B用のトリムコマンドが送信され、ここにチェックが入っていないファイルを削除した場合は削除処理A用のトリムコマンドが送信される。OS16のファイルなどユーザ独自のデータでないファイルは削除処理Bを行っても、SSD2の性能と書き込み効率が犠牲になるだけで利点が少ないので、この第3の実施形態の処理を行うことで、削除処理Bの対象ファイルを限定することができる。また、ファイルを右クリックした際に表示されるポップアップメニューに、「削除」の他に「安全な削除」のメニューを追加し、「削除」を選んだ場合は通常のデータ無効化による削除、「安全な削除」を選んだ場合は、データ消去を伴うようにOS16を設定するようにしてもよい。
また、ホストから、安全な削除を指定されたにも関わらずファイルを消去できなかった場合は、Read LogやSMART READ DATAやREAD SMART LOGにより、削除できなかったLBAのリスト、削除できなかったエラー回数などをSSD2がホストに送信し、ユーザが削除できなかったLBAを管理可能なようにしてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 コンピュータシステム、2 SSD、3 ホスト、24 NAND 型フラッシュメモリ、25 RAM、40 削除通知バッファ、41 削除通知コマンドバッファ、42 データ無効化用トラック管理テーブル、43 データ無効化用クラスタ管理テーブル、44 データ無効化用セクタ管理テーブル、45 完全消去用トラック管理テーブル、46 完全消去用クラスタ管理テーブル、47 完全消去用セクタ管理テーブル、60 無効データログ、61 トラック管理無効データログ、62 クラスタ管理無効データログ、80 整理対象リスト、100 消去対象一時リスト。

Claims (16)

  1. ホスト装置の外部記憶装置として機能する不揮発性記憶装置であって、
    リード及びライト可能な不揮発性メモリと、
    ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理するための論物変換テーブルと、
    ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する無効データ管理ログと、
    ホスト装置から無効な論理アドレスのデータを完全削除する命令を受信すると、前記受信した命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換える制御部と、
    を備えることを特徴とする不揮発性記憶装置。
  2. 前記無効データ管理ログは、使用中ブロックであるアクティブブロック中の無効データ、未使用ブロックであるフリーブロック中の無効データを含む無効データを管理することを特徴とする請求項1に記載の不揮発性記憶装置。
  3. 前記不揮発性メモリは、データが消去された消去状態を示す閾値電圧分布と、前記消去状態を示す閾値電圧分布よりも高い閾値電圧分布であってデータが書き込まれた書き込み状態を示す1以上の閾値電圧分布とにより1以上の数のビットのデータを記憶するメモリセルを複数配列してなり、物理アドレスを指定することによりリードおよびライトが行われ、
    前記制御部は、前記消去動作において、前記消去状態を示す閾値電圧分布に対応する第1の閾値電圧に書き換えることと、前記消去状態を示す閾値電圧分布よりも高い第2の閾値電圧に書き換えることとを少なくとも1回行うことを特徴とする請求項1または2に記載の不揮発性記憶装置。
  4. 前記不揮発性メモリは、データが消去された消去状態を示す閾値電圧分布と、前記消去状態を示す閾値電圧分布よりも高い閾値電圧分布であってデータが書き込まれた書き込み状態を示す1以上の閾値電圧分布とにより1以上の数のビットのデータを記憶するメモリセルを複数配列してなり、物理アドレスを指定することによりリードおよびライトが行われ、
    前記制御部は、前記上書き動作において、前記消去状態を示す閾値電圧分布よりも高い第3の閾値電圧に書き換えることを特徴とする請求項1または2に記載の不揮発性記憶装置。
  5. 前記第3の閾値電圧は、メモリセルの書き込み状態のうち最も高い閾値電圧分布に対応することを特徴とする請求項4に記載の不揮発性記憶装置。
  6. 不揮発性メモリは、データ消去の単位である物理ブロックを複数個有し、物理ブロックより小さな単位で管理される物理アドレスを指定することによりリードおよびライトが行われ、
    前記制御部は、前記消去動作において、ホストから受信した命令に含まれる論理アドレスに対応する物理アドレスが属する物理ブロック中で、前記物理アドレス以外のデータを前記不揮発性メモリでバックアップした後、前記物理ブロックを消去することを特徴とする請求項1または2に記載の不揮発性記憶装置。
  7. ホスト装置と、
    リード及びライト可能な不揮発性メモリと、ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理するための論物変換テーブルと、ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する無効データ管理ログとを有する外部記憶装置と、
    を備える情報処理装置の制御方法において、
    ホスト装置は、無効な論理アドレスのデータを完全削除する命令を前記外部記憶装置に送信することにより、前記命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換える処理を前記外部記憶装置に実行させることを特徴とする情報処理装置の制御方法。
  8. 前記ホストは、前記命令に、上書きと消去と上書きおよび消去との何れを実行するかを指定可能であることを特徴とする請求項7に記載の情報処理装置の制御方法。
  9. 前記命令に、上書き回数、消去回数、上書きおよび消去の繰り返し回数を指定可能であることを特徴とする請求項8に記載の情報処理装置の制御方法。
  10. 前記命令に、消去ベリファイの有無、ソフトプログラムの有無を指定可能であることを特徴とする請求項8に記載の情報処理装置の制御方法。
  11. ホスト装置と、リード及びライト可能な不揮発性メモリを備える情報処理装置において、
    情報処理装置は、
    無効な論理アドレスのデータを完全削除する命令を前記不揮発性メモリに送信する第1の制御部を備え、
    前記不揮発性メモリは、
    ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理するための論物変換テーブルと、
    ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する無効データ管理ログと、
    前記命令をホスト装置から受信すると、前記受信した命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換える第2の制御部と、
    を備えることを特徴とする情報処理装置。
  12. 前記無効データ管理ログは、使用中ブロックであるアクティブブロック中の無効データ、未使用ブロックであるフリーブロック中の無効データを含む無効データを管理することを特徴とする請求項11に記載の情報処理装置。
  13. 前記不揮発性メモリは、データが消去された消去状態を示す閾値電圧分布と、前記消去状態を示す閾値電圧分布よりも高い閾値電圧分布であってデータが書き込まれた書き込み状態を示す1以上の閾値電圧分布とにより1以上の数のビットのデータを記憶するメモリセルを複数配列してなり、物理アドレスを指定することによりリードおよびライトが行われ、
    前記第2の制御部は、前記消去動作において、前記消去状態を示す閾値電圧分布に対応する第1の閾値電圧に書き換えることと、前記消去状態を示す閾値電圧分布よりも高い第2の閾値電圧に書き換えることとを少なくとも1回行うことを特徴とする請求項11または12に記載の情報処理装置。
  14. 前記不揮発性メモリは、データが消去された消去状態を示す閾値電圧分布と、前記消去状態を示す閾値電圧分布よりも高い閾値電圧分布であってデータが書き込まれた書き込み状態を示す1以上の閾値電圧分布とにより1以上の数のビットのデータを記憶するメモリセルを複数配列してなり、物理アドレスを指定することによりリードおよびライトが行われ、
    前記第2の制御部は、前記上書き動作において、前記消去状態を示す閾値電圧分布よりも高い第3の閾値電圧に書き換えることを特徴とする請求項11または12に記載の情報処理装置。
  15. 前記第3の閾値電圧は、メモリセルの書き込み状態のうち最も高い閾値電圧分布に対応することを特徴とする請求項14に記載の情報処理装置。
  16. 不揮発性メモリは、データ消去の単位である物理ブロックを複数個有し、物理ブロックより小さな単位で管理される物理アドレスを指定することによりリードおよびライトが行われ、
    前記第2の制御部は、前記消去動作において、ホストから受信した命令に含まれる論理アドレスに対応する物理アドレスが属する物理ブロック中で、前記物理アドレス以外のデータを前記不揮発性メモリでバックアップした後、前記物理ブロックを消去することを特徴とする請求項11または12に記載の情報処理装置。
JP2012060740A 2012-03-16 2012-03-16 不揮発性記憶装置及び不揮発性メモリの制御方法 Active JP5659178B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012060740A JP5659178B2 (ja) 2012-03-16 2012-03-16 不揮発性記憶装置及び不揮発性メモリの制御方法
US13/789,149 US9367444B2 (en) 2012-03-16 2013-03-07 Non-volatile memory device, control method for information processing device, and information processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012060740A JP5659178B2 (ja) 2012-03-16 2012-03-16 不揮発性記憶装置及び不揮発性メモリの制御方法

Publications (2)

Publication Number Publication Date
JP2013196164A true JP2013196164A (ja) 2013-09-30
JP5659178B2 JP5659178B2 (ja) 2015-01-28

Family

ID=49395081

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012060740A Active JP5659178B2 (ja) 2012-03-16 2012-03-16 不揮発性記憶装置及び不揮発性メモリの制御方法

Country Status (2)

Country Link
US (1) US9367444B2 (ja)
JP (1) JP5659178B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015146548A (ja) * 2014-02-04 2015-08-13 日本電気株式会社 情報処理装置及び情報処理方法、情報処理システム、並びにコンピュータ・プログラム
JP2015191336A (ja) * 2014-03-27 2015-11-02 キヤノン株式会社 メモリ制御装置、情報処理装置とその制御方法、及びプログラム
JP2015219602A (ja) * 2014-05-14 2015-12-07 キヤノン株式会社 情報処理装置、情報処理方法及びプログラム
CN112162692A (zh) * 2020-09-02 2021-01-01 Oppo(重庆)智能科技有限公司 一种数据处理方法及终端、存储介质
JP7475989B2 (ja) 2020-06-26 2024-04-30 キオクシア株式会社 メモリシステムおよび制御方法

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5586718B2 (ja) 2012-06-19 2014-09-10 株式会社東芝 制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置
US9274958B1 (en) * 2013-02-01 2016-03-01 Parallels IP Holdings GmbH System and method for cache management in systems that interface to cloud storage
JP2015204073A (ja) * 2014-04-16 2015-11-16 キヤノン株式会社 情報処理装置、情報処理端末、情報処理方法およびプログラム
US9870328B2 (en) 2014-11-14 2018-01-16 Cavium, Inc. Managing buffered communication between cores
CN107092560B (zh) * 2016-02-17 2020-06-16 建兴储存科技(广州)有限公司 固态储存装置及运用于其中的快闪转换层对应表重建方法
US9779028B1 (en) * 2016-04-01 2017-10-03 Cavium, Inc. Managing translation invalidation
KR102609177B1 (ko) 2016-07-04 2023-12-06 삼성전자주식회사 불휘발성 메모리 시스템의 동작 방법 및 불휘발성 메모리 장치의 동작 방법
US9817593B1 (en) * 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
KR102545166B1 (ko) 2016-07-26 2023-06-19 삼성전자주식회사 파일을 안전하게 삭제하는 호스트, 스토리지 시스템 및 호스트의 동작방법
JP2018142240A (ja) * 2017-02-28 2018-09-13 東芝メモリ株式会社 メモリシステム
US10522229B2 (en) 2017-08-30 2019-12-31 Micron Technology, Inc. Secure erase for data corruption
KR102271502B1 (ko) 2017-10-25 2021-07-01 삼성전자주식회사 메모리 장치 및 그 제어 방법
CN111108488B (zh) 2017-11-07 2022-05-10 华为技术有限公司 内存块回收方法和装置
US11175850B2 (en) 2019-01-03 2021-11-16 Toshiba Memory Corporation Selective erasure of data in a SSD
US11899958B2 (en) 2019-12-09 2024-02-13 Korea University Research And Business Foundation Method for discarding personal information in NAND flash memory
KR102445057B1 (ko) * 2019-12-09 2022-09-21 고려대학교 산학협력단 낸드 플래시 메모리에서 개인 정보 폐기 방법
CN111210858B (zh) * 2019-12-24 2021-11-09 山东大学 一种缓解相变存储器写干扰的方法及***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07219720A (ja) * 1993-10-01 1995-08-18 Hitachi Maxell Ltd 半導体メモリ装置ならびにその制御方法
JP2007280330A (ja) * 2006-04-12 2007-10-25 Matsushita Electric Ind Co Ltd 不揮発性記憶装置および不揮発性記憶システム
JP2008102819A (ja) * 2006-10-20 2008-05-01 Hitachi Ltd 記憶装置及び記憶方法
JP2008198208A (ja) * 2007-02-13 2008-08-28 Samsung Electronics Co Ltd ホストデータ処理装置の動作方法、ホストデータ処理装置並びにデータ格納装置
JP2010204703A (ja) * 2009-02-27 2010-09-16 Hitachi Ltd 計算機システム及びデータ消去方法
JP2011192239A (ja) * 2010-03-17 2011-09-29 Sony Corp 記憶装置および記憶システム

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003058417A (ja) 2001-08-21 2003-02-28 Matsushita Electric Ind Co Ltd 記憶装置
JP2004240660A (ja) 2003-02-05 2004-08-26 Matsushita Electric Ind Co Ltd 不揮発性メモリ装置の制御方法
JP2004280752A (ja) * 2003-03-19 2004-10-07 Sony Corp データ記憶装置、およびデータ記憶装置における管理情報更新方法、並びにコンピュータ・プログラム
JP2005092678A (ja) 2003-09-19 2005-04-07 Matsushita Electric Ind Co Ltd 半導体メモリカード及び不揮発性メモリのデータ消去処理方法
JP2006039966A (ja) 2004-07-27 2006-02-09 Toshiba Corp メモリカードおよびメモリカードに搭載されるカード用コントローラ並びにメモリカードの処理装置
US8122193B2 (en) * 2004-12-21 2012-02-21 Samsung Electronics Co., Ltd. Storage device and user device including the same
JP2006285600A (ja) * 2005-03-31 2006-10-19 Tokyo Electron Device Ltd 記憶装置、メモリ管理装置、メモリ管理方法及びプログラム
US7783845B2 (en) 2005-11-14 2010-08-24 Sandisk Corporation Structures for the management of erase operations in non-volatile memories
US8307148B2 (en) * 2006-06-23 2012-11-06 Microsoft Corporation Flash management techniques
KR20090102789A (ko) * 2006-12-06 2009-09-30 퓨전 멀티시스템즈, 인크.(디비에이 퓨전-아이오) 프로그레시브 raid를 이용한 데이터 저장 장치, 시스템 및 방법
US9207876B2 (en) 2007-04-19 2015-12-08 Microsoft Technology Licensing, Llc Remove-on-delete technologies for solid state drive optimization
JP2009288503A (ja) 2008-05-29 2009-12-10 Kyocera Mita Corp 画像形成装置
US8843691B2 (en) * 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
JP5341584B2 (ja) 2009-03-17 2013-11-13 株式会社東芝 コントローラ、及びメモリシステム
US8230159B2 (en) 2009-03-27 2012-07-24 Lsi Corporation System, method, and computer program product for sending logical block address de-allocation status information
US8402069B2 (en) 2009-05-04 2013-03-19 Microsoft Corporation Use of delete notifications by file systems and applications to release storage space
JP5174743B2 (ja) 2009-05-21 2013-04-03 日本発條株式会社 ヘッドサスペンション
JP5333770B2 (ja) 2009-09-16 2013-11-06 セイコーエプソン株式会社 電子時計
JP2011128998A (ja) 2009-12-18 2011-06-30 Toshiba Corp 半導体記憶装置
JP5612508B2 (ja) * 2010-03-25 2014-10-22 パナソニック株式会社 不揮発性メモリコントローラ及び不揮発性記憶装置
US8381018B2 (en) * 2010-05-21 2013-02-19 Mediatek Inc. Method for data recovery for flash devices
JP2012123499A (ja) 2010-12-07 2012-06-28 Toshiba Corp メモリシステム
JP5405513B2 (ja) 2011-03-22 2014-02-05 株式会社東芝 メモリシステム、不揮発性記憶装置、不揮発性記憶装置の制御方法、及びプログラム
JP2012203443A (ja) 2011-03-23 2012-10-22 Toshiba Corp メモリシステムおよびメモリシステムの制御方法
JP5581256B2 (ja) 2011-03-28 2014-08-27 株式会社東芝 メモリシステム、コントローラ、およびメモリシステムの制御方法
JP2012221251A (ja) 2011-04-08 2012-11-12 Toshiba Corp メモリシステムの制御方法、情報処理装置、及びプログラム
EP2631916B1 (en) 2011-09-06 2015-08-26 Huawei Technologies Co., Ltd. Data deletion method and apparatus

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07219720A (ja) * 1993-10-01 1995-08-18 Hitachi Maxell Ltd 半導体メモリ装置ならびにその制御方法
JP2007280330A (ja) * 2006-04-12 2007-10-25 Matsushita Electric Ind Co Ltd 不揮発性記憶装置および不揮発性記憶システム
JP2008102819A (ja) * 2006-10-20 2008-05-01 Hitachi Ltd 記憶装置及び記憶方法
JP2008198208A (ja) * 2007-02-13 2008-08-28 Samsung Electronics Co Ltd ホストデータ処理装置の動作方法、ホストデータ処理装置並びにデータ格納装置
JP2010204703A (ja) * 2009-02-27 2010-09-16 Hitachi Ltd 計算機システム及びデータ消去方法
JP2011192239A (ja) * 2010-03-17 2011-09-29 Sony Corp 記憶装置および記憶システム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015146548A (ja) * 2014-02-04 2015-08-13 日本電気株式会社 情報処理装置及び情報処理方法、情報処理システム、並びにコンピュータ・プログラム
JP2015191336A (ja) * 2014-03-27 2015-11-02 キヤノン株式会社 メモリ制御装置、情報処理装置とその制御方法、及びプログラム
JP2015219602A (ja) * 2014-05-14 2015-12-07 キヤノン株式会社 情報処理装置、情報処理方法及びプログラム
JP7475989B2 (ja) 2020-06-26 2024-04-30 キオクシア株式会社 メモリシステムおよび制御方法
CN112162692A (zh) * 2020-09-02 2021-01-01 Oppo(重庆)智能科技有限公司 一种数据处理方法及终端、存储介质
CN112162692B (zh) * 2020-09-02 2023-03-21 Oppo(重庆)智能科技有限公司 一种数据处理方法及终端、存储介质

Also Published As

Publication number Publication date
US20140006689A1 (en) 2014-01-02
JP5659178B2 (ja) 2015-01-28
US9367444B2 (en) 2016-06-14

Similar Documents

Publication Publication Date Title
JP5659178B2 (ja) 不揮発性記憶装置及び不揮発性メモリの制御方法
US9817717B2 (en) Stripe reconstituting method performed in storage system, method of performing garbage collection by using the stripe reconstituting method, and storage system performing the stripe reconstituting method
CN109117084B (zh) 将逻辑储存块动态地重新调整尺寸
US8738846B2 (en) File system-aware solid-state storage management system
US9158700B2 (en) Storing cached data in over-provisioned memory in response to power loss
Kang et al. A superblock-based flash translation layer for NAND flash memory
US8862810B2 (en) Solid state device write operation management system
US9043517B1 (en) Multipass programming in buffers implemented in non-volatile data storage systems
JP5405513B2 (ja) メモリシステム、不揮発性記憶装置、不揮発性記憶装置の制御方法、及びプログラム
US8909986B2 (en) Data storing method for solid state drive to preserve data integrity after power failure
US9619181B2 (en) Information processing device and method for controlling replacement of semiconductor storage device
US9524105B2 (en) Process and apparatus to reduce declared capacity of a storage device by altering an encoding format
US20170177469A1 (en) Storage system that performs host-initiated garbage collection
US10776268B2 (en) Priority addresses for storage cache management
JP6696280B2 (ja) 情報処理装置、raid制御方法、およびraid制御プログラム
US11042307B1 (en) System and method for facilitating improved utilization of NAND flash based on page-wise operation
US20160062664A1 (en) Triggering, at a Host System, a Process to Reduce Declared Capacity of a Storage Device
Hepisuthar Comparative analysis study on SSD, HDD, and SSHD
Choi et al. Exploiting data longevity for enhancing the lifetime of flash-based storage class memory
US20160062665A1 (en) Triggering a Process to Reduce Declared Capacity of a Storage Device in a Multi-Storage-Device Storage System
US9182924B2 (en) Modifying logical addressing at a requestor level
JP2015053075A (ja) メモリシステム、情報処理装置および記憶装置
JP5649709B2 (ja) メモリシステム、不揮発性記憶装置、不揮発性記憶装置の制御方法およびプログラム
US9552166B2 (en) Process and apparatus to reduce declared capacity of a storage device by deleting data
US9582202B2 (en) Process and apparatus to reduce declared capacity of a storage device by moving data

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140701

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140829

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141104

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141201

R151 Written notification of patent or utility model registration

Ref document number: 5659178

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350