-
Hintergrund
-
Die
vorliegende Erfindung betrifft allgemein den Betrieb nichtflüchtiger
Flash-Speichersysteme und betrifft spezieller das Auffrischen und
Korrigieren von in diesen gespeicherten Daten, insbesondere bei
Speichersystemen, die sehr große
Speicherzellenblöcke
aufweisen.
-
Es
werden heutzutage viele kommerziell erfolgreiche nichtflüchtige Speicherprodukte
genutzt, insbesondere in Form von Karten mit kleinem Formfaktor,
bei welchen eine auch als Array bezeichnete Anordnung aus Flash-EEPROM-(Electrically
Erasable and Programmable Read Only Memory)-Zellen genutzt wird,
die auf einem oder mehreren integrierten Schaltungschips ausgebildet
sind. Ein Speicher-Controller, der üblicherweise aber nicht notwendigerweise
auf einem separaten integrierten Schaltungschip ausgebildet ist,
ist mit einem Host gekoppelt, mit welchem die Karte entfernbar verbunden
wird, und steuert den Betrieb des Speicher-Arrays in der Karte.
Ein solcher Controller umfasst typischerweise einen Mikroprozessor,
irgendeinen nichtflüchtigen
Nur-Lese-Speicher (ROM), einen flüchtigen Direktzugriffsspeicher
(RAM) und eine oder mehrere Spezialschaltungen wie beispielsweise
eine Schaltung, die einen Fehlerkorrekturcode (ECC) anhand von Daten
berechnet, wenn diese während
der Programmierung und des Lesens von Daten durch den Controller
laufen. Einige der kommerziell erhältlichen Karten sind CompactFlashTM(CF)-Karten, MultiMedia-Karten (MMC), Secure
Digital(SD)-Karten, Smart Media-Karten, persönliche Tags (P-Tag) und Memory
Stick-Karten. Hosts umfassen Personalcomputer, Notebook-Computer,
Persönliche
Digitale Assistenten (PDAs), verschiedene Datenkommunikationsgeräte, digitale
Kameras, Mobiltelefone, tragbare Audioabspielgeräte, Kfz-Soundsysteme und ähnliche
Arten von Geräten.
Neben der Implementierung als Speicherkarte kann diese Art von Speicher alternativ
auch in verschiedene Arten von Hostsystemen eingebettet sein.
-
Zwei
generelle Speicherzellenarray-Architekturen haben kommerziell Anwendung
gefunden, NOR und NAND. Bei einem typischen NOR-Array sind die Speicherzellen
zwischen benachbarte Bitleitungs-Source- und Drain-Diffusionsbereiche
geschaltet, die sich in Richtung einer Spalte erstrecken, wobei
Steuergates mit Wortleitungen verbunden sind, die sich entlang von
Zellenzeilen erstrecken. Eine Speicherzelle umfasst zumindest ein
Speicherelement, das über
zumindest einem Abschnitt des Zellenkanalbereichs zwischen Source
und Drain angeordnet ist. Ein programmierter Ladungspegel in den
Speicherele menten steuert somit eine Betriebscharakteristik der
Zellen, welche dann gelesen werden kann, indem geeignete Spannungen
an die adressierten Speicherzellen angelegt werden. Beispiele für solche
Zellen, deren Nutzung in Speichersystemen sowie Verfahren zur Herstellung
dieser sind in den
US-Patenten
Nr. 5,070,032 ;
5,095,344 ;
5,313,421 ;
5,315,541 ;
5,343,063 ;
5,661,053 und
6,222,762 angegeben.
-
Bei
NAND-Arrays werden serielle Stränge
aus mehr als zwei Speicherzellen, beispielsweise 16 oder 32, genutzt,
die zusammen mit einem oder mehreren Auswahltransistoren zwischen
einzelne Bitleitungen und ein Referenzpotential geschaltet sind,
um Zellenspalten zu bilden. Wortleitungen erstrecken sich innerhalb
einer großen
Anzahl dieser Spalten quer zu den Zellen. Eine einzelne Zelle in
einer Spalte wird während
der Programmierung gelesen und verifiziert, indem bewirkt wird,
dass die verbleibenden Zellen in dem Strang hart angeschaltet werden,
sodass der Strom, der durch einen Strang fließt, von dem in der adressierten
Zelle gespeicherten Ladungspegel abhängt. Beispiele für Arrays
mit NAND-Architektur und deren Betrieb als Teil eines Speichersystems
finden sich in den
US-Patenten
Nr. 5,570,315 ;
5,774,397 ;
6,046,935 und
6,522,580 .
-
Die
Ladungsspeicherelemente derzeitiger Flash-EEPROM-Arrays, wie sie
in den vorstehend erwähnten
Patenten diskutiert werden, sind meist elektrisch leitfähige Floating-Gates, die typischerweise
aus leitfähigem
dotiertem Polysiliziummaterial ausgebildet sind. Bei einem alternativen
Typ von Speicherzellen, die in Flash-EEPROM-Systemen genutzt werden,
wird anstelle des leitfähigen
Floating-Gate ein nicht leitfähiges,
dielektrisches Material genutzt, um Ladung in nichtflüchtiger
Weise zu speichern. Ein dreischichtiges Dielektrikum, das aus Siliziumoxid,
Siliziumnitrid und Siliziumoxid besteht (ONO), wird in Zwischenlage
zwischen einem leitfähigen
Steuergate und einer Oberfläche
eines Halbleitersubstrats oberhalb des Kanals der Speicherzelle
angeordnet. Die Zelle wird programmiert, indem Elektronen aus dem
Kanal der Zelle in das Nitrid injiziert werden, wo sie eingefangen
werden und in einem begrenzten Bereich gespeichert werden, und wird
gelöscht, indem
heiße
Löcher
in das Nitrid injiziert werden. Mehrere spezielle Zellenstrukturen
und -arrays nutzen dielektrische Speicherelemente und sind in der
veröffentlichen
US-Patentanmeldung 2003/0109093 beschrieben.
-
Wie
bei fast allen Anwendungen für
integrierte Schaltungen besteht auch bei Flash-EEPROM-Speicherzellenarrays der Druck,
die Siliziumsubstratfläche,
die zum Realisieren einer bestimmten integrierten Schaltungsfunktion
erforderlich ist, zu verkleinern. Es besteht kontinuierlich der
Wunsch, die Menge an digitalen Daten, die auf einer gegebenen Fläche eines
Siliziumsubstrats gespeichert werden kann, zu erhöhen, um die
Speicherkapazität
einer Speicherkarte und andere Arten von Baugruppen mit gegebener
Größe zu erhöhen oder
sowohl die Kapazität
zu erhöhen
als auch die Größe zu verringern.
Eine Möglichkeit
zum Erhöhen der
Speicherdichte für
Daten besteht darin, mehr als ein Bit Daten pro Speicherzelle und/oder
pro Speichereinheit oder -element zu speichern. Dies wird erreicht,
indem ein Fenster eines Ladungspegel-Spannungsbereichs des Speicherelements
in mehr als zwei Zustände
unterteilt wird. Bei Verwendung von vier solchen Zuständen ist
es möglich,
dass jede Zelle zwei Datenbits speichert, bei acht Zuständen werden
drei Datenbits pro Speicherelement gespeichert und so weiter. Mehrzustands-Flash-EEPROM-Strukturen,
bei denen Floating-Gates genutzt werden, und deren Betrieb sind
in den
US-Patenten 5,043,940 und
5,172,338 beschrieben, und
was Strukturen betrifft, bei denen dielektrische Floating-Gates
genutzt werden, in der zuvor genannten US-Anmeldung mit dem Aktenzeichen 10/280,352.
Ausgewählte
Abschnitte eines Mehrzustands-Speicherzellenarrays können aus
verschiedenen Gründen
auch in zwei Zuständen
(binär)
betrieben werden, und zwar in einer Weise, die in den
US-Patenten 5,930,167 und
6,456,528 beschrieben ist.
-
Die
Speicherzellen eines typischen Flash-EEPROM-Array sind in diskrete
Zellenblöcke
unterteilt, die zusammen gelöscht
werden. Das bedeutet, der Block stellt die Löscheinheit dar, eine Minimalzahl
von Zellen, die gleichzeitig gelöscht
werden können.
Jeder Block speichert typischerweise eine oder mehrere Speicherseiten
an Daten, wobei die Speicherseite die minimale Einheit zum Programmieren
und Lesen darstellt, wenngleich in unterschiedlichen Unterarrays
oder Ebenen mehr als eine Speicherseite parallel programmiert oder gelesen
werden kann. Jede Speicherseite speichert typischerweise einen oder
mehrere Sektoren an Daten, wobei die Größe des Sektors durch das Hostsystem
definiert wird. Gemäß einer
Norm, die für
Magnetplattenlaufwerke etabliert ist, umfasst ein beispielhafter
Sektor 512 Bytes Nutzerdaten zuzüglich
einer gewissen Anzahl von Bytes mit Verwaltungs-(Overhead-)Informationen
zu den Nutzerdaten und/oder dem Block, in welchem diese gespeichert
sind. Solche Speicher sind typischerweise mit 16, 32 oder mehr Speicherseiten
in jedem Block konfiguriert, und jede Speicherseite speichert einen
oder lediglich wenige Hostsektoren Daten.
-
Um
den Grad der Parallelität
während
des Programmierens von Nutzerdaten in das Speicher-Array und des
Lesens von Nutzerdaten aus diesem zu erhöhen, wird das Array typischerweise
in Unterarrays unterteilt, die üblicherweise
als Ebenen bezeichnet werden, welche ihre eigenen Datenregister
und weitere Schaltungen zum Ermöglichen
eines pa rallelen Betriebs enthalten, sodass Datensektoren in jeweils
mehrere oder in sämtliche
Ebenen gleichzeitig programmiert werden können oder aus diesen gelesen
werden können.
Ein Array auf einer einzigen integrierten Schaltung kann physisch
in Ebenen unterteilt werden, oder jede Ebene kann aus einem oder
mehreren separaten integrierten Schaltungschips gebildet werden.
Beispiele für
eine solche Speicherrealisierung sind in den
US-Patenten Nr. 5,798,968 und
5,890,192 beschrieben.
-
Um
den Speicher ferner effizient zu verwalten, können physische Blocks logisch
miteinander gekoppelt werden, sodass virtuelle Blöcke oder
Metablöcke
gebildet werden. Das bedeutet, jeder Metablock wird derart definiert,
dass er einen Block aus jeder Ebene umfasst. Die Nutzung des Metablocks
ist in der internationalen Patentanmeldung mit der Veröffentlichungsnummer
WO 02/058074 beschrieben.
Der Metablock wird durch eine logische Blockadresse des Hosts als
Destination zum Programmieren und Lesen von Daten identifiziert.
Analog werden sämtliche
Blöcke
eines Metablocks zusammen gelöscht.
Der Controller in einem Speichersystem, das mit solchen großen Blöcken und/oder
Metablöcken
betrieben wird, führt
eine Reihe von Funktionen aus, darunter die Übersetzung zwischen logischen
Blockadressen (LBAs), die von einem Host empfangen werden, und physischen
Blocknummern (PBNs) in dem Speicherzellenarray. Einzelne Speicherseiten
in den Blöcken
werden typischerweise durch Versatz in der Blockadresse identifiziert.
Eine Adress-Übersetzung beinhaltet
oft die Nutzung der intermediären
Begriffe einer logischen Blocknummer (LBN) und einer logischen Speicherseite.
-
Die
Daten, die in einem Metablock gespeichert sind, werden oft aktualisiert;
die Wahrscheinlichkeit für Aktualisierungen
erhöht
sich mit zunehmender Datenkapazität des Metablocks. Aktualisierte
Sektoren eines logischen Metablocks werden normalerweise in einen
anderen physischen Metablock geschrieben. Die unveränderten
Sektoren werden üblicherweise
ebenfalls aus dem ursprünglichen
in den neuen physischen Metablock kopiert, und zwar als Teil desselben
Programmiervorgangs, um die Daten zu konsolidieren. Alternativ können die
unveränderten
Daten bis zu einer späteren
Konsolidierung mit den aktualisierten Daten in einem einzigen Metablock
in dem ursprünglichen
Metablock verbleiben.
-
Es
ist üblich,
Systeme mit großen
Blöcken
oder Metablöcken
mit einigen zusätzlichen
Blöcken
zu betreiben, die in einem Pool gelöschter Blöcke gehalten werden. Wenn eine
oder mehrere Speicherseiten Daten, die weniger als die Kapazität eines
Blocks ausmachen, aktualisiert werden, werden typischerweise die
aktualisierten Speicherseiten in einen gelöschten Block aus dem Pool geschrieben
und danach die Daten der ungeänderten Speicherseiten aus dem ursprünglichen
Block in den Löschpoolblock
kopiert. Varianten dieses Verfahrens sind in der zuvor erwähnten veröffentlichten
internationalen Anmeldung
WO
02/058074 beschrieben. Im Laufe der Zeit kann es passieren,
dass infolge des wiederholten Schreibens und Aktualisierens von Host-Datendateien
eine relativ geringe Anzahl der Speicherseiten vieler Blöcke gültige Daten
enthalten und die restlichen Speicherseiten Daten enthalten, die
nicht mehr aktuell sind. Um die Datenspeicherkapazität des Arrays
effizient nutzen zu können,
werden logisch in Zusammenhang stehende Datenseiten mit gültigen Daten von
Zeit zu Zeit aus Fragmenten von mehreren Blocks zusammengefasst
und zusammen in einer geringeren Anzahl von Blöcken konsolidiert. Dieser Prozess
wird üblicherweise
als "Speicherbereinigung" (engl. Garbage Collection)
bezeichnet.
-
Einzelne
Zellen eines Flash-EEPROM speichern eine Menge an Ladung in einem
Ladungsspeicherelement oder einer Ladungsspeichereinheit, die ein
oder mehr Bit Daten repräsentiert.
Der Ladungspegel eines Speicherelements steuert die Schwellspannung
(üblicherweise
als VT bezeichnet) der Speicherzelle, welche als Grundlage zum Lesen
des Speicherzustands der Zelle genutzt wird. Ein Schwellspannungsfenster
wird üblicherweise
in eine Anzahl von Bereichen unterteilt, und zwar einen für jeden
der zwei oder mehr Speicherzustände
der Speicherzelle. Diese Bereiche sind durch Schutzbänder getrennt,
die einen nominellen Lesepegel einschließen, welcher das Bestimmen
der Speicherzustände
der einzelnen Zellen ermöglicht.
Diese Speicherpegel verschieben sich infolge von die Ladung störenden Programmierungs-,
Lese- oder Löschvorgängen, die an
benachbarten oder anderweitig in Beziehung stehenden Speicherzellen,
-seiten oder -blöcken
ausgeführt werden.
Beispielsweise können
durch die Programmierung einer Gruppe von Speicherzellen, die eine
Leitung oder Schaltung gemeinsam mit einer zweiten Gruppe von Speicherzellen
nutzen, die Ladungspegel der zweiten Gruppe gestört werden. Das Endergebnis
dieser parasitären
Störung
besteht darin, dass, wenn keine korrigierende Maßnahme von Seiten des Speichersystem-Controllers
ergriffen wird, die Daten in den ausgesetzten Bereichen, die nicht
bearbeitet werden, korrumpiert werden können, und zwar im Extremfall über die
Korrekturmöglichkeiten
jedes Fehlerkorrekturcodes (ECC), der zusammen mit den Daten gespeichert
ist, hinausgehend. Eine solche Datenkorruption würde dann zum Verlust von Daten
für den
Anwender führen,
sodass das Speichersystem unzuverlässig wird. Das Ausmaß und das
Wesen solcher Störungen
in einem speziellen Speicherzellenarray hängen von dessen spezieller
Architektur, Struktur und Funktionsweise ab.
-
Daher
ist es vorteilhaft, sich verschiebende Ladungspegel von Zeit zu
Zeit in die Mitte ihrer Zustandsbereiche zurück zu führen, bevor störende Operationen
bewirken, dass diese vollständig
aus den für
sie definierten Bereichen geschoben werden, in welchem Fall dann
fehlerhafte Daten gelesen werden. Ein solcher Prozess, der als Datenauffrischungs-
oder Scrub-Prozess bezeichnet wird, ist in den
US-Patenten Nr. 5,532,962 und
5,909,449 beschrieben. Entsprechend
einem weiteren Aspekt dazu kann bei Speichersystemen, welche Fehlerkorrekturcodes
(ECCs) nutzen, eine gewisse Anzahl von fehlerhaften Datenbits, die
aus dem Speicher gelesen werden, unter Verwendung des ECC korrigiert
werden, und die korrigierten Daten werden dann neu in einen zuvor
gelöschten
Teil des Speichers geschrieben. Das neue Schreiben der Daten bewirkt,
dass sich jeder der Schwellpegel der beschriebenen Speicherzellen
innerhalb seines zugeordneten Zustandsbereichs befindet, da die
Datenprogrammierung üblicherweise
abwechselnd das Anpassen der gespeicherten Ladung und das Verifizieren
des resultierenden Schwellspannungspegels der Speicherzelle durch
Lesen umfasst, bis dieser den gewünschten Bereich erreicht, der
die Daten repräsentiert,
die in der Zelle gespeichert werden sollen.
-
Das
Dokument
US 5,263,032 lehrt
die Behandlung von Speicherdefekten für einen DRAM, wobei ein ECC
genutzt wird, um Fehler in gelesenen Daten zu erkennen, in Reaktion
darauf, dass ein solcher Fehler erkannt wird, ein Scrub-Vorgang
für diese
Speicherstelle ausgelöst
wird und "Footprintdaten" generiert/gespeichert
werden, um anzuzeigen, dass die Speicherstelle einmal einem Scrub-Vorgang
unterzogen worden ist, wobei für
den Fall, dass ein weiterer Lesefehler für diese Speicherstelle erkannt
wird, die korrigierten Dateninhalte des entsprechenden Speicherblocks,
aus welchem die Daten gelesen wurden, in einen Ersatzblock kopiert
werden.
-
Die
US 6,199,139 lehrt ein Auffrischungsverfahren
für einen
DRAM, wenn sich dieser in einem Ruhemodus befindet, wobei die Häufigkeit
der Auffrischung entsprechend einer Anzahl von Datenfehlern, die
durch einen Fehlerkorrekturcode korrigiert werden müssen, angepasst
wird.
-
Das
Dokument
US 4,694,454 lehrt
einen DRAM-Auffrischungsmechanismus mit einem Scrub-Vorgang während der
Auffrischung, bei welchem ein Datenregister vorhanden ist, und zwar
zum temporären
Speichern der während
des Scrub-Zyklus von der ECC-Schaltung
ausgegebenen korrigierten Daten, bevor die in dem Datenregister
gespeicherten korrigierten Daten während eines nachfolgenden Auffrischungszyklus
zurück
an die gleiche Speicherstelle geschrieben werden. Das Dokument
GB 2289779 lehrt einen Scrub-Mechanismus
für einen
DRAM, bei dem ein Puffer zum temporären Speichern der bereits korrigierten
Daten während des
Scrub-Vorgangs bereitgestellt wird und, nachdem weitere Maßnahmen
mit höherer
Priorität
ausgeführt worden
sind, die korrigierten Daten zurück
an die Speicherstelle geschrieben werden, von welcher sie gelesen wurden.
-
Zusammenfassung der Erfindung
-
Die
Erfindung ist detailliert in den anhängenden unabhängigen Ansprüchen 1 und
10 definiert. Ein umfassender Scrub-Vorgang wird in einem Flash-Speichersystem
integriert, um Störungen
von Speicherpegeln in einer Gruppe aus Speicherzellen zu kompensieren,
die durch Programmier-, Lese- oder Löschvorgänge bewirkt werden, welche
an einer anderen Gruppe von Speicherzellen auf demselben integrierten
Schaltungschip ausgeführt
werden. Die Möglichkeit
für solche
Datenstörungen
erhöht
sich mit schrumpfender Größe der Speicherzellenarrays.
Es besteht die Tendenz, dass, um Platz zu sparen, verschiedene Signalleitungen
für Gruppen
von Speicherzellen gemeinsam genutzt werden, sodass eine Gruppe
während
des Programmierens, Lesens oder Löschens der Speicherzellen einer
weiteren Gruppe potenziell wiederholt Spannungen und/oder Strömen ausgesetzt
wird. Durch einen Scrub-Vorgang für die in sämtlichen Gruppen von Speicherzellen
gespeicherten Daten in organisierter und fortlaufender Weise wird
eine Korrumpierung gespeicherter Daten im Zeitverlauf deutlich reduziert.
Außerdem
wird die Speicherung einer erhöhten
Anzahl von Bits pro Speicherzelle mit einer erhöhten Anzahl kleinerer Schwellspannungszustandsbereiche
praktikabel, wenn die gestörten
Ladungspegel korrigiert werden, indem für diese methodisch wieder ihre
vorgesehenen Pegel hergestellt werden.
-
Ein
Scrub-Vorgang beinhaltet das Lesen von Daten in Bereichen, die potenziell
störenden
Signalen ausgesetzt waren, und das Ausführen eines bestimmten korrigierenden
Vorgangs, wenn erkannt wird, dass diese Daten gestört worden
sind. Störungen
können
beispielsweise erkannt werden, indem die Integrität der Daten
geprüft
wird, beispielsweise durch Lesen der Daten und Erhalten der Ergebnisse
einer ECC-Prüfung
der Daten. Ein korrektiver Vorgang kann das neue Schreiben der Daten
an dieselbe Speicherstelle oder an eine andere Speicherstelle beinhalten,
und er kann einen Defekt- oder Datenverwaltungsvorgang auf höherer Ebene
beinhalten.
-
Der
Scrub-Vorgang kann an die Integrität der gelesenen Daten angepasst
ausgeführt
werden. Wenn beispielsweise in einem Bereich des Speicherzellenarrays
ein Datenfehler oder ein Schwellwert an Datenfehlern gefunden wird,
kann die Scrub-Rate in diesem Bereich erhöht werden. Wenn im Gegensatz
dazu in einem gegebenen Bereich keine Fehler oder nur einige wenige
Datenfehler, weniger als ein Schwellwert, gefunden werden, ist es möglich, die
Scrub-Rate für
den gegebenen Bereich zu vermindern. Die Häufigkeit und die Stelle des
Scrub-Vorgangs können
auch an Nutzungsgrade oder andere Systemparameter angepasst werden.
Diese und andere Scrub-Merkmale werden berechnet, um eine Balance
zwischen der Notwendigkeit, die Datenintegrität zu erhalten, und der Notwendigkeit,
ein hochgradiges Leistungsverhalten des Systems aufrechtzuerhalten,
zu schaffen. werden Insbesondere Scrub-Vorgänge vermieden, welche die Datenintegrität wahrscheinlich nicht
verbessern.
-
Scrub-Vorgänge werden
bevorzugt im Hintergrund ausgeführt,
wenn das Speichersystem keine Daten liest oder schreibt. Das Speichersystem
kann den Host beobachten, um anzuzeigen, wann der Host nicht von dem
Speicher verlangt, Daten zu speichern oder abzurufen, wobei während dieser
Zeit ein Scrub-Vorgang ausgeführt
werden kann.
-
Selbst
wenn bei einem bestimmten Scrub-Lesevorgang ein oder mehrere Datenfehler
erkannt werden, könnte
entschieden werden, keine korrektive Maßnahme zu ergreifen, wenn der
(die) Fehler durch ECCs beim Lesen der Daten korrigiert werden können, um
das Leistungsverhalten des Systems aufrechtzuerhalten. Wenn Nutzerdaten
und Overhead-Daten der einzelnen Sektoren ihren eigenen ECC haben,
ist es für
Datenfehler in den Overhead-Daten weniger wahrscheinlich, dass man
diese unkorrigiert durchgehen lässt
als bei Fehlern in den Nutzerdaten.
-
Wenn
so viele Bitfehler vorhanden sind, dass die mit normalen Bedingungen
gelesenen Scrub-Daten nicht durch einen ECC korrigiert werden können, können die
Daten erneut mit gelockerten Referenzbedingungen gelesen werden,
um Zellen zu lesen, deren gespeicherte Ladungspegel aus dem normalen
Bereich heraus geschoben worden sind. Wenn die gelesenen Daten durch
den ECC korrekt verifiziert worden sind, können sie danach neu in die
normalen Ladungspegelbereiche geschrieben werden. Wenn dagegen ein
Scrub-Lesevorgang für
Daten keine Fehler ergibt, können
diese Daten erneut unter restriktiveren Referenzbedingungen gelesen
werden, um die Qualität
der gespeicherten Daten zu bestimmen. Das bedeutet, Ladungspegel,
die aus ihren optimalen Bereichen heraus geschoben worden sind,
werden erkannt, sodass sie als Teil der korrektiven Scrub-Maßnahme neu
zurück
in diese Bereiche geschrieben werden.
-
Bei
Speichersystemen, bei denen große
Blöcke
oder Metablöcke
von Speicherzellen genutzt werden, die einzeln eine große Anzahl
von Host-Datensektoren speichern, kann/können ein oder mehrere Datensektor(en)
aus einem ersten physischen Block, der/die während eines Scrub-Vorgangs
korrigiert wird/werden, neu in einen zweiten Block geschrieben werden,
in welchen die restlichen Datensektoren des ersten Blocks kopiert werden,
in Übereinstimmung
mit dem zuvor beschriebenen Löschpoolverfahren
zur Speicherverwaltung. Alternativ kann ein Block oder Metablock
zur temporären
Speicherung von korrigierten Scrub-Datensektoren zweckbestimmt werden,
bis andere Datensektoren aus denselben Blöcken oder Metablöcken wie
der/die korrigierte(n) Sektor(en) aus irgendeinem anderen Grund
verschoben werden müssen,
beispielsweise zur Speicherbereinigung, wobei zu diesem Zeitpunkt
die korrigierten Scrub-Datensektoren mit anderen Datensektoren desselben
Blocks oder Metablocks rekombiniert werden können. Damit verbessert sich
das Leistungsverhalten des Systems.
-
Wenn
festgestellt wird, dass bei bestimmten speziellen Daten eine korrigierende
Maßnahme
erfolgen muss, kann diese Maßnahme
aufgeschoben werden, wenn das Ausführen der korrektiven Maßnahme zu
diesem Zeitpunkt das Leistungsverhalten des System negativ beeinflussen
könnte
und wenn die Daten gegebenenfalls ohne die korrigierende Maßnahme gelesen
werden können,
bevor die korrigierende Maßnahme
später
stattfindet. Sämtliche
korrigierten Daten, Adressen und verschiedene Parameter, wie sie
zum Zeitpunkt des Aufschubs bestimmt werden, werden vorübergehend
gespeichert und später
abgerufen, wenn eine aufgeschobene korrigierende Maßnahme ausgeführt wird.
Bei Systemen, die in großen
Blöcken
oder Metablöcken
von Speicherzellen organisiert sind, können korrigierende Scrub-Vorgänge aufgeschoben
werden, bis eine vorgegebene Menge an Daten aus einem gegebenen
Block oder Metablock für
eine korrigierende Maßnahme
terminiert ist, in welchem Falle sämtliche aufgeschobenen Datensektoren
des gegebenen Blocks oder Metablocks gleichzeitig korrigiert werden.
Damit kann die Menge an Datenkopier- und Neuschreib-Vorgängen, die erfolgen,
wenn die Datensektoren des gegebenen Blocks oder Metablocks wieder
zusammen konsolidiert werden, reduziert werden.
-
Schließlich kann,
wenn festgestellt wird, dass eine gegebene Speicherzelle, eine Spalte
Zellen, ein Block Zellen oder eine andere Einheit von Zellen häufig einen
Scrub-Vorgang erfordert, diese Einheit in dem System aus der Speicherabbildung
ausgeschlossen werden, bevor sie sich so weit verschlechtert, dass
die in ihr gespeicherten Daten nicht mehr lesbar oder korrigierbar
sind.
-
Die
vorstehenden Merkmale können
einzeln oder zusammen in verschiedenen Kombinationen realisiert
werden, in Abhängigkeit
von der speziellen Anwendung. Weitere Aspekte, Vorteile und Merkmale
des vorliegenden Scrub-Systems sind in der folgenden Beschreibung
von exemplarischen Beispielen enthalten, wobei diese Beschreibung
im Zusammenhang mit den beigefügten
Zeichnungen betrachtet werden sollte.
-
Kurze Beschreibung der Zeichnungen
-
Die 1A und 1B stellen
Blockdiagramme eines nichtflüchtigen
Speichers bzw. eines Hostsystems dar, welche zusammenarbeiten;
-
2 stellt
eine erste beispielhafte Organisation des Speicher-Arrays aus 1A dar;
-
3 zeigt
einen beispielhaften Host-Datensektor mit Overhead-Daten, wie er
in dem Speicher-Array aus 1A gespeichert
ist;
-
4 stellt
eine zweite beispielhafte Organisation des Speicher-Arrays aus 1A dar;
-
5 stellt
eine dritte beispielhafte Organisation des Speicher-Arrays aus 1A dar;
-
6 zeigt
eine Erweiterung der dritten beispielhaften Organisation des Speicher-Arrays
aus 1A;
-
7 stellt
ein Schaltungsdiagramm einer Gruppe von Speicherzellen des Arrays
aus 1A bei einer bestimmten Konfiguration dar;
-
8 ist
ein Ablaufdiagramm, welches die Hauptschritte eines Datenscrub-Vorgangs
veranschaulicht;
-
9,
die in den Teilen 9A und 9B auf
zwei Blättern
gezeigt ist, stellt ein Ablaufdiagramm eines spezielleren Beispiels
eines Scrub-Vorgangs dar; und
-
10 zeigt
Verteilungen von Schwellspannungspegeln einer programmierten Gruppe
von Speicherzellen.
-
Beschreibung beispielhafter Ausführungsformen
-
SPEICHERARCHITEKTUREN UND DEREN FUNKTIONSWEISE
-
Nehmen
wir zunächst
auf 1A Bezug, so umfasst ein Flash-Speicher ein Speicherzellenarray
und einen Controller. Bei dem gezeigten Beispiel umfassen zwei integrierte Schaltungsbauelemente
(Chips) 11 und 13 ein Array 15 aus Speicherzellen
sowie verschiedene Logikschaltungen 17. Die Logikschaltungen
sind mit einem Controller 19 auf einem separaten Chip über Daten-,
Befehls- und Statusleitungen gekoppelt und stellen außerdem Adressierung,
Datentransfer und Lesen sowie weiteren Support für das Array 13 bereit.
Die Anzahl der Speicher-Array-Chips kann von eins bis zu vielen
reichen, in Abhängigkeit
von der bereitgestellten Speicherkapazität. Der Controller und ein Teil
des Array oder das gesamte Array können alternativ auf einem einzigen
integrierten Schaltungschip kombiniert werden, dies ist momentan
aber keine wirtschaftliche Alternative.
-
Ein
typischer Controller 19 umfasst einen Mikroprozessor 21,
einen Nur-Lese-Speicher (ROM) 23, hauptsächlich zum
Speichern von Firmware, sowie einen Pufferspeicher (RAM) 25,
hauptsächlich
für die
temporäre
Speicherung von Anwenderdaten, die entweder in die Speicherchips 11 und 13 geschrieben
werden oder aus diesen gelesen werden. Schaltungen 27 stellen
eine Kopplung mit den Speicher-Array-Chips bereit, und Schaltungen 29 stellen
eine Kopplung mit einem Host über
Anschlüsse 31 bereit.
Die Integrität
der Daten wird bei diesem Beispiel durch Berechnen eines ECC mit
Schaltungen 33 bestimmt, die zum Berechnen des Codes zweckbestimmt
sind. Wenn Anwenderdaten zur Speicherung von dem Host zu dem Flash-Speicher-Array übertragen
werden, berechnet die Schaltung anhand der Daten einen ECC, und
der Code wird in dem Speicher gespeichert. Wenn diese Anwenderdaten
später
aus dem Speicher gelesen werden, werden Sie erneut durch die Schaltung 33 geleitet,
welche den ECC über
den gleichen Algorithmus berechnet und diesen Code mit dem berechneten
und zusammen mit den Daten gespeicherten Code vergleicht. Wenn sich
diese entsprechen, ist die Integrität der Daten bestätigt. Wenn
sie voneinander abweichen, können
in Abhängigkeit von
dem speziell genutzten ECC-Algorithmus diejenigen Bits, die fehlerhaft
sind, identifiziert und korrigiert werden, bis zu einer von dem
Algorithmus unterstützten
Anzahl.
-
Die
Anschlüsse 31 des
Speichers aus 1A werden mit Anschlüssen 31' eines Hostsystems
gepaart, wobei ein Beispiel für
ein solches in 1B angegeben ist. Datentransfers
zwischen dem Host und dem Speicher aus 1A erfolgen über Schnittstellenschaltungen 35.
Ein typischer Host umfasst außerdem
einen Mikroprozessor 37, einen ROM 39 zum Speichern
von Firmware-Code sowie einen RAM 41. Weitere Schaltungen
und Teilssysteme 43 umfassen oft ein Laufwerk für magnetische
Datenspeicherplatten mit hoher Kapazität, Schnittstellenschaltungen
für eine
Tastatur, einen Monitor und dergleichen, in Abhängigkeit von dem speziellen
Hostsystem. Einige Beispiele für
solche Hosts sind Arbeitsplatzrechner, Laptop-Computer, tragbare Computer,
Palmtop-Computer, Per sönliche
Digitale Assistenten (PDAs), MP3- und andere Audio-Abspielgeräte, digitale
Kameras, Videokameras, Geräte
für elektronische
Spiele, drahtlose und drahtgebundene Telefongeräte, Anrufbeantworter, Sprachaufzeichnungsgeräte, Netzwerk-Router
und andere.
-
Der
Speicher aus 1A kann als eine kleine gekapselte
Karte realisiert sein, welche den Controller und sämtliche
Speicher-Array-Schaltungsbauelemente enthält, und zwar in einer Form,
in der sie entfernbar mit dem Host aus 1B verbunden
werden kann. Das bedeutet, die Paarungsanschlüsse 31 und 31' ermöglichen
es, eine Karte zu entkoppeln und zu einem anderen Host zu bewegen
oder zu ersetzen, indem eine andere Karte mit dem Host verbunden
wird. Alternativ können
die Speicher-Array-Bauelemente in einer separaten Karte gekapselt
sein, die elektrisch und mechanisch mit einer den Controller und
die Anschlüsse 31 enthaltenden
Karte verbunden werden kann. Als weitere Alternative kann der Speicher
aus 1A in den Host aus 1B eingebettet
sein, wobei die Anschlüsse 31 und 31' dauerhaft hergestellt
werden. In diesem Fall ist der Speicher üblicherweise in einem Gehäuse des
Hosts zusammen mit weiteren Bauelementen enthalten.
-
Für bestimmte
Begriffe, die in dieser Beschreibung genutzt werden, kann eine Erklärung vorteilhaft sein.
Ein "Sektor" bezeichnet unabhängig adressierbare
Dateneinheiten, auf die während
Lese- und Schreibvorgängen
des Hosts zugegriffen wird. Ein Datensektor weist typischerweise
eine Größe von 512
Byte auf.
-
Der
Begriff "Speichersystem", wie er vorliegend
genutzt wird, bezeichnet ein System, das aus einem oder mehreren
nichtflüchtigen
Speicherbauelementen sowie der Hardware und/oder Software besteht,
die zum Speichern von Daten in dem Speicher und zum Abrufen dieser
aus dem Speicher erforderlich ist/sind. Variierende Anteile der
Gesamtfunktionalität
des Speichersystems können
entweder in einem Teilsystem realisiert sein, das vollständig für die Datenspeicherung
zweckbestimmt ist, oder in dem Hostsystem selbst. Das Speichersystem
kann in ein Hostsystem eingebettet sein oder kann entfernbar sein,
etwa in Form einer sehr kleinen Karte. Teile eines entfernbaren
Speichersystems können
selbst entfernbar sein, beispielsweise wenn das Speichermedium aus
dem Controllerteil entfernt werden kann. Jeder Teil eines Hostsystems,
der speziell für
die Datenspeicherung in einem Speichersystem zweckbestimmt ist,
wird ebenfalls als Teil des Speichersystems betrachtet. Eine solche
Funktionalität
des Hosts kann spezialisierte Softwarebibliotheken, Treiber oder Anwendungen
zusätzlich
zu etwaiger in dem Hostsystem befindlicher Hardware umfassen.
-
Für die vorliegend
genutzten Zwecke stellt ein "Hostsystem" ein System dar,
das im Allgemeinen eine andere Funktionalität als die der Datenspeicherung
besitzt, welches aber entweder mit dem Speichersystem verbunden
wird oder in dem ein Speichersystem eingebettet ist. Es kann Hostsysteme
geben, deren einziger Zweck die Datenspeicherung ist.
-
Die
verschiedenen Verfahren zum Auffrischen von und für Scrub-Vorgänge an in
einem Flash-Speicher gespeicherten Daten, welche hier beschrieben
werden, können
in Systemen mit verschiedenen speziellen Konfigurationen implementiert
werden, wobei Beispiele dafür
in den 2–6 angegeben
sind. 2 stellt einen Teil eines Speicher-Array dar,
bei dem die Speicherzellen in Blöcken
gruppiert sind, wobei die Zellen in jedem Block als Teil eines einzigen
Löschvorgangs
zusammen gelöscht
werden können, üblicherweise gleichzeitig.
Der physische Block stellt die minimale Löscheinheit dar.
-
Die
Größe der einzelnen
Speicherzellenblöcke
aus 2 kann variieren, bei einer kommerziell praktizierten
Form ist jedoch in einem einzelnen Block ein einziger Datensektor
umfasst. Der Inhalt eines solchen Datensektors ist in 3 dargestellt.
Die Nutzerdaten 51 machen typischerweise 512 Byte aus.
Zusätzlich
zu den Nutzerdaten 51 sind Overhead-Daten vorhanden, die
einen ECC 53 umfassen, der aus den Nutzerdaten berechnet
wird, Parameter 55, die sich auf die Sektordaten und/oder
den Block, in welchem der Sektor programmiert ist, beziehen, sowie
ein ECC 57, der aus den Parametern 55 berechnet
wird, sowie weitere Overhead-Daten, die umfasst sein könnten. Die
Parameter 55 können
eine Größe beinhalten,
die sich auf die Anzahl der Programmier/Lösch-Zyklen bezieht, die der
Block erfahren hat ("Aktivzahlen"; engl.: Hot Counts),
wobei diese Größe nach
jedem Zyklus oder nach einer vorgegebenen Anzahl von Zyklen aktualisiert
wird. Eine Anwendung für
diese Verlaufsgröße besteht
darin, regelmäßig die
logischen Blockadressen neu auf andere physikalische Blockadressen
abzubilden, um die Nutzung über
sämtliche
Blöcke
hin auszugleichen (Abnutzungsausgleich). Eine weitere Anwendung
der Verlaufsgröße besteht
darin, Spannungen und andere Parameter für die Programmierung, das Lesen
und/oder Löschen
in Funktion der Anzahl von Zyklen, die die unterschiedlichen Sektoren
erfahren haben, zu ändern.
Weitere Anwendungen für
Verlaufsgrößen bei
dem Prozess der Identifizierung von Blöcken, die einem Scrub-Vorgang
unterzogen werden sollen, werden später beschrieben.
-
Die
Parameter 55 können
auch eine Angabe der Bitwerte umfassen, die jedem der Speicherzustände der
Speicherzellen zugeordnet werden, was üblicherweise als deren "Rota tion" bezeichnet wird.
Das bedeutet, logische Zustände
der Daten werden auf unterschiedliche physikalische Speicherzustände abgebildet.
Dies hat ebenfalls die vorteilhafte Wirkung hinsichtlich eines Abnutzungsausgleichs.
Außerdem
können
in den Parametern 55 ein oder mehrere Merker umfasst sein,
die einen Status oder Zustände
angeben. Angaben für Spannungspegel,
die für
die Programmierung und/oder das Löschen des Blocks genutzt werden
sollen, können
ebenfalls in den Parametern 55 gespeichert werden, wobei
diese Spannungen aktualisiert werden, wenn sich die Anzahl der Zyklen,
die der Block erfahren hat, oder andere Faktoren ändern. Andere
Beispiele für
die Overhead-Parameter 55 sind
eine Angabe zu etwaigen fehlerhaften Zellen in dem Block, die logische
Adresse des Datenblocks, der in diesem physikalischen Block abgebildet
ist, und die Adresse eines etwaigen physikalischen Ersatzblocks
für den
Fall, dass der primäre
Block defekt ist. Die spezielle Kombination von Parametern 55,
die in einem Speichersystem genutzt wird, wird entsprechend dem
Design variieren. Außerdem
können auch
einige oder sämtliche
Overhead-Daten in physikalischen Blöcken gespeichert werden, die
für eine
solche Funktion zweckbestimmt sind, anstatt in dem Block, der die
Nutzerdaten enthält
oder auf welchen sich die Overhead-Daten beziehen.
-
Ein
physikalischer Block mit mehreren Sektoren aus 4 unterscheidet
sich von dem Block mit einem einzigen Datensektor aus 2.
Ein beispielhafter Block 59, immer noch die minimale Löscheinheit,
enthält
vier Speicherseiten 0–3,
welche jeweils die minimale Einheit zur Programmierung darstellt.
Ein oder mehrere Host-Datensektoren werden in jeder Speicherseite
gespeichert, üblicherweise
zusammen mit Overhead-Daten, die zumindest den aus den Daten des
Sektors berechneten ECC umfassen, und diese(r) kann/können die
Form des Datensektors aus 3 aufweisen.
Wenn Daten von weniger als sämtlichen
Speicherseiten aktualisiert werden, werden die aktualisierten Daten
typischerweise in einer Speicherseite eines gelöschten Blocks aus einem Pool
gelöschter
Blöcke
gespeichert, und die Daten in den restlichen, unveränderten Seiten
werden aus dem ursprünglichen
Block in den neuen Block kopiert. Der ursprüngliche Block wird danach gelöscht. Varianten
dieser Verwaltungstechnik für
große
Blöcke
beinhalten das Schreiben der aktualisierten Daten in eine Speicherseite
eines anderen Blocks ohne das Verschieben von Daten aus dem ursprünglichen Block
oder das Löschen
dieser. Dies führt
dazu, dass mehrere Speicherseiten die gleiche logische Adresse aufweisen.
Die aktuellste Datenseite wird durch ein geeignetes Verfahren identifiziert,
beispielsweise durch den Zeitpunkt der Programmierung, der als Feld
in den Overhead-Daten des Sektors oder der Speicherseite aufgezeichnet
wird.
-
Eine
weitere Anordnung physikalischer Blöcke mit mehreren Sektoren ist
in 5 dargestellt. Hierbei ist das gesamte Speicherzellen-Array
physisch in zwei oder mehr Ebenen unterteilt, wobei vier Ebenen
0–3 dargestellt
sind. Jede Ebene stellt ein Unterarray mit Speicherzellen dar, das
seine eigenen Datenregister, Leseverstärker, Adressdekodierer und
dergleichen aufweist, um weitestgehend unabhängig von den anderen Ebenen
arbeiten zu können.
Sämtliche
Ebenen können
auf einem einzigen integrierten Schaltungsbauelement oder auf mehreren
Bauelementen bereitgestellt werden, wobei ein Beispiel darin besteht,
jede Ebene in einem oder mehreren getrennten integrierten Schaltungsbauelementen
auszubilden. Jeder Block in dem System aus 5 enthält 16 Speicherseiten
P0–P15,
wobei jede Speicherseite eine Kapazität von einem, zwei oder mehr Host-Datensektoren sowie
einigen Overhead-Daten aufweist.
-
Eine
noch weitere Speicherzellenanordnung ist in 6 dargestellt.
Jede physikalische Ebene enthält eine
große
Anzahl von Blöcken
aus Zellen. Um den Grad an Parallelität des Betriebs zu erhöhen, werden
Blöcke
in unterschiedlichen Ebenen logisch gekoppelt, sodass sie Metablöcke bilden.
Ein solcher Metablock ist in 6 als aus
Block 3 der Ebene 0, Block 1 der Ebene 1, Block 1 der Ebene 2 und
Block 2 der Ebene 3 gebildet dargestellt. Jeder Metablock ist logisch
adressierbar, und der Speicher-Controller ordnet die Blöcke zu,
die die einzelnen Metablöcke
bilden, und verfolgt diese. Das Hostsystem ist vorzugsweise mit
dem Speichersystem in Dateneinheiten gekoppelt, die gleich der Kapazität der einzelnen
Metablöcke
sind. Ein solcher logischer Datenblock 61 aus 6 wird
beispielsweise durch eine logische Blockadresse (LBA) identifiziert,
die von dem Controller auf die physikalischen Blocknummern (PBNs)
der Blöcke,
aus denen der Metablock besteht, abgebildet wird. Sämtliche
Blöcke
des Metablocks werden zusammen gelöscht, und die Speicherseiten
jedes Blocks werden vorzugsweise gleichzeitig programmiert und gelesen.
-
Es
gibt viele unterschiedliche Speicher-Array-Architekturen, -konfigurationen
und spezifische Zellenstrukturen, die zur Anwendung kommen können, um
die vorstehend mit Bezug auf die 2–6 beschriebenen
Speicher zu implementieren. Ein Block eines Speicher-Arrays vom
NAND-Typ ist in 7 gezeigt, um einige der Störungsmechanismen
zu veranschaulichen. Eine große
Anzahl von in Spalten ausgerichteten Strängen von in Reihe geschalteten
Speicherzellen ist zwischen eine gemeinsame Quelle 65 für eine Spannung
VSS und eine der Bitleitungen BL0–BLN geschaltet, die wiederum
mit Schaltungen 67 verbunden sind, welche Adressdekodierer,
Treiber, Leseverstärker
und dergleichen enthalten. Speziell enthält ein solcher Strang die Ladungsspeichertransistoren 70, 71...72 und 74,
die in Reihe zwischen Auswahltransistoren 77 und 79 an
entgegengesetzten Enden des Strangs geschaltet sind. Bei diesem
Beispiel enthält
jeder Strang 16 Speichertransistoren, eine andere Anzahl ist aber
möglich.
Die Wortleitungen WL0–WL15
erstrecken sich quer über
einen Speichertransistor jedes Strangs hin und sind mit Schaltungen 81 verbunden,
welche Adressdekodierer und Spannungsquelletreiber für die Wortleitungen
enthalten. Die Spannungen auf den Leitungen 83 und 84 steuern über ihre
Auswahltransistoren die Verbindung sämtlicher Stränge in dem
Block zusammen mit entweder der Spannungsquelle 65 und/oder
den Bitleitungen BL0–BLN.
Daten und Adressen kommen von dem Speicher-Controller.
-
Jede
Reihe von Ladungsspeichertransistoren (Speicherzellen) des Blocks
bildet eine Speicherseite, die zusammen programmiert und gelesen
wird. An die Wortleitung (WL) einer solcher Speicherseite wird eine zum
Programmieren oder Lesen der Daten geeignete Spannung angelegt,
während
die Spannungen, die an die restlichen Wortleitungen angelegt werden,
derart gewählt
werden, dass sie deren jeweilige Speichertransistoren leitfähig machen.
Im Verlaufe der Programmierung oder des Lesens einer Zeile (Speicherseite)
von Speichertransistoren können
die zuvor gespeicherten Ladungspegel in nicht ausgewählten Zeilen
aufgrund der über
sämtliche
Stränge
und an deren Wortleitungen angelegten Spannungen gestört werden.
-
VERSCHIEDENE ASPEKTE DES SCRUB-PROZESSES
-
Es
gibt zwei Hauptphasen des Scrub-Vorgangs, die Lesephase und die
Phase der korrigierenden Maßnahme.
Der Scrub-Lesevorgang unterscheidet sich von anderen Lesevorgängen in
dem System darin, dass er im Allgemeinen die Auswahl und das Lesen
von Daten in Bereichen des Speichersystems beinhaltet, die nicht
direkt mit der Beendigung einer bestimmten Operation des Hosts noch
mit irgendeiner anderen Operation einer Reihe anderer Systemoperationen
wie beispielsweise einem Abnutzungsausgleich in Zusammenhang steht.
Ein weiteres Unterscheidungsmerkmal des Scrub-Lesevorgangs besteht
darin, dass anhand des Daten-Lesevorgangs durch das System keine
nützlichen
Informationen gesammelt werden sondern stattdessen das Ergebnis
der Datenintegritätsprüfung das
Ziel der Operation ist. Eine nachfolgende Maßnahme an dem Teil des Systems
wird durch das Ergebnis der Integritätsprüfung und nicht speziell durch
die Daten selbst bestimmt. Möglicherweise
benötigt
das System nachfolgend die Verwendung einiger Informationen aus
dem Daten-Lesevorgang, beispielsweise Overhead-Daten, falls die
Daten die Integritätsprüfung nicht
bestehen und eine korrigierende Maßnahme erforderlich ist. Diese
Merkmale, dass keine bestimmte Operation des Hosts beendet wird
und keine nützlichen
Daten aus dem Speicher erhalten werden, stellen grundsätzliche
Unterschiede zwischen Scrub-Lesevorgängen und anderen von dem System
ausgeführten
Daten-Lesevorgängen
dar.
-
Die
Auswahl der bestimmten Bereiche für einen Scrub-Lesevorgang wird
im Allgemeinen durch die Speicherstelle und die Anzahl von Lese-,
Schreib- und Löschvorgängen bestimmt,
die im normalen Verlauf des Systembetriebs ausgeführt werden,
im Zusammenhang mit den physikalischen Merkmalen des Speicherbauelements.
Im Allgemeinen werden Scrub-Lesevorgänge in Bereichen des Speicher-Arrays
ausgeführt,
welche infolge von Operationen in anderen Bereichen Spannungen,
Strömen
oder Nebensprechen ausgesetzt waren. Alternativ können die
Scrub-Lesestellen von anderen Speicheroperationen entkoppelt sein
und können
derart ausgeführt
werden, dass sie einer deterministischen oder zufälligen Abfolge
folgen. Dies kann jedoch zu einer Einbuße im Leistungsverhalten des
Systems führen,
da mehr Lesevorgänge
ausgeführt
werden müssten,
um den gleichen Abdeckungsgrad für
die stärker
gestörten
Bereiche zu erhalten.
-
Einen
weiteren Aspekt der Scrub-Lesevorgänge stellt die Wahl dar, wann
der Scrub-Lesevorgang
auszuführen
ist. Im Allgemeinen kann der Scrub-Vorgang unter Ansprechen auf
eine Reihe von Faktoren eingeleitet werden, beispielsweise eine
Anzahl von Host-Operationen,
eine Anzahl von physikalischen Lese-, Schreib- und/oder Löschvorgängen, eine
Zeitspanne, ein Nutzungsmerkmal des Hosts oder irgendeine zufällige oder
pseudozufällige
Abfolge, deren Generierung und Überprüfung an
einen der vorstehenden Faktoren gekoppelt sein kann.
-
Der
Scrub-Schreibvorgang unterscheidet sich von anderen System-Schreibvorgängen darin,
dass er im Allgemeinen infolge einer nicht bestandenen Integritätsprüfung der
während
eines Scrub-Lesevorgangs gelesenen Daten ausgeführt wird. Ein Scrub-Schreibvorgang ist
nur im Zusammenhang mit dem Scrub-Lesevorgang einzigartig. Es können andere
Schreibvorgänge
ausgeführt
werden, die analoge Mechanismen wie Scrub-Schreibvorgänge aufweisen,
die aber nicht für
diesen speziellen Zweck ausgeführt
werden. Als ein Beispiel können
sich Schreibvorgänge
durch nicht bestandene Integritätsprüfungen ergeben,
nachdem Lese- oder Schreibvorgänge
im Verlaufe des normalen Betriebs des Speichersystems ausgeführt worden
sind. Als weiteres Beispiel können
Daten für
Auffrischungszwecke gelesen und erneut geschrieben werden, ohne
dass Scrub-Lesevorgänge stattfinden,
wobei die Entscheidung zum Schreiben nicht auf Grundlage der Datenintegritätsprüfung erfolgt,
sondern stattdessen anhand eines bestimmten ande ren Faktors. Ein
solcher Faktor kann die Existenz eines Bereichs des Arrays mit hoher
Nutzung oder Exposition sein, in welchem Falle Daten in dem Bereich
neu geschrieben oder verschoben werden können. Ein kontinuierliches
Verschieben oder Auffrischen von Daten kann auf deterministische
oder zufällige
Weise erfolgen. Daten können
mit dem beabsichtigten Zweck des Abnutzungsausgleichs gelesen und
neu geschrieben werden, aber das kann den unbeabsichtigten Vorteil
haben, dass die Daten in einer Weise aufgefrischt werden, mit der
Störungsprobleme
behoben werden.
-
Tatsächlich kann
die relative Frische einer Dateneinheit dafür genutzt werden zu bestimmen,
ob ein Scrub-Vorgang für
diese Dateneinheit eingeleitet werden soll, wenn diese weitere Kriterien
dafür erfüllt. Das bedeutet,
wenn eine Dateneinheit kürzlich
als Teil eines Abnutzungsausgleichs, einer Datenkonsolidierung (Speicherbereinigung)
neu programmiert worden ist, und zwar vor dem Scrub- oder anderen
Vorgang, kann der aktuelle Scrub-Vorgang übersprungen werden, da diese
Daten vor kurzem aufgefrischt worden sind. Die relative Frische
verschiedener Dateneinheiten kann verfolgt werden, beispielsweise
mit Verlaufszahlen ("Aktivzahlen") oder Zeitstempeln,
die mit den Dateneinheiten gespeichert werden, beispielsweise in
einem Teil der Overhead-Daten der Blöcke. Alternativ können die
physikalischen Blöcke
entsprechend der Frische der in diesen gespeicherten Daten gruppiert
werden, wobei die Gruppe, zu welcher ein Block gehört, als
Overhead-Daten für
den Block gespeichert wird. Die relative Frische von Blöcken, welche
ansonsten zu Kandidaten für
einen Scrub-Vorgang werden, kann dann als Faktor zur Auswahl derjenigen
genutzt werden, welche tatsächlich
einem Scrub-Vorgang unterzogen werden. Das Leistungsverhalten des
Systems wird dabei verbessert, indem Scrub-Operationen auf diejenigen Dateneinheiten
beschränkt
werden, die lange genug gespeichert waren, sodass ihre gespeicherten
Ladungspegel wahrscheinlich hinreichend gestört worden sind, dass ihnen
Aufmerksamkeit gebührt.
-
Um
die relative Frische der gespeicherten Daten zu überwachen, können entweder
logische oder physikalische Blöcke
auf Grundlage dessen, vor wie langer Zeit die Blöcke neu programmiert worden
sind, effektiv zu Mengen gruppiert werden. Sämtlichen Blöcken in dem gesamten Speicher-Array
oder alternativ Blöcken
in einer Ebene, Zone oder einem anderen Teil des Arrays kann ein
relativer Anfangsaktivzahlwert zugeordnet werden, und jedes Mal,
wenn ein Block umprogrammiert wird, kann die relative Aktivzahl
auf den Wert des vor kürzester
Zeit verschobenen Satzes oder der vor kürzester Zeit verschobenen Gruppe
aktualisiert werden. Sobald sich eine bestimmte Anzahl von Blöcken in
der vor kürzester
Zeit neu programmierten Gruppe befindet, kann der Wert für die vor
kürzester Zeit
neu programmierten Gruppe inkrementiert werden, und etwaige Blocks,
die danach neu programmiert werden, können auf den neuen Wert der
Gruppe aktualisiert werden. Infolgedessen können getrennte Gruppen mit
einer relativ klaren Unterscheidung zwischen vor kürzester
Zeit umprogrammierten und vor längster
Zeit umprogrammierten Blöcken
erzeugt werden. Im Allgemeinen lässt man
den relativen Aktivzahlwert eines Blocks überschlagen, um die Verwendung
relativ kleiner Zahlenfelder zu ermöglichen.
-
Wenn
relative Aktivzahlen genutzt werden, können im Wesentlichen sämtliche
Blöcke
bei einem Basiswert von '0' beginnen, wenn es
acht mögliche
Werte gibt, bei einem spezifischen Beispiel z. B. die Werte '0' bis '7'.
Sieben der acht Werte können
genutzt werden, während
ein Wert reserviert wird, um eine Lücke zwischen dem Wert, welcher
die vor kürzester
Zeit programmierten Blöcke
repräsentiert,
und dem Wert, welcher die Blöcke
identifiziert, die die ältesten
Daten enthalten, bereitzustellen. Bei diesem Beispiel erhalten Blöcke, die
beschrieben werden, einen neuen Wert '1',
um anzuzeigen, dass sie die vor kürzester Zeit neu programmierten
darstellen. Sobald eine bestimmte vorgegebene Anzahl von Blöcken auf
den neuen Wert '1' aktualisiert worden
ist, können
Blöcke,
die danach programmiert werden, einen neuen Wert '2' erhalten. Ein Wert '3' kann schließlich neu
programmierten Blöcken
zugeordnet werden, sobald einer bestimmten Anzahl von Blöcken der Wert '2' zugeordnet worden ist. An einem gewissen
Punkt wird der Zähler überschlagen,
sodass die vor längster
Zeit genutzten Blöcke
einen Wert '2' aufweisen, die vor
jüngster
Zeit programmierten Blöcke
einen Wert '0' aufweisen und der
Wert '1' eine Lücke zwischen
den beiden bereitgestellt, sodass sich die Werte für die Blöcke mit
den ältesten
und den neusten Daten deutlich identifizieren lassen. Schließlich werden
sämtliche
Blöcke
in der ältesten
Menge neu geschrieben sein, entweder durch Schreibvorgänge des
Hosts, durch einen Scrub-Vorgang, durch Abnutzungsausgleich oder
durch irgendeinen anderen Mechanismus. Bei dem vorstehenden Beispiel
wird die Menge '2' dann leer sein,
und dieser Wert kann als Lücke
dienen, während
die Menge '1' genutzt werden kann,
um die vor kürzester
Zeit geschriebenen Blöcke
zu identifizieren. Wenn ein Block zu einem Kandidaten für einen
Scrub-Vorgang auf Grundlage anderer Kriterien wird, kann der Scrub-Vorgang
für diesen
Block übersprungen
werden, wenn dieser durch seine relative Aktivzahl in einer Gruppe
von vor eher kürzerer
Zeit neu programmierten Blöcken
platziert ist.
-
Alternativ
können
absolute Aktivzahlen für
logische und/oder physikalische Blöcke unterhalten werden, in
welchem Fall das System vorzugsweise diese Aktivzahlen nutzen kann,
um Entscheidungen hinsichtlich Scrub-Vorgängen zu treffen. Das bedeutet,
wenn ein Block neu programmiert wird, wird dessen absolute Aktivzahl
inkrementiert, dekrementiert oder anderweitig verfolgt, um eine
Angabe für
die Gesamtanzahl der Umprogrammierungen des Blocks bereitzustellen.
Blöcke
mit absoluten Aktivzahlen, die eine große Anzahl von Umprogrammierungsoperationen
anzeigen, sind typischerweise in jüngerer Zeit umprogrammiert
worden als Blöcke
mit absoluten Aktivzahlen, die eine geringe Anzahl von Umprogrammierungsoperationen
anzeigen. Somit kann der Scrub-Vorgang für die Daten, die in Blöcken mit
einer relativ hohen Zahl von Umprogrammierungsoperationen gespeichert
sind, übersprungen
werden, da es unwahrscheinlich ist, dass die Daten wesentlich gestört sind.
-
Es
gibt viele spezielle Scrub-Algorithmen und damit in Zusammenhang
stehende Speicheroperationen, die alternativ ausgeführt werden
können.
Der Scrub-Vorgang kann durch den Speichersystem-Controller gesteuert
werden, oder alternativ auf jedem der integrierten Schaltungsbauelemente
(Chips) mit Speicherzellen, oder kann sogar teilweise oder vollständig durch
den Host gesteuert werden. Das Speichersystem kann entfernbar mit
dem Host verbunden werden oder kann alternativ in dem Host eingebettet
sein.
-
Die
Lesephase eines Scrub-Vorgangs kann auf mehrerlei Weise ausgeführt werden.
Die Scrub-Raten können
derart abgestimmt werden, dass das Leistungsverhalten optimiert
wird und gleichzeitig ein spezifischer Grad an Datenintegrität aufrechterhalten
wird. Sowohl die Raten, mit welchen die Scrub-Operationen ausgeführt werden,
als auch die Anzahl der Datensektoren, die gleichzeitig gelesen
werden, können
beispielsweise abgestimmt werden. Eine solche Abstimmung kann automatisch
als Teil des Scrub-Algorithmus
erfolgen. Zum Beispiel können
die Raten und die Stellen für
den Scrub-Vorgang
mit ungleichmäßigen Störungsverlaufsraten in
unterschiedlichen Bereichen des Speichers abgestimmt werden. Scrub-Lesevorgänge können auch
aufgeschoben werden, um das Leistungsverhalten des Systems zu optimieren
oder um spezifischen Echtzeiterfordernissen zu entsprechen.
-
Es
gibt außerdem
verschiedene Alternativen für
die Art und Weise, in welcher der Scrub-Lesevorgang ausgeführt wird. Zum Beispiel kann
ein Satz Daten sowohl mit nominellen Referenzpegeln als auch mit
Referenzpegeln mit Toleranzgrenzen gelesen werden. Die Größe des Toleranzbereichs
kann auf spezielle Störungsmechanismen
abzielen, die anzutreffen sind. Wenn gelesene Daten beispielsweise
nicht durch den ECC korrigiert werden können, könnte ein Lesevorgang mit breiteren
Grenzen es ermöglichen,
die Daten wiederzugewinnen. Wenn Daten normal ohne irgendwelche
Fehler gelesen werden, könnte
ein Lesevorgang mit schmaleren Grenzen Informationen zur Qualität der Daten
liefern.
-
Nach
einem Scrub-Lesevorgang wird entschieden, ob eine korrigierende
Maßnahme
in Angriff genommen werden soll. Neben anderen Faktoren kann eine
solche Entscheidung basierend auf dem Aktivitätsgrad, basierend auf einer
Anzahl und/oder einem Muster von Bitfehlern, die erkannt worden
sind, getroffen werden.
-
Die
korrigierende Maßnahme
umfasst meist das neue Schreiben der gelesenen Daten an die gleiche oder
eine andere Speicherstelle in dem Speicher. Solche Scrub-Schreibvorgänge können aufgeschoben
werden, um das Leistungsverhalten des Systems zu optimieren oder
um speziellen Echtzeiterfordernissen zu entsprechen. Eine korrigierende
Maßnahme
kann zusätzlich
eine Rotation der Daten während
eines Scrub-Schreibvorgangs umfassen; das bedeutet, die Speicherzellenzustände, die
spezifisch gespeicherte Daten repräsentieren, werden verändert. Eine
korrigierende Maßnahme
kann auch das Ausschließen
von Zellen, Spalten oder anderen Strukturen, die als störungsanfällig erachtet
werden, für
Speicherabbildungen aus dem System umfassen.
-
Der
größte Teil
der Host-Protokolle weist eine abstrakte Schnittstelle zu dem Speichersystem
auf, sodass der Speicher im Allgemeinen von dem Host mit logischen
Blockadressnummern (LBA) adressiert wird. Alternative äquivalente
Adressierungsmodi existieren, beispielsweise Zylinder-Kopf-Sektor
in dem ATA-Host-Protokoll, aber das fundamentale Konzept besteht
darin, dass der Host keine Kenntnisse bezüglich der physischen Speicherstelle
besitzt, an welcher das Speichersystem einen gegebenen Host-Datensektor gespeichert
hat. Dem Host steht ein linear fortlaufender Satz unabhängiger logischer
Blockadressen zur Verfügung,
an welchen Datensektoren gespeichert und von welchen diese abgerufen
werden. Diese abstrakten Host-Protokolle erfordern im Allgemeinen
das Vorhandensein eines Controllers in dem Speichersystem, um die
Speicheroperationen zu steuern, die Abbildungsfunktionalität, die Datenverwaltung,
Fehlerbehebung auszuführen,
und so weiter. Speichersysteme, die mit diesen abstrakten Host-Protokollen arbeiten,
verlassen sich vorzugsweise darauf, dass der Controller in dem Speichersystem
Scrub-Operationen ausführt,
da der Host im Allgemeinen keine Kenntnis zu den physikalischen
Aspekten des Speichersystems besitzt.
-
Andererseits
gibt es bei einigen Host-Protokollen eine Schnittstelle, in welcher
der Host selbst die Speicherverwaltungsfunktionen ausführt. Bei
Speichersystemen, die diesen Protokollen entsprechen, ist typischerweise
eine minimale Controller-Funktionalität vorhanden, wenn überhaupt.
Es können
variierende Anteile dieser Funktionalität vorhanden sein, beispielsweise,
aber nicht ausschließlich,
die ECC-Erzeugung, ECC-Prüfung
oder ECC-Korrektur, die von dem Speichersystem anstatt dem Host-System
ausgeführt
werden kann. Speichersysteme, die mit diesen Host-Speicherverwaltungsprotokollen
arbeiten, werden sich üblicherweise darauf
verlassen, dass der Host die Scrub-Operationen ausführt, da
das Speichersystem typischerweise unzureichende Logik zum Ausführen von
Scrub-Operationen aufweist.
-
Einige
Speichersysteme weisen einen zweckbestimmten Controller auf, dessen
Aufgabe darin besteht, das Speicherbauelement zu betreiben und die
Speicherverwaltungsfunktionalität
auszuführen.
Andere Speichersysteme weisen keinen zweckbestimmten Speicher-Controller
auf, sondern verlassen sich stattdessen auf Teile der Host-Infrastruktur,
um Speicherverwaltungsvorgänge
auszuführen.
Beispielsweise ist es möglich,
dass ein nichtflüchtiges
Speicherbauelement direkt mit einem Allzweck-Mikroprozessor in dem
Hostsystem verbunden wird, wobei die Speicherverwaltungsfunktionalität durch
Software ausgeführt
wird. Bei solchen Speichersystemen ohne Controller führt dasselbe
Teilsystem, das für
Speicherverwaltungsoperationen verantwortlich ist, vorzugsweise
auch die Scrub-Funktionalität
aus.
-
Bei
den Speichersystemen, die einen Controller aufweisen, ist es möglich, dass
die Controllerfunktionalität
in ein nichtflüchtiges
Speicherbauelement (einen integrierten Schaltungschip) selbst integriert
ist. Als extremes Beispiel ist es möglich, dass der gesamte Controller
in einem einzigen Speicherbauelement integriert ist.
-
Das
Speichersystem kann in das Hostsystem eingebettet sein und kann
in variierendem Grade eine Funktionalität aufweisen, die in Teilsysteme
des Hosts integriert ist, welches Allzweck-Systeme sind oder die eine
andere Funktionalität
aufweisen. Bei solchen eingebetteten Speichersystemen werden im
Allgemeinen die gleichen Host-Protokolle eingehalten, wenngleich
dies nicht notwendigerweise der Fall sein muss. Als allgemeine Regel
ist jedoch der gleiche Satz an Funktionalität erforderlich, um das Speichersystem
zu betreiben.
-
Wenngleich
im Falle eines abstrakten Host-Protokolls typischerweise das Speichersystem
Scrub-Operationen ausführt,
ist es auch möglich,
dass das Hostsystem in solchen Systemen über die Nutzung eines speziellen
Befehls oder einer anderen vordefinierten Schnitt stellentransaktion
Scrub-Operationen einleiten kann. Ein Grund zum Implementieren dieser
Funktionalität
kann darin bestehen, dass das Hostsystem am besten Zeitspannen kennt,
während
derer nicht auf das Speichersystem zugegriffen wird, um Daten zu
speichern oder abzurufen, und das Hostsystem kann die Gelegenheit
wahrnehmen, um während
solcher Zeitspannen eine Scrub-Operation auszulösen. Auf diese Weise kann die
Zuverlässigkeit
des Systems insgesamt erhöht
werden, und zwar mit minimaler Auswirkung auf das Leistungsverhalten.
Der Mechanismus, der genutzt wird, um eine Scrub-Operation auszulösen, kann für den Zweck des Scrub-Vorgangs
spezifisch sein oder kann einen Allzweckmechanismus zum Melden an
das Speichersystem, dass Zeit für
Verwaltungsoperationen verfügbar ist,
darstellen. In letzterem Fall können
die Scrub-Operationen
einen Typ von verschiedenen Operationen darstellen, die von dem
Speichersystem während
solcher Zeitspannen ausgeführt
werden.
-
Der
Expositionsbereich aufgrund einer gegebenen Speicheroperation ist
im Allgemeinen ausgedehnt, sodass es nicht praktisch ist, jedes
Mal, wenn eine Operation ausgeführt
wird, den gesamten exponierten Bereich einem Scrub-Vorgang zu unterziehen.
Im Allgemeinen wird nur ein Teil des exponierten Bereichs für einen
Scrub-Vorgang ausgewählt,
und die Rate der Scrub-Vorgänge
muss derart festgelegt werden, dass der Scrub-Vorgang die am stärksten gestörten Bereiche erkennt, bevor
die Anzahl an Bitfehlern und der Anteil der verschobenen Zellen
die Möglichkeiten
jedes Wiederherstellungssystems, das in dem Speichersystem zur Verfügung steht, übersteigt.
-
Die
Rate, mit welcher Scrub-Vorgänge
ausgeführt
werden, stellt einen wichtigen Parameter dar, da sie sowohl die
Datenintegrität
als auch das Leistungsverhalten des Speichersystems beeinflusst.
Je höher
die Scrub-Rate ist, desto höher
ist die Wahrscheinlichkeit, gestörte
Zellen in einem Datenblock zu erkennen, bevor die Anzahl der Bitfehler
und der Grad der verschobenen Zellen jedes Wiederherstellungssystem überfordert, das
für das
Speichersystem zur Verfügung
steht. Je höher
jedoch die Scrub-Rate ist, desto stärker ist die Verschlechterung
des Leistungsverhaltens des Speichersystems, da höhere Anteile
des Speichers und der Controllerzeit diesem Vorgang gewidmet sind.
Mit dem Ziel, einen gewünschten
Grad an Datenintegrität
zu garantieren und gleichzeitig so wenig Leistungsvermögen wie
möglich
zu opfern, wird die Scrub-Rate auf das bloße Minimum reduziert, das erforderlich
ist, egal mit welchem Schutzband, das als geeignet erachtet wird.
Die Rate, mit welcher Scrub-Operationen ausgeführt werden, kann auf zweierlei
Weise variieren: 1) Auswahl des Zeitpunkts, zu welchem ein Scrub-Vorgang
erfolgen soll, und 2) Auswahl einer Anzahl von Sektoren, die gleichzeitig
einem Scrub-Lesevorgang unterzogen werden sollen.
-
Es
ist möglich,
dass die Scrub-Rate, die erforderlich ist, um eine Datenintegrität aufrechtzuerhalten, sich
im Verlauf der Nutzungszeit des Produktes ändert. Zum Beispiel kann sich,
wenn Zellen mehrere Zyklen durchlaufen haben, die Rate der Störungen erhöhen oder
vermindern. Würde
man zum Zeitpunkt der Herstellung eine feste Scrub-Rate festlegen,
müsste
die im Verlaufe der Nutzungszeit des Speichersystems erforderliche
höchste
Rate genutzt werden, um die Integrität des Speichersystems über die
Nutzungszeit des Speichersystems hin beizubehalten. Dies würde zu einer
höheren
Scrub-Rate führen,
wenn eine niedrigere ausreichend wäre, wodurch sich ein höherer Abstrich
am Leistungsverhalten des Speichersystems ergäbe, als zu bestimmten Zeiten
während
der Nutzungszeit des Speichersystems erforderlich wäre. Es gibt
verschiedene Ansätze,
um die Scrub-Raten
im Verlaufe der Nutzungszeit eines Speichersystems abzustimmen.
-
Es
ist möglich,
zum Zeitpunkt der Herstellung des Speichersystems eine variable
Scrub-Rate festzulegen.
Ein Verfahren dafür
besteht darin, eine Tabelle mit Ratewerten bereitzustellen, welche
unterschiedliche Scrub-Raten für
irgendeine Metrik, die die Störungsrate
beeinflusst, festlegt. Ein Beispiel ist eine Tabelle, die Scrub-Raten
für unterschiedliche
Programmier/Lösch-Zykluszahlen
enthält,
welchen die verschiedenen Teile des Speicher-Arrays ausgesetzt waren. Wenn in dem
Speichersystem Zykluszahlen verfolgt werden, würde der Scrub-Rate-Parameter
anhand der Tabelle auf Basis des schlechtesten Falls oder einer
mittleren Zykluszahl für
einen gegebenen Bereich des Arrays ausgewählt werden.
-
Ein
weiterer Ansatz besteht darin zu ermöglichen, dass das Speichersystem
die Scrub-Rate selbst
anpasst, und zwar basierend auf den Ergebnissen vorhergehender Scrub-Operationen. Wenn
zum Beispiel das Speichersystem ein Protokoll der Scrub-Operationen unterhält und feststellt,
dass bei einem sehr geringen prozentualen Anteil von Scrub-Vorgängen eine
korrigierende Maßnahme
erforderlich ist, könnte
es die Rate, mit welcher Scrub-Lesevorgänge ausgeführt werden, nach unten anpassen.
Wenn es andererseits feststellt, dass bei einem sehr hohen prozentualen
Anteil von Scrub-Vorgängen eine
korrigierende Maßnahme
erforderlich ist, könnte
es die Rate, mit welcher Scrub-Lesevorgänge ausgeführt werden, nach oben anpassen.
Eine weitere Messgröße, entsprechend
welcher das Speichersystem die Scrub-Rate anpassen kann, ist der
Betrag der in einzelnen Speicherelementen während vorhergehender Scrub-Vorgänge erkannten Verschiebung
oder die Anzahl an Bitfehlern. Bei jedem der vorstehenden Fälle kann
das System die Scrub-Rate-Parameter mit jedem neuen Ergebnis adaptiv
anpassen oder kann die Informationen für periodische Anpassungen protokollieren.
-
Es
gibt mehrere Techniken, die genutzt werden können, um auszuwählen, wann
ein Scrub-Vorgang erfolgen soll, einige Beispiele dafür sind:
1) zufällig
oder pseudozufällig;
2) auf Grundlage der Anzahl von Host-Operationen; 3) auf Grundlage
der Anzahl von Operationen in dem Speicherbauelement; 4) auf Grundlage
eines Zeitintervalls. Es ist möglich,
eine der vorstehend beschriebenen Techniken zu nutzen, um die Rate abzustimmen,
mit welcher Scrub-Operationen ausgeführt werden. Nachstehend sei
angenommen, dass jegliche Parameter, die für die Scrub-Entscheidung erforderlich
sind, zum Zeitpunkt der Herstellung bereitgestellt werden. Es kann
unterschiedliche Rateparameter für
Lese-, Schreib- und Löschvorgänge geben,
da diese jeweils den Speicher mit unterschiedlicher Häufigkeit
stören
können.
-
Es
ist möglich,
Zufallszahlen (RN) oder Pseudozufallszahlen (PRN) zu nutzen, um
die Häufigkeit
von Scrub-Operationen festzulegen, wenn diese für das System zur Verfügung stehen
oder von dem System generiert werden. Eine Reihe von Verfahren zum
Nutzen einer RN- oder PRN-Folge, um zu entscheiden, ob eine Scrub-Operation
ausgeführt
werden soll oder nicht, wird nachstehend beschrieben. Bei sämtlichen
nachstehenden Verfahren wird angenommen, dass die RN in einem gewissen
regelmäßigen Intervall überprüft wird, und
die Entscheidung zum Ausführen
des Scrub-Vorgangs oder zum Nichtausführen desselben wird basierend auf
einem gewissen Test des RN-Wertes getroffen.
-
Ein
Verfahren zum Nutzen einer Zufallszahl, um eine Scrub-Rate festzulegen,
besteht darin, eine logische UND-Verknüpfung einer RN oder PRN mit
einem Maskenparameter vorzunehmen, bei dem eine Reihe von Bits auf
den Wert Eins gesetzt ist und der Rest auf Null gesetzt ist. Die
Entscheidung, ob eine Scrub-Operation ausgeführt wird oder nicht, würde auf
Grundlage dessen getroffen, ob die UND-Operation einen Wert Null
oder einen Wert ungleich Null ergeben hat. Ein Maskenwert mit mehr
Einsen führt
weniger häufig
zu einem Wert Null als ein Maskenwert mit mehr Nullen. Die nachstehende
Tabelle zeigt die ungefähren
Scrub-Raten bei unterschiedlichen Maskenwerten mit acht Bit unter
der Annahme, dass ein Ergebnis Null der UND-Verknüpfung eine
Scrub-Operation bewirkt. Man beachte, dass bei einer echten Zufallssequenz
nur die Anzahl der Bits mit dem Wert Eins die Rate beeinflusst und
nicht der Wert selbst, die Werte in der Tabelle stellen somit nur
exemplarische Werte dar.
Maskenwert
(hex) | Maskenwert
(bin) | Scrub-Rate |
0×00 | 00000000 | 1/1 |
0×01 | 00000001 | 1/2 |
0×03 | 00000011 | 1/4 |
0×07 | 00000111 | 1/8 |
0×0F | 00001111 | 1/16 |
0×1F | 00011111 | 1/32 |
0×3F | 00111111 | 1/64 |
0×7F | 01111111 | 1/128 |
0×FF | 11111111 | 1/256 |
-
Eine
weitere verwandte Methode besteht darin, die Anzahl der Bits in
einer RN mit dem Wert 1 zu zählen,
um festzulegen, ob eine Scrub-Operation ausgeführt werden soll oder nicht.
Wiederum könnte
die Anzahl der Bits in der RN mit einer Maske oder einem Wert, der
einen Schwellwert angibt, verglichen werden. Ein noch weiteres Verfahren
umfasst das Vergleichen des Wertes einer RN mit demjenigen eines
Scrub-Rate-Parameters. Die Entscheidung, ob ein Scrub-Vorgang ausgeführt wird
oder nicht, würde
darauf basieren, ob die RN den Schwellwert numerisch übersteigt.
Beispielsweise wäre
für einen
Schwellwert 5 die RN in 5/256 der Zeit höher.
-
Alternativ
kann die Scrub-Rate an die Anzahl von ausgeführten Host-Operationen gekoppelt
werden. Beispielsweise ist es möglich,
eine Scrub-Operation jeweils nach N Lese-, Schreib- und/oder Löschvorgänge des
Hosts auszuführen,
wobei N ein Rateparameter ist, der die Scrub-Rate festlegt. Ferner
kann die Scrub-Rate an die Anzahl von ausgeführten Speicheroperationen gekoppelt
werden. Zum Beispiel ist es möglich,
dass ein Scrub-Vorgang
jeweils nach NR Lese-, NW Schreib- und/oder NE Löschoperationen ausgeführt wird,
wobei NR, NW und NE Rateparameter darstellen, welche die Scrub-Rate
festlegen. Als eine weitere Alternative könnten, wenn das Speichersystem
ein Verfahren zum Messen von Zeitintervallen umfasst, dann die Scrub-Vorgänge in einem
gewissen regelmäßigen Zeitintervall
T ausgeführt
werden, wobei T ein Parameter ist, der bereitgestellt wird, um die
Scrub-Rate festzulegen.
-
Um
das Leistungsverhalten des Speichersystems beizubehalten, kann es
wünschenswert
sein, einen Scrub-Lesevorgang aufzuschieben, selbst nachdem die
Entscheidung getroffen worden ist, einen Scrub-Lesevorgang auszuführen. Die
Gründe
dafür können Echt zeiterwägungen beinhalten.
Beispielsweise ist es möglich,
dass ein Host einen bestimmten Datentransfer benötigt und dass zweckbestimmte
Ressourcen, die zu bestimmten Zeitpunkten einem Scrub-Vorgang unterworfen
werden, die Fähigkeit
des Speichersystems beinträchtigen
könnten,
die garantierte Datenrate zu erfüllen.
Für einen
solchen Zweck könnte
das Speichersystem die Parameter der Scrub-Operation in eine Warteschlange
stellen, und zwar zur späteren
Bearbeitung zu einem Zeitpunkt, wenn das Ausführen des Scrub-Vorgangs das
Leistungsverhalten des Hosts nicht beeinträchtigt. Die Scrub-Vorgänge können auf
einen späteren
Zeitpunkt während
der Befehlsbearbeitung des Hosts, auf einen Zeitpunkt nach der Befehlsbearbeitung
oder bis zu einem späteren
Hostbefehl aufgeschoben werden. In einem solchen Fall werden die
Parameter für
die Scrub-Operation, die festgelegt worden sind, gespeichert und
zu einem späteren
Zeitpunkt verarbeitet, wenn dies für den Host am praktischsten
ist.
-
Da
nur ein Teil eines exponierten Bereichs des Speicher-Arrays zu einem
gegebenen Zeitpunkt einem Scrub-Vorgang unterzogen werden kann,
liegt ein wichtiger Aspekt zum Erreichen einer guten Abdeckung in der
Auswahl, wo der Scrub-Vorgang stattfinden soll, wenn die Entscheidung
zum Ausführen
eines Scrub-Vorgangs einmal erfolgt ist. Die Auswahl, wo ein Scrub-Vorgang
erfolgt, steht im Allgemeinen mit der Speicherstelle von Lese-,
Schreib- und/oder Löschvorgängen an
dem Speicherbauelement im Zusammenhang. Eingebettet in die Auswahl
sind Kenntnisse zu dem Bereich, über
welchen hin eine gegebene Speicheroperation die anderen Speicherelemente
stören
wird. Das In-Zusammenhang-Setzen
der einem Scrub-Vorgang zu unterziehenden Bereiche mit dem Bereich,
in dem gearbeitet wurde, macht es möglich, dass die Scrub-Operationen höchst effizient
sind, da diese Scrub-Operationen nicht in Bereichen des Speichers
erfolgen, die wahrscheinlich nicht gestört worden sind.
-
Ein
Verfahren zum Auswählen
der Speicherstelle für
einen Scrub-Vorgang umfasst das Nutzen einer RN oder PRN zur Auswahl
einer Speicherstelle aus einem Expositionsbereich einer gegebenen
Operation. Im Mittel wird für
die Bereiche, welche die höchste
Exposition erfahren, die Wahrscheinlichkeit am größten sein, für einen
Scrub-Vorgang ausgewählt
zu werden. Die Scrub-Rate würde
derart angepasst, dass der erwarteten Zufallszahl-Abdeckung für den schlechtesten
Fall Rechnung getragen wird, aufgrund der Gegebenheit, dass einige
Bereiche öfter
als andere ausgewählt
werden, und es wird nur im Mittel eine gleichmäßige Abdeckung gegeben sein.
-
Ein
weiteres Verfahren zum Auswählen
der Stelle für
den Scrub-Vorgang umfasst das deterministische Verschieben über einen
exponierten Bereich. Dieses Verfahren würde jedoch das Protokollieren
von sowohl Speicheroperationen als auch Scrub-Operationen erfordern,
um eine vollständige
Abdeckung sicherzustellen.
-
Wenn
eine Aktivität
an dem Speicher protokolliert wird, dann ist es möglich, ein
Maß für die Stärke der Exposition,
der ein gegebener Bereich durch potenziell störende Operationen unterliegt,
zu erhalten. Sind solche Informationen vorhanden, so kann das Speichersystem
das Protokoll nach Bereichen durchsuchen, welche die höchste Exposition
erfahren haben, und kann die Scrub-Operation auf diese Bereiche
beschränken. Diese
Methode kann genutzt werden, um ein beliebiges der vorstehenden
Verfahren bei der Bestimmung der Rate und der Speicherstellen für einen
Scrub-Vorgang zu leiten. Allgemein können die Programmier/Lösch-Zyklen
verfolgt werden, über
die Unterhaltung von Zykluszahldaten. Es ist jedoch im Allgemeinen
unpraktisch, die Leseaktivität
zu protokollieren, somit ist es nicht wahrscheinlich, dass dieses
Verfahren genutzt wird, um eine Leseexposition zu verfolgen.
-
Alternativ
können
die Speicherstellen von korrigierenden Maßnahmen protokolliert werden
und können
als Richtlinie für
Bereiche genutzt werden, die anfälliger
für Störungen sind
als andere oder die eine stärkere
Exposition als andere erfahren. Das Speichersystem kann diese Informationen
nutzen, um die Wahl von Gebieten für einen Scrub-Vorgang, insbesondere
im Hinblick auf Bereiche, die häufiger
als andere eine korrigierende Maßnahme erfordert haben, zu
Wichten.
-
Bei
Systemen, bei denen keine Kenntnisse zu potenziellen Bereichen mit
störender
Exposition unterhalten werden, können
entweder zufällige
oder deterministische Verfahren unabhängig von solchen Kenntnissen
genutzt werden. In diesem Fall werden die Scrub-Vorgänge
in dem gesamten Speichersystem ausgeführt, unabhängig davon, wo durch die Host-Aktivität Operationen
in dem Speichersystem bewirkt werden. Die Scrub-Rate wird jedoch
ausreichend hoch angepasst, um eine hinreichende Abdeckung sicherzustellen.
Im Allgemeinen stellt dies eine große Verschwendung von Ressourcen
dar, da einige Bereiche des Speichersystems eine viel höhere Exposition
als andere erfahren werden und vorzugsweise die primären Bereiche
zur Konzentration von Scrub-Operationen darstellen.
-
Der
Zweck einer Scrub-Operation besteht darin, gestörte Speicherelemente zu erkennen,
bevor die Anzahl der Bitfehler und der Grad der verschobenen Zellen
die Möglichkeiten jedes
Wiederherstellungssystems, das in dem Speichersystem verfügbar ist, übersteigen.
Zu diesem Zweck ist es im Allgemeinen wünschenswert, eine Störung so
früh wie
möglich
zu erkennen, und zwar bevor ein großer Teil des Schutzbandes für einen
gegebenen Schwellspannungspegel aufgrund der Störung verloren ist.
-
Wie
zuvor im Hintergrund beschrieben, speichern Flash-Speicher üblicherweise
Daten als diskrete Zustände
oder Bereiche von Ladungsspeicherpegeln, von denen jeder von anderen
Zuständen
durch ein gewisses Schutzband getrennt ist. Es gibt generell einen
nominellen Lese-Unterscheidungspegel zwischen jeweiligen Zuständen, oberhalb
welchem ein Speicherelement als in einem bestimmten Zustand befindlich
betrachtet wird und unterhalb welchem es als in einem anderen Zustand
befindlich betrachtet wird. Wenn ein gegebenes Speicherelement gestört wird,
kann der Pegel, auf welchen dieses programmiert oder gelöscht worden
ist, beginnen, sich zu verschieben. Wenn der Pegel des Speicherelements
sich dem Lese-Unterscheidungspegel nähert oder diesen durchschreitet,
liefert er Daten in einem anderen Zustand als demjenigen, auf welchen
programmiert oder gelöscht
worden ist. Der Fehler wird sich im Allgemeinen selbst als ein oder
mehrere fehlerhafte Bits in den Daten manifestieren und wird im
Allgemeinen durch Nutzung einer ECC-Abdeckung des Datenfeldes erkannt.
-
Ein
Begrenzen oder Vorausrichten der Lesebedingungen in solcher Weise,
dass der Lese-Unterscheidungspegel stärker zu dem einen oder anderen
Zustand hin verschoben ist, wird bewirken, dass gestörte Speicherelemente
selbst dann in dem falschen Zustand gelesen werden, wenn der Betrag
der Verschiebung unter normalen Lesebedingungen keinen Fehler bewirken
würde.
Damit ist es möglich,
dass das System eine Verschiebung erkennt, bevor diese den Punkt
erreicht, an welchem sie während
des normalen Betriebs des Speichersystems Fehler bewirken würde.
-
Wenn
für Störungsmechanismen
bekannt ist, dass sie Datenspeicherpegel auf spezielle Weise beeinflussen,
ist es möglich,
solche spezifischen Störmechanismen
zielgerichtet zu erkennen, indem die Lesebedingungen auf die erwarteten
Pegelverschiebungen hin eingeschränkt werden. Wenngleich der
ideale Fall darin bestehen würde,
auf die erwarteten Störmechanismen
mit einem einzigen Lesevorgang unter einem einzigen Satz von Grenzbedingungen
abzuzielen, wird dies nicht immer möglich sein. Es kann notwendig
sein, mehrere Lesevorgänge
mit unterschiedlichen Bedingungen auszuführen. Beispielsweise ist es
möglich,
dass unterschiedliche Störungsmechanismen,
die in einem Speicher vorhanden sind, bewirken, dass Speicherelemente entweder
stärker
programmiert oder stärker
gelöscht
werden. Speicherelemente sowohl oberhalb als auch unterhalb eines
Unterscheidungspegels können
sich zu diesem hin verschieben, in welchem Falle es notwendig sein
kann, zunächst
auf eine Verschiebung der Speicherpegel zu einem Unterscheidungspegel
hin aus dem einen Zustand und danach aus dem anderen Zustand zu
prüfen.
-
Es
gibt zwei einzelne Messgrößen für die Datenqualität, die als
Schwellwerte zum Bestimmen, ob eine korrigierende Maßnahme erfolgen
sollte, genutzt werden können:
1) die Erkennung von Datenfehlern durch Nutzung eines ECC; und 2)
selbst wenn wenige oder keine Datenfehler erkannt werden, kann eine
Verschiebung der Ladungsspeicherpegel erkannt werden, bevor diese
Datenlesefehler bewirken.
-
Wie
zuvor diskutiert, können
für die
Scrub-Lesebedingungen Grenzen festgelegt werden, um auf bestimmte
erwartete Störmechanismen
abzuzielen, oder um einfach auf eine ausreichende Toleranzgrenze
in den gespeicherten Pegeln hin zu überprüfen. Egal ob die Daten unter
nominellen Bedingungen oder Bedingungen mit Toleranzgrenzen gelesen
werden, die Entscheidung, ob eine korrigierende Maßnahme erfolgt
oder nicht, kann auf Grundlage der Anzahl der fehlerhaften Bits
getroffen werden, die während
des Scrub-Lesevorgangs
erkannt werden. Wenn beispielsweise die Anzahl der fehlerhaften
Bits unterhalb der ECC-Korrekturfähigkeiten des Systems liegt,
kann das System entscheiden, die korrigierende Maßnahme aufzuschieben,
oder kann den Fehler insgesamt ignorieren.
-
Zusätzlich zur
Nutzung der Anzahl der fehlerhaften Bits als Schwellwert zum Einleiten
einer korrigierenden Maßnahme
kann das System die Entscheidung zur Korrektur auf Grundlage anderer
Faktoren treffen, beispielsweise dem Muster der fehlerhaften Bits.
Zum Beispiel können
die ECC-Korrekturfähigkeiten
im Hinblick auf das Muster der Bitfehler sensitiv sein, oder die
Bitfehlermuster können
für einen
bestimmten bekannten Störmechanismus
in dem nichtflüchtigen
Speicher kennzeichnend sein. Es kann andere Gründe geben, um den Schwellwert
basierend auf Bitfehlermustern festzulegen. Das Bitfehlermuster
ergibt sich im Allgemeinen während
des ECC-Korrekturvorgangs.
-
Aus
Gründen
des Leistungsverhaltens kann es wünschenswert sein, eine korrigierende
Scrub-Maßnahme
aufzuschieben, selbst wenn festgelegt worden ist, dass die korrigierende
Maßnahme
erforderlich ist. Die Gründe
dafür können Echtzeiterwägungen beinhalten.
Beispielsweise ist es möglich,
dass ein Host einen bestimmten Datentransfer benötigt und dass zweckbestimmte
Ressourcen, die zu bestimmten Zeitpunkten einem Scrub-Vorgang unterworfen
werden, die Fähigkeit
des Speichersystems beinträchtigen
könnten,
die garantierte Datenrate zu erfüllen.
Für einen
solchen Zweck könnte
das Speichersystem die Parameter der Scrub-Operation in eine Warteschlange
stellen, und zwar zur späteren
Bearbeitung zu einem Zeitpunkt, wenn das Ausführen des Scrub-Vorgangs das
Leistungsverhalten des Hosts nicht beeinträchtigt. Die korrigierenden
Scrub-Vorgänge
können
auf einen späteren
Zeitpunkt während
der Befehlsbearbeitung des Hosts, auf einen Zeitpunkt nach der Befehlsbearbeitung
oder bis zu einem späteren
Hostbefehl aufgeschoben werden. Die Hauptsache ist, dass die Parameter
für die
Scrub-Operation gespeichert und zu einem späteren Zeitpunkt verarbeitet werden,
wenn dies für
den Host am praktischsten ist.
-
Es
gibt zwei deutlich verschiedene Extreme von Speicherarchitekturen,
die jeweils zu unterschiedlichen Verfahren der Abbildung von Hostdaten
auf physische Speicherstellen in dem Speicherbauelement und zum
Verwalten der einmal programmierten Daten und zum Zugreifen auf
diese führen.
Der grundlegende Unterschied zwischen den beiden Architekturen betrifft
die Größe der minimalen
Löscheinheit
und deren Beziehung zu der Größe des Host-Protokoll-Datensektors.
-
Wenn
die Größe der minimalen
Löscheinheit
ungefähr
derjenigen des Host-Datensektors entspricht, ist es möglich, ein
direktes Adressierungsschema zu implementieren, bei welchem ein
gegebener Host-Datensektor im Allgemeinen auf dieselbe physische
Speicherstelle abgebildet wird, an die er von dem Host geschrieben
wird. Bei einem solchen Schema werden die vorherigen Inhalte im
Allgemeinen an der physischen Speicherstelle gelöscht, bevor die diese ersetzenden
Daten an ihre Stelle geschrieben werden. Dieses Umschreiben kann
ein Lesen-Modifizieren-Schreiben umfassen, wenn die Größe der minimalen
Löscheinheit
größer als diejenige
eines Host-Sektors ist. Es ist bei diesem Adressierungsschema möglich, dass
die Hostsektoren neu auf alternative Speicherstellen in dem Speichersystem
abgebildet werden, dies erfolgt jedoch im Allgemeinen nur während Sektor-Neuzuordnungen
als Teil eines Defektmanagementvorgangs oder aus irgendwelchen anderen
Gründen
bezüglich
der Systemzuverlässigkeit.
Nach einer solchen Abbildung wird der Host-Sektor allgemein bis
zu irgendeinem anderen Neuzuordnungsereignis auf die neue physische
Speicherstelle abgebildet bleiben. Bei einem solchen direkten Adressabbildungsschema
umfasst die auf einer Störung
beruhende korrigierende Maßnahme
im Allgemeinen das Löschen
der Inhalte von der physischen Speicherstelle, für die eine Störung festgestellt
worden ist, und das neue Schreiben dieser an dieselbe Speicherstelle.
Etwaige Fehler während
des Neuschreibens werden in einer Weise behandelt, die der in dem
System zur Anwendung kommenden allgemeinen Ausnahmebehandlung entspricht,
darunter, aber nicht ausschließlich,
erneutes Löschen und
erneutes Schreiben, Neuzuordnen, Änderung der Lösch- oder
Schreibparameter, und so weiter.
-
Wenn
andererseits die Größe der minimalen
Löscheinheit
viel größer als
diejenige der Host-Sektoren ist, ist es üblich, ein Adressierungsschema
mit Löschgruppenbildung,
ein so genanntes Erase-Pooling, zu implementieren. Ein solches Adressierungsschema
kann ebenso gut auch bei Speichern implementiert werden, die eine
kleine minimale Löscheinheit
aufweisen. Bei einem Schema mit Löschgruppenbildung sind die Host-Sektoren
normalerweise zu logischen Blöcken
gruppiert, die dann auf physischen Löscheinheiten abgebildet werden.
Ein gegebener Host-Datensektor ist innerhalb einer Löscheinheit
von anderen Host-Datensektoren umgeben. Wenn der Host einen gegebenen
Datensektor schreibt, wäre
es unpraktisch, sämtliche
den Zielsektor umgebende Sektoren zu lesen, den Block zu löschen und
danach sämtliche
Sektoren zurück
in die Löscheinheit
zu schreiben, wobei der eine Host-Sektor die neuen Daten enthält. Um solche
Vorgänge
mit übermäßigem Overhead
zu vermeiden, werden bei einem Schema mit Löschgruppenbildung im Allgemeinen
eine Reihe von Löscheinheiten
im gelöschten
Zustand gehalten, und zwar zum Zwecke des Haltens neuer Versionen
von Daten, wenn diese geschrieben werden. Sektoren werden für Zwecke
der Datenverwaltung im Allgemeinen zu logischen Gruppen zusammengefasst,
und im Allgemeinen wird das System versuchen, eine physische Nähe von in
der gleichen logischen Gruppe befindlichen Sektoren aufrechtzuerhalten.
Mehrere Löscheinheiten
können
kombiniert werden, sodass sie ein als Metablock oder virtueller
Block bezeichnetes logisches Konstrukt bilden, normalerweise zum
Zwecke der Ermöglichung
einer hohen Parallelität
beim Schreiben. Im Allgemeinen werden die neuen Daten von dem Host
an eine gelöschte
Speicherstelle geschrieben. Zu einem gewissen Zeitpunkt werden die
anderen Sektoren aus derselben logischen Gruppe, die nicht durch neue
Daten ersetzt worden sind, entweder in denselben Metablock kopiert,
oder sie werden zusammen mit den neu geschriebenen Daten in einen
anderen Metablock kopiert. Später,
wenn sämtliche
Daten in einem gegebenen Metablock oder in einer Löscheinheit
ersetzt worden sind oder an eine andere Stelle kopiert worden sind,
wird der Metablock oder die Löscheinheit
gelöscht
und wird als Teil des Pools gelöschter
Löscheinheiten betrachtet.
Bei einem solchen Adressierungsschema mit Löschgruppenbildung umfasst die
auf einer Störung beruhende
korrigierende Maßnahme
im Allgemeinen das Kopieren der beeinträchtigten Daten an eine andere Speicherstelle
in dem Speichersystem zusammen mit einer etwaigen Datenkonsolidierung,
die für
das System im Hinblick auf ein normales Verhalten des Speichersystems
erforderlich ist.
-
Es
ist jedoch möglich,
dass Daten, für
die eine korrigierende Maßnahme
erforderlich ist, während
einer Scrub-Operation anders als bei Schreiboperationen, die auf
einer Aktivität
des Hosts oder einer allgemeinen Datenverwaltung beruhen, behandelt
werden. Es ist möglich,
die Daten an eine spezielle Speicherstelle zu schreiben, die zum
Halten solcher Daten während
einer kurzen Zeitspanne reserviert ist, bis es für das System praktisch ist,
diese mit logisch kontinuierlichen Daten zu konsolidieren, wobei
dieser Bereich entweder in Reserve gehalten wird oder bei Bedarf
zugewiesen wird. Unter bestimmten Umständen ist es auch möglich, dass das
System einfach die Daten löscht
und neu an dieselbe Speicherstelle schreibt. Wenn beispielsweise
wenige oder keine weiteren Daten in dem physischen Block angesiedelt
sind, könnten
die anderen Daten entweder dauerhaft an eine andere Stelle verschoben
werden oder könnten
während
des Löschens
zeitweilig anderswo gespeichert werden, möglicherweise in einem flüchtigen
Speicher, und zusammen mit den Daten, für welche die korrigierende
Maßnahme
erforderlich ist, zurückgeschrieben
werden. Etwaige Fehler während
des Daten-Schreibvorgangs würden
in einer Weise behandelt, die der allgemeinen Ausnahmebehandlung
entspricht, wie sie in dem System zur Anwendung kommt, darunter,
aber nicht ausschließlich,
erneutes Schreiben, erneutes Zuweisen, Schreiben an eine neue Speicherstelle, Ändern von
Lösch-
oder Schreibparametern, erzwungene Rotation der Datenpolarität, und so
weiter.
-
Es
ist möglich,
dass einzelne Speicherelemente, Gruppen von Speicherelementen oder
andere Strukturen gegenüber
Störungen
empfindlicher sind als andere. Als Beispiel für solche möglichen Strukturen oder Gruppierungen
können
Flash-Speicherelemente von Flash-Speichern derart angeordnet sein,
dass sie eine gemeinsame Drain-, Source- oder Gate-Leitung gemeinsam
nutzen, und aufgrund von Prozessschwankungen ist es möglich, dass
eine solche Gruppe von verbundenen Speicherelementen eine stärkere Exposition
gegenüber
potenziell störenden
Signalen erfährt
als im Mittel. Gleichermaßen
können
einzelne Speicherelemente aufgrund von Abweichungen beim Prozess,
der zur Ausbildung des Arrays genutzt wird, anfälliger sein als andere. Das
Speichersystem kann derart gestaltet werden, dass diese Bereiche,
die als empfindlich gegenüber Störungen erachtet
werden, dauerhaft für
die Abbildung ausgeschlossen werden oder neu zugeordnet werden. In
einem extremen Fall können
alle Speicherelemente oder andere Strukturen beim ersten Auftreten
einer korrigierenden Scrub-Maßnahme
neu zugeordnet werden. Beispielsweise können diejenigen Speicherelemente, die
Bits enthalten, welche eine ECC-Korrektur
erfordern, für
die Abbildung ausgeschlossen werden, wenn redundante Speicherelemente
verfügbar
sind. Bei anderen Ausführungsformen
können
die Speicherstellen der korrigierenden Maßnahmen protokolliert werden
und später
für Zwecke
der Neuzuordnung von Speicherelementen oder Gruppierungen zu einem
späteren
Zeitpunkt analysiert werden. Die Analyse kann einen Schwellwert
dafür beinhalten,
wie oft eine korrigierende Maßnahme
für eine
gegebene Gruppierung erforderlich war. Bei einigen Fällen müssen die
protokollierten Daten möglicherweise
mit Kenntnissen zu den physikalischen Aspekten des Speicherbauelements
analysiert werden, um das Vorhandensein erwarteter physikalischer Strukturen,
beispielsweise verbundener Speicherelemente zu erkennen. Die Art
und Weise, in welcher Speicherelemente oder Gruppierungen von Speicherelementen
neu zugeordnet werden, hängt
von der Implementierung des Speichersystems ab. Zum Beispiel kann
ein physischer Bereich, der einen logischen Sektor enthält, redundante
Speicherelemente enthalten, und zwar zum Zwecke des Ersetzens von
Speicherelementen, die für
die Abbildung ausgeschlossen werden. Bei einem weiteren Beispiel
kann ein gesamter Sektor oder eine gesamte Gruppe von Sektoren für die Abbildung
ausgeschlossen werden, wenn für
diese(n) eine korrigierende Maßnahme
erforderlich war.
-
Scrub-Operationen
können
im Hintergrund von Host-Operationen ausgeführt werden, oder zwischen Host-Operationen.
Es kann wünschenswert
sein, das Verhalten der Scrub-Operation
zu ändern,
und zwar in Abhängigkeit
von der Art der Operation, die der Host angefordert hat. Beispielsweise
ist es möglicherweise nicht
praktisch, dass eine korrigierende Scrub-Maßnahme während der Ausführung eines
Lesebefehls des Hosts stattfindet, in welchem Fall die korrigierende
Maßnahme
bis zu einem Zeitpunkt aufgeschoben werden kann, der für das Speichersystem
geeigneter ist.
-
Ein
alternativer Ansatz zum Vermeiden von Störungen besteht darin, Daten,
die eine potenziell störende
Exposition erfahren haben, zu verschieben, ohne diese zunächst zu überprüfen, um
festzustellen, ob die Daten fehlerhaft sind. Es gibt viele Ansätze, um
die Häufigkeit
und die Position der zu verschiebenden Daten auszuwählen, von
denen die meisten bereits beschrieben worden sind.
-
ALLGEMEINE AUSFÜHRUNGSFORM DES SCRUB-VORGANGS
-
Ein
Ablaufdiagramm aus 8 umreißt die Hauptschritte eines
exemplarischen Scrub-Algorithmus
für einen
Flash-Speicher. Ein erster Schritt 91 überwacht die Aktivität des Speichersystems,
um festzustellen, wann ein auch als Trigger-Event bezeichnetes Auslöseereignis
für einen
Scrub-Vorgang aufgetreten ist. Ein solches Trigger-Event kann eines
der folgenden sein:
- 1. Wenn ein Datenlese-,
Datenschreib- oder Löschvorgang
in einem gegebenen Block oder einer anderen Einheit des Arrays auftritt,
der die Ladungspegel anderer Einheiten stören kann. Die Intensität und/oder Dauer
des Vorgangs kann für
die Bestimmung, ob ein Scrub-Vorgang auszulösen ist oder nicht, wesentlich sein,
ebenso wie die Anfälligkeit
des Arrays für
Störungen
(beispielsweise wenn der Speicher mit mehreren Zuständen mit
schmalen Ladungspegelbereichen, welche die einzelnen Zustände definieren,
arbeitet).
- 2. Wenn bei einem normalen System-Lesevorgang einer gegebenen
Einheit Daten mit zumindest einem oder einer vorgegebenen Anzahl
von Bitfehlern gelesen werden.
- 3. Wenn Lesevorgänge
mit Toleranzgrenzen (mit Referenzpegel, die derart festgelegt sind,
dass eine schmalere programmierte Verteilung als bei dem normalen
Lesevorgang gelesen wird) zeigen, dass die Schwellspannungspegel
der programmierten Zellen nicht optimal sind, wenngleich keine Bitfehler
existieren.
- 4. Nachdem eine vorgegebene Zeitspanne seit dem letzten Scrub-Vorgang
abgelaufen ist.
- 5. Wenn der Host eine Scrub-Operation einleitet.
-
Die
Zielstellung besteht insgesamt darin, eine Scrub-Operation häufig genug
einzuleiten, um gestörte Daten
zu erkennen, bevor diese so zahlreich werden, dass sie jegliche
Wiederherstellungsmöglichkeiten
(ECC und dergleichen), die in dem Speichersystem verfügbar sein
können, übersteigen.
-
Wenn
ein Scrub-Trigger-Event erkannt wird, werden in einem nächsten Schritt 93 Speicherstellen
in dem Speicher-Array zum Ausführen
einer Scrub-Operation bestimmt. Beispielhafte Kandidaten können folgendermaßen bestimmt
werden:
- 1. Blöcke oder eine (mehrere) andere
Einheit(en) außerhalb
der gegebenen Einheit, die mit der gegebenen Einheit Bitleitungen,
Wortleitungen oder andere Signalleitungen, an welche während der
Lese-, Schreib- oder Löschvorgänge Spannungen
oder Ströme
angelegt werden, gemeinsam nutzen.
- 2. Eine (mehrere) andere Einheit(en) außerhalb der gegebenen Einheit,
bei denen das Signalleitungsfeld mit denen der gegebenen Einheit
gekoppelt ist, sodass zwischen diesen Nebensprechen existiert.
- 3. Ob eine (mehrere) solcher anderen Einheiten programmiert
oder gelöscht
sind, kann darüber
bestimmen, ob sie durch die Operation an der gegebenen Einheit potentiell
beeinträchtigt
werden.
- 4. Die eine (mehrere) potentiell beeinträchtigte(n) Einheit(en) können davon
abhängen,
ob der Vorgang ein Lese-, Schreib- oder Löschvorgang ist.
- 5. Falls durch einen normalen System-Lesevorgang der gegebenen
Einheit ausgelöst,
bei dem ein (mehrere) Fehler in den gelesenen Daten entdeckt werden,
wird die gegebene Einheit für
eine Scrub-Operation festgelegt.
- 6. Die relative Frische der Daten in den Kandidaten-Blöcken kann
genutzt werden, um diejenigen auszuschließen, die in jüngerer Zeit
neu geschrieben worden sind.
-
Auf
die Festlegung eines oder mehrerer Speicherblöcke oder einer oder mehrerer
anderer Einheiten als Kandidaten für einen Scrub-Vorgang folgt
nicht notwendigerweise die Ausführung
des Scrub-Vorgangs. Wie durch den nächsten Schritt 95 angegeben
wird, kann die Einleitung des Scrub-Vorgangs unter bestimmten Bedingungen
aufgeschoben werden, Beispiele dafür sind:
- 1.
Scrub-Lesevorgänge
können
aufgeschoben werden, um das Leistungsverhalten des Systems zu optimieren
oder um speziellen Betriebserfordernisse des Speichersystems in
Echtzeit zu entsprechen.
- 2. Scrub-Vorgang mit selbsttätiger
Anpassung: die Rate, mit welcher Scrub-Operationen ausgeführt werden, kann dynamisch
angepasst werden, um ein optimales Gleichgewicht zwischen der Aufrechterhaltung des
Leistungsverhaltens und der Datenintegrität zu schaffen.
- 3. Die Dringlichkeit der Ausführung einer Scrub-Operation
kann teilweise anhand von Charakteristiken der Einheiten, die als
potentiell beeinträchtigt
identifiziert werden, bestimmt werden, beispielsweise deren Ereignisgrad
(die Anzahl der Programmier/Lösch-Zyklen) und die Art
des Ereignisses, das die Auslösung
der Scrub-Operation bewirkt hat.
- 4. Ein Scrub-Trigger-Event kann ferner derart eingeschränkt werden,
dass es in deterministischer, zufälliger oder pseudozufälliger Weise
eintritt:
(a) nach einer spezifizierten Anzahl von Host-Operationen;
(b)
nach einer spezifizierten Anzahl von physikalischen Lese-, Schreib-
und/oder Löschvorgängen;
(c)
nach einer spezifizierten Zeitspanne;
(d) basierend auf Nutzungscharakteristiken
des Hosts; oder
(e) in zufälliger
oder pseudozufälliger
Abfolge, deren Erzeugung und Überprüfung an
einen der vorstehenden Faktoren gekoppelt werden kann.
-
In
einem nächsten
Schritt 97 werden sämtliche
oder lediglich einige der Blöcke
oder anderen Einheiten des Speichers, die in Schritt 93 als
Kandidaten für
einen Scrub-Vorgang identifiziert worden sind, für den Scrub-Vorgang ausgewählt. Die
Auswahlkriterien umfassen:
- 1. Die Anzahl der
bestimmten Einheiten, die für
jeden Scrub-Vorgang festgelegt werden, kann derart gewählt werden,
dass ein Gleichgewicht zwischen der Auswirkung der für den Scrub-Vorgang
erforderlichen Zeit auf das Leistungsverhalten des Systems und der
Notwendigkeit, die Datenintegrität
aufrechtzuerhalten, geschaffen wird.
- 2. Die Art und Weise, in welcher dieses Gleichgewicht beibehalten
wird, kann darin bestehen, eine Anzahl von Einheiten für den aktuelle
Scrub-Vorgang zu bestimmen, die von dem Alter des Speichers, der
Anzahl der Programmier/Lösch-Zyklen,
die die identifizierten Einheiten erfahren haben, der Art des Ereignisses, das
den Scrub-Vorgang ausgelöst
hat, und einer Verlaufsgeschichte korrigierender Maßnahmen,
die notwendigerweise an Daten in den identifizierten Einheiten erfolgt
sind, abhängt.
- 3. Die Anzahl der in einem Scrub-Vorgang umfassten Einheiten
kann von dem Alter des Speichers, der Anzahl der Programmier/Lösch-Zyklen,
welche die gegebenen Einheiten erfahren haben, und der Art des Ereignisses,
das den Scrub-Vorgang ausgelöst
hat, abhängen.
- 4. Alternativ können
weniger als sämtliche
identifizierten Einheiten für
den Scrub-Vorgang
ausgewählt
werden, indem eine deterministische, zufällige oder pseudozufällige Abfolge
verfolgt wird, in einer Weise, die mit der normalen Nutzung nicht
in Zusammenhang steht.
-
Als
nächstes
werden, wie in Schritt 99 angegeben ist, Daten aus den
ausgewählten
Einheiten gelesen (Scrub-Lesevorgang), und zwar folgendermaßen:
- 1. Ein Scrub-Lesevorgang steht nicht direkt
mit der Beendigung einer bestimmten Operation des Hosts oder mit
anderen Systemoperationen wie etwa einem Abnutzungsausgleich in
Zusammenhang, wird üblicherweise
aber in der gleichen Weise wie normale Daten-Lesevorgänge ausgeführt.
- 2. Begrenzte Lesevorgänge
(Lesevorgänge
mit Referenzpegeln, die sich von denjenigen der normalen Daten-Lesevorgänge unterschieden)
können
unter speziellen Umständen
ausgeführt
werden:
(a) als ein zweiter Lesevorgang für Daten, die zu viele Fehler
aufweisen, als dass sie durch einen ECC korrigiert werden könnten, wobei
die Referenzpegel bei dem zweiten Lesevorgang gelockert sind, sodass
eine breitere programmierte Verteilung als bei dem normalen Lesevorgang
gelesen wird (oder kann alternativ in dem später diskutierten Datenkorrekturschritt 107 ausgeführt werden);
oder
(b) wenn durch den spezifischen Störmechanismus, von dem erwartet
wird, dass er durch das auslösende Ereignis
bewirkt wird, die programmierten Pegel wahrscheinlich deutlich verschoben
werden, könnte
der anfängliche
Lesevorgang ein Lesevorgang mit Toleranzgrenzen mit weiteren Referenzpegeln
sein; oder
(c) als ein zweiter Lesevorgang für Daten,
die keine oder einige wenige Bitfehler aufweisen, die durch einen ECC
korrigiert werden können,
um Daten zu identifizieren, die als Ladungspegel gespeichert sind,
die sich von den optimalen Pegeln weg verschoben haben, wobei die
Referenzpegel bei diesem zweiten Lesevorgang verengt werden, sodass
eine schmalere Verteilung als bei dem normalen Lesevorgang gelesen
wird. (Eingegrenzte Scrub-Lesevorgänge werden später mit
Bezug auf 10 diskutiert.)
- 3. Als Teil des Lesens der Daten eines Blocks werden auch die
Overhead-Daten gelesen. Wenn die relative Frische der Daten im Header
gespeichert ist, kann diese genutzt werden, um die frisch umgeschriebenen Blöcke zu identifizieren,
die keinem Scrub-Vorgang
unterzogen zu werden brauchen.
-
In
einem nächsten
Schritt 101 wird die Integrität der gelesenen Daten bewertet.
Als Teil des Scrub-Lesevorgangs kann ein ECC anhand der aus der/den
Speichereinheit(en) gelesenen Nutzerdaten berechnet werden und mit
dem ECC verglichen werden, der zuvor während der Programmierung berechnet
und zusammen mit den Nutzerdaten gespeichert worden ist. Solang
keine Bitfehler oder eine geringe Anzahl von Fehlern, die durch
den ECC korrigiert werden können,
vorhanden sind, braucht der zweite, der Lesevorgang mit Toleranzgrenzen
mit gelockerten Referenzpegeln, wie zuvor beschrieben, nicht ausgeführt zu werden.
-
Ein
zusätzlicher
Lesevorgang, der optional erfolgen kann, betrifft die Pegel von
Verfolgungszellen, falls solche in dem Speicher-Array vorhanden
sind, um zu sehen, ob sich deren gespeicherte Werte geändert haben.
Verfolgende Speicherzellen sind oft vorhanden, um die Referenzpegel
festzulegen, die genutzt werden, um die Speicherzellen zu lesen.
-
Wenn
die Daten gelesen sind und die Anzahl der Fehler (falls vorhanden)
der gelesenen Daten bekannt ist, wird in einem nächsten Schritt 103 festgestellt,
ob eine korrigierende Maßnahme
notwendig ist und ob sie erwünscht
ist. Einige Erwägungen
sind die folgenden:
- 1. Ein Ansatz besteht darin,
Daten mit einer beliebigen Anzahl von Bitfehlern zu korrigieren,
womit bewirkt wird, dass der Scrub-Vorgang den stärksten Einfluss
auf das Leistungsverhalten des Speichersystems hat.
- 2. Ein weiterer Ansatz besteht darin, auf das Korrigieren der
Daten zu verzichten, bis die Anzahl der Datenbitfehler einen Schwellwert
N pro gelesener Einheit übersteigt,
sodass der Einfluss des Scrub-Vorgangs auf das Leistungsverhalten
reduziert wird.
- 3. Das Muster der fehlerhaften Datenbits, so wie es durch Vergleich
der ECCs festgestellt wird, kann ebenfalls genutzt werden, um zu
bestimmen, ob eine Korrektur der Daten erwünscht ist.
- 4. Daten, die in jüngerer
Zeit neu geschrieben worden sind (relativ hoher Grad an Frische),
werden bevorzugt keinem Scrub-Vorgang unterzogen.
-
Generell
wird vorzugsweise ein Ausgleich zwischen der Auswirkung des Beendens
des Scrub-Vorgangs auf das Leistungsverhalten und der Schwere der
Fehler im Hinblick auf die momentane und zukünftige Datenintegrität geschaffen,
wenn festgelegt wird, ob die fehlerhaften Daten korrigiert werden
sollen.
-
In
einem nächsten
Schritt 105 wird bestimmt, ob eine korrigierende Scrub-Maßnahme ausgeführt wird oder
bis zu einem späteren
Zeitpunkt aufgeschoben wird. Eine der Erwägungen beim Treffen dieser
Entscheidung ist die gleiche wie in Schritt 95, nämlich das
Aufschieben, um speziellen Betriebserfordernissen des Speichersystems
in Echtzeit zu diesem Zeitpunkt zu entsprechen. Im Allgemeinen wird
die Beendigung des Scrub-Vorgangs
vorzugsweise aufgeschoben, wenn dessen spätere Beendigung eine geringere
Auswirkung auf das Leistungsverhalten des Systems bewirkt als wenn
diese zum momentanen Zeitpunkt erfolgt. Es ist üblicherweise nicht wünschenswert,
die normale Verarbeitung durch den Controller zu unterbrechen, um
einen Scrub-Vorgang auszuführen,
insbesondere wenn wegen einer großen Anzahl von Fehlern, die
durch den ECC zu korrigieren sind, der Notwendigkeit der Datenkonsolidierung
und dergleichen für
den Scrub-Vorgang mehr Zeit als üblich
erforderlich sein wird. Bei einem Aufschub werden die durch den
Scrub-Lesevorgang gelesenen Daten, deren Adressen, etwaige durch
die ECC-Analyse festgestellte Fehler und andere Parameter des Scrub-Vorgangs,
die in den vorherigen Schritten erkannt worden sind, temporär gespeichert.
Diese Daten und Parameter werden dann später gelesen, und der Scrub-Vorgang
wird zu einem Zeitpunkt beendet, zu dem die Auswirkung auf das Leistungsverhalten
des Systems geringer ist.
-
Wenn
der Scrub-Vorgang beendet werden soll, werden die Daten in einem
nächsten
Schritt 107 korrigiert. Die Daten werden in diesem Fall
unter Nutzung des ECC korrigiert. Falls diese nicht als Teil des
zuvor genannten Schritts 99 erfolgt sind, können ein
oder mehrere Lesevorgänge
mit Toleranzgrenzen erforderlich sein (bei denen die Referenzpegel
gelockert sind, um eine breitere programmierte Verteilung zu lesen
als bei denjenigen, die während
des früheren
Lesevorgangs genutzt wurden), um die Daten wiederherzustellen, falls ein
normaler oder Scrub-Lesevorgang mehr fehlerhafte Bits ergibt, als
durch den genutzten ECC korrigiert werden können. Danach, in einem Schritt 109,
wird eine geeignete korrigierende Maßnahme ausgeführt. Diese kann
das Neuschreiben der korrigierten Daten an dieselbe Speicherstelle,
von welcher sie gelesen worden sind, umfassen. Dies macht es natürlich erforderlich,
zunächst
den Block zu löschen,
in welchen die Daten neu geschrieben werden, was bei der Speicheranordnung
aus 2 praktisch sein kann, bei welcher jeder korrigierte
Datensektor einen Speicherzellenblock ausfüllt. Dieses Vorgehen ist aber
nicht effizient bei den Speicheranordnungen aus den 5 und 6 mit
großen
Blöcken,
es sei denn, es sind genügend
korrigierte Datensektoren vorhanden, die korrigiert worden sind
und mit logisch aufeinanderfolgenden Adressen neu geschrieben werden
müssen,
sodass sie einen Block ausfüllen
oder nahezu ausfüllen.
-
Alternativ
können
die korrigierten Daten neu an eine andere Speicherstelle als diejenige,
von wo sie zu einem früheren
Zeitpunkt des Scrub-Vorgangs gelesen worden sind, geschrieben werden.
Wenn die Speicheranordnung große
Speicherblöcke
nutzt, wie in den 5 und 6 gezeigt
ist, können
das Löschpool- oder
andere Verwaltungsverfahren für
große
Blöcke,
die zuvor beschrieben worden sind, genutzt werden, wenn die neu
zu schreibenden Daten weniger als die Kapazität eines Blocks ausmachen. Es
ist beispielsweise nicht ungewöhnlich,
dass Daten in nur einer oder zwei Speicherzeiten aus einem Block,
der 16, 32 oder mehr Speicherseiten enthält, korrigiert werden sollen.
Für solche
Fälle kann
ein Block in einer oder mehreren Ebenen des Arrays für die temporäre Speicherung
einer oder wenigerer Speicherseiten mit korrigierten Daten zweckbestimmt
sein. Die neu geschriebenen Daten werden danach mit den in den Speicherseiten
des ursprünglichen
Blocks gespeicherten unkorrigierten Daten kombiniert, und zwar zu
einem geeigneten Zeitpunkt, beispielsweise während einer Datenkonsolidierung
(Speicherbereinigung), die durch andere Faktoren während des
normalem Betriebs des Speichers ausgelöst wird. Alternativ kann eine
solche Konsolidierung dadurch eingeleitet werden, dass dieser zweckbestimmte
Block voll wird, oder wenn eine vorgegebene Zeitspanne abgelaufen
ist, nachdem die betreffenden Speicherseiten mit Daten in den zweckbestimmten
Block geschrieben worden sind, oder wie anderweitig für den Systembetrieb
geeignet.
-
Es
kann praktisch sein, einen gemeinsamen zweckbestimmten physischen
Block oder Blöcke
zum temporären
Speichern von Scrub-Neuschreibdaten von Speicherseiten vieler anderer
Blöcke
zu nutzen und dann später
die Daten der neu geschriebenen Speicherseiten mit den Daten aus
den anderen Speicherseiten ihrer ursprünglichen Blöcke zu konsolidieren. Beispielsweise
werden neu geschriebene Scrub-Speicherseiten von den Blöcken 1 und
2 vorübergehend
in einem temporären
Block 3 gespeichert. Später
werden die Scrub-Neuschreibseiten des Blocks 1 von dem Block 3 in
einen gelöschten
Block 4 kopiert, und die restlichen unveränderten Speicherseiten des
Blocks 1 werden ebenfalls in den Block 4 kopiert, um die in dem
physischen Block 1 abgebildeten Daten zu konsolidieren. Das gleiche
erfolgt dann in einem weiteren gelöschten Block 5, in welchem
die Scrub-Neuschreibseiten des Blocks 2, die in Block 3 gespeichert
sind, sowie die unveränderten Datenseiten
aus dem Block 2 konsolidiert werden.
-
Beim
dem System aus 6, bei dem Metablöcke genutzt
werden, kann entweder ein solcher zweckbestimmter Block in jeder
Ebene vorhanden sein, um neu geschriebene Daten von anderen Blöcken in
dieser Ebene zu speichern, oder ein einziger zweckbestimmter Block
in dem gesamten System, in welchen korrigierte Daten von sämtlichen
Speicherseiten in einer beliebigen Ebene geschrieben werden. Die
spezielle Vorgehensweise, die gewählt wird, hängt von der Anzahl der Speicherseiten
in den einzelnen Blöcken,
der Anzahl der Speicherseiten in dem gesamten Speicher-Array und
einer Vorhersage zu der erwarteten Anzahl und der Häufigkeit
von Speicherseiten, deren Daten durch den Scrub-Prozess korrigiert
werden, ab. Ein Speicher-Array mit einer Struktur und/oder Betriebsweise,
durch die es für
Störungen
empfindlich ist, wird mehr zweckbestimmte Blöcke benötigen als ansonsten. Wenn der
Scrub-Lesevorgang keine Datenfehler erkennen lässt, der Scrub-Vorgang aber
ausgeführt
wird, um verschobene gespeicherte Ladungspegel zurück in die
Mitte ihres Zustandsbereichs zu bewegen, werden die gelesenen Daten
einfach neu geschrieben, da offensichtlich keine Korrekturen erforderlich
sind.
-
Die
Art und Weise, in welcher einige Speichersysteme genutzt werden,
bewirkt wenige Störungen.
Der Scrub-Prozess wird dann selten ausgeführt, da wenige auslösende Ereignisse
zu erkennen sind. Außerdem ist
es praktisch, die relativ kleine Menge an neu geschriebenen Daten
dauerhaft zusammen in einem oder mehreren zweckbestimmten physischen
Blöcken
zu speichern, unabhängig
von den physischen Blöcken,
in welchen die dem Scrub-Vorgang unterzogenen Daten ursprünglich angesiedelt
waren. In diesem Fall werden die Speicherseiten mit einem Scrub-Vorgang
unterzogenen Daten als Schritt des Scrub-Prozesses nicht wieder
mit den Speicherseiten mit anderen, logisch kontinuier lichen Daten
zu physischen Blöcken
kombiniert. Ein weiteres Element der korrigierenden Maßnahme besteht
darin, die korrigierten Daten mit einer anderen Rotation als beim
ursprünglich
geschrieben Zustand neu zu schreiben. Zum Beispiel können die
vier analogen Speicher-Zustandsbereiche eines Vierzustandssystems
ursprünglich
derart ausgelegt sein, dass sie 00, 01, 10 bzw. 11 repräsentieren,
und können
beim Neuschreiben derart ausgelegt werden, dass sie 11, 10, 01 und
00 repräsentieren.
Die Umsetzung erfolgt durch den Speichercontroller, wenn die Daten
gelesen werden, und zwar unter Nutzung der Daten für die spezifische
Rotation, die als Teil der Overhead-Daten oder anderweitig geführt werden.
Die Datenrotation kommt in vorteilhafter Weise für neu geschriebene Daten sowohl
von korrigierten Daten als auch von Daten, für die keine Korrektur erforderlich
war, zur Anwendung.
-
Ein
weiteres Element der korrigierenden Maßnahme, das umfasst sein kann,
besteht darin, Speicherseiten oder Blöcke des Speichers, die in ihrer
Verlaufshistorie viel stärker
durch Störungen
beeinträchtigt
waren als im Mittel, für
die Speicherabbildung auszuschließen. Dies wird erkannt, indem
die Anzahl der Datenfehler in verschiedenen Speicherseiten, Blöcken, Ebenen
und/oder anderen definierten Bereichen des Arrays überwacht
wird. Selbstverständlich
sollte sorgfältig
darauf geachtet werden zu verhindern, dass Speicherseiten oder Blöcke für die Speicherabbildung
ausgeschlossen werden, bei denen aus anderen Gründen als einer hohen Anfälligkeit
für Störungen Datenfehler
auftreten, beispielsweise weil ein Block öfter oder anders als im Mittel
genutzt wird.
-
Der
Scrub-Algorithmus wird üblicherweise
durch den Speichercontroller gesteuert, könnte alternativ aber auch durch
den Host gesteuert werden. Wenn die Steuerung durch den Speichercontroller
erfolgt, ist der Algorithmus in der Firmware des Speichersystems
kodiert, die typischerweise von dem Mikroprozessor 21 (1A)
aus dem Controller-RAM 25 während des Betriebs des Speichers
ausgeführt
wird.
-
Der
spezifische Scrub-Algorithmus, der genutzt wird, hängt von
bestimmten Charakteristiken des Speichersystems, insbesondere der
Speicherbauelemente 11 und 13 (1A),
ab. Exemplarische Charakteristiken sind folgende:
- (a)
die Anzahl der Host-Datensektoren, die in der Programmiereinheit
(üblicherweise
eine Speicherseite) gespeichert sind;
- (b) die Anzahl der Speicherzustände der Speicherzellen und
die Ausdehnung des Schwellspannungsbereichs, die für jeden
Speicherzustand bestimmt sind;
- (c) ob die Programmiereinheit (üblicherweise eine Speicherseite)
einen einzigen oder mehrere Host-Datensektoren umfasst;
- (d) die Anzahl der Programmiereinheiten (üblicherweise eine Speicherseite)
in einer Löscheinheit
(üblicherweise
ein Block); und
- (e) die Dichte der Speicherzellen und das Ausmaß sowie
die spezielle Neigung dafür,
dass eine Operation in einer Einheit Datenstörungen in einer anderen Einheit
bewirkt.
-
SPEZIFISCHE AUSFÜHRUNGSFORM DES SCRUB-VORGANGS
-
Eine
speziellere Ausführungsform
eines Scrub-Algorithmus ist in dem Ablaufdiagramm aus 9 dargestellt.
Generell kommen die gleichen Prozessschritte wie zuvor beschrieben
zur Anwendung, die detaillierter gezeigte Implementierung umfasst
jedoch Scrub-Lesevorgänge
mit Toleranzgrenzen, die mit Bezug auf 10 für ein Beispiel
eines Vierzustandssystems beschrieben werden (in jeder physikalischen
Ladungsspeichereinheit werden 2 Bits gespeichert). In 9 sind
zwei Eintrittspunkte für
den Prozessablauf gezeigt, bei 115, wenn ein Scrub-Trigger-Event
erkannt wird, und bei 117, wenn ein Befehl zum Ausführen aufgeschobener Scrub-Vorgänge empfangen
wird.
-
In
Schritt 115 wird der Speicher auf ein Scrub-Trigger-Event
hin beobachtet, wie es zuvor für
den Schritt 91 aus 8 diskutiert
worden ist. Analog werden in Schritt 119 eine (mehrere)
Kandidaten-Speicherzelleneinheit(en) für einen Scrub-Vorgang bestimmt,
genauso wie für
den Schritt 93 aus 8 beschrieben. Danach,
analog dem Schritt 95, wird in einem Schritt 121 aus 9 festgestellt,
ob der Scrub-Vorgang an irgendeiner der Kandidateneinheiten aufgeschoben
werden sollte, und zwar aufgrund anderer Systemvorgänge, die
zu diesem Zeitpunkt ausgeführt
werden müssen.
Ist dies der Fall, so werden, wie bei 123 angegeben ist,
die Adressen und andere notwendige Daten der Kandidaten-Zelleneinheiten
temporär
gespeichert, und der Prozess wartet mit der Wiederaufnahme bis zum
Abschluss von Systemoperationen mit höherer Priorität. Alternativ
kann die Beendigung der Scrub-Operation aufgeschoben werden, bis
ein späterer
spezieller Befehl von dem Host empfangen wird oder von dem Speichercontroller
generiert wird, und zwar in Schritt 117, wie es der Fall
ist, wenn bis zu einem späteren
Zeitpunkt in dem Prozess aufgeschoben wird. Nachdem die Daten für den aufgeschobenen
Scrub-Vorgang in Schritt 123 gespeichert worden sind, wird
der speziell ausgeführte
Scrub-Vorgang beendet, es sei denn, es sollen noch mehr Einheiten
einem Scrub-Vorgang unterzogen werden, wie in einem Schritt 124 bestimmt
wird. Sollen noch mehr Einheiten einem Scrub-Prozess unterzogen werden, kehrt der
Prozess zu Schritt 119 zurück.
-
In
einem nächsten
Schritt 125 wird die gleiche Funktion wie bei Schritt 97 aus 8 ausgeführt, nämlich die
Auswahl der dem Scrub-Prozess zu unterziehenden Kandidaten-Speicherzelleneinheiten.
Die nachfolgenden Schritte aus 9 werden
an einer der ausgewählten
Einheiten nach der anderen ausgeführt. Ein nächster Schritt 126 bewirkt,
dass die Lese-Messpunktpegel und andere Lesebedingungen anfangs
auf die normalen Lesepegel gesetzt werden. In einem Schritt 127 wird
dann ein Scrub-Lesevorgang unter den festgelegten Bedingungen an
einer ersten der Speicherzelleneinheiten ausgeführt, entsprechend dem Schritt 99 aus 8.
Die nachfolgenden Schritte werden an derselben einen Einheit ausgeführt, wobei
eine Schleife 129 zu Schritt 127 zurückführt, für die nächste der
ausgewählten
Einheiten in der Reihenfolge, bis diese alle dem Scrub-Vorgang unterzogen
sind. Natürlich
wird, wenn bei einer bestimmten Operation nur eine Einheit für einen Scrub-Vorgang
ausgewählt
worden ist, keine Schleife 129 zurück vorhanden sein.
-
Nach
dem Scrub-Lesevorgang aus Schritt 127 mit den in Schritt 126 festgelegten
Lesegrenzen wird in einem Schritt 131 festgestellt, ob
irgendwelche Datenfehler vorhanden sind, ähnlich dem Schritt 101 aus 8.
Wenn Fehler vorhanden sind, wird in einem nächsten Schritt 133 bestimmt,
ob die Fehler korrigierbar sind. Wenn ein ECC genutzt wird, um die
Integrität
der Daten zu bestimmen, dann wird in diesem Schritt 133 festgestellt,
ob die Anzahl der schlechten Bits in der gelesenen Dateneinheit
im Rahmen der Korrekturmöglichkeiten
des speziellen ECC-Algorithmus, der genutzt wird, liegt. Wenn die
Fehler korrigiert werden können,
wird in einem nächsten
Schritt 135 festgestellt, ob eine Korrektur sowohl notwendig
als auch wünschenswert
ist, entsprechend dem Schritt 103 aus 8.
Der Schritt 135 kann einfach darin bestehen, dass festgestellt
wird, ob die Anzahl fehlerhafter, aber korrigierbarer Bits geringer
als ein Schwellwert von eins oder einigen wenigen ist, in welchem
Fall festgelegt werden kann, keine korrigierende Maßnahme zu
ergreifen.
-
Die
Entscheidung in Schritt 135 kann auch davon beeinflusst
werden, ob die Daten und deren ECC Nutzerdaten oder Overhead-Daten
sind. Wie mit Bezug auf 3 beschrieben, können Overhead-Daten
ihren eigenen ECC aufweisen. Wenn dies der Fall ist, kann die Integrität der Nutzerdaten
und der Overhead-Daten in den Schritten 131 und 133 separat
geprüft
werden, und diese können
gar nacheinander über
die vollständige Schleife
hin bearbeitet werden, mit der Rückführung 129,
indem die Nutzerdaten und ihr ECC als eine Einheit und die Overhead-Daten
und deren ECC als andere Dateneinheit be trachtet werden, wenngleich
sie in derselben Speicherseite gespeichert sein können. Wenngleich
die Nutzung der jeweiligen ECCs der Overhead-Daten und der Nutzerdaten üblicherweise
gleich sein wird, kann der Prozess derart arbeiten, dass die Integrität der Overhead-Daten
genauer beibehalten wird. Dies stellt ein Beispiel für ein Gleichgewicht
zwischen dem Aufrechterhalten des Leistungsverhaltens des Systems,
das sich bei zu vielen Scrub-Operationen verschlechtert, und der
langfristigen Aufrechterhaltung der Integrität der gespeicherten Daten,
welche mit den Scrub-Operationen erzielt werden soll, dar.
-
Wenn
in Schritt 135 die Entscheidung getroffen wird, dass eine
Korrektur der korrigierbaren Fehler in der interessierenden Dateneinheit
erfolgen soll, wird in einem nächsten
Schritt 137 gefragt, ob die Korrektur der Daten aufgeschoben
werden soll. Ein Scrub-Vorgang
wird wünschenswerterweise
zum Beispiel dann aufgeschoben, wenn in den gelesenen Daten so viele
schlechte Bits vorhanden sind, dass deren Korrektur mehr Zeit brauchen
würde,
als an dieser Stelle verfügbar
ist. Wenn kein Aufschub erfolgt, werden die Fehler in einem Schritt 139 korrigiert,
analog dem Schritt 107 aus 8. In einem
nächsten
Schritt 140 wird dann gefragt, ob die korrigierende Maßnahme aufgeschoben
werden soll. Ein Scrub-Vorgang wird typischerweise aufgeschoben,
wenn das Neuschreiben der Daten auch die Bewegung anderer Daten
aufgrund einer notwendigen Konsolidierung erfordert, welche mehr
Zeit beansprucht, als zur Verfügung
steht. Wenn kein Aufschub erfolgt, werden die korrigierten Daten
in einem Schritt 141 neu geschrieben, entsprechend einem
der zuvor beschriebenen Neuschreibvorgänge, als die allgemeine Ausführungsform
aus 8 beschrieben wurde. Nach einem erfolgreichen
Neuschreiben der korrigierten Dateneinheit wird in einem Schritt 143 festgestellt,
ob irgendwelche weiteren Speicherzelleneinheiten vorhanden sind,
die in Schritt 125 für
einen Scrub-Vorgang ausgewählt
wurden. Ist dies der Fall, so wird in Schritt 145 zu der
nächsten
Einheit in der Reihenfolge weitergeschaltet, und der Prozessablauf
kehrt über
die Schleife 129 zu Schritt 127 zurück, für eine neue
Einheit.
-
Bis
hierher wurde ein Hauptpfad des Ablaufdiagramms aus 9 beschrieben.
Es gibt jedoch viele verschiedene Zweige, die entlang des Weges
eingeschlagen werden können,
wenn die Lösung
für einige
der Fragen sich von der zuvor beschriebenen unterscheidet. Ein erster
solcher Zweig, der beschrieben werden soll, geht von Schritt 133 ab,
und zwar wenn derart viele Datenbitfehler in der betreffenden Einheit
existieren, dass diese nicht durch den ECC korrigiert werden können. Wie
durch Schritt 151 angegeben wird, werden die Lese-Schwellspannungspegel
anders als die für
den Scrub-Lesevorgang in Schritt 127 genutzten Pegel festgelegt,
und danach werden die Daten der Einheit in einem Schritt 153 erneut
mit diesen anderen Schwellspannungspegeln gelesen. Ein solcher Lesevorgang
mit Toleranzgrenzen ist in 10 dargestellt.
-
In 10 wird
ein Beispiel zum Betreiben der einzelnen Speicherelemente in einem
Flash-Speicher-Array in vier Zuständen genutzt. Es ist eine Verteilung
für die
Anzahl der Speicherelemente in einer Einheit von Speicherzellen
ohne Störungen
in jedem der vier Schwellpegelbereiche gezeigt. Zwischen den Schwellpegelbereichen
der Speicherzustände
werden Schwellspannungs-Schutzbänder 155, 156 und 157 aufrechterhalten,
wobei sich in diesen keine Daten irgendwelcher Zellen befinden.
Dies stellt den erwünschten programmierten
Zustand dar, der unmittelbar nach der Programmierung und Verifizierung
der Zustände
einer Einheit aus Zellen besteht. Da aber danach weitere Einheiten
programmiert, gelesen und/oder gelöscht werden, können diese
Daten gestört
werden. Störungen
zeigen sich dadurch, dass sich die Schwellpegel zu der einen oder
anderen Seite hin in die angrenzenden Schutzbänder hinein verschieben. Dies
kann für
einen geringen Anteil der Zellen in jeder Zustandsverteilung auftreten,
oder die gesamte Verteilung kann sich in benachbarte Schutzbänder hinein
verschieben oder verbreitern, in Abhängigkeit von der Natur der
Störungen.
-
Für einen
normalen Lesevorgang werden Messpunktpegel 159, 160 und 161 ungefähr in der
Mitte der jeweiligen Schutzbänder 155, 156 und 157 genutzt.
Das bedeutet, die Schwellspannungspegel der gelesenen Zellen werden
mit diesen Messpunktpegeln verglichen, um deren Speicherzustände zu bestimmen.
Fehler treten auf, wenn sich die Schwellspannungspegel von in einem
Zustand befindlichen Zellen durch ein Schutzband hindurch über einen
Messpunktpegel hinaus verschieben. Wenn sich beispielsweise die
Schwellspannungspegel der Zellen in dem Zustand 1 nach unten verschieben,
bis sie unterhalb des Messpunktpegels 159 liegen, werden
diese Zellen dann als in einem Zustand 0 befindlich gelesen. Analog
wird, wenn sich die Schwellspannungspegel der Zellen in dem Zustand
1 nach oben verschieben, über
den Messpunktpegel 160 hinaus, ein normaler Lesevorgang
aussagen, dass sich diese Zellen im Zustand 2 befinden. Solche Lese-Datenfehler
werden dann durch den ECC-Prozess festgestellt. Wenn aber zu viele
solcher Fehler vorhanden sind, als dass diese durch den ECC korrigiert
werden könnten,
erfolgt ein zweiter Lesevorgang mit anderen Messpunktpegeln zwischen
den Zuständen
durch die Schritte 151 und 153 (9).
Die Messpunktpegel 159, 160 und 161 werden
in ihren jeweiligen Schutzbändern
in einer Richtung der aufgrund der Störungen erwarteten Verschiebung
der Speicher-Schwellspannungspegel verschoben, sodass die ver schobenen
Pegel sich nun auf der gleichen Seite des Schutzbandes befinden,
auf der sie vor der Störung
waren.
-
Nach
einem solchen erneuten Lesen der Daten wird in einem Schritt 165 unter
Verwendung des ECC festgestellt, ob irgendwelche Datenfehler übrig sind.
Falls nicht, geht der Prozessablauf dann zu Schritt 135 des
Hauptprozesspfades über,
welcher das Festlegen beinhaltet, ob eine Datenkorrektur und ein
Neuschreiben aufgeschoben werden sollen. Wenn in Schritt 165 entdeckt
wird, dass Datenfehler existieren, wird in einem nächsten Schritt 167 festgestellt,
ob diese durch den ECC korrigiert werden können. Ist dies der Fall, springt der
Prozessablauf dann ebenfalls zu Schritt 135 des Hauptverarbeitungsweges.
-
Wenn
aber in Schritt 167 festgestellt wird, dass die Datenfehler
nicht korrigierbar sind, kann ein weiterer Lesevorgang mit noch
anderen Messpunktpegeln integriert werden. In einem Schritt 169 wird
festgestellt, ob es irgendwelche noch nicht ausprobierten gelockerten
Lesebedingungen gibt. Ist dies der Fall, so wird in einem Schritt 170 zu
den nächsten
Wiederholungsbedingungen übergegangen,
und der Prozessablauf kehrt zu den Schritten 151 und 153 zurück, um die
Daten mit diesen neuen Bedingungen zu lesen. Wenn aber keine weiteren
anderen Lesebedingungen möglich
sind, müssen
die Daten in der betreffenden Einheit des Arrays mit diesen unkorrigierten
Fehlern verbleiben. Es wird dann festgestellt, dass der Scrub-Vorgang
an dieser Einheit fehlgeschlagen ist. Infolge dessen könnten sämtliche
gültigen
Daten in ein neues Speichersystem kopiert werden, und der momentane
Speicher könnte
dann verworfen werden. Als anderes Ergebnis könnte diese Einheit lediglich
als schlecht markiert werden, und zwar durch einen in den Overhead-Daten gespeicherten
Merker oder anderweitig, und danach könnte zu Schritt 143 übergegangen
werden, um den Scrub-Vorgang für
andere Einheiten des Arrays fortzusetzen. Die Daten in dieser Einheit
sind dann verloren. Da für
diese Daten als Teil der ursprünglichen
Programmierung verifiziert worden ist, dass sie sich anfangs in
ihrem korrekten Schwellspannungspegel-Bereich befanden, zeigt dieses
mögliche
Ergebnis einer Akkumulation von störenden Operationen im Zeitverlauf
angesichts einer solchen nachteiligen Folge die Wünschbarkeit
eines ausreichend häufigen
Scrub-Vorgangs auf.
-
Kehren
wir zu Schritt 135 zurück,
so springt der Prozessablauf, wenn hier festgestellt wird, dass
die Korrektur der Daten weder notwendig noch erwünscht ist, zu Schritt 143,
um den Scrub-Vorgang mit etwaigen weiteren der identifizierten Einheiten
fortzusetzen. Kehren wir außerdem
zu den Schritten 137 und 140 zurück, so werden,
wenn festgestellt wird, dass die Korrektur oder das Neuschreiben
der Daten aufgeschoben werden sollte, die gelesenen Daten, ihre
Adressen, der ECC und eine etwaige Kennung für die fehlerhaften Bits sowie andere
zuvor bestimmte Daten in einem Schritt 171 gespeichert,
und der Prozessablauf springt dann zu Schritt 143. Diese
Daten werden dann gelesen, wenn der Zeitpunkt zur Beendigung der
aufgeschobenen Maßnahmen
erreicht ist, wie später
beschrieben wird.
-
Kehren
wir zu Schritt 131 zurück,
so könnte
die nächste
Maßnahme,
nach dem Feststellen, dass keine Datenfehler vorliegen, darin bestehen,
nichts weiter mit den Daten der momentanen Einheit zu tun, indem
zu Schritt 143 gesprungen wird. Es kann aber wünschenswert
sein, die Speicherpegel von Zellen, aus welchen sogar gültige Daten
gelesen werden, weitergehend zu prüfen und anzupassen. Dies beinhaltet
das erneute Lesen der Daten mit anderen Messpunktpegeln als sie
für den
anfänglichen
Lesevorgang genutzt wurden, um etwaige Zellen zu identifizieren,
bei denen sich die gespeicherte Ladung in das Schutzband zwischen
den für die
verschiedenen Zustände
definierten Pegel hinein verschoben hat (man vergleiche 10),
selbst wenn diese Pegel nicht einen Messpunktpegel überschritten
haben, sodass bei einer normalen Auslesung ein Datenfehler bewirkt
würde.
In einem Schritt 172 wird festgestellt, ob irgendwelche
solcher Lesebedingungen existieren, die noch nicht ausprobiert worden
sind. Ist dies der Fall, so wird in Schritt 173 bewirkt,
dass neue Messpunktpegel und/oder andere Scrub-Lesebedingungen gewählt werden.
Der Prozessablauf kehrt dann zu Schritt 126 zurück, in welchem
diese Lesebedingungen eingestellt werden, und die Daten werden danach
in Schritt 127 mit diesen Bedingungen gelesen. Die während dieses
Lesevorgangs genutzten Messpunktpegel sind beispielsweise zu den
Rändern
der Schutzbänder 155, 156 und 157 aus 10 hin
verschoben. Wenn in Schritt 131 unter Nutzung des ECC festgestellt
wird, dass Datenfehler existieren, zeigen die fehlerhaften Datenbits
die Verschiebung der Ladungspegel innerhalb der Schutzbänder an.
Es ist also wünschenswert,
diese Daten zu korrigieren und neu zu schreiben, nachdem zunächst festgestellt
wird, ob eine solche Maßnahme aufgeschoben
werden sollte, sodass die gespeicherten Ladungspegel aus den Schutzbändern heraus
in ihre beabsichtigten Zustandsverteilungen aus 10 hinein
verschoben werden.
-
Wenn
in Schritt 131 festgestellt wird, dass in den mit den restriktiveren
Grenzen gelesenen Daten keine Fehler vorhanden sind, wird die Bearbeitung
an der momentanen Dateneinheit beendet. Es wird dann in Schritt 172 festgestellt,
ob es weitere definierte Scrub-Lesebedingungen
gibt, die bei dieser Dateneinheit noch nicht ausprobiert worden
sind. Ist dies der Fall, so können
die Daten erneut mit noch engeren Messpunktpegeln gelesen werden.
Das bedeutet, die Daten können
das zweite Mal mit einem ersten Satz von alternativen Lesebedingungen
gemessen werden, die in Schritt 172 verfügbar sind,
mit Messpunktpegeln, die nur zum Teil auf der Strecke entlang ihrer
jeweiligen Schutzbänder
verschoben sind, und können
dann bei diesem dritten Mal mit den Messpunktpegeln eines zweiten
Satzes von alternativen Lesebedingungen wiederholt werden, die durch
den Schritt 172 ausgewählt
werden, welche noch weiter zu den Rändern des Schutzbandes hin
verschoben sind, zur weiteren Feinabstimmung der Ladungsspeicherpegel,
falls erforderlich. Es können
so viele zusätzliche
Scrub-Lesebedingungen vorgegeben werden, wie praktikabel sind.
-
Kehren
wir zu Schritt 135 zurück,
in welchem festgelegt werden kann, einen gewissen Grad an Datenfehlern
ohne Korrektur zu akzeptieren, so wird zu erkennen sein, dass dies
nicht der Präzision
der Anpassungen entspricht, die durch den Zweig mit den Schritten 172 und 173 an
den gespeicherten Daten, die keine Fehler enthalten, vorgenommen
werden, welcher soeben beschrieben worden ist. Daher wird, wenn
dieser Bearbeitungszweig genutzt wird, der Schritt 135 höchstwahrscheinlich
keine Akzeptanz von fehlerhaften Daten ohne Korrektur gestatten.
-
Nachdem
in Schritt 143 festgestellt worden ist, dass sämtliche
momentan für
einen Scrub-Vorgang identifizierte
Dateneinheiten tatsächlich
einem Scrub-Vorgang unterzogen worden sind, können etwaige dieser Dateneinheiten,
bei denen sich eine außergewöhnliche
Neigung dafür
zeigt, dass die Daten gestört
werden, optional für
eine Speicherabbildung aus dem System ausgeschlossen werden. In
einem Schritt 185 wird bestimmt, ob es irgendwelche solcher
physischen Speichereinheiten gibt, die aus dem System entfernt werden sollten,
und wenn dies der Fall ist, werden sie in einem Schritt 187 für eine Speicherabbildung
ausgeschlossen. Der Scrub-Vorgang ist dann abgeschlossen.
-
Wenn
jedoch Datenkorrekturen und/oder Neuschreibvorgänge aufgeschoben worden sind,
wird der Speichersystem-Controller oder das Hostsystem dies vermerkt
haben. Zu einem geeigneten Zeitpunkt, wenn keine weiteren Speicheroperationen
mit höherer
Priorität
anhängig
sind, kann der Scrub-Vorgang für
partiell einem Scrub-Vorgang unterzogene Einheiten abgeschlossen
werden, beginnend mit Schritt 117. Die Daten, der ECC und
weitere Informationen, die für
eine Einheit in Schritt 171 gespeichert worden sind, werden
in Schritt 191 ausgelesen. Wenn die Daten aus dieser Einheit
einer Korrektur bedürfen,
so erfolgt diese in Schritt 193. In einem Schritt 195 werden
die korrekten Daten neu ge schrieben. Wenn keine weiteren partiell
abgeschlossenen Scrub-Vorgänge
vorliegen, die beendet werden müssen,
wird dies in einem Schritt 197 festgestellt, und entweder
wird der Schritt 185 ausgeführt oder die Bearbeitung wird
beendet. Wenn weitere Einheiten vorhanden sind, die beendet werden
müssen,
geht der Prozessablauf zu der nächsten
Einheit über,
und zwar in einem Schritt 199, und die Schritte 191, 193 und 195 werden
dann an den Daten aus diesen Einheiten wiederholt.
-
Für den Fall,
dass Adressen von Kandidaten-Speicherzelleneinheiten in Schritt 123 für einen
aufgeschobenen Scrub-Vorgang gespeichert worden sind, kann der Prozessablauf
zu einem Zeitpunkt, an dem der Controller keine Maßnahmen
mit höherer
Priorität
zu realisieren hat, automatisch zurückkehren, um den Scrub-Vorgang
für eine
der aufgeschobenen Einheiten fortzusetzen. Da der Schritt 121 des
Aufschiebens derart frühzeitig
im Prozessablauf aus 9 erfolgt, führt eine Rückkehr zu einer damals aufgeschobenen
Einheit zu einer Wiederaufnahme des Prozessablaufs beginnend mit
dem Schritt 125 und zur Fortsetzung entlang dieses Pfades,
wie zuvor beschrieben. Es ist möglich,
dass eine Korrektur und/oder ein Neuschreiben einer solchen Einheit
in einem der Schritte 137 oder 140 erneut aufgeschoben
wird.