DE60317551T2 - Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem - Google Patents

Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem Download PDF

Info

Publication number
DE60317551T2
DE60317551T2 DE60317551T DE60317551T DE60317551T2 DE 60317551 T2 DE60317551 T2 DE 60317551T2 DE 60317551 T DE60317551 T DE 60317551T DE 60317551 T DE60317551 T DE 60317551T DE 60317551 T2 DE60317551 T2 DE 60317551T2
Authority
DE
Germany
Prior art keywords
block
blocks
count
erase count
erase
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE60317551T
Other languages
English (en)
Other versions
DE60317551D1 (de
Inventor
Robert Danville CHANG
Bahman San Joe QAWAMI
Farshid Los Altos Hills SABET-SHARGHI
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Corp
Original Assignee
SanDisk Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SanDisk Corp filed Critical SanDisk Corp
Application granted granted Critical
Publication of DE60317551D1 publication Critical patent/DE60317551D1/de
Publication of DE60317551T2 publication Critical patent/DE60317551T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • G11C16/3495Circuits or methods to detect or delay wearout of nonvolatile EPROM or EEPROM memory devices, e.g. by counting numbers of erase or reprogram cycles, by using multiple memory areas serially or cyclically
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7211Wear leveling

Description

  • 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.

Claims (18)

  1. Nichtflüchtiges Speichersystem mit einem nichtflüchtigen Speicher (460), der eine Vielzahl von Blöcken (465) aufweist, wobei jeder Block (465) einen redundanten Bereich zum Speichern von Overhead-Daten, die eine Löschungszählung für den Block enthalten, besitzt; und einem Systemspeicher (454) mit einer nichtflüchtigen Speicherstelle (474) 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; gekennzeichnet durch Einrichtungen (708, 720, 726), die das Speichern des Indikators in den redundanten Bereich von mindestens einem Block als die Löschungszählung für diesen Block in Abhängigkeit davon, dass der min destens eine Block ein gelöschter Block ist, für den die Löschungszählung nicht zur Verfügung steht, bewirken.
  2. System nach Anspruch 1, bei dem der Systemspeicher des weiteren einen Löschungszählungsblock (480) zum Speichern eines Löschungszählungsindikators für jeden der Vielzahl der Blöcke umfasst.
  3. System nach Anspruch 1, bei dem der nichtflüchtige Speicher (460) ein NAND-Flashspeicher ist.
  4. System nach Anspruch 1, dadurch gekennzeichnet, dass der Systemspeicher des weiteren eine nichtflüchtige Speicherstelle für einen zweiten Indikator aufweist, der eine Gesamtzahl von Blöcken, die in der Vielzahl der Blöcke enthalten ist, anzeigt.
  5. System nach Anspruch 1, bei dem der Systemspeicher des weiteren einen Header (820) umfasst, der den ersten Indikator (850b) enthält.
  6. System nach Anspruch 1, bei dem jeder der Vielzahl der Blöcke des nichtflüchtigen Speichers als Vielzahl von Seiten (204) angeordnet ist, wobei jede Seite (204) einen Datenbereich und einen Abschnitt (206) des redundanten Bereiches des Blocks umfasst und der Abschnitt (206) des redundanten Bereiches einer jeden Seite die Löschungszählung (214) für den Block speichert.
  7. System nach Anspruch 1, dadurch gekennzeichnet, dass es des weiteren umfasst: Einrichtungen (708, 720, 726) zum Erhalten einer Löschungszählung für jeden Block der Anzahl der Blöcke, wobei die Löschungszählung für jeden Block aus der Anzahl der Blöcke so angeordnet ist, dass eine Anzahl von Zeiten angezeigt wird, zu denen jeder Block aus der Anzahl der Blöcke gelöscht worden ist; Einrichtungen (726) zum Erzeugen einer Summe der Löschungszählungen für die Anzahl der Blöcke; und Einrichtungen (726) zum Ausbilden des Indikators als Durchschnittslöschungszählungsindikator, der die durchschnittliche Anzahl der Zeiten anzeigt, zu denen jeder Block aus der Anzahl der Blöcke gelöscht worden ist, wobei die Einrichtungen zum Ausbilden des Indikators Einrichtungen zum Teilen der Summe durch die Anzahl der Blöcke enthalten; Einrichtungen (726), die das Speichern des Durchschnittslöschungszählungsindikators im nichtflüchtigen Teil des Systemspeichers bewirken.
  8. System nach Anspruch 7, bei dem die Einrichtungen zum Erhalten einer Löschungszählung Codevorrichtungen umfassen, die eine Löschungszählung für jeden Block aus der Anzahl der Blöcke erhalten, wobei die Anzahl der Blöcke der Gesamtzahl der nutzbaren Blö cke innerhalb des nichtflüchtigen Speichers entspricht; die Einrichtungen zum Erzeugen einer Summe aus den Löschungszählungen Codevorrichtungen umfassen, die eine Summe der Löschungszählungen erzeugen; und die Einrichtungen zum Ausbilden des Durchschnittslöschungszählungsindikators Codevorrichtungen aufweisen, die die Durchschnittslöschungszählung erzeugen.
  9. System nach Anspruch 1 oder 7, dadurch gekennzeichnet, dass ferner der Systemspeicher zum Speichern eines Löschungszählungsindikators entsprechend einem jeden Block aus der Vielzahl der Blöcke dient, wobei der Löschungszählungsindikator die Anzahl der Zeiten charakterisiert, zu denen sein entsprechender Block gelöscht worden ist; das System Einrichtungen (708, 720) zum Erhalten eines gelöschten Blocks aus der Vielzahl der nutzbaren Blöcke; Einrichtungen (726) zum Erhalten des Löschungszählungsindikators vom Systemspeicher; und Einrichtungen (708, 720) aufweist, die das Speichern des Löschungszählungsindikators im redundan ten Bereich des gelöschten Blocks als Löschungszählung für diesen Block in Abhängigkeit vom zur Verfügung stehenden Löschungszählungsindikator bewirken.
  10. System nach Anspruch 9, bei dem die Einrichtungen zum Erhalten eines gelöschten Blocks Codevorrichtungen umfassen, die den gelöschten Block erhalten; wobei die Einrichtungen zum Erhalten des Löschungszählungsindikators vom Systemspeicher Codevorrichtungen aufweisen, die den Durchschnittslöschungszählungsindikator vom Systemspeicher in Abhängigkeit davon, dass der Löschungszählungsindikator für einen Block nicht zur Verfügung steht, erhalten; und wobei die Einrichtungen zum Bewirken der Speicherung des Löschungszählungsindikators Codevorrichtungen umfassen, die den Durchschnittslöschungszählungsindikator im redundanten Bereich des gelöschten Blocks in Abhängigkeit davon, dass der mindestens eine Block ein gelöschter Block ist, für den die Löschungszählung nicht zur Verfügung steht, speichern.
  11. System nach Anspruch 9, bei dem die Vielzahl der Blöcke eine Vielzahl von nutzbaren Blöcken ist.
  12. Verfahren zum Managen eines nichtflüchtigen Speichers eines Speichersystems gemäß einer durch schnittlichen Anzahl von Zeiten, zu denen jeder Block im nichtflüchtigen Speicher gelöscht worden ist, mit den folgenden Schritten: Erhalten (1304) einer Löschungszählung von einem redundanten Bereich eines jeden Blocks aus einer Vielzahl von nutzbaren Blöcken innerhalb des nichtflüchtigen Speichers; Erzeugen (1308) einer Summe der Löschungszählungen für die Vielzahl von nutzbaren Blöcken; Erzeugen (1312) 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 (1024) 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, dass 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.
  13. Verfahren nach Anspruch 12, bei dem der nichtflüchtige Speicher ein NAND-Flashspeicher ist.
  14. Verfahren nach Anspruch 12, das des weiteren das Initialisieren (1016) des Indikators der Durchschnittslöschungszählung in Abhängigkeit von einer Initialisierungsanforderung im Speichersystem umfasst.
  15. Verfahren nach Anspruch 14, bei dem das Initialisieren des Indikators der Durchschnittslöschungszählung das Speichern eines Indikators, der anzeigt, dass die Durchschnittslöschungszählung einen Wert von etwa Null besitzt, umfasst.
  16. Verfahren nach Anspruch 12, das des weiteren das Aktualisieren (1128, 1132) des Indikators der Durchschnittslöschungszählung nach einem ersten Fall des Speicherschrittes umfasst.
  17. Verfahren nach Anspruch 16, bei dem der Aktualisierungsschritt folgende Schritte umfasst: Erzeugen (1128) einer aktualisierten Durchschnittslöschungszählung durch Erzeugen einer Summe von aktualisierten Löschungszählungen, die einem jeden Block aus der Vielzahl der nutzbaren Blöcke zugeordnet sind, und Teilen der Summe der aktualisierten Löschungszählungen durch die Anzahl der nutzbaren Blöcke; und Speichern (1132) eines Indikators der aktualisierten Durchschnittslöschungszählung im nichtflüchtigen Teil des Systemspeichers.
  18. Verfahren nach Anspruch 12, dadurch gekennzeichnet, dass es des Weiteren das Speichern der Blocklöschungszählung im gelöschten Block in Abhängigkeit von der Feststellung, dass die Blocklöschungszählung zur Verfügung steht, umfasst.
DE60317551T 2002-10-28 2003-09-10 Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem Expired - Fee Related DE60317551T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/281,823 US7035967B2 (en) 2002-10-28 2002-10-28 Maintaining an average erase count in a non-volatile storage system
US281823 2002-10-28
PCT/US2003/028215 WO2004040584A1 (en) 2002-10-28 2003-09-10 Maintaining an average erase count in a non-volatile storage system

Publications (2)

Publication Number Publication Date
DE60317551D1 DE60317551D1 (de) 2007-12-27
DE60317551T2 true DE60317551T2 (de) 2008-09-18

Family

ID=32228776

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60317551T Expired - Fee Related DE60317551T2 (de) 2002-10-28 2003-09-10 Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem

Country Status (10)

Country Link
US (2) US7035967B2 (de)
EP (1) EP1559112B1 (de)
JP (1) JP4758648B2 (de)
KR (1) KR20050067203A (de)
CN (1) CN1701389A (de)
AT (1) ATE378684T1 (de)
AU (1) AU2003270449A1 (de)
DE (1) DE60317551T2 (de)
TW (1) TWI247292B (de)
WO (1) WO2004040584A1 (de)

Families Citing this family (150)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004040586A1 (en) * 2002-10-28 2004-05-13 Sandisk Corporation Automated wear leveling in non-volatile storage systems
US7328301B2 (en) * 2003-04-07 2008-02-05 Intel Corporation Dynamically mapping block-alterable memories
US20050055495A1 (en) * 2003-09-05 2005-03-10 Nokia Corporation Memory wear leveling
US7559004B1 (en) * 2003-10-01 2009-07-07 Sandisk Corporation Dynamic redundant area configuration in a non-volatile memory system
US20050114588A1 (en) * 2003-11-26 2005-05-26 Lucker Jonathan C. Method and apparatus to improve memory performance
US20050132128A1 (en) * 2003-12-15 2005-06-16 Jin-Yub Lee Flash memory device and flash memory system including buffer memory
KR100568115B1 (ko) 2004-06-30 2006-04-05 삼성전자주식회사 점진적 머지 방법 및 그것을 이용한 메모리 시스템
JP4527456B2 (ja) * 2004-07-06 2010-08-18 Necインフロンティア株式会社 メモリ寿命警告装置、および情報処理方法
US7441067B2 (en) 2004-11-15 2008-10-21 Sandisk Corporation Cyclic flash memory wear leveling
US7363421B2 (en) * 2005-01-13 2008-04-22 Stmicroelectronics S.R.L. Optimizing write/erase operations in memory devices
US7315917B2 (en) 2005-01-20 2008-01-01 Sandisk Corporation Scheduling of housekeeping operations in flash memory systems
US7984084B2 (en) * 2005-08-03 2011-07-19 SanDisk Technologies, Inc. Non-volatile memory with scheduled reclaim operations
US7558906B2 (en) * 2005-08-03 2009-07-07 Sandisk Corporation Methods of managing blocks in nonvolatile memory
US7552271B2 (en) * 2005-08-03 2009-06-23 Sandisk Corporation Nonvolatile memory with block management
US20070174549A1 (en) * 2006-01-24 2007-07-26 Yevgen Gyl Method for utilizing a memory interface to control partitioning of a memory module
US20070208904A1 (en) * 2006-03-03 2007-09-06 Wu-Han Hsieh Wear leveling method and apparatus for nonvolatile memory
GB0606639D0 (en) 2006-04-01 2006-05-10 Ibm Non-disruptive file system element reconfiguration on disk expansion
FR2899716A1 (fr) * 2006-04-07 2007-10-12 St Microelectronics Sa Procede de securisation de blocs de donnees dans une memoire programmable electriquement
US7778077B2 (en) * 2006-05-15 2010-08-17 Sandisk Corporation Non-volatile memory system with end of life calculation
US7971071B2 (en) * 2006-05-24 2011-06-28 Walkoe Wilbur J Integrated delivery and protection device for digital objects
JP4645538B2 (ja) * 2006-06-29 2011-03-09 ソニー株式会社 記録装置および寿命情報算出方法
US7536500B2 (en) * 2006-09-29 2009-05-19 Intel Corporation Header blocks for flash memory writes
US20080091901A1 (en) * 2006-10-12 2008-04-17 Alan David Bennett Method for non-volatile memory with worst-case control data management
US20080091871A1 (en) * 2006-10-12 2008-04-17 Alan David Bennett Non-volatile memory with worst-case control data management
US8079071B2 (en) 2006-11-14 2011-12-13 SanDisk Technologies, Inc. Methods for accessing content based on a session ticket
CN101578587B (zh) * 2006-11-24 2015-02-25 Lsi公司 延迟缩减存储器寿命的操作
US7747813B2 (en) * 2006-11-24 2010-06-29 Sandforce, Inc. Multi-memory device system and method for managing a lifetime thereof
US7904619B2 (en) 2006-11-24 2011-03-08 Sandforce, Inc. System, method, and computer program product for reducing memory write operations using difference information
US7809900B2 (en) * 2006-11-24 2010-10-05 Sandforce, Inc. System, method, and computer program product for delaying an operation that reduces a lifetime of memory
US20080126685A1 (en) * 2006-11-24 2008-05-29 Radoslav Danilak System, method, and computer program product for reducing memory write operations using an instruction set
US7904764B2 (en) * 2006-11-24 2011-03-08 Sandforce, Inc. Memory lifetime gauging system, method and computer program product
US7904672B2 (en) 2006-12-08 2011-03-08 Sandforce, Inc. System and method for providing data redundancy after reducing memory writes
US8090980B2 (en) * 2006-12-08 2012-01-03 Sandforce, Inc. System, method, and computer program product for providing data redundancy in a plurality of storage devices
US9153337B2 (en) 2006-12-11 2015-10-06 Marvell World Trade Ltd. Fatigue management system and method for hybrid nonvolatile solid state memory system
US7710777B1 (en) * 2006-12-20 2010-05-04 Marvell International Ltd. Semi-volatile NAND flash memory
KR100817204B1 (ko) * 2006-12-22 2008-03-27 재단법인서울대학교산학협력재단 플래시 메모리의 매핑 방법 및 장치
KR101087308B1 (ko) * 2006-12-27 2011-11-25 인텔 코오퍼레이션 비휘발성 메모리에 대한 초기 웨어 레벨링
ATE517372T1 (de) * 2007-01-24 2011-08-15 Oce Tech Bv Bilderzeugungsvorrichtung mit funktion zum zählen der von der vorrichtung angezeigten bilder
JP5134255B2 (ja) * 2007-01-30 2013-01-30 富士通株式会社 データ記録システム
US7925151B2 (en) * 2007-01-31 2011-04-12 Kobre Kenneth R Device for redirecting and reflecting light from camera flash and methods for using same
US7731365B2 (en) * 2007-03-19 2010-06-08 Johnson&Johnson Vision Care, Inc. Method of fitting contact lenses
US7689762B2 (en) * 2007-05-03 2010-03-30 Atmel Corporation Storage device wear leveling
US7743203B2 (en) * 2007-05-11 2010-06-22 Spansion Llc Managing flash memory based upon usage history
US20080294813A1 (en) * 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Managing Housekeeping Operations in Flash Memory
US20080294814A1 (en) * 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Flash Memory System with Management of Housekeeping Operations
KR100857761B1 (ko) * 2007-06-14 2008-09-10 삼성전자주식회사 웨어 레벨링을 수행하는 메모리 시스템 및 그것의 쓰기방법
KR101413736B1 (ko) * 2007-09-13 2014-07-02 삼성전자주식회사 향상된 신뢰성을 갖는 메모리 시스템 및 그것의웨어-레벨링 기법
TW200919448A (en) * 2007-10-17 2009-05-01 Silicon Motion Inc Storage device and method of accessing a status thereof
US7916543B2 (en) 2007-10-22 2011-03-29 Micron Technology, Inc. Memory cell operation
US8296498B2 (en) * 2007-11-13 2012-10-23 Sandisk Technologies Inc. Method and system for virtual fast access non-volatile RAM
TWM332248U (en) * 2007-11-16 2008-05-11 Carry Technology Co Ltd Display apparatus for phonic recording and playing electronically digital picture
US7903486B2 (en) * 2007-11-19 2011-03-08 Sandforce, Inc. System, method, and computer program product for increasing a lifetime of a plurality of blocks of memory
US7849275B2 (en) 2007-11-19 2010-12-07 Sandforce, Inc. System, method and a computer program product for writing data to different storage devices based on write frequency
US9183133B2 (en) * 2007-11-28 2015-11-10 Seagate Technology Llc System, method, and computer program product for increasing spare space in memory to extend a lifetime of the memory
JP4461170B2 (ja) * 2007-12-28 2010-05-12 株式会社東芝 メモリシステム
TWI354996B (en) 2007-12-31 2011-12-21 Phison Electronics Corp Wear leveling method and controller thereof
CN101499315B (zh) * 2008-01-30 2011-11-23 群联电子股份有限公司 快闪存储器平均磨损方法及其控制器
US7925822B2 (en) * 2008-01-31 2011-04-12 Sandisk Il Ltd Erase count recovery
JP2009266349A (ja) 2008-04-28 2009-11-12 Toshiba Corp 不揮発性半導体記憶装置
JP2009271848A (ja) * 2008-05-09 2009-11-19 Fujitsu Microelectronics Ltd ファイルシステム及びデータ管理方法
US7924623B2 (en) 2008-05-27 2011-04-12 Micron Technology, Inc. Method for memory cell erasure with a programming monitor of reference cells
WO2009145923A1 (en) * 2008-05-30 2009-12-03 Aplus Flash Technology, Inc. Nand string based flash memory device, array and circuit having parallel bit lines and source lines
US8120959B2 (en) * 2008-05-30 2012-02-21 Aplus Flash Technology, Inc. NAND string based NAND/NOR flash memory cell, array, and memory device having parallel bit lines and source lines, having a programmable select gating transistor, and circuits and methods for operating same
US20100017566A1 (en) * 2008-07-15 2010-01-21 Radoslav Danilak System, method, and computer program product for interfacing computing device hardware of a computing device and an operating system utilizing a virtualization layer
US20100017588A1 (en) * 2008-07-15 2010-01-21 Radoslav Danilak System, method, and computer program product for providing an extended capability to a system
TWI385669B (zh) * 2008-07-23 2013-02-11 Phison Electronics Corp 用於快閃記憶體的平均磨損方法、儲存系統與控制器
US20100064093A1 (en) * 2008-09-09 2010-03-11 Radoslav Danilak System, method, and computer program product for converting data in a binary representation to a non-power of two representation
CN101354681B (zh) * 2008-09-23 2010-12-01 美商威睿电通公司 存储器系统、非易失性存储器的磨损均衡方法及装置
TWI470428B (zh) * 2008-10-03 2015-01-21 Phison Electronics Corp 用於非揮發性記憶體的資料程式規劃系統、記憶體管理方法及其控制器
US8001318B1 (en) * 2008-10-28 2011-08-16 Netapp, Inc. Wear leveling for low-wear areas of low-latency random read memory
KR101548175B1 (ko) * 2008-11-05 2015-08-28 삼성전자주식회사 싱글 레벨 메모리 셀 블락과 멀티 레벨 메모리 셀 블락을 포함하는 불휘발성 메모리 장치의 마모 레벨링 방법
US9063874B2 (en) * 2008-11-10 2015-06-23 SanDisk Technologies, Inc. Apparatus, system, and method for wear management
US8825940B1 (en) 2008-12-02 2014-09-02 Siliconsystems, Inc. Architecture for optimizing execution of storage access commands
US20100146236A1 (en) * 2008-12-08 2010-06-10 Radoslav Danilak System, method, and computer program product for rendering at least a portion of data useless in immediate response to a delete command
WO2010076829A1 (en) 2008-12-30 2010-07-08 Massimo Iaculo Wear leveling for erasable memories
KR101033465B1 (ko) * 2008-12-30 2011-05-09 주식회사 하이닉스반도체 플래쉬 메모리 장치 및 및 이를 위한 리드동작 제어 방법
US8040744B2 (en) 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8700840B2 (en) 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8244960B2 (en) 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8094500B2 (en) 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US9176859B2 (en) * 2009-01-07 2015-11-03 Siliconsystems, Inc. Systems and methods for improving the performance of non-volatile memory operations
US8120966B2 (en) * 2009-02-05 2012-02-21 Aplus Flash Technology, Inc. Method and apparatus for management of over-erasure in NAND-based NOR-type flash memory
TWI409819B (zh) * 2009-03-03 2013-09-21 Silicon Motion Inc 平均地使用一快閃記憶體的複數個區塊之方法以及相關之記憶裝置及其控制器
US10079048B2 (en) * 2009-03-24 2018-09-18 Western Digital Technologies, Inc. Adjusting access of non-volatile semiconductor memory based on access time
US8090905B2 (en) * 2009-03-27 2012-01-03 Sandforce, Inc. System, method, and computer program product for converting logical block address de-allocation information in a first format to a second format
US8230159B2 (en) 2009-03-27 2012-07-24 Lsi Corporation System, method, and computer program product for sending logical block address de-allocation status information
US20100250830A1 (en) * 2009-03-27 2010-09-30 Ross John Stenfort System, method, and computer program product for hardening data stored on a solid state disk
US8671258B2 (en) 2009-03-27 2014-03-11 Lsi Corporation Storage system logical block address de-allocation management
US8166258B2 (en) * 2009-07-24 2012-04-24 Lsi Corporation Skip operations for solid state disks
US8516264B2 (en) * 2009-10-09 2013-08-20 Lsi Corporation Interlocking plain text passwords to data encryption keys
US9063561B2 (en) * 2009-05-06 2015-06-23 Avago Technologies General Ip (Singapore) Pte. Ltd. Direct memory access for loopback transfers in a media controller architecture
US20100306451A1 (en) * 2009-06-01 2010-12-02 Joshua Johnson Architecture for nand flash constraint enforcement
US8219776B2 (en) * 2009-09-23 2012-07-10 Lsi Corporation Logical-to-physical address translation for solid state disks
US8321639B2 (en) * 2009-12-30 2012-11-27 Lsi Corporation Command tracking for direct access block storage devices
US8555141B2 (en) * 2009-06-04 2013-10-08 Lsi Corporation Flash memory organization
US8245112B2 (en) * 2009-06-04 2012-08-14 Lsi Corporation Flash memory organization
US8051241B2 (en) * 2009-05-07 2011-11-01 Seagate Technology Llc Wear leveling technique for storage devices
US8250282B2 (en) * 2009-05-14 2012-08-21 Micron Technology, Inc. PCM memories for storage bus interfaces
US20110004718A1 (en) * 2009-07-02 2011-01-06 Ross John Stenfort System, method, and computer program product for ordering a plurality of write commands associated with a storage device
US9792074B2 (en) * 2009-07-06 2017-10-17 Seagate Technology Llc System, method, and computer program product for interfacing one or more storage devices with a plurality of bridge chips
US8140712B2 (en) * 2009-07-17 2012-03-20 Sandforce, Inc. System, method, and computer program product for inserting a gap in information sent from a drive to a host device
US8516166B2 (en) * 2009-07-20 2013-08-20 Lsi Corporation System, method, and computer program product for reducing a rate of data transfer to at least a portion of memory
US8447915B2 (en) * 2009-07-23 2013-05-21 Hitachi, Ltd. Flash memory device for allocating physical blocks to logical blocks based on an erase count
US8108737B2 (en) * 2009-10-05 2012-01-31 Sandforce, Inc. System, method, and computer program product for sending failure information from a serial ATA (SATA) solid state drive (SSD) to a host device
TWI436369B (zh) * 2009-11-13 2014-05-01 Silicon Motion Inc 記憶裝置之使用壽命量測方法及系統內編程碼置換方法、及其資料儲存系統
JP4912456B2 (ja) * 2009-12-17 2012-04-11 株式会社日立製作所 ストレージ装置及びその制御方法
US8856488B2 (en) * 2010-02-11 2014-10-07 Memory Technologies Llc Method for utilizing a memory interface to control partitioning of a memory module
CN102201259A (zh) * 2010-03-24 2011-09-28 建兴电子科技股份有限公司 非易失性存储器的平均抹写方法
US9104546B2 (en) * 2010-05-24 2015-08-11 Silicon Motion Inc. Method for performing block management using dynamic threshold, and associated memory device and controller thereof
CN102543177B (zh) * 2010-12-17 2016-01-06 西安奇维测控科技有限公司 一种固态盘静态磨损平衡算法
CN102592676A (zh) * 2011-01-17 2012-07-18 上海华虹集成电路有限责任公司 一种可回收使用的Nandflash存储系统
US8874872B2 (en) 2011-01-21 2014-10-28 Seagate Technology Llc Garbage collection management in memories
US10049040B2 (en) 2011-01-21 2018-08-14 Seagate Technology Llc Just in time garbage collection
CN102637145B (zh) * 2011-02-11 2015-06-17 慧荣科技股份有限公司 用来进行区块管理的方法、记忆装置及其控制器
US8947941B2 (en) * 2012-02-09 2015-02-03 Densbits Technologies Ltd. State responsive operations relating to flash memory cells
US9116792B2 (en) * 2012-05-18 2015-08-25 Silicon Motion, Inc. Data storage device and method for flash block management
US9251019B2 (en) 2012-05-29 2016-02-02 SanDisk Technologies, Inc. Apparatus, system and method for managing solid-state retirement
US8930612B2 (en) * 2012-05-31 2015-01-06 Seagate Technology Llc Background deduplication of data sets in a memory
JP2013254357A (ja) * 2012-06-07 2013-12-19 Sony Corp 情報処理装置および方法、並びにプログラム
US8898405B2 (en) * 2012-06-12 2014-11-25 Storart Technology Co. Ltd Method for static wear leveling in non-violate storage device
US8750045B2 (en) 2012-07-27 2014-06-10 Sandisk Technologies Inc. Experience count dependent program algorithm for flash memory
CN102866863B (zh) * 2012-08-23 2016-09-21 深圳Tcl新技术有限公司 嵌入式多媒体卡数据迁移方法、系统层和嵌入式设备
CN102880556B (zh) * 2012-09-12 2015-05-20 浙江大学 一种实现Nand Flash磨损均衡的方法及其系统
US9013922B2 (en) * 2012-09-20 2015-04-21 Silicon Motion, Inc. Data storage device and flash memory control method thereof
US9430339B1 (en) 2012-12-27 2016-08-30 Marvell International Ltd. Method and apparatus for using wear-out blocks in nonvolatile memory
US9292451B2 (en) 2013-02-19 2016-03-22 Qualcomm Incorporated Methods and apparatus for intra-set wear-leveling for memories with limited write endurance
US9348743B2 (en) 2013-02-21 2016-05-24 Qualcomm Incorporated Inter-set wear-leveling for caches with limited write endurance
US9153331B2 (en) * 2013-03-13 2015-10-06 Sandisk Technologies Inc. Tracking cell erase counts of non-volatile memory
US9117533B2 (en) 2013-03-13 2015-08-25 Sandisk Technologies Inc. Tracking erase operations to regions of non-volatile memory
US9336129B2 (en) 2013-10-02 2016-05-10 Sandisk Technologies Inc. System and method for bank logical data remapping
KR102291507B1 (ko) * 2014-05-20 2021-08-20 삼성전자주식회사 메모리 컨트롤러의 동작 방법
CN105489246B (zh) * 2014-09-16 2018-10-19 华邦电子股份有限公司 Nor闪存及其修补方法
US9728278B2 (en) 2014-10-24 2017-08-08 Micron Technology, Inc. Threshold voltage margin analysis
US9934872B2 (en) * 2014-10-30 2018-04-03 Sandisk Technologies Llc Erase stress and delta erase loop count methods for various fail modes in non-volatile memory
US9830087B2 (en) * 2014-11-13 2017-11-28 Micron Technology, Inc. Memory wear leveling
US10338817B2 (en) 2014-12-30 2019-07-02 Sandisk Technologies Llc Systems and methods for storage recovery
US9766819B2 (en) 2014-12-30 2017-09-19 Sandisk Technologies Llc Systems and methods for managing storage endurance
US9934858B2 (en) 2015-04-30 2018-04-03 Sandisk Technologies Llc Use of dummy word lines for metadata storage
US10101939B2 (en) 2016-03-09 2018-10-16 Toshiba Memory Corporation Storage system having a host that manages physical data locations of a storage device
CN107589914A (zh) * 2017-09-25 2018-01-16 青岛海信移动通信技术股份有限公司 数据存储方法及装置
US10552145B2 (en) * 2017-12-12 2020-02-04 Cypress Semiconductor Corporation Memory devices, systems, and methods for updating firmware with single memory device
US10261692B1 (en) * 2017-12-20 2019-04-16 Winbond Electronics Corp. Non-volatile memory and erase controlling method thereof
US10884889B2 (en) 2018-06-22 2021-01-05 Seagate Technology Llc Allocating part of a raid stripe to repair a second raid stripe
US10866747B2 (en) 2019-02-10 2020-12-15 Hewlett Packard Enterprise Development Lp Securing a memory drive
KR20200114482A (ko) * 2019-03-28 2020-10-07 에스케이하이닉스 주식회사 컨트롤러, 이를 포함하는 메모리 시스템 및 메모리 시스템의 동작 방법
US11366597B2 (en) * 2020-01-27 2022-06-21 Western Digital Technologies, Inc. Storage system and method for maintaining uniform hot count distribution using smart stream block exchange
US11640259B2 (en) 2020-05-21 2023-05-02 Western Digital Technologies, Inc. Use of surplus erase block pairs in super block formation
US11494299B2 (en) 2021-02-18 2022-11-08 Silicon Motion, Inc. Garbage collection operation management with early garbage collection starting point
US20220300184A1 (en) * 2021-03-19 2022-09-22 Silicon Motion, Inc. Method of performing wear-leveling operation in flash memory and related controller and storage system
KR20230059910A (ko) * 2021-10-26 2023-05-04 삼성전자주식회사 컨트롤러, 스토리지 장치 및 스토리지 장치의 동작 방법

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2685173B2 (ja) 1986-05-31 1997-12-03 キヤノン株式会社 メモリ書き込み制御方法
JPH07109717B2 (ja) 1986-05-31 1995-11-22 キヤノン株式会社 メモリ書き込み制御方法
US5268870A (en) * 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
DE69034191T2 (de) * 1989-04-13 2005-11-24 Sandisk Corp., Sunnyvale EEPROM-System mit aus mehreren Chips bestehender Blocklöschung
US5222109A (en) * 1990-12-28 1993-06-22 Ibm Corporation Endurance management for solid state files
US6230233B1 (en) * 1991-09-13 2001-05-08 Sandisk Corporation Wear leveling techniques for flash EEPROM systems
US5438573A (en) * 1991-09-13 1995-08-01 Sundisk Corporation Flash EEPROM array data and header file structure
JPH0750558B2 (ja) 1992-09-22 1995-05-31 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリ
JP2856621B2 (ja) * 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US5388083A (en) * 1993-03-26 1995-02-07 Cirrus Logic, Inc. Flash memory mass storage architecture
US5426893A (en) * 1994-05-26 1995-06-27 Hoffman; Robert E. Reinforced sectional storm panel
JP3507132B2 (ja) * 1994-06-29 2004-03-15 株式会社日立製作所 フラッシュメモリを用いた記憶装置およびその記憶制御方法
JPH0877074A (ja) * 1994-09-09 1996-03-22 Hitachi Ltd フラッシュメモリを用いた記憶装置システム
US5954828A (en) * 1995-01-05 1999-09-21 Macronix International Co., Ltd. Non-volatile memory device for fault tolerant data
US5568423A (en) * 1995-04-14 1996-10-22 Unisys Corporation Flash memory wear leveling system providing immediate direct access to microprocessor
US5907856A (en) * 1995-07-31 1999-05-25 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US5845313A (en) * 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US5835935A (en) * 1995-09-13 1998-11-10 Lexar Media, Inc. Method of and architecture for controlling system data with automatic wear leveling in a semiconductor non-volatile mass storage memory
US6125435A (en) * 1995-09-13 2000-09-26 Lexar Media, Inc. Alignment of cluster address to block addresses within a semiconductor non-volatile mass storage memory
US5933847A (en) * 1995-09-28 1999-08-03 Canon Kabushiki Kaisha Selecting erase method based on type of power supply for flash EEPROM
US5860082A (en) * 1996-03-28 1999-01-12 Datalight, Inc. Method and apparatus for allocating storage in a flash memory
US5715193A (en) * 1996-05-23 1998-02-03 Micron Quantum Devices, Inc. Flash memory system and method for monitoring the disturb effect on memory cell blocks due to high voltage conditions of other memory cell blocks
US5956473A (en) * 1996-11-25 1999-09-21 Macronix International Co., Ltd. Method and system for managing a flash memory mass storage system
US6009496A (en) * 1997-10-30 1999-12-28 Winbond Electronics Corp. Microcontroller with programmable embedded flash memory
KR100297986B1 (ko) * 1998-03-13 2001-10-25 김영환 플래쉬 메모리 셀 어레이의 웨어 레벨링 시스템 및 웨어 레벨링 방법
EP1027653B1 (de) 1998-09-04 2004-09-15 Hyperstone AG Zugriffssteuerung eines speichers beschränkter löschhäufigkeit
US6226759B1 (en) * 1998-09-28 2001-05-01 International Business Machines Corporation Method and apparatus for immediate data backup by duplicating pointers and freezing pointer/data counterparts
US6260156B1 (en) * 1998-12-04 2001-07-10 Datalight, Inc. Method and system for managing bad areas in flash memory
JP3583639B2 (ja) * 1999-02-02 2004-11-04 三菱電機株式会社 メモリ装置のデータ更新方法
US6282605B1 (en) * 1999-04-26 2001-08-28 Moore Computer Consultants, Inc. File system for non-volatile computer memory
US6426893B1 (en) * 2000-02-17 2002-07-30 Sandisk Corporation Flash eeprom system with simultaneous multiple data sector programming and storage of physical block characteristics in other designated blocks
JP2003532222A (ja) * 2000-05-04 2003-10-28 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 記憶媒体上のデータ管理のための方法、システム、及びコンピュータプログラム
KR100644602B1 (ko) * 2000-10-11 2006-11-10 삼성전자주식회사 플래시메모리를 위한 재사상 제어방법 및 그에 따른플래시 메모리의 구조
JP2002251884A (ja) * 2001-02-21 2002-09-06 Toshiba Corp 半導体記憶装置及びそのシステム装置
US6732221B2 (en) * 2001-06-01 2004-05-04 M-Systems Flash Disk Pioneers Ltd Wear leveling of static areas in flash memory
US6683817B2 (en) * 2002-02-21 2004-01-27 Qualcomm, Incorporated Direct memory swapping between NAND flash and SRAM with error correction coding

Also Published As

Publication number Publication date
TWI247292B (en) 2006-01-11
EP1559112B1 (de) 2007-11-14
US20060149896A1 (en) 2006-07-06
JP4758648B2 (ja) 2011-08-31
CN1701389A (zh) 2005-11-23
TW200416707A (en) 2004-09-01
ATE378684T1 (de) 2007-11-15
KR20050067203A (ko) 2005-06-30
JP2006504220A (ja) 2006-02-02
US7035967B2 (en) 2006-04-25
WO2004040584A1 (en) 2004-05-13
US20040177212A1 (en) 2004-09-09
DE60317551D1 (de) 2007-12-27
EP1559112A1 (de) 2005-08-03
AU2003270449A1 (en) 2004-05-25
US7287118B2 (en) 2007-10-23

Similar Documents

Publication Publication Date Title
DE60317551T2 (de) Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem
DE60319563T2 (de) Verwaltung der anzahl von löschungen in einem nicht-fluchtigem speicher
DE60319407T2 (de) Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems
DE60316171T2 (de) Automatischer abnutzungsausgleich in einem nicht-flüchtigen speichersystem
DE112006004187B4 (de) Verfahren, nicht-flüchtige Speichervorrichtung und Computersystem zum initiativen Abnutzungsausgleich für einen nicht-flüchtigen Speicher
DE69635962T2 (de) Flash-Speicher-Massenspeichersystem und Verfahren dafür
DE69034191T2 (de) EEPROM-System mit aus mehreren Chips bestehender Blocklöschung
DE60217883T2 (de) Verfahren zum schreiben von daten in einen nicht-flüchtigen speicher
DE112010002663B4 (de) Speichermanagementsysteme, Verfahren zur Verbesserung der Schreib-Lösch-Ausdauerlebenszeit von Speichervorrichtungen und Computerprogrammprodukt
DE19782041B4 (de) Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher
DE60303895T2 (de) Hybridimplementierung von Fehlerkorrekturkoden eines nichtflüchtigen Speichersystems
DE69839126T2 (de) Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher
DE102020106971A1 (de) Datenschreibverwaltung im nichtflüchtigen speicher
DE69233228T2 (de) Datenverwaltungssystem für Halbleiterspeicher mit beschränkter Programmierung und I.C. Speicherkarte mit solchem Datenverwaltungssystem
DE102018105854A1 (de) Dynamische Größenanpassung logischer Speicherblöcke
DE102012208141B4 (de) Ausgleich nachlassender Funktionsfähigkeit
DE102010018765A1 (de) Speichervorrichtung und Speicherverfahren
DE102005063250A1 (de) Datenspeicherungssteuersystem, Speicher- und Rechnersystem und Betriebsverfahren
DE102009034651A1 (de) Prozess und Verfahren zur Abbildung von logischen Adressen auf physische Adressen in Festkörperplatten
DE202010017613U1 (de) Datenspeichervorrichtung mit host-gesteuerter Speicherbereinigung
DE112010003577T5 (de) Datenverwaltung in Halbleiterspeicher-Einheiten und mehrstufigen Speichersystemen
DE112015004873T5 (de) Verarbeitung von Entabbildungsbefehlen zur Verbesserung der Leistungsfähigkeit und Standzeit einer Speicherungsvorrichtung
DE102008033518B4 (de) Datenverarbeitungsverfahren für eine Solid-State-Disk-Steuereinheit, Solid-State-Disk-Steuereinheit und Datenspeicherelement
DE102005034611A1 (de) Speichersystem und zugehörige Betriebs- und Blockverwaltungsverfahren
DE102007006307A1 (de) Verfahren zum Betreiben eines nichtflüchtigen Speicherelements, Aufzeichnungsmedium und nichtflüchtigen Speicherelement

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee