(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-25
(45)【発行日】2024-05-08
(54)【発明の名称】バイナリ対称不変積符号によって符号化された符号語の効率的な誤り訂正
(51)【国際特許分類】
H03M 13/29 20060101AFI20240426BHJP
【FI】
H03M13/29
(21)【出願番号】P 2021571707
(86)(22)【出願日】2020-06-03
(86)【国際出願番号】 IB2020055248
(87)【国際公開番号】W WO2020250091
(87)【国際公開日】2020-12-17
【審査請求日】2022-11-21
(32)【優先日】2019-06-12
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】キャンプ、チャールズ
(72)【発明者】
【氏名】スタニサヴリェヴィッチ、ミロス
(72)【発明者】
【氏名】サイプラス、ロバート、アラン
【審査官】川口 貴裕
(56)【参考文献】
【文献】米国特許出願公開第2016/0188230(US,A1)
【文献】特開2000-004170(JP,A)
【文献】特開平11-338723(JP,A)
【文献】米国特許出願公開第2015/0309869(US,A1)
【文献】Thomas Mittelholzer et al.,Symmetry-Based Subproduct Codes,2015 IEEE International Symposium on Information Theory (ISIT),2015年,pp.251-255
(58)【調査した分野】(Int.Cl.,DB名)
H03M 13/00 - 99/00
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
バイナリ対称不変積符号を復号するためのデコーダであって、
直交する第1および第2の次元を有するデータ・アレイであって、前記第1の次元のみに沿って前記データ・アレイ内にバッファリングされたバイナリ対称不変積符号にアクセスするように構成される、前記データ・アレイと、
誤り位置を記憶するための誤り記憶アレイと、
前記第1の次元に沿って前記データ・アレイからアクセスされたデータ内の誤りを検出および訂正し、前記誤り記憶アレイ内に前記第2の次元に沿った誤り位置を記憶するように構成された第1の訂正回路であって、前記対称不変積符号のデータ対称性に基づいて前記誤り位置を求める、前記第1の訂正回路と、
前記第1の次元に沿って前記データ・アレイからアクセスされたデータの前記第1の訂正回路による受信前に、前記誤り記憶アレイ内に記憶された前記誤り位置に基づいて前記データ・アレイからアクセスされた前記データを訂正する第2の訂正回路と
を含む回路を備える、デコーダ。
【請求項2】
前記バイナリ対称不変積符号が半積符号(HPC)である、請求項1に記載のデコーダ。
【請求項3】
前記データ・アレイが、その中にバッファリングされた前記バイナリ対称不変積符号に、
前記第1の次元の並びごとにのみアクセスするように構成される、請求項1に記載のデコーダ。
【請求項4】
前記第1の訂正回路が、訂正されたデータで前記データ・アレイを更新する、請求項1に記載のデコーダ。
【請求項5】
前記デコーダが、前記第1の次元のみに沿って前記データ・アレイ内にバッファリングされた前記バイナリ対称不変積符号の符号語に反復的にアクセスし、それによって前記符号語の少なくとも一部が、前記第1の次元に沿って複数回アクセスされる、請求項4に記載のデコーダ。
【請求項6】
前記デコーダが、
前記バイナリ対称不変積符号内の誤りが検出されて所定の反復数に達し
たことが初めて生じたことに基づいて、前記バイナリ対称不変積符号の符号語に反復的にアクセスすることを中断する、請求項5に記載のデコーダ。
【請求項7】
前記第1の訂正回路が、クロック・サイクル当たり複数の符号語を復号するように構成され、
前記第2の訂正回路が、クロック・サイクル当たり複数の符号語に前記誤り記憶アレイによって示される訂正を適用するように構成される、請求項1に記載のデコーダ。
【請求項8】
前記第1の訂正回路が、前記デコーダの待ち時間に従って前記誤り記憶アレイ内の前記誤り位置の記憶を指示する、請求項1に記載のデコーダ。
【請求項9】
不揮発性メモリ・システムと、
前記不揮発性メモリ・システムに結合されたコントローラであって、請求項1に記載のデコーダを含む、前記コントローラと
を備えるデータ記憶システム。
【請求項10】
通信チャネルから変調符号化データを受信し、前記変調符号化データを復調し、符号化データを出力するように構成された復調器と、
請求項1に記載のデコーダであって、前記復調器に結合され、前記バイナリ対称不変積符号を含む符号化データを入力として受信する、前記デコーダと
を備えるデータ通信システム。
【請求項11】
バイナリ対称不変積符号を復号する方法であって、
第1の次元のみに沿って、直交する第1および第2の次元を有するデータ・アレイ内にバッファリングされたバイナリ対称不変積符号にアクセスすることと、
第1の訂正回路が、前記第1の次元に沿って前記データ・アレイからアクセスされたデータの誤りを検出および訂正することと、
前記第1の訂正回路が、前記対称不変積符号のデータ対称性に基づいて、誤り記憶アレイ内の前記第2の次元に沿った誤り位置を求め、誤り記憶アレイ内に前記誤り位置を記憶することと、
前記第1の次元に沿って前記データ・アレイからアクセスされたデータの前記第1の訂正回路による受信前に、第2の訂正回路が、前記誤り記憶アレイ内に記憶された前記誤り位置に基づいて前記データ・アレイからアクセスされた前記データを訂正することと
を含む方法。
【請求項12】
前記バイナリ対称不変積符号が半積符号(HPC)である、請求項11に記載の方法。
【請求項13】
前記アクセスすることが、前記データ・アレイ内にバッファリングされた前記バイナリ対称不変積符号に、
前記第1の次元の並びごとにのみアクセスすることを含む、請求項11に記載の方法。
【請求項14】
前記第1の訂正回路が、訂正されたデータで前記データ・アレイを更新することをさらに含む、請求項11に記載の方法。
【請求項15】
前記アクセスすることが、前記第1の次元のみに沿って前記データ・アレイ内にバッファリングされた前記バイナリ対称不変積符号の符号語に反復的にアクセスし、それによって前記符号語の少なくとも一部が、前記第1の次元に沿って複数回アクセスされることを含む、請求項14に記載の方法。
【請求項16】
前記バイナリ対称不変積符号内の誤りが検出されて所定の反復数に達し
たことが初めて生じたことに基づいて、前記バイナリ対称不変積符号の符号語に反復的にアクセスすることを中断することをさらに含む、請求項15に記載の方法。
【請求項17】
前記第1の訂正回路が誤りを検出および訂正することが、前記第1の訂正回路がクロック・サイクル当たり複数の符号語内の誤りを検出および訂正することを含み、
前記第2の訂正回路が前記データを訂正することが、前記第2の訂正回路がクロック・サイクル当たり複数の符号語に前記誤り記憶アレイによって示される訂正を適用することを含む、請求項11に記載の方法。
【請求項18】
前記第1の訂正回路が、復号待ち時間に従って前記誤り記憶アレイ内の前記誤り位置の記憶を指示すること
をさらに含む、請求項11に記載の方法。
【請求項19】
不揮発性メモリ・システムから前記バイナリ対称不変積符号の一部を検索することをさらに含む、請求項11に記載の方法。
【請求項20】
通信リンクから前記バイナリ対称不変積符号の一部を受信することをさらに含む、請求項11に記載の方法。
【請求項21】
コンピュータ・プログラムがコンピュータ
に、請求項11ないし20のいずれか1項に記載の方法を実
行させる
ためのプログラム・コー
ドを含むコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はデータ処理に関し、より詳細には、たとえばデータ記憶システムまたはデータ通信システムでの、バイナリ対称不変積符号(binary symmetry-invariant product code)(たとえば、半積符号(half product code))を利用して符号化されたデータの効率的な誤り訂正に関する。
【背景技術】
【0002】
誤り訂正符号化は、データ・チャネルからデータを回復することのできる精度を改善するために、データ記憶システムまたはデータ通信システムで利用される。チャネルにデータを供給する前に、誤り訂正符号(ECC)に従ってデータを符号化することにより、ECCの特性に依存する範囲でチャネル出力での誤りが識別および訂正され得る。多数のそのようなECC方式が知られている。ECC方式の1つの良く知られているクラスは積符号に基づく。積符号は、2成分ECC符号を使用して、入力データの概念的2次元アレイ(notional two-dimensional array)の行および列を符号化する。
【0003】
従来型積符号の基本構造が
図1に概略的に示されている。入力データ・シンボル(一般には、q≧2として、q個の可能なシンボル値を有するq
ary個のシンボルであり得る)が、n
2行およびn
1列のシンボル位置を有する概念的アレイ内のそれぞれのシンボル位置に割り当てられる。この例では、k
2×k
1個のデータ・シンボルが、n
2行n
1列のアレイの最初のk
2行と最初のk
1列の交点のk
2行k
1列のサブアレイ内のそれぞれの位置に割り当てられる。得られる入力データ・シンボルのアレイが、アレイの行および列を別々に符号化することによって符号化される。第1のECC符号C1が、アレイの各行のk
iシンボル・データ・ワードを長さn
1のC1符号語に符号化するために使用される。この例では、系統的符号化を使用し、それによって入力データが符号語内に保持される。具体的には、所与の行のk
1シンボル・データ・ワードの後に(n
1-k
1)個のパリティ・シンボルを加えることによって、C1符号語のn
1個のコード・シンボルが得られる。次いで、第2のECC符号C2が、各列の終わりに(n
2-k
2)個のパリティ・シンボルを加えることによって、アレイの各列のk
2個のシンボルを長さn
2のC2符号語に符号化するために使用される。得られるアレイ内のn
2×n
1個のコード・シンボルが、積符号の出力符号語を形成する。この基本的概念の拡張では、インターリーブ積符号が、アレイのs>1個の等間隔の列にわたってC2符号を適用し、n
1/s個のC2符号語が得られる。
【0004】
積符号は実際のエンコーダ/デコーダ実装を提供し得、そのデコーダはハード・ディシジョン・ベースであり、したがってソフト・ディシジョン復号に関連する様々な複雑さおよび待ち時間の問題を回避する。インターリーブ積符号のためのいくつかのデコーダは、基本符号構造から定義されるグラフに基づく反復的復号の技術を使用する。簡潔には、2部グラフが、C1符号語にそれぞれ対応するn2個の右ノードと、それぞれのC2符号語に対応するn1/s個の左ノードと共に定義され得る。各右ノードが、s個のエッジによって各左ノードに接続される。1対のノードを接続するs個のエッジは、前述の概念的アレイ内のそれらのノードについてのC1符号語とC2符号語の交点のs個の共通シンボルを表す。C1符号語を1つずつ復号し、次いでC2符号語を1つずつ復号することによって、反復的復号がグラフに基づいて実施される。符号語が首尾よく復号されるごとに、適切なノードから離れるエッジが訂正される。復号が完了するまで、すなわちデコーダによってもはや誤りが検出されず、または所定の最大反復数に達する(このケースでは、デコーダは復号失敗を宣言し得る)まで、プロセスは反復される。
【0005】
積符号に基づく別のECC方式が、J. Justesen、「Error correcting coding for OTN」、IEEE Communications Magazine、September 2010、およびJ. Justesen、Performance of Product Codes and Related Structures with Iterative Decoding、IEEE Transactions on Communications、2011において、光伝送ネットワーク(OTN)の文脈で提案された。半積符号(HPC)と呼ばれるこれらの符号は、行符号C1および列符号C2について同一の符号を使用する積符号である。各コンポーネント符号C1およびC2が、符号長(すなわち、符号語内のシンボル数)をn、次元(すなわち、各符号語に符号化されるデータ・シンボル数)をkとして、レートk/n符号である場合、得られる積符号Cは、長さN=n2、次元K=k2、およびレート(k/n)2を有する。Cの符号語は、前述の概念的アレイに対応する(n行n列)シンボル行列Xによって定義され得、Xの各行および各列は行/列符号の符号語である。次いで、対応する半積符号CHがCH={X-XT:X∈C}によって定義され、XTはXの転置行列である。
【0006】
Xが符号語である場合、行および列符号が同一であるので、XTも符号語である。構成により、CHのすべての符号語YHはゼロ主対角線を有する(どちらかの主対角線はゼロ主対角線であり得るが、本明細書では、ゼロ主対角線は、(n行n列)シンボル行列YHにわたって右上のシンボルから左下のシンボルまで対角に延びるシンボルの線と定義される)。すなわち、ゼロ主対角線上のすべてのシンボルは値ゼロである。CHの定義から、YH=YH
Tであることがわかるので、ゼロ主対角線のそれぞれの側の三角サブアレイ内のn(n-1)/2個のシンボルのセットは同一である。したがって、これらのn(n-1)/2個のシンボルは、半積符号が実効長NH=n(n-1)/2を有するように符号語YHを定義する。HPCを用いて、符号化および反復的復号が積符号と同様に従来通り実施されるが、入力データは、ゼロ主対角線の一方の側の三角サブアレイに制限され、HPCについて次元KH=k(k-1)/2が与えられる。
【0007】
例示的従来技術HPC200が
図2に示されている。HPC200を形成するために、元の入力データ204が、ゼロ主対角線202の下の正方形アレイ内に配置される。次いで、元の入力データ204をコピーし、元の入力データを転置し、得られるデータをゼロ主対角線202の上に配置することによって対称的重複データ206が形成される。次いで、パリティ・データ208が(たとえば、Bose-Chaudhuri-Hocquenghem(BCH)誤り訂正機能を利用して)各行および各列について別々に計算される。符号化の後、データ対称性のために、記憶または送信あるいはその両方を行う必要があるのは、ゼロ主対角線202の上または下のアレイの部分だけである。
【0008】
データがメモリから検索され、またはデータ伝送を介して受信されるとき、検索/受信されたデータを複製および転置してアレイを埋めることによってHPC200が再構築され得る。
図3に示されるように、データの記憶、保持、検索、または伝送、あるいはその組合せの間に生じるどんな誤りも、再構築されたアレイのゼロ主対角線について対称的である。従来の復号(すなわち、行および列の誤りを訂正するために行および列が反復的に処理される誤り訂正プロセス)の間に、まず行フォーマットでアレイ内のデータがアクセスされ、次いで列フォーマットでアクセスされる。
【0009】
現実世界の実装では、標準ソフトウェア手法は、一般にはCPUメモリ内のデータを複製せず、ただ1つのデータのセットに対して演算し、複製誤りの暗黙的訂正から恩恵を受ける。
図3では、行がアレイの下部から上部に処理されると仮定する。各ビットのただ1つのコピーがCPUメモリ内に記憶される場合、本質的に、A、B、およびCで誤りを含む行を訂正する結果として、これらのビット値を含む3つの後続の行のA、B、およびCについての正しい値が得られる。一見して効率的であるが、このソフトウェア・ベースの手法は、ハードウェア・ベースの解決策よりもずっと長い待ち時間を有し、したがって本当に高性能な応用例には適していない。
【0010】
高性能復号を達成するために、HPC復号のハードウェア実装は通常、メモリ内で全HPCアレイ(複製データ206を含む)を形成し、次いで各行を1つずつ、次いで各列を1つずつ反復的に復号する。この手法は従来型ソフトウェア実装よりもずっと高い性能を提供するが、行フォーマットと列フォーマットの両方でデータにアクセスすることを可能にする回路は非常に費用がかかることを本開示は理解している。従来型ハードウェア実装が行データと列データの両方を独立して読取り、訂正することを必要とすること、つまりハードウェアHPC復号実装がアレイ対称性から恩恵を受けないことも本開示は理解している。
【発明の概要】
【0011】
少なくとも1つの実施形態では、デコーダは、ハードウェアにおいて、半積符号(HPC)などのバイナリ対称不変積符号によって符号化された符号語の反復的復号を実施する。データ・アレイ内にバッファリングされた対称不変積符号が、データ・アレイの第1の次元のみに沿ってアクセスされ、対称不変積符号のデータ内の誤りが、誤り訂正回路によって検出および訂正される。誤りが検出されたとき、データ・アレイの直交する第2の次元についての誤り位置が、誤り記憶アレイ内に記憶され、誤り位置は、対称不変積符号の既知のデータ対称性に基づいて求められる。データがデータ・アレイからアクセスされ、誤り訂正回路に送られるときに、記憶された誤り位置に基づいて、誤りが「オン・ザ・フライ」で訂正される。
【0012】
一態様によれば、バイナリ対称不変積符号を復号するためのデコーダが提供され、デコーダは、直交する第1および第2の次元を有するデータ・アレイであって、第1の次元のみに沿ってデータ・アレイ内にバッファリングされたバイナリ対称不変積符号にアクセスするように構成される、データ・アレイと、誤り位置を記憶するための誤り記憶アレイと、第1の次元に沿ってデータ・アレイからアクセスされたデータ内の誤りを検出および訂正し、誤り記憶アレイ内に第2の次元に沿った誤り位置を記憶するように構成された第1の訂正回路であって、対称不変積符号のデータ対称性に基づいて誤り位置を求める、第1の訂正回路と、第1の次元に沿ってデータ・アレイからアクセスされたデータの第1の訂正回路による受信前に、誤り記憶アレイ内に記憶された誤り位置に基づいてデータ・アレイからアクセスされたデータを訂正する第2の訂正回路とを含む回路を備える。
【0013】
別の態様によれば、バイナリ対称不変積符号を復号する方法が提供され、方法は、第1の次元のみに沿って、直交する第1および第2の次元を有するデータ・アレイ内にバッファリングされたバイナリ対称不変積符号にアクセスすることと、第1の訂正回路が、第1の次元に沿ってデータ・アレイからアクセスされたデータ内の誤りを検出および訂正することと、第1の訂正回路が、対称不変積符号のデータ対称性に基づいて、誤り記憶アレイ内の第2の次元に沿った誤り位置を求め、誤り記憶アレイ内に誤り位置を記憶することと、第1の次元に沿ってデータ・アレイからアクセスされたデータの第1の訂正回路による受信前に、第2の訂正回路が、誤り記憶アレイ内に記憶された誤り位置に基づいてデータ・アレイからアクセスされたデータを訂正することとを含む。
【0014】
別の態様によれば、コンピュータ・プログラムがコンピュータ上で実行されるとき、先行するパラグラフの方法を実施するように適合されたプログラム・コード手段を含むコンピュータ・プログラムが提供される。
【0015】
次に、添付の図面を参照しながら、本発明の好ましい実施形態が単に例として説明される。
【図面の簡単な説明】
【0016】
【
図2】従来技術の半積符号(HPC)を示す図である。
【
図3】対称的データ誤りを含む従来技術のHPCを示す図である。
【
図4】一実施形態によるデータ記憶システムの高レベル・ブロック図である。
【
図5】一実施形態によるデータ通信システムの高レベル・ブロック図である。
【
図6】
図4のデータ記憶システムの例示的実装を示す図である。
【
図7】
図4のデータ記憶システムの例示的実装を示す図である。
【
図8】一実施形態による例示的デコーダを示す図である。
【
図9】一実施形態による、デコーダがバイナリ対称不変積符号を復号する例示的プロセスの高レベル論理フローチャートである。
【
図10】一実施形態による、デコーダによる例示的HPC内の誤りの訂正を示す図である。
【
図11】一実施形態による、デコーダによる例示的HPC内の誤りの訂正を示す図である。
【
図12】一実施形態による、デコーダによる例示的HPC内の誤りの訂正を示す図である。
【
図13】一実施形態による、デコーダによる例示的HPC内の誤りの訂正を示す図である。
【発明を実施するための形態】
【0017】
少なくとも1つの実施形態によれば、本願は、ハードウェア回路において、半積符号(HPC)などのバイナリ対称不変積符号によって符号化された符号語の反復的復号を実施するデコーダを対象とする。データ・アレイ内にバッファリングされた対称不変積符号は、データ・アレイの第1の次元のみに沿ってアクセスされ、対称不変積符号のデータ内の誤りが、第1の誤り訂正回路によって検出および訂正される。誤りが検出されたとき、データ・アレイの直交する第2の次元についての誤り位置が、誤り記憶アレイ内に記憶され、誤り位置は、対称不変積符号の既知のデータ対称性に基づいて求められる。データがデータ・アレイからアクセスされ、第1の誤り訂正回路に送られるときに、記憶された誤り位置に基づいて、第2の訂正回路によって誤りが「オン・ザ・フライ」で訂正される。本願は、関連する方法およびプログラム製品をさらに対象とする。
【0018】
本明細書で説明される解決策は、上記で論じたように従来型HPCに適用することができるが、本明細書で開示される解決策が、行当たり複数のタイプのコンポーネント符号と、列当たり複数のタイプのコンポーネント符号で形成された対称不変積符号にも適用可能であることを理解されたい。同様に、符号構築で複数のタイプのコンポーネント符号を使用することによってHPCの別の拡張を得ることができる。たとえば、同一の長さnであるが、異なる誤り訂正能力t1およびt2を有する2つのタイプのコンポーネント符号を使用し得る。HPCのケースでは、行/列の第1の半分がt1誤り訂正コンポーネント符号からの符号語であり、行/列の第2の半分がt2誤りコンポーネント符号からの符号語であることを必要とし得る。
【0019】
再び図を参照し、具体的には
図4を参照すると、データ記憶デバイス上のECC符号化データを読み書きするためのデータ記憶システム400の例示的実施形態の高レベル・ブロック図がある。データ記憶システム400は、メモリ404(たとえば、フラッシュ・メモリまたは他の不揮発性ランダム・アクセス・メモリ(NVRAM))と、メモリ404内のデータを読み書きするための読取り/書込み装置406とを含む記録チャネル402を含む。
図4では単一のブロックとして示されているが、メモリ404は、たとえば、単一のチップまたはダイから、メモリ・チップの複数のパッケージをそれぞれ含む複数のストレージ・バンクに及ぶ、データ記憶ユニットの任意の所望の構成を備え得る。読取り/書込み装置406は、メモリ404内のワード線およびビット線のアレイに適切な電圧を印加することによって読取りおよび書込みの目的でメモリ・セルをアドレス指定して、既知の方式で読取りおよび書込み動作を実施する。
【0020】
データ記憶システム400は、エンコーダ410およびデコーダ412をさらに含む。エンコーダ410は、バイナリ対称不変積符号(たとえば、HPC)に従って入力データを符号シンボルに符号化し、符号シンボルを記録チャネル402に出力する。デコーダ412は、読取り/書込み装置406によってメモリ404から得られたリードバック・シンボルを処理して、対称不変積符号を復号し、したがって元の入力データを回復し、出力する。
【0021】
図5にさらに示されるように、HPCなどの対称不変積符号は、データ通信システム500などのデータ通信システムにも応用される。データ通信システム500の送信機は、
図4を参照しながら上記で説明したようなエンコーダ510と、変調器508と、送信デバイス(TX)506とを含む。エンコーダ510によって出力された符号シンボルが、変調器508を介して送信デバイス506に供給され、送信デバイス506は、通信リンク504を介して符号シンボルを送信するための信号を生成する。通信リンク504は、物理(ワイヤードまたはワイヤレス)リンク、あるいは1つまたは複数の物理リンクを介する論理リンクを含み得る。データ通信システムの受信機が、リンク504を介して送信された信号を受信するための受信デバイス(RX)516と、受信した信号を復調するための復調器518と、復調器518から受信した、得られる符号シンボルを復号するための前述のようなデコーダ512とを含む。
【0022】
好ましい実施形態では、エンコーダ410、510、およびデコーダ412、512の機能が、高性能を達成するためにハードウェア回路(すなわち、集積回路)で実装される。しかしながら、他の実施形態では、エンコーダ410、510、およびデコーダ412、512の機能は、ソフトウェアまたはファームウェアあるいはその両方のプログラム命令を実行するハードウェアで実装され得る。たとえば、符号化および復号は、全体的または部分的に、符号化および復号を実施するために1つまたは複数のプロセッサをエンコーダまたはデコーダあるいはその両方として構成するソフトウェアの実行によって実施され得る。
【0023】
次に
図6~7を参照すると、
図4のデータ記憶システム400などのデータ記憶システムの例示的実装のより詳細なブロック図が示されている。
図6は、命令およびデータを処理する1つまたは複数のプロセッサ604を有するプロセッサ・システム602などの、1つまたは複数のホストを含むデータ処理環境600を示す。さらに、プロセッサ・システム602は、プログラム・コード、オペランド、または1つもしくは複数のプロセッサ604によって実施された処理の実行結果、あるいはその組合せを記憶し得るローカル・ストレージ606(たとえば、ダイナミック・ランダム・アクセス・メモリ(DRAM)またはディスク)を含み得る。様々な実施形態では、プロセッサ・システム602は、たとえば、モバイル・コンピューティング・デバイス(スマートフォンやタブレットなど)、ラップトップまたはデスクトップ・パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム(インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なPOWER(R)シリーズのサーバのうちの1つなど)、またはメインフレーム・コンピュータ・システムであり得る。プロセッサ・システム602はまた、ARM(R)、POWER(R)、Intel x86(R)、またはメモリ・キャッシュ、メモリ・コントローラ、ローカル・ストレージ、I/Oバス・ハブなどのいずれかと組み合わされた任意の他のプロセッサなどの様々なプロセッサを使用する組込みプロセッサ・システムであり得る。
【0024】
各プロセッサ・システム602は、I/Oチャネル610を介してデータ記憶システム620に直接的に(すなわち、どんな介在デバイスも用いずに)、または間接的に(すなわち、少なくとも1つの中間デバイスを通じて)結合される入力/出力(I/O)アダプタ608をさらに含む。様々な実施形態では、I/Oチャネル610は、たとえば、ファイバ・チャネル(FC)、FC over Ethernet(R)(FCoE)、Internet Small Computer System Interface (iSCSI)、InfiniBand(R)、伝送制御プロトコル/インターネット・プロトコル(TCP/IP)、Peripheral Component Interconnect Express(PCIe)などを含む、既知の、または将来開発される通信プロトコルのいずれか1つまたは組合せを利用し得る。I/Oチャネル610を介して通信されるI/O要求は、プロセッサ・システム602がデータ記憶システム620にデータを要求する読取り要求と、プロセッサ・システム602がデータ記憶システム620内へのデータの記憶を要求する書込み要求とを含む。
【0025】
必須ではないが、図示される実施形態では、データ記憶システム620は、データ記憶システム620がそれを通じてI/Oチャネル610を介してホストのI/O要求を受信し、それに応答する複数のインターフェース・カード622を含む。各インターフェース・カード622は、フォールト・トレランスおよびロード・バランシングを促進するために複数のRedundant Array of Inexpensive Disks(RAID)コントローラ624のそれぞれに結合される。RAIDコントローラ624のそれぞれは(たとえばPCIeバスによって)不揮発性記憶媒体に結合され、図示される例では、不揮発性記憶媒体は、NANDフラッシュ・メモリを担持する複数のフラッシュ・カード626を含む。他の実施形態では、代替の不揮発性記憶デバイスまたは追加の不揮発性記憶デバイスあるいはその両方が利用され得る。
【0026】
図示される実施形態では、データ記憶システム620の動作が冗長システム管理コントローラ(SMC)623によって管理され、冗長SMC623はインターフェース・カード622およびRAIDコントローラ624に結合される。様々な実施形態では、システム管理コントローラ623は、ハードウェア、あるいはファームウェアもしくはソフトウェアまたはその両方を実行するハードウェアを利用して実装され得る。
【0027】
図7は、
図6のデータ記憶システム620のフラッシュ・カード626の例示的実施形態のより詳細なブロック図を示す。フラッシュ・カード626は、フラッシュ・カード626とRAIDコントローラ624との間のインターフェースとして働くゲートウェイ730を含む。ゲートウェイ730は、汎用プロセッサ(GPP)732に結合され、GPP732は、ゲートウェイ730によって受信されたI/O要求に関する前処理を実施し、またはフラッシュ・カード626によるI/O要求のサービシングをスケジューリングし、あるいはその両方を行うように(たとえば、プログラム・コードによって)構成され得る。GPP732は、処理中にGPP732によって作成され、参照され、もしくは修正され、またはその組合せが行われたデータ、あるいはフラッシュ・コントローラ740のうちの1つまたは複数に宛てられた、ゲートウェイ730を通じて流れるデータを好都合にバッファリングすることのできるGPPメモリ734(たとえば、ダイナミック・ランダム・アクセス・メモリ(DRAM))に結合される。
【0028】
ゲートウェイ730は複数のフラッシュ・コントローラ740にさらに結合され、複数のフラッシュ・コントローラ740のそれぞれは、それぞれのNANDフラッシュ・メモリ・システム750を制御する。フラッシュ・コントローラ740は、たとえば、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはマイクロプロセッサ、あるいはその組合せによって実装され得、それぞれは、関連するフラッシュ・コントローラ・メモリ742(たとえば、DRAM)を有する。フラッシュ・コントローラ740がFPGAと共に実装される実施形態では、GPP732は、データ記憶システム620の起動中にフラッシュ・コントローラ740をプログラムおよび構成し得る。起動後、一般の動作の際に、フラッシュ・コントローラ740は、NANDフラッシュ・メモリ・システム750内に記憶されたデータを読取り、またはNANDフラッシュ・メモリ・システム750内にデータを記憶し、あるいはその両方を行うことを要求するゲートウェイ730からの読み書き要求を受信する。フラッシュ・コントローラ740は、たとえば、NANDフラッシュ・メモリ・システム750にアクセスして、要求されたデータをNANDフラッシュ・メモリ・システム750から読取り、またはNANDフラッシュ・メモリ・システム750に書込むことによって、あるいはNANDフラッシュ・メモリ・システム750に関連付けられるメモリ・キャッシュ(図示せず)にアクセスすることによって、これらの要求にサービスする。
【0029】
フラッシュ・コントローラ740は、NANDフラッシュ・メモリ・システム750内の特定のメモリ位置へのアクセスを可能にする論理-物理アドレス変換を提供するフラッシュ変換層(FTL)を実装する。一般には、フラッシュ・コントローラ740によってプロセッサ・システム602などのホスト・デバイスから受信されたI/O要求は、データをアクセス(読取りまたは書込み)すべき論理ブロック・アドレス(LBA)と、書込み要求の場合、データ記憶システム620に記憶すべき書込みデータとを含む。I/O要求はまた、アクセスすべきデータの量(またはサイズ)を指定し得る。データ記憶システム620によってサポートされるプロトコルおよび特徴に応じて、他の情報も通信され得る。フラッシュ変換層は、RAIDコントローラ624から受け取ったLBAを、NANDフラッシュ・メモリ・システム750内の対応する物理位置に割り当てられた物理アドレスに変換する。フラッシュ・コントローラ740は、アドレス変換を実施し、またはフラッシュ・コントローラ・メモリ742内に好都合に記憶され得る、論理-物理変換テーブル(LPT)などの論理-物理変換データ構造内の論理アドレスと物理アドレスとの間のマッピングを記憶し、あるいはその両方を行い得る。
【0030】
NANDフラッシュ・メモリ・システム750は様々な実施形態で多くの形態を取り得る。
図7に示される実施形態では、各NANDフラッシュ・メモリ・システム750は、複数(たとえば、32個)の個々にアドレス指定可能なNANDフラッシュ・メモリ記憶デバイス752を含む。図示される例では、フラッシュ・メモリ記憶デバイス752は、基板に実装されたフラッシュ・メモリ・モジュール、たとえばSingle Level Cell(SLC)、Multi-Level Cell(MLC)、Three Level Cell(TLC)、またはQuad Level Cell(QLC) NANDフラッシュ・メモリ・モジュールの形態を取る。好ましくは、フラッシュ・メモリ記憶デバイス752から読み取られたデータの忠実度は、たとえばフラッシュ・コントローラ740、またはGPP732やRAIDコントローラ624などの高レベル・コントローラ、あるいはその両方による、ECC符号化の実装を通じて高められる。図示される実施形態では、ECC符号化および復号が、少なくともフラッシュ・コントローラ740において、エンコーダ744およびデコーダ746によって実装される。
【0031】
次に
図8を参照すると、一実施形態によるデコーダ800の例示的実施形態が示されている。デコーダ800は、デコーダ412、512、または746のいずれかを実装するために利用され得、バイナリ対称不変積符号(たとえば、HPC)を利用して符号化されたデータを復号する。
【0032】
図8に示されるように、デコーダ800は、バイナリ対称不変積符号を利用して符号化された未訂正の符号語の復号を制御する制御回路802を含む。さらに、デコーダ800は、バイナリ対称不変積符号が復号されるときにバイナリ対称不変積符号をバッファリングするデータ・アレイ804を含む。従来通り、データ・アレイ804は、本明細書ではそれぞれ行および列と呼ばれる、直交する等しいサイズの第1および第2の次元を含む。従来型デコーダとは対照的に、好ましくは、データ・アレイ804は、その第1および第2の次元の一方のみに沿って復号し、他方に沿って復号しないように、その中にバッファリングされたバイナリ対称不変積符号にアクセスすることを可能にする回路を含む。そのような制限により、ハードウェア回路内のデコーダ800を実装する費用が大いに削減される。簡単のために、以下では、データ・アレイ804が、行ごとにのみアクセスされ、列ごとにアクセスされないと仮定するが、データ・アレイ804内にバッファリングされるバイナリ対称不変積符号のデータ対称性を考えると、アクセスされる次元の選択は完全に任意であることを理解されたい。
【0033】
データ・アレイ804は列訂正回路806に結合され、列訂正回路806は、誤り記憶アレイ810内に記憶された誤り位置情報に基づいて、データ・アレイ804から読み出された行符号語内の個々のビット位置を、必要に応じて、「オン・ザ・フライ」で訂正するように構成される。次いで、場合によっては列訂正回路806によって修正された行符号語が、行訂正回路808によって完全に復号される。当技術分野で既知のように、行訂正回路808は、たとえばBose-Chaudhuri-Hocquenghem(BCH)誤り訂正機能を実装し得る。行符号語の復号に基づいて、行訂正回路808は、誤り記憶アレイ810内の訂正された誤りがあればその位置を記録する。さらに、行訂正回路808は、(列訂正回路806または行訂正回路808あるいはその両方によって行われた訂正があればそれを伴う)復号された行符号語をデータ・アレイ804内に書き戻す。
【0034】
次に
図9を参照すると、一実施形態での、
図8のデコーダ800などのデコーダがバイナリ対称不変積符号を復号する例示的プロセスの高レベル論理フローチャートが示されている。
図9のプロセスはブロック900から始まり、次いでブロック902に進み、ブロック902は、以下ではHPCと仮定されるバイナリ対称不変積符号の一部をデコーダ800が受信することを示す。上記のように、HPCは、デコーダ800によって、たとえばデータ記憶システム400の記録チャネル402、またはデータ通信システム500の伝送リンク504から受信され得る。HPCの部分の受信に応答して、デコーダ800の制御回路802は、HPCの受信した部分(たとえば、ゼロ主対角線の下のアレイの三角形部分)でデータ・アレイ804の一部を埋め、HPCの受信した部分内のデータを複製して、データ・アレイ804内の全データ対称HPCを形成する。
【0035】
ブロック902に続いて、制御回路802は、データ・アレイ804の単一の次元のみに沿ったHPCの反復的復号を指示する。したがって、一例では、制御回路802は、HPCにアクセスさせ、列符号語ではなく、行符号語によって復号させる。第2の次元に沿ったHPCのアクセスをなくすことにより、HPCを復号する待ち時間が半分に削減される。
【0036】
制御回路802は、ブロック904で、データ・アレイ804内にバッファリングされたHPCのすべての行符号語が復号のためにアクセスされたか否かを判定することによって反復的復号プロセスを開始する。アクセスされた場合、プロセスは、以下で説明されるブロック920に進む。アクセスされなかった場合、プロセスはブロック910に進む。ブロック910では、制御回路802は、HPCの最初または次の行符号語をデータ・アレイ804から読み出させる。ブロック912に示されるように、行符号語が復号のために行訂正回路808に送信されるとき、列訂正回路806は、誤り記憶アレイ808によって誤りを含むと識別された行符号語のビットがあればそれを「オン・ザ・フライ」で訂正(すなわち、反転)し、そのような訂正を伴う行符号語を行訂正回路808に転送する。場合によっては列訂正回路806によって修正された行符号語の受信に応答して、行訂正回路808は、誤りがあればそれを訂正するために符号語のパリティ部分を利用して符号語を復号する(ブロック914)。上記のように、一実施形態では、行訂正回路808は、たとえば従来型BCH誤り訂正機能を利用し得る。ブロック914にさらに示されるように、行符号語内の何らかの誤りが訂正される場合、行訂正回路808は、誤り記憶アレイ810内の誤り位置を記録し、したがって列訂正回路806が誤り位置情報を利用して、HPCの既知のデータ対称性に基づいて、1つまたは複数の追加の行符号語内のビットを訂正することを可能にする。ブロック916では、行訂正回路808が復号された行符号語をデータ・アレイ802内の元の位置に書き戻す。その後で、プロセスはブロック904に戻る。
【0037】
次にブロック920を参照すると、制御回路802は、行符号語のすべてにわたる最後の反復の間に、HPCの行符号語のいずれかで何らかの誤りが検出されたか否かを判定する。最後の反復の間に行符号語のいずれでも誤りが検出されなかった場合、HPCは首尾よく復号され、プロセスはブロック922に進み、ブロック922は、制御回路802が、復号されたHPCの行符号語をデータ・アレイ804から、たとえばプロセッサ・システム602に、またはデータ通信システム500の構成要素に出力させることを示す。その後で、
図9のプロセスはブロック924で終了する。しかしながら、HPCの行符号語のすべてにわたる最後の反復の間に少なくとも1つの行符号語内に少なくとも1つの誤りが見つかったと制御回路802がブロック920で判定した場合、制御回路802は、ブロック926で、HPCの行符号語にわたる最大反復数(たとえば、3)が実施されたか否かを判定する。実施されていない場合、
図9のプロセスはページ連結子Aを通じて、説明したブロック910およびそれに続くブロックに戻る。しかしながら、HPCの行符号語のすべてにわたる最大反復数が実施されたと制御回路802がブロック926で判定した場合、
図9のプロセスは、ブロック928でエラーと共に終了し、デコーダ800は、必要なエラー処理があればそれを開始する。
【0038】
次に
図10~13を参照して、
図9のプロセスを利用する、
図8のデコーダによる例示的HPC内の誤りの訂正の一例が与えられる。この例では、データ・アレイ804は、R0からR19およびC0からC19とそれぞれ番号付けされる20行20列を有する。この例では、所与の行(または列)内の最大で3つの誤りをゼロ待ち時間で訂正することのできるBose-Chaudhuri-Hocquenghem(BCH)誤り訂正機能を利用してHPCが符号化されると仮定する。この誤り訂正能力の結果として、好ましくは、誤り記憶アレイ810は、行当たり最大で3つの誤り位置を記憶するための容量を含む。誤り記憶アレイがすべて「無効」値(空き状態)に初期化され、その結果、列訂正回路806は当初、データ・アレイ804から読み出される行符号語に対するどんな訂正も実施しないことになる。
【0039】
全入力HPCがデータ・アレイ804内で確立された後、制御回路802は、行R0から始めて、データ・アレイ804から行符号語を反復的かつ順番に読み出させ、BCH復号のために列訂正回路806を通じて行訂正回路808に渡させる。
図10に示されるように、行R0およびR1内の行符号語はどんな誤りも含まないが、行R2内の行符号語は当初、列C10、C4、およびC3内に3つの誤りを含む。これらのビット誤りを検出したことに応答して、行訂正回路808は、表1に示されるように表され得る誤り記憶アレイ810を更新する。示されるように、誤り記憶アレイ810は、修正すべき3つの誤り、すなわち列C2内の行R3、R4、およびR10内のビットを記録する。気付くはずであるが、これらの3つの誤りは、行R2の列C3、C4、およびC10内で検出される誤りと対称である。
【0040】
【表1】
行R2内の誤りの訂正に続いて、行訂正回路808はデータ・アレイ804を更新し、
図11に示されるように、データ・アレイ804は一時的に非対称となる。
【0041】
この例を続けると、次に行R3内の行符号語がデータ・アレイ804から読み出され、列訂正回路806を通じて行訂正回路808に渡される。この行符号語が送信されるとき、列訂正回路806が列C2内の誤りを訂正し、誤り記憶アレイ810内の列C2に対応するエントリから「3」を除去するように誤り記憶アレイ810を更新する。行訂正回路808が行R3の行符号語についてBCH復号を実施するとき、行符号語が行訂正回路808によって受信される前に、唯一の誤りが列訂正回路806によって既に訂正されているので、誤りは見つからない。したがって、行訂正回路808は誤り記憶アレイ810内にどんな新しい誤り位置も記憶せず、したがって誤り記憶アレイ810は、以下の表IIに示されるように見えることになる。行訂正回路808が、訂正された行符号語を行R3内に書き戻した後、データ・アレイ804は
図12に示されるように見えることになる。
【0042】
【0043】
次に、行R4内の行符号語がデータ・アレイ804から読み出され、列訂正回路806を通じて行訂正回路808に渡される。示されるように、行R4についての行符号語は当初、行訂正回路808によって実装されるBCHアルゴリズムによって訂正され得る誤りよりも多い、4つの誤りを含む。しかしながら、列訂正回路806は、誤り記憶アレイ810によって与えられる情報に基づいて、行訂正回路808による行符号語の受信前に、行符号語の列2内のビットを訂正するので、行訂正回路808は、列訂正後に誤りの存在が4つではなく、3つであることを考えると、行符号語を完全に復号することができる。行訂正回路808が行符号語を復号し、データ・アレイ802および誤り記憶アレイ810を更新した後、データ・アレイ802は、
図13に示されるように見えることになり、誤り記憶アレイ810は、以下の表IIIに示される状態を有することになる。
【0044】
【0045】
この復号プロセスは、行R19にわたって反復的に続行されることになる。データ・アレイ802のすべての行にわたる第1の反復が完了すると、誤り記憶アレイ810はクリアされず、第2の反復が開始する。このプロセスは、以下の2つの終了条件の一方が満たされるまで続行されることになる。(1)HPCが誤りを含まない(すなわち、どんな誤りも発見されることなく、HPCのすべての行符号語が行訂正回路808によって復号される)、または(2)最大反復限度に達する(すなわち、HPCが訂正されない)。
【0046】
上記の説明では、説明しやすいように、実際のハードウェア実装での待ち時間およびパイプライン化の効果を無視した。待ち時間およびパイプライン化の追加の影響を示すために、行訂正回路808の待ち時間が5サイクルであること、つまり特定の行符号語がBCH復号を開始するとき、得られる訂正が5クロック・サイクル後までは利用可能とならないことを仮定する。この仮定では、行R2内の誤りの位置が、行R7が行訂正回路808に入りつつあるまで、後続の行の訂正のために利用可能とはならない。したがって、行訂正回路808は、行R2を復号することに基づいて、誤り記憶アレイ810内の行R3、R4、およびR10の列C2に対する訂正を記録するが、この誤り位置情報が利用可能になる前に、行R3およびR4の符号語が行訂正回路808内で受信されることになる。その結果、行R3およびR4の行符号語は、理想的なゼロ待ち時間のケースでは、行R2内の誤りが検出される、データ・アレイ804にわたる同一の反復中に、列訂正回路806によって「オン・ザ・フライ」で列訂正され得るが、誤り記憶アレイ810がこれらの行符号語内の誤り位置を反映するまでには、行訂正回路808によって既に処理されている。幸いにも、列訂正回路806がこの第1の反復でこれらの列誤りを訂正することに失敗することは、BCH復号の最終的結果に影響を及ぼさない。列訂正回路806は、誤り記憶アレイ810内に記録された任意の誤り位置情報を利用して、次のパスでビット(たとえば、行R3およびR4の行符号語の列C2内のビット)を訂正するからである。シミュレーションおよび解析により、説明したように、待ち時間は、理想的なゼロ待ち時間のケースに対して、どんな復号性能の著しい損失にもならないことが実証されている。
【0047】
好ましい実施形態では、行訂正回路808は、その復号待ち時間と共に設計され、その復号待ち時間に従って、誤り記憶アレイ内の誤り位置の記憶を指示する。したがって、たとえば、行訂正回路808は、誤り記憶アレイ810内の、行R10の列C2内の誤り位置の記憶を、行R3およびR4の列C2内の誤り位置の記憶の前にインテリジェントに指示し得る。誤り記憶アレイ810の誤り位置の記憶のこのインテリジェントな指示により、可能な最大の範囲で、対称的誤り(たとえば、行R10の列C2内の誤り)が、対応する誤りが検出された行符号語にわたる同一の反復中に、列訂正回路806によって訂正され得ることが保証される。
【0048】
上記で与えた例では、並列化の効果も明示的には論じられていない。少なくともいくつかの実施形態では、列訂正回路806内の列訂正ロジックの並列インスタンスと、行訂正回路808内の復号ロジックの並列インスタンスの実装を通じて、復号スループットを向上させることが望ましい。たとえば、一実施形態では、行訂正回路808は、クロック・サイクル当たり4つの符号語を復号することのできる復号ロジックの4つのインスタンスを含み得、同様に列訂正回路806は、クロック・サイクル当たり4つの符号語内のビットを訂正することのできる列訂正ロジックの4つのインスタンスを含み得る。そのような実施形態では、ロジックの1つのインスタンスが行R0、R4、R8、R12、...の行符号語を処理する場合、ロジックの第2のインスタンスが、論理インスタンスの数を法とするデータ・アレイの次元によって決定される、行R1、R5、R9、R13などの行符号語を処理することが好ましい。列訂正ロジックのインスタンスのいずれかによって訂正された誤り位置が、復号ロジックのインスタンスのいずれかによって検出され得ることに留意されたい。
【0049】
説明したように、少なくとも1つの実施形態では、バイナリ対称不変積符号を復号するためのデコーダが、直交する第1および第2の次元を有するデータ・アレイを含む。データ・アレイは、第1の次元のみに沿ってデータ・アレイ内にバッファリングされたバイナリ対称不変積符号にアクセスするように構成される。デコーダはまた、誤り位置を記憶するための誤り記憶アレイと、第1の次元に沿ってデータ・アレイからアクセスされたデータ内の誤りを検出および訂正し、誤り記憶アレイ内に第2の次元に沿った誤り位置を記憶するように構成された第1の訂正回路とを含む。第1の訂正回路は、対称不変積符号のデータ対称性に基づいて誤り位置を求める。デコーダはまた、第1の次元に沿ってデータ・アレイからアクセスされたデータの第1の訂正回路による受信前に、誤り記憶アレイ内に記憶された誤り位置に基づいてデータ・アレイからアクセスされたデータを訂正する第2の訂正回路を含む。
【0050】
記載の実施形態は、コストと性能の両方で従来技術のデコーダに勝る著しい利点をもたらし得る。たとえば、バイナリ対称不変積符号を両方の次元に沿ってアクセスするという要件をなくすことにより、回路の費用および面積が、特に、各次元で300以上のビットであり得る大きいバイナリ対称不変積符号について著しく削減される。さらに、両方の次元に沿ってバイナリ対称不変積符号にアクセスする必要をなくすことにより、復号待ち時間が最大で半分に短縮され得る。さらに、記載の実施形態は、対称的誤りが「再発見」され、後続の符号語の復号中に訂正されるのを待つのではなく、データ対称性を活用してそのような対称的誤りを「オン・ザ・フライ」で訂正する。
【0051】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令を有する1つまたは複数のコンピュータ可読記憶媒体を含み得る。
【0052】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を保持および記憶し得る有形デバイスであり得る。コンピュータ可読記憶媒体は、限定はしないが、たとえば電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の適切な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピィ・ディスク、パンチ・カードや、命令が記録された溝の中の隆起構造などの機械的に符号化されたデバイス、および上記の任意の適切な組合せが含まれる。本明細書では、コンピュータ可読記憶媒体は、電波または他の自由に伝播する電磁波、導波路または他の伝送媒体を通じて伝播する電磁波(たとえば、光ファイバ・ケーブルを通る光パルス)、またはワイヤを通じて伝送される電気信号など、本質的に一時的信号であると解釈されるべきではない。
【0053】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体内に記憶するためにコンピュータ可読プログラム命令を転送する。
【0054】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語と、「C」プログラミング言語または類似のプログラミング言語などの従来の手続型プログラミング言語とを含む1つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードのどちらかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上、かつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータまたはサーバ上で実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続され得、あるいは(たとえば、インターネット・サービス・プロバイダを使用して、インターネットを通じて)外部コンピュータに接続が行われ得る。いくつかの実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路が、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行して、電子回路を個別設定し得る。
【0055】
本発明の態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら本明細書で説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることを理解されよう。
【0056】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される命令により、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定される機能/動作を実装するための手段を生み出すように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに与えられ、マシンが作り出され得る。これらのコンピュータ可読プログラム命令はまた、命令を記憶するコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定される機能/動作の態様を実装する命令を含む製造品を含むように、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示し得るコンピュータ可読記憶媒体内に記憶され得る。
【0057】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または別のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定される機能/動作を実装するように、コンピュータ、他のプログラム可能データ処理装置、または別のデバイス上にロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実施させて、コンピュータ実装プロセスが生成され得る。
【0058】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。この点で、フローチャートまたはブロック図の各ブロックは、1つまたは複数の指定の論理的機能を実装するための1つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または部分を表し得る。いくつかの代替の実装では、ブロック内に記載の機能は、図に記載されている以外の順序で行われ得る。たとえば、連続して示される2つのブロックは、実際にはほぼ同時に実行され得、またはブロックは、関係する機能に応じて、時には逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組合せが、指定の機能または動作を実施し、あるいは専用ハードウェアおよびコンピュータ命令の組合せを実施する専用ハードウェア・ベースのシステムによって実装され得ることにも留意されよう。
【0059】
1つまたは複数の好ましい実施形態を参照しながら説明されたように本発明が具体的に示されたが、本発明の思想および範囲から逸脱することなく、その中で形態および細部の様々な変更が行えることを当業者は理解されよう。たとえば、特定の機能を指示するフラッシュ・コントローラを含むデータ記憶システムに関して態様が説明されたが、代替として、そのような機能を実施するように、またはそのような機能を実施させるようにプロセッサによって処理され得るプログラム・コードを記憶する記憶デバイスを含むプログラム製品として本発明が実装され得ることを理解されたい。本明細書では、「記憶デバイス」が、法定の製造品のみを含み、本質的に信号媒体、本質的に一時的伝播信号、および本質的にエネルギーの形態を除外するように具体的に定義される。
【0060】
さらに、NANDフラッシュ・メモリの使用を含む実施形態が説明されたが、本発明の実施形態はまた、任意の他のタイプの不揮発性ランダム・アクセス・メモリ(NVRAM)と共に使用され得ることを理解されたい。
【0061】
以下の特定の構造および機能の上記で説明された図および記載の説明は、出願人が発明したものの範囲、または添付の特許請求の範囲の範囲を限定するために提示されるものではない。むしろ、図および記載の説明は、特許保護が求められる発明を作成および使用するように当業者に教示するために与えられる。明快および理解のために、本発明の市販の実施形態のすべての特徴が説明または図示されているわけではないことを当業者は理解されよう。本発明の態様を組み込む実際の市販の実施形態の開発は、市販の実施形態についての開発者の最終的目標を達成するために多数の実装特有の決定を必要とすることを当業者は理解されよう。そのような実装特有の決定には、特定の実装、位置、その時々によって変動し得る、システム関連、ビジネス関連、政府関連のコンプライアンス、および他の制約が含まれ得るが、それに限定されない可能性が高い。絶対的な意味で開発者の努力は複雑で時間がかかり得るが、それでもそのような努力は、本開示の特典を有する当業者にとっては定型化された作業となる。開示され、本明細書で教示される発明には、多数の様々な修正形態および代替形態の余儀があることを理解されたい。最後に、限定はしないが、「a」などの単数形の用語の使用は項目数の限定を意図するものではない。