JP2011508349A - プロセッサを内部メモリに接続するクロスバー・スイッチを含むフラッシュメモリ用ストレージコントローラ - Google Patents

プロセッサを内部メモリに接続するクロスバー・スイッチを含むフラッシュメモリ用ストレージコントローラ Download PDF

Info

Publication number
JP2011508349A
JP2011508349A JP2010540863A JP2010540863A JP2011508349A JP 2011508349 A JP2011508349 A JP 2011508349A JP 2010540863 A JP2010540863 A JP 2010540863A JP 2010540863 A JP2010540863 A JP 2010540863A JP 2011508349 A JP2011508349 A JP 2011508349A
Authority
JP
Japan
Prior art keywords
flash
processor
memory
hemi
data
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
JP2010540863A
Other languages
English (en)
Other versions
JP5272019B2 (ja
Inventor
プリンス、ダグラス
オルブリッチ、アーロン
Original Assignee
プライアント テクノロジー インコーポレイテッド
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 プライアント テクノロジー インコーポレイテッド filed Critical プライアント テクノロジー インコーポレイテッド
Publication of JP2011508349A publication Critical patent/JP2011508349A/ja
Application granted granted Critical
Publication of JP5272019B2 publication Critical patent/JP5272019B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1657Access to multiple memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • G11C7/1063Control signal output circuits, e.g. status or busy flags, feedback command signals
    • 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/7201Logical to physical mapping or translation of blocks or pages
    • 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/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • 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

Abstract

【課題】フラッシュメモリの様々な技術的問題を解決する。
【解決手段】フラッシュメモリ・ストレージ・モジュールが用いるために作られたコントローラであって、複数の内部プロセッサと複数の内部メモリを含む様々な内部リソースとを接続するように設計されたクロスバー・スイッチを含む、該コントローラが提供される。メモリには、プロセッサのためのワークリストが含まれる。一実施形態では、複数のプロセッサは、クロスバー・スイッチを用いて別のプロセッサと通信し、別のプロセッサのワークリストにタスクを置く。
【選択図】図22

Description

関連出願の相互参照
本願は、米国仮特許出願第61/017,123号及び米国特許出願第12/082,207号に基づく優先権を主張し、これらの開示は、引用を以て本明細書の一部となす。
本願はまた、米国特許出願第12/082,202号、米国特許出願第12/082,205号、米国特許出願第12/082,221号、米国特許出願第12/082,220号、米国特許出願第12/082,206号、米国特許出願第12/082,204号、米国特許出願第12/082,223号、米国特許出願第12/082,222号、米国特許出願第12/082,203号にも関連し、これらの開示は、引用を以て本明細書の一部となす。
技術分野
本発明は、データストレージの分野に関し、より詳細には、ソリッドステート不揮発性メモリデバイスを用いたデータストレージ・アプリケーションに関する。この技術は、大規模データセンタに配備されるストレージ・プラットフォーム及びマルチユーザ・コンピューティングを伴う高性能エンタープライズシステムと特定の関係があるが、より小規模のエンタープライズ・アプリケーションにも、エンドユーザのマス・ストレージにも適用可能である。
現在のエンタープライズレベルのマス・ストレージは、典型的には3.5インチ・フォーム・ファクタによって特徴付けられるハードドライブ、15,000rpmスピンドル・モータ及び73GBないし450GBのストレージ容量に依存している。機械設計は、8つの表面を横切って移動する1つのアクチュエータ及び8つの読出し/書込みヘッドを備えた伝統的なハードドライブと同じである。ヘッド/メディア技術の制約は、読出し/書込み容量を一度に唯1つのアクティブ・ヘッドに制限する。ドライブに送信される全てのデータ要求は連続して処理されるが、各動作間には、アクチュエータが読出し/書込みヘッドを所要の位置に動かし、メディアが回転して読出し/書込みヘッドの下にデータを置くので、長い遅延時間がある。
アクチュエータの待ち要求のキューの結果として、システムは、ユーザが我慢できなくなる時点まで増加する応答時間を確かめる。マス・ストレージ・システムは、各ドライブへの未処理の要求の数を制限することによってこの問題に適合している。これは、各ドライブの有効かつ使用可能な容量を、最大450GB容量が利用可能であるとしても、1ドライブ当たり12GBにまで低下させる効果を有する。容量の低下は、今度は、所要床面積、冷却及び出力の問題を悪化させ、これらの問題は全て、エンタープライズレベルのマス・ストレージ・システムにとって極めて厄介なものになった。
これらの問題を取り除くために、業界は2.5インチのドライブへと向かっている。しかし、フォーム・ファクタが小さくなればなるほど同じ空間内により多くのドライブを収容できるとはいえ、ハードドライブ動作のシリアル特性は、より小さなフォーム・ファクタ・ドライブですら深刻な所要床面積、冷却及び出力の問題を呈することを意味する。
フラッシュメモリは、エンタープライズのマス・ストレージ環境で魅力的である。というのも、フラッシュメモリ・システムは、ハードドライブと関連付けられている機械的な遅延がなく、それによって、より高い性能及びそれ相応の低いコスト、出力、加熱及び所要床面積の使用を可能にするからである。それにも拘わらず、フラッシュメモリは、特定の技術的制約のせいで、昔からそのような環境において用いられてはいなかった。
第1の技術的問題は書込み速度であり、それはメカニカル・ハードドライブの書込み速度の10分の1の遅さであり得る。これは、データは書込み前に長い消去サイクルなしにはNANDフラッシュデバイス上で上書きされることができないという事実に起因する。消去サイクルは書込み性能に直接影響するので、大部分のフラッシュ構造は、書込みデータを新しい位置に移動させ、消去を後になるまで遅延させる。ビジー・システムでは、遅延された消去サイクルが蓄積し、ついには、プロセッサが空きフラッシュ・ページを使い果たして新しいフラッシュ・ページを生成するために停止しなければならなくなり、それによってシステム性能に大きな影響を及ぼすことがある。
第2の技術的問題は、シングル・レベル・セル(「SLC」)デバイスには100,000消去サイクル、マルチ・レベル・セル(「MLC」)デバイスには10,000サイクルの各フラッシュメモリ・ページの指定限界である。これらは、結果としてメモリの特定の非常によく使われる領域が大量に消去されることになるような「ホットスポット」を生じ得る予測不可能なデータ・ストリームで動作するデータセンタに関する特定の問題を課す。
第3の問題はデータ損失であり、これは、読出しディスターブまたはプログラム・ディスターブを含むフラッシュメモリに影響を及ぼす様々な要因によって起こり得ることであり、これらのディスターブは、ディスターブ・セルに隣接するメモリセルの読出しまたは書込みによって生じるデータビットの損失につながる。フラッシュメモリセルの状態はまた、時間の経過の結果として予測不可能に変化し得る。
米国仮特許出願第60/990,601号明細書 米国非仮特許出願第12/323,219号明細書(米国特許出願公開第20090135245号公報) 米国特許出願第11/624,209号明細書 米国仮特許出願第61/052,180号明細書 米国特許出願第11/533,304号明細書 米国特許第5,604,531号明細書
これらの技術的問題は、高容量高性能ストレージ・アプリケーションにおけるフラッシュメモリの使用に深刻な問題を生じさせる。いずれの場合にも、技術的解決策が存在するが、そのような解決策は、一般的には1つのプロセッサを含む標準フラッシュメモリ・コントローラにおいて利用可能な処理能力にかなりの負担をかける。そのような負担は、これらの環境においてこれらの技術的問題を克服することを困難にする。
一実施形態では、記載されているフラッシュメモリの性能制限に対する解決策には、コントローラ・デザインにおいて複数のマイクロプロセッサを用い、それによって、各パイプラインが1つのトランザクションの一部を処理することができるような複数のパラレルな独立したパイプラインを生成することが含まれる。このデザインは、ホスト及びフラッシュ・インタフェースの使用を最大にし、個々のトランザクションが多数の小部分に分割されることを可能にし、小部分は、性能を向上させるために並べ替えられてパラレル処理されることができる。アーキテクチャは、複数のプロセッサが、高コストで非効率的なインタラプトを用いることなく機能を実行することができるように設計される。
パラレル・パイプラインを用いることで、コントローラは、フラッシュメモリの使用につきものの書込みレイテンシーを効率的に隠すことができる。加えて、複数の独立したプロセッサを用いることで、上記した耐久性及びエラーの問題に対する解決策がもたらすオーバーヘッドを処理するための十分な処理能力が提供される。ホストが開始するトランザクションを多数の独立したフラッシュ読出し及び書込みに分けることによって、本明細書に記載のコントローラ・アーキテクチャは、従来のコントローラ・デザインでは不可能であった高水準の性能を可能にする。
SSD(「ソリッドステート・ドライブ」)コントローラ及びフラッシュメモリを含むシステムを示す。 ホストコマンドをフラッシュ読出し及び書込みに翻訳するために用いられるデータ構造の階層を示す。 図1のシステムをより詳細に示す。 ホスト読出し動作を概略的に示す。 ホスト書込み動作を概略的に示す。 フラッシュメモリの構成を示す。 フラッシュメモリ・グループとフラッシュ・ポートの関係を示す。 フラッシュメモリデバイスへの入出力信号を示す。 フラッシュHEMiブロックへの入出力信号を示す。 フラッシュ・ポートとフラッシュメモリ・バンク間の接続を示す。 1本のピン上へのCS及びRB信号の多重化を示す。 フラッシュメモリ階層を示す。 SPageセクタの構成を示す。 フラッシュ・ページの構成を示す。 スーパーブロック内のデータの構成を示す。 データのストライプ構成を示す。 ホスト・ポートを通るデータフロー及び制御フローを示す。 ホスト・ポートを示す。 プリミティブ・マッチ・ロジックを示す。 コマンドパーサ・ブロックを示す。 コマンド配布ブロックを示す。 クロスバー・スイッチを介しての複数のHEMiと共有RAMデータ構造間の接続を示す。 RAMコントローラを示す。 共有RAMコントローラと共有RAMバンクの関係を示す。 DRAMチャネルを示す。 HEMiステージを示す。 フラッシュHEMi及びその密結合ロジック・ブロックを示す。 受信HEMi及び送信HEMi固有レジスタを示す。 フラッシュHEMi mRAMの内容を示す。 共有RAMからのデータブロックの転送を示す。 ECCロジックを示す。 データパスDRAMの内容を示す。 フォワード・テーブルを示す。 リバース・テーブルを示す。 スーパーブロック・メタデータ・テーブルを示す。 IOPデータバッファを示す。 CDB情報を示す。 IOPを示す。 転送要求を示す。 ページ要求を示す。 共有RAMブロックの内容を示す。 イニシエータ情報を示す。 SLCフラッシュ書込みタイミングを示す。 MLCフラッシュ書込みタイミングを示す。 ホストコマンドが受信されたときにホスト・ポートがたどるステップを示す。 ホストコマンドが受信されたときにホスト・ポートがたどるステップを示す。 CDBの処理の初期段階を示す。 CDBの処理の初期段階を示す。 特別な場合のCDB処理を示す。 CDB情報に基づいてIOP及び転送要求が作成される方法を示す。 CDB情報に基づいてIOP及び転送要求が作成される方法を示す。 CDB情報に基づいてIOP及び転送要求が作成される方法を示す。 CDB情報に基づいてIOP及び転送要求が作成される方法を示す。 フラッシュHEMiがページ要求を作成する方法を示す。 フラッシュHEMiがページ要求を作成する方法を示す。 フラッシュHEMi実行ループを示す。 フラッシュHEMi実行ループを示す。 ページ要求の読出しハンドラを示す。 ページ要求の読出しハンドラを示す。 フラッシュ読出し動作を詳細に示す。 フラッシュ読出し動作を詳細に示す。 ページ要求の書込みハンドラの実行を示す。 ページ要求の書込みハンドラの実行を示す。 ページ要求へのスーパーページの割り当てを示す。 完了したトランザクションのクリーンアップを示す。 ガベージ・コレクション・プロセスを示す。 パトロール機能プロセスを示す。 復元プロセスを示す。 復元プロセスを示す。 復元プロセスを示す。 復元プロセスを示す。
I.概要
A.システムの概要
好適実施形態では、本明細書に記載のシステムは、SAS(「シリアル・アッタチドSCSI」)、FC(「ファイバーチャネル」)及びFC−AL(これらは全て小型コンピュータシステム・インタフェース(「SCSI」)に基づく)、並びにシリアルATA(「SATA」)プロトコルを含む様々なエンタープライズレベルのマス・ストレージ・プロトコルで動作するように設計されている。これらのプロトコルは、当業者によく知られており、本明細書では詳しく説明しない。特定のプロトコルが呼び出される場合を除いて、本明細書に開示されているシステム及び方法は、用いられる特定のプロトコルに依存せず、それら全てを正確に作動させるように設計されている。さらに、これらのシステム及び方法は、エンタープライズレベルのアプリケーションのために設計されたプロトコル及びエンドユーザなどの他のアプリケーションのために設計されたプロトコルを含む、他の同様な、現在使用中であるかまたは未だ開発されていないプロトコルとの併用に適していることがある。
便宜上、本明細書において関連するプロトコルは、しばしば集合的に「SCSIプロトコル」と呼ばれるが、これは非SCSIプロトコルを含み、関連性のないSCSIプロトコルを含まないことを理解されたい。
本明細書に記載のシステムは、複数のフラッシュメモリチップからなるマス・ストレージ・モジュールを制御するための新規なアーキテクチャを含む。図1に、大まかな概要としてシステム全体が示されている。本明細書の他のブロック図と同様に、図1に示す構成要素は実際には概念的なものであり、機能ブロック間の相互関係の特性を示し、実際の物理回路レベルの実装を表すことを意図するものではない。
ホスト101及び102は、従来のホスト・デバイスであり、例えば、マス・ストレージ・リソースを用いる2つのサーバ、または1つのそのようなサーバのために働く2つのホスト・バス・アダプタである。特定のプロトコルでは、各ホストは複数のイニシエータをサポートし得る。SCSIベースのシステムでは、イニシエータは、データ転送のためのホスト側エンドポイントであり、別々の物理的デバイスまたはプロセスを構成し得る。
基板103(破線で表す)は、1若しくは複数のPCBを表す。基板103は、例えば、1つのPCB基板、またはマザー−ドーター形態で互いに接続された複数の基板で構成されることができる。好適実施形態では、基板103は、ホスト101及び102側から見て基板103が従来の回転ディスク・マス・ストレージ・デバイスを構成するように見えるように、設計される。これは、ホスト・ポート104及び105が、ホスト101及び102のために設計された従来のマス・ストレージ・インタフェースと物理的かつ論理的に区別できないように設計されることを必要とする。それゆえ、好適実施形態では、基板103の使用は、ホスト101または102の再設計を必要としない。
好適実施形態では、SSDコントローラ106は、基板103に取り付けられかつ200MHzで作動する1つの集積回路デバイスを表す。代替実施形態では、SSDコントローラ106は、本明細書に記載の発明の原理から逸脱することなく、2つ以上の集積回路デバイスで構成されることができる。クロック速度は、当然のことながら、インプリメント選択を代表するものであり、インプリメントによって異なる。
好適実施形態では、データパスDRAM107は、アイダホ州ボイジーのマイクロン・テクノロジー社(Micron Technology, Inc.)がMT47H16M16BC−5Eという商品名で販売しているクロック速度200MHzの64ビット幅の256MbyteのDDR SDRAMである。これは、2つの64ビット転送(1サイクル当たり)からなる、1サイクル当たり128ビットの実効データ転送速度を提供する。簡単にするために、本明細書ではこれを128ビットのインタフェースとして説明する。このデバイスは、全ての転送に関してECCを自動的にチェックする。より大きな総ストレージ容量を含む代替実施形態では、512MbyteDDR SDRAMであるマイクロンMT47H32M16CC−5Eに置き換えることができる。DRAM以外のメモリのタイプの使用を含めてデータパスDRAMに対する多くの異なる選択肢が利用可能であり、本明細書で特定されている特定の製品は、本明細書で開示されている発明に不可欠なものではないことを理解されたい。図1に示すように、データパスDRAM107は、SSDコントローラ106と通信するが、システム内の任意の他の構成要素とは直結していない。
フラッシュメモリ・モジュール108は、フラッシュメモリチップの数を表す。好適実施形態では、フラッシュメモリ・モジュール108は、192個の2ギガバイトのNANDフラッシュチップからなり、各フラッシュチップは40MHzで作動する。後述するように、この構造は、300ギガバイトのユーザ・データ容量を提供する。上記のシステムは、より大きいかまたはより小さい総容量で、2ギガバイトより多いかまたは少ない容量を有するフラッシュメモリチップ及び好適実施形態よりも高速または低速で作動するフラッシュメモリチップとともに作動することができることを理解されたい。さらには、フラッシュメモリ・モジュール108を、スタックされた複数の「ドーターボード」で構成することもできる。
フラッシュメモリ・モジュール108は、SSDコントローラ106と通信するが、システム内の他の構成要素とは関わりがない。
図1に示すように、SSDコントローラ106は中心の位置を占める。というのも、その理由は、SSDコントローラ106はシステム内の全ての他の構成要素と通信し、他の構成要素同士は通信しないからである。基板103の一部として示されている各構成要素の構造及び動作については後述する。
B.データ構造の概要
SSDコントローラ106は、ホストからのコマンドを受け取り、それらのコマンドをより小さなタスクに分けて使用する。より小さなタスクは、最終的にはフラッシュメモリ・モジュール108内の一連の読出し及び書込みとなる。図2は、このプロセスを概略的に示す。
SSDコントローラ106は、ホストが開始する読出しまたは書込みコマンドを受信するとき、「CDB情報」(例えばCDB情報201)として知られているデータ構造を生成し、CDB情報には、ホストからのコマンド・ディスクリプタ・ブロック(「CDB」)または他の対応するコマンド関連情報が含まれている。いくつかある情報の中で特に、CDB情報は、ロジック・ブロック・アドレス(「LBA」)において読み出されるかまたは書き込まれるアドレス範囲を指定する。
CDB情報に基づき、SSDコントローラ106は「入出力処理(Input-Output Process)」(「IOP」)(例えばIOP202)として知られているデータ構造を生成する。ほとんどの状況下で、1つのIOPが、ホストによって要求される全トランザクションを制御する。
各IOPは、「転送要求」として知られている最大7つのデータ構造(例えば転送要求203〜209)を呼び出すことができる。各転送要求は、IOPによって指定されるLBA範囲の一部を処理するように設計されている。
各転送要求は、「ページ要求」として知られている最大3つのデータ構造を呼び出すことができる(例えば、転送要求206によって呼び出されるページ要求210、211及び212。他の転送要求によって呼び出されるページ要求は図2には図示せず)。各ページ要求は、転送要求によって指定されるLBA範囲の一部に対応するフラッシュメモリ・モジュール108のセグメントから読み出すかまたは書き込むように設計されている。
図2に示すように、例としての3つのページ要求は各々、「スーパーページ(SuperPage)」として知られているフラッシュメモリ・モジュール108の領域(例えばスーパーページ213、214及び215)にアクセスする。さらに後述するように、各スーパーページは4つのフラッシュ・ページから構成され、その各々は互いに異なるフラッシュ・ダイにストアされている。
これらのデータ構造については、以下に詳細に説明する。
C.詳細なシステムの概要
図3は、図1に示したシステム全体のデザインのさらなる詳細を提供するが、前述同様に、明瞭になるように、多くの構成要素及び詳細が省略されている。図3は、基板103に接続されたホスト101及び102を示し、基板103には、SSDコントローラ106、データパスDRAM107及びフラッシュメモリ・モジュール108が含まれている。
フラッシュメモリ・モジュール108は、8つのフラッシュ・グループに分けられ、フラッシュ・グループ0〜7で表されている。そのうちの3つ、すなわちフラッシュ・グループ0、1及び7が図に示されており、301、302及び303で表されている。好適実施形態では、フラッシュメモリ・モジュール108は、8ないし12のフラッシュ・グループを保持することができる。
SSDコントローラ106には、メモリ・モジュール108に含まれるフラッシュ・グループの数に等しい数のフラッシュ・ポート、例えばフラッシュ・ポート304、305及び306も含まれている。各フラッシュ・ポートは、1つのフラッシュ・グループと通信する(例えば、フラッシュ・ポート0 304は、フラッシュ・グループ0 301と通信する)。フラッシュ・グループと同様に、好適実施形態では、SSDコントローラ106は、最小で8、最大で12のフラッシュ・ポートを有することができ、図の実施形態には8つのフラッシュ・ポートが含まれ、そのうちの3つが示されている。後述するように、各フラッシュ・ポートは、独立して作動し、それによって、フラッシュ・グループにおけるパラレル動作をサポートする。
各フラッシュ・ポートは、フラッシュHEMi及びステージバッファ(Stage Buffer)を含む(例えば、フラッシュ・ポート0 304は、フラッシュHEMi0 307及びフラッシュ・ステージバッファ0 308を含む)。「HEMi」は、ハードウェア実行マシン(Hardware Execution Machine)の略である。HEMi群は、複数の専用(特殊目的)マイクロプロセッサとして作動する複数のロジック・ブロックである。HEMi群の構造及び機能については、以下に詳細に説明する。各フラッシュHEMiは、1つのフラッシュ・グループに対する転送動作を制御する(例えば、フラッシュHEMi0 307はフラッシュ・グループ0 301を制御し、フラッシュHEMi1 309はフラッシュ・グループ1 302を制御する)。
データパスDRAM107とフラッシュ・グループ間のデータ転送をバッファリングするために、フラッシュ・ステージバッファ(例えばフラッシュ・ステージバッファ0 308)が用いられる。好適実施形態では、各フラッシュ・ステージバッファは、同時に1つの読出し及び1つの書込みを処理することができるデュアルポートSRAMであり、4つのフラッシュ・ページを表す16Kbyteのデータを保持することができる。後述するように、これはデータの「スーパーページ」を構成する。
後述するように、好適実施形態では、各フラッシュ・グループからのデータ・インタフェースは、1回に32ビット(1ダブルワード)送信することができるが、データパスDRAM107は、1回に128ビットのデータを送受信することができる(上記したように、この実施形態では、データパスDRAMはデータを64ビットのチャンクで送受信するが、各クロックでそうすることによって、128ビットの有効データ・レートを提供する)。
フラッシュ・ステージバッファは、フラッシュ・グループとデータパスDRAM間の通信をバッファリングし、その結果、DRAMの一部に関して待ち状態を要求することなく転送を行わせることができる。好適実施形態では、フラッシュ・グループからDRAMへの送信の場合、フラッシュ・ステージバッファは、ダブルワード・チャンクでデータを受け取る。十分な量のデータ(好適にはスーパーページ全体)が受信されたら、フラッシュ・ステージバッファは、データパスDRAMデータバス全体を用いるDMA転送でデータパスDRAMにデータをバースト転送する。フラッシュ・ステージバッファは、DRAMとのDMA伝送を処理するDMAロジックによって制御される(後述する図10の説明を参照)。
図3に示すように、ホスト101及び102は、ホスト・インタフェース310と通信し、ホスト・インタフェース310は、ホスト・ポート104及び105(図示せず)を含むことを理解されたい。一般に、ホストは、コマンドを発行し、マス・ストレージに書き込まれるデータを供給し、マス・ストレージからデータを要求する。当業者には明らかなように、ホストがマス・ストレージと通信する方法の詳細は、プロトコル依存である。しかし、典型的には(かつ制限なく)、ホストは、コマンド及び/またはデータを含む「フレーム」を用いてマス・ストレージと通信する。典型的には、コマンドは、コマンド・ディスクリプタ・ブロック(「CDB」)に含まれ、それについては当業者によく知られている。
ホスト・インタフェース310は、ホストに見えるようにしてCDBに応答するように設計されるが、これは、ホスト101側から見てホスト・インタフェース310は従来のマス・ストレージ・デバイスへのインタフェースを構成するように見えることを意味する。
制御フローは、次のように進む(言及されている各ロジック・ブロック及びメタデータ構造については詳細に後述する):読出しまたは書込みを要求するCDBを受信すると、ホスト・インタフェース310は、動作を処理するCDB情報(例えばCDB情報201)を生成する。当該CDB情報は、その後、コマンドパーサ・ブロック311に伝えられる。
CDB情報を受信すると、コマンドパーサ・ブロック311は、後述するコヒーレンシ及び他の種類のチェックを行い、その後、CDB情報をコマンド配布ブロック312に伝える。
コマンド配布ブロック312は、CDB情報を評価し、IOP(例えばIOP202)を生成して、要求された転送を実行する。コマンド配布ブロック312は、その後、1若しくは複数の転送要求(例えば転送要求203〜209)を生成し、各転送要求は、IOPによって求められる転送の一部を実行する。各転送要求に対して、コマンド配布ブロック312は、その後、どのフラッシュ・グループが読み出されるデータまたは書き込まれるアドレス位置を含むかを判定する。
コマンド配布ブロック312は、その後、関連フラッシュメモリ・アドレスを含むフラッシュ・グループに対応するフラッシュ・ポート、例えば、フラッシュ・ポート0 304、フラッシュ・ポート1 305及びフラッシュ・ポート7 306に転送要求を伝える。
フラッシュ・ポートがコマンド配布ブロック312から転送要求を受信するとき、当該フラッシュ・ポートのためのフラッシュHEMiは、転送要求をページ要求(例えば、ページ要求210、211及び212)に分け、ページ要求を用いて関連付けられたフラッシュ・グループにおける実際の読出し及び書込み動作を制御し、各ページ要求は、最大でデータのスーパーページまでアクセスする。
図3のフラッシュ・グループ0内の読出しまたは書込み動作の制御フローは、それゆえ、次のように進む。ホスト101→ホスト・インタフェース310→コマンドパーサ・ブロック311→コマンド配布ブロック312→フラッシュHEMi0 307→フラッシュ・グループ0 301。
データフローは、それとは異なって進む。読出しの場合、データは、フラッシュ・グループによって、接続されたフラッシュ・ポート内に含まれるフラッシュ・ステージバッファに戻される。例えば、フラッシュ・ステージバッファ0 308はフラッシュ・グループ0 301に接続され、フラッシュ・ステージバッファ1 314はフラッシュ・グループ1 302に接続され、フラッシュ・ステージバッファ7 315はフラッシュ・グループ7 303に接続されている。
フラッシュ・ステージバッファからは、フラッシュ・グループから得られたデータが、バス316を介してデータパスDRAM107に書き込まれる。データパスDRAM107からデータはホスト・インタフェース310を通過してホスト101に移動する。書込み動作は、逆方向に進む。ホスト101→ホスト・インタフェース310→データパスDRAM107→フラッシュ・ステージバッファ0 308→フラッシュ・グループ0 301。制御フローとデータフローが異なる経路を辿るという事実は、図3の様々な構成要素を結び付けるラインによって説明される。それゆえ、フラッシュHEMi群をフラッシュ・グループと結び付ける矢印は、これらの構成要素間の制御フローを象徴的に示すが、フラッシュ・グループをステージバッファと結び付ける矢印は、データフローを示す。
図3はまた、SRAMコントローラ317及び共有RAMブロック318を示し、これらについてはそれぞれより詳細に後述する。一般に、共有RAMブロック318は、HEMi群によって用いられるメモリを含み、DRAMコントローラ317は、データパスDRAM107及び共有RAMブロック318を制御しかつそれら両リソースへのアクセスを調停するロジックを含む。
D.読出し及び書込みの概要
図4は、SSDコントローラ106によって処理される読出し動作の大まかなデータフローを示す。
ステップ401では、ホスト(例えばホスト101)が、データのLBAを含む読出しコマンドを発行する。
ステップ402で、SSDコントローラ106が、フラッシュメモリ・モジュール108内の要求されたLBAの位置を識別し、1若しくは複数の読出しコマンドをフラッシュメモリ・モジュールに発行する。
ステップ403で、フラッシュメモリ・モジュール108は、読出し動作を行い、データをSSDコントローラ106に戻す。
ステップ404で、戻されたデータは、SSDコントローラ106を通ってデータパスDRAM107にストアされる。
ステップ405で、ホスト101によって要求されたデータが全て得られたか否かを判定するためのチェックが行われる。否であれば(ステップ405の結果が「no」)、追加のデータがフラッシュメモリモジュールから得られ、データパスDRAMにストアされるようにステップ403に制御を返す。
ホストによって要求された全てのデータがフラッシュメモリ・モジュールから得られ、データパスDRAMにストアされたら(ステップ405の結果が「yes」)、ステップ406で、データはデータパスDRAM107から読み出され、SSDコントローラ106に送られる。
ステップ407で、データはSSDコントローラ106からホスト101へ送信され、ホスト101による読出し動作が終了する。
図4は、大まかな概念的ステップを用いて読出し動作について説明していることを理解されたい。その詳細は、以下で説明する。
図5は、同様の大まかな概念的ステップを用いて書込み動作を説明しており、ここで、ホスト101は、メモリにデータをストアしようとしている。
ステップ501では、ホスト101が、LBAを有する書込みコマンドを発行し、SSDコントローラ106にデータを提供する。
ステップ502で、SSDコントローラ106が、データパスDRAM107に書き込まれるデータをストアする。
ステップ503で、SSDコントローラ106は、フラッシュメモリ・モジュール108内のLBAの位置を識別する。
ステップ504で、SSDコントローラ106は、LBAを含むスーパーページを読み出すのに十分なフラッシュメモリ・モジュール108への読出しコマンドを発行する。この読出しコマンドは、データをDRAMにストアせず、従って図4のステップ403から開始してステップ405まで、ステップ404をスキップして、全てのデータが受信されるまでこれら2つのステップをループする。
ステップ505で、データパスDRAM107からのデータは、コントローラに転送され、フラッシュメモリ・モジュールから読み出されたデータと統合される。この統合の結果、コントローラが現在保持するスーパーページにおいて、当該LBAにストアされた古いデータが新しいデータによって上書きされたが、スーパーページ内の他の全てのLBAは不変である。
ステップ506で、SSDコントローラ106はフラッシュメモリ・モジュール108へ書込みコマンドを発行する。
ステップ507で、フラッシュメモリ・モジュール108は、書込み動作を行う。
ステップ508で、全ての情報がフラッシュメモリ・モジュール108に書き込まれたか否かを判定するためのチェックが行われる。
追加の書込み動作が必要であれば(ステップ508の結果が「no」)、ステップ507に制御を返す。
全てのデータがフラッシュメモリ・モジュール108に書き込まれたら(ステップ508の結果が「yes」)、ステップ509で、SSDコントローラ106は、書き込まれたLBAのための位置情報を更新する。詳細に後述するように、フラッシュメモリの性質のため、書込み動作は、既存のスーパーページを物理的に上書きしないが、その代わりに更新されたスーパーページをフラッシュメモリ・モジュール108内の新しい位置に書込み、それによって、当該スーパーページ内にストアされているLBAに関連付けられたアドレス翻訳情報の更新を要求する。
ここで、書込み動作は完了する。
II.フラッシュメモリ・アーキテクチャ
A.物理メモリ・アーキテクチャ
図6は、1つのフラッシュ・グループ(例えばフラッシュ・グループ0 301)の構成及び、該グループとそれに関連するフラッシュ・ポート(例えばフラッシュ・ポート0 304)との関係を示す。この構成の細部は、異なる各実施形態において異なり得ることを理解すべきである。
フラッシュ・グループ301は、601〜608で示される8つのフラッシュチップからなる。各フラッシュチップは2つのダイを含み、例えばフラッシュチップ601はダイ609及び610を含む。
一実施形態では、各ダイ(例えばダイ609)は、8224個のブロックからなる約1.11ギガバイトの使用可能な容量を有する。各ブロックは64ページから構成され、各ページは2212バイトからなる。システム及びスペアメモリスペースが減算された場合、1つのダイあたり約1ギガバイトまたは1つのNANDフラッシュチップあたり2ギガバイトのユーザデータ容量が残される。12のフラッシュ・グループを含み、1つのフラッシュ・グループあたり8つのバンクをを含んでいるシステムでは、約384ギガバイトの使用可能なユーザ・メモリスペースが提供されるが、幾つかのスペースは予備に当てられ、LBAアドレス・スペースに含まれないシステム機能がユーザに利用可能になるので、ユーザ・データのために使用可能なスペースの合計は約300ギガバイトである。システムスペースは、SCSIモードぺージなどの様々なタイプのシステム・メタデータをストアし、空きスペースも含む。
各々2つの1ギガバイトのダイを含んでいる2ギガバイトのNANDフラッシュチップの使用は、最新の利用可能なフラッシュメモリ技術を反映するものである。このシステムは、1つのフラッシュメモリチップに4つのダイが含まれるかまたは1つのチップあたり1つのダイが含まれるような他のフラッシュメモリ・サイズ及び構成においても同様に良好に動作することができる。次世代型のNANDフラッシュチップは1つのチップあたり4つのダイが組み込まれることとなるので、フラッシュ・グループ301はそのように構成することとする。本明細書で説明する原理は、4つのダイを含むチップに容易に適用可能である。例えば、4つのダイを含むチップにおける各ダイがそれ自体のCE及びRBピンを有する場合、4つのダイ全ては共通のアドレス/コマンド/データピンを共有するが、各ダイは別個のバンクに組み込まれる。他方では、4つのダイを含むチップの各々が2つのCE及びRBピンを有し、2つのダイが各ピンを共有する場合、SSDコントローラ106からは、共通のCS及びRBピンを共有する2つのダイを、上述した単一のダイ(例えばダイ609)と区別することができないであろう。
現在の好適な実施形態はまた、各々2つの0.5ギガバイトのダイを含んでいる1ギガバイトのNANDフラッシュチップにおいても同様に良好に動作することができる。この構成では、1つのダイあたり4112個のブロックしか含んでいない。この構成は、容量以外は、上述した構成と同様に動作する。
フラッシュメモリチップそれ自体は従来のデザインであり、図6に示した構成は、フラッシュメモリチップの内部設計の細部の説明は意図しておらず、チップの構成及びダイとシステムの残りの部分とのインタフェースの様態の理解を可能にするためのものであることに留意されたい。
フラッシュ・グループ301は、各バンクが4つのダイから構成される4つのバンク(611、612、613及び614)に分割される。従って、バンク611は、フラッシュメモリ601のダイ609と、フラッシュメモリ602のダイ615と、フラッシュメモリ603のダイ616と、フラッシュメモリ604のダイ617とから構成される。
また、バンク612は、フラッシュメモリ601のダイ610と、フラッシュメモリ602のダイ618と、フラッシュメモリ603のダイ619と、フラッシュメモリ604のダイ620とから構成される。バンク613及び614も、他のフラッシュメモリ及びダイの間で同様に構成される。
図6は4つのバンクを示す。現在の好適な実施形態では、ユーザが所望する容量に応じて、各フラッシュ・グループは4ないし8つのバンクを含んでいる。
図7は、フラッシュメモリ・モジュール108、SSDコントローラ106及びデータパスDRAM107の間の相互接続に関するさらなる詳細を提供する。図7はフラッシュ・グループ0 301及びフラッシュ・ポート0 304を示すが、同様の相互接続が、全てのフラッシュ・グループとそれらに関連するフラッシュ・ポート及びデータパスDRAM107との間で存在する。
図7に示すように、フラッシュ・グループ0 301は、2つのバス、フラッシュバス701及びCS/RBバス702によって、フラッシュ・ポート0 304に接続されている。
CS/RBバス702は、フラッシュHEMi307をフラッシュ・グループ301の各バンクに接続する別個の複数のラインからなる。4つのバンクを有する図示した実施形態では、CS/RBバス702は、フラッシュHEMi307をバンク614に接続するライン703と、フラッシュHEMi307をバンク613に接続するライン704と、フラッシュHEMi307をバンク612に接続するライン705と、フラッシュHEMi307をバンク611に接続するライン706との4つのラインからなる。多数(例えば8つ)のバンクを含む実施形態では、CS/RBバス702は、バンクの数に応じた多数の信号から構成されることとなる。フラッシュHEMi307からの信号がSSDコントローラ106上のピンを介して送信されることも理解すべきである。図7は、送信経路の物理的な詳細を示すことは意図しておらず、データ及び制御信号の流れを示すことを意図している。
CS/RBバス702の各ラインは、レディ・ビジー(「RB」)信号をフラッシュ・グループ301からフラッシュHEMi307へ送信するとともに、チップセレクト(「CS」)信号をフラッシュHEMi307からフラッシュ・グループ301へ送信する。
CS/RBバス702へ送信された複数のCS信号のうちの1つの信号だけが、所定の時間でアクティブとなる。現在アクティブなCS信号に接続されているバンクがフラッシュバス701に接続され、他の全てのバンクはそのバスからは切断される(繰り返すが、これは、物理的概念ではなく論理的概念である。実施に応じて、「接続された」バンクはフラッシュ・バスと通信するが、フラッシュ・バスと全てのバンクとの間に物理的な接続が存在する場合でも、他の全てのバンクがそのフラッシュ・バスを無視するように構成される)。
フラッシュHEMi307からのアドレス及び制御情報は、フラッシュバス701を介して各バンクへ送信される。アドレス及び制御情報には、制御信号708(図8を参照して後述する)と、アドレス/コマンド信号709(図9を参照して後述する)とが含まれる。同様に、バス707は、フラッシュ・ステージバッファ308をフラッシュバス701へ接続する。データは、ステージバッファ308から、バス707及びフラッシュバス701を介してバンクへ送信される。また、データは、バンクからステージバッファ308への逆方向にも送信される。
図7にさらに示すように、データパスDRAM107が、ステージバッファ308に接続されている。従って、データパスDRAM107からステージバッファ308へデータが送信され、その後、現在アクティブなCS信号を有するバンクへバス701を介して送信される。フラッシュ・グループ301からのデータは、逆方向の経路を通ってデータパスDRAM107へ送信される。
図8は、単一のフラッシュメモリチップ(例えば、ダイ609及び610を有するフラッシュチップ601)のピン配列の一部を示す。好適実施形態では、フラッシュチップは、標準的なNANDフラッシュ・インタフェースを使用する。標準的なNANDフラッシュ・インタフェースの要部は、典型的には、8ビットのアドレス/データ(801)と、4ビットの制御信号708(アドレス・ラッチ・イネーブル(「ALE」)信号802、コマンド・ラッチ・イネーブル(「CLE」)信号803、ライト・イネーブル(「WE」)信号804及びリード・イネーブル(「RE」)信号805)と、ダイ1つあたり1本のチップ・イネーブル・ピン(コントローラからのCS信号に接続され、チップ・イネーブル及びチップセレクトの指定が時々相互互換的に使用されることとなる)と、ダイ1つあたり1つのレディ・ビジー・ラインとから構成される。図示のように、A/D信号801及び制御信号708(ALE、CLE、WE及びRE信号)は全て、フラッシュバス701に接続されているが、これらの信号だけがフラッシュバス701に接続されてるわけではない。
図8に示すように、ALE、CLE、WE、RE信号及び両CE(チップ・イネーブル)信号は、フラッシュメモリ601に入力される。A/Dバス801は、8つの双方向信号で構成されている。両RB信号は、出力信号である。
図8に示した全ての信号は、2つのCE信号及び2つのRB信号以外は、両ダイによって共有される。従って、8本のA/Dピン801が、ダイ609及び610によって共有される。図6の説明から理解することができるように、両ダイ(ダイ609及び610)は互いに異なるバンクに含まれている。このため、いかなる場合でも前記信号が1つ以上のバンクで同時にアクティブになることはないので、ピンを共有しても混乱は生じない。
典型的なフラッシュメモリでは、各ダイは、対応するダイに書き込まれるまたは対応するダイから読み出された1ぺージのデータを保持することができる、関連付けられたフラッシュページ・バッファを有する。図8では、フラッシュページ・バッファとして、ページ・バッファ806及び807が示されている。
図9は、フラッシュメモリ・ポート(例えばフラッシュメモリ・ポート0 304)に用いられるフラッシュHEMi(例えばフラッシュHEMi307)の出力信号の一部を示している。フラッシュHEMi307はまた、他の機能に用いられるさらなる入力及び出力も有することを理解されたい。上述したように、フラッシュHEMi307をフラッシュ・グループに接続する信号は、SSDコントローラ106のピンを介して送信される。それらのピンも、ルーティングを処理するロジックも図示しない。信号のルーティングを示す他の図においてもそうだが、図9は、概念を示すことを意図しており、実際の物理的なレイアウトの詳細を示すことは意図していない。
フラッシュHEMi307のインタフェースのこの部分は、以下の機能に用いられる信号から構成される。
1.ALE信号802、CLE信号803、WE信号804及びRE信号805の4つの制御ラインから構成される制御信号708。これらの信号は、フラッシュHEMi307からの出力である。
2.CS/RBライン703〜706から構成されるCS/RBバス702。上述したように、各フラッシュHEMiは、接続された1つのCS/RBラインあたり、1つのフラッシュメモリ・バンクを制御することができる。従って、図9に示した実施形態では、フラッシュHEMi307は4つのフラッシュメモリ・バンク(例えば、図6に示したバンク611、612、613、614)を制御することができる。1つのフラッシュ・グループあたり8つのバンクを含むシステムでは、各フラッシュHEMiは、この目的に用いられる8つの信号を有することとなる(追加の4つの信号が実際に使用されなくても、ロジックは追加の4つの信号をサポートする必要があることに留意されたい)。
CS/RBバス702は、CS信号をHEMi307からフラッシュバンクへ送信するとともに、RB信号をフラッシュバンクからHEMi307へ送信する。信号はこのようにして多重化されるので、各ラインは、一度に一種類の信号のみを送信し得る。CS/RB信号は「ワン・ホット」信号であるので、それらの信号のうちの1つだけを所定の時間にアクティブにすることができる。
同一の信号をCS及びRBの両方の目的に使用すると、SSDコントローラ106のピンが節約されるので、SSDコントローラのコスト及び複雑さを減少させることができる。しかし、この場合、各バンクに1つのRB信号つまり1本のピンが必要となるので、フラッシュHEMi307で制御することができるバンクの数が制限される。現在の実施形態では、SSDコントローラ106は各フラッシュ・ポートあたり8本のCS/RBピンを有するので、各フラッシュHEMiは最大で8つのバンクを制御することができる。
3.アドレス/コマンド信号709を構成する31個の信号。このバスは、フラッシュバス701に接続され、フラッシュメモリチップと同一の40MHzの速度で実行され、アドレス及びコマンドをフラッシュHEMi0 307からフラッシュ・グループ0 301へ送信する。アドレス/コマンド信号709は、各々が8ビットのペイロードをフラッシュメモリ・バンクの個別のダイへ送達する4つの個別の8ビットのバス(ライン0〜7、8〜15、16〜23及び24〜31からなる)と考えることができる。従って、アドレス/コマンドバス709からの8つのラインは、図8に示すA/D信号801に接続する。
以上の説明から明らかなように、SSDコントローラ106の44本のピンは、各フラッシュ・ポートに用いられる(図9では4つの信号のみが示されているが、各フラッシュ・ポートは最大で8つのバンクをサポートすることができ、それ故に8本のCS/RBピンが必要であることに留意されたい)。SSDコントローラ106は最大で12のフラッシュ・ポートをサポートすることができるので、SSDコントローラ106の528本のピンがフラッシュ・インタフェースに用いられるが、12よりも少ない数のフラッシュ・ポートが使用される場合は前記ピンのうちの幾つかは接続されない。別個のCS及びRBピンが必要とされる場合、フラッシュ・インタフェースはさらなる96本のピンを必要とすることに留意されたい(1バンク当たり1本のピン×8個のバンク×12個のフラッシュ・ポート)。CS及びRB信号を単一のピン上に多重化すると、必要とされるピンの数を大幅に節約することができる。
図9に示す実施形態が現在は好ましいが、様々な別の実施形態も可能である。別の実施形態では、特定のフラッシュ・グループに現在用いられている8本のCS/RBピンが、フラッシュ・グループ内に設けられたMUX(多重化装置)または他の同様のロジック装置に接続される。MUXは、或るバンクの全てのフラッシュ・ダイのCE入力に接続される1組の出力信号を有し、各信号は、選択すべき特定のバンクのCE入力を発生させる。SSDコントローラの8本のCS/RBピンは256の個別の状態を送信可能なので、理論的には、256の可能性のある入力状態のそれぞれについて互いに異なる出力ラインに沿って信号を生成するようにMUXまたは他のロジック回路を設計することにより、それらのピンを使用して256の別個のバンクのうちから選択するようにすることが可能であり得る。しかし、現在の実施形態では、全てのバンクが同一のA/Dバスを共有しているので、そのような多数のバンクを追加する利益はほとんどないであろう。代わりに、より望ましい実施形態では、そのようなMUXまたは他の同様のロジック回路は、適切な数(例えば8)のバンクを追加するためか、または、1バンクあたりのCS/RBピンの数を減らす(例えば8から4へ減らす)ために使用される。
この代替実施形態では、CS/RBピンの数はバンクの数よりも少ないので、CS/RBピンはもはや各バンクについてRB信号を処理することができないことに留意されたい。そのため、この実施形態では、SSDコントローラのCS/RBピンはもはやRB入力を処理できない。しかし、標準的なフラッシュチップはソフトウエアのみによるRB状態の状態チェックをサポートするので、各フレッシュHEMiはA/Dバスを使用してバンクのRB状態をチェックすることができる。
従って、この代替実施形態では、SSDコントローラ106は、フラッシュメモリ・インタフェースのために少数のピンを用いるか、または、幾つかのロジック回路を追加する必要があるためシステムが複雑化するが多数のバンクをそれと同一数のピンを用いてサポートする。
図10は、ある単一のバンクに含まれる複数のダイ(例えばバンク611に含まれるダイ609、615、616及び617)の互いの接続、及び前記ダイのそれに関連するフラッシュ・ポート(例えば、フラッシュHEMi307及びステージバッファ308を含むフラッシュ・ポート0 304)への接続の様態を示す。
図6に示すように、ダイ609はフラッシュチップ601の2つのダイのうちの1つであり、ダイ615はフラッシュチップ602の2つのダイのうちの1つであり、ダイ616はフラッシュチップ603の2つのダイのうちの1つであり、ダイ617はフラッシュチップ604の2つのダイのうちの1つである。図示を簡単にするために、図10では、各フラッシュチップの2つのダイのうちの1つだけの図示する(上述したように、メモリ・モジュール108には、各々4つ(またはそれ以上)のダイを有するフラッシュチップが組み込まれ得るが、本明細書において開示した設計の原理は同じままである)。
図示のように、ライン706は、フラッシュHEMi307とバンク611との間のCS/RB信号インタフェースを構成する。ライン706は、CS信号をフラッシュHEMi307からバンク611へ送信し、RB信号をバンク611からフラッシュHEMi307へ送信する。図10では、このことを、フラッシュHEMi307とライン706上のポイント1001との間を結ぶ両方向を指す矢印により示している。ポイント1001からは、信号経路は分岐し、入力としてのCS信号をダイへ送信し(各ダイに入る「CS」と表示された矢印により示される)、出力としてのRB信号を各ダイから送信する(各ダイから出る「RB」と表示された矢印により示される)ことを理解されたい。ポイント1001は例示的なものであり、ポイント1001も図10の残りの部分も、物理的実施の忠実な図示は意図していないことを理解されたい。
図示のように、バンク611に含まれる4つのダイのうちのいずれか1つが「ビジー」と出力した場合にバンク611からHEMi307へライン706を介してビジー信号が送信されるように、バンク611の各ダイからのRB出力信号は論理的には一緒に実行される(あるいは、同様に組み合わせられる)。ライン706はまた、CS信号をフラッシュHEMi307からバンク611の各ダイへ送信することもできる。バンクに用いられるCS信号がフラッシュHEMi307により設定された場合、その信号はバンクの各ダイのCEピンへ同時へ送信され、それにより、各ダイが同時に選択される。
図10はまた、フラッシュチップ601〜604のA/Dピンと、HEMi307のアドレス/コマンド信号との間の接続を表すアドレス/コマンドバス709も示す。図示のように、32ビットのバス709は、フラッシュHEMi307からバススイッチ1002へ信号を送信する。バススイッチ1002は、上述したようにして信号の多重化、分割及び送信を行うロジック回路を表し、必ずしも単一の物理的スイッチを構成する必要はない。
バススイッチ1002は、バス709からサブバスへ信号を分割する。信号0〜7は、8ビットのバス801(図8にも示されている)を使用してフラッシュチップ601のA/Dピンへ送信され、信号8〜15は8ビットのバス1003を使用してフラッシュチップ602のA/Dピンへ送信され、信号16〜23は8ビットのバス1004を使用してフラッシュチップ603のA/Dピンへ送信され、信号24〜31は8ビットのバス1005を使用してフラッシュチップ604のA/Dピンへ送信される。A/Dピンは、フラッシュチップ・ピンへ送信された信号がフラッシュチップの内部デザインに特異的な方法によって適切なダイに受け取られるように、フラッシュチップの両方のダイによって共有されることに留意されたい。
図10はまた、フラッシュHEMi307の制御信号708と各ダイとの間の接続を示す。上述したように、これらの制御信号はALE、CLE、RE及びWEからなり、フラッシュHEMi307からフラッシュ・ダイへ送信される。制御信号708は、フラッシュHEMi307からバススイッチ1002へ送信される。バススイッチ1002からは、制御信号の同一の組み合わせ(いずれの場合も708で示される)が、各フラッシュメモリ・チップへ送信される。A/Dピンと同様に、ALE、CLE、RE及びWEの各ピンは、各フラッシュメモリ・チップにおける両ダイに共有される。
図10はまた、32ビットのバス707によってバススイッチ1002に接続されているフラッシュ・ステージバッファ308を示す。バス709とは異なり、バス707は双方向性なので、データを両方の方向へ送信する。
ステージバッファ308とダイとの間の送信は、ステージバッファDMAコントローラ1006の制御下で行われる。
フラッシュ・ステージバッファ308はまた、フラッシュチップのRE及びWE入力に接続されていることに留意されたい。そのような接続は、明瞭さのために図示しないが、DMAの動作を制御するために用いられる。
バススイッチ1002は、バス707からの信号を4組の8ビット信号に分割し、分割された信号を8ビットのバス801、1003、1004及び1005を使用してダイ609、615、616及び617へ送信する。同様に、バススイッチ1002は、8ビットのバス801、1003、1004及び1005を介してダイ609、615、616及び617からデータを受信し、その後、完全な32ビット値の信号をバス707を介してステージバッファ308へ送信する。
このように、スイッチ1002は、フラッシュHEMi307からの信号及び、同一の8ビットのバスを介してステージバッファ308との間で送受信される信号を多重化する。スイッチ1002は、読出しまたは書込みサイクルの特定の段階に応じて、どの信号の組を8ビットのバスを介して送信するか決定する。前記サイクルの或る段階の間は、フラッシュHEMi307からのアドレス情報はダイに接続されるが、前記サイクルの別の段階の間は、ステージバッファ308からのまたはステージバッファ308へのデータは8ビットのバスに接続される(繰り返すが、スイッチ1002は、概念的なものであり、単一の専用スイッチを構成する必要はない。加えて、スイッチ1002に関連して説明した機能的な側面は、その他の論理ブロックに見ることもできる)。
図10では、1つのフラッシュメモリ・バンク611のみを示している。実際の実施形態では、バススイッチ1002は、フラッシュ・グループの各フラッシュメモリ・バンクとインタフェースすることとなる。各インタフェースでは、上述したようにバンク611に特異的な信号706以外は、図10に示すようにバススイッチ1002からバンク611へ出力される信号は全て複製されることとなる。また、上述したように、フラッシュメモリ・スイッチ1002は、バス707、708及び709を各フラッシュバンクへ接続するが、フラッシュHEMi307からの現在アクティブなCS信号に関連するバンクのみが応答性を有する。
フラッシュバス701は、バス708、801、1003、1004及び1005を含むことに留意されたい。
図11は、ライン706に関連するCS及びRBロジックの詳細を示す。図示のように、SSDコントローラ CS/RBピン1101は、フラッシュ・ダイ609及び615に関連するRB及びCEピンに接続される。図6に関連して上述したように、ダイ609及び615は、バンク611に含まれる4つのダイのうちの2つである。例示の目的で、バンク611の他の2つのダイは図示しないが、それらはダイ609及び615と同様の様態で接続されている。
SSDコントローラ106は、バンク611を選択すべくCS/RBピン1101をハイで駆動する。この信号は、インバータ1102によって反転され、バンク611のダイのCEピンによりローで受信される。こららのピンは、アクティブ・ローである。
コントローラが、同じフラッシュ・グループハイにおける別の1つのCSピンを駆動したした場合に、CS/RBピン1101はSSDコントローラ106によりローで駆動される(このことにより、フラッシュ・グループにおける別のバンクが選択される)。
フラッシュHEMi307がバンク611のレディ・ビジー状態を読み出したい場合、SSDコントローラ106はCS/RBピン1101をフロートさせる。フラッシュ・ダイRBピンのいずれかがバンクがビジーであることを示すロー信号を駆動した場合、ダイRBピンのいずれかのロー出力はプルアップ1103をオーバーライドすることとなるので、SSDコントローラによりCS/RBピンがフロートさせられるとCS/RBピンはロー入力を受け取ることとなる。他方では、バンクがレディ状態の場合、フラッシュ・ダイはRBピンをフロートさせる。プルアップ1103はRBピンに接続されているので、RBピンの全てをフロートさせた場合及び、CS/RBピン1101がフロートされた場合、前記ピンはバンクがレディであることを示すハイ入力信号を受信する。
従って、レディ信号がCS/RBピン1101により受信されるようにするために全てのピンをレディ状態(フロート状態)にする必要があるので、この回路がピンのビジー状態を効果的にOR接続されるようにこの回路はバンクのR/BピンをOR構成で互いに接続する。インバータ1102の使用することにより、バンクのCEピンがアクティブ・ローの場合であっても、バンクを選択するためにSSDコントローラ106をCS信号ハイで駆動することが可能となる。入力されるRB信号をオーバーライドするためにはCS信号がハイで駆動されなければならないので、このことは必要である。このようにして、SSDコントローラ106へのRB入力をアクティブ・ハイにすることができる。また、ハイCS出力はプルアップ1103で生成されたハイRB出力をオーバーライドするので、CS/RBピン1101においてハイ出力で依然としてオーバータイドされることができる。
B.ロジカル・メモリ・アーキテクチャ
101及び102などのホストは、典型的には、ロジック・ブロック・アドレスすなわち「LBA」を単位としてメモリを編成する。ホストがデータをマス・ストレージに書き込んだとき、ホストは典型的には書込みコマンド及びLBAを含むCDBを送信する。なお、ホスト通信の詳細は、ホストに使用される特定のプロトコルに応じて変更される。ホストがその後にデータの読出しを望む場合、同じLBAを用いて読出しコマンドを発する。
典型的には、ホストのメモリ・アーキテクチャは、データを何百万ものLBAに分割する。各LBAには、LBA0から始まる連番が付けられる。当業者にはよく知られているように、ホストは多数のマス・ストレージ コントローラと頻繁に通信し、ホストの全LBA範囲のサブセットを各コントローラに割り当てる。現在の実施形態では、SSDコントローラ106は、LBA0から始まりコントローラによりアドレス可能な最大連番数のLBAで終わるLBA範囲に応答する。そのLBAシーケンスをより大きいホストLBAアドレス・スペースへマッピングすることにはホストまたはホスト・バス・アダプタが関与し、SSDコントローラ106には透明である。
図12は、好適実施形態におけるフラッシュメモリ・モジュール108で用いられるメモリ階層を示す。
各フラッシュ・グループは多数のバンク(例えばバンク611)から構成されている。各バンクは、ブロック0〜ブロックn(例えばブロック0 1201)と表される多数のブロックから成る。フラッシュメモリシステムでは一般的なように、ブロックは、1回の動作で消去可能なフラッシュメモリのセグメントを表す。
バンクに含まれるブロックの正確な数は、実施依存的である。一例を挙げれば、300ギガバイトの利用可能なユーザデータを提供するシステムでは、1バンクあたりのブロックの数は、通常は7,000〜9,000個の範囲であり、欠陥マネジメントや空きスペースとして確保されるメモリ量などの様々な要素に左右される。
図12に示すように、各ブロックは、スーパーページ0〜63と表される64個のスーパーページからなる。前述したように、各スーパーページは、4つのフラッシュページからなる(例えば、スーパーページ30は、ページ30 1202、ページ30 1203、ページ30 1204及びページ30 1205からなる)。ページ1202、1203、1204及び1205は、同じフラッシュバンクの4つの互いに異なるフラッシュメモリ・ダイの同じアドレス位置にストアされている。従って、スーパーページ30は、4つの別個のダイに散在している。フラッシュメモリシステムでは標準的なように、各ページは、読出しまたは書込み可能なフラッシュメモリの最小インクリメントを表す。
図12に示すように、各スーパーページは、ページセクタ(Pセクタ)として知られている15個のメモリ・セグメント(ページセクタ0〜14と表される)をストアする。
図12はまた、さらなるメモリ構造:Sペーシセクタ0 1206を示す。図示のように、Sページセクタ0は4つのPセクタ0からなる。各スーパーページは1つのSページセクタを有する。
Sページセクタ0は一般的にクラッシク・マス・ストレージ・セクタに相当するが、同一バンクの互いに異なるダイの同一アドレスに各々ストアされている4つのPセクタに物理的に散在している。
好適実施形態はまた、図12には図示しない追加的なメモリ構造であるフラッシュ・グループの各バンクの同一ブロック(例えばフラッシュ・グループのスーパーブロック0のブロック0 1201)から構成されるスーパーブロックも使用する。
望ましい実施形態では、特定のLBAに関連するデータ及びメタデータは、単一のSページセクタ(例えばSページセクタ1206)にストアされ、本明細書においては、セクタ・データ及びセクタ・メタデータから構成されるセクタ・コンテンツと呼ばれる。
図13は、スーパーページ・セクタ(例えば、Sページセクタ1206)の構成を示す。Sページセクタ全体は、フラッシュメモリ内の556バイトからなる。各Sページセクタは、4つのPセクタに分けられ、各Pセクタは139バイトからなり、互いに異なるフラッシュ・ダイ上にある。
図示したこの例では、528バイトのSページセクタ1206は、セクタ・データ・フィールド1301として示されるデータに割り当てられる。使用するプロトコルに応じて、互いに異なるホスト・プロトコルは互いに異なる量のデータを1つのアドレスに関連付ける。セクタ・データ・フィールド1301は512バイトであり得る。
図13に示すように、好適実施形態では、各Sページセクタはまた8バイトのエンド・ツー・エンド(「E2E」)情報(フィールド1302)及び20バイトのECC情報(フィールド1303)を含む。これらのフィールドは、セクタ・メタデータを集合的に構成する。
E2E情報は、より新しいバージョンのSCSIプロトコルによって指定される。この情報は、データを追跡し、マス・ストレージ・デバイスから戻ったデータが要求されたデータと一致(マッチ)することを確実にするために、イニシエータにより使用することができる。ECC情報は、誤り訂正の目的のために使用される。
E2Eフィールド1302は、Refタグ・フィールド1304、Appタグ・フィールド1305及びCRCフィールド1306にさらに分割される。
Refタグ・フィールド1304は4バイトからなり、イニシエータによりセクタ・データに関連付けられたアドレスを含む。Refタグのサポートは、SCSIプロトコルからは要求されないので(そして、プロトコルの旧バーションの一部でないので)、イニシエータはRefタグを使用しても使用しなくてもよい。イニシエータがRefタグを使用しない場合、Refタグ・フィールド1304に関連する値は、セクタコンテンツの最初の書込みをトリガーしたCDBから取得される。典型的には、この値はLBAと同一であるが、イニシエータが別のRefタグを割り当ててもよい。同一の書込みにおけるそれに続く各セクタのRefタグ値がインクリメントするように、または、単一の書込みに関連する全てのセクタに対して単一のRefタグ値が割り当てられるように、イニシエータにより選択される。インクリメントさせる方法が選択された場合、SSDコントローラ106はその作業を初期Refタグ値及び受け取ったセクターの番号に基づいて行う。
イニシエータがRefタグの使用をサポートしない場合、SSDコントローラ106はRefタグ・フィールド1304をLBAアドレスで満たす。このフィールドは、イニシエータがRefタグの使用を要求するか否かに関わらず、内部エラーチェックの目的でSSDコントローラ106に使用される。
Refタグ・フィールド1304にストアされた値は、このSページセクタに割り当てられた任意のLBAへのその後の読出しまたは書込みを引き起こす任意のCDBのRefタグ値に一致すべきである(イニシエータによりRefタグが割り当てられなかった場合は、Refタグ値はCDBに基づいてLBAに一致すべきである)。2つの値が一致しない場合は、受け取ったRefタグにおける誤り、Refタグ・フィールド1304におけるデータ破損、または、Sページセクタ1206を読出しまたは書込みのための適切なターゲットとして選択するためにSSDコントローラ106によって使用されるアドレス翻訳テーブルにおける問題によって生じた何らかのエラーを示す。そのような状態が検出された場合、ホストに対して、トランザクション失敗を示す適切なSCSI検知コードの発行(または、使用されるプロトコルに応じたその他の同様の通信)がなされる。
Appタグ・フィールド1305は2バイトからなり、関連するセクタ・データにより作られた特定の用途に関するイニシエータ特異的情報のために使用される。Appタグ情報はSCSIプロトコルによってサポートされるが、このことは必須ではない。この情報がイニシエータによって供給されない場合、Appタグ・フィールド1305には、Appタグの使用をサポートするイニシエータにより割り当てられた任意の有効なAppタグ値をオーバーラップしないように選択されたデフォルト値が満たされる。
Refタグ値と同様に、フラッシュメモリから受信したデータについてのAppタグ情報は、エラーを示す不一致によって、読出しコマンドの一部としてイニシエータによって供給されたAppタグに対してチェックすることができる。
CRCフィールド1306は2バイトからなり、前記データとSページセクタ1206にストアされているメタデータとの整合性をチェックするのに使用される巡回冗長検査(「CRC」)データを含む。Refタグ及びAppタグ情報と同様に、CRCタグは、前記データ及びメタデータが正しいか否かを判断するために、イニシエータから受け取った値に対してチェックすることができる。
SCSIプロトコルは、イニシエータが3つのE2E値のいずれかまたは全てのチェックを要求することを可能とする。
ECCフィールド1303は、LBAデータ及びセクタ・メタデータのエラーを訂正するために使用することができる誤り訂正符号(「ECC」)情報を含む。好適実施形態に使用されるECCのチェックは、図31に関連して後述する。
図12に戻り、好適実施形態では、各ページ(例えばページ1202)は2212バイトのフラッシュメモリスペースからなり、15個のPセクタ(いずれの場合もPセクタ0〜14と表される)と、それに加えてメタデータ(図示せず)を含む。
好適実施形態では、Sページセクタを構成する4つのPセクタの各々は、そのSページセクタにストアされるセクタコンテンツの4分の1をストアする。そのデータは、バイトインタリーブに基づいて、Pセクタに割り当てられる。従って、セクタコンテンツの第1のダブルワードの最初のバイトはページ1202のPセクタ0の最初のバイトに書き込まれ、第1のダブルワードの2番目のバイトはページ1203のPセクタ0の最初のバイトに書き込まれ、第1のダブルワードの3番目のバイトはページ1204のPセクタ0の最初のバイトに書き込まれ、第1のダブルワードの4番目のバイトはページ1205のPセクタ0の最初のバイトに書き込まれ、第2のダブルワードの最初のバイトはページ1202のPセクタ0の2番目のバイトに書き込まれる。
この説明から理解できるように、Sページセクタ0にストアされたセクタコンテンツは、4つのPセクタ0の間に散在する。従って、4つのページの各ページは、セクタコンテンツの4分の1、すなわち139バイト(556/4)をストアする。
図14は、フラッシュページ1202をさらに詳細に示し、図12に図示しなかった要素を図示する。典型的なフラッシュ・アーキテクチャでは、フラッシュページは、2048バイトのデータ及び/またはメタデータと、他の目的に使用されるさらなる64バイトの「スペア」バイトとからなり、合計で最大2112バイトとなる。他方では、好適実施形態では、各ページは2112バイトからなるが、そのうちの2085バイトはセクタコンテンツ(15×139)のために使用され、残りの27バイトがスーパーページに関連するメタデータをストアする。図14は、2085バイトからなるPセクタ0〜14と、1フラッシュページ当たり27バイトからなるスーパーページ・メタデータ1401とを示す。Pセクタの場合と同様に、スーパーページ・メタデータ・フィールド1401がスーパーページに関連するメタデータの4分の1をストアするように、スーパーページ・メタデータはスーパーページを構成する4つのフラッシュページの全てに渡って散在する。
スーパーページ・メタデータ1401は、Sページインデックス1402とタイムスタンプ1403からなる。Sページインデックス1402は、「フォワード・テーブル(Forward Table)」として知られているテーブル(LBAについての物理位置情報を含んでいる)にインデックスをストアする。フォワード・テーブルは、図33に関連して後述する。
タイムスタンプ1403は、スーパーページが書き込まれた時間を表すタイムスタンプを含む。
Sページインデックス及びタイムスタンプは、スーパーページを構成する4つのフラッシュページの各々に冗長的に書き込まれる。このメタデータは、他の情報を保護するECC機構により保護されていないので、冗長性は必要である。
スーパーページが書き込まれた場合、スーパーページ・メタデータ1401はフラッシュHEMiによって満たされる。フラッシュHEMiは、書込みを開始するページ要求部からSページインデックスを所得するとともに、内部クロックからタイムスタンプ情報を取得する。スーパーページ・メタデータは、不測のパワーロスの後に、オープンスーパーブロックを再構築するために使用される。パワーロス後の再構築については、図58に関連して後述する。
図15は、セクタコンテンツが、バンクのブロック0及び1から構成される様態を示す。バンクにストアされた残りのブロックの全てに対し、同一の構成が行うことができることを理解されたい。
各Sページセクタは、単一のLBAに関連するセクタコンテンツをストアし、スーパーページのSページセクタは、15個の連続的なLBAに関連するセクタコンテンツをストアする。後述するように、或るスーパーページに関連する15個の連続的なLBAは、次のスーパーページに関連する15個の連続的なLBAとは関係を持たない。
この構成は、LBAを文字(letter)で識別することにより示される。従って、LBA(A)は特定のアドレスを示し、LBA(A+14)は、LBA(A)よりも14高いLBAアドレスを示す(例えば、LBA(A)がLBA(O)である場合、LBA(A+14)はLBA(14)となる)。また一方、LBA(A)とLBA(B)との間は、例えば両方とも15で等しく割り切れること以外は関係がない。従って、LBA(A)がLBA(9,000)を表す場合に、LBA(B)がLBA(60)を表し得る。
各スーパーページにストアされたLBAは、オペレーション中に変化し得ることに留意されたい。例えば、ブロック0のスーパーページ1のSページセクタ0は、ある時点では、LBA(O)(B=0)に関連するセクタコンテンツをストアすることができるが、他の時点では、LBA(900)(B=900)に関連するセクタコンテンツをストアすることができる。使用中におけるLBA、スーパーページ及びブロックの変化の関係の様態は後述する。
図16は、初期化中に、フラッシュメモリ・モジュール108にホストアドレス・スペースをマップする様態を示す。上述したように、ホストは典型的には、ホストを物理メモリの構成の詳細から分離するLBAを使用して読出し及び書込みを引き起こす。
好適実施形態では、各フラッシュ・グループは同じサイズであり、LBAに対応するデータを各々同数ストアする(または他のホスト・アドレス方式が用いられる)。現在の実施形態では、後述するように、45個のLBAが1回の転送要求で処理することができる最大数なので、LBAは45の倍数のセットでフラッシュ・グループの間に分配される。好適実施形態は、LBA0〜89がフラッシュ・グループ0に割り当てられ、LBA90〜179がフラッシュ・グループ1に割り当てられ、LBA180〜269がフラッシュ・グループ2に割り当てられ、以下同様にして最後のフラッシュ・グループに達してLBA割り当てがフラッシュ・グループ0にループバックするまで、90個のLBAのストライプ・サイズを用いる。他の様々なストライピング・アルゴリズムを用いることが可能である。代替実施形態では、ユーザはストライプ・サイズを特定することが可能であるが、転送要求で処理することができるLBAの数の倍数単位で行うことが好ましい。
図16は、フラッシュメモリスペースの簡略化されたバージョンを示す。この簡略化されたバージョンは、3つのフラッシュ・グループ(フラッシュ・グループ0〜2)から構成される。この簡略化された例では、2つのスーパーページからなるブロックは、SP0及びSP1と表される。従って、フラッシュ・グループ0のバンク0のブロック0は、スロットに書き込まれた、1601で表されるデータからなる。図示のように、この簡略化された例では、各バンクは1つのブロックのみを含む。
上述したように、スーパーブロックは、各バンクの同じブロックからなる。そのため、図16に示す簡略化されたアーキテクチャでは、フラッシュ・グループ0のスーパーブロック0は、各バンクのブロック0から成り、図16では1602で表される(すなわち、簡略化された例におけるフラッシュ・グループ全体)。
後述するように、各スーパーブロックのブロック0のスーパーページ0は、スーパーブロック・メタデータ・テーブルとして知られているデータ構造を含む。このことは、各フラッシュ・グループのバンク0のSP0において、「SMT」として示されている。
前記テーブルの他の欄の全てには、特定のスーパーページにストアされたLBA範囲が記載されている。従って、フラッシュ・グループ0のバンク1のスーパーページ0はLBA0〜14を含み、フラッシュ・グループ0のバンク1のスーパーページ1はLBA300〜314を含む。
図示のように、LBAは、それぞれ90個のLBAの「ストライプ」で割り当てられる。最初のストライプ(LBA0〜89)は、フラッシュ・グループ0のスーパーページ0のバンク1〜6に割り当てられる。次のストライプ(LBA90〜179)は、フラッシュ・グループ1のスーパーページ0のバンク1〜6に割り当てられる。次のストライプ(LBA180〜269)は、フラッシュ・グループ2のスーパーページ0のバンク1〜6に割り当てられる。
この時点で、最後のフラッシュ・グループに達したので(この単純化された例では)、次のストライプはフラッシュ・グループ0に書き込まれ、前のストライプが中断したところからまた始める。このようにして、フラッシュ・グループ0のスーパーページ0のバンク7に、LBA270〜284が書き込まれる。フラッシュ・グループ0において利用可能なスーパーページ0はもう存在しないので、ストライプの割り当ては、スーパーページ1のバンク0へと続けられ、スーパーページ1のバンク4まで続けられる。
この時点からのこの割り当ては、スーパーブロックの終わりに達して限界となる場合を除き、そのまま続けられる。例えば、新しいストライプは、フラッシュ・グループ0のスーパーページ1のバンク5から始められる。スーパーブロックには3つのスーパーページしか残っていないので、ストライプは、フラッシュ・グループ1のスーパーページ1のバンク5へと続けられる。このようにして、スーパーブロックが偶数のストライプを保持しないという事実にも関わらず、LBAは各スーパーブロックの全てのスーパーページに割り当てられる。
このLBA割り当て方法は、フラッシュメモリのパラレル処理を最大にする傾向がある。各フラッシュ・グループは互いに独立的に動作するので、フラッシュ・グループの全体に渡ってLBAをストライプすることは都合がよい。このことにより、1回のトランザクションで1つ以上のフラッシュ・グループに保持されたデータにアドレスする可能性を最大化することができ、それにより、前記トランザクションに関する複数のフラッシュ読出しまたは書込みを同時に行うことが可能となる。転送要求は、1つのフラッシュ・グループのLBAだけにしかアドレスすることができないので、トランザクションに要する転送要求の回数を最小限にするために、ストライプサイズを45のインクリメント(転送要求によってアドレすることができるLBAの最大数)に特定することが賢明である。現在の実施形態では、ストライプは、45ずつインクリメントされる2つのLBAから構成される(6つのスーパーページを表す)。後述するように、フラッシュ・グループは、5つの別個のバンクへの5つの書込み動作を同時に処理することができる。大量の転送は、各フラッシュ・ポートへの5つの書込みを同時に実行することができ、かつ複数のフラッシュ・ポートをパラレルに実行することができるので、90個のLBAのストライプサイズを使用すると、フラッシュ・インタフェースの並行使用を最大にする傾向がある。そのため、この構成は、高度の並行処理を行うことにより、ホストが開始する大量の読出しまたは書込みをSSDコントローラ106が素早く処理することを可能とする。
このようにして、図16に示すようなLBA0〜190を含む仮説的な転送を、1つのIOP及び5つの転送要求を用いて行うことができる。第1の転送要求はLBA0〜44を処理することができ、第2の転送要求はLBA45〜89を処理することができ、第3の転送要求はLBA90〜134を処理することができ、第4の転送要求はLBA135〜179を処理することができ、第5の転送要求はLBA180〜190を処理することができる。この転送には、3つの互いに異なるフラッシュ・グループが使用され、それにより高度な並行処理を可能となることに留意されたい。加えて、(後述するように)互いに異なるバンクを対象とするページ要求は、同じフラッシュ・グループにおいてでさえも、並行して行うことができる。従って、各転送要求から発されるページ要求は互いに異なるバンクを対象とすることができるので、この例では前記ページ要求をパラレルに行うことができる。
フラッシュ・グループへのLBAの割り当ては恒久的なものである。あるいは、フラッシュ・グループ内のバンクへの割り当ては、毎回変更することもできる。後述するように、ホスト書込み部がLBAを受け取った場合、そのLBAを含むスーパーページを無効にすることを要求し、新しいデータ(及びそのスーパーページからの任意の上書きされていない古いデータ)が新しいスーパーページに書き込まれ、フラッシュHEMiは、同じバンクからの新しいスーパーページを古いスーパーページとして使用しようとする。しかし、このことは不可能な場合もあり、その場合は、フラッシュHEMiはLBAを別のバンクのスーパーページへ移動させる。このことは、フラッシュメモリシステムの性能に影響を与える傾向がある。そのような変更が十分に行われた場合は、データのストライプが1つまたは比較的少数のバンクに集中するため、並行処理の機会が失われるからである。しかし、実際には、バンクからバンクへのシフトは、非パターン的に行われる傾向があるので、所定のストライプにおけるLBA群の大幅なオペレーションの後でさえも、バンクの全体に散在する傾向があるため、高度な並行処理は維持され得る。
III.ハードウェアの詳細
A.ホストインタフェース
図17は、図3に示したホストインタフェース310をさらに詳細に示す。ホストインタフェース310は、物理インタフェース1701と、ホスト・ポート0 104及びホスト・ポート1 105として示される2つのホスト・ポートとからなる。物理インタフェース1701の詳細については後述するが、ここでの説明では、物理インタフェース1701は、ホスト101及び102とホスト・ポート104及び105との間で信号をルーティングするためのものであると理解すれば十分である。各ホスト・ポートは、別個のホストとインタフェースすることが可能である。
一般に、ホストインタフェース310は、受信側で次の機能を実施する。
・フレームを受信する
・フレームを構成要素に分解する
・コマンド情報を次のページに渡す
・データをデータパスDRAMに渡す
一般に、ホストインタフェース310は、送信側で次の機能を実施する。
・データパスDRAM107からデータを受信し、ホストへの送信用のデータを編成する
・ホストへの送信用のフレームを生成する
・フレーム(データフレームを含む)をホストへ送信する
各ホスト・ポートは、受信HEMi(1702及び1703)、送信HEMi(1704、1705)、受信ステージバッファ(1706、1707)及び送信ステージバッファ(1708、1709)を含む。
図示のように、各受信HEMiは、複数のホストのうちの1つから物理インタフェース1701を介して制御情報を受信し、その制御情報をSSDコントローラ106の他の構成要素へ送信する。「制御」情報は、この文脈においては、コマンド、制御信号及びアドレスを意味するが、データは含まない。各受信HEMiがホストから受信した制御情報は受信HEMiから送信される制御情報とは互いに異なり得ることに留意されたい。
各送信HEMiは、SSDコントローラの他の構成要素から制御情報を受信し、その制御情報を物理インタフェース1701を介して複数のホストのうちの1つへ送信する。繰り返すが、HEMiからホストへ送信される制御情報は、送信HEMiが受信した制御情報とは互いに異なり得る。
各受信ステージバッファは、物理インタフェース1701を介して複数のホストのうちの1つからデータを受信し、そのデータをデータパスDRAM107へ送信する。受信ステージバッファは16キロバイトであり、最大で4つのFC_AL(「ファイバーチャネル・アービトレイテッド・ループ」)データフレームを受け取ることができる。
各送信ステージバッファは、データパスDRAM107からデータを受信し、そのデータを物理インタフェース1701を介して複数のホストのうちの1つへ送信する。送信バッファは4キロバイトであり、データパスDRAM107からの1つの出力フレーム及び1つの入力フレームをストアすることができる。
図18は、ホスト・ポート0 104に関する幾つかのさらなる詳細を示す。当業者には理解できるように、SDコントローラ106とホスト101との間の通信は、ホストが使用する特定のプロトコルの命令に従って編成される。一般に、従来のプロトコル(例えば、SAS、SATA、ファイバーチャネル)は、ホストとの間の通信がコマンド及びデータの規定群からなるフレームを用いて行うと規定している。
使用される的確なフレームフォーマットは、様々な従来のプロトコルによって異なるので、SSDコントローラ106は、各プロトコルに応じて改変する必要がある。しかし、SSDコントローラ106は、受信HEMi及び送信HEMi用の別のファームウェア及び別の物理的コネクタとするための改変が最小限で済むように設計されている。SSDコントローラ106の他の全ての側面は、様々なプロトコルに応じて変更されない。このことは、SSDコントローラ106のパイプライン型及びモジュール型のデザイン、そしてまたホストインタフェース310の前記デザインの重要な利点である。
フレーム編成の具体的詳細は、プロトコル・トゥ・プロトコルとは互いに異なるが、SATAプロトコルのいくかの側面はホスト・ポート0 104の設計及び動作を説明するために使用され得る。このプロトコルでは、フレームは、スタート・オブ・フレーム(「SOF」)プリミティブ、フレーム・ヘッダ(プロトコルにより指定されたメタデータであるが、一般的に、ペイロード及び場合によってはイニシエータを識別するために必要な情報を含む)、ペイロード(例えば、データ、コマンドなど)、フレーム全体の妥当性検査のためにCRC値、及びエンド・オブ・フレーム(「EOF」)プリミティブから構成される。ホスト・ポート0 104の受信側はフレームの受信に関与し、受信したフレームをその構成要素に分割し、データをその意図する目的地へルーティングする及び/またはトランザクションを設定するために必要とされる何らかの措置を講じる。ホスト・ポートの送信側は、SSDコントローラ106の他の構成要素から関連データ及びコマンド情報を受信することに関与し、その情報をホスト101への送信用のフレームにパッケージ化する。
ホストとの直接的通信には、米国カリフォルニア州ミルピタスに本拠地を置いているLSI社(LSI Corporation)から0.11ミクロンGigaBlaze(商標)Gflx(tm) xl Coreの名称で市販されている、トランシーバコアであるGigaBlaze1801が用いられる。このトランシーバコアは、8b/10bエンコーダ、シリアライザ/デシリアライザ及び、受信したビットと電圧レベルとの間の物理的転換を実施する物理{ぶつり}レイヤーを含む。GigaBlaze1801は、3G SATA、3G SAS、4g FC_AL及び4G FCバスへの取り付けが可能な2つのシリアルポートを有する。GigaBlaze1801の内部動作の詳細は、それがホストへの物理インタフェースを行うこと以外は、本明細書では関係ない。図示する例では、GigaBlaze1801はホスト101に接続されている。図18ではSSDコントローラ106の2つのホスト・ポートのうちの1つのみを示しているが、他方のホスト・ポートも全く同じでありGigaBlazeを有することに留意されたい。
図18に示すように、GigaBlaze1801はプリミティブ・マッチ・ロジック1802に接続されている。プリミティブ・マッチ・ロジックは、同一物理レベルのプロトコルが、フレーム及びプリミティブを別々に処理する様々な別のロジック・レベルのプロトコルとインタフェースすることを可能にするように設計されている。GigaBlaze1801がホスト101からプリミティブを受信すると、GigaBlaze1801は、そのプリミティブをプリミティブ・マッチ・ロジックへ送信する。プリミティブ・マッチ・ロジックの詳細は、図19に関連して後述する。
プリミティブ・マッチ・ロジックは、フレーム・ルータ1803を制御する。フレーム・ルータ1803は、GigaBlaze1801からフレームを受信し、プリミティブ・マッチ・ロジックの制御下で、そのフレームの一部を送信する。データは受信ステージバッファ0 1706へ送信され、ヘッダは非データ・ペイロードFIFO 1804へ送信され、プリミティブはインバウンド・プリミティブFIFO 1808へ送信される。
受信HEMi0 1702は、ヘッダ及びプリミティブFIFOの情報を使用し、取られるアクションを特定する。受信ステージバッファにルーティングされたデータは、DMA転送によってデータパスDRAM107へ送信される。
受信HEMi1702は、プリミティブを生成し、それをアウトバウンド・プリミティブFIFO1805へ送信する。これらの生成されたプリミティブには、ACK(フレームが正しく受け取られたことを知らせる)、NAK(フレームが正しく受け取られなかったことを示す)及びRRDY(フレームクレジットをイニシエータへ報告する)が含まれる。送信プリミティブFIFO1805のプリミティブは、直ちに、ホスト101への送信信号に挿入され、複数の他のトランザクション(例えば外部送信データフレーム)の中間に挿入され得る。
図18に示したホスト・ポートの送信側は、送信HEMi1704、送信ステージバッファ0 1708及び送信フレーム・バッファ1806から構成される。送信ステージバッファ0 1708は、データパスDRAM107から受信したデータを含む。前記データは、読出しコマンドに応答して、フレームの一部としてホスト101へ送信される。送信フレーム・バッファ1806は、フレームを構成するのに使用されるメタデータを保持する1若しくは複数のバッファからなる。送信フレーム・バッファは受信側バッファと同様に動作するが、送信フレーム・バッファはフレームを分解するのではなくフレームを構成するために使用されることを理解されたい。
カットスルー・ロジック1807は、SSDコントローラ106のファイバーチャネルネットワークへのインタフェースを助ける。SSDコントローラ106がファイバーチャネルネットワークに接続された場合、プリミティブ・マッチ・ロジック1802は、受信したプリミティブがSSDコントローラ106を対象としているか否かについて評価する。SSDコントローラ106を対象としていないと判断されたプリミティブは、カットスルー・ロジック1807へ送信される。カットスルー・ロジックはその後、ネットワークの次のノードへ送信するために、ファイバーチャネルネットワークへ戻るべくプリミティブをGigaBlazeへ送信する。
様々な互いに異なるプロトコル(SAS、SATA及びファイバーチャネル)に必要とされる複数の物理的コネクタは、互いに互換性がない。好適実施形態では、各プロトコルに対して互いに異なるバージョンのSSDコントローラ106が設けられることとなる。しかし、プリミティブ・マッチ・ロジックは各プロトコルについて正確に動作するので(下記参照)、互いに異なるファームウェアも受信HEMi及び送信HEMiのために必要であり得るが、各プロトコルに必要とされる唯一の違いは、互いに異なる物理的コネクタを使用することである。別の実施形態では、SSDコントローラ106には、各プロトコルに1つずつ対応する3つの互いに異なる物理的コネクタが含まれ、このことにより、任意のプロトコルに対して同一の物理的コントローラを使用することが可能となる。
プリミティブ・マッチ・ロジック1802の詳細が図19に示されている。このロジックは、一致したプリミティブ及び現在状態に基づいて、受信したプリミティブと特定された取られるアクションとを一致させる状態マシンを含む。
ホストから受信したプリミティブは、GigaBlaze1801からプリミティブ・ラッチ1901へ送信される。プリミティブはその後、16個のレジスタからなるプリミティブ・マッチ・レジスタ1902に含まれているビットパターンと一致させる。一致しなかった場合、プリミティブ・ラッチ1901からの値は、インバウンド・プリミティブFIFO1808へ直接的へ送信される。
プリミティブ・マッチ・コントロール・レジスタ1903は、16個のレジスタからなる(各プリミティブ・マッチ・レジスタに1つずつ)。プリミティブ・マッチ・コントロール・レジスタは、全体を一致させるために、関連するプリミティブ・マッチ・レジスタのどのビットがプリミティブ・ラッチ1901の値と一致するべきかを示すビットを含む。例えば、これらのビットは、任意の他のビットと一致することを必要としないが、最初のバイトと一致することを必要とする。プリミティブ・マッチ・コントロール・レジスタからのこれらのビットは、それ故にマスクとしての機能を果たし、複数の受信したプリミティブを単一のプリミティブ・マッチ・レジスタに一致させることを可能にする。このことは、受信したプリミティブのクラスに対して同じアクションが取られる場合は有用であり、また、プリミティブにおけるコマンドではなくデータを示す部分をスクリーンアウトする場合にも有用である。
プリミティブ・マッチ・コントロール・レジスタ1903における他のビットは、プリミティブ・マッチ・レジスタ1902における対応するレジスタの値がプリミティブ・ラッチ・レジスタ1901と一致した場合に取られるアクションを示す。例えば、これらのビットは、プリミティブに続くデータの幾つかが非データ・ペイロードFIFO1804に移動し、それに続くデータが受信ステージバッファ1706に移動するように、フレーム・ルータ1803を制御することができる。このことは、一般的に、データフレームに関連してSOFプリミティブを受信した場合に生じる。
プリミティブ・マッチ・コントロール・レジスタは、状態マシンとして動作する。例えば、幾つかのビットは、プリミティブ・マッチ・レジスタにより選択されたコントロール・レジスタではなくて現在のコントロール・レジスタによりその後の幾つかのプリミティブを引き起こすことができるカウンタ(図示せず)を設定することができる。加えて、プリミティブ・マッチ・コントロール・レジスタは、図示しない様々な他のレジスタに含まれる値を変更することができる。
プリミティブ・マッチ・ロジック1802は、プリミティブ・ラッチ1901とプリミティブ・マッチ・レジスタ1902との間で値を比較し、プリミティブ・マッチ・コントロール・レジスタ1903により要求される制御機能を実施するロジックを含むことを理解されたい。
図28に関連して後述するように、プリミティブ・マッチ・レジスタ1902及びプリミティブ・マッチ・コントロール・レジスタ1903は、データ・オーバレイを使用して、関連する受信HEMiによりロードされる。各プロトコルはそれ自身のプリミティブのセットを有するため、これらのオーバレイは、プリミティブ・マッチ・ロジック1802を互いに異なるプロトコル(例えば、SAS、SATA)に対してカスタマイズするために用いられる。加えて、オーバレイは、単一のプロトコル内で、互いに異なるプリミティブのセットまたは互いに異なる状態を処理するために使用することもできる。プリミティブ・マッチ・レジスタ及びプリミティブ・マッチ・コントロール・レジスタをロードするために受信HEMiにより使用される値は、初期ファームウェアコードをロードすることにより得られる。従って、多くの場合、ハードウェアを改変することなく、プリミティブ・マッチ・ロジック1802を新しいプロトコルのためにアップデートすること、または、受信HEMiファームウェアの改変により既存のプロトコルへ改変することが可能である。
プリミティブ・マッチ・ロジック内の互いに異なるオーバレイの使用は、各プロトコルのための個々のロジックを必要とすることなく、SSDコントローラ106が別のプロトコルに応答することを可能にする。
プリミティブ・マッチ・ロジック1802はまた、フレーム解読ロジック1904を含む。ロジック・ブロックは、フレーム内の初期のダブルワードを受信し、そのフレームの性質(例えば、データ、コマンド)を判断するために、そのダブルワードを評価する。フレームの種類に基づいて、フレーム解読ロジックはフレームを適切へ送信する。例えば、フレームがコマンド・フレームの場合、フレーム解読ロジックはフレーム全体を非データ・ペイロードFIFO1804へ送信し、フレームがデータフレームの場合、フレーム解読ロジックはヘッダ部分を非データ・ペイロードFIFOへ送信し、かつデータ部分を適切な受信ステージバッファへ送信する。
上述したように、プリミティブ・マッチ・ロジックは、ソフトウェアの変更またはハードウェアの大幅な変更を必要とせずに、SSDコントローラ106が互いに異なるフレームエンコードを含む互いに異なるプロトコルを処理できるという点で有益である。加えて、データFIFOはデータのみを含みコマンドまたはメタデータを含まないので、メタデータ及びコマンド情報が別のFIFO(例えば、非データ・ペイロードFIFO1804及びインバウンド・プリミティブFIFO1808)へ送信される間に、データを受信ステージバッファに含まれる特殊化されたデータFIFOにデータを送信することにより、受信ホスト・ポートの設計はデータのより効率的な転送を可能にすると共に、ヘッダ及びプリミティブメタデータに関しての受信HEMiの動作と並行して、DMA転送によってデータパスDRAMへデータを転送することを可能にする。これにより、システム性能全体を向上させることができる。
上述するように、SSDコントローラ106は、様々な互いに異なるプロトコルのために使用することができ、HEMiファームウェアの改変及び別の物理的コネクタのみを必要とする。上述したプロトコルは全て、互いに比較的類似している。SSDコントローラ106はまた、上述した大幅な差異を有するプロトコルに対して容易に適用することができる。一実施形態では、例えば、SSDコントローラ106は、PCIエクスプレスなどのレーンオリエンテッド型プロトコル用に構成することができる。当業者には理解できるように、PCIエクスプレス・システムでは、外部デバイスは、「複数のレーン」を使用してデータ及びメタデータを送受信する。複数のレーンの各々は、レーンを横切ってストライプされるデータのダブルワードにより、送信信号の一部を伝送する。レーンの数は実施依存的であるが、SSDコントローラは、2つのさらなるGigaBlaze(各GigaBlazeは、PCIエクスプレス・インタフェースのために設計されたバージョンであり得ることを理解されたい)、2つの追加の受信HEMi及び2つの追加の送信HEMiを追加することにより、4つのレーンPCIエクスプレス・システムにおいて使用できるように構成することができる。1つのGigaBlaze、1つの受信HEMi及び1つの送信HEMiが、各レーンに用いられる。この実施形態では、SCSI HEMi2001(下記参照)は使用されない。そのHEMiは、代わりに、追加のRdWr HEMiとして使用され得る。
この実施形態では、外部ホストで駆動するデバイス・ドライバは、PCIエクスプレス送信をIOPフォーマットにすることに関与する。ホスト・ポート・ロジックの大部分は、それ故に不要である(例えば、プリミティブ・マッチ、様々なFIFOなど)。受信HEMi及び送信HEMiは、データのデストライプまたはリストライプにそれぞれ関与する。受信IOPがデストライプされると、それは、RdWr HEMi(下記参照)へ直接的に渡される。その後、上述した他のプロトコルのように処理される。
PCIエクスプレスなどのレーン・オリエンテッド型プロトコルと共にSSDコントローラ106を使用する場合は何らかの追加的な改変を必要とするが、これらの改変は比較的小さいものであり、コントローラのモジュールのデザインの結果として容易に適用することができる。HEMi群の追加及び除去は比較的単純である、コントローラ・パイプラインの互いに異なる段階は互いに独立的に動作するため、ある段階(例えばホスト・ポート)の変更は、他の段階(例えばフラッシュ・ポート)の変更を必要としない。
SSDコントローラ106は、同様に、iSCSIプロトコルと共に使用するために設計することができるが、その場合は、ホスト・ポートに1若しくは複数のTCP/IPスタックと共に、そのスタックの抽出に関与する受信HEMi及びTCP/IPプロトコルに必要とされるフレーム情報のエンコードに関与する送信HEMiを追加することが必要である。
B.コマンドパーサ
図20は、図3に示したコマンドパーサ・ブロック311についてのさらなる詳細を示す。図3に関連して説明したように、コマンドパーサ・ブロック311は、ホスト・インタフェース310及びコマンド分配ブロック312に接続している。
コマンドパーサ・ブロック311は、SCSI HEMi2001を含む。SCSI HEMi2001は、受信HEMi1702及び1703からホスト・コマンドを受信する。SCSI HEMi2001は、ホスト・コマンドが読出し/書込みコマンドであるか、または他の種類のコマンドであるかを判定する。コマンドが読出し/書込みコマンド以外のコマンドであれば、SCSI HEMi2001は、非読出し/書込みコマンドを処理するARMプロセッサ2002にコマンド・オフを伝達する。ARMプロセッサ2002の詳細については後述する。
SCSI HEMi2001は、コマンドが読出し/書込みコマンドであると判定すれば、コヒーレンシを確実にするためにコマンドを有効にする。これは、読出しまたは書込みコマンドが、コマンド分配ブロック312が現在処理している読出しまたは書込みコマンドと同じデータに関連している場合に、第1のコマンドの特定の処理が完了するまで第2のコマンドが保留されることを意味する。
読出し/書込みコヒーレンシは、再オーダーされる読出し及び書込みを可能にするSCSIプロトコルには必要とされない。しかし、後述するように、SSDコントローラ106は、ホストにより開始されるコマンドを複数のサブオペレーションに分割し、これらのサブオペレーションはアウト・オブ・オーダー(順不同)で処理される。
SSDコントローラ106が同じデータに対して1つ以上のコマンドを実行することを許可する場合は、第1のコマンドが完了する前に、第2のコマンドの一部を実行させることが可能である。例えば、SSDコントローラ106が、LBAの特定のブロックに対しての書込みコマンドを受信した後にLBAの重複ブロックについての読出しコマンドを受信した場合、及び、書込みコマンドの終了前に読出しコマンドのオペレーションの開始が許可された場合、読出しコマンドは、書込みコマンドによって既にアップデートされた或るデータ及びアップデートされなかった或るデータをリターンさせることが可能である。
このため、SSDコントローラ106は、SCSI HEMi2001及びフラッシュHEMi群(後述)の2つの位置において、現在アクティブなコマンドを追跡する。
mRAMとして知られるHEMiの内部メモリ(図26に関連して後述する)にストアされたSCSI HEMiコマンド・テーブル2003は、SCSI HEMi2001からコマンド分配ブロック312へ送信されたがフラッシュHEMi群にはまだ送信されていないすべてのホスト読出し及び書込みコマンドのLBA及び転送長を含む。
後述するように、コマンド分配ブロックは、RdWr HEMiとして知られる幾つかのHEMiを含む。コマンド・テーブル2003は、各コマンドにより動作するRdWr HEMiの識別子を含む。SCSI HEMi2001は、この情報を用いて、RdWr HEMiの作業負荷のバランスを取り、比較的少数の現在アクティブなコマンドと共に新しいコマンドをRdWr HEMiへ送信する。
新しいコマンドを受信した場合、SCSI HEMi2001はコマンド・テーブル2003をチェックして、LBAアドレスのいずれか1つが既存のコマンドの影響を受けるか否かを判定する。一致が見つかった場合、SCSI HEMi2001は、前回のコマンドがテーブルから除去されるまで新しいコマンドの実行をストールする。コマンドを送り出すRdWr HEMiが、前記コマンドに対応する全ての必要な転送要求を生成し送り出しを報告すると(RdWr HEMiが後述する転送要求を送信する過程)、コマンドがコマンド・テーブル2003から除去される。この時点で、新しいコマンドは、もはやストールされない。この時点では初期コマンドは依然として実行されているが、そのコマンドはフラッシュHEMiレベル(後述する)でコヒーレンシチェックを受けることを理解されたい。
このように、SSDコントローラ106は、ホストコマンドのパイプライン型実行における2つの点で読出し/書込みコヒーレンシを実行する。SCSI HEMi2001は、既存のコマンドのLBA範囲と対立する新しいコマンドを、既存のコマンドがフラッシュHEMiへ送信されるまでストールする。そして、既存のコマンドが完了するまで既存のコマンドと同じ範囲をカバーする新しいコマンドの実行をストールするように、各フラッシュHEMiは、それ自身のオペレーションにおいてコヒーレンシを実行する。
相反するコマンドが前記パイプラインの別の段階で処理されている限りは相反するコマンドの処理を継続することができるので、コヒーレンシを二段階で実施するこのシステムは有利である。従って、RdWr HEMi群は、フラッシュメモリで作動される第1の相反するコマンドと同じ時点で、第2の相反するコマンドを設定することができ、このことにより全てのシステム性能を向上させることができる。
上述したように、コマンドパーサ・ブロック311はまた、特定の内部管理オペレーションを制御し、読出しまたは書込み以外のホスト開始コマンドの処理に関与するARMプロセッサ2002を含む。好適実施形態では、ARMプロセッサ2002は、英国ケンブリッジ所在のARMホールディングス社(ARM Holdings pic)から入手可能なARM7TDMiである。ARMプロセッサ2002の機能は、様々なロジック・デバイスによって処理されることができることを理解されたい。
ARMプロセッサ2002により処理されるホストコマンドの正確な性質はプロトコル依存性であるが、一実施形態では、これらのコマンドには、次のものが含まれる。
・テストユニット実行可能
・容量の読み取り
・モード選択
・モード検出
・ログ選択
・ログ検出
・報告ラン
・診断結果送信
・リクエスト検出
・バッファ書込み
・バッファ読出し
C.コマンド配布
図21は、コマンド分配ブロック312をより詳細に示している。図示のように,、コマンド分配ブロック312は、一群のRdWr HEMi(2101〜2106)から構成される。好適実施形態では、コマンド分配ブロック312は、6個のRdWr HEMiから構成される。しかし、SSDコントローラ106はモジュール型に設計されているので、RdWr HEMiの数はコントローラの残りの部分の大幅な再設計を必要とせずに増加または減少させることが可能である。RdWr HEMiの個数を増やすと性能を高めることができるが、コストが非常に高くなると共にシステムが複雑なものとなる。
図21に示すように、SCSI HEMi2001は、各RdWr HEMi群に情報を送信する。一般的に、これは、SCSI HEMi2001が、HEMiの他のRdWr HEMiに対する相対的な作業負荷に基づいて特定の特定のRdWr HEMi群に割り当てるCDB情報からなる。
RdWr HEMi群は、CDB情報に基づいてIOPを生成し、その後、IOPにより要求される転送要求を生成する。そして、それらの転送要求を、転送データのフラッシュ・アドレスに基づいて特定のフラッシュ・ポートへ送信する。RdWr HEMi群はまた送信HEMi群とも通信し、ホストが書き込んだ場合、関与するRdWr HEMiは、コントローラが前記書込みに関連するデータに対して準備ができていることを送信HEMiがホストに知らせるべきであるということを示す情報を送信HEMiへ送信する。
D.クロスバー;共有RAM;DRAM
これまでの図面は、データ及び制御フローの観点からの各機能ブロック間の相互接続を示しており、物理的な接続を示すことは試みていなかった。図22は、現在の実施形態において、SSDコントローラ106の機能ブロックの多くが物理的に接続されている様態を示す。
図22は、クロスバー・スイッチ2201を示す。当業者には一般的に理解できるように、クロスバー・スイッチは、スイッチの一方の側の任意の構成要素を、スイッチの他方の任意の要素に接続させるように動作する。クロスバー・スイッチは、後述するような様態で、HEMi側の構成要素を共有RAM側の構成要素と接続させる。
クロスバー・スイッチ2201のHEMi側は、SSDコントローラ106に含まれる各HEMiの2方向接続を有する(図22に示すHEMi群は、HEMiと各HEMiに関連する密結合ロジックとの組み合わせの実際である。ロジックの詳細は、本明細書の他の部分でさらに説明されている)。
本明細書の他の部分に説明されているように、HEMiの数は、実施決定に応じて異なり得る(例えば、コントローラは8ないし12のフラッシュHEMiを含み得る)。
現在の実施形態では、クロスバー・スイッチ2201の共有RAM側は、共有RAMバンク0(2202)〜共有RAMバンク7、グローバル・レジスタ2203及びPIOバッファ2204として示され集合的に共有RAMブロック318として示される、10個のRAMバンクに接続される。好適実施形態では、各共有RAMバンクは4キロバイトのRAMストレージ・スペースからなる。クロスバー・スイッチ2201は、多数の共有RAMバンクに接続されるように設計されており、それ故に、後述するように、モジュールの拡張性をサポートする。
上述したように、10個の共有RAMバンクの全てがアドレス・スペースを共有するが、それらのバンクの幾つかは特殊化された機能を有する。
図22に示したように、クロスバー・スイッチ2201は、各共有RAMバンクのためのポートを有する。各共有RAMバンクは4つのFIFO及び1つのデータ構造セクションを含み、各FIFOは、それに関連するFIFOレジスタ・ブロック(例えば、レジスタ・ブロック2205はFIFO0を制御し、ブロック2206はFIFO1を制御する。以下同様)によって制御される。
共有RAMポート0を共有RAMバンク0と接続する矢印により示されるように、共有RAMポート0は、共有RAMバンク0のFIFO0〜3またはデータ構造セクションへの単なる入力または出力経路である。前記経路は、関連するレジスタを介して、FIFOと接続される。後述するように、FIFOからの読出しまたはFIFOへの書込みは、関連するレジスタ・ブロックを介して実施される。一方、データ構造セクションからのみ出しまたはデータ構造セクションへの書込みは、関連するレジスタを介さずに行われる。
好適実施形態では、FIFOのうちの27個だけが実際に使用される(23個がHEMiワークリストに使用され、4個がフリーリストに使用される)。残りの5個は、本システムによりサポートされるHEMiの数を拡張するために利用可能である。
クロスバー・スイッチ2201のグローバル・レジスタ・ポート2207は、GigaBlaze1801の制御やDRAMコントローラ2305(図23と関連して後述する)のセットアップなどの様々な機能を実施する複数のレジスタから構成されるRAMバンクからなるグローバル・レジスタ2203に接続されている。
クロスバー・スイッチDRAMポート2208は、データパスDRAM107に接続されたPIO(「プログラムされた入出力(IO)」DRAMバッファ2204に接続されている。PIO DRAMバッファ2204は、共有RAMのバンクに含まれている64個のダブルワード FIFOであり、HEMi群とデータパスDRAMとの間の情報をバッファするのに使用される。データパスDRAMは、より速いクロック速度で実行され、一度に4つのダブルワードの読出し及び書込みができるが、HEMi群は一度に1つのダブルワードの読出し及び書込みしかできないので、このようなバッファは必要である。データパスDRAM動作が遅くなるのを防ぐために、PIO DRAMバッファ2204はDRAMとの間で転送されたデータをバッファする。HEMi群がデータパスDRAMにデータを書き込んだ場合、PIO DRAMバッファ2204は、書込みが完了するかまたはバッファが満杯になるまで(そうなった場合は、データをデータパスDRAMへバーストする)、データ、ダブルワードを一度にストアする。HEMi群がデータパスDRAMからデータを読出した場合、PIO DRAMバッファ2204は、データパスDRAMからのデータの4つのダブルワードを一度にストアし、必要なデータの全てが利用可能になると(または、PIOバッファが満杯になると)、HEMi群はバースト内のダブルワードのそのデータを一度に読み出す。繰り返すが、実際には、データはDRAMと複数のバッファのうちの1つとの間で転送されることを理解されたい。
クロスバー・スイッチ2201からPIOバッファ2204への接続は、データパスDRAMとフラッシュ・ポートのステージバッファとの間またはホストインタフェースと受信ステージバッファとの間のデータ転送のためには使用されず、その代わりに、HEMiとの通信のためにだけ使用されることに留意されたい。様々なステージバッファへのまたは様々なステージバッファからの転送は、クロスバー・スイッチ2201を介さずに行われる。
クロスバー・スイッチ・デバッグ・ポート2209は、デバッグFIFO2210に接続されている。デバッグFIFO2210は、HEMi群からのデバッグ情報のためのFIFOとしての役割を果たす大型のSRAMバンクである。デバッグFIFO2210は、HEMi群からダブルワードの情報を一度に受け取り、その情報を4ダブルワードの幅のFIFO構造にストアする。デバッグFIFO2210が或る設定された容量閾値に到達すると、DRAMポートへのアクセスを調停する。そして、アクセス権を取得すると、DRAM107へのデバック情報の書込み(4ダブルワード)を一度にバーストする。
クロスバー・スイッチでは一般的であるが、クロスバー・スイッチ2201は、HEMi側の複数の構成要素を共有RAM側の複数の構成要素に対して同時に接続することができる。接続は、各側のポート数によってのみ制限される。
クロスバー・スイッチ2201は、各HEMiを、各共有RAMバンクのみならずスイッチの共有RAM側の他のリソースに対しても接続することが可能である。しかし、スイッチは、HEMi群を互いに直接的に接続しないし、共有RAMバンクも互いに直接的に接続しないことを理解されたい。複数のHEMi間の通信は、共有RAMバンクに情報を残すために、クロスバー・スイッチ2201を使用して直接的に実施される。
従って(後述するように)、SCSI HEMi2001は受信したCDBの結果としてIOPを生成し、そのIOPをRdWr HEMiへ送信する。このことは、RdWr HEMi用のワークリストのIOP位置へポインタをストアしているSCSI HEMi2001により処理される。前記ワークリストはまた、共有RAMバンクFIFOのうちの1つにもストアされている。RdWr HEMiはその後、ワークリストをチェックすることによりIOPを受け取り、IOPに含まれている位置を特定し、そして、その位置からのIOPを自身の内部メモリにコピーする。他のHEMi群との間の通信は、同様にして行われる。共有RAMバンクに含まれるデータ構造の詳細及び、HEMi群がそのデータ構造を使用して情報を転送する様態は後述する。
DRAMアクセス・レジスタ・ブロック2211は、データパスDRAM107へのアクセスを制御する。上述したように、HEMi群はデータパスDRAM107には直接的にアクセスしないが、その代わりにこの目的のためにPIOバッファ2204を使用する。これらは、DMA転送であり、HEMiがアドレスの開始及び転送サイズのみを提供することを必要とする。
アドレス・レジスタ2212は、転送のために、データパスDRAM内の開始位置をストアする。転送カウント・レジスタ2213は、必要な転送カウント(回数)をストアする。データ・レジスタ2214は、PIOバッファ2204へ送信するデータまたはPIOバッファから受信したデータをストアする。
データパスDRAM107からの読出しは、HEMiがレジスタ2212内にDRAMアドレスを入力し、転送カウント・レジスタ2213に転送サイズ(クワッドワード〜ダブルワード)を入力することにより開始される。これらのアクションは、DRAM DMAエンジン2302(下記参照)がデータを4つのダブルワード・チャンクでPIOバッファ2204へ転送することを引き起こす。各転送が行われるとDRAM DMAエンジンは転送カウント・レジスタ2213をデクリメントし、転送カウント・レジスタ2213がゼロに到達したときにDMA転送は終了する。
DMA転送の完了後、データはダブルワード・インクリメントでPIOバッファからデータ・レジスタ2214へ自動的に読み出される。
HEMiからデータパスDRAM107への書込みも同様にして行われる。
アドレス・レジスタ2212のインクリメントは毎回転送カウント・レジスタ2213をデクリメントすることに留意されたい。DRAM DMAエンジンは初期アドレス及び転送カウントのみを必要とするので、このことは現在行われる転送に不要である。アドレス・レジスタ2212のインクリメントは、転送が完了すると、レジスタに保持されている転送用のアドレスを終了させる。このことは、今後の転送のセットアップに有用であり得る。
図23は、RAMコントローラ317を示す。一般に、RAMコントローラは、共有RAMブロック318及びデータパスDRAM107へのアクセスを制御及び調停する。
RAMコントローラ317は、次のロジック・ブロックを含む(他のハードウエア略図にも当てはまることだが、図23は概念的に説明するためのものであって、実際の物理的なレイアウトの詳細を説明するためのものではないことを理解されたい)。
・共有RAMコントローラ2301
・クロスバー・スイッチ2201
・DRAMコントローラ2305。米国カリフォルニア州パロ・アルト所在のデナリソフトウエア社(Denali Software, Inc)から購入した、データパスDRAM107への物理的インタフェースを管理するロジックから構成される。
DRAMコントローラ2305は、DRAM DMAエンジン2302を含む。DMAエンジン2302は、データパスDRAM107と、DRAMと通信する様々なバッファ(例えば、受信バッファ部1706、送信バッファ1708、フラッシュ・ステージバッファ308、PIOバッファ2204、デバッグFIFO2210)との間のDMA転送を処理する。DMAエンジン2302は、HEMiからDMA転送の開始アドレス及び転送カウントを受信し、HEMiから追加的な情報を必要とすることなく、そこからのDMA転送を制御する。
E2Eロジック2303は、図13に関連して上述したE2Eタグに関する3種類のタスクを実行する。
(a)フラッシュへ送信されるデータの各セクタにE2Eタグを取り付ける。
(b)タグ値を期待値に対してチェックし、両者の値が一致しなかった場合はエラー状態を生成する。
(c)イニシエータがそれらの値を使用しない(つまり、それらに期待しない)場合、ホストへ送信され戻されるデータからE2Eタグを取り外す。
データの各セクタに取り付けられるE2Eタグは、Refタグ1304、Appタグ1305及びCRC1306である。上述したように、E2Eをサポートするイニシエータからデータを受信した場合は、これらの値はイニシエータから受信した情報から取得または前記情報に基づいて計算され、E2Eをサポートしないイニシエータからデータを受信した場合は、これらの値は内部で生成される。
E2Eロジック2303は、Refタグ、AppタグまたはCRCの値をチェックすることができる。これらのチェックは、図13に関連して上述した。E2Eロジック2303は、これらのチェックを、データパスDRAM107とフラッシュ・ステージバッファとの間でデータが転送されたときか、あるいはデータパスDRAM107と受信バッファまたは送信バッファとの間でデータが転送されたときに実行する。イニシエータがE2Eをサポートしない場合を除いて、イニシエータはこれらのフィールドのどれがチェックされたかを特定する。イニシエータがE2Eをサポートしない場合、チェックは、ユーザが初期設定したパラメータに基づいて行われる。イニシエータがE2Eをサポートしない、かつユーザがチェックの実行を要求しない場合でも、Refタグ値は、内部エラーをチェックする目的で常にチェックされることに留意されたい。
E2Eロジック2303は、データパスDRAM107からフラッシュ・ステージバッファへ送信されるデータの各セクタにE2Eタグを取り付ける。図13に関連して上述したように、イニシエータがE2Eをサポートする場合は、Refタグ情報はイニシエータから供給された情報から取得される。イニシエータは、Refタグがデータの各セクタについてイクリメントされるように要求することができる。その場合、Refタグを取り付ける前に、E2Eロジック2303がインクリメントオペレーションを実行する。イニシエータがE2Eをサポートしていない場合、E2Eロジック2303は、LBAをRefタグ・フィールド1304に挿入する。イニシエータがE2Eをサポートしている場合、Appタグ及びCRCフィールドには、イニシエータから供給された情報が記入される。イニシエータがE2Eをサポートしていない場合、Appタグにはデフォルト値が記入され、初期設定時にユーザにより選択されたオプションに基づいて、CRCフィールドにはデフォルト値または内部計算されたCRC値のいずれかが記入される。
DRAMスケジューラ2304は、データパスDRAM107へアクセス可能な全てのチャネルの順序付けられたリストから構成される。これらのチャネルについては、図25に関連して後述する。DRAMは入/出力ポートを1つしか有していないので、一度に1つのチャネルにしかアクセスできない。DRAMスケジューラ2304は各チャネルを順に回り、そのチャネルがDRAMへのアクセスを要求しているか否かをチェックし、要求されている場合は、そのチャネルのDRAMポートへの接続を可能にする。そのアクセスが完了すると、DRAMスケジューラ2304は、前記リストに載っている次のチャネルへ移動する。このようにして、DRAMスケジューラ2304は、DRAMポートへのアクセスをラウンドロビン方式で調停する。
図24は、共有RAMコントローラ2301及び、共有RAMコントローラ2301に含まれるレジスタ・ブロックと共有RAMに含まれるFIFOとの間の関係の特定の態様を示す。具体的には、図24は、共有RAMバンク0 2202に含まれるFIFO0〜3と相互に関連する、FIFOポインタ・レジスタ2205、2206、2401及び2402を示す。共有RAMコントローラ2301は、1共有RAMバンクあたり4つのポインタ レジスタ・ブロックを含むので(合計で32個含む)、それらの幾つかは未使用でもよい。明瞭化を目的として、共有RAMコントローラ2301における、バンク0以外の共有RAMバンクを制御する部分は図示していないことに留意されたい。
図23に図示したように、FIFO0ポインタ・レジスタ2205は、共有RAMバンク0 2202に含まれているFIFO0(2403)に関連付けられている。ポインタ・レジスタ2205は、次のレジスタ2404〜2408から構成される。
ベース・レジスタ2404は、FIFO2403のために設けられた共有RAMバンク2202の一部の一方の境界を構成する共有RAMバンク2202内のアドレス位置へのポインタを含む。シーリング・レジスタ2405は、FIFO2403のために設けられた共有RAMバンク2202の一部の他方の境界を構成する共有RAMバンク0内のアドレス位置へのポインタを含む。これらのレジスタは、FIFO0の位置及びサイズを規定する。好適実施形態では、初期設定時に設定され、オペレーション中は変更されない。代替実施形態では、これらの値は動的にリセットされ、そのことにより、共有RAMバンク2202内のスペースのより効率的な割り当てを可能にするが、コストが高くなり複雑さも増す。
FIFO2403は、先入れ先出し(First-In, First-Out)型のメモリ構造である。従って、最も新しく挿入されたエントリを表すトップと、最も古いエントリを表すボトムとを有する。FIFO2403は、ラップアラウンドし、現在のトップの位置及び現在のボトムの位置は使用中に変わる。
トップ・レジスタ2406は、FIFO2403の現在のトップを構成する共有RAMバンク2202内のアドレス位置へのポインタを含む。ボトム・レジスタ2407は、FIFO2403の現在のボトムを構成する共有RAMバンク2202内のアドレス位置へのポインタを含む。
カウント・レジスタ2408は、FIFO2403内における現在アクティブな構成要素の数を表す値を含む。これと同じ情報は、トップ・レジスタ2406とボトム・レジスタ2407とを比較することにより得ることができるが、計算することなく入手可能なこの情報を有することにより性能の利点が得られる。カウント・レジスタ2408は、FIFO2403にアイテムが追加されたときに自動的にインクリメントされ、アイテムが除去されたときに自動的にデクリメントされる。
図24に示すように、共有RAMコントローラ2301はまた、FIFO1〜3に対応する、FIFOポインタ・レジスタ2206、2401及び2402を含む(個々のレジスタについては図示しない)。
共有RAMバンク0はまた、データ構造1409も含む。図41に関連して説明するように、共有RAMには、イニシエータ・テーブル、CDB情報テーブル、IOPテーブル、転送要求テーブル及びグローバル変数などの、様々な非FIFOデータ構造がストアされている。
各フリーリスト及びそれに関連するテーブルは、同一の共有RAMバンクにストアする必要があることに留意されたい(図41に関連して後述する)。
共有RAMコントローラ2301はまた、クロスバー・アービトレーション・ロジック2410を含む。上述したように、クロスバー・スイッチ2201は、各HEMiに対して1つのポートを有し、それらのポートを8つの共有RAMポート(各共有RAMバンクに対して1つ)、グローバル・レジスタ、デバッグFIFO及びデータパスDRAMに接続する。このことは、共有RAM及びDRAMポートへアクセスするためのHEMi群(この実施形態では23個のHEMi)の間で調停する幾つかの手段を必要とする。
この調停は、クロスバー・アービトレーション・ロジック2410により処理される。このロジックは、2つ以上のHEMiが同一のポートへのアクセスを要求した場合に、HEMi群の間で調停するために、フェア(fair)な調停アルゴリズムを使用する。好適実施形態では、この調停はラウンドロビン方式で行われ、ポートへのアクセス権を直前に得たHEMiから開始し、アクセスを所望する第1のHEMiに到達するまでHEMi群を通じてカウントし、最も高い数字のHEMi(この実施形態ではHEMi22)からへHEMi0へラッピングアラウンドする。従って、HEMi5及び10が特定の共有RAMポートへのアクセスを必要とする場合、そのポートへのアクセス権がある直前のHEMiはHEMi15である。クロスバー・アービトレーション・ロジック2410が15からカウントアップし、22に達した後はラッピングアラウンドするので、HEMi5にはアクセス権が与えられる。HEMi5は第1のHEMiとなり、ポートへの要求されるアクセスに達する。様々な他の調停アルゴリズムが使用可能であることを理解されたい。
クロスバー・アービトレーション・ロジック2410はまた、ポートへのアクセス権を獲得したHEMiが要求した場合に、ポートをしっかりと保持するするための機構を含む。これは、HEMiが、中断すべきではないトランザクションを終了させることを可能にする。
図24に示した設計は、単一のフラッシュ・ポートを一度に追加することによりシステムの容量を増加させることができるので、モジュールの拡張性を可能にすることに留意されたい。そのためには、フラッシュ・ポート、フラッシュメモリ及びフラッシュHEMiの追加、並びに(HEMiワークリスト(下記参照)を保持するために)追加された4つのHEMiに1つずつ共有RAMを追加することに加えて、各共有RAMについて4セットのFIFOポインタ・レジスタを追加することが必要である。共有RAMの追加はまた、追加的なCDB情報、IOP及び転送要求に割り当て可能なスペースを追加する。加えて、クロスバー・スイッチ2201に新しい共有RAMポートを追加することは、比較的容易である。
この種類の拡張は、新たに追加されたバンクにデータを分散させるために、共有RAMバンクのレイアウトの若干の再設計を必要とするが、このことは、共有RAMバンクの初期化に使用されるデータを改変することにより処理することができる。HEMiファームウェアのHEMiは変更する必要がない。
このモジュールデザインは、任意のソフトウエアまたは主要ハードウエアの変更を必要とすることなく、2つないし3つのフラッシュ・ポートを含む単純なシステムから最大で23個のフラッシュ・ポートを含むより大きなシステムへの拡張を可能にする。従って、2つないし3つのHEMiのみを含む安価なワークステーションデザインまたはより大きなシステムに、同じアーキテクチャを使用することができる。
共有RAMコントローラ2301はまた、共有RAMブロック318へのアクセスのためにHEMiにより使用される、共有RAMアクセス・レジスタ・ブロック2411を含む。ブロック2411は、次のレジスタを含む。
共有RAMアドレス・レジスタ2412は、共有RAM内に、アクセスの対象であるダブルワードのアドレスを含む。このアドレスの高次ビットは、選択する特定の共有RAMバンクを示し、低ビットはそのバンク内の位置を示す。
共有RAMデータ・オートインクリメント(Autoinc)・レジスタ2413は、アドレス・レジスタにストアされているアドレスから読み出されたまたは前記アドレスに書き込まれるダブルワードのデータを保持する。共有RAMデータ・オートインクリメント・レジスタを使用することにより、アドレス・レジスタ2412の値は自動的にインクリメントされる。読出しのときは、アドレス・レジスタ2412は、データがレジスタ2413にコピーされたときに、インクリメントする。書込みのときは、アドレス・レジスタ2412は、データがレジスタ2413から書き出されたときに、インクリメントする。
このオートインクリメント・レジスタは、データのDMA型ブロック転送の前に、リピート・カウント・レジスタ2702(図27に関連して説明する)と共に使用される。必要とされる転送カウントはリピート・カウント・レジスタ2702に書き込まれ、初期アドレスはアドレス・レジスタ2412に書き込まれる。データ・オートインクリメント・レジスタ2413は、その後、リピート・カウント・レジスタに示された反復回数だけ読出しまたは書込みを繰り返す。各繰り返しにより、次のアクセスが共有RAM内の次のダブルワードとなるように、アドレス・レジスタ2412をインクリメントする。
共有RAMデータ・レジスタ2414は、データ・オートインクリメント・レジスタと同じ機能を行うが、アドレス・レジスタ2412のインクリメントは行わない。レジスタ2414は、同一メモリ位置への多重アクセスに使用される(例えば、変数を読出し、それを改変する)。
マップナンバー(Mapnum)・レジスタ2415は、共有RAMブロック318内のFIFOのうちの1つを選択するのに使用される。
トップ・レジスタ2416、アペンド・レジスタ2417、プッシュ・レジスタ2418及びポップ・レジスタ2419は各々、ダブルワードのデータを保持する。これらのレジスタは、マップナンバー・レジスタ2415によって選択されるFIFOへの4つの互いに異なる種類のアクセスに使用される。HEMiは、FIFOにおけるトップの値の位置を変更することなくFIFOのトップからの値を読み出すことができるか、またはFIFOからのトップの値を「ポップ」することができ、それにより、FIFOトップがFIFOの次の値をポイントする。これらのオペレーションにより、戻ってきた値を、トップ・レジスタ2416またはポップ・レジスタ2419にそれぞれ書き込むことができる。
HEMiはまた、新しい値がFIFOの新しいトップになるように、FIFOの値を「プッシュ」するか、またはFIFOのボトムに値を加えることができる。これらのオペレーションのために、書込みデータがHEMiによりプッシュ・レジスタ2418またはアペンド・レジスタ2417へそれぞれ配置される。
FIFOのトップまたはボトムに情報を配置する能力は、さらなる柔軟性を提供する。例えば、このことは、より重要なタスクをワークリストのトップに配置し、あまり重要でないタスクをボトムに配置することを可能にする。
図25は、データパスDRAM107との間の入力パス及び出力パスを示す。現在の実施形態では、SSDコントローラ106は、DRAMへのアクセスを要する18個のリソース(構成による)、最大で12個のフラッシュ・ステージバッファ(FSB0 308、FSB1 314及びFSB11 2501として示される。1〜11のフラッシュ・ステージバッファは明瞭化の目的のために図示していない。上述したように、特定の実施形態ではSSDコントローラ106は12個未満のフラッシュ・ポートを有し得、それ故に、12個未満のフラッシュ・ステージバッファを有し得る)、PIOバッファ2204、デバッグFIFO2210、受信ステージバッファ0 1706、送信ステージバッファ0 1708、受信ステージバッファ1 1707及び送信ステージバッファ1 1709を含み得る。
これらのリソースとデータパスDRAMとの間の経路は、本明細書では「チャネル」と呼ばれる。各リソースは、必然的に物理的な送信経路によってDRAMに接続されるが、チャネルは概念的なものであり、実際のバス構造を必ずしも反映するものではないことを理解されたい。
現在の実施形態では、データパスDRAM107は、DRAMポート2502として表される単一の入/出力ポートを有するが、この目的のために使用され得る他のメモリはそれよりも多い数のポートを有し得る。上述したように、DRAMスケジューラ2304はチャネル間で調停を行い、DRAMポート2502へのアクセスが必要なチャネルに対して、アクセス権をラウンドロビン方式で割り当てる。代替実施形態では、他の調停スキームを使用することができる。例えば、転送されているデータの種類に応じてアクセスの優先順位を決めることができる。または、DRAMへのリソース探索アクセス(例えばデバッグFIFO2210)を、フラッシュ・ステージバッファへのアクセス以下の優先順位に設定することができる。
図25は、スイッチ2503により行われる、チャネルとDRAMポート2502との間の接続を示す。DRAMスケジューラ2304の制御下で動作することにより、スイッチ2503は、1回につき、複数のチャネルのうちの1つをDRAMポート2502へ接続する。図25に示す矢印は、接続の方向を示す。例えば、フラッシュ・ステージバッファ308は、DRAMからの読出しまたはDRAMに書込みをすることができ、デバッグFIFO2210は、DRAMに書き込むことはできるがDRAMから読み出すことはできず、送信バッファ1708は、DRAMから読み出すことはできるがDRAMに書き込むことができない。
スイッチ2503は概念的なものであり、必ずしも、単一の大きなスイッチを表すものではない。代わりに、この機能を、様々な位置に配置された多数のロジック・ゲートから構成してもよい。この機能の正確な物理的デザインは、実施によって異なる。
チャネルがDRAMポート2502へのアクセス権を得た場合、チャネルとDRAMとの間の移動は、それぞれ4つのダブルワードからなる転送から構成されるバーストを発生させる。このバーストは、読出しまたは書込みが完了するまで、またはチャネルに接続されたリソースが満杯になる(DRAMからの転送の場合)か、または空になる(DRAMへの転送の場合)まで継続される。バーストか終了したら、スイッチ2503によってそのチャネルはアクセス権を失い、DRAMスケジューラ2304はアクセス権を必要とする次のチャネルへのアクセス権を与える。
E.HEMi群
上述したように、SSDコントローラ106は、本明細書ではHEMi群(HEMi’s)と呼ばれる多数のプロセッサを含む。本明細書では、「プロセッサ」または「マイクロプロセッサ」は、少なくとも基本的な算術演算及び/または論理演算を実行可能なALU、データを保持するプロセッサに固有のメモリ及び、ALUの動作を制御するコントロール・ロジックを含むあらゆるロジック・ブロックを指す。コントロール・ロジックは、ハードウェア、ソフトウェア及び/またはファームウェアから構成される。本明細書では、「HEMi」は好適実施形態において用いられる特定のプロセッサを指すが、内部HEMiのデザインの多くの詳細は本明細書では重要ではなく、明瞭化の目的のために省略されていることを理解されたい。加えて、このHEMiデザインは、好適プロセッサ実施形態を構成するが、他の様々なプロセッサデザインが可能である。
現在の実施形態では、SSDコントローラ106は、以下に示す、最大で23個のHEMi群を含み得る(この実施形態では、ナンバリングシステムはギャップを含むことに留意されたい)。
HEMi 0:ホスト・ポート0(1702)用の受信HEMi
HEMi 1:ホスト・ポート0(1704)用の送信HEMi
HEMi 2:ホスト・ポート1(1703)用の受信HEMi
HEMi 3:ホスト・ポート1(1705)用の送信HEMi
HEMi 8:SCSI HEMi(2001)
HEMi 9〜14:RdWr HEMi群(2101〜2106)
HEMi 15〜26:フラッシュHEMi群(例えば、307、309、313)
HEMi群の内部機能の特定の態様を、図26を示す。好適実施形態では、全てのHEMi群が同一のハードウェア要素を共有しているが、様々なファームウェア・オーバレイを使用することにより及び別の密結合要素に接続することにより(両方とも詳細については後述する)、様々な機能のためにカスタマイズすることができる。
各HEMiは、1,000の56bit VLIW命令を実行するためのファームウェアを保持可能な命令RAMであるiRAM2601を含む。これらの各命令は、1〜2の共有RAMまたはレジスタの位置を読み出し、ALUを実行し、その結果をライトバック(write back)または分岐させることができる。
後述するように、データパスDRAM107は、各種類のHEMiについて、最大で8つの異なるファームウェア・オーバレイをストアする。これらのオーバレイは、実行される機能に基づいて必要とされたときに、iRAM2601にコピーされる。このことは、各HEMiが、ファームウェアがiRAMのサイズにより制限される場合に、可能な命令の数よりも多い数の命令を実施することを可能にする。
HEMiの命令は、16ビットのアドレスに基づいてフェッチされる。そのアドレスの3ビットは、ファームウェア・オーバレイを選択し、13ビットはiRAM2601内の命令のアドレスを構成する。フェッチされている命令の3ビットのファームウェア・オーバレイがiRAM2601に現在ストアされているオーバーレイと一致しない場合、ファームウェア・スワップがトリガーされる。
一般に、ファームウェア・オーバレイのスワッピングは、共通タスクの実行に必要な命令をサポートするファームウェアを一緒にまとめることにより避けることができる。例えば、単一のファームウェア・オーバレイは、読出し及び書込みに必要な共通するオペレーションの大部分を処理することができる。他のファームウェア・オーバレイは、例えば初期化及び誤り訂正を処理する。
各HEMiはまた、HEMiにより使用されるデータのストレージ・スペースとしての役割を果たす、2キロバイトのmRAM2602を含む。
図26に示すように、各HEMiは、フェッチ・ステージ2603、バッファ・ステージ2604、デコード・ステージ2605、リード・ステージ2606、ALUステージ2607及びライトバック・ステージ2608から構成される6ステージのパイプラインを含む。好適実施形態ではこれらの各ステージはHEMi内のロジック・ブロックを構成するが、代替実施形態では各ステージはその状態の生成に使用されるオーバーレイング・プロセッサ・ハードウェアから独立してHEMi状態を表すことができる。
フェッチ・ステージは、実行される命令に関連するファームウェアのiRAMアドレスを判断する。そのアドレスはその後、フェッチ・ステージ2603とiRAM2601との間の矢印によって示されるように、iRAMへ送信される。
そのアドレスでのファームウェアはその後、iRAM2601とIバッファ・ステージ2604との間の矢印によって示されるように、バッファにロードされる。
前記ファームウェアはその後、デコード・ステージ2605へ伝達される(Iバッファ・ステージ2604とデコード・ステージ2605との間の矢印によって示されるように)。デコード・ステージは、前記命令をデコードし、ジャンプ及びコールを実行する。また、デコード・ステージは、ジャンプ及びコールをフェッチ・ステージ2603へ送り戻す(デコード・ステージ2605からフェッチ・ステージ2603への矢印によって示されるように)。直線的な命令を実行する場合は、デコード・ステージ2605はリード・ステージ2606へパラメータを送信する。これらのパラメータは、要求されたオペレーションのためにデータを検索すべき位置を含む。
リード・ステージ2606は、命令からの要求に応じて、1または2のメモリ若しくはレジスタ位置を読み出す。2つの位置を読み出す場合は、リード・ステージ2606の出力からその入力へループバックされる矢印によって示されるように、リード・ステージ2606は繰り返される。外部リード2609からリード・ステージ2606を指す矢印により示されるように、情報のためのソースには、RAM2602及び外部メモリまたはレジスタが含まれる(概念的に外部リード2609によって示される)。図26には図示しないが、情報はまた、内部レジスタからも入力される。
リード・ステージ2606は、HEMiのALUによるオペレーションのために、取得した情報をALUステージ2607へ送信する。そのオペレーションの結果は、フェッチ・ステージ2603(条件付き分岐{ぶんき}の場合)またはライトバック・ステージ2608へ送信される。
ライトバック・ステージ2608は、ALU動作の結果を、前記命令に指定された位置に書き込む。ライトバック・ステージ2608から延びる矢印によって示されるように、結果はmRAM2602または外部リソースへ書き込まれる(外部ライト2610により概念的に示す)。
図27は、図26に図示していないHEMiの態様を示し、様々なメモリ範囲アクセスに使用されるレジスタ及び、HEMiに密結合したロジック(密結合ロジックブロック2701)を含んでいる。HEMi及び密結合ロジックの両方は、レジスタ及び本明細書中では示されていない他の構成要素を含み得ることを理解されたい。加えて、レジスタセット自体は、説明の目的のために単純化されている。
図27は、フラッシュHEMi307及びその密結合ロジック・ブロック2701を示す。上述したように、全てのHEMi群の内部デザインは同じである。しかし、互いに異なる種類のHEMi群は、互いに異なる密結合ロジック・ブロックを有する。ブロック2701は、フラッシュHEMi群に特有のものである。他の種類のHEMi群のための密結合ロジックの差異は後述する。
HEMi307は、オペレーションを繰り返すべき回数を計算するのに使用される値を保持するリピート・カウント・レジスタ2702を含む。或る値をリピート・カウント・レジスタにロードすると、HEMiにより実行され特定の回数繰り返される次回の命令が生成される。各繰り返しは、リピート・カウント・レジスタ内の値をデクリメントする。
様々な状況下で、リピート・カウント・レジスタ2702の値が「1」になると、ループは終了する。
(a)リピート・カウント・レジスタの結果により条件付き分岐命令がループされ、分岐が行われるように状態が発生する場合、リピート・カウント・レジスタは自動的に、次回の命令を一度に行わせる「1」にされる。この条件付き分岐の場合は、この次回の命令は、分岐における第1の命令となることを理解されたい。
(b)リピート・カウント・レジスタに関連するフラグが設定された場合、特定のFIFOカウント・レジスタをゼロから1までインクリメントする任意のアクションが、リピート・カウント・レジスタの値を1にする。FIFOカウント・レジスタは、HEMi(例えば、図24に関連して説明したカウント・レジスタ2408)及び受信バッファ・カウント・レジスタ(図28に関連して後述する)のためのワークリストに関連するものである。
この機能は、HEMi群が実行すべきタスクを有する場合に、HEMi群をスリープ・モードから復帰させるのに使用される。HEMi群が実行すべき作業を有していない場合、HEMi群はスリープ・モードに入り、NOP(ノーオペレーション命令)が、設定された回数繰り返される。そして、HEMiが復帰すると、そのワークリストをチェックし、ワークリストにタスクが存在しない場合は、NOPの実行を再開する。これは、設定回数をリピート・カウント・レジスタ2702にロードし、その後、NOPを実行させることにより実現される。
HEMiがスリープ・モードの場合、HEMiのワークリスト(下記参照)へタスクを書き込むと、HEMiが復帰する。このことは、関係のあるカウント・レジスタから信号によりリピート・カウント・レジスタ2702を「1」にしてHEMiを復帰させ、次回のNOPが実行された後に適切な行動を取らせることにより実現される。
リピート・カウント・レジスタを使用してNOPを繰り返すことにより、特別なスリープ・モード・ロジックを必要とせずに、HEMiを低電力スリープ・モードにさせることが可能となる。加えて、このことにより、HEMiをスリープ・モードのままにする期間を非常にきめ細かい精度で調節することが可能になる。例えば、現在実施すべき作業がないためにHEMiがスリープ・モードに入った場合、最大値がリピート・カウント・レジスタに書き込まれる好適実施形態では、この値は、100万を若干超えた値であり、HEMiは約4ミリ秒の間スリープ・モードに維持される。
別の例では、HEMiが多重または分割されたオペレーションを開始する場合、オペレーションが32のHEMiサイクルを行うように、リピート・カウント・レジスタを使用して32NOPを実行することができる。このことにより、後述するように、HEMiの他の部分のオペレーションとは独立的に動作することができるロジックにより処理される多重または分割されたオペレーションの結果を待ちながら、HEMiが低電力スリープ・モードに入ることが可能となる。
さもなければコードのループが遮断されるので、上述したフラグは、NOPを実行する場合にリピート・カウント・レジスタを1にするために使用されることに留意されたい。この理由により、リピート・カウント・レジスタの後にNOPが行われる場合はフラグが設定されるが、他の命令のためには設定されない。
HEMi307はまた、HEMi群のiRAM2601及びmRAM2602へのアクセスを制御するローカル・レジスタ・ブロック2703を含む。
ローカル・アドレス・レジスタ2704は、ローカル・メモリ内にアドレスを保持する。このアドレスは、iRAMまたはmRAMのいずれかであり得、アドレスの高次ビットに依存する。ローカル・データ・オートインクリメント・レジスタ2705は、ローカル・メモリから読み出されたまたはローカル・メモリへ書き込まれるデータのダブルワードを保持する。このレジスタからの読出しは、ローカル・アドレス・レジスタ2704のインクリメントを引き起こす。ローカル・アドレス・レジスタ2704への値の書込み、リピート・カウント・レジスタ2702への値のロード、及び、mRAMからレジスタ2705へ及びレジスタ2705から別の位置への移動の実行(これらの移動は1つの命令により実行される)により、HEMiはmRAM内の連続するアドレスからの一連のダブルワードのDMA様の移動を実行することができる。各ループは、レジスタ2704の自動的なインクリメント及びリピート・カウント・レジスタ2702の自動的なデクリメントを引き起こし、前記移動は、リピート・カウント・レジスタ2702がゼロになるまで継続される。ターゲットがデータ・オートインクリメント・レジスタを同様に使用する場合、追加的なロジックまたは命令を必要とせずに、前記移動はターゲット内の連続的なアドレスに再びストアされることに留意されたい。
ローカル・データ・レジスタ2706は、ローカル・メモリから読み出されたまたはローカル・メモリに書き込まれるデータのダブルワードを保持するが、このレジスタはアドレスのインクリメントは引き起こさない。
ARM2002は、専用ポートを経由して、ローカル・レジスタ・ブロック2703と通信する。ARM2002は、iRAM2601に対応するローカル・アドレス・レジスタ2704にアドレスを書き込むことができる唯一のソースである。ARM2002は、この機能を使用して、iRAM2601に新しいファームウェアをオーバーレイする処理を制御する。
HEMi307はまた、各々が1つのアドレスをHEMiのmRAM2602内に保持する5つのレジスタからなるウィンドウ・レジスタ2707を含む。これらのレジスタのうちの4つは、それぞれ128のダブルワードからなるウインドウをmRAM内にセットアップするのに使用される。これらのウィンドウは、転送要求やページ要求などのデータ構造を作動させるために使用される。例えば、ページ要求を実行するためにフラッシュHEMiが必要とされる場合、そのページ要求のmRAM内のアドレスが、ウィンドウ・レジスタのうちの1つにロードされる。ページ要求の特定の領域へのアクセスは、その後、ウィンドウ・レジスタ内の値とのオフセットとして処理することができ、それにより、データ構造に繰り返しオペレーションが要求される場合のアドレス計算過程が単純化される。
5番目のウィンドウ・レジスタはmRAMスタックのために使用され、ローカル変数及び関数の独立変数をストアする。このスタック・ウィンドウ・レジスタは、他の4つのウィンドウ・レジスタと同様に動作するが、HEMi群が特別なスタック関連命令を有し、スタック・ウィンドウ・レジスタ内の値を自動的にインクリメントまたはデクリメントし、スタック・ウィンドウ・アドレスへオフセットを自動的に追加する機能を提供し、それにより1つのクロック・スタック動作を可能にする点が異なる。
ローカル・レジスタ・ブロック2703及びウィンドウ・レジスタ2707を含むHEMi群の内部レジスタは、「ハザードチェック」されている。HEMiはパイプライン型プロセッサなので、書込み動作がそのような保護をすることなく移動オペレーションをすぐに実行する場合、その書込みは実質的に移動後に行われる。従って、書込み命令がレジスタ内への値の書込みであり、そのすぐ後の命令がレジスタの内容を別の位置へ移動させる場合、パイプラインは書込み前にレジスタの古い内容を移動させることができる。ハザードチェックは、そのような場合をチェックし、その後の命令を、適切なデータがロードされるまで遅延させることにより、この可能性を避ける。
乗/除算エンジン2717は、多重及び分割オペレーションを実行するのに使用される。乗/除算エンジンは、HEMiの残りの部分に対して独立的に動作することができるので、HEMiは、実行される値を乗/除算エンジン2717内のレジスタに書き込んだ後に、オペレーションが実行されるまでスリープ・モードに入ることができる。このことにより電力が節約される。スリープ・モードについては後述する。
手動CRCエンジン2719は、関連するHEMiにより書き込まれる情報のためのCRC値を生成する。
スイッチ・エンディアン・エンジン2720は32ビット・レジスタであり、レジスタに書き込まれたデータのバイト順を自動的にスワップする。このことは、互いに異なるプロトコルが互いに異なるバイト順を有するために行われる。データはフラッシュにリトルエンディアン形式でストアされるが、特定のプロトコルの場合は、ビッグエンディアン形式で送受信する必要がある。
各HEMiはまた、密結合ロジック・ブロック2701などの関連する密結合ロジックのブロックを有する。密結合ロジック・ブロック2701は、各フラッシュHEMiに密結合されたロジックを示す。後述するように、ロジック・ブロックは、密結合ロジック・ブロック2701とは幾つかの点で互いに異なる別の種類のHEMi群に密結合される。従って、全てのHEMiの内部デザインが同一であるにも関わらず、互いに異なる密結合ロジックの使用に加えて互いに異なるファームウェアを使用することにより、各種類のHEMiをその特定のタスクのためにカスタマイズすることが可能となる。
密結合ロジック・ブロック2701は、HEMi307に「密結合」されているリソースからなる。これは、HEMi307が、アドレス・スペースを共有するこれらのリソースにアクセスできる唯一のであることを意味し、これらのリソースへのアクセスは、ノー・ウェイト(待ち時間なし)状態で引き起こされる。
好適実施形態では、密結合ロジックはHEMiの外部に設けられるが、代替実施形態では、このロジックの一部または全部をHEMi自体に組み込むことができる。
密結合ロジック・ブロック2701は、フラッシュHEMi(例えばフラッシュ・ステージバッファ308)に関連するフラッシュ・ステージバッファへのアクセスを制御するステージバッファ・アクセス・レジスタ・ブロック2708を含む。
アドレス・レジスタ2709、データ・レジスタ2710及びデータ・オートインクリメント・レジスタ2711は、共有RAMアクセス・レジスタ・ブロック2411内の対応するレジスタと同様に動作する。
フラッシュHEMi群は、ステージバッファへのこのアクセス経路を利用して、ステージバッファを通過するとき及び予期せぬ電力損失後に必要とされる再構築の間に(再構築の過程は図58に関連して後述する)、スーパーブロック・メタデータ・テーブル内にストアされているタイムスタンプ情報を改変する。
フラッシュ転送カウント・レジスタ2712、フラッシュ・アドレス・レジスタ2713及びフラッシュ・データ・レジスタ2714は、フラッシュ・グループとフラッシュ・ステージバッファとの間のDMAオペレーションを制御する。レジスタ2713は、アクセスすべきフラッシュ・アドレスを含む。レジスタ2712は、読出しまたは書込みのダブルワードのカウントを含む。レジスタ2714は、フラッシュから受信したまたはフラッシュへ送信するデータを含む。
DMAアドレス・レジスタ2715及びDMA転送カウント・レジスタ2716は、データパスDRAM107とステージバッファとの間でのDMA転送のステージバッファ側を制御するのに使用される。レジスタ2715は、転送用のステージバッファ・アドレスを保持し、レジスタ2716は、ステージバッファとPIOバッファとの間の転送のダブルワードのカウントを保持する。レジスタ2716への値の書込みは、ステージバッファとPIOバッファとの間でのDMA転送を引き起こす。
一般に、HEMiは、内部移動コマンドを使用して、内部ロケーション、密結合ロジック及び特定の外部ロケーションの間でデータを移動させることができる。従って、例えば、新しいファームウェア・オーバレイが必要な場合、ARMプロセッサ2002は、オーバレイ用のDRAMアドレスをDRAMアドレス・レジスタ2212に設定し(後述するように、ファームウェア・オーバレイはDRAMにストアされている)、オーバレイ用のiRAMアドレスをローカル・アドレス・レジスタ2704に設定し、DRAMからの転送カウントを転送カウント・レジスタ2213に設定し、そして、転送に必要なダブルワードの数をリピート・カウント・レジスタ2702に設定する。DRAMからPIOバッファを介したデータ・レジスタ2214へのDMA転送は、上述したようにして行われる。内部HEMiロジックは、レジスタ2214からローカル・データ・オートインクリメント・レジスタ2705へのデータの書込み及び、ローカル・アドレス・レジスタ2704により指示されるレジスタ2705からiRAM位置への書込みを引き起こす。リピート・カウント・レジスタ2702はその後デクリメントされ、前記プロセスが繰り返される。ARM2002はこの機能を、初期ファームウェア・オーバレイを各HEMiのiRAMにロードする時間をブートするのに使用する。
別の例を挙げると、共有RAMからHEMiのmRAMへのIOPのコピーは、4つのHEMiコマンドのみを必要とする。
共有RAMアドレス・レジスタに共有RAMアドレスを書き込む;これは、共有RAMのIOPのアドレスをレジスタ2412に書き込む。
ローカル・アドレス・レジスタにmRAMアドレスを書き込む;これは、IOPがストアされるmRAM内のアドレスをレジスタ2704に書き込む。
リピート・カウント・レジスタに、IOPのダブルワードの数を書き込む;これは、リピート・カウント・レジスタ2702に、IOPに含まれるダブルワードの数をロードする。
ローカル・データ・オートインクリメント・レジスタ、共有RAMデータ・オートインクリメント・レジスタを移動させる;これは、レジスタ2413からレジスタ2705へ値を移動させる。レジスタ2413内の値は、レジスタ2412によりポイントされる共有RAM内のダブルワードである。その値のレジスタ2705への移動は、アドレス・レジスタ270によりポイントされたmRAM位置への転送により引き起こされる。2つのデータ・オートインクリメント・レジスタの自動的な特定は、移動が生じたときにインクリメントさせられる関連するアドレス・レジスタにより引き起こされる。上述したように、この移動命令は、リピート・カウント・レジスタの値のゼロになるまで繰り返される。
このようにして、HEMiは、最低限の数のコマンドで自動的に行われるDMA様のアクセスを実現することができる。
密結合ロジック・ブロック2701はまた、デバッグ・レジスタ・ブロック2718を含む。デバッグ・レジスタ・ブロック2718は、デバッグFIFO2210への及びデバッグFIFO2210からの転送に関するレジスタを含む。
上述したように、密結合ロジック・ブロック2701は、フラッシュHEMi群に対して特有である。密結合ロジック・ブロックは、他のHEMi群と関連するが、ステージバッファ・アクセス・レジスタ・ブロック2708とは関連しない。
受信HEMi群及び送信HEMi群(例えば受信HEMi0 1702及び送信HEMi0 1704)用の密結合ロジック・ブロックは、ホスト・ポート・オペレーションをサポートするようにデザインされた追加的なレジスタを含む。そのようなレジスタは、図28に示されている。
受信HEMi群用の密結合ロジック・ブロックは、ホスト・ポートとの通信のために及びホスト・ポートに関連する受信機能を制御するために使用される以下のレジスタを含む。
受信バッファ・アクセス・レジスタ・ブロック2801:これは、受信ステージバッファからデータパスDRAM107へのDMA転送を設定するのに使用される。このブロックは、転送用のDRAMアドレスを保持するDMAアドレス・レジスタ2802と、実行すべき転送カウントを保持するDMA転送カウント・レジスタ2803とを含む。
受信バッファ・カウント・レジスタ2804:これは、受信ステージバッファ データFIFOのエントリの数を与える。或る値をこのレジスタに書き込むと、受信HEMiをそのスリープ・モードから復帰させることができる。
プリミティブFIFOアクセス・レジスタ・ブロック2805:この1組のレジスタはインバウンド・プリミティブFIFO1808と通信する。これらのレジスタは、トップ・レジスタ2806(FIFOのトップを変更することなく、FIFOから読み出される)、ポップ・レジスタ2807(FIFOからトップアイテムを読み出し、FIFOのトップを次のアイテムに移動させる)、カウント・レジスタ2808(FIFO内のアイテムの数を含む)及びアペンド・レジスタ2809(FIFOのエンドにアイテム追加する)を含む。
非データ・ペイロード・アクセス・レジスタ・ブロック2810:この1組のレジスタは非データ・ペイロードFIFO1804と通信する。これらのレジスタは、プリミティブFIFOアクセス・レジスタ・ブロックにおける同様に名付けられたレジスタと同様に動作する、トップ・レジスタ2811、ポップ・レジスタ2812、カウント・レジスタ2813及びアペンド・レジスタ2814を含む。
ヘッダ・サイズ・レジスタ2815:これは、現在ヘッダの長さを示す。この値は、受信HEMiが、非データ・ペイロードFIFO上で或るヘッドとその次のヘッダとを区別することを可能にする。
プリミティブ・マッチ・レジスタ・ブロック2816:これらのレジスタは、特定のプロトコルのためにプリミティブ・マッチ・ロジックをカスタマイズするために、値をプリミティブ・マッチ・ロジック1802へロードするのに使用される。プリミティブ・マッチ・ロジック1802の使用及びカスタマイズは、図19に関連して上述した。
上述したように、プリミティブ・マッチ・ロジック1802は、プリミティブ・マッチ・レジスタ1902及びプリミティブ・マッチ・コントロール・レジスタ1903の2セットのレジスタを含む。プリミティブ・マッチ#レジスタ2817は、プリミティブ・マッチ・ロード・レジスタ2818にストアされたプリミティブ・マッチ・レジスタ1902内の対応するレジスタへロードされる値、及び、リミティブ・マッチ・コントロール・ロード・レジスタ2819にストアされたプリミティブ・マッチ・コントロール・レジスタ1903内の対応するレジスタにロードされる値を生成する、各セットの16個のレジスタのうちの1つを指す。
WWNハッシュ・エンジン2830を使用して、受信した64ビットのワールドワイドネーム値の24ビットのハッシュが生成される。このハッシュは、受信したフレーム(送信者のWWNの24ビットのハッシュ値を含み得る)が、64ビット値を含むイニシエータ・テーブル4108(下記参照)と一致するように内部で使用される。
図28は、ユニークな送信HEMi密結合レジスタを示す。
送信バッファ・アクセス・レジスタ・ブロック2820:これは、データパスDRAM107からのDMA転送の送信ステージバッファ側のセットアップに使用される。このレジスタ・ブロックは、DMAアドレス・レジスタ2821及びDMA転送カウント・レジスタ2822を含む。
送信フレーム・バッファFIFOアクセス・レジスタ・ブロック2823:この1組のレジスタは、送信フレーム・バッファ1806の一部であるFIFOと通信する。これらのレジスタは、ポップ・レジスタ2824、カウント・レジスタ2825及びアペンド・レジスタ2826を含む。
コマンドFIFOアクセス・レジスタ・ブロック2827:この1組のレジスタは、送信フレーム・バッファ1806の一部であるFIFOと通信する。これらのレジスタは、カウント・レジスタ2828及びアペンド・レジスタ2829を含む。
図29は、フラッシュHEMi(例えばHEMi307)のmRAMの内容を示す。
1.ローカル転送要求テーブル2901。これは、最大で6つの転送要求を保持するスペースを含む。これらは、共有RAMからこのフラッシュHEMiのmRAMへコピーされた転送要求と、ガベージ・コレクション(下記参照)などの内部オペレーションに関連して取得されたローカル転送要求との組み合わせであり得る。例えば、スロット2902は、1つの転送要求をストアすることができ、スロット2903は1つの第2の転送要求をストアすることができる。
2.ローカル転送要求キュー2904。これは、テーブル2901にストアされている転送要求のFIFOキューであり、フラッシュHEMiにより動作されるまでキューに入れられる。後述するように、一般に、転送要求に関連するページ要求が完了したときに及び転送要求それ自体が完了状態に入る準備ができた際に、転送要求はこのキューを受ける。
3.ローカル転送要求フリーリスト2905。これは、空であり、それ故に新しい新しい転送要求を保持することができるローカル転送要求テーブル2901内のスロットへのポインタのリストを保持する。
4.ページ要求テーブル2906。最大で18のページ要求を保持するためのスペースを含む。各転送要求は、3つのページ要求を呼び出すことができる。そのため、ページ要求テーブル2906は、フラッシュHEMi転送要求テーブル2901に適合させることが可能な6つの転送要求により呼び出されることができる18のページ要求のためのスペースを含む。図示した例では、ページ要求テーブル2906は、フラッシュHEMi転送要求テーブル2901、スロット2902内の転送要求のためのページ要求を保持するスロット2907及び2908内にページ要求を含み、スロット2909内のページ要求はスロット2903内の転送要求のためのものである。この例では、他のページ要求・スロットは空であり、これは、スペースが割り当てられているが現在は有効なページ要求によって満たされていないことを意味する。
5.ページ要求フリーリスト2910。これは、ページ要求テーブル2906における全ての空いている(現在有効なページ要求を保持していない)ページ要求スロットのリストである。このリストはそれ故に、フラッシュHEMiが命令することができる新しいページ要求を表す。
6.バンク・キュー2911。これは、テーブル2906にストアされているページ要求の1組のFIFOキューである。フラッシュ・グループ内の各バンクに対して互いに異なるページ要求が存在する。ページ要求の実行の準備が整ったら、読出しまたは書込みのためにページ要求が要求されるアドレスを保持するバンク・キューのエンドに付け加えられる。フラッシュHEMiは、バンク・キューの間で順番に交代する。ページ要求を含むバンク・キューにローテートした場合、ページ要求の継続的な実行に不可欠なリソースが利用可能であるかどうかを判断するために、トップのページ要求をキュー上で評価する。リソースが利用可能である場合、フラッシュHEMiは、利用可能なリソースを与えることが可能なページ要求に必要とされるタスクを実行し、その後、次のバンク・キューへローテートする。このようにして、フラッシュHEMiは、調停ロジックと必要とせずに、ページ要求をラウンドロビン方式で処理する。処理を完了したページ要求は、バンク・キューから除去される。このプロセスの詳細は、図53に関連して後述する。
現在の実施形態では、バンク・キューはFIFOであり、ページ要求は受信した順に処理される。代替実施形態では、優先順位の高いページ要求が、バンク・キューのボトムではなく、バンク・キューのトップに追加される。この実施形態では、特に重要なトランザクションを特定する呼び出し転送要求における優先順位ビットに基づいて、優先順位のビットがページ要求に設定され得る。
8.スーパーブロック・フリーリスト2912。これは、空いておりそれ故に書込みに利用可能なこのフラッシュHEMiにより制御されるフラッシュ・グループに含まれるスーパーブロックのための識別子を含む。
9.スーパーブロック・フリーリスト・カウンタ2913。これは、フリーリスト2912上のスーパーブロックの数を含む。この数は、性能の最適化のために別々に記録され、必要に応じて計算する必要はない。
10.オープン・スーパーブロック・ポインタ2914。これは、現在書込みオープンしているスーパーブロックのための指定を保持する。
11.ガベージ・コレクション閾値2915。現在の実施形態では、これは、両方ともガベージ・コレクションの目的のために使用されるリティカルな閾値及び非クリティカルな閾値の2つの変数を保持する。ガベージ・コレクションでのこれらの変数の使用は後述する。
12.ローカル変数2916。現在の実施形態では、これは、HEMiにより使用される様々なローカル変数を保持する。
13.スタック・スペース2917。これは、タスクを処理するためにHEMiにより使用されるスタックを保持する。
14.コマンド・テーブル2918。これは、コマンドと、現在にフラッシュHEMiにより処理されている全ての転送要求により影響を受けるLBA範囲とのリストを保持する。
上述したように、SSDコントローラ106は、それらのオペレーションが順番通りに行われるのを確実にするために、読出し/書込みコヒーレンシを実施する。フラッシュ・ポート・レベルでのコヒーレンシを実施するために、コマンド・テーブル2918がフラッシュHEMiにより使用される。フラッシュHEMiのワークリストから転送要求がポップし、ローカル転送要求テーブル2901にコピーされた場合、転送要求の影響を受けるLBA範囲はコマンド・テーブル2918に対してチェックされる。オーバーラップが存在する場合、初期の転送要求が完了するまで転送要求の実行がストールされ、その時点では、エントリがコマンド・テーブル2918から除去され、後の転送要求が除去されるまで保留される。フラッシュHEMiでの実行のために転送要求がクリアされると、その転送要求により影響を受けるLBA範囲がコマンド・テーブル2918に追加される。
15.スーパーページ・ポインタ・リスト2919。このリストは、このフラッシュHEMiに関連するフラッシュ・グループの各バンクについて1つのエントリを含む。各バンクについて、関連するエントリは、現在開いているスーパーブロックの次の空きスーパーページを指す。スーパーブロックが最初から開いておりデータを含んでいない場合、バンク1〜7はスーパーページ0を指し、バンク0はスーパーページ1を指す(各スーパーブロックのバンク0のスーパーページ0は、スーパーブロック・メタデータ・テーブルを含み、それ故に通常の書込みには利用できない)。
フラッシュHEMiは、これらのカウンタを使用してスーパーページを書込みコマンドを含むページ要求に割り当てる。それ故に空のスーパーページが必要となる。スーパーページにページ要求を割り当てた場合(ページ要求の初期化中に起こる)、そのスーパーページを含んでいるバンクのためのスーパーページ・ポインタ・リスト2919内のエントリがインクリメントされる。
リスト2919は、一実施形態では、オープン・スーパーブロック2914の情報と同一のデータ構造に含まれ得ることに留意されたい。
16.バンク・ビットマップ2920。このテーブルは、各バンクに対して2つのビットを保持する。一方のビットは、バンク・キューのトップでのページ要求が、バンクの動作を必要とするか否かを示す。他方のビットは、バンクのためのRB信号がレディ状態であるか否かを示す。フラッシュHEMiは、このビットマップをチェックして、ページ要求のサービスを開始するべきか否かを判断する。
共有RAMへアクセスするための共有RAM・アクセス・レジスタ・ブロック2411の使用は、図30に示されている。図30は、共有RAMからのデータブロックの転送(例えば転送要求)に用いられる一連ステップを示す。
ステップ3001では、共有RAM内の所望のデータのアドレスが、共有RAMアドレス・レジスタ2412に書き込まれる。この例では、これは、転送要求テーブル4111(下記参照)における転送要求のアドレスである。
ステップ3002では、データが転送されるHEMi mRAMアドレスが、ローカル・アドレス・レジスタ2704に書き込まれる。この場合、アドレスは、ローカル転送要求テーブル2901内の空のスロットを指す。
ステップ3003では、転送の完了に必要なダブルワードの数に対応する値が、リピート・カウント・レジスタ2702に書き込まれる。
ステップ3004では、HEMiは、共有RAMから共有RAMデータ・オートインクリメント・レジスタ2413への読出しと、レジスタ2413からローカル・データ・オートインクリメント・レジスタ2705への読出しとを引き起こすコマンドを実行する。共有RAMからの読出しは、共有RAMアドレス・レジスタ2412内に特定されたアドレスで行われる。ローカル・データ・オートインクリメント・レジスタへの読出しは、ローカル・アドレス・レジスタ2704により特定されたmRAM内のロケーションへのデータの書込みを引き起こす。2つのデータ・オートインクリメント・レジスタの使用は、それぞれのアドレス・レジスタの自動的なインクリメントを引き起こす。このコマンドの実行は、リピート・カウント・レジスタ2702のデクリメントを引き起こす。このHEMiデザインは、このステップを1回の命令で処理することを可能にすることに留意されたい。
ステップ3005では、リピート・カウント・レジスタ2702が0の値を含んでいるか否かをチェックする。
リピート・カウント・レジスタ2702の値が0(ゼロ)であった場合(ステップ3005の結果が「yes」)、転送は完了したと判断して、処理を終える。
リピート・カウント・レジスタ2702の値が0(ゼロ)を超える値であった場合(ステップ3005の結果が「no」)、これは、さらなる転送が必要であることを示す。その場合、次のダブルワードの転送のためにステップ3004へ戻る。
ステップ3004と3005との間のループは、フラッシュHEMiのさらなる介入なしに連続することに留意されたい。アドレス・レジスタと、実行命令の繰り返しを行わせるリピート・カウント・レジスタのインクリメントとは、HEMiがデータをDMA様バーストで素早くかつ効率的に転送することを可能にする。
F.ECC処理
SSDコントローラ106は、フラッシュメモリ・モジュール108にデータが書き込まれるかまたは読み出されるとき、誤り訂正符号(「ECC」)情報を生成してチェックする。(上記したように、データパスDRAM107も内部ECC機能を有するが、SSDコントローラ106はこの機能を制御せず、エラーが報告された場合にのみデータパスDRAM107とインタフェースをとり、SSDコントローラ106にエラー・メッセージを発行させる。)
ECCプロセスは図31に示されており、図31はフラッシュ・ポート0 304を示す。上記したように、フラッシュ・ポート0は、フラッシュHEMi0 307及びフラッシュ・ステージバッファ0 308を含み、フラッシュ・グループ0 301に接続されている。
図31はまた、ECC訂正エンジン3101を示す。上記したように、SSDコントローラ106は複数のフラッシュ・ポートを含み、各フラッシュ・ポートは関連付けられたフラッシュ・グループを有する。しかし、この実施形態では、SSDコントローラ106は1つのECC訂正エンジンしか含まず、それはフラッシュ・ポート間で共有される。1つのECC訂正エンジンしか存在しないので、フラッシュHEMiがECC訂正エンジンを必要とするとき、フラッシュHEMiは先ずECC訂正エンジンがビジーであるか否かチェックしなければならない。ECC訂正エンジンがビジーでなければ、フラッシュHEMiはそれを使うことができる。ECC訂正エンジンがビジーであれば、フラッシュHEMiは、そのIDを、グローバル・レジスタ2203(図22を参照)に含まれるECC訂正FIFOに加えなければならない。当該FIFOは、ECC訂正エンジンへのアクセスを必要とする全てのフラッシュHEMi群の順序付きリストを含む。HEMiは、そのIDがFIFOのトップに来たとき、ECC訂正エンジンへのアクセスを勝ち取る。
別の実施形態では、SSDコントローラ106は、2つ以上のECC訂正エンジンを含み得、最大ではフラッシュ・ポートの数だけECC訂正エンジンを含み得る。この実施形態は、コスト及び複雑さを増大させるが、大量のエラーが訂正されなければならない場合により高速な性能を可能にする。この実施形態では、フラッシュHEMi群は、ECC訂正エンジンへのアクセスを待つ必要がない。他の代替実施形態では、所与の数のフラッシュ・ポート(例えば2または4)に対して1つのECC訂正エンジンがあることがある。
図31に示すように、フラッシュ・ポート0 304は、ECCロジック3102を含む。ECCロジック3102はさらに、ECC生成部3103及びECCチェック部3104からなる。
ECC生成部3103は、或るデータの或るセクタのための複数のECCビットを一度に生成する。ECC生成部3103がECCビットを生成するのは、フラッシュ・ステージバッファ308とフラッシュ・グループ301間でデータが転送されるときである。ステージバッファからフラッシュ・グループへの書込みのとき、ECC情報はデータと共にストアされ、ECC情報はSPageセクタのECCフィールド1303(図13を参照)にストアされる。フラッシュ・グループからステージバッファへの読出しのとき、ECC情報は、後述するようにECCチェック部3104によって使用される。
好適実施形態では、ECC生成部3103は、1セクタ当たり12個のECC符号を生成するので、ハミング・アルゴリズムを用いて1セクタ当たり12のECCバイトを用いる。これはストレージに20バイト弱を必要とし、SPageセクタECCフィールド1303が20バイトからなるのはこのためである。1セクタ当たりの生成されるECCの量は、初期化時に設定されるECCロジック3102内のレジスタに基づいてプログラム可能である。代替実施形態では、ECCサイズを0に設定し、他のフィールドが占める空間を配置換えまたは削減することによって、SPageセクタのサイズを小さくすることを可能にし、その結果、各スーパーページが16個のセクタを保持する(従って、16個のLBAを処理する)ことができるようになる。
フラッシュ・グループ301からデータが読み出されるとき、ECC生成部3103は、各セクタに対して新しい1組のECCビットを生成する。ECCチェック部3104は、次に、新たに生成されたECCビットとECCフィールド1303の内容とを比較する。この比較の結果は、フラグを用いて伝えられ、フラグは、ECCビットがマッチしたことかまたはエラーが発見されたことのいずれかを示す。ECC情報を生成及びチェックする方法は、当分野で公知であり、本明細書では詳しく説明しない。
ECCチェック部3104がECCエラーを発見すると、フラッシュHEMi307は、セクタ・データ及びメタデータ(ECCフィールド1303を含む)をステージバッファ308からECC訂正エンジン3101にコピーする。ECC訂正エンジンは、ECCフィールド1303の内容を用いて、フラッシュ・グループ301への書込みまたは読出し中にデータ内に取り込まれたエラーを訂正しようと試みる。この場合もやはり、ECC訂正プロセスの詳細は当分野で公知であり、本明細書には記載しない。好適実施形態では、ECC訂正エンジンは、約20バイトのECC情報に基づき、1セクタ当たり12個のエラーを訂正することができる。
ECC訂正エンジン3101がデータの訂正に成功すると、フラッシュHEMi307は、ECC訂正エンジン3101からの出力を受け取りし、それをステージバッファ308にライトバックする。訂正データは、次に、ホストへの最終的な送信のために用いられる。(上記の図27に関連する説明から理解されるように、2つの転送が関わっているが、HEMi構造は、データの各ダブルワードを、1つのHEMi命令を用いてECC訂正エンジン3101からステージバッファ308へ転送させる)。エラーの数が多すぎてECC訂正エンジン3101が訂正できない場合には、2次誤り訂正プロトコルが呼び出される。このプロトコルは、2つの段階を有する。第1段階では、フラッシュ・グループからステージバッファへの読出しが1回または複数回繰り返され、同じセクタについて誤り訂正サイクルを再び開始する。このことが行われる理由は、エラーが、1つの状態と別の状態の間の閾値にあるセルによって発生することがあり、再読出しが追加の有効ビットを生成し得るからである。2度目(またはその後)にECC訂正エンジンがデータを訂正することができる場合には、訂正がなされ、物理セクタは「バッド」と印が付けられ、データは別のセクタに再書込みされる。
2次誤り訂正プロトコルの第2段階では、データは繰り返し読み出され、以前の読出しと一緒にORされる。OR演算の結果、いずれかの読出し中にビット位置で「1」に遭遇すると、たとえそれより前か後の読出し中に当該ビット位置における値が「0」として読み出されても、当該「1」は維持されることになる。この方法が用いられる理由は、フラッシュメモリのエラーが一般にフラッシュ・セルからの電荷の漏洩によって発生し、セル内の値が「1」ではなく「0」として読み出される(例えば読出しディスターブ)ようにするからである。漏洩は、0と1の間の中間電荷レベルを有するセルをもたらし得るので、異なる読出しは、異なる戻り値をもたらし得る。ORプロセスは、読出しから受信するIの数を最大にする。ORプロセスが設定回数完了したら、値はECC訂正エンジン3101に戻され、データの訂正が今現在可能か否かが判定される。
ORプロセスは、実際にデータの破損を増加させ得るが、それは、当該破損がセルにおける電荷増加によって発生した場合においてであり、その結果、「0」値は断続的に「1」として読み出される。しかし、これは比較的稀なケースであるが、2次誤り訂正(ORなしで読出し)の第1段階が機能しなかった後にのみORプロセスを用いるのは理にかなっている。
ECC訂正エンジン3101が最終的にデータを訂正することができなければ、フラッシュHEMiはエラー・メッセージを発行し、エラー・メッセージはホスト・ポートを通ってデータに関連付けられたイニシエータに送信される。
好適実施形態では、エラーの数が閾値を超えない限り、訂正データはフラッシュにライトバックされない。閾値は、訂正可能なエラーの数(好適実施形態では、1セクタ当たり12)から、追加のエラーが後続の読出しのときに取り込まれる可能性に基づいて計算されるガードバンドを引いた値値に基づいて設定される。好適実施形態では、発明者は、セクタ読出しで見つかるエラーの数が当該セクタの直前の読出しで見つかるエラーの数よりも3つ多い(または3つ少ない)とは思えないと判断した。それゆえ、例えば、或る読出しで、セクタが3つの訂正可能なエラーを有するならば、次の読出しで、セクタは6個またはそれ以下の訂正可能なエラーを有する可能性が高い。
この挙動が意味するところは、或るセクタが或る読出しで9つまたはそれ以下の訂正可能なエラーを有するとすれば、次の読出しでそのセクタは12個またはそれ以下のエラーを有する可能性が高いということであり、エラーは次の読出しで訂正可能であることを意味していることを理解されたい。これは、今度は、訂正データをフラッシュにライトバックしなくてよいことをする。そのような書込みを避けることは重要である。というのも、フラッシュへの訂正データの書込みは、スーパーページ全体の再書込みの必要があるからである。
この実施形態では、後続の読出しで訂正不可能なエラーが見つかる可能性をさらに抑えるために、ガードバンドは3ではなく4に設定される。それゆえ、読出しで見つかる訂正可能なエラーの閾値は8に設定される。8つより多いエラーが発見されたら、書込みハンドラが呼び出され、セクタを含むスーパーページは訂正データを含めてフラッシュに再書込みされる。8つより少ないエラーが発見されたら、スーパーページは再書込みされない。というのも、エラーの数は尚も次の読出しで訂正可能であると見込まれているからである。
代替実施形態では、エラーを含むスーパーブロックは、優先的なガベージ・コレクションに対して識別され得る。というのも、特定のセクタにおけるエラーの存在は、隣接セクタもエラーを含むことを意味するからである。優先的なガベージ・コレクションは、ある程度の非効率性を含んでいる。というのも、選択されたスーパーブロックは、恐らくは、優先なしに選択されたであろうスーパーブロックよりも多くの有効データを含むことになるが(後述するガベージ・コレクションの説明を参照)、この非効率性は、エラーを含むことが分かったスーパーページを直ちに再書込みすることによって強いられる非効率性よりもずっと低いからである。
IV.メタデータ構造
A.DRAM構造
図32は、データパスDRAM107に見つかるデータ構造を示しており、各データ構造は、システムの初期化時に作成されかつ初期化される。これらは、次の構造を含む。
フォワード・テーブル3201。これは、LBAアドレスとフラッシュメモリ・アドレスとの翻訳に用いられる。このテーブルについては、図33に関連してさらに詳細に説明する。
IOPデータ・バッファ3202。これは、ホスト・インタフェース310とフラッシュメモリ・モジュール108の間で転送されるデータをストアする。
ARM実行コード3203。これは、ARMプロセッサ2002によって実行されるソフトウェアをストアする。好適実施形態では、このソフトウェアはC++プログラミング言語で書き込まれる。
ARMデータ3204。これは、処理中にARMプロセッサ2002によって用いられるメモリ空間を構成する。
リバース・テーブル(Reverse Table)ブロック3206。これは、ガベージ・コレクション及び電力損失からの回復に用いられる。リバース・テーブル・ブロック3206は、各フラッシュ・ポートのための別々のテーブルを含み、例えば、テーブル3205は、フラッシュ・ポート0のためのリバース・テーブルを含む。リバース・テーブル3205については、図34に関連してさらに詳細に説明する。
スーパーブロック・メタデータ・テーブル・ブロック3207。これは、各フラッシュ・ポートに対して現在オープンしているスーパーブロックのためのメタデータ・テーブルを含む。これらのテーブルについては、図35に関連してさらに説明する。
HEMiコード・オーバレイ・テーブル3208。これは、初期化時に各HEMiにロードされるファームウェアを含む。このテーブルは、各種のHEMiに対する8つのコード・オーバレイを含み、例えば、エントリ3209は、2つの受信HEMiに対する8つのファームウェア・オーバレイを含み、エントリ3210は、2つの送信HEMiに対する8つのファームウェア・オーバレイを含み、という具合である。これらのオーバレイは、上記した方法で必要に応じてHEMi iRAMにスワップインされるかまたはHEMi iRAMからスワップアウトされる。
SCSIタグ・テーブル3211。これは、それぞれの現在アクティブなイニシエータのための1つのロー(行)と、SCSIプロトコルに従ってSCSIタグに対して認められた65,536個の可能な値の各々のための1つのカラム(列)とを含む。特定のSCSIタグを含むCDBが受信されると、当該イニシエータ及び当該SCSIタグに対応するSCSIタグ・テーブル位置にビットが設定される。CDBの実行が完了したら、当該ビットはクリアされる。これにより、SSDコントローラ106は、全ての受信SCSIタグが固有のものであること及び同じSCSIタグを持つ2つのアクティブなCDBを1つのイニシエータが有することはないことを確認することができる。
デバッグ・バッファ3212。これは、デバッグFIFO2210から受信したデバッグデータをストアする循環バッファである。このデバッグデータは、HEMiファームウェア内のデバッグ・コマンドに応じて通常のシステム動作中に回収される。回収された情報には、受信されたCDBの基本コマンドフロー及び結果的に生成されたデータ構造(CDB情報、IOP、転送要求)が含まれる。エラーが検出された場合、エラーのタイプ及びエラーに対してなされた応答の特性(もしあれば)を識別するために、追加のデバッグ情報が回収される。
図33は、フォワード・テーブル3201を示す。フォワード・テーブル3201は、ホスト101及び102から受信したLBAアドレスをフラッシュメモリ・モジュール108内の実際の物理フラッシュメモリ・アドレスに変えるために用いられる。
フォワード・テーブル3201は、LBAによってインデックスを付けられ、システムがサポートできる15個のLBA毎に1つのエントリを含む。図33に示すように、フォワード・テーブル3201の第1のエントリはLBA0〜14に関連し、第2のエントリはLBA15〜29に関連し、第3のエントリはLBA30〜44に関連し、という具合である。1エントリ当たりのLBAの数は、スーパーページにストアされることができるLBAの数と同じであることに留意されたい。より大きいかまたは小さいスーパーページを含む別の実施形態では、1フォワード・テーブル・エントリ当たりのLBAの数は、同じようにより多くなるかまたは少なくなるであろう。
フォワード・テーブル3201のサイズは、フラッシュ・モジュール108の全メモリ・サイズによって決まる。好適実施形態では、300ギガバイトのフラッシュ・モジュールが、約6億個のLBAをストアすることができ、それによってフォワード・テーブル3201に約4000万個の可能なエントリを必要とする。フォワード・テーブル3201のサイズは、メモリの容量に応じてより大きいかまたは小さいことになる。
各LBAエントリに対して、フォワード・テーブル3201は、物理フラッシュメモリチップ上の対応するデータの位置を識別するために用いられることができる情報、すなわち、ポート、バンク、ブロック及びページを含む。
加えて、フォワード・テーブル3201は、「ユーザ」と呼ばれるフィールドを含み、このフィールドには、特定の顧客の役に立つであろう情報をストアすることができる。一実施形態では、ユーザ・フィールドは、所定の管理期間中(例えば1ヶ月間)に、関連付けられたLBAがアクセス(読出しまたは書込み)された数をストアする。ユーザは、この情報を用いて、特定のLBAグループが多かれ少なかれ頻繁に用いられる情報を含むか否かを判定し得る。使用頻繁が高い情報は、より高速かつ高コストなメモリに移動させられ得る。使用頻繁が高くない情報は、低速なアーカイバル・メモリに移動させられ得る。
作動中、フォワード・テーブル3201は、次のように機能する。ホストからLBA(例えばLBA23)が受信される。LBAは15で除され、その整数の商は、フォワード・テーブル3201へのインデックスを求めるために用いられる。例えば、LBA23の場合、15で除すると商は「1」であり、これは、当該LBAのための物理アドレス情報が、1つのローをフォワード・テーブルへのインデックスを付けることによって見つけられることを意味する。これは、図33においてLBA15−29と名付けられたローである。
選択されたローは、LBA情報がストアされているポートを識別し、それゆえに、情報にアクセスするために用いられるフラッシュHEMi及びフラッシュ・グループを識別する。
選択されたローはさらに、情報がストアされている特定のバンクを識別し、それゆえに、選択されたフラッシュHEMiによって情報を選択するために用いられるCS信号を識別する。選択されたローはまた、情報が見つけられるブロックを識別する。これは、バンクの各チップ上の同じブロックであることに留意されたい
最終的に、選択されたローは、情報が見つけられるページを識別する。例えば、ローは、ブロック1のページ1を識別し得る。(この例では、LBAは実際にブロック1のスーパーページ1にストアされることになることを理解されたい。)
上記したように、各スーパーページは15個のSPageセクタを含み、各SPageセクタは、1つのLBAに関連する内容をストアすることができる。スーパーページがフォワード・テーブル3201から識別されたら、スーパーページ内の実際のSPageセクタは、上記した除算から余りを引くことによって得られる。与えられた例では、余りは8である(23/15=1、余り8)。要求されたLBA情報は、それゆえ、各々の選択されたページの9番目のPSectorスロット(テーブルはLBA0から始まるので、8番目ではなく9番目)内で見つかるであろう。
図34は、リバース・テーブル3205を示す。上記したように、データパスDRAM107は、フラッシュメモリ・グループ毎に1つのリバース・テーブルを含む。
上記したように、各ブロックは、64個のスーパーページからなり、各スーパーページは、バンク内の各ダイから1つである4つのページからのメモリ空間で構成されている。また、同じく上記したように、スーパーブロックは、グループ内の各バンクからの同じブロックからなる。例えば、特定のフラッシュ・グループのスーパーブロック0は、当該グループ内の全てのバンクからの全てのブロック0からなる。
カラム3401は、スーパーブロック(0)を表し、バンク0のスーパーページ0〜63、バンク1のスーパーページ0〜63等のための複数のローを有し、1つのバンク上の64個のスーパーページの各グループはブロックを表している。
テーブル3205の各スーパーページ・ロー(例えばロー3402)は、スーパーブロック毎に同じスーパーページ(例えば、スーパーブロック0〜nのスーパーページ0)のエントリを含む。
リバース・テーブル3205の各スーパーページ・フィールドは、1つの有効ビットを含む。「1」に設定されるとき、有効ビットは、当該スーパーページが、現在有効なプログラムされたデータを含む(すなわち、スーパーページには有効なままのデータが書き込まれている)か、または既に消去されており、書込み可能である(すなわち、消去後のデフォルト状態である値0xffffffffを含む)かのいずれかであることを示している。「0」に設定されるとき、有効ビットは、当該スーパーページが無効データを含むことを示し、それは読み出されることができず、書込み可能ではないことを意味している。当該スーパーページにストアされているLBAに後から書込みがなされると、スーパーページが無効化される。フラッシュメモリには直接的な上書きができないので、スーパーページ上のLBAが上書きされると、スーパーページ上で依然として有効な古いデータ及び新しいデータが新しいスーパーページにコピーされ、古いスーパーページは無効と印が付けられ、それがもはや(後述するガベージ・コレクションまで)用いられないことを意味する。
それゆえ、例えば、フィールド3403の「1」は、フラッシュ・グループのバンク0のブロック0のスーパーページ1が、有効データを含むか、あるいは既に消去されており、書込み可能であるかのいずれかを示すことになるのに対して、フィールド3403の「0」は、フラッシュ・グループのバンク0のブロック0のスーパーページ1内のデータが無効であることを示すことになる。
リバース・テーブル3205はまた、カウント(回数)ローを含む。このローの各エントリは、現在無効なスーパーブロック内のスーパーページの全数を表す数を含む。それゆえ、フィールド3404は、スーパーブロック0内の現在無効なスーパーページの数を表す数をストアする。
カウントは、カラム内の「0」有効ビットの数を合計することによって計算される。しかし、カウントは、性能を最適化するように、別々に維持される。というのも、トータルカウント(総数)を別々のフィールドに維持すれば、必要とされるときにこの数を計算する必要がないからである。カウントは、ガベージ・コレクションのために用いられるが、その方法については詳細に後述する。
リバース・テーブル3205はまた、ロー3405として示されるタイムスタンプ・ローを含む。これは、各スーパーブロックが元々書込みクローズされていた時間を示すタイムスタンプを含む。このフィールドの使用は復元プロセスを含むが、これについては図58に関連して後述する。
リバース・テーブル3205はまた、ロー3406として示される消去カウント・ローを含む。これは、スーパーブロックが消去された回数のカウントを含み、かつ、これを用いて、例えばガベージ・コレクションのために消去カウントのより多いスーパーブロックを優先することができる。
図35は、1つのスーパーブロックに関連しているメタデータ情報を含むスーパーブロック・メタデータ・テーブル3501を示す。各スーパーブロックのバンク0のスーパーページ0に、スーパーブロック・メタデータ・テーブルがストアされる(例えば、ポート0のブロック0のスーパーページ0に、ポート0のスーパーブロック0のためのスーパーブロック・メタデータ・テーブルがストアされる)。加えて、DRAM107のスーパーブロック・メタデータ・テーブル・ブロック3207に、各フラッシュ・グループに対して現在書込みオープンしているスーパーブロックのためのスーパーブロック・メタデータ・テーブルがストアされる。
スーパーブロック・メタデータ・テーブル3501は、バンクによってまとめられるスーパーブロック内の各スーパーページに対して1つのローを含む。それゆえ、ロー3502は、バンク0のスーパーページ0の情報を含む。この後に、バンク0のスーパーページ1の情報を含むロー3503が続き、という具合に、バンク0のスーパーページ63まで続き、そして、バンク1のスーパーページ0の情報を含むロー3504が続き、というようにして、最後のバンク(図35ではバンクnと表されている)に至る。
スーパーブロック・メタデータ・テーブル3501は、各スーパーページに対して3つのタイプのメタデータ、すなわち、スーパーページ・タイムスタンプ、不良フラグ及びLBAをストアする。
スーパーページ・タイムスタンプ・カラム3505は、スーパーページが書き込まれた時間を含む。この情報も、スーパーページの最後に加えられ、データの損失が発生した場合に復元のために用いられるが、その方法については詳細に後述する。
不良フラグ・カラム3510は、スーパーページが「不良(defective)」と印が付けられたか否かを示すシングルビットを含む。フラッシュ読出しまたは書込み中にスーパーページからのページが不良であると示されたら、スーパーページが不良であると識別される。一実施形態では、読出し中にこれが生じると、スーパーブロックはガベージ・コレクションへ追い込まれる。一実施形態では、書込み中にこれが生じると、異なるスーパーページが書込みに用いられる。どちらにしても、不良フラグが設定される。
LBAカラム3511は、スーパーページに書き込まれたデータのLBAアドレスを含む。上記したように、各スーパーページは、15個の連続したLBAのグループからのデータを含む。LBAカラム3511は、このグループの第1のLBAを識別する。
バンク0のスーパーページ0は、スーパーブロックのためのスーパーブロック・メタデータ・テーブルを含み、従ってLBAに対応するデータを保持しないので、特別な場合である。このため、このスーパーページに関連付けられたLBAフィールドは、LBA情報を含まない。
スーパーブロック・メタデータ・テーブル3501はまた、特定のスーパーページに固有ものもではないが、スーパーブロック全体に関連するメタデータを含む4つのフィールド、すなわち、スーパーブロック・タイムスタンプ3506、消去カウント・フィールド3507、オープン・フラグ3508及びクローズド・フラグ3509を含む。
スーパーブロック・タイムスタンプ3506は、スーパーブロックが書込みクローズされていた時間を示すタイムスタンプを含む。後述するように、このフィールドは、電力損失回復のために用いられる。
消去カウント・フィールド3507は、スーパーブロックが消去されたカウント(回数)を含む。後述するように、このフィールドは、ウェア・レベリングのために用いられ得る。
オープン・フラグ3508は、スーパーブロックが書込みオープンされているときに設定される。
クローズド・フラグ3509は、スーパーブロックがクローズされているときに設定される。後述するように、オープン・フラグ及びクローズド・フラグは、電力損失回復に用いられる。
スーパーブロックが書込みオープンであるとき、そのメタデータ・テーブルは、フラッシュからDRAM107にコピーされる。各スーパーページが書き込まれると、そのスーパーページに対応するLBAフィールドに適切なLBAが書き込まれ、カラム3505内のスーパーページ・タイムスタンプ・エントリには、スーパーページが書き込まれた時間が書き込まれる。同様に、或るスーパーページに不良があることが発見されると、そのスーパーページに対応する不良フィールドに書込みがなされる。
スーパーブロックがクローズされているとき、関連付けられたスーパーブロック・メタデータ・テーブルは、DRAM107から、スーパーブロックを含むフラッシュ・グループのバンク0のブロック0のスーパーページ0に書き込まれ、その後、次のスーパーブロックがオープンされるように、スーパーブロック・メタデータ・テーブル・ブロック3207内でスーパーブロック・メタデータ・テーブルに上書きされる。
スーパーブロック・メタデータ・テーブルは、次の3つの別々の時にフラッシュに書き込まれる。
1.スーパーブロックが消去され、フリーリストに置かれるとき。このときには、メタデータ・テーブルはフラッシュに書き込まれるが、不良及び消去カウント・データのみが有効である。
2.スーパーブロックがオープンしているとき。このときには、テーブルはステージバッファにコピーされる。フラッシュHEMiはオープン・フラグを設定し、テーブルをフラッシュにライトバックする(但し、コピーがステージバッファ内に残り、フラッシュに書き込まれる必要があるのはテーブルの一部のみであることを理解されたい)。これは、予期せぬ電力損失が発生した場合に、オープンしているスーパーブロックの識別を可能にする。
3.スーパーブロックがクローズされているとき。このときには、書込み済みのテーブルはフラッシュにコピーバックされる。そうなる前に、フラッシュHEMiはクローズド・フラグを設定する。従って、これら2つのフラグは、スーパーブロックの全ての可能な状態、すなわち、空き(2つのフラグが未設定)、オープン(オープンしている)(オープン・フラグが設定され、クローズド・フラグが未設定)及びクローズド(クローズされている)(2つのフラグが設定されている)を示す。
図36は、IOPデータ・バッファ3202を示す。図32に示すように、IOPデータ・バッファ3202はデータパスDRAM107にストアされる。このバッファは、ホスト・インタフェース310から、またはフラッシュメモリ・モジュール108から、データパスDRAM107によって受信されたデータをバッファリングするために用いられる。
IOPデータ・バッファ3202は、SSDコントローラ106によってサポートされることができる各IOPに対して1つのロー(好適実施形態では、これは60である)を含む。各ローは、315個のSPageセクタを保持できるほど大きいが、これは、1つのIOPに戻されることができるデータの最大量である(7つの転送要求×3つのページ要求×15個のLBA)。
書込み動作中に、IOPデータ・バッファ3202は、ホストから受信したデータを保持する。読出し動作中に、データバッファは、フラッシュメモリから受信したデータを保持する。いずれにしても、データはLBA順にストアされる。このことは、特定の転送要求及び特定のページ要求に関連するデータのための正確な位置の計算をより容易にする。例えば、IOPによって発行される第1の転送要求の第1のページ要求に関連するデータは常に、データ・バッファ3202内の当該IOPのエントリの先頭に見られることになる(IOP(0)のための第1の位置は、位置3601として示されている)。第1の転送要求の第2のページ要求に関連するデータは、常に当該エントリの先頭(例えば位置3602)からのオフセットで見られることになり、オフセットは第1のページ要求によって転送されるLBAの数に基づいて計算される(転送の最初のLBAがスーパーページに含まれるならば、第1のページ要求はスーパーページ全体に満たないものを転送することになることに留意されたい)。
それゆえ、IOPデータ・バッファ3202は、ホストが開始する読出し及び書込み動作が、異なる時間に、すなわち順序がバラバラで完了し得るような複数の転送要求及びページ要求に分割されるという事実から、ホスト101及び102とのデータフローを切り離すように機能する。データ転送の順序がバラバラであるという特性にも拘わらず、IOPデータ・バッファ3202は、ホストが期待するLBA順にデータをストアする。
ホストが開始する読出し中に、IOPデータ・バッファ3202は、転送要求によって戻されたデータを、要求されたデータ全てが存在するまで保持し、全データが揃った時点でデータはLBA順にホスト・インタフェースへ読み出される。ホストが開始する書込み中に、IOPデータ・バッファ3202は、ホストから受信したデータを、全データの受信が完了するまで保持し(この場合もやはりLBA順に)、受信が完了した時点でデータはフラッシュ・ステージバッファに転送される。このメカニズムにより、SSDコントローラ106は、たとえホストが開始するデータ転送動作がずっと小さなフラッシュ読出し及び書込みに内部で分割されても、ホストが期待する順にホストとのデータの授受ができ、また、データパスDRAMは、コントローラ内の他の構成要素がより低速でデータを転送するという事実にも拘わらず、最高速度で作動することができる。
B.トランザクション構造
上記したように、SSDコントローラ106は、フラッシュメモリ・モジュール108における読出し及び書込み動作を制御するために4つのタイプのデータ構造、すなわち、CDB情報、IOP、転送要求及びページ要求を用いる。
SCSIプロトコルに基づくシステムでは当たり前であるように、読出しまたは書込みは、ホストからのコマンド・ディスクリプタ・ブロック(「CDB」)の受信によって開始される(他のプロトコルも同様のメカニズムを含むが、説明のためにCDBを用いる)。SSDコントローラ106は、CDB情報として知られる構造内にCDBをストアする。コントローラは、一度に最大で144個のCDB情報を処理することができるが、さらに詳細に後述するように、そのうちの16個は特殊目的のために留保されるので、一度に128個の標準のホストが開始する読出し/書込みコマンドが処理されることができる。但し、これらのうちの幾つかは、必要なリソースのアベイラビリティを「保留」していることがある。
SSDコントローラ106は、ホストが開始する読出し及び書込みコマンドを、移動の階層に分割することによって処理する。システムは、CDB情報を処理するためのIOPを作成することから始める。全部で60個のIOPが一度にアクティブであり得る。各IOPは7つの転送要求を発行することができ(最大で120個の転送要求しか一度にアクティブであることができないが)、各転送要求は3つのページ要求を発行することができる。各ページ要求は、最大でデータ及びメタデータの1つのスーパーページ(例えばスーパーページ213)を移動させる。上記したように、各スーパーページは、15個のLBAに関連付けられたセクタ内容をストアする。
このアーキテクチャは、1つのIOPが、256個の連続したLBAを含むホストが開始する転送の大部分を処理できるように設計されている。後述するように、転送される最初と最後のLBAがスーパーページのどこに含まれるか、そしてデータ・ストライプのどこに含まれるか次第では、最初及び/または最後のページ要求が1つのLBAしか転送しないことが可能であり、最初及び/または最後の転送要求が1つのスーパーページしか転送しないことも可能である。それゆえ、或る特定の状況では、順序通りの最初及び/または最後の転送要求は、実際には、1つのLBAに関連付けられたセクタ内容しか転送しないこともある。それゆえ、1つのIOPは、最小で225個、最大で31個のLBAを処理することができる。しかし、実際には、1つのIOPが256個未満のLBAを処理することができる状況は比較的稀であるので、このアーキテクチャでは、1つのIOPは、ほとんどの場合、256個のLBAを含むトランザクションを処理することができることになる。
システムは、SCSIプロトコルが要求するように、同じIOPを繰り返し呼び出すことによって、多数のLBAの転送を処理することができる。しかし、経験に基づいて、発明者は、256個のLBAが、通常の作動条件下で実際に遭遇する最大の移動になると考えている。各LBAは、標準のハードドライブ・セクタに相当し、IDEドライブは一般的には一度に256個のセクタを転送することしかできないことに留意されたい。既存のホストがこの256個のセクタ限界に適合するように設計されているならば、1つのIOPが、遭遇するホストが開始する転送の大部分を処理することができることになりそうである。
図37は、例示的なCDB情報、例えばCDB情報201の構造を示す。
セルフポインタ3701は、CDB情報テーブル4109内のこの特定のCDB情報の位置を識別するが、これについては図41に関連して後述する。この値は、このCDB情報を識別する必要がない他のデータ構造に伝えられる。
セルフポインタ3701は、CDB情報201を呼び出すために用いられ、この目的のために、CDB情報を用いることを望む動作によってコピーされる。加えて、セルフポインタ3701は、エラーチェックに用いられる。いつでも、セルフポインタ3701は、CDB情報201を指さなければならない。セルフポインタ3701がそれ自身を指さないとすれば、これは或る動作がCDB情報に間違ったデータを上書きしたことを示す。この説明は、他のタイプのデータ構造に含まれるセルフポインタにも当てはまることに留意されたい。
CDBフィールド3702は、ホストから得られたCDB(または同様なデータ構造)のコピーを含む。CDBの形式は、ホスト・プロトコルによって指定されるが、CDBは常に少なくともコマンド、データ転送のためのLBA、及び転送長を含む。
イニシエータ・フィールド3703は、CDBに関与するイニシエータに対応する共有RAMのイニシエータ・テーブル4108(図41を参照)内のイニシエータ・エントリへのポインタを含む。この情報は、CDB内のホストによって供給されるメタデータから生じる。当該メタデータは、イニシエータ・テーブル4108と比較される。一致(マッチ)が見つかれば、イニシエータ・テーブル4108内の一致した位置へのポインタが、イニシエータ・フィールドに置かれる。一致が見つからなければ、イニシエータ・フリーリスト4112(図41を参照)から新しいイニシエータが取り出され、テーブル4108に新しいイニシエータが入力され、新しいイニシエータへのポインタは、イニシエータ・フィールド3703内に置かれる。
IOPフィールド3704は、CDB情報によって求められるトランザクションを実行するために生成されたIOPを指す。
SCSIタグ3705は、イニシエータから受信されたSCSI(またはキュー)タグを含む。当分野で理解されているように、SCSIタグは、接続が最初に形成されるときにイニシエータから受信される情報の一部である。この情報は、CDBに応じてイニシエータに戻されなければならない。
SCSIフラグ3706は、SCSIプロトコルが必要とするフラグを含む。
バースト長コントロール・フィールド3707は、イニシエータ情報のバースト長フィールド4204からコピーされたバースト長制御情報を含むが、これについては図42に関連して後述する。
Refタグ・フィールド3708は、CDBに関連して受信したRefタグ(もしあれば)を含むが、その使用については上記した。
Appタグ・フィールド3709は、CDBに関連して受信したAppタグ及びAppタグ・マスク(もしあれば)を含むが、その使用については上記した。
図38は、IOP202などのIOPの内部構造を示す。後述するように、IOPは、共有RAMブロック318のIOPテーブル4110(後述する図41を参照)内にストアされ、IOPがHEMiによって使用されているとき、IOPは当該HEMiのmRAMへもコピーされる。
好適実施形態では、各IOPは、次のフィールドを含む32ダブルワードのデータ構造である。
セルフポインタ3801。これは、このIOPが位置する共有RAM IOPテーブル4110(下記参照)内のアドレスを含む。このフィールドは、初期化時に設定される。これは、IOPがIOPフリーリスト4103(下記参照)上にあるときに有効データを含むIOP内の唯一のフィールドである。
呼出し(Calling)HEMiフィールド3802は、このIOP上で現在作動しているHEMiに対する識別子を含む。これは、IOP202内のデータを変更する権限を与えられている唯一のHEMiである(さらに後述するアボート・フラグ3811を除く。)。
ホスト・ポート・フィールド3803は、IOPの呼び出しを生じさせた元のホストコマンドを受信したホスト・ポート(0または1)を識別する。後述するように、これは、コマンドが完了したときにIOPが送信されなければならないポートである。
イニシエータ・フィールド3804は、このIOPの呼び出しをもたらしたCDBに元々関与しているイニシエータに対応する共有RAMのイニシエータ・テーブル4108(下記参照)内のイニシエータ・エントリへのポインタを含む。
CDB情報フィールド3805は、このIOPを呼び出させた共有RAMのCDB情報テーブル4109(下記参照)内のCDB情報へのポインタを含む。
コマンド・フィールド3806は、IOPが実行するように指定されたコマンドのタイプを識別する。一実施形態では、IOPは、ホスト読出しまたは書込みコマンドに対して生成されるのみである。別の実施形態では、IOPは、他のタイプのコマンドに対して生成され得る。この実施形態では、IOPは、非読出し/書込みコマンドの処理のためにARMプロセッサ2002に送信される。
転送要求割り当てフィールド3807は、現在の読出しまたは書込み動作のためにIOPが割り当てた転送要求の数を含む。IOPがRdWr HEMiによって初期化されるとき、当該HEMiは、CDB情報によって指定される読出しまたは書込みコマンドを実行するのに必要な転送要求の数を計算し、その数をこのフィールドに入力する。好適実施形態では、この数は最大で7に設定される。残存転送要求(Remaining Transfer Requests)フィールド3808は、IOPによって割り当てられたまだ完了していない転送要求の数を含む。IOPが最初に作成されるとき、このフィールドは、転送要求割り当てフィールド3807と同じ値を含む。各転送要求が完了すると、残存転送要求フィールド3808はデクリメントされる。
転送要求ポインタ・アレイ3809は、IOPによって割り当てられた各転送要求のためのエントリを含む。そのような転送要求の各々に対して、転送要求ポインタ・アレイ3809は、転送要求を処理するフラッシュHEMiへのポインタ及び転送要求テーブル4111(下記参照)内の転送要求自体へのポインタを含む。転送要求へのポインタは、転送要求が転送要求フリーリスト4104(下記参照)から取り出されるときに、転送要求のセルフポインタ(下記参照)からコピーされる。
転送要求ポインタ・アレイ・フィールド3809は、IOPの実行が完了したときに転送要求フリーリスト4104に戻されるべき転送要求を識別するために用いられる。このフィールドは、IOPアボート・フラグ3811が設定されたときにアボートされるべき転送要求を識別するためにも用いられる。アボート動作についてはさらに後述する。
状態変数フィールド3810は、コマンドが完了したか否か、エラーが発生したか否かなどに関する情報を含めて、IOPの状態を追跡するために用いられる情報を含む。このフィールドはまた、IOPが新しいのか「リエントラント」なのかを示す。上記したように、CDBが、1つのIOPによって処理されることができるようなより多くのデータの転送を求めると、転送は複数のセグメントに分割され、各セグメントを処理するために同じIOPが繰り返し呼び出される。状態変数フィールド3810は、このプロセスにおいてIOPの場所をを追跡する。
アボート・フラグ3811。このフラグは、IOPの動作がアボートされなければならないことを示す。呼出しHEMiフィールド3802において識別されるHEMi以外の任意のHEMiに書き込まれることができるのは、IOPの一部のみである。
Refタグ・フィールド3812は、Refタグを含むが、その使用については上記した。
Appタグ・フィールド3813は、Appタグ・マスク及びAppタグを含むが、その使用については上記した。
図39は、転送要求203などの転送要求の内部構造を示す。初期化時に、各転送要求のための転送要求テーブル4111(下記参照)に16個の32ビット・ダブルワードからなる空間が割り当てられる。好適実施形態では、これらのダブルワードのうちの14個のみが用いされる。余り2つのダブルワードは、今後の拡張のために留保される。
転送要求は、RdWr HEMi群によって生成され、フラッシュHEMi群によって用いられるデータ構造である。転送要求は、以下のフィールドを含む。
セルフポインタ3901。これは、転送要求テーブル4111(下記参照)内のこの特定の転送要求の位置を識別する。それは、この転送要求を識別する必要がない他のデータ構造、例えば、呼出し転送要求を識別するのに必要なページ要求に伝えられる。
呼出しIOPフィールド3902。これは、この転送要求を生成させるIOPの識別子を含み、IOPセルフポインタ3801から取り出される。
LBAフィールド3903。これは、転送のための開始LBAを含む。例えば、呼出しIOPがLBA0〜100からの読出しを要求すると、第1の転送要求のためのLBAフィールド3903が「0」を読出し、第2の転送要求のためのLBAフィールド3903が「45」を読出し、第3の転送要求のためのLBAフィールド3903が「90」を読み出すことになる(上記したように、各転送要求は、最大で45個のLBAを処理することができる)。
転送長フィールド3904。これは、転送されるLBAの数を含む。
データパスDRAMポインタ3905。これは、この転送要求のためにデータが書き込まれるかまたはデータが読み出されるIOPデータ・バッファ3202内のアドレスへのポインタを含む。上記したように、IOPデータ・バッファ3202は、IOPによってまとめられ、フラッシュメモリ・モジュール108から読み出されるかまたはフラッシュメモリ・モジュールに書き込まれるデータのための空間を含む。
アボート・フラグ3906。このフラグは、転送要求の動作がアボートされなければならないことを示す。アボート・フラグは、データがアボートされたコマンドのために転送されないことを確実にするために、データを転送する前に転送要求によってチェックされる。アボート処理については、さらに後述する。
コマンド・フィールド3907。これは、必要とされるコマンドの特性を識別する。可能な状態は、読出し/書込み、フォーマット(初期化)、移動及び消去を含む。
状態変数3908。これらは、転送要求のカレント・ステート(現在の状態)を追跡するために用いられる変数を含む。フラッシュHEMiは、転送要求についての動作を開始するとき、これらの変数をチェックしてどのタイプの実行が要求されているかを判定する。例えば、「終了」状態変数は、フラッシュHEMiに、転送要求が終了したこと、クリーンアップ・ルーチン(後述)が開始すべきであることを伝える。
Refタグ・フィールド3909。これは、転送要求を受ける第1のセクタのためのRefタグをストアする。この情報は、呼出しIOPのRefタグ・フィールド3812から取り出されるが、必要に応じて、IOPによって呼び出される第1の転送要求以外の転送要求で調整される。
Appタグ・フィールド3910。これは、Appタグ及びAppタグ・マスクをストアする。この情報は、呼出しIOPのAppタグ・フィールド3813から取り出される。
ページ要求割り当てフィールド3911は、現在の読出しまたは書込み動作に対して転送要求が割り当てられたページ要求の数を含む。好適実施形態では、この数は最大で3に設定される。
残存ページ要求(Remaining Page Requests)フィールド3912は、まだ完了していない転送要求によって割り当てられるページ要求の数を含む。このフィールドは、当初は、ページ要求割り当てフィールド3911と同じ値を含む。各ページ要求が完了すると、フラッシュHEMiは残存ページ要求・フィールド3912をデクリメントする。
ページ要求・ポインタ・アレイ3913。このフィールドは、転送要求によって必要とされる転送を処理するために割り当てられた各ページ要求へのポインタを含む。
ページ要求割り当てフィールド3911、残存ページ要求・フィールド3912及びページ要求・ポインタ・アレイ・フィールド3913は、共有RAM(下記参照)内の転送要求テーブル4111にストアされている転送要求には含まれない。その代わりに、これらのフィールドは、詳細に後述する或るプロセスにおいて転送要求がフラッシュHEMiのmRAMにストアされているときに転送要求に加えられる。
図40は、ページ要求210などのページ要求の構造を示す。ページ要求は、フラッシュHEMi群のmRAMにストアされる。フラッシュHEMiがRdWr HEMiから転送要求を受信するとき、フラッシュHEMiは、転送要求を実行するのに必要なページ要求を作成し、転送要求のページ要求ポインタ・アレイ3913にそれらのページ要求を識別する情報を投入する。各ページ要求は、以下のフィールドを含む。
ページ要求セルフポインタ4001。これは、ページ要求を保持するフラッシュHEMiのmRAMにおけるページ要求テーブル2906内のページ要求の意図を指す。
呼出し転送要求4002。これは、このページ要求を呼び出し、転送要求セルフポインタ3901からコピーされた転送要求に対する識別子を含む。
コマンド・フィールド4003。これは、呼出し転送要求のコマンド・フィールド3907から生じる。このフィールド内の可能な値は、次のものを含む。
・読出し
・書込み
・リード・モディファイ・ライト
・消去
転送要求内のコマンド・フィールド3907が「書込み」であり、ページ要求の転送長フィールド4010(下記参照)が、書込みがページ全体に満たないもののためであることを示していれば、リード・モディファイ・ライト状態が設定されることに留意されたい。後述するように、この場合、リード・モディファイ・ライトが必要とされ、その理由は、フラッシュ書込みは一度にページ全体で起こり、もしもページ要求がスーパーページ全体に満たない書込みであれば、古いスーパーページの残りは、新しいスーパーページにコピーされて書き込まれなければならない。
データパスDRAMポインタ・フィールド4004。これは、転送要求DRAMポインタ・フィールド3905から生じるが、この特定のページ要求に関連するデータは転送要求に割り当てられたDRAM空間内に置かれるかまたは見つかるべきである点(例えば、第1のページ要求に関連するデータは転送要求空間の先頭に見られることになり、第2のページ要求に関連するデータは転送要求空間内へオフセットされることになる、等)を反映するように変更される。
SPageインデックス・フィールド4005は、このページ要求によって処理されているLBA範囲を表すインデックスをフォワード・テーブル3201内にストアする。この情報は、転送要求LBAフィールド3903に基づいて生成され、必要に応じて同じ転送要求の結果として開始される他のページ要求を反映するように変更される。
フラッシュ読出しアドレス・フィールド4006。これは、読出しが生じるフラッシュメモリ・グループ内のアドレスを含み、当該位置を、バンク、ブロック及びページによって識別する。この情報は、フォワード・テーブル3201から得られる。フラッシュHEMiが転送要求を受信すると、フラッシュHEMiは転送要求からのLBAフィールド3903内の情報を用いて、フォワード・テーブル3201内のLBAに対応するフラッシュ・アドレス情報を見つける。上記したように、LBAを15で除してフォワード・テーブル内のローを見つけ、除算から得られる余りを用いてセクタの物理位置を識別することによって、LBAが物理フラッシュ・アドレスに変換される。
フラッシュ書込みアドレス・フィールド4007。これは、ページ要求による書込みに用いられるフラッシュ・グループのアドレスを含み、書込みに用いられるスーパーページに基づいて計算される。スーパーページの選択方法については後述する。リード・モディファイ・ライトが読出しアドレス及び書込みアドレス・フィールドの両方を必要とするので、ページ要求はその両方を含む。
ヘッド長フィールド4008。スーパーページの途中で転送が始まるような部分転送の場合、このフィールドは、LBAにおいてスーパーページの始まりと転送が始まるはずの位置とのオフセットを保持する。このフィールドは、フラッシュ読出しアドレスまたはフラッシュ書込みアドレス(上記参照)を決定するために用いられるLBAを取り、そのLBAを15で割ることによって計算される。この除算で生じた余りは、ヘッド長フィールドに用いられる。
テール長フィールド4009。スーパーページの途中で転送が終わるような部分転送の場合、このフィールドは、LBAにおいてスーパーページの終わりと転送が終わるはずの位置とのオフセットを保持する。このフィールドは、転送長フィールド4010の値にヘッド長フィールド4008の値を加え、その結果生じた値を「15」から引くことによって計算される。
転送長フィールド4010。これは、このページ要求に必要な転送の長さを指定する。この情報は、転送要求の転送長フィールド3904及びこの特定のページ要求が処理することが必要とされることになる転送の一部に基づき、フラッシュHEMiによって生成される。ヘッド長フィールド4008、テール長フィールド4009及び転送長フィールド4010は、常に合計すると1つのスーパーページ内のLBAの数(この実施形態では、これは15である)になることに留意されたい。
状態変数フィールド4011。このフィールドは、ページ要求210のカレント・ステートの経過を追うために用いられる一連のフラグで構成されている。状態変数の使用の例は、図51及び図53に関連して説明する。複数のフラグが同時に設定され得るが、或る一定の組合せは不正である。好適実施形態では、このフィールドは、以下のフラグを含むが、用いられる正確なフラグはインプリメント依存であり、異なる1組の状態フラグを用いて同じ結果を得ることもできることを理解されたい。
コマンド:これは、ページ要求が、フラッシュメモリ部にコマンドを発行する準備ができていることを示す。
レディ/ウェイト(待ち):これは、ページ要求が開始できる状態にあり、リソースが利用可能になるのを待っていることを示す。
ニード・ステージバッファ(Need stage buffer):これは、ページ要求がフラッシュ・ステージバッファの開始を必要としていることを示す。
フラッシュ転送終了:これは、ページ要求によって求められるフラッシュ読出しまたは書込みが完了していることを示す。
第1、第2の:これは、トランザクションの現在のフェーズを示す。例えば、リード・モディファイ・ライトにおいて、ページ要求は、トランザクションの異なるフェーズ中にフラッシュメモリ部に異なるコマンドを発行することが求められる。このフィールドにより、ページ要求は当該プロセスのどこにいるのかを把握することができる。
ページ要求終了:これは、ページ要求が全ての必要な動作を完了したことを示す。
データ転送エラー:これは、ページ要求によって処理された転送がエラーに終わったことを示す。
Refタグ・フィールド4012は、ページ要求によってアドレス指定された第1のセクタのRefタグをストアする。この情報は、呼出し転送要求のRefタグ・フィールド3909から得られるが、必要に応じて、転送要求によって呼び出される第1のページ要求以外のページ要求のためにオフセットされる。
Appタグ・フィールド4013は、呼出し転送要求のAppタグ・フィールド3910から取り出されたAppタグ及びAppタグ・マスク情報をストアする。
C.共有RAM構造
図41は、共有RAMブロック318にストアされている情報を示す。共有RAMブロック318は、イニシエータに関連する2つのデータ構造、すなわちイニシエータ・フリーリスト4112及びイニシエータ・テーブル4108を含む。
この実施形態では、SSDコントローラ106は、16個の同時にアクティブなイニシエータからのコマンドに応答することができる。それゆえ、イニシエータ・テーブル4108は16個のスロットを含み、各スロットは、イニシエータ0〜15で表される1つのイニシエータに関連する情報のための空間、例えばイニシエータ情報ブロック4101を含むが、これについては図42に関連してさらに後述する。SCSIプロトコルは、SSDコントローラ106が少なくとも16個のアクティブなイニシエータに応答することを要求しているが、代替実施形態では、SSDコントローラ106は、イニシエータ・テーブル4108及びイニシエータ・フリーリスト4112のサイズを増大させることによって、プロトコルによって要求されるよりも多数のイニシエータに応答するように設計されることができる。
イニシエータ・フリーリスト4112は、イニシエータ・テーブル4108内の空のスロットへのポインタを含む深さ16のFIFOキューである。新しいイニシエータが最初にSSDコントローラ106と通信しようとするとき、イニシエータ・フリーリスト4112のトップからのポインタがキューから取り出され、当該ポインタによって参照されるイニシエータ・テーブル4108内のスロット(例えばスロット4101)が、新しいイニシエータに関する情報のストレージのために用いられる。イニシエータ・フリーリスト4112が空であれば、これは、SSDコントローラ106が追加のイニシエータを処理することができないことを示している。SSDコントローラ106は、ホスト・インタフェース310を介して状態情報を提供することによってこの条件に応答し得る。
イニシエータ情報がSSDコントローラ106に伝えられる方法は、プロトコル特有のものであることを理解されたい。しかし、一般には、この情報は、イニシエータが先ずSSDコントローラ向けのコマンドを開始し始める前に提供されるデータ構造で伝えられる。当該データ構造内の情報は、イニシエータ・テーブル4108内の当該イニシエータのエントリを投入するために用いられる。
共有RAMブロック318は、CDB情報に関連する2つのデータ構造、すなわちCDB情報テーブル4109及びCDB情報フリーリスト4102を含む。
CDB情報テーブル4109は、CDB情報0〜143と表される144個のCDB情報のためのスロットを含む。これらの各スロットは、1つのCDB情報、例えばCDB情報201をストアすることができる。CDB情報にストアされる情報については図37に関連して説明する。
フリーリスト4102は、CDB情報テーブル4109内の空のスロットへのポインタを含む深さ144のFIFOキューである。新しいCDB情報が必要とされるとき、フリーリスト4102のトップからポインタがポップされる。新しいCDB情報のための情報は、その後、ポップされたポインタが指すCDB情報テーブル4109内の空のスロットに書き込まれる。CDB情報の処理が完了すると、当該CDB情報は消去され、CDB情報テーブル4109内のCDB情報を含むスロットへのポインタがフリーリスト4102に加えられ、それによって、空間を新しいCDBのために使えるようにする。
SCSIプロトコルは、特殊な状況下で、たとえリソースが別な方法で利用可能でないとしても、SSDコントローラ106がCDBを処理する能力を保証することを必要とする。これらの要件は、フリーリスト4102が制御される方法に影響するものであり、図46及び図47に関連して詳細に後述する。
共有RAMブロック318は、IOPに関連する2つのデータ構造、すなわちIOPテーブル4110及びIOPフリーリスト4103を含む。これらは、対応するCDB情報構造と同じような働きをする。IOPテーブル4110は、SSDコントローラ106が一度に処理することができる60個のIOPのそれぞれに対するスロットを含む。IOPテーブル4110の各スロットに含まれるIOP情報の形式については、図38に関連して説明する。IOPフリーリスト4103は、空いている(有効なIOPが書き込まれていない)IOPテーブル4110内のスロットへのポインタを含む深さ60のFIFOキューである。
共有RAMブロック318は、転送要求に関連する2つのデータ構造、すなわち転送要求テーブル4111及び転送要求フリーリスト4104を含む。これらは、対応するIOP構造と同じような働きをする。転送要求テーブル4111は、SSDコントローラ106が一度に処理することができる120個の転送要求のそれぞれに対するスロットを含む。この情報の形式については、図39に関連して説明する。転送要求フリーリスト4104は、空いている(有効な有効な転送要求が書き込まれていない)転送要求テーブル4111内のスロットへのポインタを含む深さ120のFIFOキューである。
共有RAMブロック318はまた、SSDコントローラ106に含まれる各HEMiに対して1つのワークリストを含む。説明している実施形態は、各HEMiが、関連付けられたワークリストを共有RAMブロック318内に有するような23個のHEMiを含むが、図41にはそのうちの3つのみ、すなわち、4105、4106及び4107を示す。HEMiの数はインプリメントによって様々であり、共有RAMブロック318は、各HEMiに対して1つのワークリストを常に含むことになることを理解されたい。
各HEMiワークリストは、関連HEMiによって作動させられるタスクのキューである。一般に、HEMiワークリストは、CDB情報テーブル4109内のCDB情報、IOPテーブル4110内のIOP、及び転送要求テーブル4111内の転送要求へのポインタを含み、HEMiワークリスト上のそのようなポインタの存在は、関連HEMiが、識別されたCDB情報、IOPまたは転送要求に関連する処理タスクを実行することを求められていることを示している。HEMi同士は、ポインタをHEMiワークリストに置くことによって通信する。
この実施形態では、ワークリストはFIFOであり、図24に関連して説明したようなFIFOポインタ・レジスタ(例えばポインタ・レジスタ2205)によって制御される。タスクが、特定のタスクを優先しようとする試みなしに、受信順にワークリストから取り出される。代替実施形態では、タスクは、例えばIOPにプライオリティ・ビットを含めることによって、優先される。プライオリティ・ビット・セットを有するIOPによって呼び出される転送要求も、プライオリティ・ビットを含み得る。そのような優先度の高い転送要求は、HEMiワークリストのボトムに加えられる代わりにトップに追加されることができるので、そのような転送要求は、たとえ他の転送要求が既にワークリスト上にあっても、HEMiによって処理される次の転送要求になる。
CDB情報、IOPまたは転送要求がHEMiワークリストに移動させられたら、他のHEMiは構造を変更することができない(アボート関連情報を除く)。
共有RAMブロック318はまた、複数のグローバル変数4113を含む。これらは、処理の際にHEMi群によって用いられる変数をストアする。
図42は、イニシエータ・テーブル4108内のエントリの構造を示す。それぞれのそのようなエントリ(例えばイニシエータ0 4101)は、テーブル4108内のイニシエータの位置を指すイニシエータ・セルフポインタ・フィールド(4201)を含む。
イニシエータ識別子フィールド4202は、この特定のイニシエータを識別する情報を含む。この情報は、ホストから受信され、ホストとSSDコントローラ106間の通信に用いられるので、ホストは、SSDコントローラ106から適切なイニシエータへ通信をルーティングすることができる。イニシエータ識別子フィールド4202は、新しいイニシエータがSSDコントローラ106への要求されたアクセスを有する(そのような要求の形式は、特定のプロトコル、例えば、SAS、FCALなどに特有のものであり、当業者には明らかである)ことを示すホストから第1の要求を受信する受信HEMiによって、データ投入される。そのような表示を受信すると、受信HEMiは、イニシエータ・フリーリスト4112からイニシエータを取り出し、イニシエータ識別子フィールドにホストから受信された識別情報を投入する。好適実施形態では、イニシエータ識別子は、イニシエータのオープン・フレームの一部として受信されたワールドワイドネーム(WWN)を含む。
カウント・フィールド4203は、このイニシエータから受信されたまだ完了していないCDBの数を含む。CDBが受信されたとき、受信HEMiはイニシエータを識別し、当該イニシエータに対するカウント・フィールド4203をインクリメントする。IOPが実行を終えたとき、カウント・フィールド4203は、クリーンアップ・プロセスの一部としてデクリメントされる。カウント・フィールド4203が0に達したとき、これは、このイニシエータはシステム内に残るコマンドを有しないことを示している。その時点で、一実施形態では、イニシエータ情報は消去され、データ構造はイニシエータ・フリーリスト4112に戻される。代替実施形態では、イニシエータは、フリーリストが空でありかつ新しいイニシエータが必要とされるときにフリーリストに戻されるだけである。
バースト長フィールド4204は、イニシエータが最初に作成されたときに受信したメタデータの一部としてホストから受信したバースト長制御情報を含む。バースト長制御情報は、SCSIプロトコルによって指定され、バースト・データ転送の最大長を設定するために用いられる。イニシエータへの転送またはイニシエータからの転送が最大長を超えるならば、SSDコントローラ106は、転送をインタラプトし、他のイニシエータとの転送が起こるようにし、その後、転送を再開しなければならない。これは、転送を処理する送信HEMiによって処理される。限界に到達した後、送信HEMiは転送をディスコネクトし、その後すぐにリコネクトを試みる。
V.動作
A.書込み性能
大容量ソリッドステート・ドライブの基本性能のボトルネックは、フラッシュメモリへのインタフェースである。そのため、SSDコントローラ106は、そのインタフェースを最大限使用するように設計される。このことは、可能な限りフラッシュインタフェースをビジーに維持することを企図して、トランザクションを比較的小さなチャンクに分割し、且つ、そのチャンクを高度のパラレル処理で実行することによって行われる。すなわち、フラッシュメモリモジュール108は、多数のフラッシュ・グループを含み、このフラッシュ・グループの各々は、当該システムの他の部分への独立したインタフェース、さらに、各フラッシュグルーブが独立に且つパラレルに作動することを可能とする関連フラッシュ・ポートを有する。各フラッシュ・グループ内では、メモリは複数のバンクに分けられ、このバンクの各々は、パラレルに作動可能である。一度にSSDコントローラ106へ接続し得るのは、フラッシュ・グループ毎に1つのバンクのみであるが、複数のバンクにトランザクションの小部分が送られ、複数バンクの内部フラッシュ動作実行を可能とし、その際、フラッシュインタフェースは、他の目的のために使用される。このことは、複数のバッファの使用に加えるに、読出しまたは書込みが連続して生ずる場合に可能であるよりもはるかに高速のトランザクション完了を可能とする。
40MHzで作動する典型的な現代のシングルレベルセル・フラッシュメモリチップは、1つのページ書込み動作を実行するのに約200マイクロ秒を要する。(当業者に理解されるように、フラッシュメモリ書込み動作は、多くの場合、リード・モディファイ・ライトを含む。)さらに、データのスーパーページをステージバッファからフラッシュチップバッファ内に移動するために約50マイクロ秒を要する。このことは、フラッシュ・グループは5つの連続した書込み動作を別々のバンクへとパイプライン処理することが可能であり、これにより、フラッシュインタフェースを完全に占有されたままにすることができる。各書込み動作は、50マイクロ秒にわたって、バスを必要とし、次に、200マイクロ秒にわたって内部的に作動し、この間、4つの他の書込み動作がバスを使用することができる。それゆえ、データは、500マイクロ秒の間に、90のLBAの全ストライプに書き込むことができる。
これは図43に示されており、図43は、1つのフラッシュ・グループと50マイクロ秒ずつインクリメントさせた時間を相互参照するテーブルを含む。このテーブルは、90のLBAより成るバンク0〜5上のスーパーページへの6つのスーパーページ書込みを示している。
第1の50マイクロ秒期間では、バンク0は、バスを用いて、データの或るスーパーページをステージバッファからバンク0フラッシュ・ページ・バッファへ移動させる。このことは、図43中に「M」として示す。次の4の50マイクロ秒期間に、バンク0上のフラッシュ・ダイは、ページバッファからフラッシュメモリへの内部書込み動作を実行する(図43中に「W」として示す)。
バンク0は最初の期間後にバスを必要としないので、バンク1は、第2の50マイクロ秒期間(時間100として示される)中にステージバッファからバンク1のページバッファへデータを移動させることができる。次に、バンク1は、内部フラッシュ書込み動作を開始することができ、バスをバンク2へと転換する。バンク3、4及び5への書込みも同様に進行する。
図に示すように、この6つのスーパーページ書込みには500マイクロ秒を要する。フラッシュバスは、この期間のうちの300マイクロ秒の間、使用状態にある。フラッシュ書込み動作は、バス動作とパラレルに起こり得るので、シリアルならば1,500マイクロ秒(6×250)を要する書込みは、約3分の1の時間で完了する。
さらに、300マイクロ秒後に、フラッシュ・バスは空いており、これにより、他のトランザクションのバスへのアクセス達成が可能となり、これにより、複数のトランザクションのオーバーラップが可能となる。
図43は、書込み動作を示す。というのも、そのような動作に含まれるレイテンシーは、約100マイクロ秒(フラッシュ・ページ・バッファへのデータの読出しに50マイクロ秒、ステージバッファへのデータの移動に50マイクロ秒)を要する読出し動作のレイテンシーを相当に上回るからである。それゆえ、ここに説明のアーキテクチャは、書込み性能を最大限とするように設計され、書込みには劣るが、同一のフラッシュ・グループ上に2つの読出し動作(1つは前記フラッシュからの読出し、1つはステージバッファへのデータの移動)をオーバーラップすることが可能である場合に限り、読出しの性能を向上させる傾向もある。
同程度の性能が各フラッシュ・ポートにおいてパラレルに生ずるので、且つ、前記フラッシュ・グループにわたってデータがストライプされるので、このパラレル・パイプライン型アーキテクチャの使用なしの場合に可能なものよりも非常に迅速に多数のトランザクションを生起することができる。それゆえ、理論的には、12個のフラッシュ・グループを含むシステムは、1,080個のLBA(12×90)を500マイクロ秒で書き込むことが可能である。この理論的最大値は、書込みの各々が、バンク及びフラッシュ・グループに関して完全に整備されることを必要とするので、現実には頻繁に達成する可能性はなさそうである。しかしながら、明らかなように、ここに説明のアーキテクチャのパラレル処理及びパイプライン処理は、フラッシュ誘導レイテンシーをマスクし、且つ、従来のハードドライブまたはフラッシュメモリデバイスよりも相当に上回る性能での読出し及び書込みシークェンスを可能とする。
ここに説明のアーキテクチャは、標準のSLCフラッシュチップを組み込んだシステムに必要とされるレベルを越えた相当な性能のヘッドルームを含むので、大きな変更なしに、比較的に遅いMLCフラッシュに適応させることができる。当業界で理解されるように、MLC(「マルチレベルセル」)は、1フラッシュセルごとに2(またはそれより多い数)のビットをストアする。したがって、MLCチップは、規定の記憶量に対し比較的に安価である。しかし、MLCチップは、読出し及び書込みに時間が掛かる。
図44は、(現在市販されているMLCチップの典型的な性能である)1ページの書込みに350マイクロ秒を要するMLCフラッシュチップで作成された単一フラッシュ・グループ上の90のLBA書込みを示す。見られるように、全書込みは、600マイクロ秒内に完了する。これは、SLCデバイスに関し図43に示される500マイクロ秒を超えているが、MLCチップが各書込みのため追加の100マイクロ秒を要するとの事実にもかかわらず、その差は、6つの完全ページ書込みのための100マイクロ秒のみである。今までと同様に、この書込みは、複数のフラッシュ・グループにわたってパラレルに実行され得る。このパラレル処理は、MLCチップの追加的レイテンシーを大部分マスクするのに十分であり、そのため、使用されるのがSLCチップであるかMLCチップであるかににかかわらず、ホストインタフェースにわたる当該システムの応答性は、ホストに対して完全に受容可能となる。
B.読出し及び書込み処理
図45は、ホストが開始する書込みコマンドを受信したときにホスト・ポート(例えば、ホスト・ポート0 104)によって進められるステップを示すフローチャートを含む。このフローチャートは、受信した最初のフレームを書込みとみなし、それを基本にして進行する。この理由で、現実の実行(例えば、受信したコマンドが読出しか書込みかを決定し、これに従い分岐する)に必要な多数のステップが示されていない。
ステップ4501で、GigaBlaze1801は、ホストからのプリミティブを受信する。
ステップ4502で、GigaBlaze1801は、プリミティブをプリミティブ・マッチ・ロジック1802へ送信する。
ステップ4503で、プリミティブ・マッチ・ロジックは、そのプリミティブを、フレームが後に続くことを示すスタート・オブ・フレーム(「SOF」)プリミティブとして識別する。(理解されるように、この説明は、性質上概念的であり、受信されるプリミティブの特定の性質を記述することを試みるものではない。また、理解されるように、通信の性質は、或る程度、特定のプロトコルに依拠しており、このプロセスの詳細は、使用されるプロトコルに依拠して異なる。)
ステップ4504で、受信したプリミティブにマッチしたプリミティブ・マッチ・レジスタ1902からのレジスタに対応するプリミティブ・マッチ・コントロール・レジスタ1903からのレジスタの制御の下、フレーム解読ロジック1904が、フレームの第1のダブルワードを評価する。
ステップ4505で、フレーム解読ロジックが、フレームがコマンドフレームであることを決定する。
ステップ4506で、プリミティブ・マッチ・ロジック1802の制御の下で作動するフレームルータ1803が、フレームを非データ・ペイロードFIFO1804に送信する。このことは、プリミティブ・マッチ・コントロール・レジスタとフレーム解読ロジックの制御の下に行われる。
ステップ4507で、ホスト・ポートの受信HEMi(例えば、受信HEMi1702)が、ヘッダーFIFOからコマンドフレームをポップする。
ステップ4508では、受信HEMiがフレームを評価し、それがCDBを含むことを決定する。
ステップ4509で、フレームがCDBを含むとの決定の結果として、受信HEMiが、CDB情報を生成する。
ステップ4510で、受信HEMiが、SCSI HEMi2001にCDB情報を送信する。
ステップ4511で、SCSI HEMi2001が、CDBが書込みコマンドを含むことを決定する。
ステップ4512で、CDBが書込みコマンドを含むとの決定に基づき、SCSI HEMi2001が、RdWr HEMiにCDB情報を送信する。
ステップ4513で、CDB情報に基づきWrRd HEMiがIOPを生成する。
ステップ4514で、WrRd HEMiが、IOPを送信HEMi(例えば、1704)に送信する。
ステップ4515で、SSDコントローラ106が、書き込まれるためのデータを含むデータフレームを受信するレディ状態に現在あることをホストに示すように設計された転送レディ・フレームを、送信HEMiが生成する。
ステップ4516で、送信HEMiが、転送レディ・フレームをGigaBlaze1801に送信する。
ステップ4517で、GigaBlazeが、転送レディ・フレームをホストに送信する。
ステップ4518で、GigaBlazeが、転送レディ・フレームに応じてホストによって送られたプリミティブを受け取り、第1のデータ・フレームの始まりを信号で知らせる。
ステップ4519で、GigaBlaze1801が、プリミティブをプリミティブ・マッチ・ロジック1802へ送信する。
ステップ4520で、プリミティブ・マッチ・レジスタが、プリミティブをSOFとしてマッチする。
ステップ4521で、プリミティブ・マッチ・コントロール・レジスタ1903の制御の下、フレーム解読ロジック1904がフレームの第1のダブルワードを評価する。
ステップ4522で、フレーム解読ロジックは、フレームがデータフレームであることを決定する。
ステップ4523では、プリミティブ・マッチ・ロジック1802の制御の下で作動するフレームルータ1803が、フレームのヘッダ部分を非データ・ペイロードFIFO1804に送り、且つ、フレームのデータ部分を受信ステージバッファ1706に送信する。このことは、プリミティブ・マッチ・コントロール・レジスタ内のプリミティブの最初のマッチ、に加えるに、フレームのデータフレームとしての識別の結果として、行われる。この場合、プリミティブ・マッチ・コントロール・レジスタは、ルーチン・ロジックが或る組合せ数のダブルワードを非データ・ペイロードFIFOへ送り、さらに、後続のダブルワードをステージバッファへと送信することを生起する。
ステップ4524で、受信HEMiが、非データ・ペイロードFIFOからヘッダをポップする。
ステップ4525で、受信HEMiが、ヘッダを評価し、それがデータフレームを表すことを決定する。
ステップ4526で、受信HEMiが、ヘッダのターゲット・ポート・トランスファ・タグ(「TPTT」)部分をチェックする。全フレームとともに受信されるこのフィールドは、単一トランザクションに関連するフレーム、例えば、書込みコマンドを含むコマンドフレームと書き込まれるデータを含むデータフレームを結び合わせるデータを含む。このTPTTの情報は、入力コマンドの結果として作成されるIOPの中にコピーされる。ステップ4513において作成されたIOPに受信されたデータフレームを関連させるべく、この情報を、受信HEMiが使用する。
ステップ4527で、受信HEMiが、受信ステージバッファに含まれるデータのDMA転送を、IOPによって特定されるデータパスDRAM107内の或る場所にセットアップする。引き続いて進行する書込み動作の様式を以下に説明する。
図46は、SSDコントローラ106によるCDB処理の初期段階を示すフローチャートを含む。このフローチャートは、CDB情報をRdWr HEMiに伝えることによるホストからのCDBの受信からこのプロセスを図解する。
理解されるように、また、この明細書に利用の全てのフローチャートに当てはまるように、図46は、アルゴリズムの観点からこのプロセスを図解しており、実行の詳細または特定のソフトウエアのステップを説明することを企図していない。さらに、或る種類のステップの順序は、後のステップが先のステップの結果に依拠しないという意味で、任意である。現実の実施形態でのそのようなステップの順序の様式は、実行に依存する。
ステップ4601で、ホスト101が、物理的なインタフェース1701を介して受信HEMi1702へCDBを送信する。上述したように、このCDBには、イニシエータの識別を含むメタデータが伴う。受信HEMi1702は、そのmRAM内にこのCDBとメタデータを一時的にストアする。
ステップ4602では、受信HEMi1702が、クロスバー・スイッチ2201を介して共有RAMブロック318にアクセスし、16よりも多いCDB情報が使用可能か否かを決定するべく、CDB情報フリーリスト4102をチェックする。
使用可能なものが16以下であれば(ステップ4602の結果が「no」)、プロセスは、図に関連して詳細に説明される特定例処理に関する図47に図解のフローチャートへと進む。
16よりも多いCDB情報が使用可能であれば(ステップ4602の結果が「yes」)、ステップ4603において、受信HEMi1702は、クロスバー・スイッチ2201を介して共有RAMブロック318にアクセスし、メタデータ内に識別されたイニシエータが既に存在するか否かを判断するべく、イニシエータテーブル4108をチェックする。このステップは、図47に示されるフローチャートへの結果の1つとしても達せられることにご留意願いたい。
イニシエータがイニシエータテーブル4108内に無い場合(ステップ4603の結果が「no」)、ステップ4604において、受信HEMi1702は、空きイニシエータが使用可能がどうか決定するべく、イニシエータフリーリスト4112をチェックする。
空きイニシエータが利用可能でなければ(ステップ4604の結果が「no」)、ステップ4605において、受信HEMi1702が、キューフル・ルーチンを起動する。好適実施形態では、SSDコントローラ106がこの状況を処理する様式は、初期化の時点でユーザによって設定可能なパラメータに依拠する。この状況内でキューフル・リポートが作成されるべきことを、ユーザは決定することができ、これは、リソースが使用可能となるときまでコマンドの再試行が行われるようにイニシエータを制御する効果を有する。代替として、テーブルが、アクティブなコマンドを有していないことを意味する0のカウント・フィールド4203を有するいずれかのイニシエータを含むか否かを決定するべく、ユーザは、イニシエータテーブル4108のスクラブ(洗浄)の必要を決定することができる。そのようなイニシエータは、テーブルからスクラブされ、これにより、空間を新しいイニシエータのために使えるようにする。スクラブがイニシエータを開始すれば、プロセスの継続が可能である。そうでない場合には、キューフル・リポートが作成される。
空きイニシエータが利用可能であれば(ステップ4604の結果が「yes」)、ステップ4606において、受信HEMi1702が、イニシエータフリーリスト4112からイニシエータをポップする。
ステップ4607で、受信HEMi1702は、CDBを伴うメタデータ内に受け入れた識別情報を使用して、イニシエータアイデンティファイアフィールド4202にデータ投入する。
ステップ4608において、受信HEMi1702は、イニシエータに関するカウント・フィールド4203に1を加える。イニシエータテーブル4108内にイニシエータが既に存在している(ステップ4603の結果が「yes」)か否(ステップ4607から)かに係らず、このステップは実行される。
ステップ4609において、受信HEMi1702は、CDB情報フリーリスト4102からCDB情報(例えばCDB情報201)をポップする。
ステップ4610において、受信HEMi1702は、CDB情報テーブル4109からのCDB情報をそれ自身のmRAM内にコピーする。この時点では、セルフポインタフィールド3701を除き、CDB情報は空であることにご留意願いたい。
ステップ4611において、受信HEMi1702は、以下のようにCDB情報のフィールドにデータ投入する。
CDBフィールド3702内に、ホスト101から受信したCDBのコピーを置く。
イニシエータフィールド3703内に、イニシエータテーブル4108内のそのイニシエータに関する入力からのセルフポインタ4201のコピーを置く。
SCSIタグ・フィールド3705、SCSIフラグ・フィールド3706、Refタグフィールド3708、及びAppタグ・フィールド3709内に、CDBを含んだ伝送内でホスト101から受信したメタデータをセットする。このメタデータの性質は、図37に関連して記述される。
バーストレングスコントロールフィールド3707では、イニシエータフィールド3703内に識別された前記イニシエータに関連するイニシエータインフォ(InitiatorInfo)のバーストレングスコントロールフィールド4204内に含まれる前記情報のコピーがセットされる。
ステップ4612において、受信HEMi1702はクロスバー・スイッチ2201にアクセスして、セルフポインタ・フィールド3701によって指示されたCDB情報テーブル4109内のスロットに、データ投入されたCDB情報201をコピーする。
ステップ4613において、受信HEMi1702は、SCSI HEMi2001に関するワークリスト内に、セルフポインタ・フィールド3701のコピーをセットする。
SCSI HEMi2001に関するワークリストが予め空であった場合には、ワークリスト内へポインタを置くことによりSCSi HEMiを起こす。ワークリスト上に別のタスクが既に存在していた場合には、SCSI HEMiは、これらのタスクを完了する。どちらにしても、或る時点で、CDB情報201へのポインタは、ワークリストのトップにあり、ステップ4614において、SCSI HEMi2001は、そのワークリストにアクセスし且つポインタをポップするためにクロスバー・スイッチ2201を使用する。
ステップ4615において、SCSI HEMi2001は、CDB情報テーブル4109内のCDB情報201の場所にアクセスするためにクロスバー・スイッチ2201を使用し、CDB情報をそれ自身のmRAM内にコピーする。
ステップ4616において、SCSI HEMi2001は、CDB情報201のCDBフィールド3702からのCDBのコマンド部分を読み出して、それが、データ転送か否か(読出しまたは書込み)を決定する。
コマンドが読み出しまたは書き込み以外であれば(ステップ4616の結果が「no」)、ステップ4617において、SCSI HEMi2001は、CDB情報を、読出しまたは書込み以外のコマンドの処理に関与するARMプロセッサ2002に伝える。この時点で、図46に記述されたプロセスは終了する。
コマンドが読出しまたは書込みであれば(ステップ4616の結果が「yes」)、ステップ4618において、SCSI HEMi2001が、CDB情報201のCDBフィールド3702内にストアされたCDBの転送長フィールドとLBAを、上述したように、SCSI HEMi2001のmRAM内にストアされたコマンドテーブル2003と比較する。この比較によって、SCSI HEMi2001は、CDBによって転送が要求されるLBAのいずれかがコマンドテーブル内で既に識別されているかどうかを決定する。この比較での一致は、新たなCDBの対象となっているLBAの幾つかまたは全てが、既に、現在の転送の対象であることを示す。上述したように、SSDコントローラ106には、LBAが不一致なコマンドにさらされることがないように、一貫性を維持することが要求される。
SCSI HEMi2001が、コマンドテーブルに一致を発見したら(ステップ4618の結果が「yes」)、ステップ4619において、CDB情報の実行を遅らせ、そして、ステップ4618へ戻る。このループは、一致が存在しなくなるまで続けられる。
一致が発見されなければ(ステップ4618の結果が「no」)、ステップ4620において、SCSI HEMi2001が、CDBフィールド3702からの転送長及びLBAをコマンドテーブル2003内にセットする。
ステップ4621では、SCSI HEMi2001は、最も少ないタスクを含有するRdWr HEMiワークリストはどれかを決定するべく、RdWr HEMiワークリストの各々に関してカウント・レジスタ(例えばカウント・レジスタ2408)にアクセスする。
ステップ4622において、SCSI HEMi2001は、CDB情報201へのポインタを、識別されたワークリスト、例えば、RdWr HEMi2101に関するワークリスト上にセットし、図46に記述のプロセスは完了する。
ステップ4602の後で且つステップ4609の前のイニシエータ関連ステップは、1よりも多いイニシエータ(例えば、SAS及びファイバーチャネル)を可能とするプロトコルを必要とするのみであることにご留意願いたい。単一イニシエータ(例えばSATA)を可能とするのみのプロトコルには、これらのステップは不要である。その代わり、SATAに基づくシステムに関しては、最初の機能設定コマンド(Set Features Command)が受信されたときに、コントローラ106が、イニシエータをセットアップする。当業界において理解されるように、機能設定コマンドは、バーストレングスフィールド4204に必要とされるバースト長情報を含む。イニシエータがセットアップされた後、CDBのプロセスは図46に示されるように進行する。しかし、理解されるように、ステップ4603への応答は常に「yes」であり、プロセスはステップ4608(これは不要ではあるが有害ではない)に進み、次に、ステップ4609へと進む。このことが、SATA、SAS及びファイバーチャネルに関する共通なコードベースの使用を可能とする。
代替的実施形態では、わずかに異なるコードベースが、イニシエータを全く有しないSASシステムに関して使用される。この実施形態では、図46のプロセスは、ステップ4602からステップ4609へとスキップされる。さらに別の実施形態では、使用されるプロトコルに基づいて変数が設定され、その変数がSATAプロトコルを識別した場合には、プロセスが4602から4609へとスキップする。
上述したように、CDB受信時にCDB情報フリーリスト4102上で使用可能なCDB情報が16以下の場合には、特別な処理ルーチンが起動される。これらが存在する場合には、2つの特別なケースがチェックされ、処理される必要がある。
第1のケースでは、SSDコントローラ106が、CDBはリソース外にあることが報告された後に少なくとも1つのCDBの処理が可能であることを保証するべく、SCSIプロトコルによってSSDコントローラ106が要求される。この能力は、概ね、ホストが、エラー状況についての情報を求めるリクエストセンスCDBを発行することを可能とすることを企図するが、プロトコルは、このような状況で発行されるいずれのCDBに対してもコントローラが正確に応答することを要求する。
16個のアクティブなイニシエータに対する同時的なサポートがSSDコントローラ106において可能であることを顧客の要求が命ずる場合に、第2の特別なケースが存在する。これは、16までの実行可能な各イニシエータに関して少なくとも1つのアクティブなCDBを支持することが可能でなければならないことを意味する。
この顧客の要求は、16である現在アクティブなイニシエータよりも少ない場合には、アクティブとなり得る(16までの)各追加のイニシエータに1つのCDB情報を割り当てるべく、SSDコントローラ106は、十分なCDB情報を保存して維持しなければならない。顧客によってはこの要求を行わないので、この機構は実施に依拠することにご留意願いたい。一実施形態では、この機構は、初期設定において設定される変数によって作動可能とされる。別の実施形態では、この機能を必要とするシステム及びそうでないシステムのために、わずかに異なるコードベースが用いられる。
一実施形態では、これらの特別なケースの両者とも、図47に示されるように処理される。これらのステップは、図46のステップ4602の結果が「no」の後に、受信HEMiによって実行されることにご留意願いたい。
ステップ4701において、空きCDB情報が有るか否かを決定するべくCDB情報フリーリスト4102が調べられる。
空きCDB情報が存在しなければ(ステップ4701の結果が「no」)、プロセスはステップ4702へ進み、このステップはキューフル・ルーチンを起動する。詳細は使用されるプロトコルに依拠するが、概略、これには、ホストへキューフル・メッセージを戻すステップが含まれる。
空きCDB情報があれば(ステップ4701の結果が「yes」)、ステップ4703において、フリーリスト上に単一の空きCDB情報のみがあるのか否かを決定するべくフリーリスト4102が調べられる。
フリーリスト上に1つのCDB情報しかなければ(ステップ4703の結果が「yes」)、ステップ4704において、リザーブ・フラグがチェックされる。このフラグは、初期設定で「0」にセットされ、また、CDB情報がフリーリスト4102に加えられるときには常に「0」にセットされる。このリザーブ・フラグは、現在のCDBが、フリーリスト上の最新のCDB情報を使用する資格があるかどうかを示す。上述したように、SCSIプロトコルは、キューフルの後に受け取られた1つの追加のCDBが戻されることを要求する。このことは、フリーリスト上に1つのCDB情報のみが残っている場合には、第1のCDBはキューフル表示をトリガすることが必要であり、第2のCDBにはCDB情報の使用が許されることを意味する。
リザーブ・フラグが設定されていなければ(ステップ4704の結果が「no」)、ステップ4705において、リザーブ・フラグがセットされる。次に、プロセスはステップ4702へと続き、このステップがキューフル・ルーチンを起動する。
リザーブ・フラグが設定されていれば(ステップ4704の結果が「yes」)、ステップ4706において、プロセスは図46のステップ4603に戻り、これに続いて、リザーブCDB情報がCDBに割り当てられることとなる。
フリーリスト4102上の空きCDB情報の数が1よりも多ければ(ステップ4703の結果が「no」)、プロセスはステップ4707へと進み、そこで、当該イニシエータが既に少なくとも1つの現在のCDBを有するか否かを決定するために、そのCDBに関与するイニシエータのカウント・フィールド4203が評価される(カウント・フィールド≧1)。
そのイニシエータがアクティブなCDBを有していなければ(またはこれが新しいイニシエータであれば)(ステップ4707の結果が「no」)、プロセスはステップ4706へと進み、そこから、図46のステップ4603に至り、それに続いて、このイニシエータ用にCDB情報がポップされることとなる。そのイニシエータに少なくとも1つのアクティブなCDBが可能とされることを当該システムが保証するからである。
そのイニシエータが既にアクティブなCDBを有有していれば(ステップ4707の結果が「yes」)、当該システムには、そのイニシエータに対してCDBを保証することを要求されず、プロセスはステップ4708へと進み、少なくとも1の値を備えたカウント・フィールド4203を有するイニシエータテーブル4108内の入力数が、「Var1」との名称の変数にセットされる。この値は、その各々が少なくとも1つのアクティブなコマンドを有する現にアクティブなイニシエータの数を表す。
ステップ4709において、Var1は、16から減算され、その計算結果が、「Var2」との名称の変数にセットされる。これは、CDB情報が保証されなければならない追加のイニシエータの数を表す。
ステップ4710において、フリーリスト4102上の入力数がVar2と比較される。空きCDB情報の数が、Var2よりも少なくとも2大きければ(ステップ4710の結果が「yes」)、プロセスはステップ4706へと進み、そこから、図46のステップ4603に至り、それに続いて、保証に適合する十分なCDB情報の使用が可能なので、CDB情報がポップされる。
空きCDB情報の数が、2未満でVar2よりも大きければ(ステップ4710の結果が「no」)、ステップ4702において、システムはキューフルを報告する。Var2によって表されるイニシエータの数の以後のサービスを可能とするためには十分な数の空きCDB情報が維持されなければならず、加えるに、1つの追加のCDB情報が保存にとどまる必要があることから、これは、必要である。
このように、図47に示されるフローチャートは、上述した2つの特別なケースに関するチェックを行う。
図48は、CDB情報に基づいてIOPと転送要求がセットアップされる様式を図解するフローチャートを含む。
ステップ4801で、RdWr HEMi(例えばRdWr HEMi2101)は、そのワークリストにアクセスし、CDB情報(例えばCDB情報201)にポインタをポップするためにクロスバー・スイッチ2201を使用する。
ステップ4802え、RdWr HEMi2101は、ポインタに符合するCDB情報テーブル4109内の場所にアクセスするためにクロスバー・スイッチ2201を使用し、その場所でCDB情報201を発見する。RdWr HEMi2101は、CDB情報201をそのmRAM内にコピーする。
ステップ4803で、RdWr HEMi2101は、IOPフリーリスト4103上に、いずれかのIOPが存在するか否かを決定する。
フリーリスト上にIOPが存在しなければ(ステップ4803の結果が「no」)、ステップ4804において、RdWr HEMi2101は、IOPが実行を終了するのを待ち、その後、フリーリスト上に空きIOPが存在したならば直ちに、プロセスを再度開始する。
フリーリスト上にIOPが存在すれば(ステップ4803の結果が「yes」)、ステップ4805において、RdWr HEMi2101は、共有RAMにアクセスするのにクロスバー・スイッチ2201を使用し、IOPによって要求される転送要求の数を処理するべくトランスファリクエストフリーリスト4101上に十分な転送要求が存在するか否かを決定する。
フリーリスト上にある転送要求が不十分であれば(ステップ4805の結果が「no」)、ステップ4806において、RdWr HEMi2101は、転送要求が解消するのを待って、その後、ステップ4807に進む。
フリーリスト上に転送要求が存在すれば(ステップ4805の結果が「yes」)、ステップ4807において、RdWr HEMi2101が、フリーリストでトップのIOPポインタを取り出す。このポインタは、CDB情報のIOPフィールド3704内にコピーされる。
ステップ4808で、RdWr HEMi2101は、フリーリスト上のトップのポインタによって指示されたIOP(例えばIOP202)を、IOPテーブル4110からそのmRAM内にコピーする。この時点で、このIOP内に含まれる唯一の情報は、セルフポインタ3801である。
ステップ4809で、RdWr HEMi2101は、CDBフィールド3702からの転送長値を、CDB情報から「TLvar」との名称の変数にコピーする。この変数は、説明されるアルゴリズムの残りの間中、現在の転送長をストアする。(理解されるように、このケース及び他のケースにおいて、この説明は性質上概念的であり、現実の実行では、この名称の変数を含むこともあり、含まないこともある。)
ステップ4810で、RdWr HEMi2101は、CDBフィールド3702からのLBA値をCDB情報から「LBAvar」との名称の変数へとコピーする。その変数が、記述されたアルゴリズムの残りの間中そのLBAで現在の転送が始まることになっているLBAをストアする。
ステップ4811では、RdWr HEMi2101は、以下のように、IOP202にデータ投入する。
呼び出しHEMiフィールド3802では、RdWr HEMi2101は、自分の識別子をセットする。
CDB情報フィールド3805では、RdWr HEMi2101は、そのワークリストから予め取り出されたCDB情報ポインタをセットする。
イニシエータ・フィールド3804では、RdWr HEMi2101は、CDB情報201のイニシエータ・フィールド3703から得られたイニシエータ・ポインタを置く。
RdWr HEMi2101は、IOPの現在の状態を表示すように状態変数フィールド3810を設定する。
RdWr HEMi2101は、アボート・フラグ3811を初期化する。
Refタグ・フィールド3812とAppタグ・フィールド3813では、RdWr HEMi2101は、CDB情報201のRefタグ・フィールド3708とAppタグ・フィールド3709の内容(コンテンツ)をコピーする。
ステップ4812で、RdWr HEMi2101は、フリーリストでトップの転送要求ポインタを取り出す。
ステップ4813で、RdWr HEMi2101は、フリーリスト上のトップのポインタによって指示された転送要求を、転送要求テーブル4111からそのmRAM内へとコピーする。この時点では、転送要求内に含まれる唯一の情報は、セルフポインタ3901である。
ステップ4814で、RdWr HEMi2101は、IOPの転送要求割り当てフィールド3807をインクリメントして新たな転送要求を反映させる。
ステップ4815で、RdWr HEMi2101は、IOPの残存転送要求フィールド3808をインクリメントして新たな転送要求を反映させる。
ステップ4816で、RdWr HEMi2101は、転送要求のセルフポインタ3901をIOPトランスファリクエストポインタアレイ3809内にコピーする。
ステップ4817において、RdWr HEMi2101は、LBAvarからの値を転送要求のLBAフィールド3903内にコピーする。これは、転送の開始のために転送要求によって使用される場所である。
ステップ4818において、RdWr HEMi2101は、IOP転送長からTLvarを減算し、その解をポインタに加算して計算された値を備える転送要求のDRAMポインタフィールド3905を、そのIOP専用のIOPデータバッファ3203内のスペースにデータ投入する。この結果は、IOPのDRAM内の何処のスペースに転送要求に関するデータがストアされることになるのかを示す。この値は、直前の転送要求によって処理される転送のサイズに等しい量だけ、各後続の転送要求毎に大きくなる。
ステップ4819において、RdWr HEMi2101は、以下のように特定の転送要求フィールドにデータ投入する。
呼出しIOPフィールド3902では、RdWr HEMi2101は、自身が取り出したIOPへのポインタをIOPフリーリスト4103に置く。
LBAフィールド3903では、RdWr HEMi2101は、転送に関する始動LBAを示す現在LBAvar内にある値のコピーをセットする。
アボート・フラグ3906がクリアされる。
コマンドフィールド3907内に、必要な種類のコマンドをセットする。本例では、このコマンドは読出しである。
Refタグ・フィールド3909及びAppタグ・フィールド3910に、IOP202のフィールド3812と3813から得られた情報が投入される。
ステップ4820で、RdWr HEMiは、転送要求のLBA値を15で除算し、その商を、「Index」という名称の変数内にセットする。
ステップ4821において、RdWr HEMiは、フォワード・テーブル3201内の探索の実行のためにIndexを使用する。この探索により、転送要求のLBAフィールド内に識別されたLBAを含むスーパーページに符合するロー(行)が得られる。このローからのポートフィールドが、「PortA」との名称の変数内にセットされる。
ステップ4822で、TLVar内の値が、「TLTemp」との名称の変数内にコピーされる。
ステップ4823で、「Page」との名称の変数が、値1に初期化される。上述したように、各転送要求は、最大で3のスーパーページを処理可能であり、このスーパーページの各々は、15のLBAのブロックを処理することができる。この変数は、その転送要求に割り当てられたそのようなLBAブロックの数のトラックを保持する。
ステップ4824で、ステップ4820で実行された除算の余りが15から減算され、その計算結果が、「Offset」との名称の変数内にセットされる。上述したように、各スーパーページは、15のLBAを含み、転送内の第1のLBAは、スーパーページの中心にオフセットされる。また、上述したように、各転送要求は、各ページ要求が単一のスーパーページを処理することが可能な3つのページ要求を起動することができる。結果として、第1のLBAがスーパーページ内にオフセットされた場合、転送要求によって発行されるページ要求の1つは、15よりも少ない数のLBAを処理することとなる。ステップ4824は、このケースを扱う。
ステップ4825で、Offset内の値が、TLTemp内の値と比較される。
OffsetがTLTemp以上であれば(ステップ4825の結果が「yes」)、これは、転送が、転送要求によって処理可能なLBAの範囲内で完了することを意味する。
ステップ4826において、TLTemp内の値が、転送要求の転送長フィールド3904内に書き込まれる。
ステップ4827において、PortA変数内に識別されたポートに関与するフラッシュHEMiに関するワークリスト上に、転送要求をセットする。IOPに関して必要な全ての転送要求が割り当てられることとなるので、プロセスは、次に、終了する。
TLTempがOffsetよりも大きければ(ステップ4825の結果が「no」)、ステップ4828において、TLTempは、それが15以下であるか否かを決定するために評価される。
TLTempが15以下であれば(ステップ4828の結果が「yes」)、この転送要求により転送が完了することを意味しており、プロセスはステップ4826へと続き、これは上述したように進行する。
TLTempが15よりも大きければ(ステップ4824の結果が「no」)、ステップ4829において、OffsetがTLTempから減算され、その計算結果が、TLTemp内に戻ってストアされる。このステップは、現にセットアップされている転送要求に割り当てられるべきLBAを示すべく、TLTempを繰り返しデクリメントする。この値は、次に、転送要求の転送長フィールドを計算するのに使用される。
ステップ4830で、変数Index内の値は、インクリメントされる。
ステップ4831で、フォワード・テーブルの探索は、新たなIndex値に基づいて実行される。理解されるように、このことは、先行する探索によって提供されたローの後にローを生じ、したがって、15のLBAの次のブロックを生ずる。その行からのポート値は、「PortB」との名称の変数に書き込まれる。これは、LBAの次のブロックをストアするスーパーページを表す。
ステップ4832において、PortAとPortBが比較される。両者が等しければ(ステップ4832の結果が「yes」)、これは、15のLBAの次のブロックを含むスーパーページが、先行するスーパーページと同じフラッシュ・グループ内にストアされることを意味する。これは、理論上、現在の転送要求が、LBAの次のブロックを処理することができることを意味する。
ステップ4833で、Page変数は、3と比較される。Page変数が3より小さければ(ステップ4833のの結果が「no」)、これは、転送要求が、15のLBAの追加ブロックを処理可能であることを意味しており、したがって、プロセスは、転送要求ループを介して次の繰り返しをセットアップするように進行する。
ステップ4834で、Page変数は、LBAの新たなブロックが次のループ内の転送要求に割り当てられるという事実を示すべく、インクリメントされる。
ステップ4835で、Offset変数内に値15が書き込まれる。次の2のスーパーページに関するLBAの範囲は、15の正倍数の位置で始まるので、第1のスーパーページの後のいずれのスーパーページに関してもオフセットを必要としない。これは、ステップ4825での計算を目的として、及び、ステップ4829でのTLTempのデクリメントを目的として、Offsetを15にセットすることによって処理される。プロセスは、次に、ステップ4825にループし、そして、LBAの次のブロックへと進む。
PortB内の値がPortA内の値と異なる場合(ステップ4832の結果が「no」)、これは、LBAの次のブロックが、転送要求に割り当てられた先行するブロックとは異なるポート上にあることを意味する。転送要求は、1つのフラッシュ・グループ内のLBA上の作動のみが可能なので、現在の転送要求は、この時点で終了しなければならない。Page変数が3に等しければ(ステップ4833の結果が「yes」)、これは転送要求に既に3のスーパーページ相当のLBAが割り当てられていることを意味することから、転送要求は、同様に、また、終了しなければならない。
いずれの場合も、プロセスはステップ4836へと進み、このステップで、TLTempがTLVarから減算され、この計算結果、すなわち、転送要求に割り当てられたLBAの数を含む計算結果が、転送要求の転送長フィールド3904にストアされる。
ステップ4837において、転送要求が、PortA変数に識別されるポートに関連するフラッシュ・グループに割り当てられたフラッシュHEMiに関するワークリストに付加される。
ステップ4838で、TLTempの値がTLVarにストアされる。これが、次の転送要求の生成での使用のためにTLVarをセットアップする。
ステップ4839で、LBAVarがトランスファリクエスト転送長フィールド内の値に加算され、その計算結果がLBAVarに戻ってストアされる。これが、次の転送要求の生成での使用のためにLBAVarをセットアップする。
ステップ4840で、RdWr HEMiは、IOP転送要求割り当てフィールド3807を、これが「7」に等しいか否かを調べるために分析する。
7つの転送要求が既に割り当てられていれば(ステップ4840の結果が「yes」)、IOPはそれ以上のいずれの転送要求の割り当てもできない。上述したように、このケースは、IOPを完了させることと、その後の、先行するIOPの実行の結果として修正された転送長値とLBAによるIOPの再発行とによって処理される。すなわち、ステップ4841において、IOPの第1の繰り返しが完了し、この時点で、プロセスはステップ4811へループし、ここで、IOPの次の実行のためにIOPフィールドにデータ投入される。
7よりも少ない数の転送要求が既に割り当てられていれば(ステップ4840の結果が「no」)、プロセスは、ステップ4812へとループして戻り、次の転送要求を発行するプロセスが始まる。新たな転送要求は、直前の転送要求に基づいて調節された転送長値及びLBAを得ることにご留意願いたい。
図49は、フラッシュHEMi(例えばフラッシュHEMi307)が、フラッシュHEMiのワークリスト上に存在する転送要求に基づいて、読出しまたは書込み動作に関するページ要求をセットアップする様式を図解する。
ステップ4901で、フラッシュHEMi307は、ローカル転送要求テーブル2901が少なくとも1つの空きスロットを含むか否かを決定するべく、そのローカル転送要求フリーリスト2905をチェックする。
ローカル転送要求テーブル2901が少なくとも1つの空きスロットを含まない場合(ステップ4901の結果が「no」)、ステップ4902において、フラッシュHEMi307は待機し、その後にステップ4901に戻る。このウェイト(待ち)は、特定の時間の間、または、他のタスクが実行を終了する時までである。
空きローカル転送要求が使用可能となったら(ステップ4901の結果が「yes」)、ステップ4903において、フラッシュHEMi307は、そのワークリストにアクセスし、且つ、そのワークリストから転送要求をポップするべく、クロスバー・スイッチ2201を使用する。
ステップ4904で、フラッシュHEMi307は、次の空きローカル転送要求へのポインタを、ローカル転送要求フリーリスト2905からポップする。
ステップ4905で、フラッシュHEMi307は、共有RAMブロック318内の転送要求テーブル4111にアクセスするべくクロスバー・スイッチ2201を使用し、ワークリストによって指示される転送要求を、テーブルから、ローカル転送要求フリーリスト2905から取り出されたポインタによって指示されるローカル転送要求テーブル2901からのスロット内にコピーする。
ステップ4906で、転送要求のLBAフィールド3903からの値は、LBAvarとして知られた変数内にコピーされる。
ステップ4907で、転送要求の転送長フィールド3904からの値は、TLvarとして知られた変数内にコピーされる。
ステップ4908で、転送要求のデータパスDRAMポインタフィールド3905からの値は、DPvarとして知られた変数内にコピーされる。
ステップ4909で、フラッシュHEMiは、そのページ要求フリーリスト2910からページ要求をポップする。フラッシュHEMi307のmRAMは、フラッシュHEMi307が一度に処理可能な6つのローカル転送要求によって要求可能な最大数である18個のページ要求を含むので、空きページ要求が存在するか否かを決定するのにチェックの必要はないことにご留意願いたい。
ステップ4910で、LBAvar内の値は15によって除算される。
ステップ4911で、ステップ4910からの計算結果は、フォワード・テーブル3201へのオフセットとして使用される。この探索は、フラッシュメモリ内のLBAの場所に関するバンク、ブロック及びページのアドレス情報を提供する。フォワード・テーブルからのポート情報は、このフラッシュHEMiに転送要求を送信する図48のフローチャート内に使用されているので、不要であることにご留意願いたい。このフラッシュHEMiは、単一ポートを制御するのみである。
ステップ4912で、フォワード・テーブルの探索からのバンク、ブロック及びページのアドレス情報は、ページ要求のフラッシュ・リード・アドレスフィールド4006内にストアされる。全ページよりも少ない書込みを行う書込み動作はリード・モディファイ・ライトが必要なので、このような書込みにはアドレス読出しが必要であることにご留意願いたい。全ページの書込みがされるべきことを示す15の転送長を伴うページ要求の書込みの場合には、ステップ4910〜4913はスキップ(省略)される。
ステップ4913で、ステップ4910からの余りが、ヘッド長フィールド4008内にコピーされる。これは、もし有るならば、そこで転送が始まるスーパーページ内へのオフセットを表す。
ステップ4914で、DPvarからの値は、データパスDRAMポインタフィールド4004内にコピーされる。これは、そこからページ要求がデータを読出し、または、そこへデータ要求がデータを書込む、データパスDRAM107内の場所を示す。
ステップ4915で、転送要求に基づいて他のページ要求フィールドにデータ投入される、これらのフィールドは、図40に関連して上述されている。これらのフィールドには以下のようにデータ投入される。
呼出し転送要求フィールド4002を、呼び出しローカル転送要求(ローカル転送要求フリーリスト2905から取り出された値)へのポインタで埋める。
コマンドフィールド4003を、転送要求のコマンド・フイールド3907に基づいて埋める。転送要求の書込みのケースでは、書込みがスーパーページの全15個のLBA(転送長=15)をカバーする場合には、コマンドフィールドは、単純な書込みで埋められ、または、書込みが全スーパーページよりも小さな範囲をカバーする場合には、コマンドフィールドはリード・モディファイ・ライトで埋められる。
コマンドフィールド4003がトランザクションを書込みまたはリード・モディファイ・ライトとして識別した場合には、フラッシュ書込みアドレス・フィールド4007は、書き込まれるべきスーパーページの物理的アドレスで埋めらる。スーパーページが識別される様式は、図54に関連して記述される。
ステップ4915で、状態変数フィールド4011が、また、初期化される。
ステップ4916で、TLvarが、値「15」と比較される。
TLvarが15以下であれば(ステップ4916の結果が「yes」)、現在のページ要求が、転送要求によって要求された最新のページ要求を表していることを意味する。
ステップ4917で、テール長フィールド4009が、15−(TLvar+ヘッド長)に設定される。これは、スーパーページのエンドにLBAを含まない部分的な転送を表す。テール長フィールドは、転送要求に関する最新のページ要求を除き、全てのページ要求に関して0に設定されることにご留意願いたい。
ステップ4918で、転送長フィールド4010は、TLvarにセットされる。
ステップ4919で、ページ要求へのポインタが、転送要求のページ要求ポインタ・アレイ3913上に置かれる。
ステップ4920で、ページ要求ポインタアレイ3919からの各ポインタが、ステップ4911の探索で得られたバンクに符合するバンクキュー2911内のキュー(キュー)上にコピーされる。
ステップ4921で、転送要求「終了」変数が、呼び出し転送要求に関する転送要求状態変数3908にセットされる。この変数は、転送要求が、ローカル転送要求キュー2904から取り出される次の時にチェックされ、クリーンアップ・ルーチンに対する必要性を示す。
図49に記述されたプロセスは、これで終了する。
TLvarが15よりも大きければ(ステップ4916の結果が「no」)、これは、現ページ要求が、転送要求に関する最新のページ要求ではないことを意味する。ステップ4922で、テール長フィールド4009は「0」に設定される。
ステップ4923で、ページ要求の転送長フィールド4010は、15から、ヘッド長フィールド4008に設定された値を引いた値に設定される。これは、スーパーページの先頭部分で始まらない転送に関するスーパーページ内へのオフセットを表す。
ステップ4924で、ページ要求へのポインタが、転送要求のページ要求ポインタ・アレイ3913上に設定される。
ステップ4925で、TLvarから15が引かれる。
ステップ4926で、転送長フィールド4010からの値がLBAvarに加えられる。
ステップ4927で、転送長フィールド4010からの値がDPVarに加えられる。プロセスは、次に、新たなページ要求のため、ステップ4909へループして戻る。
このループは、転送要求によって要求される最新のページ要求がバンク・キュー上に転送されるまで継続する。
図50は、フラッシュHEMi実行ループを示す。このループは、転送要求とページ要求の実行を処理する。
ステップ5001で、フラッシュHEMiは、フラッシュ・ポートが空いている(すなわち、現在、フラッシュ・グループとの転送に使用されていない)か否かを決定するべくフラッシュ・ポートをチェックする。
フラッシュ・ポートが空いていなければ(ステップ5001の結果が「no」)、ページ要求ハンドラは作動できない。ステップ5002で、フラッシュHEMiは、ローカル転送要求キュー2904上にいずれかの転送要求が存在するか否かを決定するべくチェックする。
キューがローカル転送要求を含むならば(ステップ5002の結果が「yes」)、ステップ5003において、フラッシュHEMiは、キューのトップ上のローカル転送要求を処理する。
ステップ5003に続いて、または、キューがローカル転送要求を含んでいなければ(ステップ5002の結果が「no」)、ステップ5004において、フラッシュHEMiは、フラッシュHEMiのワークリスト(例えば、ワークリスト4107)上にいずれかの転送要求が在るか否かを調べるべくチェックする。
ワークリストが転送要求へのポインタを含むならば(ステップ5004の結果が「yes」)、ステップ5005において、フラッシュHEMiは、ローカルトランスファリクエストフリーリスト2905が、いずれかの空きローカル転送要求を含んでいないか否かを調べるべくチェックする。
ローカル転送要求が使用可能であれば(ステップ5005の結果が「yes」)、ステップ5006において、フラッシュHEMiは、ワークリストのトップ上の転送要求を処理し、これには、転送要求のフラッシュHEMiのmRAM内へのコピー及びページ要求の生成が含まれる(図49参照)。
ステップ5006に続いて、またはワークリスト上に転送要求が無ければ(ステップ5004の結果が「no」)、または空きローカル転送要求が無ければ(ステップ5005の結果が「no」)、ステップ5007において、フラッシュHEMiは、スリープ・モードに入る必要があるか否かを決定するべくその現在の状態をチェックする。例えば、ステップ5001、5002及び5004の結果が「no」であることによりステップ5007に至った場合には、フラッシュHEMiは、いずれのページ要求または転送要求にも作用することができず、したがって、スリープ・モードに入ることとなる。上記に説明したように、スリープ・モードに入ることにより、フラッシュHEMiは、電力を節約し、転送要求がワークリストに加えられた場合には、それ自身の迅速な反応を可能とする。
別の実施形態では、フラッシュHEMiは、他のタスクが使用可能でない時には、スリープ・モードには入らず、代わりに、パトロール機能ハンドラを呼び出す。パトロール機能は、以下に記述するように、エラーに関してスーパーページをチェックし、必要ならば、そのエラーを訂正する。
ステップ5008で、フラッシュHEMiは、必要とされるスリープ期間を計算する。これは、現在の状態に基づき、いずれかの実行中のタスクが完了する前にフラッシュHEMiを起こすように設計される。すなわち、例えば、フラッシュ・ポートがフラッシュ転送へのステージバッファによって使用されている場合には、フラッシュHEMiは、残り部分の転送がどの程度の長さとなるかを決定すべくフラッシュ転送カウント・レジスタ2712をチェックし、転送が行われる前にスリープ・モードが終了するようにスリープ・モードの期間を設定する。上記に説明したように、スリープ・モードは、一続きの無演算命令を繰り返すことによって設定され、使用されるノーオペレーション命令の数は、必要とされるスリープ期間に基づいて決定される。
ステップ5009において、フラッシュHEMiは、スリープ・モードに入る。スリープ・モードから出る時、プロセスは、ステップ5001に戻る。
ステップ5001のチェックが、フラッシュ・ポートが空いていることを示していれば(ステップ5001の結果が「yes」)、ステップ5010において、フラッシュHEMiは、(a)バンク・キューのトップでページ要求によって必要とされ(ニード・バンク・フラグが設定されている)、且つ(b)レディ状態(バンクRのフラグが設定されている)のバンクが有るか否かを決定すべくバンク・ビットマップ2920をチェックする。
フラッシュ・ポートが空いていることを示していなければ(ステップ5010の結果が「no」)、プロセスは、いずれかの転送要求を処理する必要があるかどうかを決定するべくステップ5002へ進む。
必要かつレディ(needed and ready)状態であるバンクがあれば(ステップ5010の結果が「yes」)、ステップ5011において、現在のバンクが、両方の基準に合致する最も低いバンクに設定される。例えは、バンクビットマップ2920が、バンク0、2及び4の全てが両方のフラグのセットを有することを示す場合には、ステップ5011は、バンク0を選択することになる。
ステップ5012で、ページ要求がいくつかのリソース(例えばDMAチャネル)を必要とするか否かを決定すべく、選択されたバンクキューのトップにあるページ要求の状態変数フィールド(本例内のキュー0)がチェックされる。ページ要求がリソースを必要とする場合(ステップ5012の結果が「yes」)、ステップ5013において、フラッシュHEMiが、リソースが使用可能かどうかを決定する。その使用可能性はステップ5001において確認されているので、フラッシュ・ポートに関するチェックは不要なことにご留意願いたい。
必要なリソースが利用可能であれば(ステップ5013の結果が「yes」)、または、リソースが必要でなければ(ステップ5012の結果が「no」)、プロセスは、5014に進み、この中で、選択されたバンクキューのトップにあるページ要求内のコマンドフィールドは、コマンドが、読出し、または、リード・モディファイ・ライト、または、消去であるか否かを決定するべくチェックされ、適切なページ要求ハンドラが呼び出され、実行される。
ページ要求ハンドラが戻った後に、ステップ5015に達する。このステップにおいて、ハンドラがフラッシュ・ポートを使用したか否かを決定するべくハンドラの戻り値がチェックされる。
ハンドラが、フラッシュ・ポートを使用した場合(ステップ5015の結果が「yes」)、フラッシュ・ポートは現在ビジーなので、それ以上のページ要求の実行はできず、フラッシュHEMiがスリープ・モードに入ることができるかどうかの決定のためプロセスがステップ5007へと進む。
ハンドラがフラッシュ・ポートを使用しなかった場合(ステップ5015の結果が「no」)、または、ページ要求に関して使用可能なリソースが不十分であった場合(ステップ5013の結果が「no」)、ステップ5016において、より大きい番号の付いたバンクが、必要かつレディ状態であるか否かを決定するべくフラッシュHEMiがバンクビットマップ2920をチェックする。バンク0、2及び4が必要かつレディ状態であり、そして、バンク0が処理される上記に示した例では、バンク2がバンク0よりも大きい番号が付いており、そして、必要かつレディ状態なので、ステップ5016の結果は「yes」となる。他方、ステップ5014がバンク4を処理した場合、バンク0と2が必要かつレディ状態に維持されていても、この状態で4よりも大きい番号の付いたバンクは存在しないので、この例でのステップ5015の結果は「no」である。
必要かつレディ状態であるようなより大きい番号の付いたバンクが存在する場合(ステップ5016の結果が「yes」)、ステップ5017において、現在のバンクが、当該より大きい番号の付いたバンクにセットされる。次に、プロセスは、ステップ5012へと戻り、ここで、ステップ5017において選択されたバンクに関し、リソースチェックが起動される。
必要かつレディ状態であるようなより大きい番号の付いたバンクが無い場合(ステップ5016の結果が「no」)、プロセスは、ワークリスト上のいずれかの転送要求を処理すべく、ステップ5004に戻る。処理に対しレディ状態にあるページ要求が常に有るとしても、ページ要求ハンドラのループを周期的に遮断して規則的基準に基づく転送要求の処理を可能とすることを確保するべく、プロセスはループのトップ(ステップ5001)には戻らないことにご留意願いたい。
このループは、システムに電力供給される限り、際限なく継続する。
ページ要求読出しハンドラについて図51で図解する。このフローチャートは、ページ要求が読出しコマンドを含む場合のステップ5014で行われるステップを示す。
ステップ5101で、ページ要求がどの状態にあるかを決定するべくページリクエスト状態変数フィールド4011がチェックされる。通常、ページ要求の読出しは、3の状態:コマンド、ニード・ステージバッファ及びフラッシュ転送終了(Flash Transfer Done)を経て進行する。各状態に続いて、ハンドラは、図50に図解された実行ループのステップ5015へ戻る。ページ要求は、コマンド及びニード・ステージバッファ段階の後のバンクキューのトップ上に残り、このような戻りに続いて、フラッシュHEMi実行ループは後でこの同一のページ要求に戻ることにご留意願いたい。
コマンド状態がセットされた場合(ステップ5101の結果が「コマンド」)、ステップ5102において、フラッシュHEMiが、ページ要求がそこからポップされたバンクキューに関連するフラッシュバンクに関するCS信号をアサートする(例えば、線703上のCSのアサート)。
ステップ5103で、フラッシュHEMiは、CLE信号803をアサートし、バス709上に読出しコマンドの第1の命令コードをセットする。フラッシュHEMiは、ページ要求のコマンド・フィールド4003内の読出しコマンドの存在に基づいてその命令コードの使用を認識する。CLE信号のアサートは、コマンドのラッチを可能とするべく、CS信号によって選択されたバンク内のフラッシュダイを必要とし、そして、バス709上で送られるビットは、コマンドとしてラッチされる。
ステップ5104において、フラッシュHEMiは、ALE信号802をアサートし、バス709上に読出しに関する物理的アドレスをセットする。フラッシュページに関するアドレスは、フラッシュ読出しアドレス4006から得られる。転送が、ページの先頭ではなく、ページへのオフセットで始まる場合には、このオフセットは、ヘッド長フィールド4008から得られ、アドレスの一部として送られる。このオフセットは、バス709への転送が始まるページバッファ内の場所をセットするのに使用される。転送長フィールド4010は、適正数のバイトが送られたときに転送を中止するのに使用されるので、ページのエンド(テール長)でオフセットを送信することは理由が無いことにご留意願いたい。
適正なバンクに関するCS信号がアサートされた状態に維持されるので、そのバンク上のフラッシュダイは、ALE信号を受信する。この信号は、フラッシュダイが、そのアドレスラッチ内にバス709上のビットをラッチすることを生起する。上記に説明したように、全部で4のダイは、同一のアドレスを受信し、これは、各々のダイ内のデータ1ページのスタートアドレスである。上記に、また、説明したように、バンクの各ダイ内の同一アドレスにある4つのページは、1つのスーパーページを構成し、1つのスーパーページは、15のセクタに相当し、これは、15個の連続するLBAに関連するコンテンツを構成する。
ステップ5105で、フラッシュHEMiは、CLE信号803をアサートし、読出しコマンドの第2の命令コードをバス709にセットする。CLE信号のアサートは、その信号のコマンドのラッチを可能とするべく、CS信号によって選択されたバンク内のフラッシュダイを必要としており、バス709上で送られたビットは、コマンドとしてラッチされる。フラッシュダイが第2の読出し命令コードを受信したときに、フラッシュメモリの先行する説明で特定したアドレスからページバッファへの読込みを自動的に開始する。
ステップ5106で、フラッシュHEMiは、ページ要求の状態変数フィールド4011を更新する。他の更新の間に、現在の状態は、ニード・ステージバッファにセットされる。
ステップ5107において、コマンド状態に関して実行される一連のステップがフラッシュ・ポートを使用したので、戻り値は、ビジーではないフラッシュ・ポートにセットされる。しかし、この使用は非常に短く、そして、完全である。
つぎに、ページ要求読出しハンドラは、図50のステップ5015に戻る。
ステップ5014の結果として、ハンドラがこのページ要求を呼び出す2回目では、ステップ5101でチェックされる状態は、ニード・ステージバッファである。
ステップ5108において、ステージバッファが、空いているか否かを決定するべくチェックされる。ステージバッファが空いていなければ(ステップ5108の結果が「no」)、ページ要求の読出しハンドラは、何の作動もすることなく、元に戻る。ステージバッファが空いていれば(ステップ5108の結果が「yes」)、ステップ5109において、ステージバッファがこのプロセスに割り当てられる。
ステップ5110で、フラッシュHEMiは、フラッシュメモリ・ページ・バッファ(これは、フラッシュ読出しの結果としてフラッシュメモリから読込まれた値を含む)からステージバッファへDMA転送をセットアップする。
ステップ5111において、フラッシュHEMiは、ページ要求の状態変数フィールド4011を更新する。他の更新の間、現在の状態が、フラッシュ転送終了にセットされる。これはDMA転送なので、このことが、フラッシュ転送がフラッシュHEMiとは無関係に発生する事実を示す。ハンドラが呼び出される次の回に、フラッシュ転送は完了する。
ステップ5112で、フラッシュ・ページバッファとステージバッファの間のDMA転送は、ページ要求読出しハンドラが元に戻った後の或る期間にわたりフラッシュ・ポートを占有するので戻り値は、ビジーなフラッシュ・ポートにセットされる。
次に、ページ要求読出しハンドラは、図50のステップ5015に戻る。
ステップ5014の結果として、このページ要求に関してハンドラが呼び出される第3回目では、ステップ5101においてチェックされる状態は、フラッシュ転送終了である。
ステップ5113で、フラッシュHEMiは、ステージバッファへの転送の一部として自動的に実行されるECCチェックが読出しデータ内に何らかのエラーを識別したか否かを決定する。
エラーが検知されたら(ステップ5113の結果が「yes」)、ステップ5114においてエラーハンドラが呼び出される。このハンドラが動作する様式は、検知されたエラーの性質と数に依拠する。検知されたエラーの数が、訂正するには余りに多い場合には、2回目の読込みがより良いデータを生ずることを期待して、エラーハンドラは、2回目のデータ読出しを生起する(1以上のフラッシュセルの状態が、有効データとエラーとの間の閾値に近い場合には、このことが可能である)。検知されたエラーの数の訂正が可能な数の場合、エラー・ハンドラは、ECC訂正エンジン3101によって訂正されるべきデータを生起することができる(図31に関する説明参照)。
ステップ5115で、フラッシュHEMiは、ステージバッファ(これは、ニード・ステージバッファ状態のプロセスの結果として、フラッシュ・ページバッファから読込まれた値を含む)からデータパスDRAM107へDMA転送をセットアップする。
ステップ5116で、ページ要求読出しハンドラはウェイト(待ち)状態にある。DRAMへのDMA転送は非常に速いので、読出しハンドラは、この時点では、元に戻らないが、一時的には引き延ばす。
ステップ5117において、フラッシュHEMiは、転送カウント・レジスタ2716が、DMA転送の完了を示す0の値を有するか否かをチェックする。これが0の値を有していない場合(ステップ5117の結果が「no」)、ウエイト(待ち)ステップ5116が繰り返される。DMA転送が終了すると(ステップ5117への結果「yes」)、ステップ5118において、ステージバッファが、他のオペレーションによる使用のために解放される。
ステップ5119で、ページ要求が、バンク・キューから取り出される。これは、このページ要求のこれ以上の処理が不要なので行われ、バンク・キュー上の次のページ要求をこの時点で処理することができる。
ステップ5120で、フラッシュHEMiは、転送要求の残存ページ要求フィールド3912をデクリメントしてページ要求が完了した事実を示す。
ステップ5121において、フラッシュHEMiは、残存ページ要求フィールドが0に達したか否かの決定のためのチェックを行う。
このフィールドが0に達していたならば(ステップ5121の結果が「yes」)、これは、転送要求に関する全てのページ要求が完了したことを意味する。ステップ5122において、転送要求はローカル転送要求キュー2904に付加され、したがって、フラッシュHEMi実行ループによって処理されることとなる。この時点で転送要求はダン(完了)状態(図49のステップ4921参照)を有しており、これが、ローカル転送要求キューから取り出されたならば直ちにクリーンアップ工程が起動される(以下を参照)。
転送要求に関して追加のページ要求が残っている場合(ステップ5121の結果が「no」)、または、ステップ5122が完了した時に、ステップ5123に達する。ステップ5123において、戻り値が、フラッシュ・ポート・ノット・ビジーに設定される。
次に、ページ要求読出しハンドラは、図50のステップ5015に戻る。
図52は、フラッシュ読出し動作の或る態様を詳細に図解する。
ステップ5201で、フラッシュHEMiは、CS/RBバス702内の線の1つをロウ(low)に駆動する。この信号は、続いて反転され、選択されたフラッシュ・メモリバンクの4のフラッシュ・メモリチップのチップ・イネーブル・ピン上に、その信号がハイ(high)として受信されることを生起する。
ステップ5202において、フラッシュHEMiは、CLE信号803をハイ・に駆動する。これは、選択されたバンク上のダイに、次の信号の組はコマンドより成ることを知らせる。
ステップ5203で、フラッシュHEMiは、バス709上の読出しコマンドの第1相を構成する8ビットを送出する。フラッシュメモリデバイスでは慣用的であるが、読出しコマンドの第1相は、フラッシュダイに対して読出しアドレスの受信準備を指令する。コマンドの第1相は8ビットで構成され、4のコピーが、32ビット・バス709上をパラレルに駆動される。例えば、第1の読出しコマンドが、命令コード08の場合、バス709上の情報は、08080808となり、コマンドの1のコピーが各ダイに分配される。CLEは、予め、ハイに駆動されており、且つ、選択されたバンク内の各ダイのCLEピン上に受信されるので、バンク内の各ダイは、前記コマンドを、そのコマンドラッチ内にラッチする。
ステップ5204で、フラッシュHEMiは、CLEをロウに、そして、ALE信号802をハイにアサートする。これによって、フラッシュダイによるアドレス受信が準備される。
ステップ5205で、フラッシュHEMiは、読出されるアドレスの1バイトを送出する。これは、バス709上にアドレス・バイトの4コピーを送出することによって行われる。これが、選択されたバンク上の各フラッシュダイのアドレスラッチ内への、バイトのラッチを生起する。
ステップ5206で、フラッシュHEMiは、全てのアドレス・バイトが送られたかどうかを決定する。全てのアドレス・バイトが送られてない場合(ステップ5206の結果が「no」)、プロセスは、次のアドレス・バイトを送信するべく、ステップ5205へ戻る。好適実施形態では、各アドレスは、5バイトで構成されており、したがって、このループは、4回繰り返される。
好適実施形態では、フラッシュダイに関する完全なアドレスを提供するためには5つのアドレス・ストローブで十分である。しかしながら、典型的なフラッシュメモリチップは、そのチップが要求するアドレス・ビットを超えたアドレス・ストローブを無視する。この理由で、アドレス機構のいかなる再設計の必要もなく、フラッシュ・ダイをより小さく且つ安価なフラッシュ・メモリチップに置換することができる。なぜなら、比較的小さなフラッシュ・メモリチップは、より少ないアドレス・バイト(例えば、5バイトではなく4バイト)を必要とするが、これらのチップは、受信したいずれの不要なアドレス・バイトも無視し、したがって、これらは、アドレスのサイクル数の削減の必要なしにシステムに組み込むことができるからである。同様に、アドレスのサイクル数、したがってアドレス・バイト数の増加によって、小さなチップに関するいかなるアドレス関連再設計の必要なしに、任意の寸法のフラッシュメモリチップを処理するようにシステムの設計が可能である。
全アドレスが送られたならば(ステップ5206の結果が「yes」)、プロセスは、ステップ5207を継続し、その中で、CLEはアサートされ、ALEは、アサート停止される。
ステップ5208で、読出しコマンドの第2相は、A/Dバス上に送られる。慣用的には、読出しコマンドの第2相は、フラッシュメモリチップがフラッシュダイからページバッファへの読出しを開始するように機能する。
ステップ5209で、フラッシュダイは、各々、それらのReady/Busyピンをビジーにセットする。上述したように、これらのピンは、各々、1つのCS/RB線に接続され、これらは、さらに、SSDコントローラ106のピンに接続される。フラッシュメモリバンクがビジーであり、追加のコマンドの受信ができないことをフラッシュHEMiが認識することは、これによって生起される。ビジー信号がアサートされる様式は、図11に関連して詳細に記述される。
ステップ5210において、各フラッシュダイは、要求されたフラッシュメモリアドレスからのデータをダイの内部ページバッファ内へと取り込む。
ステップ5211で、フラッシュバンクからのR/B信号は、「レディ(ready)」状態へと変化する。これは、ダイからの全部で4のReady/Busyピンが、「ビジー」状態から「レディ」状態へ変わったことを意味しており、要求されたデータが各チップのページバッファ内に存在しており且つバス709上での読出しが可能であることを示している。
ステップ5212で、フラッシュHEMiは、REをアサートする。従来と同様に、これは、影響を受けたバンク上のダイのページバッファがバス709上の各単一バイトを読み出すことを生起する。これらの4バイトがダブルワードを構成する。このダブルワードは、ステージバッファへ転送される。
ステップ5213で、フラッシュ転送カウント・レジスタ2712は、デクリメントされる。このレジスタは、転送されるべきダブルワードの数を保持する。読出しが1ページの一部分のみの転送の場合には、ページバッファ内に追加のデータが存在したとしても、フラッシュ転送カウント・レジスタは、適切な時点で、転送を停止する。その追加のデータは、ページバッファが使用される次回に上書きされる。
ステップ5214において、フラッシュ転送カウント・レジスタは、それが0に達したか否かを決定するべくチェックされる。それが0でない場合(ステップ5214の結果が「no」)、プロセスはステップ5212に戻り、次のダブルワードの退出時間を記録する。
フラッシュ転送カウントが0であれば(ステップ5214の結果が「yes」)、フラッシュからの転送は完了である。この時点で、データはステージバッファ内に存在する。上述したように、これは、次に、ステージバッファからデータバスDRAMへと転送され、ここから、ホスト・ポートを介してホストに至る。
図53は、図50のステップ5014の一部としてのペーシ要求書込みハンドラの実行を図解する。当業者によって理解されるように、フラッシュ書込みは、新たなデータでフラッシュページに上書きすることはせず、その代わり、古いフラッシュページを新たなデータを有する新たなフラッシュページで置換して、古いページを無効にする。すなわち、書込みがページの一部分の変更のみである場合、リード・モディファイ・ライトとして知られた動作中に、ページの変更されていない部分が新たなページにコピーされなければならない。
ページ要求書込みハンドラは、ステップ5301で起動し、これは、ページ要求状態変数4011をチェックする。リード・モディファイ・ライト動作の場合、状態は、コマンドにセットされた状態変数で開始する。
コマンド状態の識別に続くプロセス(ステップ5302〜5307)は、読出しハンドラでのコマンド状態の識別に続くプロセス(図51のステップ5102−5107)と同様であり、以下により詳細に記述する(理解されるように、実際のソフトウエアの実施形態においては、これら2つのステップのグループは、単一なソフトウエア・ルーチン内に結合可能である)。このプロセスは、ニード・ステージバッファ及びステージ1にセットされた状態変数によって終了する。この時点で、フラッシュは、書込みに従うLBAを含むスーパーページを読み出すようにセットアップされる。書込みハンドラは終了し、制御は、フラッシュHEMi実行ループ(図50のステップ5015)へ戻る。
ニード・ステージバッファ1状態のプロセス(ステップ5308〜5312)は、読出しハンドラ内のニード・ステージバッファ状態の識別に続くプロセス(図51のステップ5108〜5112)と同様である。影響を受けたページの全体がフラッシュページバッファ内に存在するが、書込みで変更されないLBAを含むセクタのみがステージバッファ内にコピーされることにご留意願いたい。このプロセスは、ニード・ステージバッファ2にセットされる状態変数によって終了する。書込みハンドラは終了し、制御は、フラッシュHEMi実行ループ(図50のステップ5015)に戻る。
ステップ5301内のニード・ステージバッファ2状態の識別に続くプロセスは、ステップ5313で始まり、この中で、ECCロジック3102がフラッシュから読込んだデータの中にいずれかのECCエラーを検知したかどうかについての決定が行われる。
エラーが検知された場合(ステップ5313の結果が「yes」)、ステップ5314において、エラーハンドラが呼び出される。ハンドラが作動する様式は、検知されたエラーの性質と数に依拠する。検知されたエラーの数が訂正するには余りに多すぎる場合には、2回目の読込みがより良好なデータを生ずるとの期待で、エラーハンドラが2回目のデータ読込みを生起する(1以上のフラッシュセルが有効データとエラーの間の閾値に近い場合には可能である)。検知されたエラーの数が訂正可能な数ならば、エラーハンドラは、ECC訂正エンジン3101によるデータ訂正を生起することができる(図31に関連する説明参照)。
エラーが検知されなかった場合(ステップ5313の結果が「no」)、ステップ5315において、DRAMからステージバッファDMAへの転送がセットアップされる。DMA転送がフラッシュHEMiによってセットアップされると、HEMiによるそれ以上のいかなる干渉もなく、自動的にプロセスが進行する。この転送は、書込み内で変えられたLBAに符合するデータを含むのみであり、このデータは、フラッシュから受信したデータと併合され、したがって、このステップに続き、ステージバッファは、新たに書込まれたLBAと上書きされていないスーパーページからのLBAに関する古いデータを含む全スーパーページ(4ページ)のデータを保持することにご留意願いたい。
ステップ5316及び5317は、図51内のステップ5116及び5117と同一であり、詳細な記述は省略する。
ステップ5318で、CS信号がセットされる。このステップは、図51のステップ5102と同一である。
ステップ5319で、CLEがセットされ、第1の書込み命令コードがフラッシュに送られる。このステップは、図51内のステップ5103と同様に動作する。
ステップ5320で、ALEがセットされ、書込みに関するアドレスがフラッシュに送られる。このステップは、図51内のステップ5104と同一である。
ステップ5321で、フラッシュHEMiは、ステージバッファからのDMA転送をフラッシュにセットアップする。次に、この転送は、フラッシュHEMiによるそれ以上の関与なしに、自動的に行われる。
ステップ5322で、フラッシュHEMiは、次の状態がフラッシュトランスァダンであることを示すべく、ページ要求状態変数(ぺージ要求状態変数)を更新する。
ステップ5323で、戻り値がフラッシュ・ポート・ビジーにセットされ、これに続いて、書込みハンドラが終了し、制御がフラッシュHEMi実行ループ(図50のステップ5015)に戻る。この時点で、データのスーパーページは、ステージバッファからフラッシュページバッファへと転送されつつあり、フラッシュは、フラッシュページバッファからフラッシュセルへの書込みのためセットアップされる。
書込みハンドラが呼び出される次の回に、フラッシュ転送終了状態は、ステップ5301内で識別される。ステップ5324において、CSがセットされる。これは、図51のステップ5102と同一である。
ステップ5325で、CLEがセットされ、第2の書込み命令コードがフラッシュに送られる。これが、フラッシュによるフラッシュページバッファからフラッシュメモリへの値の書込みを生起する。
ステップ5326で、ステージバッファは、他のオペレーションによる使用のために解放される。
ステップ5327で、フラッシュHEMiは、次の状態がページリクエウトダンであることを示すべくページ要求状態変数を更新する。
ステップ5328で、戻り値は、フラッシュ・ポート・ノット・ビシーにセットされ、書込みハンドラが終了し、制御がフラッシュHEMi実行ループ(図50のステップ5015)に戻る。この時点で、データは、フラッシュ・ページバッファからフラッシュセルへと書き込まれつつある。
ステップ5301におけるページリクエストダン状態の識別に続くプロセスが、ステップ5329で始まり、その中で、書込み上に何らかのエラーが検知されたか否かを決定すべくチェックが行われる。
エラーが検知されたら(ステップ5329の結果が「yes」)、ステップ5330において、エラーハンドが呼び出される。このステップは、ステップ5314と同様に動作する。
エラーが検知されなかったら(ステップ5329の結果が「no」)、プロセスは、ステップ5331乃至5335を続ける。これは、図51のステップ5119−5123と同一である。これに続いて、書込みハンドラは終了し、制御が、フラッシュHEMi実行ループ(図50のステップ5015)に戻る。
図53に示すプロセスは、リード・モディファイ・ライト動作を図解する。ペーシ要求の転送長が15の場合、これは、書込みが全スーパーページを置換することを示しているが、オペレーションのリード・モディファイ部分は不要であり、そして、コマンド及びニード・ステージバッファ1のパスは使用されない。代わりに、ページ要求状態変数は、ニード・ステージバッファ2状態で始まる。
上述したように、書込み動作の場合には、フラッシュHEMiには、ペーシ要求にスーバーページを割り当てることが要求される。図54内のフローチャートは、このプロセスを図解する。
ステップ5401で、フラッシュHEMiは、フォワード・テーブル3201内への探索のためのインデックスとして転送要求によってページ要求に割り当てられた第1のLBAを使用し、LBAに関連したデータを現に保持するバンクを識別する。
ステップ5402で、フラッシュHEMiは、バンク上にいずれかの使用可能なスーパーページが有るか否かを決定するべくスーパーページ・ポインタリスト2919をチェックする。リード・モディファイ・ライトに関するバンク選択が、同一バンク上のスーパーページを、元のデータを保持するスーパーページとして使用することを試みる。トランザクションの読出し側は、ステージバッファへの読出しのいかなる必要もなしに、フラッシュメモリからフラッシュページバッファへのデータの読出しによって処理可能なので、これは、性能を格段に向上する。次に、新たなデータと古いデータとは、ページバッファ内で併合される。この方法は、ステージバッファへの読出しを避けることによって、書込み動作の性能を高め、且つ、フラッシュインタフェースのタイアップをさけ、これにより、これを他のトランザクションのために空けておく。
スーパーページがバンク上で使用可能であれば(ステップ5402の結果が「yes」)、プロセスは、ステップ5403に進み、この中で、スーパーページが不良として識別されたか否かを決定するべくスーパーブロック・メタデータ・テーブル3501において、スーパーペーシに符合する入力がチェックされる。
スーパーページが不良であれば(ステップ5403の結果が「yes」)、プロセスはステップ5404に進み、この中で、不良スーパーページはスキップされる。次に、プロセスは、ステップ5402に戻る。
スーパーページが不良でなければ(ステップ5403の結果が「no」)、プロセスは、以下に記述したステップ5412に進む。
バンク上に使用可能なスーパーページが無い場合(ステップ5402の結果が「no」)、ステップ5405において、フラッシュHEMiが、バンクをインクリメントし、これにより、次のバンクへと移動し、必要ならば、バンク0に転換する。
ステップ5406で、フラッシュHEMiは、それが、フラッシュ・グループ内の全てのバンクをチェックしたかどうか(すなわち、カレント・バンクがチェックされた第1のバンクと同一かどうか)を決定する。全てのバンクをチェックしていない場合(ステップ5406の結果が「no」)、スーパーページが次のバンク上で使用可能かどうかを決定すべくフラッシュHEMiがステップ5402に戻る。ステップ5405内のインクリメントの結果として、各回で新たなバンクを介してチェックされることにご留意願いたい。
全てのバンクがチェックされ、スーパーページが利用可能でなければ(ステップ5406の結果が「yes」)、現在オープンしているスーパーブロックはフル状態であり、クローズされなければならず、新しいスーパーブロックがオープンされなければならない。ステップ5407で、フラッシュHEMiは、現在オープンしているスーパーブロックに関するスーパーブロック・メタデータ・テーブル3501をデータパスDRAM107から開いているスーパーブロックのブロック0のスーパーページ0にコピーする。これは、データを移動させる内部転送要求を発行することによって達成される。コピー動作の前に、テーブルのククローズド・フラグ3509がセットされる。
ステップ5408で、フラッシュHEMiは、次のスーパーブロックをスーパープロック・フリーリスト2912からポップし、そのスーパーブロックの識別子をオープン・スーパーブロック・ポインタ2914内にコピーする。
ステップ5409で、フラッシュHEMiは、現在の時刻を、新たにオープンされたスーパーブロックに符合するリバース・テーブル(例えばリバース・テーブル3205)内のタイムスタンプ・フィールド内に書き込む。
ステップ5410において、フラッシュHEMiは、新たにオープンされたスーパーブロックのブロック0のスーパーページ0から、データパスDRAM107のスーパーブロック・メタデータ・テーブル3501内へ、スーパーブロック・メタデータ・テーブルをコピーする。この時点では、テーブルは、不良及び消去カウント(回数)情報、並びに、セットされているオープン・フラグ3508を除き、空白である。
ステップ5411で、フラッシュHEMiは、スーパーページ・ポインタ・リスト2919を初期化する。スーパーブロック・メタデータ・テーブルがスーパーページ0を占めるので、バンク0に関するポインタは、スーパーページ1にセットされる。他の全てのポインタは、スーパーページ0にセットされる。次に、プロセスは、スーパーページのページ要求への割り当てのためにステップ5402に戻る。
バンク上に使用可能な不良でないスーパーページがあれば(ステップ5403の結果が「no」)、ステップ5412に達する。ステップ5412で、フラッシュHEMiは、次のスーパーページをページ要求へのポインタリスト上に割り当て、現バンクからの入力を選択する。フラッシュHEMiは、スーパーページのアドレスを、ページ要求のフラッシュ書き込みアドレス・フィールド4007内に書き込む。フラッシュ・アドレスは、ポート、バンク、ブロック及びページによって特徴付けられるので、全アドレスの使用が可能であることにご留意願いたい。フラッシュHEMiは、単一ポート上で作動するのみであり、また、バンク、ブロック及びページ情報は、どのスーパーページリストが使用されたかを識別するのに使用されたバンク、スーパーページ番号、スーパーブロック識別子の組合せに基づいて使用可能であることから、ポート情報は必要ではない。
ステップ5413で、フラッシュHEMiは、関連するバンクに関するポインタをインクリメントすることによって、ステップ5412内で割り当てられたスーパーページを示すべくスーパーページ・ポインタ・リストを更新する。
この動作の進行はここで終了する。
完了したトランザクションのクリーンアップが、図55に記述されている。このフローチャートに記述されているプロセスは、図50のステップ5003の一部として実行される。この時点で、転送要求に関する最新のページ要求が完了したと決定しているページ要求ハンドラの結果として、ホストが開始する読出しまたは書込みコマンドの一部として呼び出された転送要求は、ローカル転送要求キューの上に存在する(例えば、図51のステップ5122)。
ステップ5501で、転送要求は、ローカル転送要求キューから取り出される。ステップ5501乃至5504は、フラッシュHEMi上で動作する転送要求ハンドラによって実行される。
ステップ5502で、転送要求の状態変数フィールド3908が、チェックされる。通常、キュー上の転送要求は、終了を有することとなるが(例えば、図49のステップ4911参照)、ガベージ・コレクション・ルーチンの一部として起動された転送要求は主要な例外である。この場合、転送要求は、完了した読出しまたは書込みコマンドの結果であるので、終了状態を有する。
ステップ5503で、ページ要求ポインタ・アレイ3913内に識別されたページ要求は、ページ要求フリーリスト2910上にセットされる。これらのページ要求は、この時点で、他の転送要求によって使用されることが可能である。
ステップ5504で、内部転送要求が、ローカル転送要求フリーリスト2905上にセットされる。この内部転送要求は、この時点で、フラッシュHEMiの外部ワークリスト上の転送要求への割り当てが自由である。転送要求ハンドラは、フラッシュHEMi上で動作するIOPハンドラを呼び出し、そして、終了する。
ステップ5505で、フラッシュHEMi上で動作するIOPハンドラは、転送要求の呼出しIOPフィールド3902内に識別されたIOPの残存転送要求フィールド3808をデクリメントする。この時点で、IOPはいずれのHEMiのワークリスト上にも存在せず、したがって、それはフラッシュHEMiのワークリスト上には存在しないけれども、フラッシュHEMiはそれにアクセス可能とされていることにご留意願いたい。
ステップ5506で、フラッシュHEMiは、残存転送要求フィールドが、IOPがアクティブな転送要求を有していないことを示す0に達したかどうかを決定する。
その値が0よりも大きければ(ステップ5506の結果が「no」)、転送要求ハンドラは終了する。IOPは未だ終了していないので、クリーンアップは不要である。
その値が0ならば(ステップ5506の結果が「yes」)、ステップ5507において、IOPが、IOPのホスト・ポートフィールド3803内に識別されたポートに関連する送信HEMiに関するワークリスト上にセットされる。次に、フラッシュHEMi上で動作していたIOPハンドラは終了する。
ステップ5508で、IOPコマンドフィールド3806が、IOPが読出しまたは書込みコマンドに関係するのかどうかを決定すべく評価される。このステップ及び後続の全てのステップは、送信HEMi上で動作するIOPハンドラによって実行される。
コマンドが読み出しコマンドであれば(ステップ5508の結果が「yes」)、ステップ5509において、送信HEMiは、データ及びデータをホストに搬送するのに必要な他のフレームをセットアップし、これらのフレームをホストに送信する。
ステップ5509に続いて、または、コマンドが、読出しではなく書込みであれば(ステップ5508の結果が「no」)、ステップ5510において、送信HEMiは、コマンドが完了したことを示す状態フレームをホストに送信する。
ステップ5511で、送信HEMiは、(a)IOP CDB情報フィールド3805内に識別されたCDB情報をCDB情報フリーリスト4102上に置き、(b)IOPをIOPフリーリスト4103上に置き、(c)IOP転送要求ポインタ・アレイ3809内に識別された転送要求を転送要求フリーリスト4104上にセットする。
ステップ5512で、送信HEMiは、CDB情報とIOPの終わりを示すべく各種の他のデータ構造をクリーンアップする。例えば、送信HEMiは、IOPのイニシエータ・フィールド3804内に識別されたイニシエータに関するイニシエータ情報エントリ内のカウント・フィールド4203をデクリメントする。
クリーンアップ・プロセスはここで終了する。
C.ガベージ・コレクション
ガベージ・コレクションは、フラッシュメモリ空間を新しい書き込みのために使えるようにするプロセスである。各ポートに関連するフラッシュHEMiが、そのポートに関連するフラッシュ・グループに関してガベージ・コレクションが必要か否かを決定して、必要ならばガベージ・コレクションを実行するように、ガベージ・コレクションは、フラッシュ・ポート毎に行われる。
各フラッシュ・グループは、多数のスーパーブロックを含み、それらは、以下の3の状態の1つになっている、すなわち、(1)オープン(現在書き込みオープンである1つのスーパーブロック)、(2)クローズド(データが書き込み済みであるがもはや書き込みオープンではない複数のスーパーブロック)、(3)空き(既に消去され、今後の書き込みのために利用可能であるような、スーパーブロック・フリーリスト2912上の複数のスーパーブロック)。クローズされているスーパーブロックは、通常、有効なスーパーページ(現在有効なデータを有するセクタを含む)と無効なスーパーページ(その後にどこか別の場所に書き込まれたのでもはや有効ではないLBAに対応するセクタを含む)の組合せを含む。図34に関連して説明されたように、無効なスーパーページは、リバース・テーブル内で、フラッシュ・グループ向けに設計されている。
動作するために、各フラッシュ・グループは、空きスーパーブロックを必要とする。というもの、オープンしているスーパーブロックに含まれる書込みの余地が不十分(すなわち、スーパーページ・ポインタ・リスト2919上に示される空きスーパーページがない)ならば、スーパーブロックはクローズされなければならず、スーパーブロック・フリーリストからのスーパーブロックがオープンされなければならず、新しいデータは新たにオープンされたスーパーブロックに書き込まれなければならない。ガベージ・コレクションは、スーパーブロックを今後の書き込みのために使えるようにするようにデータを統合するプロセスである。
図29に戻ると、好適実施形態では、スーパーブロック・フリーリスト2912からスーパーブロックが割り当てられるたびに、関連フラッシュHEMiのmRAM内のスーパーブロック・フリーリスト・カウンタ2913がデクリメントされる。このカウンタは、スーパーブロック・フリーリスト2912上に現在あるスーパーブロックの数を含む。
カウンタ2913のデクリメントに続いて、カウンタ内に現在保持されている値が、フラッシュHEMiのmRAMのガベージ・コレクション閾値セクション2915内に維持されている2つの値、すなわちクリティカルな閾値及び非クリティカルな閾値と比較される。好適実施形態では、これらの値は初期化時にそれぞれデフォルト値「2」及び「6」に設定されるが、後述するように、他の値を用いることもできる。さらに、これらの値はプログラム可能であり、従ってユーザによって変更可能である。
カウンタ値(ひいてはスーパーブロック・フリーリスト上のスーパーブロックの数)がクリティカルな閾値またはそれ以下であれば、クリティカル・フラグが設定され、フラッシュHEMiはクリティカルなガベージ・コレクション・モードにシフトし、ガベージ・コレクション動作が、ホスト読み出し及び書き込みを含む全ての動作より優先する。これは、カウンタ値(及びスーパーブロック・フリーリスト上のスーパーブロックの数)がクリティカルな閾値を超え、クリティカル・フラグがリセットされるまで続く。
カウンタ値がクリティカルな閾値を上回っているが非クリティカルな閾値またはそれ以下であれば、フラッシュHEMiは非クリティカルなガベージ・コレクション・モードにシフトし、ガベージ・コレクション動作が開始されるが、ホストが開始する読み出し及び書き込みが全て処理されて初めてガベージ・コレクション動作が開始される。利用可能な空き空間の量が非クリティカルな閾値を上回っていれば、ガベージ・コレクションは生じない。
好適実施形態では、クリティカルな閾値は2に設定されるが、その理由は、入力される書込みが確実に収容されることができるようにするために常に少なくとも1つの空きスーパーブロックが必要であり、クリティカル・フラグが設定される前にローカル転送要求キュー2904上にあった転送要求が追加スーパーブロックを使い切る可能性を防止するために追加スーパーブロックが必要とされるからである。クリティカル・モード中であっても、既にローカル転送要求キュー上にある転送要求は、全ての他の新しい転送要求と同様にローカル転送要求キュー2904のボトムに加えられるガベージ・コレクション転送要求の前にフラッシュHEMiによって処理されることになることに留意されたい。
好適実施形態では、非クリティカルな閾値は「6」に設定されるが、これは、ガベージ・コレクションの頻度の低下(より少ない数が要求される)と一連のホストが開始する書き込みがクリティカル・モードのガベージ・コレクションの必要性によって中断される可能性の最小化(より多い数が要求される)間の妥協を表している。代替実施形態では、この数は幾分多いかまたは少ないかのいずれかに設定されることができる。より少ない数はガベージ・コレクションの頻度を低下させる傾向があり、従ってガベージ・コレクションが行われる前にスーパーブロックがクローズされたままである時間が増加することになることに留意されたい。スーパーブロックに含まれる有効データの量は時間と共に減少する傾向があるので(スーパーブロックの有効なスーパーページに新しい書き込みがなされ、無効化されるため)、ガベージ・コレクションは、より古くて陳腐化したスーパーブロックに対してより効率的であり、その理由は、そのようなスーパーブロックには、オープンしているスーパーブロックにコピーされなければならない有効な情報がより少ないためである。それゆえ、非クリティカルな閾値をより小さい値に設定することは、ガベージ・コレクションが行われる前に所与のスーパーブロックがクローズされている時間を増加させることによってガベージ・コレクション動作の効率を高める傾向がある。しかし、この場合もやはり、これは1つの妥協案であり、その理由は、数が小さければ小さいほど、システム性能を低下させることになるクリティカルな閾値に到達する可能性が高く、クリティカル・モードのガベージ・コレクションは通常の読み出し及び書き込みより優先するためである。
ガベージ・コレクションのプロセスが、図56に示すフローチャート内に図解される。
ガベージ・コレクションは、消去のためのスーパーブロックの選択を必要とする。このことは、ステップ5601内に示される。これは、選択されたスーパーブロック内の有効なスーパーペーシからのデータが現在オープンしているスーパーブロックに書き込まれることを必要とするので、有効データ最小量を有するスーパーブロックを選択することは有意義である。すなわち、ガベージ・コレクションが開始したとき、関連するフラッシュHEMiは、フラッシュ・グループに関するリバース・テーブル内の各スーパーブロックに関するカウント・フィールドを、つい最近スーパーブロック・フリーリストに加えられたスーパーブロックの後ろのスーパーブロックから始めて、各スーパーブロックを通して番号順に進めて、スーパーブロック0を介して最低値に戻り、チェックする(例えば、ガベージ・コレクションの結果としてフリーリストに加えられた最新のスーパーブロックが17の場合、次のガベージ・コレクション内でチェックされる第1のスーパーブロック・カウント・フィールドは18である)。
フラッシュHEMiは、無効なスーパーページの最大数を示す最高カウント・フィールド値を備えたスーパーブロックを選択する。好適実施形態において、1より多い数のスーパーブロックが最高カウント・フィールドとタイであれば、該当するそのようなスーパーブロックの第1のものが、ガベージ・コレクションに関して選択される。代替的実施形態において、タイは、タイになっている各スーパーブロックに関するスーパーブロック・メタデータ・テーブル(またはリバース・テーブル)内の消去カウント・フィールドを、選択された最低消去カウントを有するスーパーブロックでチェックすることによって壊すことができる。この代替例は、有る程度の磨耗の均等化を提供する利点がある。当業者が理解されるように、消去オペレーションは、フラッシュメモリに磨耗を生ずる傾向があり、そのため、多数の消去のあるブロックは、多数の欠陥を有する傾向がある。この種類の磨耗の均等化は、各ガベージ・コレクションの前に追加的なオペレーションを課す不都合はあるが、ブロックにわたって欠陥数を均等にする傾向がある。
ガベージ・コレクションに関してスーパーブロックが選択されると、ステップ5602で、関連するフラッシュHEMiが、そのスーパーブロック内の有効な各スーパーページから現在オープンしているスーパーブロック内へとデータを移動させるのに十分な一連の内部転送要求が生成される。
内部転送要求は、特定のフラッシュHEMi群によって且つこれに特有に発行される。これらは、内部転送要求は、発行フラッシュHEMiのmRAM内に保持されるのみで且つ共有RAMには決してストアされずまたは他のいずれかのHEMiによって動作させられる点で、通常の転送要求とは異なる。内部転送要求は、IOPの結果としての起動はされないので、各内部転送要求の呼出しIOPフィールド3902は、空のまま残される。
上述したように、各転送要求は、3のページ要求を発行することができ、各ページ要求は、1のスーパーページのデータの転送を生起することができる。すなわち、移動データ発行にフラッシュHEMiに要求される内部転送要求の数は、スーパーブロック内の有効なスーパーページを3で割って、端数を切り上げた数に等しい。
好適実施形態において、フラッシュ・グループ毎に8つのブロックであると仮定すると、各スーパーブロックは、512個のスーパーページ(ブロック毎に64個のスーパーページ×8)を含み、したがって、理論的には、ガベージ・コレクションは、171の転送要求の発行を要求する(しかし、理解されるように、スーパーブロック内のすべてのスーパーページが有効ならば、スーパーブロック上でガベージ・コレクションを実行するのに機能する点は無い)。しかしながら、実際、ガベージ・コレクションに関して選択されたスーパーブロックは、比較的少ない有効なスーパーページを有する傾向があるので、171よりも相当に少ない転送要求が必要とされる。
ステップ5603で、ステップ5602でセットアップされた転送要求の結果として発行されたページ要求が実行される。理解されるように、古いスーパーブロックからオープンしているスーパーブロックへ有効なスーパーページを移動させるのに必要な転送要求の数は6より大きくなる可能性があり、これが、フラッシュHEMiによって同時に処理可能な転送要求の数なので、ステップ5602及び5603は、多分、オーバーラップする。すなわち、いくつかの数の転送要求が割り当てられ、次に、これらの転送要求に関してページ要求が実行され、各転送要求が完了するのに伴い、ローカル転送要求テーブル2901内のそのスロットが開き、これにより、フラッシュHEMiが新たな転送要求を発行するのを可能とする。
有効なスーパーページから現在オープンしているスーパーブロック内ヘデータをコピーするオペレーションは、外部データ無しであることを除き、通常の書込み動作と同様である。スーパーページ・ポインタ・リスト2919の記述に関連して上記に説明したように、書込みは、書込みによって無効とされるべきスーパーページのように、同一バンク上のスーパーページに優先的に行われる。これは、必要な転送の数を最小にする。なぜなら、フラッシュバンク内の一の場所から同一バンクの他の場所への書込みは、データのフラッシュ・ステージバッファへの移動を必要とはしないが、書込みは、データのフラッシュメモリからフラッシュ・ページバッファへの書込みとその後のフラッシュページバッファからフラッシュメモリへと戻る書込みによって達成可能だからである。これは、データのステージバッファへの転送に必要な移動よりも格段に速く、ステージバッファとフラッシュ・グループを接続するバスにタイアップしない。
ガベージ・コレクション書込みは、スーパーページ・ポインタ・リスト2919を使用して、同一バンクに対して優先する。1のページリクエストは、フラッシュメモリからの読出しとフラッシュメモリへの書込みの両方を処理することができ、したがって、単一の転送要求は3の有効なスーパーページを処理することができる。通常の書込みでのように、有効なスーパーページから新たな場所内にデータがコピーされる各回に、それらのLBAに符合するフォワード・テーブル3201内の入力が更新される。
データを古いスーパーブロックからオープンしているスーパーブロック内へと移動する転送要求に続いて、ステップ5604において、全部で7つのページ要求を含む、3の転送要求が発行される(前2つの転送要求内に3のページ要求、そして3番目の転送要求内に1のページ要求)。これらのページ要求の各々は、単一ブロックのためのフラッシュ消去コマンドを実行する。上述したように、各スーパーブロックは、ポートの8つのバンクの各々内の同一ブロックを構成する。すなわち、各ページ要求は、異なるチップ選択で同一のブロックを消去する。当業者が理解されるように、フラッシュ消去コマンドは、消去されたブロック内に書き込まれるための一連の「1」を生起する。これらの7つのページ要求は、スーパーブロックのブロック1〜7を消去する。
ガベージ・コレクション動作に関する最新の転送要求は、3つのページ要求を含む。ステップ5605において、これらのページ要求の最初のものが、スーパーブロックのスーパーページ0、バンク0(図35参照)内にストアされたスーパーブロック・メタデータ・テーブルからの欠陥列及び消去カウントをフラッシュ・ステージバッファ内にコピーする。これは、スーパーブロックのバンク0内に属し、ステップ5604において消去されない。
ステップ5606で、フラッシュHEMiは、スーパーブロック・メタデータ・テーブル内の消去カウント・フィールド3507をインクリメントし、スーパーブロックがこの時点で追加の時間に関して消去されている事実を示す。
ステップ5607で、フラッシュHEMiは、データパスDRAM107内のフラッシュ・グループに関するリバース・テーブルにアクセスし、スーパーブロックからの全てのスーパーページを有効と印を付け、スーパーブロックに関するカウント・フィールドを0にセットする。
ステップ5608で、最新の転送要求からの第2のページ要求が、ブロック0を消去する。これ及びステップ5609〜5610は、ステップ5607とパラレルに生起可能であることをご留意願いたい。
ステップ5609において、最新のページ要求が、ステージバッファからの消去カウント及び欠陥データをスーパーブロックのバンク0のスーパーページ0内に戻ってコピーし、これにより、これらの入力を除き空白であるフラッシュ内の新たなスーパーブロック・メタデータ・テーブルをセットアップする。
ステップ5610で、スーパーブロックは、スーパーブロック・フリーリスト2912上に戻ってセットされ、スーパーブロック・フリーリスト・カウンタ2913は、インクリメントされる。次に、このスーパーブロックに関するガベージ・コレクション動作は完了する。
好適実施形態は、ホストが開始する書込みの場合に正しく生起するように、古いスーパーブロックからの有効なデータを現在オープンしているスーパーブロック内へコピーするが、代替実施形態では、同時に、2つの「オープンしている」スーパーブロックが存在し、1つは、通常の読出しに使用され、第2のものは、ガベージ・コレクション工程を介してリサイクルされるスーパーブロックからのデータを訂正するのに使用される。この実施形態では、ガベージ・コレクション起動転送要求が識別され(例えば、転送要求内のガベージ・コレクション・フラグによって)、ホストが開始する書込みに関して使用される開いているスーパーブロックよりも、むしろ、開いているガベージ・コレクション・スーパーブロックへのデータ書込みを生起する。
ガベージ・コレクションから結果として生ずる有効なデータは、書込みに関して現在オープンしているスーパーブロック内の有効なデータと比べると比較的に「新鮮ではない」。この理由で、ガベージ・コレクションから結果として生ずる有効なデータのガベージ・コレクション・スーパーブロック内へのコピーは、比較的に新鮮でないデータを集める傾向があり、したがって、頻繁に使用される可能性は少ない。当業者に理解されるように、最近書き込まれたものでないデータは、最近のデータと比較するに、近い将来に読出しまたは書込みが行われる可能性は格段に小さい。
「ガベージ・コレクション」スーパーブロックの使用は、比較的新鮮でないデータを1以上のスーパーブロック内に集める利点を有する。そのようなデータは、上書きされる可能性が比較的に小さいので、そのようなスーパーブロックは、有効なデータでいっぱいになる傾向がある。上述したように、有効でないデータを比較的に高い比率で有するスーパーブロックにガベージ・コレクションを優先的に適用した場合には、ガベージ・コレクションの保存場所として使用されているスーパーブロックは、多分、それ自身ガベージ・コレクションの対象とされない。このことは、比較的に動かないことが期待されるデータは、比較的少数のスーパーブロックに集中し、このデータはガベージ・コレクションの対象とされることはなく、したがって、ガベージ・コレクション工程の一部としてこのデータを新たなスーパーブロックへ規則的にコピーする必要はない、という利点を有する。逆に、通常の書込みに使用されるスーパーブロックは、頻繁に使用され且つ再書込みのされるデータの集中を有する傾向がある。したがって、そのようなスーパーブロックは、比較的高い比率で有効でないスーパーページを含む傾向がある。そのようなスーパーブロックが、自身でガベージ・コレクションの対象とされたときには、スーパーブロックで外へとコピーされるべき有効データ量は、比較的に少なく、これにより、ガベージ・コレクションのために必要な時間は減少する。
したがって、ガベージ・コレクション・スーパーブロックは、幾分かの追加される複雑性の不都合はあるものの、ガベージ・コレクション動作のための必要時間量を最小にすることによって、性能を改善することができる。
この代替的実施形態の延長として、比較的に高価な速いメモリ及び比較的に安価な遅いメモリを含む階層メモリシステムが使用される。ガベージ・コレクションの間に集められるデータのストアに使用されるスーパーブロックは、比較的に遅いメモリ内にストアされる。なぜなら、そのようなスーパーブロックは、比較的最近に更新され、したがって速いメモリ内のスーパーブロック内にストアされるデータ程には頻繁に必要とはされないデータを保持することを期待されているからである。
D.パトロール機能
当分野で理解されているように、フラッシュメモリのデータ完全性は、様々な理由から損なわれ得る。各読出しの間に、ページのセル内の電荷が僅かに消失し、セルの電圧を正しく読み出されなくなるまで低下させることがある。互いに隣接するページ同士もまた、読出し動作の影響を受け、それによって、実際のセルが読み出されなくてもそのようなページのセルの電圧を低下させることがある。これは、「読出しディスターブ」と呼ばれる。時間とともに、この消失は、セル電圧を閾値以下に低下させ、かつ「1」を「0」として登録させ得る。これらのエラーが処理されなければ、時間とともにECCにより回復可能であるよりも多くのエラーがある可能性があり、データの破損が生じ得る。
その上、メモリセルのプログラミング(書込み)または消去はまた、性能を低下させ、データエラーの増加の原因になり得る。例えば、セルがプログラミングまたは消去されるとき、電荷がフローティング・ゲートに流れ込んだり流れ出たりするように電圧の増加が必要とされ得る。しかし、電圧の増加は、セルを形成するために用いられる半導体材料にストレスを加えることがある。数多くのプログラミングまたは消去サイクルを繰り返すことで、セルが電荷を効率的にストアする能力は低下し、データエラーの増加につながりかねない。
フラッシュメモリセルが書き込まれてからの時間はまた、データの信頼性の欠如の一因となりかねない。
これらの問題は、スーパーページを不良と認定させ得るフラッシュメモリ内の物理的欠陥が原因である場合もそうでない場合もあることに留意されたい。物理的欠陥は永久的なものであり、影響を受けたスーパーページは永久にマップアウト(map out)されて、それ以上使われない。その代わりに、これらの種類のエラーは、スーパーページ上の1若しくは複数のフラッシュ・セルによって保持される電荷の低下によって生じる一時的なものである。そのような一時的エラーの検出は、スーパーページが不良と認定されることを必要とせず、エラー自体は、ECCを用いて訂正可能である。
しかし、ECCは、1ページ当たり所与の数のエラーを訂正することしかできない。さらに、ページの完全性が上記の要因(例えば、読出しディスターブ、書込みディスターブなど)に影響され始めると、そのページのエラーの数が時間とともに増加する可能性が高いので、或る時点でページ上の情報は回復可能ではなくなる。
エラー・ハンドリングは、エンタープライズレベルのフラッシュストレージが直面している最も重要な課題の1つを抱えている。当分野で公知のように、フラッシュストレージは比較的高い誤り率を有し、これは、フラッシュメモリ・システムにおける誤り訂正はかなりのシステム・リソースを消費するリード・モディファイ・ライト動作を用いてページ全体を書き込むことを必要とするという事実によって一層ひどくなる。
SSDコントローラ106は、フラッシュメモリ・エラーを処理するのにこの上なく適している。というのも、多数のプロセッサ、及び複数の独立したパイプラインにより、コントローラ106は、ホスト視点のシステム性能を低下させることなく、事実上連続的にエラーを検出して訂正することができるからである。
SSDコントローラ106の構造は、誤り訂正アルゴリズムの観点から重要な選択を可能にするが、そのうちのいくつかは本明細書に記載されている。
一実施形態では、SSDコントローラ106は、各フラッシュ・グループを独立して「パトロール」し、有効な情報を含む全てのスーパーページを読み出し、閾値を超えるエラーを訂正する各フラッシュHEMi上で実行するファームウェアから構成される独立したパトロール機能を用いる。この実施形態は、図57に示されている。
図57のフローチャートは、図50のステップ5004の結果が「no」であるところから始まる。図50に関連して上記したように、ステップ5007〜5009は、状況次第でパトロール機能に置き換えられることがある。
ステップ5701は、パトロール機能が作動しているか否かを判定するためのチェックを表す。一実施形態では、パトロール機能は周期的に作動する。この実施形態では、パトロール機能は、フラッシュ・グループの全ての有効なスーパーページをチェックし、その後、一定期間シャットダウンする。例えば、パトロール機能は、24時間に1回、実行完了(run to completion)し得る。この実施形態では、パトロール機能が完了したら、指定された期間が終了するまで再開せず、例えば、パトロール機能は、午前零時毎に始まり、実行完了し(後述するように、パトロール機能は、他の動作が行われるように、周期的にインタラプトされる)、その後、次の午前零時までシャットダウンされ得る。
パトロール機能が周期的に実行する実施形態では、ステップ5701の結果が「no」であれば、図50のステップ5007に導かれ、ステップ5007で、フラッシュHEMiはスリープ・モードに入ることがある。
パトロール機能が連続的に作動している実施形態では(この場合もやはり、パトロール機能は他のタスクのためにインタラプトされる)、ステップ5701はスキップされる。それらの実施形態では、またはパトロール機能が作動していれば(ステップ5701の結果が「yes」)、ステップ5702で、ローカル転送要求が利用可能であるか否かを判定するためのチェックが行われる。好適実施形態では、このステップ及び特定の後続ステップは、独立パトロール関数プログラミングを表すものではないが、その代わりに、ホストが開始する読出し及び書込みに通常は用いられるファームウェア・ルーチン(例えば図49)をコールすることに留意されたい。
ローカル転送要求が利用可能でなければ(ステップ5702の結果が「no」)、処理は図50のステップ5007に戻る。ローカル転送要求が利用可能であれば(ステップ5702の結果が「yes」)、ステップ5703でローカル転送要求がポップされる。
ステップ5704で、ローカル転送要求が投入される。一般に、これは、ホストが開始するトランザクション(例えば図49を参照)に用いられるプロセスに酷似しており、コマンド・フィールド3907には読出しコマンドが用いられる。しかし、転送要求のためのLBA範囲は、フラッシュ・グループ間で用いられるLBAストライピングを考慮して、このフラッシュ・グループのパトロール機能の直前の反復に用いられるLBA範囲に基づき、目標は、フラッシュ・グループに割り当てられた全てのLBAをカバーすることである。
パトロール機能が次の初期化を最初に実行するとき(または断続的なシャットダウン後に最初に再スタートするとき)、転送要求は、フラッシュ・グループ内にストアされている第1の90個のLBAを割り当てられることになる。その次のときには、転送要求は、フラッシュ・グループ内にストアされている次の90個のLBAを割り当てられることになり、という具合に、フラッシュ・グループ内にストアされている最後のLBAに到達するまで続き、最後のLBAに到達した時点で、パトロール機能は、最初から再スタートする(パトロール機能が連続的に実行するならば)か、次のトリガリング・イベント(例えば次の午前零時)までシャットダウンすることになる。
パトロール機能は、フラッシュHEMi mRAM内のデータ構造(例えば、ローカル変数2916内の変数)を用いて、直前に割り当てられたLBAの経過を追う。
上記したように(例えば図16及び付随の説明を参照)、LBAは、フラッシュ・グループ間でストライピングされる。それゆえ、パトロール機能は、次の90個のLBAを転送要求に単純に割り当てることができないが、代わりにフラッシュ・グループに割り当てられた90個のLBAの次のグループを識別しなければならない。これは、フラッシュ・グループに等しいポート値を有する次のローを見つけるためのフォワード・テーブル3201を介して、パトロール機能が実行中であることを知ることによって達成されることができる。あるいは、パトロール機能は、まず第1にフラッシュ・グループにLBAを割り当てるために用いられるのと同じアルゴリズムを用いることができる(例えば、LBAは、90にフラッシュ・グループの数を乗じた数に等しいギャップを有する90のストライプに割り当てられる)。
ステップ5704におけるローカル転送要求の投入に続いて、ステップ5705で、3つのページ要求がポップされかつデータ投入され、各ページ要求は転送要求に割り当てられた45個のLBAのうちの15個を受信する。ページ要求がデータ投入される方法については、図49に関連して上記した。
ステップ5706で、ページ要求はバンク・キューに送信される。これは、ホストが開始するトランザクションを処理するためにページ要求が生成されるのに用いられるのと同じプロセスである。例えば図49を参照されたい。
ステップ5707で、ページ要求の読出しが実行される。データは、フラッシュ・ステージバッファに読み出されるが、データパスDRAM107に送信されないことに留意されたい。それよりむしろ、読出しの唯一の目的は、ECCチェック部をトリガすることである。図31に関連して上記したように、ECCチェック部3104は、データがフラッシュ・ステージバッファに読み出される度に作動し、エラーが発見されたら、データはECC訂正エンジン3101に送信される。
ステップ5708で、ECCチェック部3104によって設定されたインジケータをチェックして、読出しエラーが検出されたか否かを判定する。否であれば(ステップ5708の結果が「no」)、処理は図50のループの始めに戻る。これにより、フラッシュHEMiは、パトロール機能が実行中でも他の非パトロール機能タスクを処理することができ、パトロール機能が、ホストが開始する読出し及び書込みのための性能を著しく低下させないことが確実になる。他の動作が求められていなければ、図50のループがステップ5004に戻るとき、当該ステップの結果が「no」であれば、このときには新しい一連の45個のLBAにより再びパトロール機能をトリガすることになる。
読出しエラーが検出されたら(ステップ5708の結果が「yes」)、ステップ5709で、エラーを含むセクタがECC訂正エンジン3101に送信される。ECC訂正については図31に関連して上記した。
ステップ5710で、ECCエンジン3101によって訂正されたエラーの数は、許容可能なエラーの閾値を上回るか否かがチェックされ、許容可能なエラーの閾値は、この実施形態では8に設定される(図31に関連して上記参照)。
エラーの数が閾値またはそれ以下であれば(ステップ5710の結果が「no」)、パトロール機能は、図50のステップ5001に制御を返す。図31に関連して上記したように、検出されたエラーの数が閾値を超えなければ、訂正されたデータはフラッシュに書き込まれない。
エラーの数が閾値を超えるならば(ステップ5710の結果が「yes」)、ステップ5711で、訂正されたデータはリード・モディファイ・ライト動作を用いて新しいスーパーページに書き込まれる。上記の図53及び付随の説明を参照されたい。
ステップ5711の後に、パトロール機能は、図50のステップ5001に制御を返す。
図57は、パトロール機能の一実施形態を説明しており、ここでは、パトロール機能は、各フラッシュ・グループ上で独立して実行する。これは、各フラッシュ・グループが独立したフラッシュHEMiによって支配されているという事実によって可能となる。SSDコントローラ106に固有の処理能力は、システム全体の性能に何ら影響することなく、かつ、フラッシュのどの領域が特にエラーを起こしやすいかを予測しようとする必要なしに、フラッシュ・エラーを継続または断続ベースで検出及び訂正することを可能にする。
別の実施形態では、SSDコントローラ106は、パトロール機能のためのIOPを発行する。各IOPは、LBA範囲を指定し、IOPは、SSDコントローラ106によって支配されているLBA範囲全体がカバーされるまで、周期的に発行される。この実施形態では、どのLBAがどのフラッシュ・グループに割り当てられるかを別々に計算する必要がない。というのも、これは、SSDコントローラ106がIOPを処理すると自動的に処理されるからである(上記参照)。
この実施形態では、他のタスクが処理待ちか否かを判定するためのいかなるチェックも行われない。このため、IOPの発行は、一定の間隔をあけて行われるべきである(例えば毎分1つ)。加えて、1つの代替実施形態では、パトロール機能IOPの結果呼び出された転送要求及びページ要求は、優先順位が低いものとして識別され、他の転送要求及びページ要求の後に処理される場合がある(上記参照)。
E.アボート処理
SSDコントローラ106は、SCSIアボート・コマンド及び他の関連プロトコルにおける類似のコマンドに正しく応答することが求められる。アボート・コマンドは、特定の読出しまたは書込みコマンド、または特定のイニシエータからの全てのコマンドをアボートするように要求する。SSDコントローラ106はまた、ハード・リセットに正しく応答しなければならない。ハード・リセットにおいては、全てのカレント・コマンドがアボートされ、システムはデフォルトのパワーオン状態に戻される。
アボート・コマンドまたはハード・リセットに続いて、アボートされた書込みコマンドに制約されていたがアボート以前には開始しなかったようなLBA内にストアされているデータは、未定義状態にあり、イニシエータは、そのようなデータを再書込みし、それを既知の状態に戻すことを求められる。
特定のコマンドのアボートが要求される場合、SSDコントローラは、アボート・コマンドと共に受信されたSCSIタグを識別しかつ当該情報をCDB情報テーブル4109に存在するCDB情報内のSCSIタグ・フィールド3705にマッチさせることで応答し、それによって、今現在アボートされているコマンドに応じて生成されたCDB情報を識別する。当該CDB情報のIOPフィールド3704は、その後、トランザクションを処理するために呼び出されたIOPを識別するために用いられる。その後、IOPの結果として発行された各転送要求を識別するために、当該IOPの転送要求ポインタ・アレイ3809がチェックされる。これらの転送要求の各々はその後アボートされるが、それは、そのアボート・フラグ3906が設定され、フラッシュHEMi実行ループが各転送要求のためのアボート・ハンドラを開始することを意味する。アボート・ハンドラは、転送要求を終了状態に置き、ページ要求・ポインタ・アレイ3913内で識別された全てのページ要求をバンク・キューから削除する。ページ要求、転送要求及びIOPのクリーンアップは、図55に関連して説明したように進行する。
アボート・キュー・コマンドは、アボート・キュー・コマンドに関与するイニシエータによって発行された全てのコマンドのアボートを要求する。当該イニシエータは、アボート・キュー・コマンドを伴うメタデータから識別される。当該イニシエータを識別する全てのCDB情報及びIOPは、全てのワークリストから削除されかつフリーリストに戻されることによって引っ込められ、そのようなIOPによって発行された全ての転送要求も引っ込められる。
ハード・リセットは、全てのアクティブなコマンドの終了を要求する。一実施形態では、これは、全てのアクティブなIOP内のアボート・フラグ3811を設定するが他のアクションを起こさないことによって処理される。データ(書込み)または状態情報(読出し)をホストに送信するためにIOPが送信HEMiに送信されるとき(図55のステップ5507を参照)、送信HEMiは、アボート・フラグを読み出し、ホストに通信を送信せずにIOPの処理を終了させる。トランザクションは、その他の点では正常に完了する。従って、この実施形態では、ホストに通信が送信されないことを除いて全てのトランザクションは正常に完了するので、特別な処理は必要ない。
代替実施形態では、ハード・リセットによって、全てのアクティブなIOP及び転送要求にアボート・フラグが設定される。これがなされると、HEMiワークリストから取り出されたIOP及び転送要求は処理されないがその代わりに無視され、全てのページ要求がバンク・キューから削除される。(全てのページ要求、IOP及び転送要求が引っ込められた結果として)全てのHEMiの仕事がなくなると、制御はARM2002に任される。ARM2002は、全てのページ要求、IOP及び転送要求をフリーリストに戻すことと、全ての状態パラメータをデフォルト値に設定することとを含む、クリーンアップに関与する。この代替実施形態は、全てのトランザクションを完了させるよりも高速であるが、特別な処理を用いる必要があるので、ソフトウェア・エラーのリスクがもたらされる。
F.電力損失回復
上記したように、データパスDRAM107は、フォワード・テーブル及びリバース・テーブルをストアするために用いられる。DRAMからの読出しまたは書込みは、フラッシュからの読出しまたは書込みよりもずっと高速であるので、この情報をDRAMにストアすることにより、特にこれらのテーブルに要求される大量の書込みを考慮すると、かなりの性能上の利点が得られる。
しかし、DRAM107は揮発性メモリなので、突然停電した場合には、これらのテーブルは復元されなければならず、各フラッシュ・ポートに対して現在オープンしているスーパーブロックのためのスーパーブロック・メタデータ・テーブル(これもまた、上記したように、DRAM107内にストアされている)も復元されなければならない。
一般に、オープンしているスーパーブロック・メタデータ・テーブルは、フラッシュのスーパーページ・メタデータ・フィールド内にストアされた情報を用いて復元され、フォワード・テーブル及びリバース・テーブルは、フラッシュのスーパーブロック・メタデータ・テーブル及び復元されたオープンしているスーパーブロック・メタデータ・テーブル内にストアされた情報を用いて復元される。これは、図58に示されており、図58は、1つのフラッシュ・グループのための復元プロセスを示している。
ステップ5801で、カレント・スーパーブロックは0に設定される。これは、フラッシュ・グループ内のスーパーブロック全てを通じてループを開始する。
ステップ5802で、カレント・スーパーブロックのためのスーパーブロック・メタデータ・テーブル3501は、フラッシュからステージバッファへコピーされる。フラッシュメモリ内よりもステージバッファ内のテーブルからの読出し及び書込みの方が容易である。
ステップ5803で、スーパーブロック・メタデータ・テーブルのオープン・フラグ3508及びクローズド・フラグ3509がチェックされ、電力損失時にスーパーブロックが消去された状態にあったか否かが判定される。
両方のフラグがクリアされると(ステップ5803の結果が「yes」)、これはスーパーブロックが消去されたことを意味する。ステップ5804で、スーパーブロックは、スーパーブロック・フリーリスト2912に置かれ、その後、処理はステップ5821に続き、そこでは後述するように次のスーパーブロックの解析をトリガする。
スーパーブロックが消去されなかったら(ステップ5803の結果が「no」)、ステップ5805で、オープン・フラグ及びクローズド・フラグがチェックされ、電力損失時にスーパーブロックがオープンされていたか否かが判定される。これは、オープン・フラグが設定され、クローズド・フラグが設定されていないことによって示される。このステップは、ステップ5803と結合することができることに留意されたい。
電力損失時にスーパーブロックがクローズされていたら(ステップ5805の結果が「no」)、ステップ5806でスーパーブロック・メタデータ・テーブルからのスーパーブロック・タイムスタンプ3506は、スーパーブロックのためのリバース・テーブル・タイムスタンプ・フィールド3405へコピーされる。このステップは、リバース・テーブルをスーパーブロックのための正しいタイムスタンプ情報で更新する。
ステップ5807で、バンクは0に設定される。これは、全ブロックを通じてループを開始する。各スーパーブロックは、各バンクにつき1つのブロックからなることに留意されたい。
ステップ5808で、スーパーページは0に設定される。これは、ブロック内の64個のスーパーページを通じてループを開始する。
ステップ5809で、カレント・スーパーページ及びバンクのためのスーパーブロック・メタデータ・テーブルLBAフィールドは、フォワード・テーブル3201内への検索のためのインデックスとして用いられる。バンク0、スーパーページ0は、特別な場合であり、というのも、このスーパーページはスーパーブロック・メタデータ・テーブルを含むので、このスーパーページは解析をスキップさせられるからであることに留意されたい。
LBAのためのフォワード・テーブルのローが既に埋められていれば(ステップ5809の結果が「yes」)、これは復元プロセス中に既にLBAに遭遇したことを意味し、LBAはオープンしているスーパーブロックに少なくとも2回書き込まれたことを意味する。このことは、最後のそのような書込みが有効と認定され、それ以前の書込みが無効にされることを必要とする。ステップ5810で、LBAに対応するフォワード・テーブル・ローからのデータは、LBAが書き込まれたスーパーブロックを識別するために用いられる。上記の以前のスーパーブロックのためのリバース・テーブル・タイムスタンプ・フィールド3405は、現在評価されているスーパーブロックのためのスーパーブロック・メタデータ・テーブルからのタイムスタンプ・フィールド3506と比較される。
リバース・テーブル・タイムスタンプがスーパーブロック・メタデータ・テーブル・タイムスタンプより小さい(時間が早い)ならば(ステップ5810の結果が「<」)、これは、フォワード・テーブル内にあるエントリが、その後に、現在評価されているスーパーブロック・メタデータ・テーブルに反映されたより新しいエントリに取って代わられたことを意味する。この場合、ステップ5811で、LBAのための既存のフォワード・テーブル・エントリに対応する既存のリバース・テーブル・スーパーページ・エントリは、リバース・テーブル内で無効と印が付けられる。処理は、その後、後述するステップ5815に進む。
既存のフォワード・テーブル エントリに対応するリバース・テーブル・タイムスタンプがスーパーブロック・メタデータ・テーブル・タイムスタンプより大きい(時間が遅い)ならば(ステップ5810の結果が「>」)、これは、現在フォワード・テーブル内にあるLBAエントリがスーパーブロック・メタデータ・テーブル内のLBAエントリに取って代わった(例えば、現在評価されているスーパーブロックに書き込まれた後にLBAが再書込みされた)ことを意味する。この場合、ステップ5812で、カレント・スーパーブロック・メタデータ・テーブル内のLBAを含むスーパーページのリバース・テーブル・エントリは、無効と印が付けられる。処理は、その後、後述するステップ5817に進む。
リバース・テーブル・タイムスタンプがスーパーブロック・メタデータ・テーブル・タイムスタンプと等しければ(ステップ5810の結果が「=」)、これは同じLBAが同じスーパーブロックに2回書き込まれたことを意味する。どちらが後から書き込まれたかを判定するために、スーパーページ・メタデータからタイムスタンプを読み出す必要がある。ステップ5813で、2つのスーパーページからのタイムスタンプ・フィールド1403の内容は、フラッシュからステージバッファへコピーされる。
ステップ5814で、スーパーページ・タイムスタンプ同士が比較される。
ステップ5811で、2つのスーパーページのうちのより古い方がリバース・テーブル内で無効と印が付けられる。
LBAが既にフォワード・テーブル内にない(ステップ5809の結果が「no」)か、または古いスーパーページがリバース・テーブル内で無効と印が付けられているステップ5811に続いて、ステップ5815に到達する。ステップ5815で、LBAに対応するフォワード・テーブルのフィールドには、新しいスーパーページのためのフラッシュ・アドレス情報が書き込まれる。LBAのためのフォワード・テーブルのエントリは、ここで、現在の有効なバージョンのLBAデータをストアするものとしてこのスーパーページを指す。
ステップ5816で、スーパーページは、リバース・テーブル内で無効と印が付けられる。
ステップ5816の後またはステップ5812の後に、ステップ5817に到達する。ステップ5817で、スーパーページはインクリメントされる。
ステップ5818で、インクリメントされたスーパーページ値は63と比較される。
新たにインクリメントされたスーパーページが63以下であれば(ステップ5818の結果が「no」)、これは、追加のスーパーページが依然としてカレント・バンク内で評価されることを意味し、処理はステップ5809に戻り、ステップ5809で次のスーパーページの評価が始まる。スーパーブロック・メタデータ・テーブルに記載のスーパーページは、0から63まで順に評価されることに留意されたい。
新たにインクリメントされたスーパーページが63より大きければ(ステップ5818の結果が「yes」)、これはバンク内の最後のスーパーページに到達したことを意味する。ステップ5819で、バンクはインクリメントされる。
ステップ5820で、新たにインクリメントされたバンク値は、「n」で表されるバンクの数と比較される。(上記したように、バンクの数はインプリメント特有のものである。)
新たにインクリメントされたバンクがnより小さいかまたは等しければ(ステップ5820の結果が「no」)、これは、追加のブロックが依然としてスーパーブロック内でチェックされることを意味する。(上記したように、スーパーブロックは、各バンク上の同じブロックからなる。)この場合、処理はステップ5808に戻り、ステップ5808で次のバンクのスーパーページ0の評価が始まる。バンクは、0からnまで順に評価されることを理解されたい。
新たにインクリメントされたバンクがnより大きければ(ステップ5820の結果が「yes」)、これはスーパーブロック内の最後のブロックに到達したことを意味する。
ステップ5821で、スーパーブロックはインクリメントされる。このステップには、ステップ5820またはステップ5804のいずれかから到達し、ここでは、カレント・スーパーブロックはスーパーブロック・フリーリストに置かれることに留意されたい。
ステップ5822で、新たにインクリメントされたスーパーブロック値が、「p」で表される1フラッシュ・グループ当たりのスーパーブロックの全数と比較される。(上記したように、1フラッシュ・グループ当たりのスーパーブロックの数はインプリメント特有のものである。)
新たにインクリメントされたスーパーブロックがpより小さいかまたは等しければ(ステップ5822の結果が「no」)、これは、追加のスーパーブロックが依然としてこのフラッシュ・グループ内で評価されることを意味する。この場合、処理はステップ5802に戻り、ステップ5802で、次のスーパーブロックのためのスーパーブロック・メタデータ・テーブルがステージバッファへコピーされ、前のスーパーブロックのためのテーブルを上書きし、新しいスーパーブロックのためにプロセスが再び始まる。
新たにインクリメントされたスーパーブロックがpより大きければ(ステップ5822の結果が「yes」)、最後のスーパーブロックが既に評価されており、このフラッシュ・グループのためのスーパーブロック・メタデータ・テーブル、フォワード・テーブル及びリバース・テーブルの回復は完了である。
ステップ5805に戻り、オープン・フラグ及びクローズド・フラグの解析がスーパーブロックは電力損失時にオープンされていた(オープン・フラグが設定され、クローズド・フラグが未設定)ことを示すならば、このスーパーブロックのためのフラッシュ内にストアされているスーパーブロック・メタデータ・テーブルは、どのLBAがスーパーブロックのスーパーページに割り当てられたかを判定するのに有用ではないであろう。というのも、この情報は、スーパーブロックがクローズされているときにフラッシュ内にストアされるだけであるからである。このため、スーパーブロック・メタデータ・テーブルは、フラッシュ内にストアされたスーパーページ・メタデータを用いて復元されなければならない。テーブルが復元されたら、スーパーブロックは全ての他のスーパーブロックに用いられるのと同じ方法を用いて解析されることができる。
ステップ5823で、現在の時刻がスーパーブロック・メタデータ・テーブルのタイムスタンプ・フィールド3506に書き込まれる。このタイムスタンプは、スーパーブロックがクローズされていた時刻を反映しないが(電力損失の時点でスーパーブロックはクローズされていなかったので)、現在の時刻は、任意の他のスーパーブロックのためのリバース・テーブル・タイムスタンプ値より遅いことが保証される。それゆえ、オープンしているスーパーブロックとクローズされているスーパーブロックに同じLBAが書き込まれるならば、オープンしているスーパーブロックのためのタイムスタンプ値は、クローズされているスーパーブロックのためのタイムスタンプ値より時間が遅いことになるので、オープンしているスーパーブロックのためのスーパーページが、LBAのための有効な内容をストアするものとして受け入れられるようにする。これは、正しい結果である。というのも、オープンしているスーパーブロック内の情報は、その名が示す通り、以前にクローズされたスーパーブロック内の情報より時間が遅いからである。復元手順が完了した後、オープンしているスーパーブロックはオープンしたままであることに留意されたい。スーパーブロックがクローズされているとき、スーパーブロック・メタデータ・テーブル・タイムスタンプ値は、テーブルがフラッシュにストアバックされる前にクローズの時間が上書きされることになり、従って訂正されることになる。
ステップ5824で、バンクは0に設定されるので、スーパーブロックの全ブロック(1バンク当たり1つ)を通じてループを開始する。ステップ5825で、スーパーページは0に設定されるので、ブロック内の全スーパーページを通じてループを開始する。
ステップ5826で、カレント・スーパーページのためのスーパーページ・メタデータ1401が、フラッシュからステージバッファにコピーされる。
ステップ5827で、電力損失の前にスーパーページに書込みがなされたか否かを判定する。書込みがなされたスーパーページは、有効なメタデータを含むことになるためのチェックが行われる。
スーパーページに書込みがなされたならば(ステップ5827の結果が「yes」)、ステップ5828で、スーパーページ・メタデータは、スーパーブロック・メタデータ・テーブル内の当該スーパーページにエントリを投入するために用いられる。SPageインデックス・フィールド1402は、スーパーブロック・メタデータ・テーブルのLBAフィールドのために用いられる。タイムスタンプ・フィールド1403は、スーパーブロック・メタデータ・テーブルのスーパーページ・タイムスタンプ・フィールドのために用いられる。消去されたスーパーブロックのためのメタデータ・テーブルのフラッシュ・バージョン内に欠陥情報が維持されるので、スーパーページのためのスーパーブロック・メタデータ不良フィールドは、既に有効な情報を含み、従って、オープンしているスーパーブロックのためのメタデータ・テーブルがフラッシュからステージバッファへコピーされるときに有効であることに留意されたい。
ステップ5829〜5832は、ステップ5817〜5820と同じように働く。上記したように、これらのステップは、ループ・プロセスを制御し、各ブロックの各スーパーページが評価されることを確実にする。
カレント・スーパーページに書込みがされなかったら(ステップ5827の結果が「no」)、処理はステップ5831にスキップし、そこでバンクはインクリメントされることに留意されたい。スーパーブロックのスーパーページは、各バンクにおいて順番に割り当てられるので、或るバンクの或るスーパーページに書込みがされていなければ、それは、当該バンクのそれ以降のスーパーページにも書込みがされないことを意味する。
スーパーブロック・メタデータ・テーブルの最後のブロックが評価されたら(ステップ5832の結果が「yes」)、テーブルの復元プロセスは完了し、処理はステップ5806に戻り、ステップ5806で、メタデータ・テーブルのためのタイムスタンプ情報がリバース・テーブルへコピーされ、それによって、このスーパーブロック内のスーパーページは、任意の他のスーパーブロックとの競合が見られても常に有効として処理されることを保証する。処理は、このスーパーブロックに対して、ステップ5806からまた続く。
VI.MLCフラッシュ
本明細書に記載の実施形態の大部分はSLCフラッシュメモリを用いているが、SSDコントローラ106はMLCフラッシュの使用にもよく適合している。MLCフラッシュは、1つのフラッシュ・セル当たり複数ビットをストアしているので、大量のデータをストアすることができる。MLCはまた、ストレージ・ボリュームの単位当たりのコストがより低い。
しかし、MLCには、データセンタなどの高性能・高信頼性用途においてMLCの使用を困難にする幾つかの問題がある。第1に、MLCはSLCより遅い。上記したように、MLC書込みはSLC書込みより100マイクロ秒長くかかり、性能が劣るMLCすらある。
第2に、MLCフラッシュはSLCフラッシュより耐久性が劣る傾向がある。一般に、SLCフラッシュは、故障なしで100,000消去サイクルの処理を行うように仕様が定められるが、現在のMLCフラッシュ技術は、10,000消去サイクルの処理を行うように仕様が定められているに過ぎない。
第3に、MLCフラッシュは、SLCよりデータの誤り率が高い。SSDコントローラ106は、非常に高い性能水準で、かつコントローラのソフトウェアまたはハードウェアへの変更が最小限であるかまたは全くない状態で、MLCフラッシュで作動するように設計されている。
第1に、図44に関連して上記したように、SSDコントローラ106に用いられるパラレル・パイプライン処理は書込みレイテンシーを隠すので、MLC書込みはSLC書込みよりも時間が掛かるが、一連の書込みを通じてこの差の大部分は隠される。というのも、SSDコントローラ106は、或る書込みをページサイズのチャンクに分けて、それらのチャンクをパラレルかつ重複的に処理することができるからである。
第2に、SSDコントローラ106のフラッシュメモリ・アーキテクチャは、新たに書き込まれたデータを比較的大きなメモリ空間内で移動させる傾向があり、それによって、特別なウェア・レベリング技術を用いなくても消去サイクル制限の効果を最小にする。上記したように、既存のデータを保持するスーパーページとは異なるスーパーページに新しい書込みがなされ、新しいスーパーページは、元のスーパーページとは異なるブロック上に存在し得る。これは、フラッシュ・グループ内でデータを移動させる傾向があるので、データの特定の構成要素が比較的頻繁に消去される場合、これらの消去は、多数の物理フラッシュ・ページの全域に広げられることになる。
別の実施形態では、SSDコントローラ106は、陽的ウェア・レベリング法を用いることができる。例えば、ガベージ・コレクションが行われるスーパーブロックを識別する際に、SSDコントローラ106は、消去カウント・フィールド3507(図35を参照)内で識別された消去カウントが比較的少ないスーパーブロックを優先的に選択することができる。各スーパーブロックの消去カウント情報は、タイムスタンプ・フィールド3405と同様の方法でリバース・テーブルのロー内にストアされることができる。SSDコントローラ106は、消去カウント情報を用いて、同数の有効なスーパーページを有するスーパーブロック間を結ぶガベージ・コレクション(図56に関連する説明を参照)を中断することができ、あるいは、消去カウント情報を用いて、スーパーブロックを複数のカテゴリーに分けることができ、危険区域に近付く消去カウント(例えば5,000消去)を有するスーパーブロックが「ガベージ・コレクション」スーパーブロックとして優先的に選択される(図56に関連して上記したように、一実施形態では、ガベージ・コレクション動作に関連して消去されるスーパーブロックからの有効データが、ガベージ・コレクション・スーパーブロックにストアされ、ガベージ・コレクション・スーパーブロックに関して比較的少ないデータ無効化をもたらすので、当該スーパーブロックの消去は、比較的発生頻度が低い傾向がある)。同様に、上記したように、消去カウント値が閾値を超えるスーパーブロックは、通常のガベージ・コレクションに対して優先的に選択されないように識別され、それによってそのようなスーパーブロックに関してさらなるウェアを減らすことができる。
ここで説明した本発明の様々な態様の実施形態は、好適なインプリメントであるが、当業者は、それらの変形形態も可能であり得ることを理解することになろう。従って、本発明は、添付の請求項の全ての範囲内で保護される権利がある。

Claims (25)

  1. フラッシュメモリ・コントローラであって、
    各々がレジスタ、ALU及び内部メモリを含む複数のプロセッサと、
    少なくとも一部が、メモリコマンドに関連するメタデータを含むデータ構造を含み、かつ、少なくとも一部が、前記複数のプロセッサのためのワーク・キューを含む複数のメモリと、
    前記複数のプロセッサを前記複数のメモリに接続するクロスバー・スイッチとを含み、該クロスバー・スイッチが、各プロセッサのための1つのポートを含む1組のプロセッサ・ポートと、各メモリのための1つのポートを含む1組のメモリ・ポートと、任意のプロセッサ・ポートを任意のメモリ・ポートに接続することはできるが、プロセッサ・ポート同士を接続したり、あるいはメモリ・ポート同士を接続したりすることはできない内部切替機構とを含み、
    それによって、或るプロセッサが、別のプロセッサと関連付けられているワーク・キューにタスクを置くために、前記クロスバー・スイッチを用いて前記別のプロセッサと通信するようにしたことを特徴とするフラッシュメモリ・コントローラ。
  2. 2つ以上のプロセッサがクロスバー・スイッチ・メモリ・ポートにアクセスしようとしている場合に、前記ポートへのアクセスを制御する調停手段をさらに含み、該調停手段が、アクセス権を得たプロセッサにアクセスを提供するように、前記クロスバー・スイッチの内部切替回路を制御することを特徴とする請求項1のフラッシュメモリ・コントローラ。
  3. 前記複数のワーク・キューのうちの少なくとも1つのワーク・キューが、前記複数のデータ構造のうちの1つのデータ構造へのポインタを含むことを特徴とする請求項1のフラッシュメモリ・コントローラ。
  4. 前記複数のメモリのうちの少なくとも1つのメモリが、メタデータをストアするようにフォーマットされているデータ構造へのポインタを含むが、有効なメタデータを現在ストアしていない1若しくは複数のフィールドを含むことを特徴とする請求項3のフラッシュメモリ・コントローラ。
  5. 少なくとも1つのワーク・キューが、空のワーク・キューと少なくとも1つのタスクを含むワーク・キューとを区別することができる情報をストアする第1のレジスタを含む1組のレジスタによって制御され、
    前記コントローラが、プロセッサに接続された信号をさらに含み、該信号が、前記第1のレジスタによって制御され、該信号が、空のワーク・キューとタスクを含むワーク・キュー間の移行によってトリガされ、該信号が、前記プロセッサのスリープ・モードを終了させることを特徴とする請求項1のフラッシュメモリ・コントローラ。
  6. フラッシュメモリ・コントローラを作動させる方法であって、
    (a)読出しまたは書込み及びロジック・アドレスを指定するホストコマンドを受信するステップと、
    (b)前記ホストコマンド及び前記ロジック・アドレスまたは前記ロジック・アドレスに関連しているアドレスを指定するような、前記ホストコマンドに関連しているメタデータ構造を生成するステップと、
    (c)前記メタデータ構造を第1のメモリまたはメモリ領域にストアするステップと、
    (d)第1のプロセッサが、第2のプロセッサと関連付けられている順序付けられたワークリストを含む第2のメモリまたはメモリ領域にアクセスするステップと、
    (e)前記第1のプロセッサが、前記メタデータ構造へのポインタを前記ワークリストに書き込むステップと、
    (f)それに応じて、前記第2のプロセッサが、前記メタデータ構造に関連しているタスクを実行するステップとを含むことを特徴とする方法。
  7. 前記ステップ(d)が、
    前記第1のプロセッサが、クロスバー・スイッチにアクセスし、前記第2のメモリと関連付けられているポートに接続するサブステップをさらに含むことを特徴とする請求項6の方法。
  8. 前記ステップ(f)の第2のプロセッサのタスクが、
    (i)前記第1のメモリまたはメモリ領域にアクセスし、前記メタデータ構造を前記第2のプロセッサ内にあるメモリにコピーするサブステップをさらに含むことを特徴とする請求項6の方法。
  9. 前記ステップ(f)の前記第1のメモリまたはメモリ領域にアクセスする動作が、
    前記第2のプロセッサがクロスバー・スイッチにアクセスし、前記第1のメモリまたはメモリ領域と関連付けられているポートに接続する動作を含むことを特徴とする請求項8の方法。
  10. 前記ステップ(f)の第2のプロセッサのタスクが、
    (ii)前記メタデータ構造が前記第2のプロセッサの内部メモリにストアされている間に前記メタデータ構造の前記内容を変更するサブステップと、
    (iii)前記変更されたメタデータ構造を前記第1のメモリにコピーするサブステップとをさらに含むことを特徴とする請求項8の方法。
  11. フラッシュメモリ・コントローラであって、
    複数のプロセッサを複数のメモリと接続するクロスバー・スイッチを含み、該クロスバー・スイッチが、調停の結果に基づいて該クロスバー・スイッチ上のメモリ・ポートの制御を割り当てる調停手段とを含み、
    前記複数のメモリが、
    ホストコマンドに関連している複数のデータ投入されたメタデータ構造と、
    空きメタデータ構造へのポインタのリストと、
    データ投入されたメタデータ構造へのポインタを各々が含む、それぞれ別々のプロセッサと関連付けられている第1及び第2のワークリストとをストアすることを特徴とするコントローラ。
  12. 第1のプロセッサ及び第2のプロセッサをさらに含み、各プロセッサが、ALU、レジスタ及び内部プロセッサ・メモリを含み、前記第1のプロセッサの前記内部プロセッサ・メモリが、第1のホストコマンドに関連している第1のメタデータ構造をストアし、前記第2のプロセッサの前記内部プロセッサ・メモリが、第2のメタデータ構造をストアすることを特徴とする請求項11のコントローラ。
  13. 前記第1のワークリストが前記第1のプロセッサと関連付けられ、かつ前記第2のワークリストが前記第2のプロセッサと関連付けられており、
    前記第1のワークリスト上のポインタが第3のメタデータ構造を指し、該第3のメタデータ構造がコントローラ・メモリにストアされており、前記第3のメタデータ構造が前記第1のメタデータ構造に関連しており、
    前記第2のワークリスト上のポインタが第4のメタデータ構造を指し、該第4のメタデータ構造がコントローラ・メモリにストアされており、前記第4のメタデータ構造が前記第2のメタデータ構造に関連していることを特徴とする請求項12のコントローラ。
  14. 前記第1及び第2のメタデータ構造が、第1のタイプであり、
    前記第3及び第4のメタデータ構造が、第2のタイプであり、
    前記第1のメタデータ構造が、前記第3のメタデータ構造へのポインタを含み、
    前記第2のメタデータ構造が、前記第4のメタデータ構造へのポインタを含むことを特徴とする請求項13のコントローラ。
  15. 前記第3のメタデータ構造が、第1のロジック・アドレスを含み、
    前記第4のメタデータ構造が、第2のロジック・アドレスを含み、
    前記第1のメタデータ構造が、前記第1のロジック・アドレスに関連している第1の物理アドレスを含み、
    前記第2のメタデータ構造が、前記第2のロジック・アドレスに関連している第2の物理アドレスを含むことを特徴とする請求項14のコントローラ。
  16. 第1及び第2のプロセッサ、クロスバー・スイッチ、並びに第1及び第2のコントローラ・メモリを含むフラッシュストレージ・コントローラを作動させる方法であって、
    (a)前記第1のプロセッサが、第1のメタデータ構造を、前記第1のプロセッサ内にあるプロセッサメモリにストアするステップと、
    (b)前記第1のプロセッサが、前記第1のコントローラ・メモリと関連付けられている第1のクロスバー・スイッチポートにアクセスするステップと、
    (c)前記第1のプロセッサが、前記第1のメタデータ構造を前記第1のコントローラ・メモリにコピーするステップと、
    (d)前記第1のプロセッサが、前記第2のコントローラ・メモリと関連付けられている第2のクロスバー・スイッチポートにアクセスするステップと、
    (e)前記第1のプロセッサが、前記第1のメタデータ構造へのポインタを、前記第2のコントローラ・メモリにストアされておりかつ前記第2のプロセッサと関連付けられているワークリストに置くステップと、
    (f)前記第2のプロセッサが、前記第1のクロスバー・スイッチポートにアクセスするステップと、
    (g)前記第2のプロセッサが、前記第1のメタデータ構造を前記第1のコントローラ・メモリから前記第2のプロセッサ内にあるプロセッサメモリにコピーするステップと、
    (h)前記第2のプロセッサが、前記第1のメタデータ構造を変更するステップとを含むことを特徴とする方法。
  17. (i)前記第2のプロセッサが、第2のメタデータ構造のフィールドにデータ投入するステップをさらに含み、前記第2のメタデータ構造が、前記第2のプロセッサ内にある前記プロセッサメモリ内に位置し、
    前記変更するステップ(h)が、前記第1のメタデータ構造に前記第2のメタデータ構造へのポインタの付加を含むことを特徴とする請求項16の方法。
  18. 前記第1のメタデータ構造がロジック・アドレスを含み、
    ステップ(i)が、前記ロジック・アドレスに関連している第1の物理フラッシュ・アドレスを第2のメタデータ構造フィールドに置くサブステップを含むことを特徴とする請求項17の方法。
  19. (j)前記第2のプロセッサが、第3のメタデータ構造のフィールドにデータ投入するステップをさらに含み、前記第3のメタデータ構造が、前記第2のプロセッサ内にある前記プロセッサメモリ内に位置し、
    前記変更するステップ(h)が、前記第1のメタデータ構造に前記第3のメタデータ構造へのポインタの付加を含むことを特徴とする請求項18の方法。
  20. 前記ステップ(j)が、第2の物理フラッシュ・アドレスを第3のメタデータ構造フィールドに置くステップを含み、前記第2の物理フラッシュ・アドレスが、前記ロジック・アドレスに関連していることを特徴とする請求項19の方法。
  21. フラッシュメモリ・コントローラであって、
    各々がレジスタ、ALU及び内部プロセッサ・メモリを含む第1のプロセッサ及び第2のプロセッサと、
    前記第1のプロセッサと関連付けられている第1のワークリストを含む第1の揮発性メモリと、
    前記第2のプロセッサと関連付けられている第2のワークリストを含む第2の揮発性メモリと、
    第1のホストコマンドに関連している第1のメタデータ構造を含む第3の揮発性メモリと、
    第2のホストコマンドに関連している第2のメタデータ構造を含む第4の揮発性メモリと、
    クロスバー・スイッチとを含み、
    前記クロスバー・スイッチが、
    前記第1のプロセッサに接続されている第1のプロセッサ・ポート及び前記第2のプロセッサに接続されている第2のプロセッサ・ポートを含むような、各々がプロセッサに接続されている1組のプロセッサ・ポートと、
    前記第1の揮発性メモリに接続されている第1のメモリ・ポート、前記第2の揮発性メモリに接続されている第2のメモリ・ポート、前記第3の揮発性メモリに接続されている第3のメモリ・ポート及び前記第4の揮発性メモリに接続されている第4のメモリ・ポートを含むような、各々が揮発性メモリに接続されている1組のメモリ・ポートとを含み、
    前記クロスバー・スイッチが、前記プロセッサ・ポートのうちの1つを前記メモリ・ポートのうちの1つに選択的に接続する内部回路を含むことを特徴とするコントローラ。
  22. 前記第1のワークリストが、前記第1のホストコマンドに関連している第1の情報を含み、
    前記第2のワークリストが、前記第2のホストコマンドに関連している第2の情報を含むことを特徴とする請求項21のコントローラ。
  23. 前記第1の情報が、前記第1のメタデータ構造へのポインタを構成し、
    前記第2の情報が、前記第2のメタデータ構造へのポインタを構成することを特徴とする請求項22のコントローラ。
  24. 前記第1のワークリストが、第3のメタデータ構造へのポインタを含み、該第3のメタデータ構造が、前記第2のホストコマンドに関連していることを特徴とする請求項23のコントローラ。
  25. 前記第1及び第2のメタデータ構造が、ロジック・アドレスを含むが物理アドレスを含まず、
    前記第1のプロセッサの内部プロセッサ・メモリが第4のメタデータ構造を含み、該第4のメタデータ構造が物理アドレスを含むことを特徴とする請求項23のコントローラ。
JP2010540863A 2007-12-27 2008-12-23 プロセッサを内部メモリに接続するクロスバー・スイッチを含むフラッシュメモリ用ストレージコントローラ Expired - Fee Related JP5272019B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US1712307P 2007-12-27 2007-12-27
US61/017,123 2007-12-27
US12/082,207 2008-04-08
US12/082,207 US8775717B2 (en) 2007-12-27 2008-04-08 Storage controller for flash memory including a crossbar switch connecting a plurality of processors with a plurality of internal memories
PCT/US2008/088154 WO2009086371A1 (en) 2007-12-27 2008-12-23 Storage controller for flash memory including a crossbar switch connecting processors with internal memories

Publications (2)

Publication Number Publication Date
JP2011508349A true JP2011508349A (ja) 2011-03-10
JP5272019B2 JP5272019B2 (ja) 2013-08-28

Family

ID=40798195

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010540863A Expired - Fee Related JP5272019B2 (ja) 2007-12-27 2008-12-23 プロセッサを内部メモリに接続するクロスバー・スイッチを含むフラッシュメモリ用ストレージコントローラ

Country Status (5)

Country Link
US (18) US8751755B2 (ja)
EP (1) EP2225642B1 (ja)
JP (1) JP5272019B2 (ja)
CN (2) CN103150275B (ja)
WO (10) WO2009086357A1 (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013061790A (ja) * 2011-09-13 2013-04-04 Toshiba Corp メモリデバイス
KR20130066640A (ko) * 2011-12-12 2013-06-20 애플 인크. Lba 비트맵 사용
JP2014063511A (ja) * 2008-10-13 2014-04-10 Micron Technology Inc ソリッドステート記憶装置におけるトランスレーションレイヤ
WO2015162660A1 (ja) * 2014-04-21 2015-10-29 株式会社日立製作所 計算機システム
US9423979B2 (en) 2014-03-10 2016-08-23 Kabushiki Kaisha Toshiba Memory system and memory controller for determining whether one or plurality of pointers can be stored in a second buffer and for executing data transfer between data buffer and host using the pointers
JP2018139118A (ja) * 2013-12-02 2018-09-06 マイクロン テクノロジー, インク. 自律的メモリの方法及びシステム
TWI647702B (zh) * 2017-12-08 2019-01-11 旺宏電子股份有限公司 記憶體控制器、記憶體系統及於一記憶體中管理資料配置的方法
KR20200128873A (ko) * 2019-05-07 2020-11-17 에스케이하이닉스 주식회사 컨트롤러, 메모리 시스템 및 그것의 동작 방법
US11586577B2 (en) 2009-09-11 2023-02-21 Micron Technology, Inc. Autonomous memory architecture

Families Citing this family (754)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8452912B2 (en) * 2007-10-11 2013-05-28 Super Talent Electronics, Inc. Flash-memory system with enhanced smart-storage switch and packed meta-data cache for mitigating write amplification by delaying and merging writes until a host read
US8223778B2 (en) * 2003-11-19 2012-07-17 Intel Corporation Routing table architecture
US9384818B2 (en) 2005-04-21 2016-07-05 Violin Memory Memory power management
US8200887B2 (en) 2007-03-29 2012-06-12 Violin Memory, Inc. Memory management system and method
US11328764B2 (en) 2005-09-26 2022-05-10 Rambus Inc. Memory system topologies including a memory die stack
WO2007132452A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Reducing programming error in memory devices
KR101375955B1 (ko) 2006-05-12 2014-03-18 애플 인크. 메모리 디바이스 내의 왜곡 추정 및 상쇄
KR101202537B1 (ko) 2006-05-12 2012-11-19 애플 인크. 메모리 디바이스를 위한 결합된 왜곡 추정 및 에러 보정 코딩
US8239735B2 (en) 2006-05-12 2012-08-07 Apple Inc. Memory Device with adaptive capacity
WO2008026203A2 (en) 2006-08-27 2008-03-06 Anobit Technologies Estimation of non-linear distortion in memory devices
US7975192B2 (en) 2006-10-30 2011-07-05 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
CN101601094B (zh) * 2006-10-30 2013-03-27 苹果公司 使用多个门限读取存储单元的方法
US7924648B2 (en) * 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
US8151163B2 (en) 2006-12-03 2012-04-03 Anobit Technologies Ltd. Automatic defect management in memory devices
US7706182B2 (en) * 2006-12-03 2010-04-27 Anobit Technologies Ltd. Adaptive programming of analog memory cells using statistical characteristics
US8019940B2 (en) 2006-12-06 2011-09-13 Fusion-Io, Inc. Apparatus, system, and method for a front-end, distributed raid
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US9495241B2 (en) 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US7900102B2 (en) 2006-12-17 2011-03-01 Anobit Technologies Ltd. High-speed programming of memory devices
US8151166B2 (en) 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
US7751240B2 (en) 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
US8369141B2 (en) 2007-03-12 2013-02-05 Apple Inc. Adaptive estimation of memory cell read thresholds
US11010076B2 (en) 2007-03-29 2021-05-18 Violin Systems Llc Memory system with multiple striping of raid groups and method for performing the same
US9632870B2 (en) * 2007-03-29 2017-04-25 Violin Memory, Inc. Memory system with multiple striping of raid groups and method for performing the same
US8001320B2 (en) 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
US8234545B2 (en) 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
US8429493B2 (en) 2007-05-12 2013-04-23 Apple Inc. Memory device with internal signap processing unit
US9396103B2 (en) * 2007-06-08 2016-07-19 Sandisk Technologies Llc Method and system for storage address re-mapping for a memory device
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8683126B2 (en) * 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8259497B2 (en) 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
US8174905B2 (en) 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
US7773413B2 (en) * 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
WO2009050703A2 (en) 2007-10-19 2009-04-23 Anobit Technologies Data storage in analog memory cell arrays having erase failures
US8068360B2 (en) 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
US8000141B1 (en) 2007-10-19 2011-08-16 Anobit Technologies Ltd. Compensation for voltage drifts in analog memory cells
WO2009063450A2 (en) 2007-11-13 2009-05-22 Anobit Technologies Optimized selection of memory units in multi-unit memory devices
US8959307B1 (en) 2007-11-16 2015-02-17 Bitmicro Networks, Inc. Reduced latency memory read transactions in storage devices
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
US8209588B2 (en) 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
US8751755B2 (en) * 2007-12-27 2014-06-10 Sandisk Enterprise Ip Llc Mass storage controller volatile memory containing metadata related to flash memory storage
US8085586B2 (en) 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
US8156398B2 (en) 2008-02-05 2012-04-10 Anobit Technologies Ltd. Parameter estimation based on error correction code parity check equations
US7924587B2 (en) 2008-02-21 2011-04-12 Anobit Technologies Ltd. Programming of analog memory cells using a single programming pulse per state transition
US7864573B2 (en) * 2008-02-24 2011-01-04 Anobit Technologies Ltd. Programming analog memory cells for reduced variance after retention
JP4498426B2 (ja) * 2008-03-01 2010-07-07 株式会社東芝 メモリシステム
US8230300B2 (en) 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
US8493783B2 (en) 2008-03-18 2013-07-23 Apple Inc. Memory device readout using multiple sense times
US8400858B2 (en) 2008-03-18 2013-03-19 Apple Inc. Memory device with reduced sense time readout
US8059457B2 (en) 2008-03-18 2011-11-15 Anobit Technologies Ltd. Memory device with multiple-accuracy read commands
US8966155B1 (en) * 2008-04-01 2015-02-24 Daniel P. Mulligan System and method for implementing a high performance data storage system
US20110235260A1 (en) * 2008-04-09 2011-09-29 Apacer Technology Inc. Dram module with solid state disk
US7983051B2 (en) * 2008-04-09 2011-07-19 Apacer Technology Inc. DRAM module with solid state disk
US20090271562A1 (en) * 2008-04-25 2009-10-29 Sinclair Alan W Method and system for storage address re-mapping for a multi-bank memory device
US9594679B2 (en) * 2008-05-01 2017-03-14 Sandisk Il Ltd. Flash cache flushing method and system
WO2009140112A1 (en) 2008-05-13 2009-11-19 Rambus Inc. Fractional program commands for memory devices
US20090307523A1 (en) * 2008-06-06 2009-12-10 Allison Brian D System Performance Through Invalidation of Speculative Memory Scrub Commands
US8843691B2 (en) 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
TW201003358A (en) * 2008-07-01 2010-01-16 Asustek Comp Inc Daughter board with solid state storage device of computer system
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US8498151B1 (en) 2008-08-05 2013-07-30 Apple Inc. Data storage in analog memory cells using modified pass voltages
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8169825B1 (en) * 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8239734B1 (en) 2008-10-15 2012-08-07 Apple Inc. Efficient data storage in storage device arrays
US8656117B1 (en) * 2008-10-30 2014-02-18 Nvidia Corporation Read completion data management
US8713330B1 (en) 2008-10-30 2014-04-29 Apple Inc. Data scrambling in memory devices
US8208304B2 (en) 2008-11-16 2012-06-26 Anobit Technologies Ltd. Storage at M bits/cell density in N bits/cell analog memory cell devices, M>N
KR101543434B1 (ko) * 2008-12-15 2015-08-10 삼성전자주식회사 반도체 메모리 시스템의 제조 방법
JP2010152853A (ja) * 2008-12-26 2010-07-08 Toshiba Corp データ記憶装置
US8248831B2 (en) 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8174857B1 (en) 2008-12-31 2012-05-08 Anobit Technologies Ltd. Efficient readout schemes for analog memory cell devices using multiple read threshold sets
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
US8924819B2 (en) * 2009-01-23 2014-12-30 Macronix International Co., Ltd. Memory device and operation method thereof
US8327040B2 (en) 2009-01-26 2012-12-04 Micron Technology, Inc. Host controller
US8266361B1 (en) * 2009-01-28 2012-09-11 Cypress Semiconductor Corporation Access methods and circuits for devices having multiple buffers
US8228701B2 (en) 2009-03-01 2012-07-24 Apple Inc. Selective activation of programming schemes in analog memory cell arrays
US8239614B2 (en) * 2009-03-04 2012-08-07 Micron Technology, Inc. Memory super block allocation
KR101581311B1 (ko) * 2009-03-11 2015-12-31 삼성전자주식회사 플래시 메모리 장치 및 그 제어 방법
KR101581679B1 (ko) * 2009-03-18 2015-12-31 삼성전자주식회사 저장 장치 및 저장 장치의 버퍼 메모리 관리 방법
US8977805B2 (en) 2009-03-25 2015-03-10 Apple Inc. Host-assisted compaction of memory blocks
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US9164914B1 (en) * 2009-04-07 2015-10-20 Marvell World Trade Ltd. Multiple port routing circuitry for flash memory storage systems
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
TW201037711A (en) * 2009-04-13 2010-10-16 Jmicron Technology Corp Data access method used in multi-channel flash memory system and data access apparatus thereof
CA2745646C (en) * 2009-04-21 2017-09-19 International Business Machines Corporation Apparatus and method for controlling a solid state disk (ssd) device
US20100306451A1 (en) * 2009-06-01 2010-12-02 Joshua Johnson Architecture for nand flash constraint enforcement
US8245112B2 (en) * 2009-06-04 2012-08-14 Lsi Corporation Flash memory organization
US8321639B2 (en) * 2009-12-30 2012-11-27 Lsi Corporation Command tracking for direct access block storage devices
US8200857B2 (en) * 2009-11-30 2012-06-12 Lsi Corporation Coalescing multiple contexts into a single data transfer in a media controller architecture
US8286004B2 (en) * 2009-10-09 2012-10-09 Lsi Corporation Saving encryption keys in one-time programmable memory
US8219776B2 (en) * 2009-09-23 2012-07-10 Lsi Corporation Logical-to-physical address translation for solid state disks
US8555141B2 (en) * 2009-06-04 2013-10-08 Lsi Corporation Flash memory organization
JP2010262715A (ja) * 2009-05-11 2010-11-18 Renesas Electronics Corp メモリ検査システム及びメモリ検査方法
JP2010282369A (ja) * 2009-06-03 2010-12-16 Toshiba Corp メモリシステム
WO2010144587A2 (en) 2009-06-12 2010-12-16 Violin Memory, Inc. Memory system having persistent garbage collection
US20100318720A1 (en) * 2009-06-16 2010-12-16 Saranyan Rajagopalan Multi-Bank Non-Volatile Memory System with Satellite File System
US8144496B2 (en) * 2009-06-30 2012-03-27 Sandisk Technologies Inc. Memory system with multi-level status signaling and method for operating the same
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US8631187B2 (en) * 2009-08-07 2014-01-14 Intel Corporation Dual-scope directory for a non-volatile memory storage system
US20110035540A1 (en) * 2009-08-10 2011-02-10 Adtron, Inc. Flash blade system architecture and method
US8189379B2 (en) * 2009-08-12 2012-05-29 Texas Memory Systems, Inc. Reduction of read disturb errors in NAND FLASH memory
US8688894B2 (en) * 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
US9135190B1 (en) 2009-09-04 2015-09-15 Bitmicro Networks, Inc. Multi-profile memory controller for computing devices
US8665601B1 (en) 2009-09-04 2014-03-04 Bitmicro Networks, Inc. Solid state drive with improved enclosure assembly
US8447908B2 (en) 2009-09-07 2013-05-21 Bitmicro Networks, Inc. Multilevel memory bus system for solid-state mass storage
US8560804B2 (en) * 2009-09-14 2013-10-15 Bitmicro Networks, Inc. Reducing erase cycles in an electronic storage device that uses at least one erase-limited memory device
TWI427635B (zh) * 2009-09-17 2014-02-21 Moai Electronics Corp Flash memory control system and flash memory control method
US9063886B2 (en) 2009-09-18 2015-06-23 Apple Inc. Metadata redundancy schemes for non-volatile memories
EP2302636B1 (fr) 2009-09-21 2014-11-05 STMicroelectronics (Rousset) SAS Procédé de lecture d'une mémoire non volatile au moyen de métadonnées et d'une table de correspondance
TWI506422B (zh) * 2009-09-23 2015-11-01 Silicon Motion Inc 用來管理具有多通道、多途徑的記憶裝置之方法以及相關之記憶裝置及其控制器
US8990476B2 (en) 2009-10-01 2015-03-24 Micron Technology, Inc. Power interrupt management
US8407407B1 (en) * 2009-10-06 2013-03-26 Marvell International Ltd. Solid state drive access control system with equalized access timing
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8151039B2 (en) * 2009-10-19 2012-04-03 Moai Electronics Corporation System and method for controlling flash memory without using ready/busy signal
KR101601849B1 (ko) * 2009-10-21 2016-03-09 삼성전자주식회사 불휘발성 메모리 장치, 그것의 읽기 방법, 그리고 그것을 포함하는 메모리 시스템
US8402259B2 (en) * 2009-11-30 2013-03-19 International Business Machines Corporation Accelerating wake-up time of a system
US8473669B2 (en) * 2009-12-07 2013-06-25 Sandisk Technologies Inc. Method and system for concurrent background and foreground operations in a non-volatile memory array
GB2488259A (en) 2009-12-11 2012-08-22 Ibm Flash memory controller
US8285946B2 (en) * 2009-12-15 2012-10-09 International Business Machines Corporation Reducing access contention in flash-based memory systems
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
US8694814B1 (en) 2010-01-10 2014-04-08 Apple Inc. Reuse of host hibernation storage space by memory controller
US8677203B1 (en) 2010-01-11 2014-03-18 Apple Inc. Redundant data storage schemes for multi-die memory systems
US8473695B2 (en) 2011-03-31 2013-06-25 Mosys, Inc. Memory system including variable write command scheduling
US9354823B2 (en) 2012-06-06 2016-05-31 Mosys, Inc. Memory system including variable write burst and broadcast command scheduling
KR101648531B1 (ko) * 2010-02-12 2016-08-17 삼성전자주식회사 불휘발성 메모리 시스템과 이의 동작 방법
KR101095046B1 (ko) 2010-02-25 2011-12-20 연세대학교 산학협력단 솔리드 스테이트 디스크 및 이를 포함하는 사용자 시스템
US8887142B2 (en) * 2010-03-10 2014-11-11 Microsoft Corporation Loop control flow diversion
US8365041B2 (en) 2010-03-17 2013-01-29 Sandisk Enterprise Ip Llc MLC self-raid flash data protection scheme
US20110227920A1 (en) * 2010-03-19 2011-09-22 James Adams Method and System For a Shader Processor With Closely-Coupled Peripherals
US8726126B2 (en) 2010-03-23 2014-05-13 Apple Inc. Non-regular parity distribution detection via metadata tag
US8478796B2 (en) * 2010-03-23 2013-07-02 Apple Inc. Uncorrectable error handling schemes for non-volatile memories
US8725931B1 (en) 2010-03-26 2014-05-13 Western Digital Technologies, Inc. System and method for managing the execution of memory commands in a solid-state memory
JP5646633B2 (ja) 2010-04-12 2014-12-24 株式会社日立製作所 ストレージ装置
US9183134B2 (en) * 2010-04-22 2015-11-10 Seagate Technology Llc Data segregation in a storage device
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8782327B1 (en) 2010-05-11 2014-07-15 Western Digital Technologies, Inc. System and method for managing execution of internal commands and host commands in a solid-state memory
US9026716B2 (en) 2010-05-12 2015-05-05 Western Digital Technologies, Inc. System and method for managing garbage collection in solid-state memory
US9104546B2 (en) * 2010-05-24 2015-08-11 Silicon Motion Inc. Method for performing block management using dynamic threshold, and associated memory device and controller thereof
CN102169466A (zh) * 2010-06-22 2011-08-31 上海盈方微电子有限公司 一种基于页操作的可编程Nandflash控制器
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
US8959284B1 (en) 2010-06-28 2015-02-17 Western Digital Technologies, Inc. Disk drive steering write data to write cache based on workload
US9141538B2 (en) * 2010-07-07 2015-09-22 Marvell World Trade Ltd. Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive
US9135168B2 (en) 2010-07-07 2015-09-15 Marvell World Trade Ltd. Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US8868852B2 (en) * 2010-07-07 2014-10-21 Marvell World Trade Ltd. Interface management control systems and methods for non-volatile semiconductor memory
US8595591B1 (en) 2010-07-11 2013-11-26 Apple Inc. Interference-aware assignment of programming levels in analog memory cells
US9104580B1 (en) 2010-07-27 2015-08-11 Apple Inc. Cache memory for hybrid disk drives
US8645794B1 (en) 2010-07-31 2014-02-04 Apple Inc. Data storage in analog memory cells using a non-integer number of bits per cell
US8856475B1 (en) 2010-08-01 2014-10-07 Apple Inc. Efficient selection of memory blocks for compaction
WO2012021379A2 (en) 2010-08-10 2012-02-16 Rambus Inc. Verify before program resume for memory devices
US8493781B1 (en) 2010-08-12 2013-07-23 Apple Inc. Interference mitigation using individual word line erasure operations
US9058280B1 (en) 2010-08-13 2015-06-16 Western Digital Technologies, Inc. Hybrid drive migrating data from disk to non-volatile semiconductor memory based on accumulated access time
US9268499B1 (en) 2010-08-13 2016-02-23 Western Digital Technologies, Inc. Hybrid drive migrating high workload data from disk to non-volatile semiconductor memory
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US8510499B1 (en) * 2010-08-30 2013-08-13 Symantec Corporation Solid state drive caching using memory structures to determine a storage space replacement candidate
US8775720B1 (en) * 2010-08-31 2014-07-08 Western Digital Technologies, Inc. Hybrid drive balancing execution times for non-volatile semiconductor memory and disk
US8850114B2 (en) 2010-09-07 2014-09-30 Daniel L Rosenband Storage array controller for flash-based storage devices
US8635412B1 (en) 2010-09-09 2014-01-21 Western Digital Technologies, Inc. Inter-processor communication
US8782334B1 (en) 2010-09-10 2014-07-15 Western Digital Technologies, Inc. Hybrid drive copying disk cache to non-volatile semiconductor memory
US20120066444A1 (en) * 2010-09-14 2012-03-15 Advanced Micro Devices, Inc. Resolution Enhancement of Video Stream Based on Spatial and Temporal Correlation
CN102402464A (zh) * 2010-09-17 2012-04-04 中国移动通信有限公司 一种智能卡中的存储器的数据擦写方法及智能卡
US9021192B1 (en) 2010-09-21 2015-04-28 Western Digital Technologies, Inc. System and method for enhancing processing of memory access requests
US9164886B1 (en) 2010-09-21 2015-10-20 Western Digital Technologies, Inc. System and method for multistage processing in a memory storage subsystem
DE112011103208T5 (de) * 2010-09-24 2013-10-02 Texas Memory Systems, Inc. Hochgeschwindigkeits-Speichersystem
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
US8612804B1 (en) * 2010-09-30 2013-12-17 Western Digital Technologies, Inc. System and method for improving wear-leveling performance in solid-state memory
US8892981B2 (en) 2010-09-30 2014-11-18 Apple Inc. Data recovery using outer codewords stored in volatile memory
US8452911B2 (en) 2010-09-30 2013-05-28 Sandisk Technologies Inc. Synchronized maintenance operations in a multi-bank storage system
US20120096290A1 (en) * 2010-10-14 2012-04-19 Keynetik, Inc. Distributed Architecture for Situation Aware Sensory Application
US8755221B2 (en) * 2010-10-18 2014-06-17 Avalanche Technology, Inc. Emulation of static random access memory (SRAM) by magnetic random access memory (MRAM)
US11232022B2 (en) * 2010-10-29 2022-01-25 Samsung Electronics Co., Ltd. Memory system, data storage device, user device and data management method thereof having a data management information matching determination
US20120110244A1 (en) * 2010-11-02 2012-05-03 Micron Technology, Inc. Copyback operations
WO2012061048A1 (en) * 2010-11-04 2012-05-10 Rambus Inc. Techniques for storing data and tags in different memory arrays
JP2012118739A (ja) * 2010-11-30 2012-06-21 Toshiba Corp 記憶装置、及び制御方法
US8464137B2 (en) * 2010-12-03 2013-06-11 International Business Machines Corporation Probabilistic multi-tier error correction in not-and (NAND) flash memory
TWI451439B (zh) * 2010-12-10 2014-09-01 Phison Electronics Corp 記憶體儲存裝置、其記憶體控制器與資料寫入方法
US20120159040A1 (en) * 2010-12-15 2012-06-21 Dhaval Parikh Auxiliary Interface for Non-Volatile Memory System
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
US8392635B2 (en) 2010-12-22 2013-03-05 Western Digital Technologies, Inc. Selectively enabling a host transfer interrupt
US8972821B2 (en) 2010-12-23 2015-03-03 Texas Instruments Incorporated Encode and multiplex, register, and decode and error correction circuitry
US8458145B2 (en) * 2011-01-20 2013-06-04 Infinidat Ltd. System and method of storage optimization
US10049040B2 (en) * 2011-01-21 2018-08-14 Seagate Technology Llc Just in time garbage collection
US8874872B2 (en) 2011-01-21 2014-10-28 Seagate Technology Llc Garbage collection management in memories
US8954647B2 (en) * 2011-01-28 2015-02-10 Apple Inc. Systems and methods for redundantly storing metadata for non-volatile memory
US8484542B2 (en) * 2011-02-08 2013-07-09 Sandisk Technologies Inc. Data recovery using additional error correction coding data
US8909851B2 (en) 2011-02-08 2014-12-09 SMART Storage Systems, Inc. Storage control system with change logging mechanism and method of operation thereof
US8850104B2 (en) * 2011-03-21 2014-09-30 Apple Inc. Independent management of data and parity logical block addresses
US20120246385A1 (en) * 2011-03-22 2012-09-27 American Megatrends, Inc. Emulating spi or 12c prom/eprom/eeprom using flash memory of microcontroller
US8935466B2 (en) 2011-03-28 2015-01-13 SMART Storage Systems, Inc. Data storage system with non-volatile memory and method of operation thereof
US9361044B2 (en) * 2011-03-28 2016-06-07 Western Digital Technologies, Inc. Power-safe data management system
CN103620563B (zh) 2011-04-26 2015-04-29 Lsi公司 用于非易失性存储器的可变超量配置
US8918595B2 (en) * 2011-04-28 2014-12-23 Seagate Technology Llc Enforcing system intentions during memory scheduling
US9021178B2 (en) 2011-05-02 2015-04-28 Western Digital Technologies, Inc. High performance path for command processing
CN102789264A (zh) * 2011-05-18 2012-11-21 鸿富锦精密工业(深圳)有限公司 计算机装置的主板
US8543758B2 (en) * 2011-05-31 2013-09-24 Micron Technology, Inc. Apparatus including memory channel control circuit and related methods for relaying commands to logical units
US10031850B2 (en) 2011-06-07 2018-07-24 Sandisk Technologies Llc System and method to buffer data
JP5833347B2 (ja) * 2011-06-08 2015-12-16 ローム株式会社 データ処理装置
TWI436209B (zh) * 2011-06-14 2014-05-01 Phison Electronics Corp 記憶體管理表處理方法、記憶體控制器與記憶體儲存裝置
US8910020B2 (en) 2011-06-19 2014-12-09 Sandisk Enterprise Ip Llc Intelligent bit recovery for flash memory
US20120324148A1 (en) * 2011-06-19 2012-12-20 Paul Roger Stonelake System and method of protecting metadata from nand flash failures
US8909982B2 (en) 2011-06-19 2014-12-09 Sandisk Enterprise Ip Llc System and method for detecting copyback programming problems
US8898373B1 (en) 2011-06-29 2014-11-25 Western Digital Technologies, Inc. System and method for improving wear-leveling performance in solid-state memory
US9003101B1 (en) 2011-06-29 2015-04-07 Western Digital Technologies, Inc. Prioritized access for media with heterogeneous access rates
US8626991B1 (en) * 2011-06-30 2014-01-07 Emc Corporation Multi-LUN SSD optimization system and method
US9158670B1 (en) 2011-06-30 2015-10-13 Western Digital Technologies, Inc. System and method for dynamically adjusting garbage collection policies in solid-state memory
US9417823B2 (en) 2011-07-12 2016-08-16 Violin Memory Inc. Memory system management
US9335939B2 (en) 2011-07-12 2016-05-10 Violin Memory Inc. RAIDed memory system
US8806112B2 (en) 2011-07-14 2014-08-12 Lsi Corporation Meta data handling within a flash media controller
US20130019053A1 (en) * 2011-07-14 2013-01-17 Vinay Ashok Somanache Flash controller hardware architecture for flash devices
US8880977B2 (en) * 2011-07-22 2014-11-04 Sandisk Technologies Inc. Systems and methods of storing data
KR101804521B1 (ko) * 2011-08-16 2017-12-07 에스케이하이닉스 주식회사 집적회로 칩, 이를 포함하는 시스템 및 동작방법, 메모리 및 메모리 시스템
US8973018B2 (en) 2011-08-23 2015-03-03 International Business Machines Corporation Configuring and relaying events from a storage controller to a host server
US9021146B2 (en) 2011-08-30 2015-04-28 Apple Inc. High priority command queue for peripheral component
US9098399B2 (en) 2011-08-31 2015-08-04 SMART Storage Systems, Inc. Electronic system with storage management mechanism and method of operation thereof
US9021319B2 (en) 2011-09-02 2015-04-28 SMART Storage Systems, Inc. Non-volatile memory management system with load leveling and method of operation thereof
US9063844B2 (en) 2011-09-02 2015-06-23 SMART Storage Systems, Inc. Non-volatile memory management system with time measure mechanism and method of operation thereof
US9021231B2 (en) 2011-09-02 2015-04-28 SMART Storage Systems, Inc. Storage control system with write amplification control mechanism and method of operation thereof
US9195530B1 (en) 2011-09-06 2015-11-24 Western Digital Technologies, Inc. Systems and methods for improved data management in data storage systems
US8700834B2 (en) 2011-09-06 2014-04-15 Western Digital Technologies, Inc. Systems and methods for an enhanced controller architecture in data storage systems
US8713357B1 (en) 2011-09-06 2014-04-29 Western Digital Technologies, Inc. Systems and methods for detailed error reporting in data storage systems
US8707104B1 (en) 2011-09-06 2014-04-22 Western Digital Technologies, Inc. Systems and methods for error injection in data storage systems
JP2013061795A (ja) * 2011-09-13 2013-04-04 Toshiba Corp 記憶装置、コントローラ、およびリードコマンド実行方法
US10037272B2 (en) * 2012-08-08 2018-07-31 Avalanche Technology, Inc. Storage system employing MRAM and array of solid state disks with integrated switch
US8635407B2 (en) 2011-09-30 2014-01-21 International Business Machines Corporation Direct memory address for solid-state drives
US9372755B1 (en) 2011-10-05 2016-06-21 Bitmicro Networks, Inc. Adaptive power cycle sequences for data recovery
US9058289B2 (en) 2011-11-07 2015-06-16 Sandisk Enterprise Ip Llc Soft information generation for memory systems
US8938583B1 (en) * 2011-11-16 2015-01-20 Western Digital Technologies, Inc. System and method for concurrently executing data access requests
US8954822B2 (en) 2011-11-18 2015-02-10 Sandisk Enterprise Ip Llc Data encoder and decoder using memory-specific parity-check matrix
US9048876B2 (en) 2011-11-18 2015-06-02 Sandisk Enterprise Ip Llc Systems, methods and devices for multi-tiered error correction
US8924815B2 (en) 2011-11-18 2014-12-30 Sandisk Enterprise Ip Llc Systems, methods and devices for decoding codewords having multiple parity segments
US9164887B2 (en) * 2011-12-05 2015-10-20 Industrial Technology Research Institute Power-failure recovery device and method for flash memory
US10203881B2 (en) 2011-12-19 2019-02-12 Apple Inc. Optimized execution of interleaved write operations in solid state drives
US9411724B2 (en) * 2011-12-21 2016-08-09 Intel Corporation Method and apparatus for a partial-address select-signal generator with address shift
US8762627B2 (en) 2011-12-21 2014-06-24 Sandisk Technologies Inc. Memory logical defragmentation during garbage collection
US8713204B2 (en) * 2011-12-27 2014-04-29 Apple Inc. High-performance AHCI interface
US20130173972A1 (en) * 2011-12-28 2013-07-04 Robert Kubo System and method for solid state disk flash plane failure detection
KR20130076429A (ko) * 2011-12-28 2013-07-08 삼성전자주식회사 메모리 장치의 저장 영역 관리 방법 및 이를 이용한 저장 장치
JP2013140541A (ja) * 2012-01-06 2013-07-18 Toshiba Corp 半導体記憶装置
US20130179614A1 (en) * 2012-01-10 2013-07-11 Diarmuid P. Ross Command Abort to Reduce Latency in Flash Memory Access
US8918680B2 (en) 2012-01-23 2014-12-23 Apple Inc. Trace queue for peripheral component
KR101876574B1 (ko) * 2012-02-02 2018-07-09 에스케이하이닉스 주식회사 데이터 입출력 컨트롤러 및 이를 포함하는 시스템
US9239781B2 (en) 2012-02-07 2016-01-19 SMART Storage Systems, Inc. Storage control system with erase block mechanism and method of operation thereof
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US8892787B2 (en) * 2012-03-06 2014-11-18 Lsi Corporation Methods and apparatus for packing received frames in buffers in a serial attached SCSI (SAS) device
US20130246686A1 (en) * 2012-03-19 2013-09-19 Hitachi, Ltd. Storage system comprising nonvolatile semiconductor storage device, and storage control method
US8370567B1 (en) * 2012-03-23 2013-02-05 DSSD, Inc. Storage system with self describing data
US9053008B1 (en) 2012-03-26 2015-06-09 Western Digital Technologies, Inc. Systems and methods for providing inline parameter service in data storage devices
WO2013147894A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Solid state drive management in power loss recovery
US9202577B2 (en) 2012-03-30 2015-12-01 Intel Corporation Solid state drive management in power loss recovery
US11024352B2 (en) * 2012-04-10 2021-06-01 Samsung Electronics Co., Ltd. Memory system for access concentration decrease management and access concentration decrease method
US9350386B2 (en) 2012-04-12 2016-05-24 Samsung Electronics Co., Ltd. Memory device, memory system, and method of operating the same
US9298252B2 (en) 2012-04-17 2016-03-29 SMART Storage Systems, Inc. Storage control system with power down mechanism and method of operation thereof
US8996881B2 (en) 2012-04-23 2015-03-31 International Business Machines Corporation Preserving redundancy in data deduplication systems by encryption
US9262428B2 (en) 2012-04-23 2016-02-16 International Business Machines Corporation Preserving redundancy in data deduplication systems by designation of virtual address
US10133747B2 (en) 2012-04-23 2018-11-20 International Business Machines Corporation Preserving redundancy in data deduplication systems by designation of virtual device
US9779103B2 (en) * 2012-04-23 2017-10-03 International Business Machines Corporation Preserving redundancy in data deduplication systems
CN103389963B (zh) * 2012-05-09 2016-08-31 北京兆易创新科技股份有限公司 一种嵌入式系统控制器
US9043669B1 (en) 2012-05-18 2015-05-26 Bitmicro Networks, Inc. Distributed ECC engine for storage media
CN102722447B (zh) * 2012-06-06 2015-01-14 北京航空航天大学 一种内存垃圾收集器中对象状态的增量式跟踪记录方法
US8949689B2 (en) 2012-06-11 2015-02-03 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9003068B2 (en) 2012-07-12 2015-04-07 International Business Machines Corporation Service channel for connecting a host computer to peripheral devices
CN104641419A (zh) * 2012-07-13 2015-05-20 三星电子株式会社 固态驱动器控制器、固态驱动器、固态驱动器的数据处理方法、多通道固态驱动器、raid控制器以及其中记录有用于向固态驱动器提供顺序信息的计算机程序的计算机可读记录介质
KR102012740B1 (ko) 2012-07-18 2019-08-21 삼성전자주식회사 복수의 불휘발성 메모리 칩들을 포함하는 저장 장치 및 그것의 제어 방법
US20140032820A1 (en) * 2012-07-25 2014-01-30 Akinori Harasawa Data storage apparatus, memory control method and electronic device with data storage apparatus
KR101992940B1 (ko) * 2012-08-08 2019-06-26 삼성전자주식회사 메모리 컨트롤러의 동작 방법, 및 상기 메모리 컨트롤러를 포함하는 시스템
US20140052897A1 (en) * 2012-08-17 2014-02-20 Seagate Technology Llc Dynamic formation of garbage collection units in a memory
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US8938645B2 (en) * 2012-09-19 2015-01-20 Sap Se Invalidation of metadata buffers
US9471484B2 (en) 2012-09-19 2016-10-18 Novachips Canada Inc. Flash memory controller having dual mode pin-out
WO2014047159A1 (en) * 2012-09-21 2014-03-27 Violin Memory Inc. Write cache sorting
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US8972826B2 (en) 2012-10-24 2015-03-03 Western Digital Technologies, Inc. Adaptive error correction codes for data storage systems
US8959281B1 (en) 2012-11-09 2015-02-17 Western Digital Technologies, Inc. Data management for a storage device
US9594714B2 (en) 2012-11-15 2017-03-14 Empire Technology Development Llc Multi-channel storage system supporting a multi-command protocol
WO2014081719A1 (en) * 2012-11-20 2014-05-30 Peddle Charles I Solid state drive architectures
US11037625B2 (en) * 2012-11-20 2021-06-15 Thstyme Bermuda Limited Solid state drive architectures
US9021339B2 (en) 2012-11-29 2015-04-28 Western Digital Technologies, Inc. Data reliability schemes for data storage systems
US9671962B2 (en) * 2012-11-30 2017-06-06 Sandisk Technologies Llc Storage control system with data management mechanism of parity and method of operation thereof
US9059736B2 (en) 2012-12-03 2015-06-16 Western Digital Technologies, Inc. Methods, solid state drive controllers and data storage devices having a runtime variable raid protection scheme
US9135112B2 (en) 2012-12-11 2015-09-15 Seagate Technology Llc Policy for read operations addressing on-the-fly decoding failure in non-volatile memory
US9214963B1 (en) 2012-12-21 2015-12-15 Western Digital Technologies, Inc. Method and system for monitoring data channel to enable use of dynamically adjustable LDPC coding parameters in a data storage system
US9411718B2 (en) 2012-12-21 2016-08-09 Seagate Technology Llc Method to apply fine grain wear leveling and garbage collection
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9239751B1 (en) 2012-12-27 2016-01-19 Sandisk Enterprise Ip Llc Compressing data from multiple reads for error control management in memory systems
US9286002B1 (en) 2012-12-28 2016-03-15 Virident Systems Inc. Dynamic restriping in nonvolatile memory systems
US9842660B1 (en) 2012-12-28 2017-12-12 Virident Systems, Llc System and method to improve enterprise reliability through tracking I/O performance metrics in non-volatile random access memory
US9003264B1 (en) 2012-12-31 2015-04-07 Sandisk Enterprise Ip Llc Systems, methods, and devices for multi-dimensional flash RAID data protection
US9465731B2 (en) 2012-12-31 2016-10-11 Sandisk Technologies Llc Multi-layer non-volatile memory system having multiple partitions in a layer
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US8873284B2 (en) 2012-12-31 2014-10-28 Sandisk Technologies Inc. Method and system for program scheduling in a multi-layer memory
US9734911B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for asynchronous die operations in a non-volatile memory
US9348746B2 (en) 2012-12-31 2016-05-24 Sandisk Technologies Method and system for managing block reclaim operations in a multi-layer memory
US9223693B2 (en) 2012-12-31 2015-12-29 Sandisk Technologies Inc. Memory system having an unequal number of memory die on different control channels
US9734050B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for managing background operations in a multi-layer memory
US9336133B2 (en) 2012-12-31 2016-05-10 Sandisk Technologies Inc. Method and system for managing program cycles including maintenance programming operations in a multi-layer memory
US9417685B2 (en) * 2013-01-07 2016-08-16 Micron Technology, Inc. Power management
US9123445B2 (en) 2013-01-22 2015-09-01 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US11249652B1 (en) 2013-01-28 2022-02-15 Radian Memory Systems, Inc. Maintenance of nonvolatile memory on host selected namespaces by a common memory controller
US10642505B1 (en) 2013-01-28 2020-05-05 Radian Memory Systems, Inc. Techniques for data migration based on per-data metrics and memory degradation
US9229854B1 (en) 2013-01-28 2016-01-05 Radian Memory Systems, LLC Multi-array operation support and related devices, systems and software
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US20140223086A1 (en) * 2013-02-06 2014-08-07 Curiositate, Inc. Rapid reading from memory devices
CN103970669A (zh) 2013-02-06 2014-08-06 Lsi公司 用于加速在固态设备中的回收操作的物理到逻辑地址映射
US9552288B2 (en) 2013-02-08 2017-01-24 Seagate Technology Llc Multi-tiered memory with different metadata levels
US9081666B2 (en) 2013-02-15 2015-07-14 Seagate Technology Llc Non-volatile memory channel control using a general purpose programmable processor in combination with a low level programmable sequencer
US9292451B2 (en) 2013-02-19 2016-03-22 Qualcomm Incorporated Methods and apparatus for intra-set wear-leveling for memories with limited write endurance
US9214965B2 (en) 2013-02-20 2015-12-15 Sandisk Enterprise Ip Llc Method and system for improving data integrity in non-volatile storage
US9329928B2 (en) 2013-02-20 2016-05-03 Sandisk Enterprise IP LLC. Bandwidth optimization in a non-volatile memory system
US9286936B1 (en) * 2013-02-21 2016-03-15 Seagate Technology Llc Zone based band mapping
US9348743B2 (en) * 2013-02-21 2016-05-24 Qualcomm Incorporated Inter-set wear-leveling for caches with limited write endurance
US9183137B2 (en) 2013-02-27 2015-11-10 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9813080B1 (en) 2013-03-05 2017-11-07 Microsemi Solutions (U.S.), Inc. Layer specific LDPC decoder
US10230396B1 (en) 2013-03-05 2019-03-12 Microsemi Solutions (Us), Inc. Method and apparatus for layer-specific LDPC decoding
EP3333853A1 (en) * 2013-03-07 2018-06-13 Charles I. Peddle High speed flash controllers
US9470720B2 (en) 2013-03-08 2016-10-18 Sandisk Technologies Llc Test system with localized heating and method of manufacture thereof
US9423457B2 (en) 2013-03-14 2016-08-23 Bitmicro Networks, Inc. Self-test solution for delay locked loops
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9069695B2 (en) 2013-03-14 2015-06-30 Apple Inc. Correction of block errors for a system having non-volatile memory
US9875205B1 (en) 2013-03-15 2018-01-23 Bitmicro Networks, Inc. Network of memory systems
US9430386B2 (en) 2013-03-15 2016-08-30 Bitmicro Networks, Inc. Multi-leveled cache management in a hybrid storage system
US10073626B2 (en) 2013-03-15 2018-09-11 Virident Systems, Llc Managing the write performance of an asymmetric memory system
US9021188B1 (en) 2013-03-15 2015-04-28 Virident Systems Inc. Small block write operations in non-volatile memory systems
US9501436B1 (en) 2013-03-15 2016-11-22 Bitmicro Networks, Inc. Multi-level message passing descriptor
US9720603B1 (en) 2013-03-15 2017-08-01 Bitmicro Networks, Inc. IOC to IOC distributed caching architecture
US9135164B2 (en) 2013-03-15 2015-09-15 Virident Systems Inc. Synchronous mirroring in non-volatile memory systems
US10489318B1 (en) * 2013-03-15 2019-11-26 Bitmicro Networks, Inc. Scatter-gather approach for parallel data transfer in a mass storage system
US9009576B1 (en) 2013-03-15 2015-04-14 Sandisk Enterprise Ip Llc Adaptive LLR based on syndrome weight
US9136877B1 (en) 2013-03-15 2015-09-15 Sandisk Enterprise Ip Llc Syndrome layered decoding for LDPC codes
US9916213B1 (en) 2013-03-15 2018-03-13 Bitmicro Networks, Inc. Bus arbitration with routing and failover mechanism
US9672178B1 (en) 2013-03-15 2017-06-06 Bitmicro Networks, Inc. Bit-mapped DMA transfer with dependency table configured to monitor status so that a processor is not rendered as a bottleneck in a system
US10120694B2 (en) 2013-03-15 2018-11-06 Bitmicro Networks, Inc. Embedded system boot from a storage device
US9092350B1 (en) 2013-03-15 2015-07-28 Sandisk Enterprise Ip Llc Detection and handling of unbalanced errors in interleaved codewords
US9971524B1 (en) * 2013-03-15 2018-05-15 Bitmicro Networks, Inc. Scatter-gather approach for parallel data transfer in a mass storage system
US9734067B1 (en) 2013-03-15 2017-08-15 Bitmicro Networks, Inc. Write buffering
US9798688B1 (en) 2013-03-15 2017-10-24 Bitmicro Networks, Inc. Bus arbitration with routing and failover mechanism
US9400617B2 (en) 2013-03-15 2016-07-26 Bitmicro Networks, Inc. Hardware-assisted DMA transfer with dependency table configured to permit-in parallel-data drain from cache without processor intervention when filled or drained
US9244763B1 (en) 2013-03-15 2016-01-26 Sandisk Enterprise Ip Llc System and method for updating a reading threshold voltage based on symbol transition information
US9092310B2 (en) 2013-03-15 2015-07-28 Seagate Technology Llc Host command based read disturb methodology
US8966164B1 (en) * 2013-09-27 2015-02-24 Avalanche Technology, Inc. Storage processor managing NVME logically addressed solid state disk array
US9842024B1 (en) 2013-03-15 2017-12-12 Bitmicro Networks, Inc. Flash electronic disk with RAID controller
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
US9934045B1 (en) 2013-03-15 2018-04-03 Bitmicro Networks, Inc. Embedded system boot from a storage device
US9236886B1 (en) 2013-03-15 2016-01-12 Sandisk Enterprise Ip Llc Universal and reconfigurable QC-LDPC encoder
US9043780B2 (en) 2013-03-27 2015-05-26 SMART Storage Systems, Inc. Electronic system with system modification control mechanism and method of operation thereof
US10049037B2 (en) 2013-04-05 2018-08-14 Sandisk Enterprise Ip Llc Data management in a storage system
US9170941B2 (en) 2013-04-05 2015-10-27 Sandisk Enterprises IP LLC Data hardening in a storage system
US9543025B2 (en) 2013-04-11 2017-01-10 Sandisk Technologies Llc Storage control system with power-off time estimation mechanism and method of operation thereof
US10546648B2 (en) 2013-04-12 2020-01-28 Sandisk Technologies Llc Storage control system with data management mechanism and method of operation thereof
US9558108B2 (en) * 2013-04-15 2017-01-31 Macronix International Co., Ltd. Half block management for flash storage devices
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management
US10102144B2 (en) * 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
CN103226526A (zh) * 2013-04-19 2013-07-31 无锡云动科技发展有限公司 一种存储器访问控制装置
US20140328127A1 (en) * 2013-05-02 2014-11-06 Skymedi Corporation Method of Managing Non-Volatile Memory and Non-Volatile Storage Device Using the Same
CN104133774A (zh) * 2013-05-02 2014-11-05 擎泰科技股份有限公司 管理非易失性存储器的方法及其非易失性存储装置
US9632926B1 (en) 2013-05-16 2017-04-25 Western Digital Technologies, Inc. Memory unit assignment and selection for internal memory operations in data storage systems
TWI548990B (zh) * 2013-05-17 2016-09-11 宇瞻科技股份有限公司 記憶體儲存裝置及其還原方法與記憶體控制器
US9324389B2 (en) 2013-05-29 2016-04-26 Sandisk Technologies Inc. High performance system topology for NAND memory systems
CN105122227B (zh) * 2013-05-29 2018-10-23 桑迪士克科技有限责任公司 用于nand存储器系统的高性能系统拓补
US9728526B2 (en) * 2013-05-29 2017-08-08 Sandisk Technologies Llc Packaging of high performance system topology for NAND memory systems
US10019203B1 (en) * 2013-05-30 2018-07-10 Cavium, Inc. Method and system for processing write requests
US9159437B2 (en) 2013-06-11 2015-10-13 Sandisk Enterprise IP LLC. Device and method for resolving an LM flag issue
US9898056B2 (en) 2013-06-19 2018-02-20 Sandisk Technologies Llc Electronic assembly with thermal channel and method of manufacture thereof
US9313874B2 (en) 2013-06-19 2016-04-12 SMART Storage Systems, Inc. Electronic system with heat extraction and method of manufacture thereof
US9244519B1 (en) 2013-06-25 2016-01-26 Smart Storage Systems. Inc. Storage system with data transfer rate adjustment for power throttling
US9367353B1 (en) 2013-06-25 2016-06-14 Sandisk Technologies Inc. Storage control system with power throttling mechanism and method of operation thereof
US9280463B2 (en) 2013-07-25 2016-03-08 Globalfoundries Inc. Semiconductor memory garbage collection
US9384126B1 (en) 2013-07-25 2016-07-05 Sandisk Technologies Inc. Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems
US9043517B1 (en) 2013-07-25 2015-05-26 Sandisk Enterprise Ip Llc Multipass programming in buffers implemented in non-volatile data storage systems
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9141176B1 (en) 2013-07-29 2015-09-22 Western Digital Technologies, Inc. Power management for data storage device
US9146850B2 (en) 2013-08-01 2015-09-29 SMART Storage Systems, Inc. Data storage system with dynamic read threshold mechanism and method of operation thereof
US9431113B2 (en) 2013-08-07 2016-08-30 Sandisk Technologies Llc Data storage system with dynamic erase block grouping mechanism and method of operation thereof
US9361222B2 (en) 2013-08-07 2016-06-07 SMART Storage Systems, Inc. Electronic system with storage drive life estimation mechanism and method of operation thereof
US9448946B2 (en) 2013-08-07 2016-09-20 Sandisk Technologies Llc Data storage system with stale data mechanism and method of operation thereof
US9880926B1 (en) * 2013-08-20 2018-01-30 Seagate Technology Llc Log structured reserved zone for a data storage device
US9361221B1 (en) 2013-08-26 2016-06-07 Sandisk Technologies Inc. Write amplification reduction through reliable writes during garbage collection
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9070379B2 (en) 2013-08-28 2015-06-30 Western Digital Technologies, Inc. Data migration for data storage device
US9442670B2 (en) 2013-09-03 2016-09-13 Sandisk Technologies Llc Method and system for rebalancing data stored in flash memory devices
US9519577B2 (en) 2013-09-03 2016-12-13 Sandisk Technologies Llc Method and system for migrating data between flash memory devices
US9304709B2 (en) * 2013-09-06 2016-04-05 Western Digital Technologies, Inc. High performance system providing selective merging of dataframe segments in hardware
US20150074332A1 (en) * 2013-09-10 2015-03-12 Kabushiki Kaisha Toshiba Memory controller and memory system
US9292379B2 (en) * 2013-09-28 2016-03-22 Intel Corporation Apparatus and method to manage high capacity storage devices
US9158349B2 (en) 2013-10-04 2015-10-13 Sandisk Enterprise Ip Llc System and method for heat dissipation
US9323637B2 (en) 2013-10-07 2016-04-26 Sandisk Enterprise Ip Llc Power sequencing and data hardening architecture
US9298608B2 (en) 2013-10-18 2016-03-29 Sandisk Enterprise Ip Llc Biasing for wear leveling in storage systems
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US8917471B1 (en) 2013-10-29 2014-12-23 Western Digital Technologies, Inc. Power management for data storage device
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9263156B2 (en) 2013-11-07 2016-02-16 Sandisk Enterprise Ip Llc System and method for adjusting trip points within a storage device
US9244785B2 (en) 2013-11-13 2016-01-26 Sandisk Enterprise Ip Llc Simulated power failure and data hardening
KR102146037B1 (ko) 2013-11-14 2020-08-19 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 동작 방법
US9152555B2 (en) 2013-11-15 2015-10-06 Sandisk Enterprise IP LLC. Data management with modular erase in a data storage system
US9286959B2 (en) * 2013-11-18 2016-03-15 International Business Machines Corporation Low latency memory access control for non-volatile memories
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
KR102114112B1 (ko) 2013-11-19 2020-05-22 에스케이하이닉스 주식회사 데이터 저장 장치
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9280429B2 (en) 2013-11-27 2016-03-08 Sandisk Enterprise Ip Llc Power fail latching based on monitoring multiple power supply voltages in a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
KR20150061393A (ko) * 2013-11-27 2015-06-04 삼성전자주식회사 메모리 장치로부터 읽은 데이터를 고속으로 전송하는 메모리 컨트롤러 및 그것의 데이터 전송 방법.
US9122636B2 (en) 2013-11-27 2015-09-01 Sandisk Enterprise Ip Llc Hard power fail architecture
GB201321148D0 (en) * 2013-11-29 2014-01-15 Bridgeworks Ltd Data transfer
US9250676B2 (en) 2013-11-29 2016-02-02 Sandisk Enterprise Ip Llc Power failure architecture and verification
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9092370B2 (en) 2013-12-03 2015-07-28 Sandisk Enterprise Ip Llc Power failure tolerant cryptographic erase
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
CA2934280C (en) * 2013-12-16 2020-08-25 Mx Technologies, Inc. Long string pattern matching of aggregated account data
US9129665B2 (en) 2013-12-17 2015-09-08 Sandisk Enterprise Ip Llc Dynamic brownout adjustment in a storage device
US9703702B2 (en) * 2013-12-23 2017-07-11 Sandisk Technologies Llc Addressing auto address assignment and auto-routing in NAND memory network
US20150186257A1 (en) * 2013-12-26 2015-07-02 Anand S. Ramalingam Managing a transfer buffer for a non-volatile memory
US9542278B2 (en) 2013-12-26 2017-01-10 Silicon Motion, Inc. Data storage device and flash memory control method
KR102166924B1 (ko) * 2013-12-26 2020-10-16 삼성전자주식회사 저장 장치의 구동 방법
TWI467578B (zh) * 2014-01-09 2015-01-01 Phison Electronics Corp 錯誤處理方法、記憶體儲存裝置與記憶體控制電路單元
US20150205541A1 (en) * 2014-01-20 2015-07-23 Samya Systems, Inc. High-capacity solid state disk drives
WO2015116141A1 (en) * 2014-01-31 2015-08-06 Hewlett-Packard Development Company, L.P. Identifying memory regions that contain remapped memory locations
US10521387B2 (en) 2014-02-07 2019-12-31 Toshiba Memory Corporation NAND switch
US9549457B2 (en) 2014-02-12 2017-01-17 Sandisk Technologies Llc System and method for redirecting airflow across an electronic assembly
US9542344B2 (en) 2014-02-19 2017-01-10 Sandisk Technologies Llc Datapath management in a memory controller
US9933980B2 (en) * 2014-02-24 2018-04-03 Toshiba Memory Corporation NAND raid controller for connection between an SSD controller and multiple non-volatile storage units
US9497889B2 (en) 2014-02-27 2016-11-15 Sandisk Technologies Llc Heat dissipation for substrate assemblies
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US20150261631A1 (en) * 2014-03-12 2015-09-17 Kabushiki Kaisha Toshiba Memory system and memory controller
KR20150106778A (ko) 2014-03-12 2015-09-22 삼성전자주식회사 메모리 시스템 및 메모리 시스템의 제어 방법
US9519319B2 (en) 2014-03-14 2016-12-13 Sandisk Technologies Llc Self-supporting thermal tube structure for electronic assemblies
KR102233808B1 (ko) 2014-03-14 2021-03-30 삼성전자주식회사 저장 장치 및 그것의 테이블 관리 방법
US9485851B2 (en) 2014-03-14 2016-11-01 Sandisk Technologies Llc Thermal tube assembly structures
US9348377B2 (en) 2014-03-14 2016-05-24 Sandisk Enterprise Ip Llc Thermal isolation techniques
KR102222463B1 (ko) 2014-03-14 2021-03-03 삼성전자주식회사 저장 장치 및 그것의 타이머 설정 방법 및 구동 방법들
US9230689B2 (en) 2014-03-17 2016-01-05 Sandisk Technologies Inc. Finding read disturbs on non-volatile memories
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
JP2015197859A (ja) * 2014-04-02 2015-11-09 株式会社東芝 メモリコントローラ、半導体記憶装置、およびメモリコントローラの制御方法
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US10042792B1 (en) 2014-04-17 2018-08-07 Bitmicro Networks, Inc. Method for transferring and receiving frames across PCI express bus for SSD device
US9952991B1 (en) 2014-04-17 2018-04-24 Bitmicro Networks, Inc. Systematic method on queuing of descriptors for multiple flash intelligent DMA engine operation
US10025736B1 (en) 2014-04-17 2018-07-17 Bitmicro Networks, Inc. Exchange message protocol message transmission between two devices
US9811461B1 (en) 2014-04-17 2017-11-07 Bitmicro Networks, Inc. Data storage system
US10078604B1 (en) 2014-04-17 2018-09-18 Bitmicro Networks, Inc. Interrupt coalescing
US10055150B1 (en) 2014-04-17 2018-08-21 Bitmicro Networks, Inc. Writing volatile scattered memory metadata to flash device
US9911477B1 (en) * 2014-04-18 2018-03-06 Altera Corporation Memory controller architecture with improved memory scheduling efficiency
KR102149768B1 (ko) 2014-04-29 2020-08-31 삼성전자주식회사 불휘발성 메모리 시스템
US9323607B2 (en) 2014-04-29 2016-04-26 Seagate Technology Llc Data recovery once ECC fails to correct the data
US9214198B2 (en) 2014-04-30 2015-12-15 Sandisk Enterprise Ip Llc Continuous capacitor health monitoring and power supply system
KR20150127914A (ko) * 2014-05-07 2015-11-18 에스케이하이닉스 주식회사 복수의 프로세서들을 포함하는 반도체 장치 및 그것의 동작 방법
US9465537B2 (en) 2014-05-16 2016-10-11 Kabushiki Kaisha Toshiba Memory system and method of controlling memory system
US9286056B2 (en) 2014-05-19 2016-03-15 International Business Machines Corporation Reducing storage facility code load suspend rate by redundancy check
US9710173B2 (en) * 2014-05-20 2017-07-18 Micron Technology, Inc. Read cache memory with DRAM class promotion
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US9645749B2 (en) 2014-05-30 2017-05-09 Sandisk Technologies Llc Method and system for recharacterizing the storage density of a memory device or a portion thereof
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US9093160B1 (en) 2014-05-30 2015-07-28 Sandisk Technologies Inc. Methods and systems for staggered memory operations
US9070481B1 (en) 2014-05-30 2015-06-30 Sandisk Technologies Inc. Internal current measurement for age measurements
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US8891303B1 (en) 2014-05-30 2014-11-18 Sandisk Technologies Inc. Method and system for dynamic word line based configuration of a three-dimensional memory device
US9696920B2 (en) * 2014-06-02 2017-07-04 Micron Technology, Inc. Systems and methods for improving efficiencies of a memory system
CN105224546B (zh) * 2014-06-04 2020-10-30 创新先进技术有限公司 数据存储和查询方法及设备
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
WO2015194005A1 (ja) 2014-06-19 2015-12-23 株式会社日立製作所 ストレージ装置およびインタフェース装置
KR102292172B1 (ko) 2014-06-23 2021-08-25 삼성전자주식회사 불휘발성 메모리 장치 및 메모리 컨트롤러의 동작 방법
US9823863B1 (en) * 2014-06-30 2017-11-21 Sk Hynix Memory Solutions Inc. Sub-blocks and meta pages for mapping table rebuild
US9348518B2 (en) 2014-07-02 2016-05-24 International Business Machines Corporation Buffered automated flash controller connected directly to processor memory bus
US9836245B2 (en) * 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
KR20160005264A (ko) 2014-07-04 2016-01-14 삼성전자주식회사 저장 장치 및 그것의 읽기 방법들
US9652415B2 (en) * 2014-07-09 2017-05-16 Sandisk Technologies Llc Atomic non-volatile memory data transfer
US9904621B2 (en) 2014-07-15 2018-02-27 Sandisk Technologies Llc Methods and systems for flash buffer sizing
US9846661B2 (en) * 2014-07-17 2017-12-19 Empire Technology Development Llc Utilization of solid state memory devices
US9645744B2 (en) 2014-07-22 2017-05-09 Sandisk Technologies Llc Suspending and resuming non-volatile memory operations
US9542284B2 (en) 2014-08-06 2017-01-10 International Business Machines Corporation Buffered automated flash controller connected directly to processor memory bus
US10002043B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
KR102282006B1 (ko) 2014-08-19 2021-07-28 삼성전자주식회사 컴퓨터 장치 및 저장 장치
US10002044B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
WO2016032784A1 (en) 2014-08-25 2016-03-03 Rambus Inc. Buffer circuit with adaptive repair capability
US9378149B1 (en) 2014-08-29 2016-06-28 Emc Corporation Method and system for tracking modification times of data in a storage system
US10474618B2 (en) 2014-09-04 2019-11-12 Western Digital Technologies, Inc. Debug data saving in host memory on PCIE solid state drive
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US9891837B2 (en) * 2014-09-08 2018-02-13 Toshiba Memory Corporation Memory system
US9542118B1 (en) 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US10552085B1 (en) 2014-09-09 2020-02-04 Radian Memory Systems, Inc. Techniques for directed data migration
US9436397B2 (en) 2014-09-23 2016-09-06 Sandisk Technologies Llc. Validating the status of memory operations
US9690823B2 (en) 2014-09-25 2017-06-27 Dropbox, Inc. Synchronizing copies of an extent in an append-only storage system
US9720607B2 (en) * 2014-09-25 2017-08-01 Dropbox, Inc. Append-only storage system supporting open and closed extents
US9772783B2 (en) 2014-09-25 2017-09-26 Dropbox, Inc. Constructing an index to facilitate accessing a closed extent in an append-only storage system
US9582201B2 (en) 2014-09-26 2017-02-28 Western Digital Technologies, Inc. Multi-tier scheme for logical storage management
US9658923B2 (en) 2014-09-30 2017-05-23 International Business Machines Corporation Optimization of rebuilding in solid state drives
US9626286B2 (en) * 2014-10-03 2017-04-18 Sandisk Technologies Llc Hardware and firmware paths for performing memory read processes
US9665451B2 (en) 2014-10-07 2017-05-30 Sandisk Technologies Llc Method and device for distributing holdup energy to memory arrays
US9336136B2 (en) * 2014-10-08 2016-05-10 HGST Netherlands B.V. Apparatus, systems, and methods for providing wear leveling in solid state devices
US9672094B1 (en) * 2014-10-24 2017-06-06 Xilinx, Inc. Interconnect circuitry fault detection
US9952978B2 (en) 2014-10-27 2018-04-24 Sandisk Technologies, Llc Method for improving mixed random performance in low queue depth workloads
US9558125B2 (en) 2014-10-27 2017-01-31 Sandisk Technologies Llc Processing of un-map commands to enhance performance and endurance of a storage device
US9753649B2 (en) 2014-10-27 2017-09-05 Sandisk Technologies Llc Tracking intermix of writes and un-map commands across power cycles
KR102358053B1 (ko) 2014-10-28 2022-02-04 삼성전자주식회사 복수의 불휘발성 메모리 칩들을 포함하는 스토리지 장치
KR20160051367A (ko) * 2014-11-03 2016-05-11 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
US9684606B2 (en) * 2014-11-14 2017-06-20 Cavium, Inc. Translation lookaside buffer invalidation suppression
KR102255216B1 (ko) 2014-11-20 2021-05-24 삼성전자주식회사 Pci 장치와 이를 포함하는 pci 시스템
US9824007B2 (en) 2014-11-21 2017-11-21 Sandisk Technologies Llc Data integrity enhancement to protect against returning old versions of data
US9817752B2 (en) 2014-11-21 2017-11-14 Sandisk Technologies Llc Data integrity enhancement to protect against returning old versions of data
US9678864B2 (en) * 2014-12-03 2017-06-13 Seagate Technology Llc Data reallocation upon detection of errors
US9697074B2 (en) * 2014-12-11 2017-07-04 Internatioanl Business Machines Corporation Non-local error detection in processor systems
US10223028B2 (en) 2014-12-22 2019-03-05 Sandisk Technologies Llc Failed bit count memory analytics
US10474569B2 (en) * 2014-12-29 2019-11-12 Toshiba Memory Corporation Information processing device including nonvolatile cache memory and processor
US9772939B2 (en) 2015-01-05 2017-09-26 International Business Machines Corporation Heat-based key-value slot organization for flash-optimized data placement in multi-tiered storage systems
KR102355436B1 (ko) * 2015-01-09 2022-01-26 에스케이하이닉스 주식회사 데이터 저장 장치
US10061743B2 (en) 2015-01-27 2018-08-28 International Business Machines Corporation Host based non-volatile memory clustering using network mapped storage
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US11551735B2 (en) * 2015-03-11 2023-01-10 Rambus, Inc. High performance, non-volatile memory module
US10073714B2 (en) * 2015-03-11 2018-09-11 Western Digital Technologies, Inc. Task queues
US9647697B2 (en) 2015-03-16 2017-05-09 Sandisk Technologies Llc Method and system for determining soft information offsets
US10007451B2 (en) * 2015-03-20 2018-06-26 SK Hynix Inc. Scalable SPOR algorithm for flash memories
US10318375B2 (en) * 2015-03-20 2019-06-11 Burlywood, LLC Configurable multi-level error correction in a storage controller
US9946644B2 (en) * 2015-03-25 2018-04-17 SK Hynix Inc. Memory system and operating method thereof
US10180805B2 (en) * 2015-03-25 2019-01-15 SK Hynix Inc. Memory system and operating method thereof
US10102146B2 (en) * 2015-03-26 2018-10-16 SK Hynix Inc. Memory system and operating method for improving rebuild efficiency
US9997251B2 (en) 2015-03-26 2018-06-12 Burlywood, LLC Medium defect management method for storage systems requiring an integrated controller
US9811420B2 (en) * 2015-03-27 2017-11-07 Intel Corporation Extracting selective information from on-die dynamic random access memory (DRAM) error correction code (ECC)
US9496018B2 (en) * 2015-04-01 2016-11-15 International Business Machines Corporation Nonvolatile memory interface for metadata shadowing
CN106155926B (zh) * 2015-04-09 2019-11-26 澜起科技股份有限公司 存储器及存储器的数据交互方法
US9645765B2 (en) 2015-04-09 2017-05-09 Sandisk Technologies Llc Reading and writing data at multiple, individual non-volatile memory portions in response to data transfer sent to single relative memory address
US9864545B2 (en) 2015-04-14 2018-01-09 Sandisk Technologies Llc Open erase block read automation
US9753653B2 (en) 2015-04-14 2017-09-05 Sandisk Technologies Llc High-priority NAND operations management
US10635328B2 (en) * 2015-04-17 2020-04-28 Johann George Digitally transferring content across media without reproduction
US10372529B2 (en) 2015-04-20 2019-08-06 Sandisk Technologies Llc Iterative soft information correction and decoding
US9778878B2 (en) 2015-04-22 2017-10-03 Sandisk Technologies Llc Method and system for limiting write command execution
KR102298661B1 (ko) 2015-04-30 2021-09-07 삼성전자주식회사 저장 장치 및 그것의 초기화 방법
US10332613B1 (en) 2015-05-18 2019-06-25 Microsemi Solutions (Us), Inc. Nonvolatile memory system with retention monitor
US10289327B2 (en) 2015-06-05 2019-05-14 Western Digital Technologies, Inc. Scheduling scheme(s) for a multi-die storage device
US9875053B2 (en) 2015-06-05 2018-01-23 Western Digital Technologies, Inc. Scheduling scheme(s) for a multi-die storage device
CN106250050B (zh) * 2015-06-10 2021-02-05 恩智浦美国有限公司 用于数据传输中的实时空白页检测的方法和装置
TWI563509B (en) * 2015-07-07 2016-12-21 Phison Electronics Corp Wear leveling method, memory storage device and memory control circuit unit
US9870149B2 (en) 2015-07-08 2018-01-16 Sandisk Technologies Llc Scheduling operations in non-volatile memory devices using preference values
US10078448B2 (en) 2015-07-08 2018-09-18 Samsung Electronics Co., Ltd. Electronic devices and memory management methods thereof
US9916091B2 (en) 2015-07-13 2018-03-13 Samsung Electronics Co., Ltd. Memory system architecture
US10552058B1 (en) 2015-07-17 2020-02-04 Radian Memory Systems, Inc. Techniques for delegating data processing to a cooperative memory controller
US9799405B1 (en) 2015-07-29 2017-10-24 Ip Gem Group, Llc Nonvolatile memory system with read circuit for performing reads using threshold voltage shift read instruction
US9715939B2 (en) 2015-08-10 2017-07-25 Sandisk Technologies Llc Low read data storage management
US10665305B2 (en) * 2015-09-09 2020-05-26 Toshiba Memory Corporation Host device connectable to memory device performing patrol read and memory device performing patrol read
CN105183387A (zh) * 2015-09-14 2015-12-23 联想(北京)有限公司 一种控制方法及控制器、存储设备
US9703501B2 (en) * 2015-09-30 2017-07-11 International Business Machines Corporation Virtual storage instrumentation for real time analytics
CN106569727B (zh) * 2015-10-08 2019-04-16 福州瑞芯微电子股份有限公司 一种多控制器间多存储器共享并行数据读写装置及其写入、读取方法
DE102015219844A1 (de) * 2015-10-13 2017-04-13 Robert Bosch Gmbh Verfahren und Vorrichtung zum verzögerungsfreien Betreiben eines Steuergerätes
US10303536B2 (en) * 2015-10-28 2019-05-28 Via Technologies, Inc. Non-volatile memory device and control method thereof
US10452596B2 (en) * 2015-10-29 2019-10-22 Micron Technology, Inc. Memory cells configured in multiple configuration modes
US9778855B2 (en) 2015-10-30 2017-10-03 Sandisk Technologies Llc System and method for precision interleaving of data writes in a non-volatile memory
US10042553B2 (en) 2015-10-30 2018-08-07 Sandisk Technologies Llc Method and system for programming a multi-layer non-volatile memory having a single fold data path
US10120613B2 (en) 2015-10-30 2018-11-06 Sandisk Technologies Llc System and method for rescheduling host and maintenance operations in a non-volatile memory
US10133490B2 (en) 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US9996262B1 (en) * 2015-11-09 2018-06-12 Seagate Technology Llc Method and apparatus to abort a command
US10228990B2 (en) 2015-11-12 2019-03-12 Sandisk Technologies Llc Variable-term error metrics adjustment
TWI578222B (zh) * 2015-11-18 2017-04-11 慧榮科技股份有限公司 資料儲存裝置及其資料維護方法
KR102406267B1 (ko) * 2015-11-19 2022-06-08 삼성전자주식회사 불휘발성 메모리 모듈 및 이를 포함하는 전자 장치
CN108701488A (zh) 2015-12-01 2018-10-23 科内克斯实验室公司 用于在逻辑上去除非易失性存储器存储设备中的缺陷页的方法和装置
US9898215B2 (en) 2015-12-07 2018-02-20 International Business Machines Corporation Efficient management of page retirement in non-volatile memory utilizing page retirement classes
US9886214B2 (en) 2015-12-11 2018-02-06 Ip Gem Group, Llc Nonvolatile memory system with erase suspend circuit and method for erase suspend management
US10126970B2 (en) 2015-12-11 2018-11-13 Sandisk Technologies Llc Paired metablocks in non-volatile storage device
JP6414853B2 (ja) 2015-12-14 2018-10-31 東芝メモリ株式会社 メモリシステムおよび制御方法
US9892794B2 (en) 2016-01-04 2018-02-13 Ip Gem Group, Llc Method and apparatus with program suspend using test mode
US9837146B2 (en) 2016-01-08 2017-12-05 Sandisk Technologies Llc Memory system temperature management
US10169144B2 (en) * 2016-01-15 2019-01-01 Micron Technology, Inc. Non-volatile memory including selective error correction
US9899092B2 (en) 2016-01-27 2018-02-20 Ip Gem Group, Llc Nonvolatile memory system with program step manager and method for program step management
US10255955B2 (en) 2016-02-09 2019-04-09 Samsung Electronics Co., Ltd. Multi-port memory device and a method of using the same
CN107102814B (zh) * 2016-02-19 2020-03-17 群联电子股份有限公司 存储器管理方法、存储器控制电路单元与存储器存储装置
KR20170099018A (ko) * 2016-02-22 2017-08-31 에스케이하이닉스 주식회사 메모리 시스템 및 그의 동작방법
US10732856B2 (en) 2016-03-03 2020-08-04 Sandisk Technologies Llc Erase health metric to rank memory portions
KR102485397B1 (ko) * 2016-03-17 2023-01-06 에스케이하이닉스 주식회사 메모리 시스템 및 그 동작 방법
CN107273041A (zh) * 2016-04-07 2017-10-20 株式会社东芝 存储装置以及该装置中的数据保存方法
KR102570367B1 (ko) 2016-04-21 2023-08-28 삼성전자주식회사 불휘발성 메모리 장치 및 컨트롤러를 포함하는 스토리지 장치를 액세스하는 액세스 방법
US9898208B2 (en) * 2016-04-27 2018-02-20 Datadirect Networks, Inc. Storage system with hybrid logical volumes utilizing in-band hinting
US10402314B2 (en) 2016-05-16 2019-09-03 SK Hynix Inc. Self-management memory system and operating method thereof
FR3051574A1 (fr) * 2016-05-20 2017-11-24 Proton World Int Nv Gestion du stockage dans une memoire flash
US20170344262A1 (en) * 2016-05-25 2017-11-30 SK Hynix Inc. Data processing system and method for operating the same
CN106020735A (zh) * 2016-05-31 2016-10-12 晨星半导体股份有限公司 一种数据存储方法及数据存储装置
DE102016211386A1 (de) * 2016-06-14 2017-12-14 Robert Bosch Gmbh Verfahren zum Betreiben einer Recheneinheit
US10496289B2 (en) * 2016-06-16 2019-12-03 Nuvoton Technology Corporation System and methods for increasing useful lifetime of a flash memory device
US9934151B2 (en) 2016-06-28 2018-04-03 Dell Products, Lp System and method for dynamic optimization for burst and sustained performance in solid state drives
US10055351B1 (en) 2016-06-29 2018-08-21 EMC IP Holding Company LLC Low-overhead index for a flash cache
US10331561B1 (en) 2016-06-29 2019-06-25 Emc Corporation Systems and methods for rebuilding a cache index
US10089025B1 (en) * 2016-06-29 2018-10-02 EMC IP Holding Company LLC Bloom filters in a flash memory
US10146438B1 (en) 2016-06-29 2018-12-04 EMC IP Holding Company LLC Additive library for data structures in a flash memory
US10037164B1 (en) 2016-06-29 2018-07-31 EMC IP Holding Company LLC Flash interface for processing datasets
US10261704B1 (en) 2016-06-29 2019-04-16 EMC IP Holding Company LLC Linked lists in flash memory
KR102653401B1 (ko) * 2016-07-18 2024-04-03 에스케이하이닉스 주식회사 메모리 시스템 및 그의 동작방법
US10481830B2 (en) 2016-07-25 2019-11-19 Sandisk Technologies Llc Selectively throttling host reads for read disturbs in non-volatile memory system
US10291263B2 (en) 2016-07-28 2019-05-14 Ip Gem Group, Llc Auto-learning log likelihood ratio
US10157677B2 (en) 2016-07-28 2018-12-18 Ip Gem Group, Llc Background reference positioning and local reference positioning using threshold voltage shift read
US10236915B2 (en) 2016-07-29 2019-03-19 Microsemi Solutions (U.S.), Inc. Variable T BCH encoding
US10496484B2 (en) 2016-08-05 2019-12-03 Sandisk Technologies Llc Methods and apparatus for error detection for data storage devices
KR102554416B1 (ko) 2016-08-16 2023-07-11 삼성전자주식회사 메모리 장치의 내부 상태 출력 장치 및 이를 적용하는 메모리 시스템
KR102558947B1 (ko) * 2016-08-25 2023-07-25 에스케이하이닉스 주식회사 데이터 저장 장치
KR102621467B1 (ko) * 2016-09-05 2024-01-05 삼성전자주식회사 비휘발성 메모리 장치 및 비휘발성 메모리 장치의 온도 조절 방법
FR3055992A1 (fr) 2016-09-09 2018-03-16 Proton World International N.V. Gestion d'index dans une memoire flash
US10169152B2 (en) * 2016-09-12 2019-01-01 International Business Machines Corporation Resilient data storage and retrieval
CN107025066A (zh) 2016-09-14 2017-08-08 阿里巴巴集团控股有限公司 在基于闪存的存储介质中写入存储数据的方法和装置
KR102585214B1 (ko) 2016-09-22 2023-10-05 삼성전자주식회사 가변 소거 유닛 크기를 가지는 스토리지 디바이스 및 이를 포함하는 레이드 스토리지 시스템
US10162522B1 (en) * 2016-09-30 2018-12-25 Cadence Design Systems, Inc. Architecture of single channel memory controller to support high bandwidth memory of pseudo channel mode or legacy mode
KR20180055296A (ko) * 2016-11-16 2018-05-25 삼성전자주식회사 컴퓨터 시스템, 및 컴퓨터 시스템의 동작 방법
KR20180058894A (ko) * 2016-11-24 2018-06-04 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20180064588A (ko) * 2016-12-05 2018-06-15 에스케이하이닉스 주식회사 메모리 제어 장치 및 방법
US10235069B2 (en) 2016-12-22 2019-03-19 Western Digital Technologies, Inc. Load balancing by dynamically transferring memory range assignments
US10360973B2 (en) * 2016-12-23 2019-07-23 Western Digital Technologies, Inc. Data mapping enabling fast read multi-level 3D NAND to improve lifetime capacity
US10380028B2 (en) 2016-12-30 2019-08-13 Western Digital Technologies, Inc. Recovery of validity data for a data storage system
US10628306B2 (en) 2017-02-01 2020-04-21 Microsoft Technology Licensing, Llc Garbage collector
US10572181B2 (en) 2017-02-01 2020-02-25 Microsoft Technology Licensing, Llc Multiple stage garbage collector
US11288017B2 (en) * 2017-02-23 2022-03-29 Smart IOPS, Inc. Devices, systems, and methods for storing data using distributed control
KR20190061942A (ko) * 2017-11-28 2019-06-05 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
TWI653533B (zh) 2017-03-07 2019-03-11 慧榮科技股份有限公司 資料儲存裝置以及其操作方法
US10078453B1 (en) * 2017-03-15 2018-09-18 Intel Corporation Storage system, computer program product, and method for managing a hybrid memory device system
US10613772B2 (en) 2017-03-16 2020-04-07 Qualcomm Incorporated Methods and apparatuses for copying a data page in an unmanaged flash memory device
US10552050B1 (en) 2017-04-07 2020-02-04 Bitmicro Llc Multi-dimensional computer storage system
TWI628542B (zh) * 2017-04-21 2018-07-01 慧榮科技股份有限公司 快閃記憶體的垃圾回收斷電回復方法以及使用該方法的裝置
US10360045B2 (en) * 2017-04-25 2019-07-23 Sandisk Technologies Llc Event-driven schemes for determining suspend/resume periods
US10402361B2 (en) * 2017-04-28 2019-09-03 Hitachi, Ltd. Storage system
US10635339B2 (en) 2017-05-02 2020-04-28 Smart Ipos, Inc. Devices, systems, and methods for reducing storage utilization with data deduplication
US10586043B2 (en) 2017-05-03 2020-03-10 Samsung Electronics Co., Ltd. System and method for detecting malicious software in NVME over fabrics devices
US10558567B1 (en) 2017-05-12 2020-02-11 Levyx, Inc. Storage device embedded strand architecture
EP3625686A4 (en) 2017-05-18 2021-02-24 The Silk Technologies Ilc Ltd. STORAGE CLEANING IN A DISTRIBUTED STORAGE SYSTEM
CN107229535B (zh) * 2017-05-23 2020-01-21 杭州宏杉科技股份有限公司 数据块的多副本存储方法、存储设备、数据读取方法
US10372353B2 (en) * 2017-05-31 2019-08-06 Micron Technology, Inc. Apparatuses and methods to control memory operations on buffers
US9928126B1 (en) 2017-06-01 2018-03-27 Apple Inc. Recovery from cross-temperature read failures by programming neighbor word lines
US10732896B2 (en) * 2017-06-12 2020-08-04 Western Digital Technologies, Inc. Method and system for reading data during control sync operations
US10521375B2 (en) * 2017-06-22 2019-12-31 Macronix International Co., Ltd. Controller for a memory system
US10564890B2 (en) * 2017-07-07 2020-02-18 Seagate Technology Llc Runt handling data storage system
KR102270103B1 (ko) * 2017-07-11 2021-06-28 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
TWI621018B (zh) * 2017-07-24 2018-04-11 大陸商深圳大心電子科技有限公司 資料備份方法、資料恢復方法以及儲存控制器
CN109324921A (zh) * 2017-07-31 2019-02-12 大心电子(英属维京群岛)股份有限公司 数据备份方法、数据恢复方法以及存储控制器
US10393803B2 (en) 2017-08-31 2019-08-27 Micron Technology, Inc. Memory loopback systems and methods
KR102430209B1 (ko) * 2017-09-07 2022-08-05 삼성전자주식회사 저장 장치 및 저장 장치에 포함된 컨트롤러들
FR3072476A1 (fr) 2017-10-13 2019-04-19 Proton World International N.V. Unite logique de memoire pour memoire flash
KR20190043863A (ko) * 2017-10-19 2019-04-29 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
KR102281966B1 (ko) * 2017-11-01 2021-07-26 삼성전자주식회사 데이터 스토리지 장치 및 그 동작 방법
CN108021516B (zh) * 2017-12-19 2020-12-25 联芸科技(杭州)有限公司 一种并行存储介质存储控制器的命令调度管理系统与方法
US10606692B2 (en) * 2017-12-20 2020-03-31 International Business Machines Corporation Error correction potency improvement via added burst beats in a dram access cycle
WO2019126793A2 (en) * 2017-12-22 2019-06-27 Alibaba Group Holding Limited A memory apparatus and method for controlling the same
CN108182154A (zh) * 2017-12-22 2018-06-19 深圳大普微电子科技有限公司 一种基于固态硬盘的日志文件的读写方法及固态硬盘
US10949113B2 (en) * 2018-01-10 2021-03-16 SK Hynix Inc. Retention aware block mapping in flash-based solid state drives
US10558576B2 (en) * 2018-01-22 2020-02-11 Western Digital Technologies, Inc. Storage device with rapid overlay access
CN108549584B (zh) * 2018-01-25 2020-11-27 北京奇艺世纪科技有限公司 一种服务端灰度降级方法和装置
US10475519B2 (en) * 2018-03-23 2019-11-12 Micron Technology, Inc. Methods for detecting and mitigating memory media degradation and memory devices employing the same
US10990294B2 (en) * 2018-03-26 2021-04-27 Western Digital Technologies, Inc. Non-volatile storage system with multi-read mode
US10777295B2 (en) * 2018-04-12 2020-09-15 Micron Technology, Inc. Defective memory unit screening in a memory system
CN108509652B (zh) * 2018-04-17 2021-01-22 山东大众益康网络科技有限公司 数据处理系统及方法
KR102620727B1 (ko) * 2018-04-18 2024-01-03 에스케이하이닉스 주식회사 전자 장치
US10733046B2 (en) * 2018-04-20 2020-08-04 Micron Technology, Inc. Transaction metadata
CN110413545B (zh) * 2018-04-28 2023-06-20 伊姆西Ip控股有限责任公司 存储管理方法、电子设备和计算机程序产品
US11003375B2 (en) 2018-05-15 2021-05-11 Micron Technology, Inc. Code word format and structure
US10831653B2 (en) * 2018-05-15 2020-11-10 Micron Technology, Inc. Forwarding code word address
US10740026B2 (en) * 2018-05-18 2020-08-11 Micron Technology, Inc. Time indicator of super block operations
US10534551B1 (en) * 2018-06-22 2020-01-14 Micron Technology, Inc. Managing write operations during a power loss
CN108919995A (zh) * 2018-06-27 2018-11-30 珠海市魅族科技有限公司 驱动控制方法、系统和电子设备
CN109002399B (zh) * 2018-07-09 2021-05-18 北京智芯微电子科技有限公司 嵌入式设备事件记录的方法
US11249919B2 (en) 2018-07-31 2022-02-15 SK Hynix Inc. Apparatus and method for managing meta data for engagement of plural memory system to store data
CN110781098B (zh) * 2018-07-31 2023-03-28 爱思开海力士有限公司 用于彼此接合多个存储器系统的设备和方法
US11157207B2 (en) 2018-07-31 2021-10-26 SK Hynix Inc. Apparatus and method for engaging plural memory system with each other to store data
WO2020028790A1 (en) * 2018-08-02 2020-02-06 Burlywood, Inc. Dynamic data paths in flash drives
US10725931B2 (en) 2018-08-22 2020-07-28 Western Digital Technologies, Inc. Logical and physical address field size reduction by alignment-constrained writing technique
US20200073595A1 (en) * 2018-09-02 2020-03-05 Silicon Motion Inc. Flash memory controller capable of improving IOPS performance and corresponding method
US11133076B2 (en) * 2018-09-06 2021-09-28 Pure Storage, Inc. Efficient relocation of data between storage devices of a storage system
CN111341367A (zh) * 2018-12-18 2020-06-26 深圳市江波龙电子股份有限公司 一种存储设备的控制方法及存储设备、电子设备
CN109683822B (zh) * 2018-12-19 2022-03-29 深圳忆联信息系统有限公司 一种ssd soc芯片内容地址搜索控制器的方法及其系统
US10915444B2 (en) * 2018-12-27 2021-02-09 Micron Technology, Inc. Garbage collection candidate selection using block overwrite rate
US10977174B2 (en) 2018-12-31 2021-04-13 Micron Technology, Inc. Using a common pool of blocks for user data and a system data structure
KR102574580B1 (ko) 2019-01-31 2023-09-06 제네럴 일렉트릭 컴퍼니 전력 그리드에서의 배터리 충전 및 방전 전력 제어
US11138104B2 (en) * 2019-02-07 2021-10-05 Intel Corporation Selection of mass storage device streams for garbage collection based on logical saturation
CN109992205B (zh) 2019-03-27 2020-06-02 无锡海斯凯尔医学技术有限公司 数据存储的装置、方法及可读存储介质
US10929251B2 (en) 2019-03-29 2021-02-23 Intel Corporation Data loss prevention for integrated memory buffer of a self encrypting drive
FR3094507A1 (fr) * 2019-03-29 2020-10-02 Stmicroelectronics (Grenoble 2) Sas Accès direct en mémoire
US11079958B2 (en) 2019-04-12 2021-08-03 Intel Corporation Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator
US20220164262A1 (en) * 2019-04-24 2022-05-26 Hewlett-Packard Development Company, L.P. Critical data storage
US11307768B2 (en) 2019-06-07 2022-04-19 Seagate Technology Llc Namespace auto-routing data storage system
US11899576B2 (en) * 2019-06-11 2024-02-13 Micron Technology, Inc. Dynamically modifying garbage collection rates for a memory subsystem in a closed-loop system
CN112099985B (zh) 2019-06-17 2023-09-12 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
CN112100087B (zh) 2019-06-17 2024-04-02 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
TWI718710B (zh) * 2019-06-25 2021-02-11 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
CN112130750B (zh) * 2019-06-25 2023-11-07 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
CN112130749B (zh) 2019-06-25 2023-12-22 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
TWI716918B (zh) * 2019-06-27 2021-01-21 旺宏電子股份有限公司 電子裝置、記憶體裝置及其記憶資料的讀取方法
US10762977B1 (en) * 2019-07-22 2020-09-01 Winbond Electronics Corp. Memory storage device and memory testing method thereof
US11029874B2 (en) 2019-07-30 2021-06-08 Western Digital Technologies, Inc. Rolling XOR protection in efficient pipeline
US10860417B1 (en) * 2019-08-02 2020-12-08 Micron Technology, Inc. Multiple memory die techniques
US11580030B2 (en) 2019-08-18 2023-02-14 Smart IOPS, Inc. Devices, systems, and methods of logical-to-physical address mapping
US11907114B2 (en) 2019-08-18 2024-02-20 Smart IOPS, Inc. Devices, systems, and methods for dynamically remapping memory addresses
US11281392B2 (en) * 2019-08-28 2022-03-22 Micron Technology, Inc. Garbage collection in a memory component using an adjusted parameter
TWI716993B (zh) * 2019-09-03 2021-01-21 宜鼎國際股份有限公司 雙通道資料儲存系統
US10922012B1 (en) 2019-09-03 2021-02-16 Dropbox, Inc. Fair data scrubbing in a data storage system
US10963396B1 (en) 2019-09-17 2021-03-30 Micron Technology, Inc. Memory system for binding data to a memory namespace
US11494311B2 (en) 2019-09-17 2022-11-08 Micron Technology, Inc. Page table hooks to memory types
US11650742B2 (en) 2019-09-17 2023-05-16 Micron Technology, Inc. Accessing stored metadata to identify memory devices in which data is stored
US11269780B2 (en) 2019-09-17 2022-03-08 Micron Technology, Inc. Mapping non-typed memory access to typed memory access
CN110908928B (zh) * 2019-10-15 2022-03-11 深圳市金泰克半导体有限公司 搜寻最后写入页的方法及装置
KR20210065455A (ko) * 2019-11-27 2021-06-04 에스케이하이닉스 주식회사 메모리 시스템의 라이트 성능을 향상시키는 장치 및 방법
US11175984B1 (en) 2019-12-09 2021-11-16 Radian Memory Systems, Inc. Erasure coding techniques for flash memory
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11243694B2 (en) 2020-01-29 2022-02-08 Samsung Electronics Co., Ltd. Grouping key value object IOs to improve IO performance for key-value storage devices
US11068421B1 (en) * 2020-02-20 2021-07-20 Silicon Motion, Inc. Memory device and associated flash memory controller
US20210263762A1 (en) * 2020-02-26 2021-08-26 Samsung Electronics Co., Ltd. Storage device-assisted live virtual machine migration
US11386022B2 (en) 2020-03-05 2022-07-12 Samsung Electronics Co., Ltd. Memory storage device including a configurable data transfer trigger
US11435914B2 (en) * 2020-03-30 2022-09-06 Western Digital Technologies, Inc. Dynamic ZNS open zone active limit
US11301151B2 (en) * 2020-05-08 2022-04-12 Macronix International Co., Ltd. Multi-die memory apparatus and identification method thereof
WO2021232024A1 (en) * 2020-05-15 2021-11-18 Rey Bruce Artificial intelligence-based hybrid raid controller device
KR20210143048A (ko) 2020-05-19 2021-11-26 삼성전자주식회사 상이한 엔디언 포맷에 따른 데이터 변환을 위한 인터페이스 회로를 갖는 메모리 장치
US11481319B2 (en) * 2020-05-22 2022-10-25 Vmware, Inc. Using data mirroring across multiple regions to reduce the likelihood of losing objects maintained in cloud object storage
US11561717B2 (en) * 2020-05-26 2023-01-24 Western Digital Technologies, Inc. Data integrity protection of SSDs utilizing streams
WO2021242227A1 (en) * 2020-05-27 2021-12-02 Futurewei Technologies, Inc. Method for using nand flash memory sram in solid state drive controller
KR20210152706A (ko) * 2020-06-09 2021-12-16 에스케이하이닉스 주식회사 메모리 장치, 메모리 시스템 및 메모리 장치의 동작 방법
KR20210157830A (ko) * 2020-06-22 2021-12-29 에스케이하이닉스 주식회사 메모리 및 메모리의 동작 방법
KR20220003705A (ko) * 2020-07-02 2022-01-11 삼성전자주식회사 제어기, 그것을 갖는 저장 장치, 및 그것의 리드 방법
US11698734B2 (en) 2020-07-22 2023-07-11 Seagate Technology Llc Collision reduction through just-in-time resource allocation
US11372716B2 (en) * 2020-07-28 2022-06-28 Micron Technology, Inc. Detecting special handling metadata using address verification
US11822817B2 (en) 2020-07-31 2023-11-21 Seagate Technology Llc Ordering reads to limit collisions in a non-volatile memory (NVM)
US11693596B2 (en) 2020-08-13 2023-07-04 Seagate Technology Llc Pre-emptive storage strategies to reduce host command collisions
US11392509B2 (en) * 2020-08-18 2022-07-19 PetaIO Inc. Command memory buffer systems and methods
US11500555B2 (en) 2020-09-04 2022-11-15 Micron Technology, Inc. Volatile memory to non-volatile memory interface for power management
US11556272B2 (en) * 2020-09-18 2023-01-17 Kioxia Corporation System and method for NAND multi-plane and multi-die status signaling
KR20220058224A (ko) * 2020-10-30 2022-05-09 에스케이하이닉스 주식회사 메모리 시스템 및 이에 포함된 메모리 컨트롤러의 동작 방법
US11698747B2 (en) * 2020-11-03 2023-07-11 Micron Technology, Inc. Pulse amplitude modulation (PAM) for multi-host support in a memory sub-system
US11914893B2 (en) * 2020-11-18 2024-02-27 Micron Technology, Inc. Managed memory systems with multiple priority queues
KR20220096077A (ko) 2020-12-30 2022-07-07 삼성전자주식회사 Ecc 데이터를 이용하여 신뢰성 검사를 수행하는 스토리지 장치
US11409601B1 (en) * 2021-01-26 2022-08-09 Micron Technology, Inc. Memory device protection
US11372592B1 (en) * 2021-02-04 2022-06-28 Silicon Motion, Inc. Memory controller having a plurality of control modules and associated server for coding and decoding raw data from flash memory chips
US11698753B2 (en) * 2021-02-17 2023-07-11 Kioxia Corporation Fairshare between multiple SSD submission queues
CN112835534B (zh) * 2021-02-26 2022-08-02 上海交通大学 一种基于存储阵列数据访问的垃圾回收优化方法及装置
JP2022137811A (ja) * 2021-03-09 2022-09-22 キオクシア株式会社 情報処理システム、ストレージデバイスおよびホスト
JP2022143243A (ja) 2021-03-17 2022-10-03 キオクシア株式会社 メモリシステムおよびその制御方法
US11556420B2 (en) 2021-04-06 2023-01-17 Macronix International Co., Ltd. Managing error correction coding in memory systems
KR20220142192A (ko) * 2021-04-14 2022-10-21 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
KR20220147292A (ko) 2021-04-27 2022-11-03 삼성전자주식회사 메타 데이터 관리를 수행하는 스토리지 장치 및 이의 동작 방법
US11556416B2 (en) 2021-05-05 2023-01-17 Apple Inc. Controlling memory readout reliability and throughput by adjusting distance between read thresholds
TWI764771B (zh) * 2021-06-29 2022-05-11 群聯電子股份有限公司 跨框編碼管理方法、記憶體儲存裝置及記憶體控制電路單元
CN113409871B (zh) * 2021-06-30 2024-02-02 芯天下技术股份有限公司 一种擦除时间的获取方法、装置、电子设备及存储介质
US11847342B2 (en) 2021-07-28 2023-12-19 Apple Inc. Efficient transfer of hard data and confidence levels in reading a nonvolatile memory
US20230066344A1 (en) * 2021-08-27 2023-03-02 Micron Technology, Inc. Efficient buffer management for media management commands in memory devices
US11960757B2 (en) 2021-10-04 2024-04-16 Samsung Electronics Co., Ltd. Flash translation layer with rewind
US11899974B2 (en) 2021-10-05 2024-02-13 Silicon Motion, Inc. Method and apparatus for performing automatic setting control of memory device in predetermined communications architecture with aid of auxiliary setting management
CN113885692B (zh) * 2021-10-22 2023-09-26 合肥兆芯电子有限公司 存储器效能优化方法、存储器控制电路单元以及存储装置
CN114063910B (zh) * 2021-10-28 2024-04-02 武汉光迅科技股份有限公司 文件处理方法及装置、文件处理系统及存储介质
US20230161506A1 (en) * 2021-11-19 2023-05-25 Cryptography Research, Inc. Multiple host memory controller
KR20230082377A (ko) * 2021-12-01 2023-06-08 삼성전자주식회사 메모리 컨트롤러 및 메모리 시스템
US11940872B2 (en) 2022-04-21 2024-03-26 Analog Devices International Unlimited Company Error correction code validation
US20230384957A1 (en) * 2022-05-30 2023-11-30 Samsung Electronics Co., Ltd. Storage device providing high purge performance and memory block management method thereof
TWI824843B (zh) * 2022-11-24 2023-12-01 慧榮科技股份有限公司 記憶裝置的控制方法與相關的快閃記憶體控制器與記憶裝置
CN116303118B (zh) * 2023-05-18 2023-09-05 合肥康芯威存储技术有限公司 一种存储设备及其控制方法

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63237135A (ja) * 1987-03-26 1988-10-03 Toshiba Corp マルチcpuシステムのタスク起動方式
JPH0594318A (ja) * 1991-09-30 1993-04-16 Nec Corp マルチcpuシステムの負荷平準化方式
JPH06149717A (ja) * 1992-11-13 1994-05-31 Hitachi Ltd 磁気テープ装置システムのパススケジューリング方法
JP2001155001A (ja) * 1999-11-30 2001-06-08 Matsushita Electric Ind Co Ltd マルチプロセッサタスク制御方法及びタスク制御装置
JP2002532806A (ja) * 1998-12-18 2002-10-02 ユニシス コーポレーション コンピュータ・システムの異なるパーティション中で複数のオペレーティング・システムを動作させ、異なるパーティションが共用メモリを介して相互に通信できるようにするコンピュータ・システムおよび方法
US6484224B1 (en) * 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
US20030043829A1 (en) * 2001-07-06 2003-03-06 Abbas Rashid Cross-bar switch employing a multiple entry point FIFO
US6836815B1 (en) * 2001-07-11 2004-12-28 Pasternak Solutions Llc Layered crossbar for interconnection of multiple processors and shared memories
JP2006285778A (ja) * 2005-04-01 2006-10-19 Hitachi Ltd ストレージシステム及び記憶制御方法
WO2007072324A2 (en) * 2005-12-20 2007-06-28 Nxp B.V. Multi-processor circuit with shared memory banks

Family Cites Families (488)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US702017A (en) * 1902-01-10 1902-06-10 James A Chambers Apparatus for drawing glass.
US797112A (en) * 1905-02-07 1905-08-15 Alexandre De Hemptinne Process of converting oleic acid into stearic acid.
US4173737A (en) 1978-05-04 1979-11-06 Zenith Radio Corporation Limited position, non-volatile memory tuning system
US4888750A (en) 1986-03-07 1989-12-19 Kryder Mark H Method and system for erase before write magneto-optic recording
US4916652A (en) 1987-09-30 1990-04-10 International Business Machines Corporation Dynamic multiple instruction stream multiple data multiple pipeline apparatus for floating-point single instruction stream single data architectures
US5129089A (en) 1987-12-18 1992-07-07 Digital Equipment Corporation Distributed interlock apparatus and distributed interlock management method
US5270979A (en) 1991-03-15 1993-12-14 Sundisk Corporation Method for optimum erasing of EEPROM
US5657332A (en) 1992-05-20 1997-08-12 Sandisk Corporation Soft errors handling in EEPROM devices
US5381528A (en) 1992-10-15 1995-01-10 Maxtor Corporation Demand allocation of read/write buffer partitions favoring sequential read cache
US5416915A (en) * 1992-12-11 1995-05-16 International Business Machines Corporation Method and system for minimizing seek affinity and enhancing write sensitivity in a DASD array
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5537555A (en) 1993-03-22 1996-07-16 Compaq Computer Corporation Fully pipelined and highly concurrent memory controller
US5519847A (en) * 1993-06-30 1996-05-21 Intel Corporation Method of pipelining sequential writes in a flash memory
US5329491A (en) 1993-06-30 1994-07-12 Intel Corporation Nonvolatile memory card with automatic power supply configuration
US5708849A (en) 1994-01-26 1998-01-13 Intel Corporation Implementing scatter/gather operations in a direct memory access device on a personal computer
US5488702A (en) 1994-04-26 1996-01-30 Unisys Corporation Data block check sequence generation and validation in a file cache system
US5696917A (en) * 1994-06-03 1997-12-09 Intel Corporation Method and apparatus for performing burst read operations in an asynchronous nonvolatile memory
GB9419246D0 (en) 1994-09-23 1994-11-09 Cambridge Consultants Data processing circuits and interfaces
US5666114A (en) 1994-11-22 1997-09-09 International Business Machines Corporation Method and means for managing linear mapped address spaces storing compressed data at the storage subsystem control unit or device level
US5530705A (en) * 1995-02-08 1996-06-25 International Business Machines Corporation Soft error recovery system and method
US5636342A (en) 1995-02-17 1997-06-03 Dell Usa, L.P. Systems and method for assigning unique addresses to agents on a system management bus
US5606532A (en) 1995-03-17 1997-02-25 Atmel Corporation EEPROM array with flash-like core
KR100404650B1 (ko) 1995-06-14 2004-02-11 히다치초엘에스아이 엔지니어링가부시키가이샤 반도체메모리,메모리디바이스및메모리카드
US5890193A (en) 1995-07-28 1999-03-30 Micron Technology, Inc. Architecture for state machine for controlling internal operations of flash memory
US6728851B1 (en) 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US5790459A (en) 1995-08-04 1998-08-04 Micron Quantum Devices, Inc. Memory circuit for performing threshold voltage tests on cells of a memory array
US5815434A (en) 1995-09-29 1998-09-29 Intel Corporation Multiple writes per a single erase for a nonvolatile memory
US6044472A (en) 1996-06-21 2000-03-28 Archos Device and method for supplying power to an external data medium reader unit connected to a computer, and external reader unit including this device
KR100412589B1 (ko) 1996-07-05 2004-04-06 마츠시타 덴끼 산교 가부시키가이샤 반도체 회로 시스템, 반도체 집적회로의 검사방법 및 그 검사계열의 생성방법
US6134148A (en) 1997-09-30 2000-10-17 Hitachi, Ltd. Semiconductor integrated circuit and data processing system
JPH10124381A (ja) * 1996-10-21 1998-05-15 Mitsubishi Electric Corp 半導体記憶装置
US5943692A (en) 1997-04-30 1999-08-24 International Business Machines Corporation Mobile client computer system with flash memory management utilizing a virtual address map and variable length data
US6006345A (en) 1997-05-09 1999-12-21 International Business Machines Corporation Pattern generator for memory burn-in and test
US6000006A (en) * 1997-08-25 1999-12-07 Bit Microsystems, Inc. Unified re-map and cache-index table with dual write-counters for wear-leveling of non-volatile flash RAM mass storage
JPH11126497A (ja) * 1997-10-22 1999-05-11 Oki Electric Ind Co Ltd 不揮発性半導体記憶装置
US6018304A (en) 1997-12-18 2000-01-25 Texas Instruments Incorporated Method and apparatus for high-rate n/n+1 low-complexity modulation codes with adjustable codeword length and error control capability
US6070074A (en) 1998-04-24 2000-05-30 Trw Inc. Method for enhancing the performance of a regenerative satellite communications system
US6138261A (en) 1998-04-29 2000-10-24 Trw Inc. Concatenated coding system for satellite communications
US6182264B1 (en) 1998-05-22 2001-01-30 Vlsi Technology, Inc. Smart dynamic selection of error correction methods for DECT based data services
US7111293B1 (en) * 1998-06-03 2006-09-19 Ants Software, Inc. Method for increased concurrency in a computer system
US6192092B1 (en) 1998-06-15 2001-02-20 Intel Corp. Method and apparatus for clock skew compensation
US6260120B1 (en) * 1998-06-29 2001-07-10 Emc Corporation Storage mapping and partitioning among multiple host processors in the presence of login state changes and host controller replacement
US6505305B1 (en) 1998-07-16 2003-01-07 Compaq Information Technologies Group, L.P. Fail-over of multiple memory blocks in multiple memory modules in computer system
US6295592B1 (en) 1998-07-31 2001-09-25 Micron Technology, Inc. Method of processing memory requests in a pipelined memory controller
US6233625B1 (en) 1998-11-18 2001-05-15 Compaq Computer Corporation System and method for applying initialization power to SCSI devices
US6288860B1 (en) 1999-01-04 2001-09-11 Maxtor Corporation Servo area numbering strategy for computer disk drives
US6438661B1 (en) 1999-03-03 2002-08-20 International Business Machines Corporation Method, system, and program for managing meta data in a storage system and rebuilding lost meta data in cache
US6449625B1 (en) 1999-04-20 2002-09-10 Lucent Technologies Inc. Use of a two-way stack approach to optimize flash memory management for embedded database systems
US6728879B1 (en) 1999-06-02 2004-04-27 Microsoft Corporation Transactional log with multi-sector log block validation
US6564271B2 (en) 1999-06-09 2003-05-13 Qlogic Corporation Method and apparatus for automatically transferring I/O blocks between a host system and a host adapter
US6104304A (en) 1999-07-06 2000-08-15 Conexant Systems, Inc. Self-test and status reporting system for microcontroller-controlled devices
US20050114587A1 (en) * 2003-11-22 2005-05-26 Super Talent Electronics Inc. ExpressCard with On-Card Flash Memory with Shared Flash-Control Bus but Separate Ready Lines
US20080282128A1 (en) 1999-08-04 2008-11-13 Super Talent Electronics, Inc. Method of Error Correction Code on Solid State Disk to Gain Data Security and Higher Performance
US7318117B2 (en) 2004-02-26 2008-01-08 Super Talent Electronics, Inc. Managing flash memory including recycling obsolete sectors
US7333364B2 (en) 2000-01-06 2008-02-19 Super Talent Electronics, Inc. Cell-downgrading and reference-voltage adjustment for a multi-bit-cell flash memory
US7620769B2 (en) * 2000-01-06 2009-11-17 Super Talent Electronics, Inc. Recycling partially-stale flash blocks using a sliding window for multi-level-cell (MLC) flash memory
US7660941B2 (en) * 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
US6412042B1 (en) 1999-11-17 2002-06-25 Maxtor Corporation System and method for improved disk drive performance and reliability
DE19961138C2 (de) 1999-12-17 2001-11-22 Siemens Ag Multiport-RAM-Speichervorrichtung
US8037234B2 (en) 2003-12-02 2011-10-11 Super Talent Electronics, Inc. Command queuing smart storage transfer manager for striping data to raw-NAND flash modules
US7082056B2 (en) 2004-03-12 2006-07-25 Super Talent Electronics, Inc. Flash memory device and architecture with multi level cells
US6339338B1 (en) 2000-01-18 2002-01-15 Formfactor, Inc. Apparatus for reducing power supply noise in an integrated circuit
US20020152305A1 (en) 2000-03-03 2002-10-17 Jackson Gregory J. Systems and methods for resource utilization analysis in information management environments
US6516437B1 (en) 2000-03-07 2003-02-04 General Electric Company Turbo decoder control for use with a programmable interleaver, variable block length, and multiple code rates
JP3555859B2 (ja) 2000-03-27 2004-08-18 広島日本電気株式会社 半導体生産システム及び半導体装置の生産方法
US6629047B1 (en) 2000-03-30 2003-09-30 Intel Corporation Method and apparatus for flash voltage detection and lockout
US6615307B1 (en) 2000-05-10 2003-09-02 Micron Technology, Inc. Flash with consistent latency for read operations
US20030188045A1 (en) 2000-04-13 2003-10-02 Jacobson Michael B. System and method for distributing storage controller tasks
US6647387B1 (en) * 2000-04-27 2003-11-11 International Business Machine Corporation System, apparatus, and method for enhancing storage management in a storage area network
US6678788B1 (en) 2000-05-26 2004-01-13 Emc Corporation Data type and topological data categorization and ordering for a mass storage system
US6934755B1 (en) 2000-06-02 2005-08-23 Sun Microsystems, Inc. System and method for migrating processes on a network
US6442076B1 (en) 2000-06-30 2002-08-27 Micron Technology, Inc. Flash memory with multiple status reading capability
US6980985B1 (en) 2000-08-30 2005-12-27 At&T Corp. Distributed evalulation of directory queries using a topology cache
US6941505B2 (en) 2000-09-12 2005-09-06 Hitachi, Ltd. Data processing system and data processing method
US6865650B1 (en) 2000-09-29 2005-03-08 Emc Corporation System and method for hierarchical data storage
US7028165B2 (en) 2000-12-06 2006-04-11 Intel Corporation Processor stalling
US6862651B2 (en) * 2000-12-20 2005-03-01 Microsoft Corporation Automotive computing devices with emergency power shut down capabilities
US6738870B2 (en) 2000-12-22 2004-05-18 International Business Machines Corporation High speed remote storage controller
KR100381955B1 (ko) 2001-01-03 2003-04-26 삼성전자주식회사 기입 드라이버를 이용한 셀 전류 측정 스킴을 갖는 플래시메모리 장치
US6763424B2 (en) * 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US6754773B2 (en) * 2001-01-29 2004-06-22 Snap Appliance, Inc. Data engine with metadata processor
WO2002082435A1 (fr) 2001-03-30 2002-10-17 Fujitsu Limited Dispositif de stockage
US7017107B2 (en) 2001-04-30 2006-03-21 Sun Microsystems, Inc. Storage array employing scrubbing operations at the disk-controller level
US6938253B2 (en) 2001-05-02 2005-08-30 Portalplayer, Inc. Multiprocessor communication system and method
US6757768B1 (en) 2001-05-17 2004-06-29 Cisco Technology, Inc. Apparatus and technique for maintaining order among requests issued over an external bus of an intermediate network node
JP4256600B2 (ja) * 2001-06-19 2009-04-22 Tdk株式会社 メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム及びフラッシュメモリの制御方法
US6928602B2 (en) 2001-07-18 2005-08-09 Sony Corporation Encoding method and encoder
JP4569055B2 (ja) 2001-08-06 2010-10-27 ソニー株式会社 信号処理装置及び信号処理方法
TW539946B (en) 2001-08-07 2003-07-01 Solid State System Company Ltd Window-based flash memory storage system, and the management method and the access method thereof
JP4437519B2 (ja) 2001-08-23 2010-03-24 スパンション エルエルシー 多値セルメモリ用のメモリコントローラ
US7028213B2 (en) 2001-09-28 2006-04-11 Hewlett-Packard Development Company, L.P. Error indication in a raid memory system
US7032123B2 (en) * 2001-10-19 2006-04-18 Sun Microsystems, Inc. Error recovery
JP3663377B2 (ja) 2001-10-23 2005-06-22 インターナショナル・ビジネス・マシーンズ・コーポレーション データ記憶装置、読み出しデータの処理装置および読み出しデータの処理方法
US7380085B2 (en) * 2001-11-14 2008-05-27 Intel Corporation Memory adapted to provide dedicated and or shared memory to multiple processors and method therefor
US6798696B2 (en) 2001-12-04 2004-09-28 Renesas Technology Corp. Method of controlling the operation of non-volatile semiconductor memory chips
US6582257B1 (en) * 2001-12-17 2003-06-24 Alstom Propulsion unit
US6871257B2 (en) 2002-02-22 2005-03-22 Sandisk Corporation Pipelined parallel programming operation in a non-volatile memory system
US6836808B2 (en) * 2002-02-25 2004-12-28 International Business Machines Corporation Pipelined packet processing
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
KR100476888B1 (ko) 2002-04-04 2005-03-17 삼성전자주식회사 온도보상기능을 가진 멀티비트 플래쉬메모리
AUPS193202A0 (en) * 2002-04-23 2002-05-30 Pickup, Robert Barkley Mr A method and system for authorising electronic mail
JP4079684B2 (ja) 2002-05-08 2008-04-23 株式会社日立製作所 ヒープメモリ管理方法およびそれを用いた計算機システム
US6966006B2 (en) 2002-05-09 2005-11-15 International Business Machines Corporation Adaptive startup policy for accelerating multi-disk array spin-up
US6895464B2 (en) * 2002-06-03 2005-05-17 Honeywell International Inc. Flash memory management system and method utilizing multiple block list windows
US6885530B2 (en) 2002-06-11 2005-04-26 Stmicroelectronics, Inc. Power limiting time delay circuit
KR100484147B1 (ko) * 2002-07-26 2005-04-18 삼성전자주식회사 플래시 메모리 관리 방법
US7051155B2 (en) 2002-08-05 2006-05-23 Sun Microsystems, Inc. Method and system for striping data to accommodate integrity metadata
US6978343B1 (en) 2002-08-05 2005-12-20 Netlogic Microsystems, Inc. Error-correcting content addressable memory
US20040045009A1 (en) * 2002-08-29 2004-03-04 Bae Systems Information Electronic Systems Integration, Inc. Observation tool for signal processing components
JP4177329B2 (ja) 2002-08-29 2008-11-05 株式会社ルネサステクノロジ 半導体処理装置及びicカード
US7120856B2 (en) 2002-09-25 2006-10-10 Leanics Corporation LDPC code and encoder/decoder regarding same
JP2004178782A (ja) 2002-10-04 2004-06-24 Sharp Corp 半導体記憶装置およびその制御方法および携帯電子機器
KR100457812B1 (ko) * 2002-11-14 2004-11-18 삼성전자주식회사 플래시 메모리, 그에 따른 플래시 메모리 액세스 장치 및방법
US7660998B2 (en) 2002-12-02 2010-02-09 Silverbrook Research Pty Ltd Relatively unique ID in integrated circuit
US20040114265A1 (en) 2002-12-16 2004-06-17 Xerox Corporation User-selectable automatic secure data file erasure of job after job completion
US7155579B1 (en) 2002-12-27 2006-12-26 Unisys Corporation Memory controller having programmable initialization sequence
US20040153902A1 (en) 2003-01-21 2004-08-05 Nexflash Technologies, Inc. Serial flash integrated circuit having error detection and correction
US7296216B2 (en) 2003-01-23 2007-11-13 Broadcom Corporation Stopping and/or reducing oscillations in low density parity check (LDPC) decoding
JP4110000B2 (ja) 2003-01-28 2008-07-02 株式会社ルネサステクノロジ 記憶装置
US7043505B1 (en) * 2003-01-28 2006-05-09 Unisys Corporation Method variation for collecting stability data from proprietary systems
JP2004240555A (ja) 2003-02-04 2004-08-26 Fujitsu Ltd バッテリ運用制御装置、バッテリ運用制御方法およびバッテリ運用制御プログラム
US7478096B2 (en) 2003-02-26 2009-01-13 Burnside Acquisition, Llc History preservation in a computer storage system
US7162678B2 (en) 2003-03-14 2007-01-09 Quantum Corporation Extended error correction codes
US7527466B2 (en) 2003-04-03 2009-05-05 Simmons Robert J Building-erection structural member transporter
KR100543447B1 (ko) 2003-04-03 2006-01-23 삼성전자주식회사 에러정정기능을 가진 플래쉬메모리장치
KR100526186B1 (ko) * 2003-04-04 2005-11-03 삼성전자주식회사 플래시 메모리의 오류블록 관리방법 및 장치
JP4170988B2 (ja) * 2003-05-09 2008-10-22 富士通株式会社 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
US7877647B2 (en) 2003-05-23 2011-01-25 Hewlett-Packard Development Company, L.P. Correcting a target address in parallel with determining whether the target address was received in error
EP1627331B1 (en) 2003-05-23 2017-09-20 IP Reservoir, LLC Intelligent data storage and processing using fpga devices
US7685254B2 (en) 2003-06-10 2010-03-23 Pandya Ashish A Runtime adaptable search processor
US7076598B2 (en) 2003-09-09 2006-07-11 Solid State System Co., Ltd. Pipeline accessing method to a large block memory
US7100002B2 (en) * 2003-09-16 2006-08-29 Denali Software, Inc. Port independent data transaction interface for multi-port devices
US7054968B2 (en) 2003-09-16 2006-05-30 Denali Software, Inc. Method and apparatus for multi-port memory controller
US7523157B2 (en) * 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
US7173852B2 (en) 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7012835B2 (en) 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
US7881133B2 (en) 2003-11-11 2011-02-01 Samsung Electronics Co., Ltd. Method of managing a flash memory and the flash memory
TW200516821A (en) 2003-11-14 2005-05-16 Hon Hai Prec Ind Co Ltd System and method for starting up devices orderly
US7401174B2 (en) 2003-12-16 2008-07-15 Matsushita Electric Industrial Co., Ltd. File system defragmentation and data processing method and apparatus for an information recording medium
US7376887B2 (en) * 2003-12-22 2008-05-20 International Business Machines Corporation Method for fast ECC memory testing by software including ECC check byte
US7197652B2 (en) 2003-12-22 2007-03-27 International Business Machines Corporation Method and system for energy management in a simultaneous multi-threaded (SMT) processing system including per-thread device usage monitoring
US8504798B2 (en) * 2003-12-30 2013-08-06 Sandisk Technologies Inc. Management of non-volatile memory systems having large erase blocks
US7631138B2 (en) * 2003-12-30 2009-12-08 Sandisk Corporation Adaptive mode switching of flash memory address mapping based on host usage characteristics
US7383375B2 (en) * 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US20050251617A1 (en) 2004-05-07 2005-11-10 Sinclair Alan W Hybrid non-volatile memory system
US20050144516A1 (en) * 2003-12-30 2005-06-30 Gonzalez Carlos J. Adaptive deterministic grouping of blocks into multi-block units
US7631148B2 (en) 2004-01-08 2009-12-08 Netapp, Inc. Adaptive file readahead based on multiple factors
JP4357304B2 (ja) * 2004-01-09 2009-11-04 株式会社バッファロー 外部記憶装置
US7328377B1 (en) 2004-01-27 2008-02-05 Altera Corporation Error correction for programmable logic integrated circuits
JP4477365B2 (ja) * 2004-01-29 2010-06-09 株式会社日立製作所 複数インタフェースを有する記憶装置、および、その記憶装置の制御方法
US7350044B2 (en) 2004-01-30 2008-03-25 Micron Technology, Inc. Data move method and apparatus
US7389465B2 (en) * 2004-01-30 2008-06-17 Micron Technology, Inc. Error detection and correction scheme for a memory device
US20080147964A1 (en) 2004-02-26 2008-06-19 Chow David Q Using various flash memory cells to build usb data flash cards with multiple partitions and autorun function
JP2005266861A (ja) 2004-03-16 2005-09-29 Nec Electronics Corp マイクロコンピュータ及びそのテスト方法
US7035159B2 (en) 2004-04-01 2006-04-25 Micron Technology, Inc. Techniques for storing accurate operating current values
US7020017B2 (en) * 2004-04-06 2006-03-28 Sandisk Corporation Variable programming of non-volatile memory
EP1870814B1 (en) 2006-06-19 2014-08-13 Texas Instruments France Method and apparatus for secure demand paging for processor devices
US7490283B2 (en) 2004-05-13 2009-02-10 Sandisk Corporation Pipelined data relocation and improved chip architectures
JP2005332471A (ja) 2004-05-19 2005-12-02 Hitachi Ltd ディスクアレイ装置
US20050273560A1 (en) 2004-06-03 2005-12-08 Hulbert Jared E Method and apparatus to avoid incoherency between a cache memory and flash memory
US7334179B2 (en) 2004-06-04 2008-02-19 Broadcom Corporation Method and system for detecting and correcting errors while accessing memory devices in microprocessor systems
US7159069B2 (en) * 2004-06-23 2007-01-02 Atmel Corporation Simultaneous external read operation during internal programming in a flash memory device
US7126873B2 (en) * 2004-06-29 2006-10-24 Super Talent Electronics, Inc. Method and system for expanding flash storage device capacity
US7529898B2 (en) 2004-07-09 2009-05-05 International Business Machines Corporation Method for backing up and restoring data
US8190808B2 (en) 2004-08-17 2012-05-29 Rambus Inc. Memory device having staggered memory operations
DK3422583T3 (da) 2004-08-30 2020-09-28 Google Llc System og fremgangsmåde for at tilvejebringe ikke-flygtig hukommelsesadministration i trådløse telefoner
FR2875358B1 (fr) 2004-09-15 2006-12-15 Eads Telecom Soc Par Actions S Insertion d'un flux secondaire d'informations binaires dans un flux principal de symboles d'une modulation numerique
US7038948B2 (en) 2004-09-22 2006-05-02 Spansion Llc Read approach for multi-level virtual ground memory
JP2006099665A (ja) 2004-09-30 2006-04-13 Hitachi Global Storage Technologies Netherlands Bv データ記憶装置及びそのシリアル・インターフェース部のパワー・セーブ・モードの制御方法
US7760880B2 (en) 2004-10-13 2010-07-20 Viasat, Inc. Decoder architecture system and method
JP4956922B2 (ja) 2004-10-27 2012-06-20 ソニー株式会社 記憶装置
KR100695891B1 (ko) 2004-11-17 2007-03-19 삼성전자주식회사 동작 모드에 따라 락 아웃을 선택적으로 수행하는 장치 및방법
US7395404B2 (en) * 2004-12-16 2008-07-01 Sandisk Corporation Cluster auto-alignment for storing addressable data packets in a non-volatile memory array
US20060136681A1 (en) * 2004-12-21 2006-06-22 Sanjeev Jain Method and apparatus to support multiple memory banks with a memory block
US8438459B2 (en) 2004-12-22 2013-05-07 Lg Electronics Inc. Apparatus and method for decoding using channel code
US20060156177A1 (en) * 2004-12-29 2006-07-13 Sailesh Kottapalli Method and apparatus for recovering from soft errors in register files
US7212440B2 (en) * 2004-12-30 2007-05-01 Sandisk Corporation On-chip data grouping and alignment
US7657696B2 (en) 2005-02-25 2010-02-02 Lsi Corporation Method to detect NAND-flash parameters by hardware automatically
US7822912B2 (en) * 2005-03-14 2010-10-26 Phision Electronics Corp. Flash storage chip and flash array storage system
US7251160B2 (en) 2005-03-16 2007-07-31 Sandisk Corporation Non-volatile memory and method with power-saving read and program-verify operations
JP2006277395A (ja) 2005-03-29 2006-10-12 Matsushita Electric Ind Co Ltd 情報処理装置及び情報処理方法
US7707232B2 (en) 2005-05-13 2010-04-27 Microsoft Corporation Implementation for collecting unmanaged memory
US7765454B2 (en) 2005-05-24 2010-07-27 Sgi International, Inc. Fault tolerant memory system
US7283395B2 (en) 2005-06-24 2007-10-16 Infineon Technologies Flash Gmbh & Co. Kg Memory device and method for operating the memory device
JP2008544721A (ja) 2005-06-27 2008-12-04 トムソン ライセンシング 反復デコーダの電力削減のための方法及び装置
US7669003B2 (en) * 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
US20070061597A1 (en) 2005-09-14 2007-03-15 Micky Holtzman Secure yet flexible system architecture for secure devices with flash mass storage memory
KR100705220B1 (ko) 2005-09-15 2007-04-06 주식회사 하이닉스반도체 프로그램 속도를 증가시키기 위한 플래시 메모리 장치의소거 및 프로그램 방법
KR20080054412A (ko) 2005-09-27 2008-06-17 엔엑스피 비 브이 에러 검출/보정 회로 및 방법과, 전자 메모리 소자 또는메모리 모듈
US7652922B2 (en) 2005-09-30 2010-01-26 Mosaid Technologies Incorporated Multiple independent serial link memory
KR100715147B1 (ko) * 2005-10-06 2007-05-10 삼성전자주식회사 전류소모를 감소시키는 내부전원전압 발생회로를 가지는멀티칩 반도체 메모리 장치
US20070083697A1 (en) 2005-10-07 2007-04-12 Microsoft Corporation Flash memory management
US8223553B2 (en) 2005-10-12 2012-07-17 Macronix International Co., Ltd. Systems and methods for programming a memory device
US7743363B2 (en) 2005-10-13 2010-06-22 Microsoft Corporation Extensible meta-data
US7954037B2 (en) 2005-10-25 2011-05-31 Sandisk Il Ltd Method for recovering from errors in flash memory
KR101021465B1 (ko) 2005-10-26 2011-03-15 삼성전자주식회사 저밀도 패리티 검사 코드를 사용하는 통신 시스템에서 신호수신 장치 및 방법
US7631162B2 (en) * 2005-10-27 2009-12-08 Sandisck Corporation Non-volatile memory with adaptive handling of data writes
KR100966043B1 (ko) 2005-10-31 2010-06-25 삼성전자주식회사 저밀도 패리티 검사 부호를 사용하는 통신 시스템에서 신호 송수신 장치 및 방법
US7606812B2 (en) 2005-11-04 2009-10-20 Sun Microsystems, Inc. Dynamic intent log
WO2007058617A1 (en) * 2005-11-17 2007-05-24 Chee Keng Chang A controller for non-volatile memories, and methods of operating the memory controller
US7500062B2 (en) 2005-11-17 2009-03-03 International Business Machines Corporation Fast path memory read request processing in a multi-level memory architecture
US8813052B2 (en) 2005-12-07 2014-08-19 Microsoft Corporation Cache metadata for implementing bounded transactional memory
US7562283B2 (en) * 2005-12-27 2009-07-14 D.S.P. Group Ltd. Systems and methods for error correction using binary coded hexidecimal or hamming decoding
US7546515B2 (en) 2005-12-27 2009-06-09 Sandisk Corporation Method of storing downloadable firmware on bulk media
US7349264B2 (en) * 2005-12-28 2008-03-25 Sandisk Corporation Alternate sensing techniques for non-volatile memories
US7716180B2 (en) 2005-12-29 2010-05-11 Amazon Technologies, Inc. Distributed storage system with web services client interface
WO2007080586A2 (en) 2006-01-10 2007-07-19 Saifun Semiconductors Ltd. Rd algorithm improvement for nrom technology
US8020060B2 (en) 2006-01-18 2011-09-13 Sandisk Il Ltd Method of arranging data in a multi-level cell memory device
KR100725410B1 (ko) 2006-01-20 2007-06-07 삼성전자주식회사 전원 상태에 따라 비휘발성 메모리의 블록 회수를 수행하는장치 및 그 방법
US20070234143A1 (en) 2006-01-25 2007-10-04 Samsung Electronics Co., Ltd. Semiconductor memory devices and methods of testing for failed bits of semiconductor memory devices
JP4859471B2 (ja) 2006-02-02 2012-01-25 株式会社日立製作所 ストレージシステム及びストレージコントローラ
US7546478B2 (en) 2006-02-10 2009-06-09 International Business Machines Corporation Apparatus and method to provide power to a plurality of data storage devices disposed in a data storage system
US7870326B2 (en) 2006-07-28 2011-01-11 Samsung Electronics Co., Ltd. Multiprocessor system and method thereof
US7590473B2 (en) 2006-02-16 2009-09-15 Intel Corporation Thermal management using an on-die thermal sensor
JP4863749B2 (ja) 2006-03-29 2012-01-25 株式会社日立製作所 フラッシュメモリを用いた記憶装置、その消去回数平準化方法、及び消去回数平準化プログラム
US7681106B2 (en) * 2006-03-29 2010-03-16 Freescale Semiconductor, Inc. Error correction device and methods thereof
US20070245061A1 (en) 2006-04-13 2007-10-18 Intel Corporation Multiplexing a parallel bus interface and a flash memory interface
US7685494B1 (en) * 2006-05-08 2010-03-23 Marvell International, Ltd. Error correction coding for varying signal-to-noise ratio channels
US8000134B2 (en) 2006-05-15 2011-08-16 Apple Inc. Off-die charge pump that supplies multiple flash devices
US7707481B2 (en) 2006-05-16 2010-04-27 Pitney Bowes Inc. System and method for efficient uncorrectable error detection in flash memory
US7701764B2 (en) 2006-05-17 2010-04-20 Micron Technology, Inc. Apparatus and method for reduced peak power consumption during common operation of multi-NAND flash memory devices
US20070300130A1 (en) * 2006-05-17 2007-12-27 Sandisk Corporation Method of Error Correction Coding for Multiple-Sector Pages in Flash Memory Devices
US7606084B2 (en) 2006-06-19 2009-10-20 Sandisk Corporation Programming differently sized margins and sensing with compensations at select states for improved read operations in non-volatile memory
JP4842719B2 (ja) 2006-06-28 2011-12-21 株式会社日立製作所 ストレージシステム及びそのデータ保護方法
WO2008003094A2 (en) 2006-06-29 2008-01-03 Digital Fountain, Inc. Efficient representation of symbol-based transformations with application to encoding and decoding of forward error correction codes
US7774684B2 (en) 2006-06-30 2010-08-10 Intel Corporation Reliability, availability, and serviceability in a memory device
US7403438B2 (en) 2006-07-12 2008-07-22 Infineon Technologies Flash Gmbh & Co. Kg Memory array architecture and method for high-speed distribution measurements
JP2008047273A (ja) * 2006-07-20 2008-02-28 Toshiba Corp 半導体記憶装置およびその制御方法
US7831895B2 (en) 2006-07-25 2010-11-09 Communications Coding Corporation Universal error control coding system for digital communication and data storage systems
TW200813724A (en) 2006-07-28 2008-03-16 Samsung Electronics Co Ltd Multipath accessible semiconductor memory device with host interface between processors
US20080052446A1 (en) 2006-08-28 2008-02-28 Sandisk Il Ltd. Logical super block mapping for NAND flash memory
US7450425B2 (en) 2006-08-30 2008-11-11 Micron Technology, Inc. Non-volatile memory cell read failure reduction
JP2008059315A (ja) 2006-08-31 2008-03-13 Hitachi Ltd 負荷分散方法及び計算機システム
US7566987B2 (en) 2006-09-14 2009-07-28 Lutron Electronics Co., Inc. Method of powering up a plurality of loads in sequence
KR100843133B1 (ko) 2006-09-20 2008-07-02 삼성전자주식회사 플래시 메모리에서 매핑 정보 재구성을 위한 장치 및 방법
TW200816651A (en) 2006-09-25 2008-04-01 Sunplus Technology Co Ltd Decoding method and system of real-time wireless channel estimation
US7886204B2 (en) 2006-09-27 2011-02-08 Sandisk Corporation Methods of cell population distribution assisted read margining
US8171380B2 (en) * 2006-10-10 2012-05-01 Marvell World Trade Ltd. Adaptive systems and methods for storing and retrieving data to and from memory cells
CN100596029C (zh) 2006-10-20 2010-03-24 北京泰美世纪科技有限公司 Ldpc码校验矩阵构造方法及利用该方法的编码解码装置
JP2008117195A (ja) 2006-11-06 2008-05-22 Hitachi Ltd 半導体記憶装置
TWI307100B (en) 2006-11-07 2009-03-01 Macronix Int Co Ltd Memory and method for reading error checking thereof
US7508703B2 (en) 2006-11-13 2009-03-24 Sandisk Corporation Non-volatile memory with boost structures
US8019940B2 (en) * 2006-12-06 2011-09-13 Fusion-Io, Inc. Apparatus, system, and method for a front-end, distributed raid
US8074011B2 (en) 2006-12-06 2011-12-06 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery after reaching a read count limit
KR100808664B1 (ko) 2006-12-08 2008-03-07 한국전자통신연구원 패리티 검사행렬 저장 방법 및 이를 이용한 블록 저밀도패리티 검사 부호화 방법 및 장치
KR100881669B1 (ko) * 2006-12-18 2009-02-06 삼성전자주식회사 비휘발성 데이터 저장장치의 정적 데이터 영역 검출 방법,마모도 평준화 방법 및 데이터 유닛 병합 방법과 그 장치
WO2008075292A2 (en) 2006-12-18 2008-06-26 Nxp B.V. Power-on temperature sensor/spd detect
US7620781B2 (en) 2006-12-19 2009-11-17 Intel Corporation Efficient Bloom filter
KR100842680B1 (ko) 2007-01-08 2008-07-01 삼성전자주식회사 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템
US7603490B2 (en) 2007-01-10 2009-10-13 International Business Machines Corporation Barrier and interrupt mechanism for high latency and out of order DMA device
KR100855587B1 (ko) * 2007-01-17 2008-09-01 삼성전자주식회사 메일박스 영역을 가지는 멀티 패스 액세스블 반도체 메모리장치 및 그에 따른 메일박스 액세스 제어방법
US7707461B2 (en) 2007-01-31 2010-04-27 Hewlett-Packard Development Company, L.P. Digital media drive failure prediction system and method
US7596643B2 (en) 2007-02-07 2009-09-29 Siliconsystems, Inc. Storage subsystem with configurable buffer
US7913022B1 (en) * 2007-02-14 2011-03-22 Xilinx, Inc. Port interface modules (PIMs) in a multi-port memory controller (MPMC)
KR100918707B1 (ko) * 2007-03-12 2009-09-23 삼성전자주식회사 플래시 메모리를 기반으로 한 메모리 시스템
US8369141B2 (en) 2007-03-12 2013-02-05 Apple Inc. Adaptive estimation of memory cell read thresholds
JP4897524B2 (ja) * 2007-03-15 2012-03-14 株式会社日立製作所 ストレージシステム及びストレージシステムのライト性能低下防止方法
KR100907218B1 (ko) 2007-03-28 2009-07-10 삼성전자주식회사 읽기 레벨 제어 장치 및 그 방법
WO2008121553A1 (en) 2007-03-29 2008-10-09 Sandisk Corporation Non-volatile storage with decoding of data using reliability metrics based on multiple reads
WO2008121577A1 (en) 2007-03-31 2008-10-09 Sandisk Corporation Soft bit data transmission for error correction control in non-volatile memory
US8032724B1 (en) * 2007-04-04 2011-10-04 Marvell International Ltd. Demand-driven opportunistic garbage collection in memory components
US7996642B1 (en) 2007-04-25 2011-08-09 Marvell International Ltd. Digital locked loop on channel tagged memory requests for memory optimization
EP1988474A1 (en) 2007-05-04 2008-11-05 Axalto SA System and method of managing indexation of flash memory
US8151171B2 (en) 2007-05-07 2012-04-03 Broadcom Corporation Operational parameter adaptable LDPC (low density parity check) decoder
US8073648B2 (en) 2007-05-14 2011-12-06 Sandisk Il Ltd. Measuring threshold voltage distribution in memory using an aggregate characteristic
US7930547B2 (en) 2007-06-15 2011-04-19 Alcatel-Lucent Usa Inc. High accuracy bloom filter using partitioned hashing
KR100891005B1 (ko) 2007-06-28 2009-03-31 삼성전자주식회사 고온 스트레스로 인한 읽기 마진의 감소를 보상하기 위한플래시 메모리 장치 및 그것의 읽기 전압 조정 방법
US7778070B2 (en) 2007-06-29 2010-08-17 Qimonda Ag Memory with dynamic redundancy configuration
JP2009020986A (ja) 2007-07-15 2009-01-29 Hitachi Global Storage Technologies Netherlands Bv ディスク・ドライブ装置及びディスク・ドライブ装置において不揮発性半導体メモリ領域上のデータを管理するテーブルを保存する方法
US8024525B2 (en) 2007-07-25 2011-09-20 Digi-Data Corporation Storage control unit with memory cache protection via recorded log
US8724789B2 (en) 2007-08-06 2014-05-13 Yellow Pages Systems and methods to connect people for real time communications via directory assistance
JP4564520B2 (ja) 2007-08-31 2010-10-20 株式会社東芝 半導体記憶装置およびその制御方法
US8095851B2 (en) 2007-09-06 2012-01-10 Siliconsystems, Inc. Storage subsystem capable of adjusting ECC settings based on monitored conditions
JP4404125B2 (ja) 2007-09-12 2010-01-27 株式会社デンソー 電子制御装置及び信号監視回路
US8139412B2 (en) 2007-10-31 2012-03-20 Agere Systems Inc. Systematic error correction for multi-level flash memory
US7894264B2 (en) 2007-11-07 2011-02-22 Micron Technology, Inc. Controlling a memory device responsive to degradation
US7945825B2 (en) 2007-11-25 2011-05-17 Spansion Isreal, Ltd Recovery while programming non-volatile memory (NVM)
US8429492B2 (en) 2007-11-30 2013-04-23 Marvell World Trade Ltd. Error correcting code predication system and method
WO2009072104A2 (en) 2007-12-05 2009-06-11 Densbits Technologies Ltd. Flash memory device with physical cell value deterioration accommodation and methods useful in conjunction therewith
US8185903B2 (en) 2007-12-13 2012-05-22 International Business Machines Corporation Managing system resources
US8751755B2 (en) 2007-12-27 2014-06-10 Sandisk Enterprise Ip Llc Mass storage controller volatile memory containing metadata related to flash memory storage
KR101077339B1 (ko) 2007-12-28 2011-10-26 가부시끼가이샤 도시바 반도체 기억 장치
US20090172335A1 (en) 2007-12-31 2009-07-02 Anand Krishnamurthi Kulkarni Flash devices with raid
US8159874B2 (en) 2008-01-22 2012-04-17 Micron Technology, Inc. Cell operation monitoring
US8271515B2 (en) 2008-01-29 2012-09-18 Cadence Design Systems, Inc. System and method for providing copyback data integrity in a non-volatile memory system
JP4617405B2 (ja) 2008-02-05 2011-01-26 富士通株式会社 不良メモリを検出する電子機器、不良メモリ検出方法およびそのためのプログラム
US20090204823A1 (en) 2008-02-07 2009-08-13 Analog Devices, Inc. Method and apparatus for controlling system access during protected modes of operation
JP4672743B2 (ja) 2008-03-01 2011-04-20 株式会社東芝 誤り訂正装置および誤り訂正方法
JP2009211233A (ja) 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
US8230300B2 (en) 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
JP2009266349A (ja) 2008-04-28 2009-11-12 Toshiba Corp 不揮発性半導体記憶装置
US8185706B2 (en) 2008-04-30 2012-05-22 Apple Inc. Copyback optimization for memory system
KR101518199B1 (ko) 2008-05-23 2015-05-06 삼성전자주식회사 오류 정정 장치, 그 방법 및 상기 장치를 포함하는 메모리장치
KR101412974B1 (ko) 2008-05-28 2014-06-30 삼성전자주식회사 메모리 장치 및 메모리 프로그래밍 방법
KR101412690B1 (ko) 2008-05-28 2014-06-27 삼성전자주식회사 메모리 장치 및 메모리 프로그래밍 방법
JP5072723B2 (ja) 2008-06-11 2012-11-14 株式会社東芝 不揮発性半導体記憶装置
US8959280B2 (en) 2008-06-18 2015-02-17 Super Talent Technology, Corp. Super-endurance solid-state drive with endurance translation layer (ETL) and diversion of temp files for reduced flash wear
US8627169B2 (en) 2008-06-20 2014-01-07 Cadence Design Systems, Inc. Method and apparatus for dynamically configurable multi level error correction
KR101413137B1 (ko) 2008-07-04 2014-07-01 삼성전자주식회사 메모리 장치 및 메모리 프로그래밍 방법
US8037380B2 (en) 2008-07-08 2011-10-11 International Business Machines Corporation Verifying data integrity of a non-volatile memory system during data caching process
US8325554B2 (en) 2008-07-10 2012-12-04 Sanmina-Sci Corporation Battery-less cache memory module with integrated backup
KR101436506B1 (ko) 2008-07-23 2014-09-02 삼성전자주식회사 메모리 장치 및 메모리 데이터 프로그래밍 방법
JP2010055692A (ja) 2008-08-28 2010-03-11 Toshiba Corp 読み出し回路及び読み出し方法
US8130552B2 (en) 2008-09-11 2012-03-06 Sandisk Technologies Inc. Multi-pass programming for memory with reduced data storage requirement
US8429514B1 (en) 2008-09-24 2013-04-23 Network Appliance, Inc. Dynamic load balancing of distributed parity in a RAID array
KR101484556B1 (ko) 2008-10-28 2015-01-20 삼성전자주식회사 독출 보상 회로
US8023334B2 (en) 2008-10-31 2011-09-20 Micron Technology, Inc. Program window adjust for memory cell signal line delay
US8214599B2 (en) 2008-11-04 2012-07-03 Gridiron Systems, Inc. Storage device prefetch system using directed graph clusters
KR101516577B1 (ko) 2008-11-10 2015-05-06 삼성전자주식회사 비휘발성 반도체 메모리 장치, 그를 포함하는 메모리 카드와 메모리 시스템 및 그의 리드 전압 추정 방법
US9063874B2 (en) 2008-11-10 2015-06-23 SanDisk Technologies, Inc. Apparatus, system, and method for wear management
KR20100058166A (ko) 2008-11-24 2010-06-03 삼성전자주식회사 불휘발성 메모리 장치 및 그것을 포함하는 메모리 시스템
KR101555022B1 (ko) 2008-12-02 2015-09-23 삼성전자주식회사 메모리 장치, 그것을 포함한 메모리 시스템 및 그것의 맵핑정보 복원 방법
US8209466B2 (en) 2008-12-16 2012-06-26 Intel Corporation Methods and systems to allocate addresses in a high-endurance/low-endurance hybrid flash memory
US9128699B2 (en) 2008-12-22 2015-09-08 Intel Corporation Method and system for queuing transfers of multiple non-contiguous address ranges with a single command
KR101535225B1 (ko) 2009-01-06 2015-07-09 삼성전자주식회사 디코딩 방법 및 그 방법을 이용하는 메모리 시스템 장치
CN101799783A (zh) 2009-01-19 2010-08-11 中国人民大学 一种数据存储处理方法、查找方法及其装置
KR100996009B1 (ko) 2009-02-02 2010-11-22 주식회사 하이닉스반도체 불휘발성 메모리 소자 및 그 동작 방법
US8645749B2 (en) 2009-02-04 2014-02-04 Micron Technology, Inc. Systems and methods for storing and recovering controller data in non-volatile memory devices
KR20100090439A (ko) 2009-02-06 2010-08-16 주식회사 하이닉스반도체 불휘발성 메모리 장치의 독출 방법 및 이를 구현하는 불휘발성 메모리 장치
US7830732B2 (en) 2009-02-11 2010-11-09 Stec, Inc. Staged-backup flash backed dram module
KR20100093885A (ko) 2009-02-17 2010-08-26 삼성전자주식회사 불휘발성 메모리 장치, 그것의 동작 방법, 그리고 그것을 포함하는 메모리 시스템
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US8230239B2 (en) 2009-04-02 2012-07-24 Qualcomm Incorporated Multiple power mode system and method for memory
US8042011B2 (en) 2009-04-28 2011-10-18 Synopsys, Inc. Runtime programmable BIST for testing a multi-port memory device
KR101575248B1 (ko) 2009-04-30 2015-12-07 삼성전자주식회사 메모리 컨트롤러 및 그것을 포함하는 메모리 시스템
US20100281207A1 (en) 2009-04-30 2010-11-04 Miller Steven C Flash-based data archive storage system
US8166258B2 (en) 2009-07-24 2012-04-24 Lsi Corporation Skip operations for solid state disks
US8161244B2 (en) 2009-05-13 2012-04-17 Microsoft Corporation Multiple cache directories
US8463820B2 (en) 2009-05-26 2013-06-11 Intel Corporation System and method for memory bandwidth friendly sorting on multi-core architectures
US8180763B2 (en) 2009-05-29 2012-05-15 Microsoft Corporation Cache-friendly B-tree accelerator
US8885434B2 (en) 2009-06-17 2014-11-11 Stmicroelectronics International N.V. Retention of data during stand-by mode
US8479032B2 (en) 2009-06-26 2013-07-02 Seagate Technology Llc Systems, methods and devices for regulation or isolation of backup power in memory devices
US8627117B2 (en) 2009-06-26 2014-01-07 Seagate Technology Llc Device with power control feature involving backup power reservoir circuit
US8412985B1 (en) 2009-06-30 2013-04-02 Micron Technology, Inc. Hardwired remapped memory
US8880835B2 (en) 2009-07-07 2014-11-04 International Business Machines Corporation Adjusting location of tiered storage residence based on usage patterns
US8516219B2 (en) 2009-07-24 2013-08-20 Apple Inc. Index cache tree
US7941696B2 (en) 2009-08-11 2011-05-10 Texas Memory Systems, Inc. Flash-based memory system with static or variable length page stripes including data protection information and auxiliary protection stripes
US7818525B1 (en) 2009-08-12 2010-10-19 Texas Memory Systems, Inc. Efficient reduction of read disturb errors in NAND FLASH memory
WO2011022114A1 (en) 2009-08-20 2011-02-24 Rambus Inc. Atomic memory device
US8464106B2 (en) 2009-08-24 2013-06-11 Ocz Technology Group, Inc. Computer system with backup function and method therefor
US8077515B2 (en) 2009-08-25 2011-12-13 Micron Technology, Inc. Methods, devices, and systems for dealing with threshold voltage change in memory devices
KR20120059506A (ko) 2009-08-25 2012-06-08 샌디스크 아이엘 엘티디 플래시 저장 디바이스로의 데이터 복원
US8289801B2 (en) 2009-09-09 2012-10-16 Fusion-Io, Inc. Apparatus, system, and method for power reduction management in a storage device
US8478725B2 (en) 2009-09-14 2013-07-02 Vmware, Inc. Method and system for performing live migration of persistent data of a virtual machine
WO2011036228A1 (en) 2009-09-23 2011-03-31 Conor Maurice Ryan A flash memory device and control method
US8479061B2 (en) 2009-09-24 2013-07-02 AGIGA Tech Solid state memory cartridge with wear indication
WO2011036727A1 (ja) 2009-09-25 2011-03-31 富士通株式会社 メモリシステム及びメモリシステムの制御方法
US8171257B2 (en) 2009-09-25 2012-05-01 International Business Machines Corporation Determining an end of valid log in a log of write records using a next pointer and a far ahead pointer
US8266501B2 (en) 2009-09-29 2012-09-11 Micron Technology, Inc. Stripe based memory operation
JP5197544B2 (ja) * 2009-10-05 2013-05-15 株式会社東芝 メモリシステム
US8312349B2 (en) 2009-10-27 2012-11-13 Micron Technology, Inc. Error detection/correction based memory management
US8423866B2 (en) 2009-10-28 2013-04-16 SanDisk Technologies, Inc. Non-volatile memory and method with post-write read and adaptive re-write to manage errors
CN101699406B (zh) * 2009-11-12 2011-12-14 威盛电子股份有限公司 数据储存系统与方法
US8335123B2 (en) 2009-11-20 2012-12-18 Sandisk Technologies Inc. Power management of memory systems
US8130553B2 (en) 2009-12-02 2012-03-06 Seagate Technology Llc Systems and methods for low wear operation of solid state memory
FR2953666B1 (fr) 2009-12-09 2012-07-13 Commissariat Energie Atomique Procede de codage ldpc a redondance incrementale
US8250380B2 (en) 2009-12-17 2012-08-21 Hitachi Global Storage Technologies Netherlands B.V. Implementing secure erase for solid state drives
TWI399645B (zh) 2010-01-15 2013-06-21 Silicon Motion Inc 管理記憶體讀出資料之方法以及記憶裝置
US8661184B2 (en) 2010-01-27 2014-02-25 Fusion-Io, Inc. Managing non-volatile media
US8380915B2 (en) 2010-01-27 2013-02-19 Fusion-Io, Inc. Apparatus, system, and method for managing solid-state storage media
JP5788183B2 (ja) 2010-02-17 2015-09-30 三星電子株式会社Samsung Electronics Co.,Ltd. 不揮発性メモリ装置、それの動作方法、そしてそれを含むメモリシステム
US8213255B2 (en) 2010-02-19 2012-07-03 Sandisk Technologies Inc. Non-volatile storage with temperature compensation based on neighbor state information
US8355280B2 (en) 2010-03-09 2013-01-15 Samsung Electronics Co., Ltd. Data storage system having multi-bit memory device and operating method thereof
US8458417B2 (en) 2010-03-10 2013-06-04 Seagate Technology Llc Garbage collection in a storage device
US8365041B2 (en) 2010-03-17 2013-01-29 Sandisk Enterprise Ip Llc MLC self-raid flash data protection scheme
US8164967B2 (en) 2010-03-24 2012-04-24 Apple Inc. Systems and methods for refreshing non-volatile memory
US9183134B2 (en) 2010-04-22 2015-11-10 Seagate Technology Llc Data segregation in a storage device
JP2011233114A (ja) 2010-04-30 2011-11-17 Toshiba Corp メモリシステム
US20110283119A1 (en) 2010-05-13 2011-11-17 GCCA Inc. System and Method for Providing Energy Efficient Cloud Computing
US8321481B2 (en) 2010-05-13 2012-11-27 Assa Abloy Ab Method for incremental anti-tear garbage collection
EP2577830A2 (en) 2010-06-01 2013-04-10 Koninklijke Philips Electronics N.V. System and method for sequential application of power to electrical loads
WO2011153478A2 (en) 2010-06-04 2011-12-08 Flashsoft Corporation Cache management and acceleration of storage media
WO2012001917A1 (ja) 2010-06-29 2012-01-05 パナソニック株式会社 不揮発性記憶システム、メモリシステム用の電源回路、フラッシュメモリ、フラッシュメモリコントローラ、および不揮発性半導体記憶装置
US20120011393A1 (en) 2010-07-06 2012-01-12 Roberts Richard B Bios recovery
US8737141B2 (en) 2010-07-07 2014-05-27 Stec, Inc. Apparatus and method for determining an operating condition of a memory cell based on cycle information
US8737136B2 (en) 2010-07-09 2014-05-27 Stec, Inc. Apparatus and method for determining a read level of a memory cell based on cycle information
KR101131560B1 (ko) 2010-07-15 2012-04-04 주식회사 하이닉스반도체 웨어 레벨링을 수행하는 비휘발성 메모리 장치 및 그의 제어 방법
US20120023144A1 (en) 2010-07-21 2012-01-26 Seagate Technology Llc Managing Wear in Flash Memory
US8503238B1 (en) 2010-07-21 2013-08-06 Sk Hynix Memory Solutions Inc. Error recovery for flash memory
KR20120011642A (ko) 2010-07-29 2012-02-08 삼성전자주식회사 기준 셀을 포함하는 불휘발성 메모리 장치 및 그것의 기준 전류 설정 방법
US8832384B1 (en) 2010-07-29 2014-09-09 Violin Memory, Inc. Reassembling abstracted memory accesses for prefetching
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US8510499B1 (en) 2010-08-30 2013-08-13 Symantec Corporation Solid state drive caching using memory structures to determine a storage space replacement candidate
CN102385902A (zh) 2010-09-01 2012-03-21 建兴电子科技股份有限公司 固态储存装置及其数据控制方法
JP2012058860A (ja) 2010-09-06 2012-03-22 Toshiba Corp メモリシステム
US8417878B2 (en) 2010-09-20 2013-04-09 Seagate Technology Llc Selection of units for garbage collection in flash memory
WO2012051600A2 (en) * 2010-10-15 2012-04-19 Kyquang Son File system-aware solid-state storage management system
US20120275466A1 (en) 2010-10-21 2012-11-01 Texas Instruments Incorporated System and method for classifying packets
WO2012058328A1 (en) 2010-10-27 2012-05-03 Sandforce, Inc. Adaptive ecc techniques for flash memory based data storage
US9063878B2 (en) 2010-11-03 2015-06-23 Densbits Technologies Ltd. Method, system and computer readable medium for copy back
US8909957B2 (en) 2010-11-04 2014-12-09 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Dynamic voltage adjustment to computer system memory
US8806106B2 (en) 2010-11-12 2014-08-12 Seagate Technology Llc Estimating wear of non-volatile, solid state memory
US8484433B2 (en) 2010-11-19 2013-07-09 Netapp, Inc. Dynamic detection and reduction of unaligned I/O operations
KR101774496B1 (ko) 2010-12-08 2017-09-05 삼성전자주식회사 비휘발성 메모리 장치, 이를 포함하는 장치들, 및 이의 동작 방법
KR20120064462A (ko) 2010-12-09 2012-06-19 삼성전자주식회사 메모리 컨트롤러, 이의 오류정정 방법, 및 이를 포함하는 메모리 시스템
US8615681B2 (en) 2010-12-14 2013-12-24 Western Digital Technologies, Inc. System and method for maintaining a data redundancy scheme in a solid state memory in the event of a power loss
US9038066B2 (en) 2010-12-22 2015-05-19 Vmware, Inc. In-place snapshots of a virtual disk configured with sparse extent
TWI446345B (zh) 2010-12-31 2014-07-21 Silicon Motion Inc 用來進行區塊管理之方法以及記憶裝置及控制器
JP2012151676A (ja) 2011-01-19 2012-08-09 Jvc Kenwood Corp 復号装置および復号方法
US8364888B2 (en) 2011-02-03 2013-01-29 Stec, Inc. Erase-suspend system and method
US8489653B2 (en) 2011-02-08 2013-07-16 International Business Machines Corporation Incremental class unloading in a region-based garbage collector
WO2012109679A2 (en) 2011-02-11 2012-08-16 Fusion-Io, Inc. Apparatus, system, and method for application direct virtual memory management
US8966319B2 (en) 2011-02-22 2015-02-24 Apple Inc. Obtaining debug information from a flash memory device
US8909894B1 (en) 2011-03-16 2014-12-09 Tintri Inc. Automatically aligning virtual blocks to physical blocks
US8601036B2 (en) 2011-03-23 2013-12-03 International Business Machines Corporation Handling persistent/long-lived objects to reduce garbage collection pause times
US9047955B2 (en) 2011-03-30 2015-06-02 Stec, Inc. Adjusting operating parameters for memory cells based on wordline address and cycle information
US8874515B2 (en) 2011-04-11 2014-10-28 Sandisk Enterprise Ip Llc Low level object version tracking using non-volatile memory write generations
US8909888B2 (en) 2011-04-29 2014-12-09 Seagate Technology Llc Secure erasure of data from a non-volatile memory
US8713380B2 (en) 2011-05-03 2014-04-29 SanDisk Technologies, Inc. Non-volatile memory and method having efficient on-chip block-copying with controlled error rate
US9176864B2 (en) 2011-05-17 2015-11-03 SanDisk Technologies, Inc. Non-volatile memory and method having block management with hot/cold data sorting
US8745318B2 (en) 2011-06-28 2014-06-03 Seagate Technology Llc Parameter tracking for memory devices
US9378138B2 (en) 2011-06-29 2016-06-28 International Business Machines Corporation Conservative garbage collection and access protection
US8898373B1 (en) 2011-06-29 2014-11-25 Western Digital Technologies, Inc. System and method for improving wear-leveling performance in solid-state memory
US8645773B2 (en) 2011-06-30 2014-02-04 Seagate Technology Llc Estimating temporal degradation of non-volatile solid-state memory
US20130024735A1 (en) 2011-07-19 2013-01-24 Ocz Technology Group Inc. Solid-state memory-based storage method and device with low error rate
US8566667B2 (en) 2011-07-29 2013-10-22 Stec, Inc. Low density parity check code decoding system and method
US8692561B2 (en) 2011-08-11 2014-04-08 International Business Machines Corporation Implementing chip to chip calibration within a TSV stack
US20130047045A1 (en) 2011-08-19 2013-02-21 Stec, Inc. Error indicator from ecc decoder
US8934311B2 (en) 2011-09-06 2015-01-13 Samsung Electronics Co., Ltd. Semiconductor memory device capable of screening a weak bit and repairing the same
US9047210B2 (en) 2011-09-15 2015-06-02 Sandisk Technologies Inc. Data storage device and method to correct bit values using multiple read voltages
KR20130031046A (ko) 2011-09-20 2013-03-28 삼성전자주식회사 플래시 메모리 장치 및 플래시 메모리 장치의 데이터 관리 방법
US8553468B2 (en) 2011-09-21 2013-10-08 Densbits Technologies Ltd. System and method for managing erase operations in a non-volatile memory
WO2013048485A1 (en) 2011-09-30 2013-04-04 Intel Corporation Autonomous initialization of non-volatile random access memory in a computer system
US8825721B2 (en) 2011-10-03 2014-09-02 Oracle International Corporation Time-based object aging for generational garbage collectors
US8516019B2 (en) 2011-10-03 2013-08-20 Oracle America, Inc. Time-based object aging for generational garbage collectors
CN103392207B (zh) 2011-10-05 2017-08-04 希捷科技有限公司 非易失性存储的自身日志记录和层级一致性
US8711619B2 (en) 2011-10-18 2014-04-29 Seagate Technology Llc Categorizing bit errors of solid-state, non-volatile memory
US10359949B2 (en) 2011-10-31 2019-07-23 Apple Inc. Systems and methods for obtaining and using nonvolatile memory health information
US8683297B2 (en) 2011-11-02 2014-03-25 Sandisk Technologies Inc. Systems and methods of generating a replacement default read threshold
US20140359381A1 (en) 2011-11-02 2014-12-04 The University Of Tokyo Memory controller and data storage device
US9053809B2 (en) 2011-11-09 2015-06-09 Apple Inc. Data protection from write failures in nonvolatile memory
US8456919B1 (en) 2011-11-10 2013-06-04 Sandisk Technologies Inc. Method and apparatus to provide data including hard bit data and soft bit data to a rank modulation decoder
US9081663B2 (en) 2011-11-18 2015-07-14 Stec, Inc. Optimized garbage collection algorithm to improve solid state drive reliability
US8687421B2 (en) 2011-11-21 2014-04-01 Sandisk Technologies Inc. Scrub techniques for use with dynamic read
US9274945B2 (en) 2011-12-15 2016-03-01 International Business Machines Corporation Processing unit reclaiming requests in a solid state memory device
US8830746B2 (en) 2011-12-28 2014-09-09 Apple Inc. Optimized threshold search in analog memory cells using separator pages of the same type as read pages
JP2013142947A (ja) 2012-01-10 2013-07-22 Sony Corp 記憶制御装置、記憶装置および記憶制御装置の制御方法
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
WO2013112332A1 (en) 2012-01-24 2013-08-01 Apple Inc. Enhanced programming and erasure schemes for analog memory cells
US9208871B2 (en) 2012-01-30 2015-12-08 HGST Netherlands B.V. Implementing enhanced data read for multi-level cell (MLC) memory using threshold voltage-drift or resistance drift tolerant moving baseline memory data encoding
US8964482B2 (en) 2012-01-30 2015-02-24 Freescale Semiconductor, Inc. Dynamic healing of non-volatile memory cells
US9679664B2 (en) 2012-02-11 2017-06-13 Samsung Electronics Co., Ltd. Method and system for providing a smart memory architecture
US8832050B2 (en) 2012-03-09 2014-09-09 Hewlett-Packard Development Company, L.P. Validation of distributed balanced trees
US8817569B2 (en) 2012-03-19 2014-08-26 Sandisk Technologies Inc. Immunity against temporary and short power drops in non-volatile memory
US20130290611A1 (en) 2012-03-23 2013-10-31 Violin Memory Inc. Power management in a flash memory
JP5853899B2 (ja) 2012-03-23 2016-02-09 ソニー株式会社 記憶制御装置、記憶装置、情報処理システム、および、それらにおける処理方法
US9311501B2 (en) 2012-03-26 2016-04-12 International Business Machines Corporation Using different secure erase algorithms to erase chunks from a file associated with different security levels
US8923066B1 (en) 2012-04-09 2014-12-30 Sk Hynix Memory Solutions Inc. Storage of read thresholds for NAND flash storage using linear approximation
US8990477B2 (en) 2012-04-19 2015-03-24 Sandisk Technologies Inc. System and method for limiting fragmentation
US20130343131A1 (en) 2012-06-26 2013-12-26 Lsi Corporation Fast tracking for flash channels
US20130297613A1 (en) 2012-05-04 2013-11-07 Monmouth University Indexing based on key ranges
US8634267B2 (en) 2012-05-14 2014-01-21 Sandisk Technologies Inc. Flash memory chip power management for data reliability and methods thereof
US20130346672A1 (en) 2012-06-22 2013-12-26 Microsoft Corporation Multi-Tiered Cache with Storage Medium Awareness
US9529724B2 (en) 2012-07-06 2016-12-27 Seagate Technology Llc Layered architecture for hybrid controller
CN102789427B (zh) 2012-07-17 2015-11-25 威盛电子股份有限公司 数据储存装置与其操作方法
KR101997079B1 (ko) 2012-07-26 2019-07-08 삼성전자주식회사 가변 저항 메모리를 포함하는 저장 장치 및 그것의 동작 방법
US9002791B2 (en) 2012-08-28 2015-04-07 Hewlett-Packard Development Company, L. P. Logging modifications to a variable in persistent memory
KR20140028481A (ko) 2012-08-29 2014-03-10 에스케이하이닉스 주식회사 쓰기 전류를 측정할 수 있는 반도체 메모리 장치 및 쓰기 전류 측정 방법
US9329986B2 (en) 2012-09-10 2016-05-03 Sandisk Technologies Inc. Peak current management in multi-die non-volatile memory devices
US20140071761A1 (en) 2012-09-10 2014-03-13 Sandisk Technologies Inc. Non-volatile storage with joint hard bit and soft bit reading
US8886882B2 (en) 2012-09-14 2014-11-11 Hitachi, Ltd. Method and apparatus of storage tier and cache management
US8938656B2 (en) 2012-09-14 2015-01-20 Sandisk Technologies Inc. Data storage device with intermediate ECC stage
US9128690B2 (en) 2012-09-24 2015-09-08 Texas Instruments Incorporated Bus pin reduction and power management
US10489295B2 (en) 2012-10-08 2019-11-26 Sandisk Technologies Llc Systems and methods for managing cache pre-fetch
US9268709B2 (en) 2012-10-18 2016-02-23 Marvell International Ltd. Storage controllers and storage control methods
US9104328B2 (en) 2012-10-31 2015-08-11 Hitachi, Ltd. Storage apparatus and method for controlling storage apparatus
US8817541B2 (en) 2012-11-09 2014-08-26 Sandisk Technologies Inc. Data search using bloom filters and NAND based content addressable memory
US8634248B1 (en) 2012-11-09 2014-01-21 Sandisk Technologies Inc. On-device data analytics using NAND flash based intelligent memory
US8930778B2 (en) 2012-11-15 2015-01-06 Seagate Technology Llc Read disturb effect determination
US8949544B2 (en) 2012-11-19 2015-02-03 Advanced Micro Devices, Inc. Bypassing a cache when handling memory requests
US9183945B2 (en) 2012-11-30 2015-11-10 Sandisk Technologies Inc. Systems and methods to avoid false verify and false read
US9135185B2 (en) 2012-12-23 2015-09-15 Advanced Micro Devices, Inc. Die-stacked memory device providing data translation
US8869008B2 (en) 2013-01-17 2014-10-21 Apple Inc. Adaptation of analog memory cell read thresholds using partial ECC syndromes
KR20140100330A (ko) 2013-02-06 2014-08-14 삼성전자주식회사 메모리 시스템 및 그것의 동작 방법
DE102013101863A1 (de) 2013-02-26 2014-08-28 Fujitsu Technology Solutions Intellectual Property Gmbh Hochverfügbares Hauptspeicher-Datenbanksystem, Arbeitsverfahren und deren Verwendungen
US9383795B2 (en) 2013-03-10 2016-07-05 Seagate Technololgy Llc Storage device power failure infrastructure
US9042181B2 (en) 2013-03-15 2015-05-26 SanDisk Technologies, Inc. Periodic erase operation for a non-volatile medium
US10546648B2 (en) 2013-04-12 2020-01-28 Sandisk Technologies Llc Storage control system with data management mechanism and method of operation thereof
US9378830B2 (en) 2013-07-16 2016-06-28 Seagate Technology Llc Partial reprogramming of solid-state non-volatile memory cells
US9043517B1 (en) 2013-07-25 2015-05-26 Sandisk Enterprise Ip Llc Multipass programming in buffers implemented in non-volatile data storage systems
US9531038B2 (en) 2013-07-31 2016-12-27 Dell Products, Lp System and method of cell block voltage analytics to improve balancing effectiveness and identify self-discharge rate
US9329789B1 (en) 2013-10-14 2016-05-03 Marvell International Ltd. Methods and apparatus for efficiently operating on a storage device
US9250676B2 (en) 2013-11-29 2016-02-02 Sandisk Enterprise Ip Llc Power failure architecture and verification
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US9471497B2 (en) 2014-01-24 2016-10-18 Netapp, Inc. Methods for combining access history and sequentiality for intelligent prefetching and devices thereof
TWI533308B (zh) 2014-03-21 2016-05-11 群聯電子股份有限公司 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63237135A (ja) * 1987-03-26 1988-10-03 Toshiba Corp マルチcpuシステムのタスク起動方式
JPH0594318A (ja) * 1991-09-30 1993-04-16 Nec Corp マルチcpuシステムの負荷平準化方式
JPH06149717A (ja) * 1992-11-13 1994-05-31 Hitachi Ltd 磁気テープ装置システムのパススケジューリング方法
JP2002532806A (ja) * 1998-12-18 2002-10-02 ユニシス コーポレーション コンピュータ・システムの異なるパーティション中で複数のオペレーティング・システムを動作させ、異なるパーティションが共用メモリを介して相互に通信できるようにするコンピュータ・システムおよび方法
US6484224B1 (en) * 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
JP2001155001A (ja) * 1999-11-30 2001-06-08 Matsushita Electric Ind Co Ltd マルチプロセッサタスク制御方法及びタスク制御装置
US20030043829A1 (en) * 2001-07-06 2003-03-06 Abbas Rashid Cross-bar switch employing a multiple entry point FIFO
US6836815B1 (en) * 2001-07-11 2004-12-28 Pasternak Solutions Llc Layered crossbar for interconnection of multiple processors and shared memories
JP2006285778A (ja) * 2005-04-01 2006-10-19 Hitachi Ltd ストレージシステム及び記憶制御方法
WO2007072324A2 (en) * 2005-12-20 2007-06-28 Nxp B.V. Multi-processor circuit with shared memory banks

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014063511A (ja) * 2008-10-13 2014-04-10 Micron Technology Inc ソリッドステート記憶装置におけるトランスレーションレイヤ
US11586577B2 (en) 2009-09-11 2023-02-21 Micron Technology, Inc. Autonomous memory architecture
JP2013061790A (ja) * 2011-09-13 2013-04-04 Toshiba Corp メモリデバイス
US9477596B2 (en) 2011-12-12 2016-10-25 Apple Inc. LBA bitmap usage
KR101457270B1 (ko) * 2011-12-12 2014-10-31 애플 인크. Lba 비트맵 사용
US9069657B2 (en) 2011-12-12 2015-06-30 Apple Inc. LBA bitmap usage
JP2013137770A (ja) * 2011-12-12 2013-07-11 Apple Inc Lbaビットマップの使用
KR101966693B1 (ko) 2011-12-12 2019-04-09 애플 인크. Lba 비트맵 사용
KR20130066640A (ko) * 2011-12-12 2013-06-20 애플 인크. Lba 비트맵 사용
JP2018139118A (ja) * 2013-12-02 2018-09-06 マイクロン テクノロジー, インク. 自律的メモリの方法及びシステム
US10778815B2 (en) 2013-12-02 2020-09-15 Micron Technology, Inc. Methods and systems for parsing and executing instructions to retrieve data using autonomous memory
US9423979B2 (en) 2014-03-10 2016-08-23 Kabushiki Kaisha Toshiba Memory system and memory controller for determining whether one or plurality of pointers can be stored in a second buffer and for executing data transfer between data buffer and host using the pointers
WO2015162660A1 (ja) * 2014-04-21 2015-10-29 株式会社日立製作所 計算機システム
TWI647702B (zh) * 2017-12-08 2019-01-11 旺宏電子股份有限公司 記憶體控制器、記憶體系統及於一記憶體中管理資料配置的方法
KR20200128873A (ko) * 2019-05-07 2020-11-17 에스케이하이닉스 주식회사 컨트롤러, 메모리 시스템 및 그것의 동작 방법
KR102653852B1 (ko) * 2019-05-07 2024-04-02 에스케이하이닉스 주식회사 컨트롤러, 메모리 시스템 및 그것의 동작 방법

Also Published As

Publication number Publication date
CN101965559B (zh) 2013-10-09
WO2009086421A1 (en) 2009-07-09
US20090172308A1 (en) 2009-07-02
US20140101378A1 (en) 2014-04-10
US8959282B2 (en) 2015-02-17
CN103150275A (zh) 2013-06-12
US7978516B2 (en) 2011-07-12
WO2009086412A1 (en) 2009-07-09
US20090172259A1 (en) 2009-07-02
US9483210B2 (en) 2016-11-01
US8533384B2 (en) 2013-09-10
US8762620B2 (en) 2014-06-24
EP2225642A1 (en) 2010-09-08
WO2009086419A1 (en) 2009-07-09
US9448743B2 (en) 2016-09-20
US20090172260A1 (en) 2009-07-02
US20090172257A1 (en) 2009-07-02
US20130339581A1 (en) 2013-12-19
JP5272019B2 (ja) 2013-08-28
CN103150275B (zh) 2015-12-16
US8621138B2 (en) 2013-12-31
WO2009086365A1 (en) 2009-07-09
US8775717B2 (en) 2014-07-08
US8245101B2 (en) 2012-08-14
US8621137B2 (en) 2013-12-31
US20090172258A1 (en) 2009-07-02
US9158677B2 (en) 2015-10-13
WO2009086359A1 (en) 2009-07-09
US20140237168A1 (en) 2014-08-21
US9239783B2 (en) 2016-01-19
US8738841B2 (en) 2014-05-27
US20140108715A1 (en) 2014-04-17
US20160034227A1 (en) 2016-02-04
US20090172263A1 (en) 2009-07-02
US20090172499A1 (en) 2009-07-02
WO2009086371A1 (en) 2009-07-09
EP2225642A4 (en) 2012-03-28
CN101965559A (zh) 2011-02-02
US20090172262A1 (en) 2009-07-02
US20130262753A1 (en) 2013-10-03
US9152556B2 (en) 2015-10-06
US7934052B2 (en) 2011-04-26
WO2009086404A1 (en) 2009-07-09
US8751755B2 (en) 2014-06-10
US20090172261A1 (en) 2009-07-02
WO2009086357A1 (en) 2009-07-09
US8959283B2 (en) 2015-02-17
US8386700B2 (en) 2013-02-26
US20090168525A1 (en) 2009-07-02
WO2009086424A1 (en) 2009-07-09
WO2009086376A1 (en) 2009-07-09
US20120072654A1 (en) 2012-03-22
US20130339582A1 (en) 2013-12-19
EP2225642B1 (en) 2016-11-16

Similar Documents

Publication Publication Date Title
JP5272019B2 (ja) プロセッサを内部メモリに接続するクロスバー・スイッチを含むフラッシュメモリ用ストレージコントローラ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101130

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20111130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20111130

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120524

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120724

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121024

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121031

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121126

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121203

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121225

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130123

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: 20130423

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130513

R150 Certificate of patent or registration of utility model

Ref document number: 5272019

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees