-
Die
vorliegende Erfindung betrifft die folgenden schwebenden amerikanischen
Patentanmeldungen sowie die folgenden Patente: US-Patentanmeldungsveröffentlichung
2004/008335,
US-PS 6 915 992 ,
US-PS 6 973 531 , internationale
Patentanmeldungsveröffentlichung
WO 2004/040459 A1 ,
internationale Patentanmeldung Veröffentlichung
WO 2004/040455 A1 , internationale
Patentanmeldung Veröffentlichung
WO 2004/040453 A1 ,
internationale Patentanmeldung Veröffentlichung
WO 2004/040431 A1 , US-Patentanmeldungsveröffentlichung 2004/0080985,
US-PS 6 831 865 , internationale
Patentanmeldung Veröffentlichung
WO 2004/040451 A1 ,
internationale Patentanmeldung Veröffentlichung
WO 2004/040454 A1 ,
US-PS 6 081 447 und
US-PS 6 230 233 .
-
Die
vorliegende Erfindung betrifft generell Massenspeichersysteme von
digitalen Daten. Genauer gesagt be zieht sich die vorliegende Erfindung auf
Systeme für
ein Verfahren zum wirksamen Ermöglichen
von Löschungszählungen,
die dazu benutzt werden, damit der mit Speicherbereichen in einem
nichtflüchtigen
Speichersystem verbundene Verschleiß in seiner Verbreitung über im wesentlichen
alle Speicherbereiche aufrechterhalten werden kann.
-
Die
Verwendung von nichtflüchtigen
Speichersystemen, wie Flash-Speichersystemen, nimmt aufgrund der
kompakten physikalischen Größe von derartigen
Speichersystemen und der Fähigkeit,
daß der
nichtflüchtige
Speicher auf wiederholte Weise neuprogrammiert werden kann, zu.
Die kompakte physikalische Größe von Flash-Speichersytemen
erleichtert die Verwendung von derartigen Speichersystemen in Vorrichtungen,
deren Verbreitung stark ansteigt. Vorrichtungen, die Flash-Speichersysteme benutzen,
umfassen Digitalkameras, Digitalcamcorder, digitale Musikabspielgeräte, manuell
gehaltene Personalcomputer und Globalpositionierungsvorrichtungen,
sind jedoch hierauf nicht beschränkt.
Durch die Fähigkeit
einer wiederholten Neuprogrammierung von nichtflüchtigen Speichern, die in Flash-Speichersystemen
enthalten sind, können Flash-Speichersysteme benutzt
und wiederverwendet werden.
-
Generell
können
Flash-Speichersysteme Flash-Speicherkarten und Flash-Speicherchipsätze umfassen.
Flash-Speicherchipsätze besitzen
generell Flash-Speicherkomponenten und Steuerkomponenten. Typischerweise
kann ein Flash-Speicherchipsatz in ein eingebettetes System eingebaut
werden. Die Hersteller von derartigen Einheiten oder Systemen beschaffen
sich typischerweise einen Flash-Speicher in Komponentenform sowie
andere Komponenten und bauen dann den Flash-Speicher sowie andere
Komponenten in ein Wirtsystem ein.
-
Obwohl
nichtflüchtige
Speicher- oder genauer gesagt Flash-Speicherblöcke in Flash-Speichersystemen
auf wiederholte Weise programmiert und gelöscht werden können, kann
jeder Block oder jeder physikalische Ort nur eine bestimmte Anzahl
von Malen gelöscht
werden, bevor der Block verschleißt, d. h. bevor der Speicher
kleiner zu werden beginnt. Mit anderen Worten, jeder Block besitzt
eine Programmier- und Löschzyklusgrenze.
Bei einigen Speichern kann ein Block bis zu etwa 10.000 mal gelöscht werden,
bevor der Block als unbrauchbar angesehen wird. Bei anderen Speichern
kann ein Block bis zu etwa 100.000 mal oder sogar bis zu 1.000.000
mal gelöscht
werden, bevor der Block als verschlissen angesehen wird. Wenn ein
Block verschlissen ist und auf diese Weise einen Gebrauchsverlust
oder eine signifikante Leistungsverschlechterung eines Abschnittes
des Gesamtspeichervolumens des Flash-Speichersystems verursacht,
kann ein Benutzer des Flash-Speichersystems nachteilig beeinflußt werden,
beispielsweise durch den Verlust von gespeicherten Daten oder durch
das Unvermögen
zum Speichern von Daten.
-
Der
Verschleiß von
Blöcken
oder physikalischen Orten innerhalb eines Flash-Speichersystems hängt davon
ab, wie viel ein jeder Block programmiert wird. Wenn ein Block oder
allgemeiner ein Speicherelement einmal programmiert und dann auf
wirksame Weise niemals neu programmiert wird, ist die Anzahl der
Programmierungs- und
Löschzyklen
und somit der mit diesem Block verbundene Verschleiß relativ niedrig.
Wenn jedoch ein Block wiederholt beschrieben und gelöscht wird,
d. h. einem Zyklus ausgesetzt wird, ist der Verschleiß eines
derartigen Blocks generell relativ hoch. Da logische Blockadressen
(LBAs) von Wirten, d. h. Systemen, die auf ein Flash-Speichersystem
zugreifen oder dieses benutzen, verwendet werden, um auf in einem
Flash-Speichersystem gespeicherte Daten zuzugreifen, werden die
gleichen physikalischen Orte oder Blöcke im Flash-Speichersystem
auf wiederholte Weise beschrieben und gelöscht, wenn ein Wirt auf wiederholte
Weise die gleichen LBAs zum Einschreiben und Überschreiben von Daten benutzt,
wie dies dem Fachmann bekannt ist.
-
Wenn
einige Blöcke
effektiv verschlissen sind, während
andere Blöcke
noch relativ wenig Verschleiß aufweisen,
wird durch das Vorhandensein der verschlissenen Blöcke generell
die Gesamtleistung des Flash-Speichersystems beeinflußt. Zusätzlich zur
Verschlechterung der Leistung der verschlissenen Blöcke selbst
kann die Gesamtleistung des Flash-Speichersystems negativ beeinflußt werden, wenn
nur eine unzureichende Anzahl von Blöcken, die nicht verschlissen
sind, zum Speichern von gewünschten
Daten zur Verfügung
steht. Oft kann ein Flash-Speichersystem als unbrauchbar angesehen werden,
wenn eine kritische Anzahl von verschlissenen Blöcken im Flash-Speichersystem vorhanden
ist, selbst wenn viele andere Zellen im Flash-Speichersystem einen
relativ geringen Verschleiß besitzen. Wenn
ein Flash-Speichersystem, das eine beträchtliche Anzahl von Blöcken mit
relativ geringem Verschleiß besitzt,
als unbrauchbar angesehen wird, werden viele auf das Flash-Speichersystem
zurückgehende
Resourcen effektiv vergeudet.
-
Um
die Wahrscheinlichkeit zu erhöhen,
daß Blöcke in einem
Flash-Speichersystem ziemlich gleichmäßig verschleißen, werden
oft Verschleißnivellierungsvorgänge durchgeführt. Verschleißnivellierungsvorgänge finden
generell Anwendung, wie dem Fachmann bekannt ist, um eine Veränderung der
physikalischen Orte oder Blöcke,
die speziellen LBAs zugeordnet sind, so zu ermöglichen, daß die gleichen LBAs nicht immer
den gleichen physikalischen Orten oder Blöcken zugeordnet sind. Durch Veränderung
der Block-Assoziationen der LBAs ist es weniger wahrscheinlich,
daß ein
spezieller Block verschleißt,
bevor andere Blöcke
verschleißen.
-
Ein
herkömmlicher
Verschleißnivellierungsprozeß umfaßt das Vertauschen
der physikalischen Orte, für
die zwei relativ große
Anteile von Kunden- oder Wirt-LBAs gemappt sind. Mit anderen Worten, diejenigen
LBAs, die relativ großen
Abschnitten von Speicherzellen zugeordnet sind, werden vertauscht. Eine
solche Vertauschung wird durch einen manuell eingegebenen Befehl
eines Kunden, d. h. durch die Verwendung eines Wirtes, initiiert
und ist für
den Kunden nicht transparent. Tauschoperationen, die die Bewegung
von Daten zwischen zwei relativ großen Abschnitten von Speicherzellen
erfordern, sind zeitraubend und somit ineffizient. Ferner kann das
Verhalten des gesamten Flash-Speichersystems durch Tauschvorgänge einer
relativ langen Zeitdauer, die signifikante Resourcen verbrauchen,
welche dem gesamten Flash-Speichersystem
zugeordnet sind, nachteilig beeinflußt werden. Wie der Fachmann weiß, umfaßt das Bewegen
von Daten von einem ersten Ort typischerweise das Einkopieren der
Daten in einen anderen Ort und das Löschen der Daten vom ersten
Ort.
-
Bei
einem anderen herkömmlichen
Verschleißnivellierungsprozeß läßt man die
Blöcke
verschleißen.
Wenn die Blöcke
einmal wirksam verschlissen sind, können die den Blöcken zugeschriebenen
Sektoren durch Mapping der zu den Sektoren gehörenden Adressen auf Ersatzbereiche
umgeschrieben werden, wenn die Blöcke, in denen die Sektoren
gespeichert worden sind, verschlissen oder unbrauchbar geworden
sind. Da die Anzahl der Ersatzbereiche oder Blöcke begrenzt und wertvoll ist, können nicht
immer Ersatzbereiche vorhanden sein, auf die mit unbrauchbaren Blöcken verbundene
Sektoren gemappt werden können.
Des weiteren ermöglicht
das wirksame erneute Mapping von Sektoren nur nach dem Unbrauchbarwerden
von Blöcken
generell eine Verschlechterung des gesamten Flash-Speichersystems.
-
Wünschenswert
sind daher ein Verfahren und eine Vorrichtung zum wirksamen und
im wesentlichen transparenten Durchführen einer Verschleißnivellierung
in einem Flash-Speichersystem.
Erforderlich ist daher ein System, das einen Verschleißnivellierungsprozeß erleichtert,
der einen gleichmäßigeren
Verschleiß in
physikalischen Orten des Flash-Speichersystems fördert, ohne hierzu einen signifikanten
Gebrauch von Rechnerresourcen zu benötigen.
-
Die
US 6230233 beschreibt eine
Flash-Speicheranordnung, die eine Aufzeichnung der Anzahl von Malen,
mit denen Blöcke
beschrieben werden, und der Gesamtzahl der Blockbeschreibungszyklen aufrechterhält.
-
Die
EP-A 0589597 beschreibt
eine Flash-Speicheranordnung, die eine Löschungszählung für jeden Block in einem Overhead-Abschnitt
eines Headers eines jeden Blocks aufrechterhält.
-
Die
vorliegende Erfindung betrifft ein System und ein Verfahren zum
Aufrechterhalten einer durchschnittlichen Löschungszählung in einem Systemspeicher
eines nichtflüchtigen
Speichersystems. Gemäß einem
Aspekt der vorliegenden Erfindung wird ein nichtflüchtiges
Speichersystem geschaffen, das umfaßt: einen nichtflüchtigen
Speicher, der eine Vielzahl von Blöcken aufweist, wobei jeder
Block einen redundanten Bereich zum Speichern von Overhead-Daten,
die eine Löschungszählung für den Block
enthalten, besitzt, und einen Systemspeicher, der eine nichtflüchtige Speicherstelle
zum Speichern eines Indikators für
den Durchschnitt der Anzahl der Zeiten, zu denen jeder Block aus
der Vielzahl der Blöcke
gelöscht
wurde, über
die Vielzahl der Blöcke
umfaßt,
gekennzeichnet durch eine Einrichtung, die das Speichern des Indikators
in den redundanten Bereich von mindestens einem Block als die Löschungszählung für diesen
Block in Ab hängigkeit
davon, daß der mindestens
eine Block ein gelöschter
Block ist, für den
die Löschungszählung nicht
zur Verfügung
steht, bewirkt.
-
Bei
einer Ausführungsform
werden die Löschungszählungen
von den Blöcken
erhalten. Bei einer derartigen Ausführungsform können die
Löschungszählungen
von redundanten oder Overhead-Bereichen der Blöcke erhalten werden. Bei einer
anderen Ausführungsform
werden die Löschungszählungen
von einem Löschungszählungsblock
im Speichersystem erhalten, der die Löschungszählung für jeden Block aus der Anzahl
der Blöcke
enthält.
-
Durch
Aufrechterhaltung einer durchschnittlichen Löschungszählung kann eine Charakterisierung
der Anzahl der Zeiten, zu denen ein durchschnittlicher Block innerhalb
eines Gesamtspeichersystems gelöscht
worden ist, sofort erhalten werden. Wenn ein Block gelöscht wird,
kann keine Anzeige darüber
vorliegen, wie viel Mal dieser Block gelöscht wurde. Infolgedessen kann
die Größe des zu
diesem Block gehörenden
Verschleißes
nicht ohne weiteres ermittelt oder geschätzt werden. Die Verwendung
einer durchschnittlichen Löschungszählung, um
anzuzeigen, wie viel Mal ein derartiger Block wahrscheinlich gelöscht worden
ist, ermöglicht
eine vernünftige Schätzung des
zu ermittelnden Verschleißes
des Blockes. Auf diese Weise kann eine Verschleißnivellierung wirksamer vorgenommen
werden.
-
Ein
zweiter Indikator kann die Gesamtzahl der Blöcke, die in der Vielzahl der
Blöcke
vorhanden sind, anzeigen.
-
Bei
einer Ausführungsform
umfaßt
die Datenstruktur auch einen Header, der den ersten Indikator und
den zweiten Indikator enthält.
-
Gemäß einem
anderen Aspekt der vorliegenden Erfindung wird ein Verfahren zum
Managen eines nichtflüchtigen
Speichers eines Speichersystems gemäß einer durchschnittlichen
Anzahl von Zeiten, zu denen jeder Block im nichtflüchtigen
Speicher gelöscht
worden ist, zur Verfügung
gestellt, das die folgenden Schritte umfaßt:
Erhalten einer Löschungszählung von
einem redundanten Bereich eines jeden Blocks aus einer Vielzahl von
nutzbaren Blöcken
innerhalb des nichtflüchtigen Speichers,
Erzeugen einer Summe der Löschungszählungen
für die
Vielzahl von nutzbaren Blöcken, Erzeugen
einer durchschnittlichen Löschungszählung, die
einen Durchschnitt der Anzahl der Zeiten, zu denen jeder Block aus
der Vielzahl der nutzbaren Blöcke
gelöscht
worden ist, über
die Vielzahl der nutzbaren Blöcke
anzeigt, und Speichern eines Indikators der Durchschnittslöschungszählung in
einem nichtflüchtigen
Abschnitt eines Systemspeichers des Speichersystems, gekennzeichnet
durch das Ermitteln, ob eine Blocklöschungszählung für einen gelöschten Block zur Verfügung steht,
in Abhängigkeit von
der Feststellung, daß die
Blocklöschungszählung nicht
zur Verfügung
steht, Auffinden des Indikators der Durchschnittslöschungszählung und
Speichern des Indikators der Durchschnittslöschungszählung im gelöschten Block
als Blocklöschungszählung.
-
Bei
einer Ausführungsform
umfaßt
das Verfahren das Ermitteln, wenn ein Indikator eine Anzahl von
Zeiten, zu denen der gelöschte
Block gelöscht worden
ist, zur Verfügung
steht und das Speichern des Indikators der Anzahl der Zeiten, zu
denen der gelöschte
Block gelöscht
wurde, im gelöschten Block,
wenn festgestellt wird, daß der
Indikator der Anzahl der Zeiten, zu denen der gelöschte Block
gelöscht
wurde, zur Verfügung
steht. Bei einer derartigen Ausführungsform
umfaßt
das Erhalten des Indikators, der eine Anzahl von Zeiten charakterisiert,
zu denen jeder Block in der Vielzahl der Blöcke gelöscht wurde, das Erhalten des
Indikators, der die Anzahl der Zeiten, zu denen jeder Block in der
Vielzahl der Blöcke
gelöscht
wurde, charakterisiert, im wesentlichen nur dann, wenn festgestellt
wird, daß der
Indikator der Anzahl der Zeiten, zu denen der gelöschte Block
gelöscht
wurde, nicht zur Verfügung
steht, und umfaßt
das Speichern des Indikators, der die Anzahl der Zeiten charakterisiert,
zu denen jeder Block in der Vielzahl der Blöcke gelöscht wurde, das Speichern des
Indikators, der die Anzahl der Zeiten charakterisiert, zu denen
jeder Block in der Vielzahl der Blöcke gelöscht wurde, im wesentlichen
nur dann, wenn festgestellt wird, daß der Indikator der Anzahl
der Zeiten, zu denen der gelöschte
Block gelöscht
wurde, nicht zur Verfügung
steht.
-
Diese
und andere Vorteile der vorliegenden Erfindung werden deutlich beim
Lesen der nachfolgenden detaillierten Beschreibung und beim Studieren
der verschiedenen Figuren der Zeichnungen.
-
Die
Erfindung wird am besten verständlich durch
Bezugnahme auf die nachfolgende Beschreibung in Verbindung mit den
beigefügten
Zeichnungen. Hiervon zeigen:
-
1a eine
schematische Darstellung eines Generalwirtsystems, das eine nichtflüchtige Speichervorrichtung
gemäß einer
Ausführungsform
der vorliegenden Erfindung enthält;
-
1b eine
schematische Darstellung einer Speichervorrichtung, d. h. der Speichervorrichtung 120 der 1a,
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
1c eine
schematische Darstellung eines Wirtsystems, das einen eingebetteten
nichtflüchtigen Speicher
enthält;
-
2 eine
schematische Darstellung eines Teiles eines Flash-Speichers gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
3 ein
Prozeßablaufdiagramm,
das die Schritte zeigt, die mit der Verarbeitung einer Initialisierungsanforderung
in bezug auf ein Flash-Speichersystem gemäß einer Ausführungsform
der vorliegenden Erfindung verbunden sind;
-
4 ein
Prozeßablaufdiagramm,
das die Schritte zeigt, die mit einem anderen Verfahren zum Verarbeiten
eines statischen Blocks gemäß einer Ausführungsform
der vorliegenden Erfindung verbunden sind;
-
5a ein
schematisches Blockdiagramm, das einen Systemspeicher gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt;
-
5b eine
schematische Darstellung von normalen Blöcken, von weniger häufig gelöschten Blöcken und
von am häufigsten
gelöschten
Blöcken gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
6 eine
schematische Darstellung eines Verfahrens zur Durchführung einer
Blockvertauschung/Aktualisierung im Systemspeicher eines Gesamtspeichersystems,
um einen gleichmäßigeren Verschleiß der Blöcke gemäß einer
Ausführungsform der
vorliegenden Erfindung zu ermöglichen;
-
7 ein
schematisches Blockdiagramm, das eine Systemarchitektur gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt;
-
8a eine
schematische Darstellung eines Löschungszählungsblocks
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
8b eine
schematische Darstellung einer Seite in einem Löschungszählungsblock, d. h. der Seite 810a des
Löschungszählungsblocks 800 der 8a,
wobei die Seite gemäß einer
Ausführungsform
der vorliegenden Erfindung im wesentlichen in Stellen aufgeteilt
ist;
-
8c eine
schematische Darstellung einer Seite in einem Löschungszählungsblock, d. h. der Seite 810a des
Löschungszählungsblocks 800 der 8a,
wobei die Seite gemäß einer
Ausführungsform
der vorliegenden Erfindung im wesentlichen in Bytes unterteilt worden
ist;
-
8d eine
schematische Darstellung einer Seite in einem Löschungszählungsblock, d. h. der Seite 810a des
Löschungszählungsblocks 800 der 8a,
die Löschungszählungen
und einen Eingang enthält,
der anzeigt, daß ein
spezieller Block unbrauchbar ist, gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
9 eine
schematische Darstellung eines Headers eines Löschungszählungsblocks, d. h. des Headers 820 des
Löschungszählungsblocks 800 der 8a,
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
10 ein
Prozeßablaufdiagramm,
das die mit einem Verfahren verbundenen Schritte zum Initialisieren
eines Löschungsblocks
zeigt, wenn ein nichtflüchtiger
Speicher eines nichtflüchtigen
Speichersystems zuerst formatiert wird, gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
11 ein
Prozeßablaufdiagramm,
das die mit einem Verfahren zum Aktualisieren eines Löschungszählungsblocks
in Abhängigkeit
von einer Initialisierungsanforderung gemäß einer Ausführungsform
der vorliegenden Erfindung verbundenen Schritte zeigt;
-
12 ein
Prozeßablaufdiagramm,
das die mit einem Verfahren zum Erhalten einer Löschungszählung für einen Leerblock gemäß einer
Ausführungsform
der vorliegenden Erfindung verbundenen Schritte zeigt; und
-
13 ein
Prozeßablaufdiagramm,
das ein Verfahren zum Berechnen einer Durchschnittslöschungszählung gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt.
-
Nichtflüchtige Speicherblöcke in Flash-Speichersystemen
können
auf wiederholte Weise programmiert und gelöscht werden, obwohl jeder Block generell
nur eine endliche Zahl von Malen vor dem Verschleiß des Blockes
gelöscht
werden kann. Wenn ein Block verschleißt, tritt eine relativ signifikante
Verschlechterung der Leistung mit dem Abschnitt des Gesamtspeichervolumens
des Flash-Speichersystems
auf, der den verschlissenen Block enthält, und die in diesem Abschnitt
enthaltenen Daten können verloren
gehen, oder es kann unmöglich
werden, Daten in diesem Abschnitt zu speichern.
-
Um
die Wahrscheinlichkeit zu erhöhen,
daß Blöcke in einem
Flash-Speichersystem gleichmäßiger verschleißen, können sie
gleichmäßiger benutzt werden.
Indem man ermittelt, wie viel Male jeder Block gelöscht worden
ist, beispielsweise durch die Nutzung einer Löschungszählung, kann ein Speicher innerhalb
eines Systems gleichmäßiger genutzt
werden. Über
eine Löschungszählungsmanagementtechnik
kann man eine Löschungszählung, die
feststellt, wie viel Male ein spezieller Block gelöscht worden
ist, in einem dem Block zugeordneten redundanten Bereich speichern.
Im Systemspeicher können Tabellen
errichtet werden, die es ermöglichen,
Blöcke,
die sich im Gebrauch befinden, auf wirksame Weise von Blöcken zu
trennen, die relativ hohe Löschungszählungen
besitzen, und von Blöcken,
die relativ niedrige Löschungszählungen
aufweisen. Wenn ein im Gebrauch befindlicher Block gelöscht wird,
kann der Block entweder zu einer Tabelle von Blöcken, die relativ hohe Löschungszählungen
besitzen, oder zu einer Tabelle von Blöcken, die relativ niedrige
Löschungszählungen
aufweisen, „addiert" werden. In entsprechender
Weise können
Blöcke entweder
von der Tabelle von Blöcken,
die relativ hohe Löschungszählungen
besitzen, oder von der Tabelle von Blöcken, die relativ niedrige
Löschungszählungen
aufweisen, in eine Blockmappingtabelle „bewegt" werden, d. h. einen Satz von Tabellen
von Blöcken,
die sich im Gebrauch befinden, um nahezu jeden Block, der von der
Blockmappingtabelle umgeschrieben worden ist, zu ersetzen.
-
Durch
das Kategorisieren von Blöcken
können
Blöcke
gleichmäßiger benutzt
werden, da der Gebrauch eines jeden Blockes wirksamer gemanagt werden
kann, um den Verschleiß innerhalb
der Blöcke
zu vergleichmäßigen. Ferner
können
durch das Kategorisieren von Blöcken
in Tabellen Blöcke
mit einer niedrigen Löschungszählung und
Blöcke
mit einer hohen Löschungszählung ohne
weiteres identifiziert werden, so daß kein signifikanter Rechenaufwand
erforderlich ist. Die Verschleißvergleichmäßigung wird
daher relativ effizient durchgeführt.
Als Folge davon kann die Lebensdauer des Flash-Speichersystems wesentlich
verlängert
werden, ohne die Leistung des Systems auf signifikante Weise zu
beeinträchtigen.
-
Zur
Erleichterung der Kategorisierung der Blöcke kann ein Löschungszählungsblock
in einem Flash-Speichersystem angeordnet werden. Ein solcher Block
kann angeordnet werden, um die Löschungszählungen
von nahezu sämtlichen
Blöcken zu
enthalten, die zum Speichern von Daten im Flash-Speichersystem verwendet
werden können. Wenn
ein Block gelöscht
ist, wird die Löschungszählung des
Blocks typischerweise gelöscht.
Durch Speichern der Löschungszählungen
von im wesentlichen sämtlichen
Blöcken,
die eine zugehörige
Löschungszählung im
Löschungszählungsblock
besitzen, kann die Löschungszählung eines
gelöschten Blocks
sofort erhalten werden, d. h. durch Auslesung der Löschungszählung aus
dem Löschungszählungsblock.
-
Flash-Speichersysteme
oder genereller nichtflüchtige
Speichervorrichtungen besitzen im allgemeinen Flash-Speicherkarten und
Chipsätze.
Typischerweise finden Flash-Speichersysteme in Verbindung mit einem
Wirtsystem Verwendung, so daß das
Wirtsystem Daten in die Flash-Speichersysteme einschreiben
oder aus diesen auslesen kann. Einige Flash-Speichersysteme besitzen
jedoch einen eingearbeiteten Flash-Speicher und Software, die auf
einen Wirt einwirkt, um im wesentlichen als Steuereinheit für den eingearbeiteten
Flash-Speicher zu wirken. Es wird nunmehr anfangs auf 1a bezug
genommen. Es wird ein generelles Wirtsystem beschrieben, das eine
nicht flüchtige
Speichervorrichtung, d. h. eine Compact-Flash-Speicherkarte oder ein
eingebettetes System, umfaßt.
Ein Wirt- oder Computersystem 100 besitzt generell einen
Systembus 104, der eine Kommunikation zwischen einem Mikroprozessor 108,
einem RAM 112 und Eingabe/Ausgabeschaltungen 116 ermöglicht.
Es versteht sich, daß das
Wirtsystem 100 auch andere Kompo nenten aufweisen kann,
d. h. Anzeigevorrichtungen und Netzwerkvorrichtungen, die zu Darstellungszwecken
nicht gezeigt sind.
-
Allgemein
gesagt kann das Wirtsystem 100 in der Lage sein, Informationen
zu gewinnen, die Standbildinformationen, Audioinformationen und
Videobildinformationen umfassen, jedoch hierauf nicht beschränkt sind.
Solche Informationen können
in Realzeit gewonnen und drahtlos dem Wirtsystem 100 zugeführt werden.
Obwohl es sich bei dem Wirtsystem 100 im wesentlichen um
irgendein System handeln kann, ist dies typischerweise ein solches
System, wie eine Digitalkamera, eine Videokamera, eine zellulare
Kommunikationsvorrichtung, ein Audiospieler oder ein Videospieler.
Es versteht sich jedoch, daß das
Wirtsystem 100 im wesentlichen generell irgendein System
sein kann, das Daten oder Informationen speichert und Daten oder
Informationen zurückgewinnt.
-
Das
Wirtsystem 100 kann auch ein System sein, das entweder
nur Daten gewinnt oder nur Daten zurückerlangt. Mit anderen Worten,
das Wirtsystem 100 kann ein spezielles System sein, das
Daten speichert, oder es kann ein spezielles System sein, das Daten
liest. Beispielsweise kann das Wirtsystem 100 ein Speicherschreiber
sein, der nur Daten schreibt oder speichert. Alternativ dazu kann
das Wirtsystem 100 eine Vorrichtung, wie ein MP3-Player,
sein, die typischerweise Daten liest oder zurückerlangt und nicht Daten gewinnt.
-
Eine
nichtflüchtige
Speichervorrichtung 120, bei der es sich bei einer Ausführungsform
um eine entfernbare nichtflüchtige
Speichervorrichtung handelt, kommuniziert mit dem Bus 104 zum
Speichern von Informationen. Ein optionaler Schnittstellenbus 130 kann
es einer nichtflüchtigen
Speichervorrichtung 120 ermöglichen, indirekt mit dem Bus 104 zu kommunizieren.
Wenn vorhanden, dient der Eingabe/Ausgabeschaltungsblock 130 dazu,
die Belastung des Busses 104 zu reduzieren, wie dies der
Fachmann weiß.
Die nichtflüchtige
Speichervorrichtung 120 besitzt einen nichtflüchtigen
Speicher 124 und ein optionales Speichersteuersystem 128.
Bei einer Ausführungsform
kann die nichtflüchtige
Speichervorrichtung 120 auf einem einzigen Chip oder einer Die
verwirklicht sein. Alternativ dazu kann die nichtflüchtige Speichervorrichtung 120 auf
einem Multichip-Modul oder auf einer Vielzahl von diskreten Komponenten
realisiert sein, die einen Chipsatz bilden und zusammen als nichtflüchtige Speichervorrichtung 120 verwendet
werden können.
Eine Ausführungsform
der nichtflüchtigen
Speichervorrichtung 120 wird nachfolgend in größeren Einzelheiten
in Verbindung mit 1b erläutert.
-
Der
nichtflüchtige
Speicher 124, d. h. der Flash-Speicher, wie ein NAND-Flash-Speicher,
dient dazu, Daten zu speichern, so daß erforderlichenfalls auf diese
Daten zugegriffen werden kann und diese Daten gelesen werden können. Die
im nichtflüchtigen Speicher 24 gespeicherten
Daten können
auch, falls geeignet, gelöscht
werden, obwohl es sich versteht, daß einige Daten im nichtflüchtigen
Speicher 124 nicht löschbar
sein können.
Die Pro zesse des Speicherns von Daten, des Lesens von Daten und
des Löschens
von Daten werden generell vom Speichersteuersystem 128 oder,
wenn das Speichersteuersystem 128 nicht vorhanden ist,
durch Software, die vom Mikroprozessor 108 ausgeführt wird,
gesteuert. Die Operation des nichtflüchtigen Speichers 124 kann
so gemanagt werden, daß die
Lebensdauer des nichtflüchtigen
Speichers 124 beträchtlich
maximiniert wird, indem bewirkt wird, daß Sektionen des nichtflüchtigen
Speichers 124 im wesentlichen gleichmäßig verschleißen.
-
Die
nichtflüchtige
Speichervorrichtung 120 wurde so beschrieben, daß sie ein
optionales Speichersteuersystem 128, d. h. eine Steuereinheit,
aufweist. Oft kann eine nichtflüchtige
Speichervorrichtung 120 separate Chips für Funktionen
des nichtflüchtigen
Speichers 124 und des Speichersteuersystems 128,
d. h. der Steuereinheit, enthalten. Während beispielsweise nichtflüchtige Speichervorrichtungen,
die PC-Karten, Compact-Flash-Karten, Multimedia-Karten und Sicherungsdigital-Karten
umfassen, aber hierauf nicht beschränkt sind, Steuereinheiten aufweisen,
die auf einem separaten Chip realisiert sein können, können andere nichtflüchtige Speichervorrichtungen
keine Steuereinheiten besitzen, die auf einem separaten Chip realisiert
sind. Bei einer Ausführungsform,
bei der die nichtflüchtige Speichervorrichtung 120 keine
separaten Speicher- und Steuerchips enthält, können die Speicher- und Steuerfunktionen
in einen einzigen Chip integriert sein, wie dies der Fachmann weiß. Alternativ
dazu kann die Funktionalität
eines Speichersteuersystems 128 vom Mikroprozessor 108 übernommen
werden, wie beispielsweise bei einer Ausführungsform, bei der die nichtflüchtige Speichervorrichtung 120 keine Speichersteuereinheit 128 aufweist,
wie vorstehend erläutert.
-
In
Verbindung mit 1b wird eine nichtflüchtige Speichervorrichtung 120 gemäß einer
Ausführungsform
der vorliegenden Erfindung in größeren Einzelheiten
beschrieben. Wie vorstehend erläutert, besitzt
die nichtflüchtige
Speichervorrichtung 120 einen nichtflüchtigen Speicher 124 und
kann ein Speichersteuersystem 128 aufweisen. Der Speicher 124 und
das Steuersystem 128 oder die Steuereinheit können Komponenten
der nichtflüchtigen
Speichervorrichtung 120 sein, obwohl die nichtflüchtige Speichervorrichtung 120 auch
kein Steuersystem 128 aufweisen kann, wenn der Speicher 124 eine
eingebettene NAND-Vorrichtung ist, wie nachfolgend in Verbindung
mit 1c erläutert.
Bei dem Speicher 124 kann es sich um eine Reihe von Speicherzellen handeln,
die auf einem Halbleitersubstrat ausgebildet sind, wobei ein oder
mehrere Datenbits in den einzelnen Speicherzellen gespeichert sind,
indem ein Ladungsniveau von zwei oder mehr Ladungsniveaus bei einzelnen
Speicherelementen der Speicherzellen gespeichert ist. Ein nichtflüchtiger,
elektrisch löschbarer
und programmierbarer Read-only-Memory-Flash-Speicher (EEPROM) ist
ein Beispiel eines allgemeinen Speichertyps für derartige Systeme.
-
Wenn
vorhanden, kommuniziert das Steuersystem 128 über einen
Bus 15 mit einem Wirtcomputer oder einem anderen System,
das das Speichersystem zum Speichern von Daten benutzt. Der Bus 15 ist
generell ein Teil des Busses 104 der 1a. Das
Steuersystem 128 steuert ferner die Funktionsweise des
Speichers 124, der eine Speicherzellenanordnung 11 aufweisen
kann, um vom Wirt vorgesehene Daten einzuschreiben, vom Wirt angeforderte Daten
auszulesen und diverse Haushaltfunktionen im Betriebsspeicher 124 durchzuführen. Das
Steuersystem 128 besitzt generell einen Allzweckmikroprozessor,
dem ein nicht flüchtiger
Softwarespeicher, diverse logische Schaltungen u. ä. zugeordnet
sind. Eine oder mehrere Status-Maschinen
sind oft ebenfalls vorhanden, um die Performance von speziellen Programmen
zu steuern.
-
Die
Speicherzellenanordnung 11 wird auf typische Weise vom
Steuersystem 128 oder Mikroprozessor 108 über Adreßdecoder 17 adressiert.
Die Decoder 17 können
die korrekten Spannungen auf Gate- und Bit-Zeilen der Anordnung 11 aufbringen, um
Daten für
eine Gruppe von Speicherzellen, die vom Steuersystem 128 adressiert
werden, zu programmieren, hiervon auszulesen oder eine entsprechende
Gruppe zu löschen.
Zusätzliche
Schaltungen 19 können
Programmiertreiber umfassen, die Spannungen steuern, die an Elemente
der Anordnung gelegt werden, welche von den Daten abhängen, die
in einer adressierten Gruppe von Zellen programmiert werden. Die
Schaltungen 19 können
auch Verstärker und
andere Schaltungen umfassen, die erforderlich sind, um Daten von
einer adressierten Gruppe von Speicherzellen zu lesen. Daten, die
in der Anordnung 11 zu programmieren sind, oder Daten,
die kürzlich aus
der Anordnung 11 gelesen wurden, können in einem Pufferspeicher 21 gespeichert
werden, der entweder extern für
das Steuersystem 128 sein oder innerhalb des Steuersystems 128 angeordnet
sein kann, wie gezeigt. Das Steuersystem 128 kann üblicherweise
diverse Register zum zeitweisen Speichern von Befehlen und Zustandsdaten
u. ä. besitzen.
-
Die
Anordnung 11 ist in eine große Anzahl von Blöcken 0-N Speicherzellen
unterteilt. Wie für Flash-EEPROM-Systeme üblich, kann
der Block die kleinste Einheit zum Löschen sein. Mit anderen Worten,
jeder Block kann die minimale Anzahl von Speicherzellen enthalten,
die zusammen gelöscht
werden. Jeder Block ist typischerweise in eine Anzahl von Seiten
aufgeteilt, wie ebenfalls in 2 gezeigt. Eine
Seite kann die kleinste Einheit zum Programmieren sein. Mit anderen
Worten, bei einem Basisprogrammiervorgang können Daten in ein Minimum von
einer Seite von Speicherzellen eingeschrieben oder hiervon ausgelesen
werden. Ein oder mehrere Datensektoren sind typischerweise in jeder
Seite gespeichert. Wie in 1b gezeigt,
besitzt ein Sektor Benutzerdaten und Overhead-Daten. Overhead-Daten
umfassen typischerweise einen Fehlerkorrekturcode (EEC), der aus
den Benutzerdaten des Sektors berechnet worden ist. Ein Abschnitt 23 des
Steuersystems 128 kann den EEC berechnen, wenn Daten in
die Anordnung 11 programmiert werden, und kann auch den
EEC überprüfen, wenn
Daten aus der Anordnung 11 gelesen werden. Alternativ dazu
können die
EECs in unterschiedlichen Seiten oder unterschiedlichen Blöcken als
die Benutzerdaten, zu denen sie gehören, gespeichert sein.
-
Ein
Sektor von Benutzerdaten entspricht typischerweise 512 Bytes entsprechend
der Größe eines
Sektors in Magnetscheibenantrieben. Overhead-Daten entsprechen typischerweise
weiteren 16 Bytes, obwohl es sich versteht, daß die Anzahl der Bytes in Overhead-Daten
variieren kann. Ein Datensektor ist üblicherweise in jeder Seite
enthalten. Es können
jedoch auch zwei oder mehr Sektoren eine Seite bilden. Diese Anzahl
von Seiten kann generell einen Block bilden. Beispielsweise kann
ein Block aus acht Seiten bis zu 512, 1024 oder mehr Seiten gebildet
sein. Die Anzahl der Blöcke
wird ausgewählt, um
eine gewünschte
Datenspeicherkapazität
für das Speichersystem
vorzusehen. Die Anordnung
11 kann in einige Unteranordnungen
(nicht gezeigt) aufgeteilt sein, von denen jede einen Anteil der
Blöcke
enthält, die
etwas unabhängig
voneinander operieren, um den Parallelitätsgrad bei der Ausführung von
verschiedenen Speicheroperationen zu erhöhen. Ein Beispiel für die Verwendung
von mehreren Unteranordnungen ist in der
US-PS
5 890 192 beschrieben.
-
Bei
einer Ausführungsform
ist der nichtflüchtige
Speicher, wie ein NAND-Flash-Speicher, in ein System, d. h. ein
Wirtsystem, eingebettet. 1c ist eine
schematische Darstellung eines Wirtsystems, das einen eingebetteten
nichtflüchtigen
Speicher enthält.
Ein Wirt- oder Computersystem 150 enthält generell einen Systembus 154,
der die Kommunikation zwischen einem Mikroprozessor 158,
einem RAM 162 und Eingabe/Ausgabeschaltungen 166 unter
anderen Komponenten (nicht gezeigt) des Wirtsystems 150 ermöglicht.
Ein nichtflüchtiger
Speicher 174, d. h. ein Flash-Speicher, ermöglicht das
Speichern von Informationen im Wirtsystem 150. Eine Schnittstelle 180 kann
zwischen dem nichtflüchtigen
Speicher 174 und dem Bus 154 vorgesehen sein,
um das Lesen von Informationen aus dem nichtflüchtigen Speicher 174 sowie
das Einschreiben derselben in den Speicher zu ermöglichen.
-
Der
nichtflüchtige
Speicher 174 kann vom Mikroprozessor 158 gemanagt
werden, der auf wirksame Weise entweder Software oder Firmware oder beide
handhabt, die vorgesehen sind, um den nichtflüchtigen Speicher 174 zu
steuern. Mit anderen Worten, der Mikroprozessor 158 kann
Codevorrichtungen (nicht gezeigt), d. h. Softwarecodevorrichtungen oder
Firmwarecodevorrichtungen, betreiben, die eine Steuerung des nichtflüchtigen
Speichers 174 ermöglichen.
Diese Codevorrichtungen, bei denen es sich um einen Flash-Speicher
mit einer CPU innerhalb eines Mikroprozessors 158, um einen
separaten Flash-ROM oder um einen solchen innerhalb eines nichtflüchtigen
Speichers 174 handeln kann, wie nachfolgend beschrieben,
können
die Adressierung von physikalischen Blöcken im nichtflüchtigen
Speicher 174 und das Speichern von Informationen in den physikalischen
Blöcken,
das Auslesen von Informationen und das Löschen von Informationen aus
den Blöcken
ermöglichen.
-
Wenn
eine spezielle Sektion, d. h. ein Speicherelement, des nichtflüchtigen
Speichers 124 der 1a kontinuierlich
programmiert wird, d. h. wiederholt beschrieben und gelöscht wird,
verschleißt
dieser spezielle Bereich generell schneller als ein Bereich, der
nicht kontinuierlich programmiert wird. Um auf wirksame Weise den
Verschleiß von
unterschiedlichen Bereichen in einem nichtflüchtigen Speicher 124 „auszugleichen", kann eine Verschleißnivellierung
im wesentlichen so automatisch durchgeführt werden, daß Bereiche,
die kontinuierlich programmiert werden, weniger programmiert werden,
während
Bereiche, die nicht kontinuierlich programmiert werden, häufiger programmiert
werden.
-
Um
eine Verschleißnivellierung
durchzuführen,
kann generell ein Block, d. h. ein Satz von Sektoren, die einem
physikalischen Ort zugeordnet sind, welcher auf wiederholte Weise
programmiert wird, mit einem Block vertauscht werden, der einem
physikalischen Ort zugeordnet ist, der nicht wiederholt programmiert
wird. Mit anderen Worten, ein physikalischer Block, der wiederholt
programmiert und somit gelöscht
worden ist, kann mit einem physikalischen Block vertauscht werden,
der weniger oft programmiert und gelöscht worden ist.
-
Um
sofort ermitteln zu können,
ob ein spezieller physikalischer Block auf wiederholte Weise programmiert
und gelöscht
worden ist, kann bei einer Ausführungsform
der vorliegenden Erfindung eine Löschungszählung im Block gespeichert
werden. Mit anderen Worten, ein Zähler, der zählt, wie viel Mal ein Block
gelöscht
worden ist, kann aufrechterhalten und jedes mal dann erhöht werden,
wenn der Block gelöscht
wird. Eine derartige Löschungszählung kann benutzt
werden, um die Ermittlung zu erleichtern, ob ein spezieller Block
mit einem anderen Block, der weniger oft gelöscht wurde, vertauscht werden
soll. 2 ist eine schematische Darstellung eines Abschnittes
eines Flash-Speichers gemäß einer
Ausführungsform
der vorliegenden Erfindung. Der Flash-Speicher 200 kann
in Seiten 204 aufgeteilt sein. Jede Seite 204,
die generell etwa 512 Bytes von Benutzerdaten enthält, umfaßt effektiv
einen redundanten Bereich 206, d. h. die Seite 204a besitzt
einen redundanten Bereich 206a. Jeder redundante Bereich 206 oder
Overhead-Bereich kann bis zu etwa 16 Bytes an Informationen enthalten,
die typischerweise einen Gruppenidentifikator 216, einen
Aktualisierungsindex 212 und eine Löschungszählung 214 enthalten,
jedoch hierauf nicht beschränkt
sind.
-
Typischerweise
ist jede beliebige Anzahl von Seiten 204 in einem Block 210 enthalten.
Um die Darstellung zu vereinfachen, wird gezeigt, daß sich die Seiten 204a, 204b im
Block 210 befinden, obwohl es sich versteht, daß die Anzahl
der Seiten 204 im Block 210 stark variieren kann.
Bei der beschriebenen Ausführungsform
kann der Block 210 etwa 64 Seiten enthalten. Wenn beispielsweise
der Flash-Speicher 200 etwa
512 Megabits (Mb) besitzt, kann der Flash-Speicher 200 effektiv
in etwa 2.048 Blöcke
von jeweils 64 Seiten aufgeteilt sein.
-
Wie
vorstehend erläutert,
kann die Löschungszählung 214 jedes
mal dann erhöht
werden, wenn Benutzerdaten von einem zugehörigen Block gelöscht werden.
Beispielsweise kann die Löschungszählung 214,
die dem Block 210 zugeordnet ist, jedes mal erhöht werden,
wenn Daten vom Block 210 gelöscht werden. Da jede Seite 204a, 204b,
die im Block 210 enthalten ist, generell eine Löschungszählung 214 besitzt,
kann die zu jeder Seite 204a, 204b gehörende Löschungszählung 214 erhöht werden,
wenn der Block 210 gelöscht
wird.
-
Wenn
ein Daten enthaltender Block gelöscht wird,
werden generell sowohl die Datenbereiche als die redundanten Bereiche
des Blocks gelöscht
oder geleert. Der gelöschte
Block wird typischerweise einem Ersatzblockpool hinzugefügt, der
die gelöschten Blöcke mit
kleineren Löschungszählungen
als die von anderen gelöschten
Blöcken,
d. h. gelöschten Blöcken von
anderen Tabellen, enthält.
Die Ersatzblocktabelle kann im wesentlichen die am wenigsten häufig gelöschte Blocktabelle
sein, die nachfolgend beschrieben wird. Bei einer Ausführungsform
der vorliegenden Erfindung wird ein gelöschter Block, der eine große Löschungszählung besitzt,
dem Pool hinzugefügt,
der die gelöschten
Blöcke
enthält,
die im Vergleich zu den gelöschten
Blöcken
von anderen Tabellen eine größere Löschungszählung besitzen. Der
Pool, der gelöschte
Blöcke
mit großen
Löschungszählungen
enthält,
kann eine am häufigsten gelöschte Blocktabelle
sein, wie ebenfalls nachfolgend beschrieben. Die Löschungszählung eines
gerade gelöschten
Blocks wird auf 1 erhöht
und in Abhängigkeit
vom Wert der Zählung
entweder in der am wenigsten häufig
gelöschten
Blocktabelle oder der am häufigsten
gelöschten
Blocktabelle aufbewahrt.
-
Wie
in 2 gezeigt, kann auf eine Löschungszählung, wie die Löschungszählung 214, während einer
Initiali sierungsanforderung zugegriffen werden. Eine Initialisierungsanforderung
kann beispielsweise gemacht werden, wenn ein System, d. h. ein System,
das den eingebetteten Flash-Speicher enthält, in Betrieb genommen wird,
wenn Ersatzblöcke
in einem System gering frequentiert sind, wenn ein Benutzer eine
Anforderung zum Ausgleich der Blockzuordnung macht und wenn ein
Benutzer eine Anforderung macht, daß die Blocknutzung gleichmäßiger erfolgen
soll. 3 ist ein Prozeßablaufdiagramm, das die mit
der Bearbeitung einer Initialisierungsanforderung in bezug auf ein
Flash-Speichersystem verbundenen Schritte gemäß einer Ausführungsform
der vorliegenden Erfindung zeigt. Generell kann eine Initialisierungsanforderung
entweder von einem Benutzer oder im wesentlichen automatisch von
einer Steuereinheit, die dem Flash-Speichersystem zugeordnet ist,
d. h. periodisch oder beim Eintreten eines Auslösezustandes, betätigt werden. Ein
Prozeß 300 zur
Beantwortung einer Initialisierungsanforderung beginnt mit Schritt 304,
in dem eine Initialisierungsanforderung wirksam empfangen wird.
Die Initialisierungsanforderung kann von einer Steuereinheit oder
einem Prozessor, die bzw. der mit dem Flash-Speicher, der initiiert
werden soll, in Verbindung steht, empfangen werden. Eine solche
Anforderung kann von einem Benutzer über einen Wirt beim Einschalten
eingegeben werden oder beispielsweise wenn eine Blockzuordnung ausgeglichen
werden soll.
-
Wenn
die Initialisierungsanforderung empfangen worden ist, wird in Schritt 306 eine
Durchschnittslöschungszählung erhalten.
Bei einer Ausführungsform
wird die Durchschnittslöschungszählung in
einem Löschungszählungsblock
gespeichert, der in den dem System zugeordneten NAND-Speicher geschrieben
wird, obwohl es sich versteht, daß die Durchschnittslöschungszählung im
wesentlichen in irgendeine Datenstruktur im NAND-Speicher, der der Struktur zugeordnet
ist, gespeichert oder eingeschrieben werden kann. Der Löschungszählungsblock
(ECP), der die Durchschnittslöschungszählung und
die Löschungszählung eines
jeden Blocks enthält,
wird in einem Block des Flash-Spechers gespeichert. Wenn ein Löschungszählungsblock
erzeugt wird, d. h. wenn das System anfangs formatiert wird, werden
die Durchschnittslöschungszählung und
die Löschungszählung eines
jeden Blocks in der Tabelle typischerweise auf einen Wert von 0
initialisiert. Ein Löschungszählungsblock
wird nachfolgend in Verbindung mit 8a beschrieben.
Nach dem Erhalt der Durchschnittslöschungszählung werden Löschungszählungen
für im
wesentlichen sämtliche
Blöcke
im System erhalten. Wie vorstehend in Verbindung mit 2 beschrieben,
kann die Löschungszählung für einen
spezielle Daten enthaltenden Block in einem redundanten Bereich
gespeichert werden, der diesem Block zugeordnet ist. Daher kann
das Erhalten der Löschungszählung für im wesentlichen
sämtliche Blöcke, die
Daten enthalten, das Zugreifen auf einen zu jedem Block gehörenden redundanten
Bereich und das Speichern einer jeden Löschungszählung im Löschungszählungsblock umfassen.
-
Bei
einer Initialisierungsanforderung wird die Löschungszählung eines gelöschten Blocks
von einem Löschungszählblock
erhalten. Dieser Löschungszählblock hält generell
seinen Wert bei, da der redundante Bereich dieses Blocks gelöscht ist. Wenn
das Gesamtsystem stillgesetzt wird, wird typischerweise eine Beendigungsanforderung
erzeugt, so daß die
Löschungszähltabelle
aktualisiert wird, um die letzte Löschungszählung von im wesentlichen sämtlichen
Blöcken
zu erhalten. Bis zu einem vorgegebenen Zeitpunkt gehört ein Block
zu einer am häufigsten
gelöschten
Blocktabelle, einer am wenigsten gelöschten Blocktabelle, einem
Löschungszählblock oder
einer Blockmappingtabelle. Die Löschungszählung eines
Blocks, der zu einem Löschungszählblock gehört, wird
in einem redundanten Bereich des Blocks gespeichert. Die Löschungszählung eines Blocks,
der Daten enthält,
gehört
oft zu einer Blockmappingtabelle und wird im redundanten Bereich
gespeichert. Die Löschungszählung eines
gelöschten
Blocks, der zu einer Blockmappingtabelle gehört, besitzt eine Löschungszählung von
Null, da der Block niemals effektiv genutzt wurde. Das Erhalten
von Löschungszählungen
von Blöcken
in einer am wenigsten häufig
gelöschten
Blocktabelle oder einer am häufigsten
gelöschten
Blocktabelle beinhaltet das Erhalten des Wertes von der Tabelle,
da jeder Tabelleneingang generell sowohl die Blocknummer eines gelöschten Blocks
als auch dessen Löschungszählung enthält. Bei
Beendigung der Verarbeitung einer Initialisierungsanforderung wird
der Löschungszählblock
generell mit der gegenwärtigen
Löschungszählung sämtlicher
Blöcke
aktualisiert.
-
In
Schritt 320 wird eine Blockmappingtabelle im Systemspeicher,
d. h. dem Wirtsystemspeicher, zugeordnet. Wie der Fachmann weiß, kann
eine Blockmappingtabelle ange ordnet werden, um ein Mapping zwischen
einer Logikblockadresse (LBA) und einer physikalischen Blockaderesse
(PBA) vorzusehen. Ferner werden eine am häufigsten gelöschte Blocktabelle
und eine am wenigsten gelöschte Blocktabelle
ebenfalls in Schritt 320 zugeteilt.
-
Eine
am häufigsten
gelöschte
Blocktabelle wird typischerweise dimensioniert oder auf sonstige Weise
konfiguriert, um auf wirksame Weise Informationen zu erhalten, die
sich auf gelöschte
Blöcke
beziehen, die am häufigsten
gelöscht
wurden. Mit anderen Worten, ein am häufigsten gelöschter Block
wird angeordnet, um Informationen, d. h. Löschungszählungen und Mappinginformationen,
die sich auf gelöschte
Blöcke
mit den höchsten
Löschungszählungen
im System beziehen, zu erhalten. In entsprechender Weise wird eine
am wenigsten häufig
gelöschte
Blocktabelle generell dimensioniert oder sonst wie konfiguriert,
um Informationen aufzunehmen, die sich auf gelöschte Blöcke mit den geringsten Löschungszählungen
beziehen. Obwohl die Größe der am
häufigsten
gelöschten
Blocktabelle und die Größe der am
wenigsten gelöschten
Blocktabelle im großen
Umfang variieren kann, hängen
die Größen von
der Anzahl der Blöcke
ab, die als am häufigsten
gelöscht
bezeichnet werden, und der Anzahl der Blöcke, die als am wenigsten gelöscht bezeichnet werden.
Typischerweise ist die am häufigsten
gelöschte
Blocktabelle generell so dimensioniert, daß sie Informationen für weniger
gelöschte
Blöcke
als die am wenigsten häufig
gelöschte
Blocktabelle aufnimmt. Beispielsweise kann die am häufigsten
gelöschte
Blocktabelle so dimensioniert sein, daß sie Informationen für etwa 18
ge löschte
Blöcke
aufnimmt, während
die am wenigsten gelöschte
Blocktabelle so dimensioniert sein kann, daß sie Informationen in bezug
auf etwa 70 gelöschte
Blöcke
aufnimmt. Alternativ dazu kann die am häufigsten gelöschte Blocktabelle
so dimensioniert sein, daß sie
Informationen für
etwa 10 gelöschte
Blöcke
aufnimmt, während
die am wenigsten gelöschte
Blocktabelle so dimensioniert sein kann, daß sie Informationen für etwa 50
gelöschte
Blöcke
aufnimmt.
-
Nachdem
die Tabellen in Schritt 320 zugeteilt worden sind, werden
in Schritt 324 gelöschte
Blöcke identifiziert.
Dann können
in Schritt 328 „N" gelöschte Blöcke auf
die am häufigsten
gelöschten
Blöcke
und im wesentlichen auf die am häufigsten
gelöschte
Tabelle übertragen
werden. Bei einer Ausführungsform können die „N" gelöschten Blöcke die „N" gelöschten Blöcke mit
den höchsten
Löschungszählungen
sein, wie durch Vergleich sämtlicher
Löschungszählungen ermitteln.
Alternativ dazu können
die „N" gelöschten Blöcke zur
Speicherung in der am häufigsten
gelöschten
Blocktabelle auf der Basis eines Vergleiches gegen die in Schritt 306 erhaltene
durchschnittliche Löschungszählung ermittelt
werden. Beispielsweise kann es sich bei den „N" gelöschten
Blöcken
um „N" gelöschte Blöcke handeln,
die eine Löschungszählung besitzen,
welche um mindestens einen vorgegebenen Prozentsatz, d. h. etwa
25%, höher
liegt als die durchschnittliche Löschungszählung.
-
Wenn
die am häufigsten
gelöschte
Blocktabelle wirksam besiedelt worden ist, können „N" gelöschte
Blöcke identifiziert
und auf wirksame Weise in Schritt 332 auf die am wenigsten
häufig
gelöschte Blocktabelle übertragen
werden. Die „N" gelöschten Blöcke können generell
die „N" gelöschten Blöcke mit den
geringsten Löschungszählungen
von sämtlichen gelöschten Blöcken, die
dem System zugeordnet sind, sein, oder die „N" gelöschten
Blöcke
können
die „N" gelöschten Blöcke sein,
die eine Löschungszählung besitzen,
die mindestens um einen vorgegebenen Prozentsatz geringer ist als
die durchschnittliche Löschungszählung. Die „N" gelöschten Blöcke sind effektiverweise
Ersatzblöcke,
die auf die Blockmappingtabelle als geeignet übertragen werden.
-
Zurückbleibende
gelöschte
Blöcke,
d. h. gelöschte
Blöcke,
die nicht auf die am wenigsten gelöschte Blocktabelle oder die
am häufigsten
gelöschte
Blocktabelle übertragen
worden sind, werden in Schritt 336 auf die Blockmappingtabelle
zusammen mit „ungelöschten" Blöcken übertragen.
Mit anderen Worten, verbleibende gelöschte Blöcke sowie Blöcke, die
andere Daten als in den zugehörigen
redundanten Bereichen enthalten, werden mit der Blockmappingtabelle
assoziiert.
-
Nach
der Blockmappingtabelle wird die am wenigsten häufig gelöschte Blocktabelle und die
am häufigsten
gelöschte
Blocktabelle auf wirksame Weise besiedelt, d. h. mit Löschungszählungen
und Mappinginformationen, die sich auf entsprechende Blöcke beziehen.
Eine Durchschnittslöschungszählung kann
in Schritt 338 ermittelt werden. Das Ermitteln der Durchschnittslöschungszählung umfaßt typischerweise
das Summieren der Löschungs zählungen
von einzelnen Blöcken,
die in Schritt 308 erhalten wurden, und das Teilen der
Summe durch die Gesamtzahl der Blöcke. Während die Durchschnittslöschungszählung in
Abhängigkeit
von einer Initialisierungsanforderung ermittelt werden kann, versteht
es sich, daß sie
im wesentlichen zu jedem Zeitpunkt aktualisiert oder sonst wie ermittelt
werden kann. Die zu einem Verfahren zum Berechnen einer Durchschnittslöschungszählung gehörenden Schritte
werden nachfolgend in Verbindung mit 13 erläutert.
-
Die
Durchschnittslöschungszählung, die
in Schritt 338 berechnet wurde, wird im Löschungszählungsblock
gespeichert, der zum System gehört.
Wie vorstehend erläutert,
wird die Durchschnittslöschungszählung in
einem Löschungszählungsblock gespeichert,
der in den NAND-Speicher,
der zum System gehört,
eingeschrieben wird. Beim Speichern der Durchschnittslöschungszählung im
Löschungszählblock
können
in Schritt 342 statische Blöcke oder Blöcke, die Daten enthalten und
eine relativ niedrige zugehörige
Löschungszählung besitzen,
bearbeitet werden. Die zu einem Verfahren zum Verarbeiten eines
statischen Blockes gehörenden
Schritte werden nachfolgend in Verbindung mit 4 erläutert. Wenn die
statischen Blöcke
verarbeitet worden sind, ist der Prozeß der Verarbeitung einer Initialisierungsanforderung
beendet.
-
Innerhalb
einer Gruppe von Blöcken,
die zu einem Flash-Speicher
gehören,
gibt es üblicherweise Blöcke, bei
denen es sich um gelöschte
Blöcke
handelt, und Blöcke, die
Daten, d. h. Benutzerdaten, zu einem beliebigen Zeitpunkt enthalten.
Einige der Blöcke,
die Daten enthalten, können
als „normale" Blöcke angesehen
werden, während
andere als statische Blöcke
angesehen werden können.
Statische Blöcke
sind Blöcke,
die Daten enthalten, die kaum verändert werden. Mit anderen Worten,
statische Blöcke
werden selten gelöscht.
Typischerweise können statische
Blöcke
zu relativ alten Dokumenten, die in einem Flash-Speicher gespeichert
sind, einem ausführbaren
Programm, das im Flash-Speicher gespeichert ist, oder einem Betriebssystem,
das im Flash-Speicher gespeichert ist, gehören. Ein statischer Block kann
generell eine Löschungszählung besitzen,
die wesentlich geringer ist als die Löschungszählung des größten Teiles
der Blöcke
im Flash-Speicher. Bei einer Ausführungsform kann ein Block,
der Daten enthält,
als statischer Block angesehen werden, wenn die Löschungszählung des
Blocks unter einem bestimmten Prozentsatz, d. h. etwa 20%, der durchschnittlichen
Löschungszählung, die
zum Flash-Speichersystem
gehört,
liegt.
-
Da
ein statischer Block Daten enthält,
die sich kaum verändern,
können
die im statischen Block enthaltenen Daten in einem Block enthält, die
sich kaum verändern,
können
die im statischen Block enthaltenen Daten in einen Block kopiert
werden, der eine relativ hohe Löschungszählung besitzt.
Mit anderen Worten, wenn der Inhalt eines speziellen physikalischen
Blocks relativ statisch ist und sich daher generell nicht verändert, kann
der Inhalt auf wirksame Weise auf einen anderen physikalischen Block zurückübertragen
werden, der eine relativ hohe Löschungszählung enthält, damit
der ursprüngliche physikalische
Block, der eine relativ niedrige Löschungszählung aufweist, dazu benutzt
werden kann, um einen Inhalt zu speichern, der sich häufiger verändert. In
Verbindung mit 4 werden die Schritte, die zur
Verarbeitung eines statischen Blocks gehören, d. h. Schritt 342 in 3,
in Verbindung mit einer Ausführungsform
der vorliegenden Erfindung beschrieben. Ein Prozeß 342 zur
Verarbeitung eines statischen Blocks eines Systems beginnt mit Schritt 404,
in dem auf die Löschungszählung eines
nicht gelöschten
Blocks, d. h. von Block „A", zugegriffen wird.
Wenn auf die Löschungszählung von
Block „A" zugegriffen worden
ist, wird in Schritt 408 ermittelt, ob die Löschungszählung eines
nicht gelöschten
Blocks „A" im Vergleich zur
zum System gehörenden
Durchschnittslöschungszählung sehr
niedrig ist.
-
Obwohl
eine Ermittlung, ob die Löschungszählung eines
nicht gelöschten
Blocks „A" im Vergleich zur
Durchschnittslöschungszählung niedrig
ist, im wesentlichen auf allen geeigneten Kriterien basieren kann,
wird bei einer Ausführungsform
die Ermittlung auf der Basis durchgeführt, ob die Löschungszählung von
Block „A" einen Wert besitzt,
der geringer ist als ein Wert, welcher zu einem Bruchteil der Durchschnittslöschungszählung gehört. Beispielsweise
kann die Löschungszählung von
Block „A" als niedrig angesehen
werden, wenn die Löschungszählung geringer
ist als ein vorgegebener Prozentsatz der Durchschnittslöschungszählung.
-
Wenn
in Schritt 408 ermittelt wird, daß die Löschungszählung von Block „A" im Vergleich zur Durchschnittslöschungszählung nicht
sehr niedrig ist, lautet die Anzeige, daß Block „A" höchstwahrscheinlich
kein statischer Block ist. Während
Block „A" noch ein statischer
Block sein kann, selbst wenn die Löschungszählung von Block „A" nicht als sehr niedrig angesehen
wird, löst
die Löschungszählung von Block „A" in einem solchen
Fall effektiv keine Vertauschung von Block „A" mit einem anderen Block aus. Daher
ist der Prozeß der
Verarbeitung eines statischen Blocks beendet.
-
Wenn
alternativ dazu in Schritt 408 ermittelt wird, daß die Löschungszählung von
Block „A" im Vergleich zur
Durchschnittslöschungszählung sehr niedrig
ist, lautet die Angabe, daß der
Inhalt von Block „A" in einem Block mit
einer relativ hohen Löschungszählung eingeschrieben
werden kann, so daß Block „A" mit seiner niedrigen
Löschungszählung frei
ist, um Daten zu speichern, die sich relativ häufig verändern. Mit anderen Worten,
die Anzeige, wenn die Löschungszählung von
Block „A" im Vergleich zur
Durchschnittslöschungszählung sehr
niedrig ist, lautet, daß Block „A" ein statischer Block
ist. Hierbei bewegt sich der Prozeß von Schritt 408 zu Schritt 412,
in dem Block „A" als statischer Block identifiziert
wird. Wenn Block „A" einmal als statischer Block
identifiziert worden ist, kann ein Block, nämlich Block „B", aus einer Gruppe
von am häufigsten
gelöschten
Blöcken
erhalten werden, wie durch die am häufigsten gelöschte Blocktabelle
in Schritt 416 identifiziert.
-
Nachdem
Block „B" erhalten wurde,
wird der Inhalt von Block „A" in Schritt 420 in
Block „B" kopiert. Mit anderen
Worten, die in Block „A" enthaltenen Benutzerdaten
werden in Schritt 420 in Block „B" kopiert. Wenn der Inhalt von Block „A" in Block „B" kopiert worden ist,
wird Block „A" in Schritt 424 gelöscht. Wenn
Block „A" gelöscht wird,
wird typischerweise die zu Block „A" gehörende
Löschungszählung erhöht. Ein
Block, d. h. Block „C", kann aus der Gruppe
der am wenigsten häufig
gelöschten
Blöcke
in Schritt 428 in die Gruppe der am häufigsten gelöschten Blöcke bewegt
werden, so daß die
Zugehörigkeit von
Block „C" aus der am wenigsten
häufig
gelöschten
Blocktabelle auf wirksame Weise in die am häufigsten gelöschte Blocktabelle
verändert
wird. Mit anderen Worten, Block „C" wird von der am wenigsten häufig gelöschten Blocktabelle
getrennt und der am häufigsten
gelöschten.
Blocktabelle zugeführt.
Eine derartige Bewegung ermöglicht,
daß ein
Raum in der am wenigsten häufig
gelöschten
Blocktabelle wirksam geöffnet
wird, um Block „A" aufzunehmen, der eine
geringe Löschungszählung besitzt
und daher einer der am wenigsten häufig gelöschten Blöcke im System ist. Typischerweise
ist Block „C" der Block der höchsten Löschungszählung in
der am wenigsten häufig
gelöschten
Blocktabelle.
-
Bei
der Bewegung von Block „C" aus der Gruppe der
am wenigsten häufig
gelöschten
Blöcke heraus
oder bei einer sonstigen Trennung von Block „C" von der am wenigsten gelöschten Blocktabelle bewegt
sich der Prozeß von
Schritt 428 zu Schritt 432, indem Block „A" wirksam von der
Blockmappingtabelle in die am wenigsten häufig gelöschte Blocktabelle bewegt wird.
Dann wird in Schritt 434 Block „B", dessen Inhalt vorher in Block „A" enthalten war, mit
der Blockmappingtabelle assoziiert. Wie der Fachmann weiß, umfaßt das „Bewegen" von Block „B" in die Blockmappingtabelle
typischerweise das Aktualisieren des Mapping (der Karte) einer Logikblockadresse,
die vorher mit Block „A" assoziiert war,
um sie nunmehr mit Block „B" zu assoziieren.
Wenn Informationen, die sich auf Block „C" beziehen, in der am häufigsten
gelöschten
Blocktabelle vorhanden sind, Informationen, die sich auf Block „B" beziehen, in der
Blockmappingtabelle vorhanden sind und Informationen, die sich auf
Block „A" beziehen, in der am
wenigsten häufig
gelöschten
Blocktabelle vorhanden sind, ist der Prozeß der Verarbeitung eines statischen
Blocks beendet. Es versteht sich, daß Prozeß 342 wiederholt werden
kann, bis im wesentlichen sämtliche
statischen Blöcke,
die einem System zugeordnet sind, identifiziert und verarbeitet
worden sind.
-
Generell
können
eine Blockmappingtabelle, eine am wenigsten häufig gelöschte Blocktabelle und eine
am häufigsten
gelöschte
Blocktabelle im Systemspeicher, d. h. RAM 112 von 1a,
erzeugt werden, wenn eine Initialisierungsanforderung an ein Gesamt-Flash-Speichersystem geschickt
wird. Zum Aufbau der Tabellen kann zuerst Raum im Systemspeicher
zugewiesen werden, um die Tabellen aufzunehmen.
-
Wie
vorstehend erwähnt,
werden eine Blockmappingtabelle, eine am wenigsten häufig gelöschte Blocktabelle
und eine am häufigsten
gelöschte
Blocktabelle im Systemspeicher als Durchschnittslöschungszählung erzeugt.
Eine Durchschnittslöschungszählung und
die Löschungszählung eines
jeden Blocks werden in einen Löschungszählungsblock
eingeschrieben. 5a ist eine schematische Blockdiagrammdarstellung
eines Systemspeichers gemäß einer
Ausführungsform
der vorliegenden Erfindung. Ein Systemspeicher 454 und
ein Flash-Speicher 460 sind im Gesamtsystem enthalten und
können
beispielsweise effektiv Komponenten einer Speicherkarte oder Komponenten
einer Wirtvorrichtung sein, in die der Flash-Speicher 460,
wie der NAND-Speicher, eingebettet ist. Der Systemspeicher 454 dient
zum Speichern einer Blockmappingtabelle 462, mit der Blöcke assoziiert
werden können.
Typischerweise kann die Blockmappingtabelle 462 benutzt
werden, um LBAs mit physikalischen Blöcken zu assoziieren, die mit
dem Flash-Speicher 460 assoziiert sind.
-
Der
Systemspeicher 454 hält
ferner eine am wenigsten häufig
gelöschte
Blocktabelle 466 und eine am häufigsten gelöschte Blocktabelle 470,
die, wie die Blockmappingtabelle 462, generell in Abhängigkeit
von einer Initialisierungsanforderung gebildet werden. Eine Durchschnittslöschungszählung 474, die
die Durchschnittslöschungszählung von
Blöcken im
Flash-Speicher 460 enthält,
wird erzeugt, wenn ein Gesamt-Flash-Speichersystem formatiert wird. Bei
einer Ausführungsform
enthält
ein Löschungszählblock 480 die
Löschungszählung von
im wesentlichen sämtlichen
Blöcken 465 im
Flash-Speicher 460. Jedes mal dann, wenn eine Initialisierungsanforderung
eingeht, kann eine aktualisierte Durchschnitts löschungszählung berechnet und im Löschungszählblock 480 gespeichert
werden.
-
5b ist
eine schematische Darstellung einer Gruppe von „normalen" Blöcken,
einer Gruppe von am wenigsten häufig
gelöschten
Blöcken
und einer Gruppe von am häufigsten
gelöschten
Blöcken gemäß einer
Ausführungsform
der vorliegenden Erfindung. Eine Gruppe von Blöcken 402 umfaßt Blöcke 514,
bei denen es sich um normale oder statische Blöcke handeln kann, die generell
Benutzerdaten enthalten, oder die gelöscht sein können, jedoch weder einen am
häufigsten
gelöschten
Block noch einen am wenigsten häufig
gelöschten
Block bilden können.
Eine Gruppe von am wenigsten häufig
gelöschten
Blöcken 506 umfaßt generell
Blöcke 518, die
die niedrigsten Löschungszählungen
der gelöschten
Blöcke
in einem Gesamtsystem enthalten, während eine Gruppe von am häufigsten
gelöschten Blöcken 510 generell
Blöcke 522 umfaßt, die
die höchsten
Löschungszählungen
der gelöschten
Blöcke
im Gesamtsystem aufweisen. Generell finden die Blöcke 518 effektiv
als Ersatzblöcke
Verwendung.
-
Wenn
ein Block 514 gelöscht
ist, kann ermittelt werden, ob der gelöschte Block 514 eine
relativ niedrige zugehörige
Löschungszählung oder
eine relativ hohe zugehörige
Löschungszählung besitzt. Wenn
der gelöschte
Block 514 eine relativ niedrige zugehörige Löschungszählung hat, kann der gelöschte Block 514 einer
Gruppe von am wenigsten gelöschten
Blöcken 506 hinzugefügt werden.
Wenn andererseits der gelöschte
Block 514 eine relativ hohe zugehörige Löschungszählung aufweist, kann der gelöschte Block 514 auf
die Gruppe der am häufigsten
gelöschten
Blöcke 510 umgeschrieben
werden.
-
Die
Gruppe der am wenigsten häufig
gelöschten
Blöcke 506,
die im wesentlichen jede beliebige Größe besitzen kann, kann eine
sortierte Gruppe sein. Mit anderen Worten, die Blöcke 518 können auf
der Basis von Löschungszählungen
im wesentlichen sortiert sein. Die Sortierung wird typischerweise in
einer entsprechenden am wenigsten häufig gelöschten Blocktabelle (nicht
gezeigt) wiedergegeben, die zu den Blöcken 518 gehörende Eingänge aufweist.
Beispielsweise können
jedes mal dann, wenn ein neuer Block 518 in eine Gruppe
von am wenigsten häufig
gelöschten
Blöcken 506 bewegt,
zu dieser hinzugefügt
oder auf sonstige Weise mit dieser assoziiert wird, Blöcke 518 auf
der Basis von Löschungszählungen
im wesentlichen so sortiert sein, daß der am wenigsten häufig gelöschte Block 518 in
der Gruppe der am wenigsten häufig
gelöschten
Blöcke 506 der
nächste
Block 518 ist, der umgeschrieben werden soll, beispielsweise
in Gruppe 502. Mit anderen Worten, wenn ein neuer Block,
in dem Daten zu kopieren sind, erforderlich ist, wird der am wenigsten gelöschte Block 518 der
Blöcke 518 unter
Verwendung einer am wenigsten häufig
gelöschten
Blocktabelle identifiziert und der Gruppe der am wenigsten häufig gelöschten Blöcke 506 entnommen.
Wenn ein Block 514, der Daten enthält, die nicht benötigt werden,
gelöscht
wird, kann dieser Block 514 in der Gruppe der am wenigsten
häufig
gelöschten
Blöcke 506 gespeichert
werden, und die am wenigsten häufig
gelöschte
Blocktabelle kann ent sprechend aktualisiert werden, d. h. ein Eingang,
der dem zugefügten Block
entspricht, kann in der am wenigsten häufig gelöschten Blocktabelle enthalten
sein.
-
Blöcke 522 in
der Gruppe der am häufigsten gelöschten Blöcke 510,
wie Blöcke 518,
die in der Gruppe der am wenigsten häufig gelöschten Blöcke 506 gespeichert
sind, können
ebenfalls auf der Basis von Löschungszählungen
im wesentlichen sortiert werden. Diese Sortierung wird typischerweise
ermöglicht,
indem Eingänge
in eine am häufigsten
gelöschte
Blocktabelle (nicht gezeigt), die zum Identifizieren der Blöcke 522 dient,
sortiert werden. Bei einer Ausführungsform
kann eine Durchschnittslöschungszählung, die
mit Blöcken 522 assoziiert
ist, berechnet werden, d. h. es kann eine Durchschnittslöschungszählung für die Gruppe
der am häufigsten
gelöschten Blöcke 510 ermittelt
werden. Wenn ein Block 514 von der Gruppe 502 gelöscht wird
und festgestellt wird, daß die
Löschungszählung des
gelöschten
Blocks 514 die Durchschnittslöschungszählung für die Gruppe der am häufigsten
gelöschten
Blöcke 510 um mehr
als einen vorgegebenen Prozentsatz übersteigt, d. h. um mehr als
etwa 20%, kann der gelöschte
Block 514 zur Gruppe der am häufigsten gelöschten Blöcke 510 hinzugefügt werden.
Wenn ein neuer Block 522 der Gruppe der am häufigsten
gelöschten Blöcke 510 wirksam
hinzugefügt
wird, kann ein Block 522 in der Gruppe der am häufigsten
gelöschten
Blöcke 510,
der die niedrigste Löschungszählung besitzt,
in die Gruppe 502 umgeschrieben werden. Solche Umschreibungen
werden typischerweise verwirklicht, indem eine zugehörige Blockmappingtabelle,
eine am wenigsten häufig gelöschte Blocktabelle und
eine am häufigsten
gelöschte
Blocktabelle (nicht gezeigt) aktualisiert werden.
-
Der
Austauch oder die Aktualisierung der Blöcke zwischen der Gruppe 502,
der Gruppe der am wenigsten häufig
gelöschten
Blöcke 506 und
der am häufigsten
gelöschten
Blöcke 510 kann
generell durchgeführt
werden, wenn ein Block 514, der in der Gruppe 502 enthalten
ist, gelöscht
oder aktualisiert werden soll. Alternativ dazu kann der Austausch
oder die Aktualisierung der Blöcke
im wesentlichen jederzeit durchgeführt werden, wenn gewünscht wird,
einen Ersatzblock zur Verwendung in der Gruppe 502 zuzuteilen.
Als nächstes
wird in Verbindung mit 6 ein Verfahren zum Durchführen eines
Blockaustausches oder einer Blockaktualisierung in einem Gesamtspeichersystem,
wie einem Wirtsystem mit eingebettetem Flash-Speicher, um einen gleichmäßigeren
Verschleiß der
Blöcke
zu erreichen, gemäß einer Ausführungsform
der vorliegenden Erfindung beschrieben. Ein Prozeß 600 zur
Durchführung
eines Blockaustausches oder einer Blockaktualisierung beginnt mit
Schritt 604, in dem ein Block, d. h. ein Block „Y", aus einer Blockmappingtabelle „erhalten" oder unter Verwendung
der Blockmappingtabelle auf sonstige Weise identifiziert wird. Der
erhaltene Block ist der Block, der aus der Blockmappingtabelle zum Kopieren
oder Aktualisieren seines Inhaltes ausgetauscht werden soll.
-
Wenn
Block „Y" erhalten ist, wird
ein Block, d. h. Block „X", in Schritt 608 aus
der am wenigsten häufig
gelöschten
Blocktabelle erhalten. Mit anderen Worten, ein Er satzblock wird
aus der Gruppe der am wenigsten häufig gelöschten Blöcke erhalten, indem die am
wenigsten häufig
gelöschte
Blocktabelle verwendet wird, um einen geeigneten Ersatzblock zu identifizieren.
Generell ist Block „X" der Block mit der niedrigsten
Löschungszählung in
der Gruppe der am wenigsten häufig
gelöschten
Blöcke,
obwohl Block „X" im wesentlichen
auch irgendein Block sein kann, der mit der Gruppe der am wenigsten
häufig
gelöschten
Blöcke
und somit der am wenigsten häufig
gelöschten
Blocktabelle assoziiert ist. Die in Block „Y" gespeicherten Dateninhalte oder neuen
Inhalte, die die ursprünglichen
Inhalte von Block „Y" ersetzen sollen,
werden in Schritt 612 in Block „X" kopiert.
-
Nachdem
der Inhalt von Block „Y" in Block „X" kopiert worden ist,
wird Block „X" in Schritt 616 wirksam
in die Blockmappingtabelle bewegt oder hiermit assoziiert. Mit anderen
Worten, Mappings (Karten), die mit Block „Y" und mit Block „X" assoziiert sind, werden wirksam aktualisiert,
so daß eine LBA,
die vorher zu Block „Y" gemappt war, zu
Block „X" gemappt wird. Wenn
Block „X" wirksam in die Blockmappingtabelle
bewegt worden ist, wird Block „Y" in Schritt 620 gelöscht. Speziell
kann der Dateninhalt, d. h. der Benutzerinhalt, der in Block „Y" gespeichert wird,
unter Verwendung von irgendeiner geeigneten Technik gelöscht werden.
Die zu Block „Y" gehörende Löschungszählung, die
in einem redundanten Bereich, der zu Block „Y" gehört,
gespeichert ist, wird dann in Schritt 624 erhöht, um anzuzeigen,
daß Block „Y" wieder gelöscht worden
ist. Es versteht sich, daß bei
einer Ausführungsform
eine Löschungszählung für „Y", die auf wirksame
Weise in einem Löschungszählungsblock
gespeichert ist, aktualisiert werden kann.
-
In
Schritt 628 wird der Block mit der niedrigsten Löschungszählung in
der am häufigsten
gelöschten
Blocktabelle identifiziert. Wie vorstehend beschrieben, werden bei
einer Ausführungsform
Blöcke,
auf die in der am häufigsten
gelöschten
Blocktabelle Bezug genommen wird, gemäß ihren entsprechenden Löschungszählungen
sortiert. Das Sortieren der Blöcke
kann zum Positionieren der Referenzen für die Blöcke innerhalb der am häufigsten
gelöschten
Blocktabelle in Abhängigkeit
von den Löschungszählungen
der Blöcke
umfassen. Daher umfaßt
das Identifizieren des Blockes mit der niedrigsten Löschungszählung generell
den Zugang auf die Blockreferenz in der Position innerhalb der am
häufigsten
gelöschten
Blocktabelle, die zum Aufnehmen der Blockreferenz mit der niedrigsten
Löschungszählung dient.
-
Wenn
der Block mit der niedrigsten Löschungszählung, auf
die in der am häufigsten
gelöschten
Blocktabelle Bezug genommen wird, identifiziert ist, bewegt sich
der Prozeß von
Schritt 628 zu Schritt 632, in dem ermittelt wird,
ob die Löschungszählung von
Block „Y" größer ist
als die Löschungszählung des
Blocks mit der niedrigsten Löschungszählung, auf
die in der am häufigsten
gelöschten Blocktabelle
Bezug genommen wird. Wenn festgestellt wird, daß die Löschungszählung von Block „Y" nicht größer ist
als die Löschungszählung des
Blocks mit der niedrigsten Löschungszählung, auf
die in der am häufigsten
gelöschten
Blocktabelle Bezug genommen wird, wird angezeigt, daß Block „Y" nicht als häufig gelöscht angesehen
wird. Der Prozeß rückt daher
von Schritt 632 zu Schritt 636 vor, um den Block „Y" in die Gruppe der
am wenigsten häufig
gelöschten
Blöcke
und wirksam in die am wenigsten häufig gelöschte Blocktabelle zu bewegen,
d. h. es wird ein Eingang entsprechend Block „Y" in die am wenigsten häufig gelöschte Blocktabelle
hinzugefügt. Es
versteht sich, daß bei
einer Ausführungsform
das Bewegen von Block „Y" in die Gruppe der
am wenigsten häufig
gelöschten
Blöcke
das erneute Sortieren von im wesentlichen allen Blockreferenzen
in der am wenigsten häufig
gelöschten
Blocktabelle unter Verwendung der Löschungszählung eines jeden Blocks umfassen
kann. Nachdem Block „Y" wirksam in die am
wenigsten häufig
gelöschte
Blocktabelle bewegt worden ist, ist der Prozeß des Austauschs oder der Aktualisierung
der Blöcke
beendet.
-
Es
wird nunmehr wieder auf Schritt 632 Bezug genommen. Wenn
die Ermittlung in Schritt 632 ergibt, daß die Löschungszählung von
Block „Y" die niedrigste Löschungszählung, die
der am häufigsten gelöschten Blocktabelle
zugeordnet ist, übersteigt, wird
angezeigt, daß Block „Y" in die Gruppe der
am häufigsten
gelöschten
Blöcke
und wirksam in die am häufigsten
gelöschte
Blocktabelle bewegt werden sollte. Um dort Raum für Block „Y", damit auf diesen in
der am häufigsten
gelöschten
Blocktabelle Bezug genommen wird, zu schaffen, muß ein Block
d. h. der Block mit der niedrigsten Löschungszählung, auf den in der am häufigsten
gelöschten
Blocktabelle Bezug genommen wird, wirksam aus der am häufigsten
gelöschten
Block tabelle entfernt werden. Dabei wird in Schritt 640 der
Block mit der niedrigsten Löschungszählung, auf
den in der am häufigsten
gelöschten Blocktabelle
Bezug genommen wird, in die Gruppe der am wenigsten häufig gelöschten Blöcke und
wirksam in die am wenigsten häufig
gelöschte
Blocktabelle bewegt. Das Bewegen des Blocks in die Gruppe der am
wenigsten häufig
gelöschten
Blöcke
kann das erneute Sortieren der Blockreferenzen in der am wenigsten
häufig
gelöschten
Blocktabelle in Abhängigkeit
von der Löschungszählung eines
jeden Blocks umfassen.
-
Nachdem
der Block mit der niedrigsten Löschungszählung in
der am häufigsten
gelöschten Blocktabelle
wirksam aus der am häufigsten
gelöschten
Blocktabelle herausbewegt worden ist, wird der Block „Y" wirksam in Schritt 644 in
die am häufigsten gelöschte Blocktabelle
bewegt. Bei einer Ausführungsform
kann das Bewegen des Blocks „Y" in die Gruppe der
am häufigsten
gelöschten
Blöcke
und somit effektiv in die am häufigsten
gelöschte
Blocktabelle das erneute Sortieren der am häufigsten gelöschten Blöcke in Abhängigkeit
von der Löschungszählung eines
jeden Blocks, einschließlich
Block „Y", umfassen. Wenn
Block „Y" wirksam in die am
häufigsten
gelöschte
Blocktabelle bewegt worden ist, ist der Prozeß des Austauschs oder der Aktualisierung der
Blöcke
beendet.
-
Generell
wird die Funktionalität
in bezug auf die Aufrechterhaltung von Tabellen, die Handhabung von
Initialisierungsanforderungen und die Durchführung einer Verschleißnivellierung,
d. h. die Antwort auf Anfragen zum Austauschen oder Aktualisieren von
Blöcken,
in Soft ware, d. h. als Programmcodevorrichtungen, oder als Firmware
einem Wirtsystem zur Verfügung
gestellt. Eine Ausführungsform
einer geeigneten Systemarchitektur für die Software oder Firmware,
die einem Wirtsystem zur Verfügung
gestellt wird, um eine Verschleißnivellierung zu ermöglichen,
ist in 7 gezeigt. Eine Systemarchitektur 700 umfaßt generell
eine Vielzahl von Modulen, die ein Anwendungsschnittstellenmodul 704,
ein Systemmanagermodul 708, ein Datenmanagermodul 712,
einen Datenintegritätsmanager 716 und
einen Vorrichtungsmanager sowie Schnittstellenmodul 720 umfassen
können,
die jedoch hierauf nicht beschränkt
sind. Generell kann die Systemarchitektur 700 unter Verwendung
von Softwarecodevorrichtungen oder von Firmware, auf die ein Prozessor,
d. h. der Prozessor 108 in 1a, zugreifen
kann, verwirktlicht werden.
-
Generell
kann das Anwendungsschnittstellenmodul 704 mit einem Flash-Speicher
(nicht gezeigt) oder genereller mit einem Medium kommunizieren,
um das Medium während
des Verlaufes einer Initialisierungsanforderung zu initialisieren.
Das Anwendungsschnittstellenmodul 704 kann ferner aus einem
Sektor, einem Cluster oder einer Seite, die zum Medium gehören, lesen
sowie in diese einschreiben. Typischerweise steht das Anwendungsschnittstellenmodul 704 zusätzlich zur
Kommunikation mit einem Medium mit dem Systemmanagermodul 708 und
dem Datenmanagermodul 712 in Verbindung.
-
Generell
kann das Anwendungsschnittstellenmodul 704 mit dem Wirt,
dem Betriebssystem oder direkt mit dem Be nutzer kommunizieren. Es steht
auch in Verbindung mit dem Systemmanagermodul 708 und dem
Datenmanagermodul 712. Wenn der Benutzer einen Flash-Speicher
auslesen, beschreiben oder formatieren will, sendet er eine Anfrage
an das Betriebssystem, wobei die Anfragen an das Anwendungsschnittstellenmodul 704 weitergeleitet
werden. Das Anwendungsschnittstellenmodul 704 richtet die
Anfragen an den Systemmanagermodul 708 oder Datenmanagermodul 712 in
Abhängigkeit
von den Anfragen.
-
Das
Systemmanagermodul 708 besitzt ein Systeminitialisierungsuntermodul 724,
ein Löschungszählungsblockmanagementuntermodul 726 und
ein Strommanagementblockuntermodul 730. Das Systeminitialisierungsuntermodul 724 kann
generell die Verarbeitung einer Initialisierungsanforderung ermöglichen
und kommuniziert typischerweise mit dem Löschungszählungsblockmanagementuntermodul 726.
Bei einer Ausführungsform
ermöglicht das
Systeminitialisierungsuntermodul 724 die Aktualisierung
von Löschungszählungen
von Blöcken
und ist im wesentlichen verantwortlich für die Erzeugung einer am wenigsten
häufig
gelöschten
Blocktabelle und einer am häufigsten
gelöschten
Blocktabelle.
-
Das
Löschungszählungsblockmanagementuntermodul 726 besitzt
Funktionalität,
um die Speicherung von Löschungszählungen
von Blöcken
zu bewirken, beispielsweise in Löschungszählungsblöcken und
Funktionalität,
um die Berechnung einer Durchschnittslöschungszählung sowie eine Aktualisierung
unter Verwendung von einzelnen Löschungszählungen
zu bewirken. Mit anderen Worten, das Löschungszählungsblockmanagementuntermodul 726 ermöglicht auf
wirksame Weise das Katalogisieren von Löschungszählungen und die Aufrechterhaltung
einer Durchschnittslöschungszählung. Ferner synchronisiert
bei einer Ausführungsform
das Löschungszählungsblockmanagementuntermodul 726 im
wesentlichen auch die Löschungszählung von im
wesentlichen sämtlichen
Blöcken
in den Löschungszählungsblöcken während einer
Initialisierungsanforderung eines Gesamtsystems. Während das
Löschungszählungsblockmanagementuntermodul 726 die
Speicherung einer Durchschnittslöschungszählung in
Löschungszählungsblöcken bewirken
kann, versteht es sich, daß das
Strommanagementblockuntermodul 730 statt dessen verwendet
werden kann, um die Speicherung der Durchschnittslöschungszählung zu
bewirken.
-
Zusätzlich zur
Kommunikation mit dem Anwendungsschnittstellenmodul 704 steht
das Systemmanagermodul 708 auch in Verbindung mit dem Datenmanagermodul 712 sowie
mit dem Vorrichtungsmanager- und Schnittstellenmodul 720.
Das Datenmanagermodul 712, das sowohl mit dem Systemmanagermodul 708 als
auch mit dem Anwendungsschnittstellenmodul 704 in Verbindung
steht, kann Funktionalität
besitzen, um ein Seiten- oder Blockmapping vorzusehen. Das Datenmanagermodul 712 kann
ferner Funktionalität
in Assoziation mit einem Betriebssystem und Dateisystemschnittstellenschichten
besitzen.
-
Das
Vorrichtungsmanager- und Schnittstellenmodul 720, das mit
dem Systemmanagermodul 708, dem Datenmanager 712 und
dem Datenintegritätsmanager 716 in
Verbindung steht, bildet typischerweise eine Flash-Speicherschnittstelle
und besitzt Funktionalität
in bezug auf Hardwareabstraktionen, d. h. eine I/O-Schnittstelle.
Das Datenintegritätsmanagermodul 716 bewirkt
eine ECC-Handhabung u. a. Funktionen.
-
Wie
vorstehend beschrieben, können
Löschungszählungen
für jeden
Block in einem nichtflüchtigen
Speichersystem in Löschungszählungsblöcken gespeichert
werden, bei denen es sich um reservierte Blöcke handelt, die in einem System
oder einem NAND-Speicher gespeichert sind, der zum nichtflüchtigen
Speichersystem gehört.
Die Löschungszählungsblöcke können ebenfalls
eine Durchschnittslöschungszählung zusätzlich zur
Löschungszählung für jeden
Block enthalten. 8a ist eine schematische Darstellung
von Löschungszählungsblöcken gemäß einer
Ausführungsform
der vorliegenden Erfindung. Ein Löschungszählungsblock 800 ist
generell so dimensioniert, daß er
eine bestimmte Anzahl von Bits für
jeden Block im gesamten nichtflüchtigen
System, das den Löschungszählungsblock 800 aufweist,
enthält,
d. h. als physikalischer Block ausgebildet ist. Die Anzahl der Bits,
die effektiv jedem Block zugewiesen sind, kann so ausgebildet werden,
daß die
gesamte Löschungszählung für einen
Block von den zugewiesenen Bits aufgenommen werden kann. Bei einer
Ausführungsform kann
der Löschungszählungsblock 800 etwa
3 Bytes für
jeden Block enthalten, da generell 3 Bytes ausreichend sind, um
Löschungszählungen
in der Größenordnung
von etwa 100.000 aufzunehmen. Wenn 3 Bytes jedem Block zugewiesen
sind, kann in einem 512 Mb-System, das etwa 2.048 Blöcke mit 64
Seiten pro Block enthält,
der Löschungszählungsblock 800 so
dimensioniert sein, daß er
etwa 12 Seiten, d. h. etwa 6.000 Bytes, enthält.
-
Der
Löschungszählungsblock 800 enthält Seiten 810,
die, wie der Fachmann weiß,
oft etwa 512 Bytes umfassen, die dazu verwendet werden können, Daten,
wie Löschungszählungen,
zu speichern. Wie gezeigt, kann eine erste Seite 810a angeordnet sein,
um Löschungszählungseingänge für Blöcke „0" bis „169" zu enthalten, während eine
zweite Seite 810b Löschungszählungseingänge für Blöcke „170" bis „339" enthalten kann.
Wenn eine Löschungszählung für Block „1", d. h. den physikalischen
Block „1" eingeschrieben oder
ausgelesen werden sollte, kann auf die Bytes 3 bis 5 der ersten
Seite 810a zugegriffen werden, da die Bytes 3 bis 5 der
ersten Seite 810a einen Löschungszählungseingang besitzen, der
Block „1" entspricht, wie
später
in Verbindung mit den 8b und 8c erläutert.
-
Der
Löschungszählungsblock 800 besitzt
zusätzlich
dazu, daß er
die Seiten 810 aufweist, einen Header 820, der
generell im wesentlichen irgendwo im Löschungszählungsblock 800 angeordnet
sein kann. Der Header 820, der nachfolgend in Verbindung
mit 9 erläutert
wird, kann eine Seite im Löschungsblock 800 sein,
die Informationen enthält, welche
sich auf den nichtflüchtigen
Flash-Speicher beziehen, der die Blöcke umfaßt, die zu den auf den Seiten 810 gespeicherten
Löschungszählungen
gehören.
-
8b ist
eine schematische Darstellung einer Seite in einem Löschungszählungsblock,
d. h. der Seite 810a des Löschungszählungsblocks 800 in 8a,
gemäß einer
Ausführungsform
der vorliegenden Erfindung. Die Seite 810a hält Eingänge 830, die
etwa 100 und 70 physikalischen Blöcken entsprechen. Wie gezeigt,
enthalten die Eingänge 830 Löschungszählungen
für Blöcke, so
daß ein
erster Eingang 830a in der Seite 810a eine Löschungszählung für Block „0" und ein zweiter
Eingang 830b eine Löschungszählung für Block „1" enthält. Ein
letzter Eingang 830d in der Seite 810a enthält eine
Löschungszählung für Block „169".
-
Jeder
Eingang 830 besitzt im wesentlichen die gleiche Anzahl
von Bytes. Wie in 8c gezeigt, kann der Eingang 830a,
der Block „0" entspricht, den Bytes
0 bis 2 in Seite 810a entsprechen, während der Eingang 830c,
der Block „2" entspricht, die
Bytes 6 bis 8 in Seite 810a aufweisen kann. Wie vorstehend erläutert, kann
jeder Eingang 830 etwa 3 Bytes umfassen, obwohl es sich
versteht, daß die
Anzahl der Bytes in jedem Eingang 830 und somit die Anzahl
der Eingänge 830 in
Seite 810a variieren kann. Beispielsweise kann bei einer
Ausführungsform
jeder Eingang 830 etwa 4 Bytes aufweisen.
-
Während jeder
Eingang 830 in Seite 810a so angeordnet ist, daß er eine
Löschungszählung enthält, müssen die
Eingänge 830 nicht
unbedingt eine Löschungszählung enthalten.
Wenn beispielsweise ein spezieller Block nicht nutzbar ist und nicht
beschrieben oder ausgelesen werden kann, d. h. aufgrund eines Herstell-
oder Fabrikdefektes, besitzt dieser Block generell keine Löschungszählung. Ein Löschungszählungsblock,
wie der Löschungszählungsblock 800 in 8a,
besitzt generell keinen Eingang, der eine Löschungszählung für einen nicht nutzbaren Block
enthält.
Anstelle des Haltens von Löschungszählungen
können
die Eingänge 830 für nicht
nutzbare Blöcke
Indikatoren oder Markierungen, die zum Identifizieren von Blöcken als
nicht nutzbar dienen, halten.
-
8d ist
eine schematische Darstellung einer Seite in einem Löschungszählungsblock
gemäß einer
Ausführungsform
der vorliegenden Erfindung, d. h. der Seite 810a im Löschungszählblock 800 in 8a,
die Löschungszählungen
und einen Eingang enthält,
der anzeigt, daß ein
spezieller Block nicht nutzbar ist. Wenn ein Block nutzbar ist oder
eingeschrieben oder ausgelesen werden kann, besitzt er generell
eine Löschungszählung. Beispielsweise kann
der Eingang 830a der Seite 810a, die eine Löschungszählung entsprechend
Block „0" enthält, einen
Wert von „100" enthalten, wenn
der Block „0" 100 mal gelöscht worden
ist. In entsprechender Weise kann der Eingang der Seite 810a einen
Wert von „30" enthalten, wenn
der Block „1" 30 mal gelöscht worden
ist.
-
Wenn
Block „2" als nicht nutzbarer
Block identifiziert worden ist, beispielsweise durch eine in Block „2" gespeicherte Markierung,
kann der Eingang 830c der Seite 810a, der Block „2" entspricht, eine Markierung
enthalten, die anzeigt, daß Block „2" nicht nutzbar ist.
Bei einer Ausführungsform
kann eine Markierung von „FFFFFF" am Eingang 830c anzeigen,
daß Block „2" aufgrund eines Fabrikfehlers
nicht nutzbar ist. Es versteht sich, daß im wesentlichen jede beliebige
Markierung verwendet werden kann, um anzuzeigen, daß ein Block
nicht nutzbar ist.
-
Wie
vorstehend erläutert,
enthält
ein Löschungszählungsblock,
wie der Löschungszählungsblock 800 der 8a,
typischerweise einen Header 820, der bei einer Ausführungsform
eine Seite in einem Löschungszählungsblock 800 ist,
die Informationen enthält,
die sich generell auf Blöcke
in einem nichtflüchtigen
Speichersystem beziehen. Es wird nunmehr als nächstes auf 9 Bezug
genommen. Ein Header eines Löschungszählungsblocks,
d. h. der Header 820 des Löschungszählungsblocks 800 der 8a,
wird nunmehr gemäß einer
Ausführungsform
der vorliegenden Erfindung beschrieben. Der Header 820,
der im wesentlichen irgendwo in einem Löschungszählungsblock angeordnet sein
kann, kann etwa 512 Bytes umfassen, die zum Speichern von Informationen
verwendet werden können.
Die im Header 820 gespeicherten Informationen enthalten eine
Unterschrift 850a und Trennungsinformationen 850b.
Die Unterschrift 850a kann für Sicherheitschecks verwendet
werden.
-
Obwohl
eine Durchschnittslöschungszählung im
wesentlichen irgendwo in einem Systemspeicher 1 des nichtflüchtigen
Speichersystems gespeichert werden kann, wird bei der bestehenden
Ausführungsform
eine Durchschnittslöschungszählung als Information 850b im
Header 820 gespeichert.
-
Ein
Löschungszählungsblock
wird generell initialisiert oder sonst wie erzeugt, wenn zuerst
Strom einem nichtflüchtigen
Speichersystem zugeführt wird,
das den Löschungszählungsblock
enthält.
Mit anderen Worten, ein Löschungszählungsblock
wird typischerweise initialisiert, wenn ein nichtflüchtiger Speicher
eines nichtflüchtigen
Speichersystems zuerst formatiert wird. In Verbindung mit 10 werden nunmehr
die Schritte, die zu einem Verfahren zum Initialisieren eines Löschungszählungsblocks,
wenn ein nichtflüchtiger
Speicher eines nichtflüchtigen Speichersystems
zuerst formatiert wird, gehören,
in Verbindung mit einer Ausführungsform
der vorliegenden Erfindung beschrieben. Ein Prozeß 1000 beginnt mit
Schritt 1004, in dem sämtliche
Blöcke,
oder genauer gesagt sämtliche
physikalischen Blöcke,
im nichtflüchtigen
Speichersystem geprüft
werden. Das Prüfen
der Blöcke
kann das Prüfen
der Inhalte der Blöcke
umfassen, um zu ermitteln, welche Blöcke nicht nutzbar sind, d.
h. von einem Hersteller des nicht flüchtigen Speichers als nicht
nutzbar identifiziert sind. Daher werden in Schritt 1008 die
nutzbaren Blöcke
innerhalb des nichtflüchtigen
Speichers identifiziert. Das Identifizieren der nutzbaren Blöcke kann
das Identifizieren eines jeden Blockes, der eine Markierung enthält, d. h.
eine spezielle Markierung, wie „FFFFFF", die zur Identifizierung des Blockes, der
einen Fabrikfehler aufweist oder sonst wie umfaßt, bekannt ist, umfassen.
-
Wenn
im wesentlichen alle nicht nutzbaren Blöcke identifiziert worden sind,
werden die nicht nutzbaren Blöcke
in Schritt 1012 markiert oder in anderer Weise im Löschungsblock
als nicht nutzbar identifiziert. Das Markieren eines speziellen
Blocks als nicht nutzbar kann das Anordnen einer speziellen Markierung
oder eines Codes in dem Abschnitt des Löschungszählungsblocks umfassen, der
für den Block
reserviert ist, welcher den Block als nicht nutzbar identifiziert.
Es versteht sich, daß das
Markieren von nicht nutzbaren Blöcken
im Löschungszählungsblock
typischerweise auch das Aktualisieren des Headers des Löschungszählungsblocks
umfaßt,
um eine Zählung
der Gesamtzahl der nicht nutzbaren Blöcke im nichtflüchtigen
Speicher zu enthalten.
-
Nachdem
die nicht nutzbaren Blöcke
im Löschungszählungsblock
markiert worden sind, werden die Löschungszählungen der nutzbaren Blöcke oder Blöcke, die
keine Fabrikfehler besitzen, welche nicht gelöscht wurden, in Schritt 1016 initialisiert.
Das Initialisieren der Löschungszählungen
kann das Einstellen der Löschungszählung für jeden
Block, der nicht gelöscht
ist, auf einen Wert von 0 umfassen. Eine Löschungszählung für einen Block wird typischerweise in
mindestens einem der redundanten Speicher oder Overhead-Bereiche,
die dem Block zugeordnet sind, gespeichert. Die Löschungszählungen
entsprechend den nutzbaren Blöcken,
sowohl den gelöschten
als auch den nicht gelöschten
nutzbaren Blöcken,
können
dann in Schritt 1020 im Löschungszählungsblock gesetzt werden.
Typischerweise kann eine im Löschungszählungsblock
gespeicherte Löschungszählung auf
einen Wert von 0 gesetzt oder in anderer Weise initialisiert werden,
oder im Falle eines nicht gelöschten
Blocks kann der gleiche Wert wie die Löschungs zählung, die im entsprechenden
nicht gelöschten
Block gespeichert ist, verwendet werden. Mit anderen Worten, die
Löschungszählung für einen nicht
gelöschten
Block ist generell die im Löschungszählungsblock
an einer Stelle, die dem Block entspricht, gespeicherte Löschungszählung. Wenn
die Löschungszählungen
als Eingänge
im Löschungszählungsblock
gesetzt sind, kann die Durchschnittslöschungszählung in Schritt 1034 im
Löschungszählungsblock
gesetzt werden. Wie vorstehend erläutert, kann die Durchschnittslöschungszählung im
Header des Löschungszählungsblocks
gespeichert werden. Wenn die Löschungszählungen
der nicht nutzbaren Blöcke
alle auf einen Wert von 0 initialisiert worden sind, kann die Durchschnittslöschungszählung anfangs
auf einen Wert von 0 gesetzt werden. Der Prozeß der Formatierung eines nichtflüchtigen
Speichers, der im nichtflüchtigen
Speichersystem enthalten ist, wird beendet, nachdem die Durchschnittslöschungszählung gesetzt
worden ist.
-
Jedes
mal dann, wenn ein Initialisierungsprozeß in einem nichtflüchtigen
Speichersystem durchgeführt
werden soll, können
die Eingänge
in den Löschungszählungsblock
aktualisiert werden. Es versteht sich jedoch, daß der Löschungszählungsblock generell im wesentlichen
zu jedem beliebigen Zeitpunkt aktualisiert werden kann, d. h. in
Abhängigkeit
von einem vom Benutzer abgegebenen Befehl. In Verbindung mit 11 werden
die Schritte, die zu einem Verfahren zum Aktualisieren eines Löschungszählungsblocks
in Abhängigkeit
von einer Initialisierungsanforderung gehören, gemäß einer Ausführungsform
der vorliegenden Erfindung beschrieben. Ein Prozeß 1100 zur
Aktualisierung eines Löschungszählungsblocks
beginnt in Schritt 1108, in dem ein nicht gelöschter nutzbarer
Block erhalten wird. Wie jeder Fachmann weiß, enthält ein nicht gelöschter nutzbarer
Block generell Daten und befindet sich effektiv im Gebrauch. Der
für den
nicht gelöschten
nutzbaren Block im Löschungszählungsblock
gespeicherte Löschungszählungseingang
wird in Schritt 1108 erhalten. Mit anderen Worten, der
Eintritt in den Löschungszählungsblock,
der der Löschungszählung des
nicht gelöschten
nutzbaren Blocks entspricht, wird gelesen. Wenn der Eintritt für den Löschungsblock
des nicht gelöschten
nutzbaren Blocks, der gemäß Schritt 1108 erhalten
wurde, gelesen worden ist, wird in Schritt 1116 ermittelt,
ob der Löschungszählungseingang
einen Wert besitzt, der geringer ist als die im nicht gelöschten nutzbaren Block
gespeicherte Löschungszählung.
-
Wenn
in Schritt 1116 ermittelt wird, daß der im Löschungszählungsblock für den nicht
gelöschten nutzbaren
Block gespeicherte Löschungszählungseingang
geringer ist als die im nicht gelöschten nutzbaren Block gespeicherte
Löschungszählung, ist
die Anzeige, daß der
Löschungszählungseingang
im Löschungszählungsblock
gespeichert ist, nicht gültig. Daher
bewegt sich der Prozeß von
Schritt 1116 zu Schritt 1120, in dem die im Löschungszählungsblock als
Eingang, der dem nicht gelöschten
nutzbaren Block entspricht, gespeicherte Löschungszählung aktualisiert wird. Das
Aktualisieren des Löschungszählungseingangs
umfaßt
typischerweise das Speichern der gültigen Löschungszählung des nicht gelöschten nutzbaren
Blocks in den Löschungszählungsblock.
-
Wenn
der Löschungszählungseingang
aktualisiert ist, wird eine Ermittlung in Schritt 1124 durchgeführt, ob
noch mehr nicht gelöschte
nutzbare Blöcke
zu verarbeiten sind.
-
Wenn
die Ermittlung in Schritt 1124 ergibt, daß noch mehr
nicht gelöschte
nutzbare Blöcke
zu verarbeiten sind, kehrt der Prozeß zu Schritt 1108 zurück, in dem
ein anderer nicht gelöschter
nutzbarer Block erhalten wird. Wenn ermittelt wird, daß im wesentlichen
alle nicht gelöschten
nutzbaren Blöcke verarbeitet
worden sind, d. h. die Löschungszählungseingänge für im wesentlichen
alle nicht gelöschten
nutzbaren Blöcke
im Löschungszählungsblock aktualisiert
worden sind, wird alternativ dazu die Durchschnittslöschungszählung von
sämtlichen nutzbaren
Blöcken
im nicht flüchtigen
Speicher in Schritt 1128 erneut berechnet. Wie der Fachmann weiß, kann
die Durchschnittslöschungszählung ermittelt
werden, indem sämtliche
im Löschungszählungsblock
gespeicherten Löschungszählungen summiert
und dann durch die Anzahl der im Löschungszählungsblock gespeicherten Löschungszählungen
geteilt werden, wie nachfolgend in Verbindung mit 13 erläutert wird.
Nach der erneuten Berechnung der Durchschnittslöschungszählung wird die erneut berechnete
Durchschnittslöschungszählung im
Löschungszählungsblock
in Schritt 1132 gespeichert. Wie vorher erläutert, kann
die Durchschnittslöschungszählung in
einem Header des Löschungszählungsblocks
gespeichert werden. Wenn die Durchschnittslöschungszählung gespeichert worden ist,
wird der Prozeß der
Aktualisierung des Löschungszählungs blocks
in Abhängigkeit
von einer Initialisierungsanforderung beendet.
-
Es
wird nunmehr wieder auf Schritt 1116 Bezug genommen. Wenn
ermittelt wird, daß der
Löschungszählungseingang
in einen Löschungszählungsblock
für einen
erhaltenen nicht gelöschten nutzbaren
Block nicht geringer ist als die im erhaltenen nicht gelöschten nutzbaren
Block gespeicherte Löschungszählung, impliziert
dies, daß der
Löschungszählungseingang
im Löschungszählungsblock
auf neuestem Stand ist. Daher bewegt sich der Prozeß im wesentlichen
direkt von Schritt 1116 zu Schritt 1124, in dem
ermittelt wird, ob noch mehr nicht gelöschte nutzbare Blöcke verarbeitet
werden müssen.
-
Wie
vorstehend erläutert,
wird eine Löschungszählung für einen
Block in mindestens einem der redundanten Bereiche oder Overhead-Bereiche, die
zum Block gehören,
gespeichert. Beispielsweise kann eine Löschungszählung für einen Block in mindestens
dem redundanten Bereich gespeichert werden, der zu einer ersten
Seite im Block gehört.
Wenn jedoch ein Block gelöscht
wird, wird im wesentlichen der gesamte Inhalt des Blocks einschließlich der
Löschungszählung typischerweise
gelöscht.
Wenn daher ein gelöschter
Block zum Gebrauch erhalten wird, d. h. wenn ein gelöschter Block
aus einem Ersatzteilpool, wie der am wenigsten häufig gelöschten Blocktabelle, erhalten
wird, weist der gelöschte
Block keine Löschungszählung auf.
-
Typischerweise
kann eine Löschungszählung für einen
gelöschten
Block, der von einem Ersatzblockpool zum Gebrauch erhalten wurde,
d. h. für einen
Ersatzblock, aus einem Löschungszählungsblock
gelesen werden. 12 ist ein Prozeßablaufdiagramm,
das die Schritte zeigt, die zu einem Verfahren zum Erhalten einer
Löschungszählung für einen Ersatzblock
gemäß einer
Ausführungsform
der vorliegenden Erfindung gehören.
Ein Prozeß zum
Erhalten einer Löschungszählung 1200 eines
Ersatzblocks beginnt mit Schritt 124, in dem der Löschungszählungseingang
für den
erhaltenen Ersatzblock aus dem Löschungszählungsblock
gelesen wird. Speziell werden die Bits gelesen, die im Löschungszählungsblock
gespeichert sind, der einer Löschungszählung für den Ersatzblock
entspricht. Dann wird in Schritt 1208 eine Ermittlung darüber durchgeführt, ob
die Bits im Löschungszählungseingang
gültig
sind. Mit anderen Worten, es wird ermittelt, ob die Bits im Löschungszählungseingang
für den
Ersatzblock eine vorher gespeicherte Löschungszählung repräsentieren oder ob die Bits
im Löschungszählungseingang für den Ersatzblock
etwas anderes repräsentieren,
d. h. ob die Bits identifizieren, daß der Ersatzblock vorher aufgrund
eines Wachstumsdefektes nicht zur Verfügung stand.
-
Wenn
in Schritt 1208 ermittelt wird, daß der Löschungszählungseingang oder die aus
dem Löschungszählungsblock
gelesene Löschungszählung effektiv
keine gültige
Löschungszählung ist,
bewegt sich der Prozeß von
Schritt 1208 zu Schritt 1212, in dem der gelöschte Block
entweder vom Ersatzblockpool entfernt wird, wenn der ge löschte Block
vom Ersatzblockpool erhalten worden ist, oder zum Ersatzblockpool
nicht hinzugefügt
wird, wenn der gelöschte Block
nicht vom Ersatzblockpool erhalten wurde.
-
Alternativ
dazu rückt
der Prozeß von
Schritt 1208 zu Schritt 1216 vor, in dem der Inhalt
des Löschungszählungseingangs
als Löschungszählung des
Ersatzblocks gesetzt wird, wenn in Schritt 1208 ermittelt
wird, daß der
Inhalt des Löschungszählungseingangs
in den Löschungszählungsblock
für den
Ersatzblock zur Nutzung als Löschungszählung gültig ist.
Mit anderen Worten, wenn die vom Löschungszählungsblock für den Ersatzblock
gelesene Löschungszählung eine
gültige
Löschungszählung ist,
wird die vom Löschungszählungsblock
gelesene Löschungszählung als
aktuelle Löschungszählung des
Ersatzblocks gesetzt. Nachdem die Löschungszählung des Ersatzblocks auf
die vom Löschungszählungsblock
gelesene Löschungszählung gesetzt worden
ist, ist der Prozeß zum
Erhalten einer Löschungszählung für den Ersatzblock
beendet.
-
Generell
können
die zum Berechnen oder erneuten Berechnen einer Durchschnittslöschungszählung gehörenden Schritte
in großem
Umfang variieren. 13 ist ein Prozeßablaufdiagramm,
das ein Verfahren zum Berechnen einer Durchschnittslöschungszählung gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt. Ein Prozeß 1300 zum Berechnen
einer Durchschnittslöschungszählung beginnt
mit Schritt 1304, in dem die Löschungszählungen für sämtliche nutzbaren Blöcke erhalten werden. Da
nutzbare Blöcke,
die nicht gelöscht
sind, und nutzbare Blöcke,
die gelöscht
sind, zugehörige
Löschungszählungen
besitzen, während
nicht nutzbare Blöcke
generell keine Löschungszählungen
aufweisen oder keine erhältlichen
Löschungszählungen
besitzen, werden im wesentlichen nur die Löschungszählungen der nutzbaren Blöcke erhalten.
Die Löschungszählungen
werden typischerweise aus einem Löschungszählungsblock erhalten, obwohl
es sich versteht, daß die
Löschungszählungen
für nicht gelöschte nutzbare
Blöcke
stattdessen auch aus den redundanten Bereichen der nicht gelöschten nutzbaren
Blöcke
erhalten werden können.
-
Wenn
die Löschungszählungen
für nutzbare Blöcke erhalten
worden sind, werden die Löschungszählungen
für die
nutzbaren Blöcke
in Schritt 1308 summiert. Mit anderen Worten, die Löschungszählungen
für die
nutzbaren Blöcke
werden addiert. Dann wird in Schritt 1312 eine Gesamtzahl
der nutzbaren Blöcke
ermittelt. Die Gesamtzahl der nutzbaren Blöcke kann ermittelt werden,
indem eine Gesamtzahl der Blöcke
und eine Gesamtzahl der nicht nutzbaren Blöcke aus dem Löschungszählungsblock erhalten
werden und dann die Gesamtzahl der nicht nutzbaren Blöcke von
der Gesamtzahl der Blöcke subtrahiert
wird. Alternativ dazu kann die Gesamtzahl der nutzbaren Blöcke durch
wirksames Cyceln durch die gesamten Blöcke und Aufrechterhaltung einer
laufenden Zählung
sämtlicher
nutzbaren Blöcke erhalten
werden.
-
Nachdem
die Gesamtzahl der nutzbaren Blöcke
erhalten worden ist, wird die Summe der Löschungszählungen für sämtliche nutzbaren Blöcke durch
die Gesamtzahl der nutzbaren Blöcke
in Schritt 1316 geteilt, um eine Durchschnittslöschungszählung zu
erzeugen. Wenn die Gesamtzahl der nutzbaren Blöcke zur Summe der Löschungszählungen
geteilt worden ist, wird der Prozeß zur Erzeugung einer Durchschnittslöschungszählung beendet.
-
Obwohl
nur einige Ausführungsformen
der vorliegenden Erfindung beschrieben wurden, versteht es sich,
daß die
vorliegende Erfindung auch in vielen anderen speziellen Ausführungsformen
verwirklicht werden kann, ohne von der Lehre oder dem Umfang der
vorliegenden Erfindung abzuweichen. Beispielsweise können die
Größe eines
Löschungszählungsblocks
und der Ort eines Headers im Löschungszählungsblock
in großem
Umfang variieren. Ferner können
die Inhalte des Headers eines Löschungszählungsblocks
ebenfalls in Abhängigkeit von
den Erfordernissen eines speziellen Systems variieren.
-
Während nichtflüchtige Speichersysteme
beschrieben wurden, die durch zugehörige Speichersteuereinheiten
oder unter Verwendung von Software oder Firmware, die zu einem Wirtsystem
gehört, gesteuert
wurden, versteht es sich, daß Verschleißnivellierungsprozesse,
die ein Löschungszählungsmanagement
umfassen, auch bei nichtflüchtigen
Speichersystemen Verwendung finden können, die mit Steuereinheiten
in Verbindung stehen, die in bezug auf die nichtflüchtigen
Speichersysteme im wesentlichen extern angeordnet sind. Geeignete
Speichersysteme, die Steuereinheiten benutzen, sind PC-Karten, Compact-Flash-Karten,
Multimedia-Karten, Sicherheits digitalkarten und eingebettete Chipsätze, die
Flash-Speicher und
Flash-Speichersteuereinheiten umfassen, sind jedoch hierauf nicht
beschränkt. Speichersysteme,
die durch die Verwendung von Software oder Firmware eines Wirtsystems
gesteuert werden, umfassen eingebettete Speichervorrichtungen. Bei
einer Ausführungsform
können
Speichersysteme, die die vorstehend beschriebenen Löschungsmanagementtechniken
und Löschungszählungsblockmanagementtechniken
benutzen können und
keine Steuereinheiten aufweisen, die zu den Speichersystemen gehören, Steuereinheiten
benutzen, die einem Wirt zugeordnet sind, d. h. einem Wirtcomputersystem,
um die Verschleißnivellierung durchzuführen. Mit
anderen Worten, ein Wirt kann direkt einen Speicher adressieren
und managen, in dem eine Verschleißnivellierung stattfinden soll,
und zwar durch die Verwendung einer Steuereinheit am Wirt.
-
Ein
Löschungszählungsblock
wurde generell als Block beschrieben, der eine Anzahl von Seiten aufweist.
Es versteht sich jedoch, daß auch
irgendeine geeignete andere Datenstruktur in einem Systemspeicher
angeordnet werden kann, um Löschungszählungen
und eine durchschnittliche Löschungszählung zu
erhalten.
-
Bei
einer Ausführungsform
kann ein Löschungszählungsblock
im wesentlichen nur Eingänge
aufweisen, die Löschungszählungen
von Blöcken in
einem nichtflüchtigen
Speichersystem entsprechen. Bei einer derartigen Ausführungsform
können Informationen,
die generell in einem Header einer Löschungszählung enthalten sind, in einer Datenstruktur
oder einem Block gespeichert werden, der vom Löschungszählungsblock getrennt ist. Mit
anderen Worten, Informationen, wie eine Durchschnittslöschungszählung, müssen nicht
unbedingt im Löschungszählungsblock
oder genauer einem Header des Löschungszählungsblocks
gespeichert werden, wenn ein Löschungszählungsblock
im wesentlichen nur angeordnet ist, um Eingänge zu enthalten, die zu Blöcken gehörende Löschungszählungen
betreffen.
-
Alternativ
dazu kann anstelle einer Speicherung in einem Header eines Löschungszählungsblocks
eine Durchschnittslöschungszählung im
wesentlichen irgendwo in einem Löschungszählungsblock
gespeichert werden.
-
Es
wurde beschrieben, daß eine
Durchschnittslöschungszählung durch
Summieren der Löschungszählungen
sämtlicher
nutzbarer Blöcke
und nachfolgendes Teilen der Summe der Löschungszählungen der nutzbaren Blöcke durch
die Gesamtzahl der nutzbaren Blöcke
ermittelt werden kann. Es versteht sich jedoch, daß anstelle
des Teilens der Summe durch die Gesamtzahl der nutzbaren Blöcke die
Summe auch durch die Gesamtzahl der Blöcke geteilt werden kann. Ferner
kann die Durchschnittslöschungszählung bei
einer Ausführungsform
ermittelt werden, indem die Löschungszählungen
für alle Blöcke durch
Verwendung einer gültigen
Durchschnittslöschungszählung zur
Repräsentation
der Löschungszählung eines
jeden nicht nutzbaren Blocks, so daß jeder Block im wesentlichen
in einer durchschnittlichen Löschungszählung berücksichtigt wird,
ermittelt werden. Die Summe aller Löschungs zählungen einschließlich der
tatsächlichen
Löschungszählungen
für die
nutzbaren Blöcke
und der gültigen
Durchschnittslöschungszählungen
für jeden nicht
nutzbaren Block kann dann durch die Gesamtzahl der Blöcke geteilt
werden, um eine neue oder aktualisierte Durchschnittslöschungszählung zu
erzeugen.
-
Anstelle
der Berechnung einer Durchschnittslöschungszählung, die eine durchschnittliche Anzahl
von Malen wiedergibt, die jeder Block aus einer Gesamtzahl von Blöcken gelöscht worden
ist, können
auch andere Charakterisierungen einer Anzahl von Malen, die jeder
Block gelöscht
wurde, berechnet werden. Beispielsweise kann ein Medianwert der
Anzahl von Malen, die jeder Block aus einer Gesamtzahl von Blöcken, d.
h. nutzbaren Blöcken,
gelöscht
wurde, ermittelt werden.
-
Während die
Verwendung eines Löschungszählungsblocks
zur Aufrechterhaltung der Löschungszählungen
von Blöcken
in einem Speichersystem beschrieben wurde, versteht es sich, daß der Löschungszählungsblock
stattdessen auch dazu verwendet werden kann, um die Löschungszählungen von
nahezu allen Speicherelementen, die gelöscht werden können, aufrechtzuerhalten.
Beispielsweise kann bei einer Ausführungsform ein Löschungszählungsblock
oder eine Datenstruktur Löschungszählungen
für Seiten
anstelle von Blöcken
aufrechterhalten.
-
Generell
können
die Schritte der verschiedenartigen Prozesse und Verfahren zur Verschleißnivellierung
stark variieren. Es können
Schritte hinzugefügt
werden, ent fernt werden, verändert
werden und in der Reihenfolge verändert werden, ohne von der
Lehre der vorliegenden Erfindung abzuweichen. Daher sind die vorliegenden
Beispiele lediglich beispielhaft und nicht einschränkend, und
ist die Erfindung nicht auf hier offenbarte Einzelheiten beschränkt, sondern
kann innerhalb des Umfangs der Patentansprüche modifiziert werden.