-
Die
vorliegende Erfindung bezieht sich auf die schwebende amerikanische
Patentanmeldung ... (Anwaltsakte SANDP005/SDK0278.000US) mit dem Titel „Automated
wear levelling in non-volatile storage systems"; die schwebende amerikanische Patentanmeldung
10/281,739 (Anwaltsakte SANDP023/SDK0366. 000US) mit dem Titel „Wear-levelling
in not-volatile systems",
eingereicht am 28. Oktober 2002; die schwebende amerikanische Patentanmeldung
10/281,824 (Anwaltsakte SANDP026/SDK0366.003) mit dem Titel „Tracking the
least frequently erased blocks in non-volatile memory systems", eingereicht am
28. Oktober 2002; die schwebende amerikanische Patentanmeldung 10/281,631
(Anwaltsakte SANDP028/SDK0371.000US) mit dem Titel „Method and
apparatus for splitting a logical block", eingereicht am 28. Oktober 2002; die
schwebende amerikanische Patentanmeldung 10/281,855 (Anwaltsakte SANDP029/DSK0410.000US)
mit dem Titel „Method and
apparatus for grouping pages within a block", eingereicht am 28. Oktober 2002; die
schwebende amerikanische Patentanmeldung 10/281,762 (Anwaltsakte
SANDP030/SDK0416.000US) mit dem Titel „Method and apparatus for
resolving physical blocks associated with a common logigal block", eingereicht am
28. Oktober 2002; das
amerikanische Patent
6,081,447 und das amerikanische Patent
6,230,233 .
-
Die
vorliegende Erfindung betrifft generell Massenspeichersysteme von
digitalen Daten. Genauer gesagt bezieht sich die vorliegende Erfindung auf
Systeme und Verfahren, mit denen der zugehörige Verschleiß von Speicherbereichen
in einem nichtflüchtigen
Speichersystem über
im wesentlichen sämtliche
Speicherbereiche verteilt 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, dass
der nichtflüchtige
Speicher auf wiederholte Weise neu programmiert werden kann, zu.
Die kompakte physikalische Größe von Flash-Speichersystemen 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 Wirtsystemen 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.000mal gelöscht werden,
bevor der Block als unbrauchbar angesehen wird. Bei anderen Speichern
kann ein Block bis zu etwa 100.000mal oder sogar bis zu etwa 1.000.000mal
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 beeinflusst
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 niemals
auf wirksame Weise neu programmiert wird, ist die Anzahl der Programmierungs-
und Löschzyklen
und somit der mit diesem Block verbundene Verschleiß relativ
gering. Wenn jedoch ein Block wiederholt beschrieben und gelöscht wird,
d. h. einem Zyklus ausgesetzt wird, ist der Verschleiß eines
derartigen Blockes 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 nachteilig beeinflusst.
Zusätzlich
zur Verschlechterung der Leistung der verschlissenen Blöcke selbst
kann die Gesamtleistung des Flash-Speichersystems negativ beeinflusst
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
re lativ 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ückgehenden
Ressourcen effektiv vergeudet.
-
Um
die Wahrscheinlichkeit zu erhöhen,
dass 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, dass 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,
dass ein spezieller Block verschleißt, bevor andere Blöcke verschleißen.
-
Ein
herkömmlicher
Verschleißnivellierungsprozess
umfasst das Vertauschen der physikalischen Orte, für die zwei
relativ große
Anteile des Wirt-File-Systems oder der 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 von einem Wirtsystem, d. h. durch
die Verwendung eines Wirtes, initiiert und ist für das Wirtsystem nicht transparent. Auch
sind Tauschoperationen, die die Bewegung von Daten zwischen zwei
relativ großen
Abschnitten von Speicherzellen erfordern, zeitraubend und somit
ineffizient. Ferner kann das Verhalten des gesamten Flash-Speichersystems
durch Tauschvorgänge
einer rela tiv langen Zeitdauer, die signifikante Ressourcen verbrauchen,
welche dem gesamten Flash-Speichersystem zugeordnet sind, nachteilig
beeinflusst werden. Wie der Fachmann weiß, umfasst 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ßnivellierungsprozess
lässt 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 Unbrauchwerden
von Blöcken
generell eine Verschlechterung des Verhaltens des gesamten Flash-Speichersystems.
-
Die
US-A-5930193 beschreibt
ein Speichersystem mit einer Vielzahl von physikalischen Blöcken, zu
denen Löschungszählungen
gehören.
Die physikalischen Blöcke
sind in Abhängigkeit
von der Größe ihrer
Löschungszählungen
in Gruppen klassifiziert. Die
US-A-5568423 , die
US-A-5737742 , die
US-A-5485595 und die
US-A-5832493 beschreiben Verschleißnivellierungstechniken
für Flash-Speicher.
-
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 Verschleißnivellierungsprozess,
der einen gleichmäßigeren
Verschleiß in
physikalischen Orten, die zum Flash-Speichersystem gehören, fördert, ohne
hierzu einen signifikanten Gebrauch von Rechnerressourcen zu benötigen.
-
Die
vorliegende Erfindung betrifft ein System und ein Verfahren zum
Durchführen
einer Verschleißnivellierung
in einem nichtflüchtigen
Speichersystem. Gemäß einem
Aspekt der vorliegenden Erfindung wird ein Verfahren zum Verarbeiten
von Elementen, die in einem nichtflüchtigen Speicher eines Speichersystems
vorhanden sind, zur Verfügung
gestellt, das die folgenden Schritte umfasst: Erhalten von Löschungszählungen,
die zu einer Vielzahl von Elementen gehören, wobei jedes Element, das
in der Vielzahl der Elemente enthalten ist, eine zugehörige Löschungszählung aufweist
und die zugehörige
Löschungszählung eines
jeden Elementes die Anzahl von Malen anzeigt, die das Element gelöscht worden ist,
wobei die Vielzahl der Elemente gelöschte Elemente und Daten enthaltende
Elemente umfasst; Definieren eines ersten Satzes von gelöschten Elementen
durch Auswählen
von gelöschten
Elementen mit den höchsten
zugehörigen
Löschungszählungen; Speichern
der zum ersten Satz gehörenden
Löschungszählungen
in einer Speicherkomponente innerhalb einer Tabelle, wobei die Speicherkomponente
zum Speichersystem gehört;
und Sortieren der gelöschten
Elemente im ersten Satz der gelöschten Elemente
gemäß der Löschungszählung, die
zu jedem gelöschten
Element im ersten Satz gehört,
dadurch gekenn zeichnet, dass das Verfahren des weiteren die folgenden
Schritte umfasst: Identifizieren eines ersten Elementes, das im
ersten Satz der gelöschten
Elemente enthalten ist und die niedrigste Löschungszählung besitzt, die zum ersten
Satz von gelöschten
Elementen gehört;
Dissoziieren des ersten Elementes vom ersten Satz der gelöschten Elemente
und Assoziieren eines zweiten Elementes aus der Vielzahl der Elemente
mit dem ersten Satz von gelöschten
Elementen, wobei die Löschungszählung, die
zum zweiten Element gehört,
höher ist
als die Löschungszählung, die
zum ersten Element gehört.
-
Bei
einer Ausführungsform
umfasst das Verfahren das Erhalten einer durchschnittlichen Löschungszählung, die
zur Vielzahl der Elemente gehört.
Bei einer derartigen Ausführungsform
umfasst das Gruppieren der Anzahl der Elemente das Vergleichen der
Löschungszählungen,
die zur Vielzahl der Elemente gehören, mit der durchschnittlichen
Löschungszählung und
das Identifizieren der Anzahl der gelöschten Elemente als die Elemente,
die aus der Vielzahl der gelöschten
Elemente ausgewählt wurden,
welche zugehörige
Löschungszählungen aufweisen,
die um mehr als ein vorgegebener Grenzwert größer sind als die durchschnittliche
Löschungszählung.
-
Durch
das Aufrechterhalten von verschlissenen Elementen, d. h. erweiterten
Blöcken,
eines nichtflüchtigen
Speichers in einer Gruppe von verschlissenen Elementen kann der
Verschleiß der
verschlissenen Elemente im wesentlichen dadurch gemanagt werden,
dass eine Zuordnung der verschlissenen Elemente für eine Benutzung
verhindert wird, bis weniger verschlissene Elemente schließlich verschlissener
werden. Somit kann der Verschleiß von sämtlichen Elementen ausgeglichen
werden, da die öfter
gelöschten
Elemente oft in wirksamer Weise an einer Benutzung gehindert werden
und somit wieder gelöscht
werden, bis andere Elemente benutzt und öfter gelöscht worden sind. Die Gesamtlebensdauer eines
Mediums, beispielsweise einer Vorrichtung, die einen eingebetteten
Flash-Speicher oder eine Flash-Speicherkarte aufweist, kann generell
erweitert werden, wenn Blöcke,
die relativ hohe Löschungszählungen
besitzen, im wesentlichen an einer Benutzung gehindert werden, bis
die Blöcke
nicht länger
Löschungszählungen
aufweisen, die als relativ hoch angesehen werden.
-
Gemäß einem
anderen Aspekt der vorliegenden Erfindung wird ein Speichermanagementsystem
zur Verarbeitung von Elementen, die in einem nichtflüchtigen
Speicher eines Speichersystems enthalten sind, zur Verfügung gestellt,
wobei das Speichermanagementsystem umfasst: Einrichtungen zum Erhalten
von Löschungszählungen,
die zu einer Vielzahl von Elementen gehören, wobei jedes Element, das
in der Vielzahl der Elemente enthalten ist, eine zugehörige Löschungszählung aufweist,
wobei die zugehörige
Löschungszählung eines
jeden Elementes die Anzahl von Malen anzeigt, die das Element gelöscht worden
ist, und wobei die Vielzahl der Elemente gelöschte Elemente und Daten enthaltende
Elemente umfasst; Einrichtungen zum Definieren eines ersten Satzes
von gelöschten
Elementen durch Auswählen
von gelöschten
Elementen mit den höchsten
zugehörigen
Löschungszählungen
relativ zu den Löschungszählungen,
die zu der Vielzahl der Elemente gehören; Einrichtungen zum Speichern
der Löschungszählun gen,
die zum ersten Satz gehören, als
Teil einer Datenstruktur in einer Speicherkomponente, wobei die
Speicherkomponente zum Speichersystem gehört; und Einrichtungen zum Sortieren der
gelöschten
Elemente im ersten Satz von gelöschten
Elementen in Abhängigkeit
von der Löschungszählung, die
zu jedem gelöschten
Element gehört, gekennzeichnet
durch Einrichtungen zum Identifizieren eines ersten gelöschten Elementes
innerhalb des ersten Satzes von gelöschten Elementen unter Verwendung
der sortierten Eingänge,
wobei das erste gelöschte
Element die niedrigste Löschungszählung besitzt,
die zum ersten Satz von gelöschten
Elementen gehört;
und Einrichtungen zum Entfernen des ersten gelöschten Elementes vom ersten
Satz der gelöschten
Elemente in Abhängigkeit
von einer zugehörigen
Löschungszählung eines
zweiten Elementes, die die zugehörige
Löschungszählung des
identifizierten ersten Elementes übersteigt, und zum nachfolgenden
Addieren des zweiten Elementes zum ersten Satz der gelöschten Elemente.
-
Zum
besseren Verständnis
der Erfindung dient die nachfolgende Beschreibung von Ausführungsformen
der Erfindung in Verbindung mit den beigefügten Zeichnungen. Hiervon zeigen:
-
1a eine
schematische Darstellung eines Wirtsystems, das eine nichtflüchtige Speichervorrichtung
gemäß einer
Ausführungsform
der vorliegenden Erfindung aufweist;
-
1b eine
schematische Darstellung einer Spei chervorrichtung, d. h. einer
Speichervorrichtung 120 der 1a, gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
2 eine
schematische Darstellung eines Teiles eines Flash-Speichers gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
3 ein
Prozessablaufdiagramm, das die Schritte zeigt, die zur Verarbeitung
einer Initialisierungsanforderung in Bezug auf ein Flash-Speichersystem gehören, gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
4 ein
Prozessablaufdiagramm, das die Schritte zeigt, die zu einem Verfahren
zum Verarbeiten eines statischen Blockes gemäß einer Ausführungsform
der vorliegenden Erfindung gehören;
-
5a eine
schematische Blockdarstellung eines Systemspeichers gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
5b eine
schematische Darstellung von normalen Blöcken, am wenigsten häufig gelöschten Blöcken und
am häufigsten
gelöschten
Blöcken
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
6 eine
schematische Darstellung eines Verfah rens zur Durchführung einer
Blockvertauschung oder Aktualisierung im Systemspeicher eines Gesamtspeichersystems,
um für
einen gleichmäßigeren
Verschleiß der
Blöcke
zu sorgen, gemäß einer Ausführungsform
der vorliegenden Erfindung; und
-
7 eine
schematische Blockdarstellung eines Systemaufbaus gemäß einer
Ausführungsform der
vorliegenden Erfindung.
-
Nichtflüchtige Speicherblöcke in Flash-Speichersystemen
können
auf wiederholte Weise programmiert und gelöscht werden, obwohl jeder Block generell
nur eine endliche Anzahl von Malen gelöscht werden kann, bevor der
Block verschleißt.
Wenn ein Block verschleißt,
tritt eine relativ signifikante Leistungsverschlechterung des Abschnittes
des Gesamtspeichervolumens des Flash-Speichersystems, der den verschlissenen
Block enthält,
auf, und in diesem Abschnitt gespeicherte Daten können verlorengehen oder
es kann unmöglich
werden, Daten in diesem Abschnitt zu speichern.
-
Um
die Wahrscheinlichkeit zu erhöhen,
dass Blöcke
in einem Flash-Speichersystem gleichmäßiger verschleißen, können sie
gleichmäßiger benutzt werden.
Indem man ermittelt, wie viele 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 viele Male ein spezieller Block gelöscht worden
ist, in einem dem Block zugeord neten 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 dass kein signifikanter Rechenaufwand
erforderlich ist. Die Verschleißnivellierung
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.
-
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 dass 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. In Verbindung hiermit wird ein generelles Wirtsystem beschrieben,
das eine nichtflüchtige Speichervorrichtung,
d. h. eine Compact-Flash-Speicherkarte oder ein eingebettetes System,
umfasst. 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, dass das Wirtsystem 100 auch andere Komponenten
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, dass 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 einem Bus 104 zum
Speichern von Informationen. Ein optionaler Eingabe/Ausgabe-Schaltungsblock 116 kann
es einer nichtflüchtigen Speichervorrichtung 120 ermöglichen,
indirekt mit dem Bus 104 zu kommunizieren. Wenn vorhanden, dient
der Eingabe/Ausgabe-Schaltungsblock 116 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
Multichipmodul 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 dass erforderlichenfalls auf
diese Daten zugegriffen werden kann und diese Daten gelesen werden
können.
Die im nichtflüchtigen Speicher 124 gespeicherten
Daten können
auch, falls geeignet, gelöscht
werden, obwohl es sich versteht, dass einige Daten im nichtflüchtigen
Speicher 124 nicht löschbar
sein können.
Die Prozesse 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, dass die Lebensdauer des nichtflüchtigen
Speichers 124 beträchtlich
maximiert wird, indem bewirkt wird, dass Sektionen des nichtflüchtigen
Speichers 124 im wesentlichen gleichmäßig verschleißen.
-
Die
nichtflüchtige
Speichervorrichtung 120 wurde so beschrieben, dass 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, Multimediakarten und Sicherungsdigitalkarten
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 Primärkomponenten
der nichtflüchtigen Speichervorrichtung 120 sein,
obwohl die nichtflüchtige
Speichervorrichtung 120 auch kein Steuersystem 128 aufweisen
kann, wenn der Speicher 124 eine eingebettete NAND-Vorrichtung
ist. 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 oder 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 Haushaltsfunktionen im Betriebsspeicher 124 durchzuführen. Das
Steuersystem 128 besitzt generell einen Allzweckmikroprozessor,
dem ein nichtflü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 Adressdecoder 17 adressiert.
Die Decoder 17 legen die korrekten Spannungen an Gate-
und Bit-Leitungen der Anordnung 11, 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 umfassen Programmiertreiber, die Spannungen
steuern, die an Elemente der Anordnung gelegt werden, welche von den
Daten abhängen,
die in eine adressierte Gruppe von Zellen programmiert werden. Die
Schaltungen 19 umfassen ferner Abtastverstärker und
andere Schaltungen, 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 auf der Anordnung 11 gelesen
wurden, werden typischerweise in einem Pufferspeicher 21 im
Steuersystem 128 gespeichert. Das Steuersystem 128 enthält des weiteren üblicherweise
diverse Register zum zeitweisen Speichern von Befehls- und Zustandsdaten
u. ä.
-
Die
Anordnung 11 ist in eine große Anzahl von BLÖCKEN 0-N
Speicherzellen unterteilt. Wie für Flash-EEPROM-Systeme übliche,
ist der Block typischerweise die kleinste Einheit zum Löschen. Mit
anderen Worten, jeder Block enthält
die minimale Anzahl von Speicherzellen, die zusammen gelöscht werden.
Jeder Block ist typischerweise in eine Anzahl von Seiten aufgeteilt,
wie ebenfalls in 2 gezeigt. Eine Seite ist typischerweise
die kleinste Einheit zum Programmieren. Mit anderen Worten, bei
einem Basisprogrammiervorgang werden Daten in ein Minimum von einer
Seite von Speicherzellen eingeschrieben oder hiervon ausgelesen.
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 (ECC), der aus den Benutzerdaten und den Overhead-Daten
der Seite berechnet wurde. Ein Abschnitt 23 des Steuersystems 128 berechnet
den ECC, wenn Daten in die Anordnung 11 programmiert werden,
und überprüft auch
den ECC, wenn Daten aus der Anordnung 11 gelesen werden.
Alternativ dazu werden die ECCs in anderen Seiten oder anderen Blöcken als
die Benutzerdaten, zu denen sie gehören, gespeichert.
-
Ein
Sektor von Benutzerdaten entspricht typischerweise 512 Bytes entsprechend
der Größe eines
Sektors in Magnetplattenantrieben. Overhead-Daten entsprechen typischerweise
weiteren 16 Bytes. Ein Datensektor ist üblicherweise in jeder Seite
enthalten. Es können
jedoch auch zwei oder mehr Sektoren eine Seite bilden. Irgendeine
Anzahl von Seiten kann generell einen Block bilden. Beispielsweise
kann ein Block aus acht Seiten bis zu 512, 1.024 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 ist typischerweise
in einige Unteranordnungen (nicht gezeigt) aufgeteilt, 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.
-
Wenn
eine spezielle Sektion, d. h. ein Speicherelement, eines nichtflüchtigen
Speichers 124 kontinuierlich programmiert wird, d. h. auf
wiederholte Weise 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 Vergleich
von un terschiedlichen Bereichen in einem nichtflüchtigen Speicher 124 „zu nivellieren", kann eine Verschleißnivellierung im
wesentlichen so automatisch durchgeführt werden, dass Bereiche,
die kontinuierlich programmiert werden, weniger programmiert werden,
während
Bereiche, die nicht kontinuierlich programmiert werden, mehr programmiert
werden können.
-
Um
generell eine Verschleißnivellierung durchzuführen, kann
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 verfolgt, wie viele Male
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, umfasst
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 sechzehn 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, dass sich die Seiten 204a, 204b im
Block 210 befinden, obwohl es sich versteht, dass die Anzahl
der Seiten 204 im Block 210 stark variieren kann.
Bei der beschriebenen Ausführungsform
kann der Block 210 etwa 32 Seiten enthalten. Wenn beispielsweise
der Flash-Speicher 200 etwa 512 Megabits (Mb) besitzt, kann
der Flash-Speicher 200 effektiv in etwa 4.096 Blöcke von
jeweils 32 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 sowohl der
Datenbereich als auch der redundante Bereich gelöscht oder geleert. Der gelöschte Block
wird Ersatzblockpools hinzugefügt,
die die gelöschten
Blöcke
enthalten, welche kleinere Löschungszählungen im
Vergleich zu den gelöschten
Blöcken
von anderen Tabellen aufweisen. Die Ersatzblocktabelle ist im wesentlichen
die LFEB(der am wenigsten häufig
gelöschte
Block)-Tabelle. Bei einer Ausführungsform der
vorliegenden Erfindung wird der gelöschte 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. Dieser
Pool ist die MFEB(der am häufigsten
gelöschte
Block)-Tabelle. Die Löschungszählung des
gerade gelöschten
Blockes wird um eins erhöht
und in Abhängigkeit
vom Wert der Zählung
in der LEEB- oder MFEB-Tabelle
aufbewahrt.
-
Auf
eine Löschungszählung, wie
die Löschungszählung 214,
kann während
einer Initialisierungsanforderung 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, dass die Blocknutzung gleichmäßiger erfolgen
soll. 3 ist ein Prozessablaufdiagramm, 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, initiiert
werden. Ein Prozess 300 zur Beantwortung einer Initialisierungsanforderung
beginnt mit Schritt 304, in dem eine Initialisierungsanforderung
wirksam empfangen wird. Eine 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 beispielsweise von einem Benutzer über einen
Wirt beim Einschalten eingegeben werden oder beim Ausgleich einer
Blockzuordnung.
-
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. Der Löschungszählungsblock (ECB),
der die Durchschnittslöschungszählung und die
Löschungszählung eines
jeden Blocks enthält, wird
in einem Block des Flash-Speichers gespeichert. Wenn ein Löschungszählungsblock
erzeugt wird, d. h. wenn das System anfangs formatiert wird, werden
die Durchschnittlöschungszählung und
die Löschungszählung eines
jeden Blockes in der Tabelle typischerweise auf einen Wert von Null
initialisiert. Nach dem Berechnen 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
wurde, wurde die Löschungszählung für einen
spezielle Daten enthaltenden Block in einem redundanten Bereich
gespeichert, 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 bei der Initialisierungsanforderung
umfassen.
-
Bei
einer Initialisierungsanforderung wird die Löschungszählung eines gelöschten Blockes
von einem Löschungszählungsblock
erhalten. Dieser Löschungszählungsblock
behält
generell seinen Wert bei, da der redundante Bereich dieses Blockes
gelöscht
ist. Wenn das Gesamtsystem stillgesetzt wird, wird typischerweise
eine Beendigungsanforderung erzeugt, so dass die Löschungszählungstabelle
aktualisiert wird, um die letzte Löschungszählung von im wesentlichen sämtlichen
Blöcken
zu enthalten. Zu irgendeinem vorgegebenen Zeitpunkt gehört ein Block zu
einer Tabelle der am häufigsten
gelöschten
Blöcke,
einer Tabelle der am wenigsten häufig
gelöschten
Blöcke,
einem Löschungszählungsblock
oder einer Blockmappingtabelle. Die Löschungszählung eines Blockes, der zu
einem Löschungszählungsblock gehört, wird
in einem redundanten Bereich des Blockes gespeichert. Die Löschungszählung eines
Blockes, der Daten enthält,
gehört
oft zu einer Blockmappingtabelle und wird im redundanten Bereich
gespeichert. Die Löschungszählung eines
gelöschten
Blockes, 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 der Tabelle der am wenigsten häufig gelöschten Blöcke oder der Tabelle der am
häufigsten
gelöschten
Blöcke
beinhaltet das Erhalten des Wertes von der Tabelle, da jeder Tabelleneingang
generell sowohl die Blocknummer eines gelöschten Blockes als auch dessen
Löschungszählung enthält.
-
Nach
der Beendigung der Bearbeitung einer Initialisierungsanforderung
muss die Löschungszählung des
gelöschten
Blockes nicht unbedingt im Löschungszählungsblock
aktualisiert sein. Der Löschungszählungsblock
behält
seinen Wert bei, da der redundante Bereich dieses Blockes gelöscht ist. Wenn
das System stillgesetzt wird, kann eine Beendigungsanforderung gemacht
werden, so dass der Löschungszählungsblock
aktualisiert wird, um die letzte gelöschte Zählung sämtlicher Blöcke zu enthalten. Die Löschungszählung eines
gelöschten
Blockes, die zu einem am wenigsten häufig gelöschten Block gehört, wird
aus der Tabelle der am wenigsten häufig gelöschten Blöcke zurückgewonnen, während die
Löschungszählung eines
gelöschten
Blockes, der zu einem am häufigsten
gelöschten
Block gehört,
aus der Tabelle der am häufigsten
gelöschten
Blöcke
zurückgewonnen
wird. Die Löschungszählung der
verbleibenden gelöschten
Blöcke
wird generell aus dem Löschungszählungsblock
gewonnen.
-
In
Schritt 320 wird eine Blockmappingtabelle im NAND-Speicher zugeordnet.
Wie der Fachmann weiß,
kann eine Blockmappingtabelle angeordnet werden, um ein Mapping
zwischen einer Logikblockadresse (LBA) und einer physikalischen
Blockadresse (PBA) vorzusehen. Ferner werden auch eine Tabelle für am häufigsten
gelöschte
Blöcke
und eine Ta belle für
am wenigsten häufig
gelöschte
Blöcke
in Schritt 320 zugeteilt.
-
Eine
Tabelle der am häufigsten
gelöschten Blöcke 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 Worte, 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 halten. In entsprechender Weise wird eine
Tabelle für
am wenigsten häufig
gelöschte
Blöcke
generell dimensioniert oder auf sonstige Weise konfiguriert, um
Informationen aufzunehmen, die sich auf gelöschte Blöcke mit den geringsten Löschungszählungen
beziehen. Obwohl die Größe der Tabelle
der am häufigsten gelöschten Blöcke und
die Größe der Tabelle
der am wenigsten häufig
gelöschten
Blöcke
in großem
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 häufig
gelöscht
bezeichnet werden. Typischerweise ist die Tabelle der am häufigsten gelöschten Blöcke generell
so dimensioniert, dass sie Informationen für weniger gelöschte Blöcke aufnimmt
als die Tabelle für
die am wenigsten häufig
gelöschten
Blöcke.
Beispielsweise kann die Tabelle für die am häufigsten gelöschten Blöcke so dimensioniert
sein, dass sie Informationen für
etwa achtzehn gelöschte
Blöcke
aufnimmt, während
die Tabelle für die
am wenigsten häufig
gelöschten
Blöcke
so dimensioniert sein kann, dass sie Informationen in Bezug auf
etwa siebzig ge löschte
Blöcke
aufnimmt. Alternativ dazu kann die Tabelle für die am häufigsten gelöschten Blöcke so dimensioniert
sein, dass sie Informationen für
etwa zehn gelöschte
Blöcke
aufnimmt, während
die Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
so dimensioniert sein kann, dass sie Informationen für etwa fünfzig 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 Tabelle der am häufigsten gelöschten Blöcke umgeschrieben
werden. Bei einer Ausführungsform
kann es sich bei den „N" gelöschten Blöcken um
die „N" gelöschten Blöcke mit
den höchsten
Löschungszählungen,
die durch einen Vergleich sämtlicher
Löschungszählungen
ermittelt wurden, handeln. Alternativ dazu kann das Speichern der „N" gelöschten Blöcke in der
Tabelle der am häufigsten
gelöschten
Blöcke
auf der Basis eines Vergleiches gegenüber der durchschnittlichen
Löschungszählung, die
in Schritt 306 erhalten wurde, bestimmt werden. Beispielsweise
können
die „N" gelöschten Blöcke „N" gelöschte Blöcke sein,
die eine Löschungszählung aufweisen,
die um mindestens einen vorgegebenen Prozentsatz, d. h. etwa 25
höher ist
als die durchschnittliche Löschungszählung.
-
Wenn
die Tabelle der am häufigsten
gelöschten
Blöcke
wirksam besiedelt worden ist, können „M" gelöschte Blöcke identifiziert
und auf wirksame Weise in Schritt 332 auf die Tabelle der
am wenigsten häufig
gelöschten
Blöcke
umgeschrieben werden. Die „M" gelöschten Blöcke können generell
die „M" gelöschten Blöcke mit
den niedrigsten Löschungszählungen
sämtlicher
gelöschten
Blöcke,
die zum System gehören,
sein, oder die „M" gelöschten Blöcke können „M" gelöschte Blöcke sein,
die eine Löschungszählung besitzen,
die um mindestens einen vorgegebenen Prozentsatz geringer ist als
die durchschnittliche Löschungszählung. Bei
den „M" gelöschten Blöcken handelt
es sich in wirksamer Weise um Ersatzblöcke, die in geeigneter Weise
auf die Blockmappingtabelle umgeschrieben werden.
-
Zurückbleibende
gelöschte
Blöcke,
d. h. gelöschte
Blöcke,
die nicht auf die Tabelle der am wenigsten häufig gelöschten Blöcke oder die Tabelle der am
häufigsten
gelöschten
Blöcke
umgeschrieben worden sind, werden in Schritt 336 zusammen
mit „ungelöschten" Blöcken auf
die Blockmappingtabelle übertragen
bzw. umgeschrieben. Mit anderen Worten, verbleibende gelöschte Blöcke sowie
Blöcke,
die andere Daten als in den zugehörigen Redundantenbereichen
enthalten, werden mit der Blockmappingtabelle assoziiert.
-
Nachdem
die Blockmappingtabelle, die Tabelle für die am wenigsten häufig gelöschten Blöcke und
die Tabelle für
die am häufigsten
gelöschten
Blöcke
auf wirksame Weise besiedelt worden sind, d. h. mit Löschungszählungen
und Mappinginformationen, die sich auf entsprechende Blöcke beziehen,
kann eine durchschnittliche Löschungszählung in
Schritt 338 bestimmt werden. Das Ermitteln der Durchschnittslöschungszählung umfasst
typischerweise das Summieren der Löschungszählungen von einzelnen Blöcken, die
in Schritt 308 erhalten wurden, und das Teilen der Summe
durch die Gesamtzahl der Blöcke.
-
Die
in Schritt 338 berechnete durchschnittliche Löschungszählung wird
im Löschungszählungsblock,
der zum System gehört,
gespeichert. Wie vorstehend erwähnt,
wird die durchschnittliche Löschungszählung in
einem Löschungszählungsblock gespeichert,
der in den NAND-Speicher geschrieben wurde, welcher zum System gehört. Nach
dem Speichern der durchschnittlichen Löschungszählung im Löschungszählungsblock können statische
Blöcke oder
Blöcke,
die Daten enthalten und eine relativ niedrige zugehörige Löschungszählung aufweisen,
in Schritt 34 bearbeitet werden. Die zu einem Verfahren der
Bearbeitung eines statischen Blockes gehörenden Schritte werden nachfolgend
in Verbindung mit 4 erläutert. Wenn die statischen
Blöcke
einmal bearbeitet worden sind, ist die Bearbeitung einer Initialisierungsanforderung
beendet.
-
Innerhalb
einer Gruppe von Blöcken,
die zu einem Flash-Speicher
gehören,
gibt es zu irgendeinem vorgegebenen Zeitpunkt üblicherweise Blöcke, die
gelöscht
sind, und Blöcke,
die Daten, d. h. Nutzerdaten, enthalten. Einige der Blöcke, die
Date 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 selten verändert
werden. Mit anderen Worten, statische Blöcke werden selten gelöscht. Typischerweise
können
statische Blöcke
zu relativ alten Dokumenten gehören,
die in einem Flash-Speicher gespeichert sind, zu einem ausführbaren
Programm, das im Flash-Speicher gespeichert ist, oder zu einem Betriebssystem,
das im Flash-Speicher gespeichert ist. Ein statischer Block kann
generell eine Löschungszäh lung aufweisen,
die wesentlich niedriger ist als die Löschungszählung des größeren 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
Blockes unter einem bestimmten Prozentsatz, d. h. etwa 20%, der durchschnittlichen
Löschungszählung, die
zu einem Flash-Speichersystem gehört, liegt.
-
Da
ein statischer Block Daten enthält,
die kaum verändert
werden, 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
Blockes relativ statisch ist und daher generell nicht verändert wird,
kann der Inhalt auf wirksame Weise auf einen anderen physikalischen
Block, der eine relativ hohe Löschungszählung besitzt,
umgeschrieben werden, damit der ursprüngliche physikalische Block,
der eine relativ niedrige Löschungszählung besitzt,
benutzt werden kann, um einen Inhalt zu speichern, der häufiger verändert wird.
In Verbindung mit 4 werden die zur Bearbeitung
eines statischen Blockes gehörenden
Schritte, d. h. der Schritt 342 in 3, in Verbindung
mit einer Ausführungsform
der vorliegenden Erfindung beschrieben. Ein Prozess 342 zur
Bearbeitung eines statischen Blockes eines Systems beginnt mit Schritt 404,
in dem auf die Löschungszählung eines
Blockes, d. h. des Blockes „A", zugegriffen wird.
Wenn einmal der Zugriff auf die Löschungszählung des Blockes „A" erfolgt ist, wird
in Schritt 408 eine Ermittlung durchgeführt, ob die Löschungszählung des
Blo ckes „A" im Vergleich zur
durchschnittlichen Löschungszählung, die
zum System gehört,
sehr niedrig ist.
-
Obwohl
eine Bestimmung, ob die Löschungszählung des
Blockes „A" im Vergleich zur durchschnittlichen
Löschungszählung niedrig
ist, auf im wesentlichen jedem geeigneten Kriterium basieren kann,
wird bei einer Ausführungsform
die Bestimmung auf der Basis durchgeführt, ob die Löschungszählung von
Block „A" einen Wert besitzt,
der geringer ist als ein Wert, der zu einem Teil der durchschnittlichen
Löschungszählung gehört. Beispielsweise
kann die Löschungszählung des
Blockes „A" als niedrig angesehen
werden, wenn die Löschungszählung weniger
als ein vorgegebener Prozentsatz der durchschnittlichen Löschungszählung beträgt.
-
Wenn
in Schritt 408 ermittelt wird, dass die Löschungszählung von
Block „A" im Vergleich zur durchschnittlichen
Löschungszählung nicht
sehr niedrig ist, erfolgt die Anzeige, dass Block „A" höchstwahrscheinlich
nicht ein statischer Block ist. Obwohl Block „A" noch ein statischer Block sein kann,
wenn die Löschungszählung von
Block „A" nicht als sehr niedrig
angesehen wird, löst
die Löschungszählung von
Block „A" in solch einem Fall
nicht auf wirksame Weise ein Vertauschen des Blockes „A" mit einem anderen
Block aus. Daher ist der Prozess der Bearbeitung eines statischen
Blockes beendet.
-
Wenn
alternativ dazu in Schritt 408 ermittelt wird, dass die
Löschungszählung von
Block „A" im Vergleich zur
durchschnittlichen Löschungszählung sehr
niedrig ist, folgt hieraus, dass der Inhalt von Block „A" in einen Block mit einer
relativ hohen Löschungszählung eingeschrieben
werden kann, so dass Block „A" mit seiner niedrigen
Löschungszählung auf
freie Weise Daten speichern kann, die relativ häufig verändert werden. Mit anderen Worten,
die Anzeige, wenn die Löschungszählung von
Block „A" im Vergleich zur
durchschnittlichen Löschungszählung sehr
niedrig ist, ist, dass Block „A" ein statischer Block
ist. Der Prozess bewegt sich dabei von Schritt 408 zu Schritt 412,
in dem Block „A" als statischer Block
identifiziert wird. Wenn einmal Block „A" als ein statischer Block identifiziert
worden ist, kann ein Block, nämlich
Block „B", von einer Gruppe
der am häufigsten
gelöschten
Blöcke
erhalten werden, wie durch die Tabelle der am häufigsten gelöschten Blöcke in Schritt 416 identifiziert.
-
Nachdem
Block „B
erhalten worden ist, wird der Inhalt von Block „A" in Schritt 420 in Block „B" kopiert. Mit anderen
Worten, die in Block „A" enthaltenen Nutzerdaten
werden in Schritt 420 in Block „B" kopiert. Wenn der Inhalt von Block „A" einmal in Block „B" kopiert worden ist,
wird Block „A" in Schritt 424 gelöscht. Wenn
Block „A" gelöscht ist,
wird typischerweise die zu Block „A" gehörende
Löschungszählung erhöht. Ein
Block, d. h. Block „C", kann in Schritt 428 so
von der Gruppe der am wenigsten häufig gelöschten Blöcke in die Gruppe der am häufigsten
gelöschten
Blöcke
bewegt werden, so dass die Assoziation von Block „C" von der Tabelle
der am wenigsten häufig
gelöschten
Blöcke
wirksam zur Tabelle der am häufigsten
gelöschten
Blöcke
verändert
wird. Mit anderen Worten, Block „C" wird von der Tabelle der am wenigsten
häufig
gelöschten
Blöcke
dissoziiert und mit der Tabelle der am häufigsten gelöschten Blöcke assoziiert.
-
Durch
eine derartige Bewegung kann ein Raum in der Tabelle der am wenigsten
häufig
gelöschten
Blöcke
auf wirksame Weise zur Aufnahme von Block „A", der eine niedrige Löschungszählung besitzt
und somit einer der am wenigsten häufig gelöschten Blöcke im System ist, geöffnet werden.
-
Nach
dem Bewegen von Block „C" aus der Gruppe der
am wenigsten häufig
gelöschten
Blöcke heraus
oder nach dem sonstigen Dissoziieren von Block „C" von der Tabelle der am wenigsten häufig gelöschten Blöcke bewegt
sich der Prozess von Schritt 428 zu Schritt 432,
in dem Block „A" wirksam von der
Blockmappingtabelle in die Tabelle der am wenigsten häufig gelöschten Blöcke bewegt
wird. Dann wird in Schritt 434 Block „B", der Inhalt enthält, der vorher in Block „A" enthalten war, mit
der Blockmappingtabelle assoziiert. Wie der Fachmann weiß, umfasst
die „Bewegung" von Block „B" in die Blockmappingtabelle
typischerweise das Aktualisieren des Mappings der Adresse eines
logischen Blockes, die mit Block „A" assoziiert war, derart, dass sie nunmehr
mit Block „B" assoziiert ist.
Wenn Informationen in Bezug auf Block „C" in der Tabelle der am häufigsten
gelöschten
Blöcke
vorhanden sind, sind die Informationen in Bezug auf Block „B" in der Blockmappingtabelle
vorhanden und Informationen in Bezug auf Block „A" in der Tabelle der am wenigsten häufig gelöschten Blöcke vorhanden,
so dass der Prozess der Bearbeitung eines statischen Blockes beendet
ist. Es versteht sich, dass der Prozess 342 wiederholt
werden kann, bis im wesentlichen sämtliche statischen Blöcke, die
zum System gehören, identifiziert
und bearbeitet worden sind.
-
Generell
können
eine Blockmappingtabelle, eine Tabelle für am wenigsten häufig gelöschte Blöcke und
eine Tabelle für
am häufigsten
gelöschte
Blöcke
im Systemspeicher, d. h. RAM 112 von 1a, erzeugt
werden, wenn eine Initialisierungsanforderung an ein gesamtes Flash-Speichersystem
gesendet wird. Zum Erstellen der Tabellen kann zuerst Raum im Systemspeicher
zugewiesen werden, um die Tabellen aufzunehmen.
-
Wie
vorstehend erwähnt,
werden eine Blockmappingtabelle, eine Tabelle für am wenigsten häufig gelöschte Blöcke und
eine Tabelle für
am häufigsten
gelöschte
Blöcke
im Systemspeicher erzeugt, wie dies auch bei einer durchschnittlichen
Löschungszählung der
Fall ist. Eine durchschnittliche Löschungszählung und die Löschungszählung eines jeden
Blockes werden ebenfalls in den 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 wirksam Komponenten einer Speicherkarte oder Komponenten
einer Wirtvorrichtung bilden, in die der Flash-Speicher 460 eingebettet
ist. Der Systemspeicher 454 ist so ausgebildet, dass er
eine Blockmappingtabelle 462 speichert, mit der Blöcke assoziiert
sein können.
Typischerweise kann die Blockmappingtabelle 462 benutzt
werden, um LBSs mit physikalischen Blöcken, die zum Flash-Speicher 460 gehören, zu
assoziieren.
-
Der
Systemspeicher 454 hält
ferner eine Tabelle 466 für am wenigsten häufig gelöschte Blöcke und
eine Tabelle 470 für am
häufigsten
gelöschte Blöcke, die
wie die Blockmappingtabelle 462 generell in Abhängigkeit
von einer Initialisierungsanforderung geformt werden. Eine durchschnittliche
Löschungszählung 474,
die die durchschnittliche Löschungszählung von
Blöcken
im Flash-Speicher 460 hält, wird
erzeugt, wenn ein gesamtes Flash-Speichersystem formatiert wird.
Bei einer Ausführungsform
ist ein Löschungszählungsblock 480 so
ausgebildet, dass er die Löschungszählungen
von im wesentlichen sämtlichen
Blöcken
im Flash-Speicher 460 enthält. Jedes Mal dann, wenn eine
Initialisierungsanforderung gemacht wird, kann eine aktualisierte
durchschnittliche Löschungszählung berechnet
und im Löschungszählungsblock 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 502 besitzt Blöcke 514,
bei denen es sich um normale oder statische Blöcke handeln kann, die generell
Nutzerdaten enthalten, welche gelöscht werden können, jedoch
nicht in die Kategorien eines am wenigsten häufig gelöschten Blockes oder eines am
häufigsten
gelöschten Blockes
fallen. Eine Gruppe von am wenigsten häufig gelöschten Blöcken 506 umfasst generell
Blöcke 518,
die die niedrigsten Löschungszählungen
in einem Gesamtsystem besitzen, während eine Gruppe von am häufigsten
gelöschten
Blöcken 510 generell Blöcke 522 umfasst,
die die höchsten
Löschungszählungen
der gelöschten
Blöcke
im Gesamtsystem besitzen. Generell werden die Blöcke 518 effektiv als Ersatzblöcke verwendet.
-
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 zur
Gruppe der am wenigsten häufig
gelöschten
Blöcke 506 addiert
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 irgendeine geeignete 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 Tabelle (nicht gezeigt) für am wenigsten
häufig
gelöschte
Blöcke, die
mit Blöcken 518 assoziierte
Eingänge
enthält,
reflektiert. Beispielsweise können
jedes Mal dann, wenn ein neuer Block 518 in die Gruppe
der am wenigsten häufig
gelöschten
Blöcke 506 bewegt,
hierzu addiert oder auf sonstige Weise hiermit assoziiert wird,
die Blöcke 518 im
wesentlichen auf der Basis von Löschungszählungen
sortiert werden, so dass 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 sein kann, der umzuschreiben ist, beispielsweise
auf die Gruppe 502. Mit anderen Worten, wenn ein neuer
Block erforderlich ist, in den Daten zu kopieren sind, wird der
am we nigsten häufig
gelöschte
Block 518 der Blöcke 518 unter
Verwendung einer Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
identifiziert und aus der Gruppe der am wenigsten häufig gelöschten Blöcke 506 genommen.
Wenn ein Block 514, der Daten enthält, die nicht gebraucht werden,
gelöscht
wird, kann dieser Block 514 typischerweise in einer Gruppe
von am wenigsten häufig
gelöschten
Blöcken 506 gespeichert
und die Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
kann entsprechend aktualisiert werden, d. h. ein Eingang, der dem
addierten Block entspricht, kann in der Tabelle für die am
wenigsten häufig
gelöschten
Blöcke
vorhanden sein.
-
Blöcke 522 in
der Gruppe der am häufigsten gelöschten Blöcke 510 können wie
die Blöcke 518, die
in der Gruppe der am wenigsten häufig
gelöschten
Blöcke 506 gespeichert
sind, ebenfalls im wesentlichen auf der Basis von Löschungszählungen sortiert
sein. Diese Sortierung wird typischerweise durchgeführt, indem
Eingänge
in einer Tabelle (nicht gezeigt) für am häufigsten gelöschte Blöcke, die
zur Identifizierung der Blöcke 522 dient,
sortiert werden. Bei einer Ausführungsform
kann eine durchschnittliche Löschungszählung, die
zu den Blöcken 522 gehört, berechnet
werden, d. h. es kann eine durchschnittliche Löschungszählung für die Gruppe der am häufigsten
gelöschten
Blöcke 510 ermittelt
werden. Wenn ein Block 514 aus der Gruppe 502 gelöscht wird
und festgestellt wird, dass die Löschungszählung des gelöschten Blockes 514 die
durchschnittliche Löschungszählung für die Gruppe
der am häufigsten
gelöschten
Blöcke 510 um
mehr als einen vorgegebenen Prozentsatz, d. h. um mehr als etwa
20 übersteigt,
kann der gelöschte
Block 514 zur Gruppe der am häufigsten gelöschten Blöcke 510 addiert werden.
Wenn ein neuer Block 522 auf wirksame Weise zur Gruppe
der am häufigsten
gelöschten
Blöcke 510 addiert
wird, kann ein Block 522 in der Gruppe der am häufigsten
gelöschten
Blöcke 510,
der die niedrigste Löschungszählung aufweist,
wieder in die Gruppe 502 umgeschrieben werden. Derartige
Rückumschreibungen
werden typischerweise durch das Aktualisieren einer zugehörigen Blockmappingtabelle,
Tabelle für
am wenigsten häufig
gelöschte
Blöcke und
Tabelle für
am häufigsten
gelöschte
Blöcke
reflektiert (nicht gezeigt).
-
Das
Tauschen von Blöcken
zwischen der Gruppe 502, der Gruppe der am wenigsten häufig gelöschten Blöcke 506 und
den am häufigsten
gelöschten
Blöcken 510 kann
generell durchgeführt
werden, wenn ein Block 514, der in der Gruppe 502 vorhanden
ist, gelöscht
oder aktualisiert werden soll. Alternativ dazu kann das Tauschen
oder Aktualisieren von Blöcken
im wesentlichen immer dann durchgeführt werden, wenn ein Ersatzblock
in der Gruppe 502 zur Verwendung zugewiesen werden soll.
In Verbindung mit 6 wird nunmehr ein Verfahren
zur Durchführung
eines Blockaustausches oder einer Blockaktualisierung in einem Gesamtspeichersystem,
wie einem Wirtsystem mit eingebettetem Flash-Speicher, um einen
gleichmäßigeren
Verschleiß der
Blöcke
zu erzielen, gemäß einer
Ausführungsform
der vorliegenden Erfindung beschrieben. Ein Prozess 600 zur
Durchführung
eines Blockaustausches oder einer Aktualisierung beginnt in Schritt 604,
in dem ein Block, d. h. Block „Y", von einer Blockmappingtabelle „erhalten" oder unter Verwendung
der Blockmappingtabelle auf sonstige Weise identifiziert wird. Der
erhaltene Block ist derjenige Block, der auf der Blockmappingtabelle zum Kopieren
oder Aktualisieren seines Inhaltes wirksam ausgetauscht werden soll.
-
Wenn
Block „Y" erhalten worden
ist, wird ein Block, d. h. Block „X", aus der Tabelle für die am wenigsten häufig gelöschten Blöcke auf
wirksame Weise erhalten. Mit anderen Worten, ein Ersatzblock wird aus
der Gruppe der am wenigsten häufig
gelöschten Blöcke unter
Verwendung der Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
erhalten, um einen geeigneten Ersatzblock zu identifizieren. Generell
ist der 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
irgendein Block sein kann, der mit der Gruppe der am wenigsten häufig gelöschten Blöcke und
damit der Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
assoziiert ist. Der Inhalt oder genauer gesagt der Dateninhalt,
der in Block „Y" gespeichert ist,
oder ein neuer Inhalt, der den ursprünglichen Inhalt von Block „Y" ersetzen soll, wird
in Schritt 612 in Block „X" kopiert.
-
Nachdem
der Inhalt von Block „Y" in Block „X" kopiert worden ist,
wird Block „X" im Schritt 616 wirksam
in die Blockmappingtabelle bewegt oder hiermit assoziiert. Mit anderen
Worten, zum Block „Y" und zum Block „X" gehörende Mappings
werden wirksam aktualisiert, so dass ein LBA, der vorher zu Block „Y" gemappt wurde, 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 Nutzerinhalt, der in Block „Y" gespeichert ist,
unter Verwendung von irgend einer geeigneten Technik gelöscht werden.
Die zu Block „Y" gehörende Löschungszählung, die
im redundanten Bereich, der zu Block „Y" gehört,
gespeichert wurde, wird dann in Schritt 624 erhöht, um anzuzeigen,
dass Block „Y" wiederum gelöscht worden
ist. Es versteht sich, dass bei einer Ausführungsform eine Löschungszählung für „Y", die auf wirksame
Weise in einem Löschungszählungsblock
gespeichert wurde, aktualisiert werden kann.
-
In
Schritt 628 wird der Block mit der niedrigsten Löschungszählung in
der Tabelle für
die am häufigsten
gelöschten
Blöcke
identifiziert. Wie vorstehend beschrieben, werden bei einer Ausführungsform
Blöcke,
auf die in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wird, in Abhängigkeit
von ihren entsprechenden Löschungszählungen
sortiert. Das Sortieren der Blöcke
kann das Positionieren der Referenzen für die Blöcke innerhalb der Tabelle für die am
häufigsten
gelöschten Blöcke in Abhängigkeit
von den Löschungszählungen
der Blöcke
umfassen. Das Identifizieren des Blockes mit der niedrigsten Löschungszählung umfasst daher
generell das Zugreifen auf die Blockreferenz in der Position in
der Tabelle für
die am häufigsten
gelöschten
Blöcke,
die so angeordnet ist, dass sie die Blockreferenz mit der niedrigsten
Löschungszählung aufnimmt.
-
Wenn
der Block mit der niedrigsten Löschungszählung, auf
die in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wird, identifiziert ist, bewegt sich der Prozess
von Schritt 628 zu Schritt 632, in dem festgestellt
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
den in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wurde. Wenn festgestellt wird, dass die Löschungszählung von
Block „Y" nicht größer ist
als die Löschungszählung des
Blockes mit der niedrigsten Löschungszählung, auf
den in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wurde, folgt die Anzeige, dass Block „Y" nicht als häufig zu
löschen
angesehen wird. Daher rückt
das Verfahren von Schritt 632 zu Schritt 636 vor,
in dem Block „Y" in die Gruppe der
am wenigsten häufig
gelöschten
Blöcke
und wirksam in die Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
bewegt wird, d. h. ein Eingang entsprechend Block „Y" wird zu der Tabelle
für die
am wenigsten häufig
gelöschten
Blöcke
addiert. Es versteht sich, dass bei einer Ausführungsform das Bewegen von
Block „Y" in die Gruppe der
am wenigsten häufig
gelöschten
Blöcke
das Umsortieren von im wesentlich sämtlichen Blockreferenzen in
der Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
unter Verwendung der Löschungszählung eines
jeden Blockes umfassen kann. Nachdem Block „Y" wirksam in die Tabelle für die am
wenigsten häufig
gelöschten
Blöcke
bewegt worden ist, ist der Prozess des Austauschens oder Aktualisierens
der Blöcke
beendet.
-
Es
wird nunmehr wieder auf Schritt 632 Bezug genommen. Wenn
die Ermittlung in Schritt 632 ergibt, dass die Löschungszählung von
Block „Y" die niedrigste Löschungszählung, die
zur Tabelle für
die am häufigsten
gelöschten
Blöcke
gehört, übersteigt, erfolgt
die Anzeige, dass Block „Y" in die Gruppe der am
häufigsten
gelöschten
Blöcke
und wirksam in die Tabelle für
die am häufigsten
gelöschten
Blöcke
bewegt werden sollte. Damit für
die Bezugnahme von „Y" in der Tabelle für die am
häufigsten
gelöschten Blöcke Raum
vorhanden ist, muss ein Block, d. h. der Block mit der niedrigsten
Löschungszählung, auf
den in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wurde, wirksam aus der Tabelle für die am häufigsten gelöschten Blöcke entfernt
werden. In Schritt 640 wird der Block mit der niedrigsten
Löschungszählung, auf
den in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wurde, in die Gruppe der am wenigsten häufig gelöschten Blöcke und
wirksam in die Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
bewegt. Das Bewegen des Blockes in die Gruppe der am wenigsten häufig gelöschten Blöcke kann
das Resortieren der Blockreferenzen in der Tabelle für die am
wenigsten häufig
gelöschten
Blöcke
in Abhängigkeit
von der Löschungszählung eines
jeden Blockes umfassen.
-
Nachdem
der Block mit der niedrigsten Löschungszählung in
der Tabelle für
die am häufigsten gelöschten Blöcke auf
wirksame Weise aus der Tabelle für
die am häufigsten
gelöschten
Blöcke
entfernt worden ist, wird der Block „Y" in Schritt 644 wirksam in
die Tabelle für
die am häufigsten
gelöschten Blöcke bewegt.
Bei einer Ausführungsform
kann das Bewegen des Blockes „Y" in die Gruppe der
am häufigsten
gelöschten
Blöcke
und somit in die Tabelle für die
am häufigsten
gelöschten
Blöcke
das Resortieren der am häufigsten
gelöschten
Blöcke
gemäß der Löschungszählung eines
jeden Blockes einschließlich von
Block „Y" umfassen. Wenn Block „Y" wirksam in die Tabelle
für die
am häufigsten
gelöschten
Blöcke bewegt
worden ist, ist der Prozess des Austauschens oder Aktualisierens
der Blöcke
beendet.
-
Generell
wird die Funktionalität
für die
Aufrechterhaltung von Tabellen, die Handhabung von Initialisierungsanforderungen
und die Durchführung der
Verschleißnivellierung,
d. h. für
die Antwort auf Anforderungen zum Austauschen oder Aktualisieren von
Blöcken,
in Software, d. h. als Programmcodevorrichtungen, oder als Firmware
für ein
Wirtsystem zur Verfügung
gestellt. Eine Ausführungsform
einer geeigneten Systemarchitektur, die zur Software oder zur für ein Wirtsystem
vorgesehenen Firmware gehört
und eine Verschleißnivellierung
ermöglicht,
ist in 7 gezeigt. Eine Systemarchitektur 700 umfasst generell
eine Vielzahl von Modulen, die einen Anwendungsschnittstellenmodul 704,
einen Systemmanagermodul 708, einen Datenmanagermodul 712,
einen Datenintegritätsmanager 716 und
einen Vorrichtungsmanager- und Schnittstellenmodul 720 aufweisen
können,
jedoch hierauf nicht beschränkt
sind. Generell kann die Systemarchitektur 700 durch Verwendung
von Softwarecodevorrichtungen oder Firmware verwirklicht werden,
auf die ein Prozessor, d. h. der Prozessor 108 in 1a,
zugreifen kann.
-
Generell
kann der Anwendungsschnittstellenmodul 704 so angeordnet
sein, dass er mit dem Wirt, dem Betriebssystem oder dem Nutzer direkt kommuniziert.
Der Anwendungsschnittstellenmodul 704 steht ferner in Verbindung
mit dem Systemmanagermodul 708 und dem Datenmanagermodul 712. Wenn
der Nutzer einen Flash-Speicher auslesen, beschreiben oder formatieren
will, sendet er Anforderungen an das Betriebssystem, wobei die Anforderungen
zum Anwendungsschnittstellenmodul 704 geleitet werden.
Der Anwendungsschnittstellenmodul 704 leitet die Anforderungen
in Abhängigkeit
von den selben an den Systemmanagermodul 708 oder den Datenmanagermodul 712.
-
Der
Systemmanagermodul 708 besitzt einen Systeminitialisierungsuntermodul 724,
einen Löschungszählungsblockmanagementuntermodul 726 und
einen Strommanagementblockuntermodul 730. Der Systeminitialisierungsuntermodul 724 ist
generell so angeordnet, dass er die Bearbeitung einer Initialisierungsanforderung
ermöglicht,
und steht typischerweise mit dem Löschungszählungsblockmanagementuntermodul 726 in
Verbindung. Bei einer Ausführungsform
ermöglicht
der Systeminitialisierungsuntermodul 724 eine Aktualisierung
der Löschungszählungen
von Blöcken
und ist im wesentlichen verantwortlich für die Erzeugung einer Tabelle für die am
wenigsten häufig
gelöschten
Blöcke
und einer Tabelle für
die am häufigsten
gelöschten
Blöcke.
-
Der
Löschungszählungsblockmanagementuntermodul 726 besitzt
Funktionalität
zur Speicherung der Löschungszählungen
von Blöcken
und Funktionalität
zur Berechung und Aktualisierung einer durchschnittlichen Löschungszählung unter
Verwendung von individuellen Löschungszählungen.
Mit anderen Worten, der Löschungszählungsblockmanagementuntermodul 726 ermöglicht auf
wirksame Weise die Aufrechterhaltung einer durchschnittlichen Löschungszählung. Ferner
synchronisiert bei einer Ausführungsform
der Löschungszählungsblockmanagementuntermodul 726 im
wesentlichen die Löschungszählung von
im wesentlichen sämtlichen Blöcken in
einem Löschungszählungsblock
während des
Einschaltens eines Gesamtsystems. Während der Löschungszählungsblockmanagementuntermodul 726 so
angeordnet sein kann, dass er die Speicherung einer durch schnittlichen
Löschungszählung in
einem Löschungszählungsblock
bewirkt, versteht es sich, dass stattdessen der Strommanagementblockuntermodul 730 dazu
verwendet werden kann, um die Speicherung der durchschnittlichen
Löschungszählung zu
ermöglichen.
-
Zusätzlich dazu,
dass er in Verbindung mit dem Anwendungsschnittstellenmodul 704 steht, steht
der Systemmanagermodul 708 auch in Verbindung mit dem Datenmanagermodul 712 sowie
mit dem Vorrichtungsmanager- und Schnittstellenmodul 720.
Der Datenmanagermodul 712, der sowohl mit dem Systemmanagermodul 708 als
auch mit dem Anwendungsschnittstellenmodul 704 kommuniziert, kann
Funktionalität
besitzen, um für
ein Seiten- oder Blockmapping zu sorgen. Der Datenmanagermodul 712 kann
auch Funktionalität
aufweisen, die mit dem Betriebssystem und Datei-System-Schnittstellenschichten
assoziiert ist.
-
Der
Vorrichtungsmanager- und Schnittstellenmodul 720, der mit
dem Systemmanagermodul 708, dem Datenmanager 712 und
dem Datenintegritätsmanager 716 in
Verbindung steht, sieht typischerweise eine Flash-Speicher-Schnittstelle
vor und besitzt Funktionalität,
die mit Hardwareabstraktionen assoziiert ist, d. h. eine I/O-Schnittstelle.
Der Datenintegritätsmanagermodul 716 stellt
neben anderen Funktionen eine ECC-Handhabung zur Verfügung.
-
Obwohl
nur einige Ausführungsformen
der vorliegenden Erfindung beschrieben wurden, versteht es sich,
dass die vorliegende Erfindung auch in vielen anderen speziellen
Ausführungsformen
verwirklicht werden kann, ohne den Umfang der vorliegenden Erfindung,
der durch die Patentansprüche definiert
ist, zu verlassen. Beispielsweise können anstelle der Übertragung
von Blöcken
auf eine Tabelle für
die am häufigsten
gelöschten
Blöcke
und eine Tabelle für
die am wenigsten häufig
gelöschten
Blöcke auf
der Basis eines Vergleiches eines jeden Blockes mit einer durchschnittlichen
Löschungszählung stattdessen
Blöcke
auf eine Tabelle für
am häufigsten
gelöschte
Blöcke
und eine Tabelle für
am wenigsten häufig
gelöschte
Blöcke
auf der Basis einer im wesentlichen absoluten Bestimmung, welche
Blöcke
die höchsten
Löschungszählungen
und welche Blöcke die
niedrigsten Löschungszählungen
besitzen, übertragen
werden. Mit anderen Worten, anstatt einzelne Blocklöschungszählungen
mit einer durchschnittlichen Löschungszählung zu
vergleichen, können Blocklöschungszählungen
wirksam miteinander verglichen werden, um eine geeignete Tabelle
zu bestimmen, in die ein Block einzusetzen ist.
-
Eine
Tabelle für
am wenigsten häufig
gelöschte
Blöcke
wurde generell als Haltereferenzen für Blöcke mit einer relativ niedrigen
Löschungszählung, wie
Ersatzblöcke,
beschrieben. Ersatzblöcke werden
durch die Verwendung einer Blockmappingtabelle wirksam einer Verwendung
zugeführt,
so dass im wesentlichen jedes Mal dann, wenn ein Ersatzblock benötigt wird,
der Block mit der niedrigsten Löschungszählung, auf
den in der Tabelle für
die am wenigsten häufig
gelöschten
Blöcke
Bezug genommen wird, zur Verwendung vorgesehen wird. Mit anderen
Worten, wenn ein in einer Blockmappingtabelle identifizierter Block
ausgetauscht werden soll, wird eine Referenz auf den Block mit der
niedrigsten Löschungszählung in
der Gruppe der am wenigsten häufig
gelöschten
Blöcke
in die Blockmappingtabelle bewegt. Es versteht sich jedoch, dass
im wesentlichen jeder Block generell aus der Gruppe der am wenigsten
häufig
gelöschten
Blöcke
während
eines Blockaustausch- oder Aktualisierungsprozesses genommen werden
kann. Das Auswählen
von im wesentlichen jedem Block aus den am wenigsten häufig gelöschten Blöcken unter
Verwendung der Tabelle für die
am wenigsten häufig
gelöschten
Blöcke
zur Bewegung in die Blockmappingtabelle kann den mit einem Gesamtsystem
assoziierten Overhead reduzieren, da die Blöcke in der Tabelle für die am
wenigsten häufig
gelöschten
Blöcke
nicht notwendigerweise sortiert werden müssen.
-
Durch
das Identifizieren und Bearbeiten von statischen Blöcken wird
generell die Fähigkeit
erhöht, dass
Blöcke
in einem Gesamtspeichersystem gleichmäßig verschlissen werden können. Bei
einer Ausführungsform
werden jedoch statische Blöcke
nicht notwendigerweise identifiziert und bearbeitet. Wenn beispielsweise
eine relativ niedrige Zahl von statischen Blöcken in einem System antizipiert
wird, kann die Identifizierung und Bearbeitung von statischen Blöcken im
wesentlichen eliminiert werden, ohne den Umfang der vorliegenden
Erfindung, wie in den Patentansprüchen definiert ist, zu verlassen.
-
Während beschrieben
wurde, dass nichtflüchtige
Speichersysteme durch assoziierte Speichersteuereinheiten oder unter
Verwendung von Software oder Firmware, die zu einem Wirtsystem gehören, gesteuert
werden, versteht es sich, dass Verschleißnivellierungsprozesse, die
ein Löschungszählungsmanagement
beinhalten, auch bei nichtflüchtigen
Speichersystemen Anwendung finden können, die in Verbindung mit Steuereinheiten
stehen, die im wesentlichen extern für die nichtflüchtigen Speichersysteme
sind. Geeignete Speichersysteme, die die Steuereinheiten verwenden,
sind PC-Karten, Compact-Flash-Karten, Multimediakarten, Sicherheitsdigitalkarten
und eingebettete Chipsätze,
die Flash-Speicher und eine Flash-Speichersteuereinheit umfassen,
sind jedoch hierauf nicht beschränkt. Speichersysteme,
die durch die Verwendung von Software oder Firmware, mit denen ein
Wirtsystem beschickt ist, gesteuert werden, umfassen eingebettete
Speichervorrichtungen. Bei einer Ausführungsform können Speichersysteme,
die die vorstehend beschriebenen Löschungsmanagementtechniken verwenden
können
und keine Steuereinheiten nutzen, die zu den Speichersystemen gehören, Steuereinheiten
verwenden, die zu einem Wirt, d. h. einem Wirtcomputersystem, gehören, um
eine Verschleißnivellierung
zu realisieren. Mit anderen Worten, ein Wirt kann direkt einen Speicher
adressieren und managen, in dem eine Verschleißnivellierung durchgeführt werden
soll, und zwar durch die Verwendung einer Steuereinheit für den Wirt.
-
Generell
können
die Schritte der verschiedenen Verfahren und Prozesse zur Verschleißnivellierung
stark variieren. Es können
Schritte hinzugefügt werden,
entfernt werden, verändert
werden und neu befohlen werden, ohne den Umfang der vorliegenden Erfindung,
der durch die Patentansprüche
definiert ist, zu verlassen. Beispielsweise muss das Bearbeiten
von statischen Blöcken
nicht unbedingt in der Bearbeitung einer Initialisierungsanforderung
eingeschlossen sein. Auch kann bei einer Ausführungsform die Bestimmung,
ob auf wirksame Weise ein neu gelöschter Block in einer Tabelle
für am
häufigsten
gelöschte
Blöcke
angeordnet wird, auf anderen Kriterien basieren als darauf, ob der
gelöschte
Block eine Löschungszählung besitzt,
die größer ist
als die niedrigste Löschungszählung, die
zur Tabelle für
die am häufigsten
gelöschten
Blöcke
gehört.
Beispielsweise kann eine derartige Bestimmung darauf basieren, ob
die Löschungszählung des
gelöschten
Blockes eine durchschnittliche Löschungszählung von im
wesentlichen sämtlichen
Blöcken,
die zur Tabelle für
die am häufigsten
gelöschten
Blöcke
gehören,
um einen bestimmten Prozentsatz, d. h. etwa 20%, übersteigt.
Wenn die Löschungszählung des
gelöschten Blockes
die durchschnittliche Löschungszählung um mehr
als den bestimmten Prozentsatz übersteigt, kann
der Block mit der niedrigsten Löschungszählung, auf
den in der Tabelle für
die am häufigsten
gelöschten
Blöcke
Bezug genommen wird, in eine Tabelle für am wenigsten häufig gelöschte Blöcke bewegt
werden, während
der gelöschte
Block in die Tabelle für
am häufigsten
gelöschte
Blöcke
bewegt wird. Daher sind die vorliegenden Ausführungsbeispiele lediglich beispielhafter
Art und nicht einschränkend,
und ist die Erfindung nicht auf die hier wiedergegebenen Einzelheiten
beschränkt,
sondern kann innerhalb des Umfanges der beigefügten Patentansprüche modifiziert
werden.