DE69635962T2 - Flash-Speicher-Massenspeichersystem und Verfahren dafür - Google Patents

Flash-Speicher-Massenspeichersystem und Verfahren dafür Download PDF

Info

Publication number
DE69635962T2
DE69635962T2 DE69635962T DE69635962T DE69635962T2 DE 69635962 T2 DE69635962 T2 DE 69635962T2 DE 69635962 T DE69635962 T DE 69635962T DE 69635962 T DE69635962 T DE 69635962T DE 69635962 T2 DE69635962 T2 DE 69635962T2
Authority
DE
Germany
Prior art keywords
block
blocks
data
buffer
sector
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 - Lifetime
Application number
DE69635962T
Other languages
English (en)
Other versions
DE69635962D1 (de
Inventor
Chung-Wen Ma
Chun-Hung Lin
Tai-Yao Lee
Li-Jen Lee
Ju-Xu Lee
Ting-Chung Milpitas HU
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.)
Macronix International Co Ltd
Original Assignee
Macronix International Co Ltd
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 Macronix International Co Ltd filed Critical Macronix International Co Ltd
Application granted granted Critical
Publication of DE69635962D1 publication Critical patent/DE69635962D1/de
Publication of DE69635962T2 publication Critical patent/DE69635962T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • 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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung bezieht sich auf das Gebiet der Massenspeicher für Computer. Genauer gesagt bezieht die Erfindung sich auf eine Architektur für einen nicht-flüchtigen Halbleiterspeicher und insbesondere auf einen Flash-Speicher.
  • HINTERGRUND DER ERFINDUNG
  • Moderne Informationsverarbeitungssysteme machen umfangreichen Gebrauch von nicht-flüchtigen Speichereinrichtungen mit wahlfreiem Zugriff als Massenspeicher für das Speichern von Programmen und Daten. Die am weitesten verbreitete nicht-flüchtige Speichereinrichtung sind Festplatten, welche elektromechanische Einrichtungen sind, die Daten auf magnetischem Material speichern. In jüngerer Zeit sind nicht-flüchtige Halbleiterspeicher entwickelt worden. Ein Typ eines nicht-flüchtigen Halbleiterspeichers ist der Flash-Speicher, der aus einer großen Mehrzahl von Metalloxidsiliziumfeldeftekttransistoren mit Floating-Gate besteht, die als Speicherzellen in einem typischen Reihen- und Spaltenarray angeordnet sind. Das Floating-Gate-Modell ermöglicht es, daß Information erhalten bleibt, nachdem die Stromversorgung entfernt worden ist. Der Flash-Speicher hat eine Reihe von Eigenschaften, die ihn für die Verwendung als Massenspeicher in Informationsverarbeitungssystemen geeignet machen: er hat geringes Gewicht, beansprucht nur sehr wenig Platz und verbraucht weniger Leistung als elektromechanische Einrichtungen. Weiterhin ist er robust und kann wiederholte Stürze aushalten, die elektromechanische Einrichtungen zerstören würden.
  • Ein Flash-Speicher enthält typischerweise eine Mehrzahl einzelner Transistorspeicherzellen, welche durch Injektion heißer Elektronen programmierbar und durch Fowler-Nordheim-Tunneln löschbar sind. Das Programmieren und Löschen einer derartigen Speicherzelle erfordert, daß ein Strom durch das Dielektrikum fließt, welches eine Floating-Gate-Elektrode umgibt. Es hat sich herausgestellt, daß das Dielektrikum nach einer gewissen Anzahl von Programmier- und Löschvorgängen nachläßt bzw. versagt. Wegen dieser Eigenschaften haben solche Typen von Speichern eine endliche Anzahl von Lösch-Schreibzyklen. Hersteller von Flashzelleneinrichtungen geben den Grenzwert für die Anzahl von Lösch-Schreibzyklen als zwischen 10.000 und 100.000 an. Dies ist ein Unterschied gegenüber anderen Arten von Speichereinrichtungen, wie z.B. rotierende Magnetmedien (z. B. einer Festplatte) und flüchtigen Speicherchips (wie z. B. eines dynamischen Speichers mit wahlfreiem Zugriff und eines statischen Speichers mit wahlfreiem Zugriff), die Millionen von Lösch-Schreibzyklen durchlaufen können, bevor sie versagen. Im Ergebnis ist es wünschenswert, die Anzahl von Lösch-Schreibzyklen in einem Flash-Speicher zu erhöhen.
  • Ein Flash-Speicher wird typischerweise gelöscht, indem eine hohe Spannung an den Source-Anschlüssen der Zellen in dem Speicher angelegt wird. Da diese Source-Anschlüsse allesamt über eine metallische Busleitung miteinander verbunden sind, muß der gesamte Speicher (oder einige Unterabschnitte desselben) gleichzeitig gelöscht werden. Demnach werden in einem Löschvorgang gültige Daten zusammen mit ungültigen (Verunreinigungs-)Daten gelöscht. Dies ist ein Unterschied gegenüber anderen Speichereinrichtungen mit wahlfreiem Zugriff, in welchen individuelle Bits gelöscht und geschrieben werden können. Ein weiterer Unterschied zwischen einem Flash-Speicher und anderen Typen von Speichereinrichtungen besteht darin, daß die Löschzyklen in einer Flash-Speichereinrichtung langsam sind (verglichen zu der Lese-Schreib-Zeit anderer Arten von Speichereinrichtungen). Diese Eigenschaft kann die Leistungsfähigkeit eines Systems, welches Flash-Speicher als einen Massenspeicher verwendet, beträchtlich reduzieren, es sei denn, dieses System ist speziell für eine Kompensierung des langsamen Löschzyklus ausgelegt.
  • Die US-A-5 404 485 bezieht sich auf eine Technik, die es ermöglicht, daß Daten kontinuierlich in nicht beschriebene physikalische Adreßpositionen in einen Flash-Speicher geschrieben werden. Adressen in dem Flash-Speicher sind in Form von Blöcken ausgebildet. Wenn die Daten geschrieben werden sollen, wird ein Flash-Speicherblock, welcher der Adresse entspricht, beschrieben. Wenn dieser Block gerade verwendet wird, so wird ein nicht beschriebener Block lokalisiert und beschrieben. Ein Plan bzw. eine Zuordnung wird verändert, um die Blockadresse auf die ursprüngliche Adresse der Daten abzubilden bzw. dieser zuzuordnen. Der Block, der zu der ursprünglichen Adresse gehörte, wird als unbenutzbar bezeichnet und bleibt unbenutzbar, bis ein erzwungener Löschvorgang stattfindet. Nicht verwendbare Blöcke des Speichers werden wiedergewonnen, indem Speichereinheiten in einen reservierten, nicht beschriebenen Raum in dem Löschspeicher übertragen werden. Nur die nutzbaren Blöcke werden bei dem Transfervorgang beschrieben, so daß die Stellen, wo die nicht benutzbaren Blöcke waren, beim Überschreiben nicht in den reservierten Raum geschrieben werden und demnach verwendbar sind. Nach dem Überschreiben bzw. Neuschreiben wird der ursprüngliche Speichereinheitsraum als eine Einheit in einem Zug gelöscht und wird damit zu einem unbeschriebenen Reserveraum, in welchen eine nachfolgende Übertragung vorgenommen werden kann.
  • Die US-A-5 388 083 bezieht sich auf eine Technik, in welcher ein Massenspeichersystem das Erfordernis, jedesmal dann, wenn Information, die in dem Massenspeichersystem gespeichert ist, verändert wird, einen Löschzyklus durchzuführen, vermeiden kann. Löschzyklen werden vermieden durch Programmieren einer geänderten Datei in einen leeren Massenspeicherblock. Wenn der Massenspeicher sich füllt, wird ein Löschen mehrerer Sektoren ausgeführt, um Blöcke freizugeben.
  • Man erkennt anhand des obigen, daß eine neue Speicherarchitektur entwickelt werden muß, um Flash-Speicher effektiv als Massenspeicher zu verwenden.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Gemäß einem Aspekt der vorliegenden Erfindung wird ein Verfahren zum Verwenden eines Flash-Speichers zum Implementieren eines Massenspeichersystems bereitgestellt, wie es in Anspruch 1 beansprucht wird.
  • Gemäß einem weiteren Aspekt der vorliegenden Erfindung wird ein Massenspeichersystem bereitgestellt, wie es in Anspruch 9 beansprucht wird.
  • Ausführungsformen der vorliegenden Erfindung beziehen sich auf eine neue Architektur eines Flash-Speichersystems. Diese Architektur ist dafür ausgelegt, einige der oben erwähnten Probleme bei der Verwendung von Flash-Speichern für das Speichern von Daten zu überwinden. Diese Architektur umfaßt das Organisieren physikalischer Speicherzellen in einer logischen Struktur, welche Blöcke und Sektoren aufweisen. In einer Ausführungsform der vorliegenden Erfindung wird ein Puffer (der "Eingangspuffer" genannt) verwendet, um den physikalischen Speicher auf eine logische Anordnung abzubilden. Durch Ändern des Inhaltes des Eingangspuffers kann derselbe physikalische Speicher verwendet werden, um unterschiedliche logische Funktionen auszuführen.
  • Eine Anwendung der vorliegenden Architektur besteht darin, daß das Speichersystem verwendet werden kann, um Daten zu speichern, die gemäß einem Adressierschema auf Sektorbasis angeordnet sind. Ein Beispiel eines solchen Schemas ist die "logische Blockadresse" (LBA), die in dem DOS-Dateisystem von Microsoft verwendet wird. Ausführungsformen der vorliegenden Erfindung stellen ein flexibles Verfahren bereit, die logische Struktur zu verwenden, um Daten zu verarbeiten, die in den Adressierschemata auf Sektorbasis organisiert sind.
  • Eine der speziellen Eigenschaften von Flash-Speichern besteht darin, daß individuelle Zellen nicht direkt mit neuen Daten überschrieben werden können. Dies ist ein Unterschied gegenüber anderen Speichereinrichtungen, in welchen jedes Bit nach Belieben verändert werden kann. Konsequenterweise können konventionelle Lese- und Schreibverfahren nicht verwendet werden. Ausführungsformen der vorliegenden Erfindung beinhalten ein neues Verfahren zum Schreiben in und Lesen aus dieser logischen Struktur. Dieses Verfahren verwendet einen Puffer (Q-Puffer genannt), um neue Daten aufzunehmen anstatt alte Daten direkt zu überschreiben. Der Q-Puffer wird später umgewandelt, so daß er die Blöcke ersetzt, welche alte Daten enthalten (der ein verunreinigter Block genannt wird). Der alte Block, der durch den Puffer ersetzt wird, kann gelöscht werden und kann dann für andere Zwecke verwendet werden. Ein neuer Block wird dann als neuer Puffer zugewiesen bzw. vorgesehen. Die Verwendung des oben beschriebenen Eingangspuffers ermöglicht diese Umwandlung.
  • Eine Konsequenz dieses Schreibverfahrens liegt darin, daß Blöcke in der Lage sind, wiedergewonnen bzw. rezykliert werden zu können (d.h. ein verunreinigter Block kann logisch in eine andere Art von Block bzw. andere Arten von Blöcken geändert werden). Dies liegt daran, daß die vorliegende Architektur eine kontinuierliche Zufuhr bzw. Versorgung mit Q-Puffern benötigt. Wenn Blöcke nicht rezykliert werden, so kommt irgendwann ein Zeitpunkt, zu welchem alle Blöcke verwendet werden und keine weiteren Blöcke als Q-Puffer zugeordnet werden können. Demnach stellt die Architektur bestimmter Ausführungsformen ein Verfahren zum Rezyklieren bzw. Wiedergewinnen von Blöcken bereit, so daß gelöschte Blöcke schließlich wieder als ein Puffer verwendet werden können.
  • Um die Leistungsfähigkeit der vorliegenden Architektur zu verbessern, wird ein neuer Typ von Puffer eingeführt. Der oben beschriebene Q-Puffer ist nicht effizient bei der Handhabung einer zufälligen Aktualisierung von Daten. Dieser Puffer dient dazu, diese Arten des Schreibens aufzunehmen. Es hat sich herausgestellt, daß dieser neue Puffer die Häufigkeiten der Löschvorgänge von Q-Puffern reduzieren kann. Die Leistungsfähigkeit des Systems wird verbessert, da es relativ lange dauert, einen Block zu löschen.
  • Diese und andere Merkmale der vorliegenden Erfindung werden deutlich anhand der folgenden Beschreibung in Verbindung mit den beigefügten Zeichnungen.
  • KURZE BESCHREIBUNG DER FIGUREN
  • 1A ist ein schematisches Diagramm eines Flash-Speichersystems der vorliegenden Erfindung.
  • 1B1D zeigen die logische Struktur des Flash-Speichersystems der vorliegenden Erfindung.
  • 2A2D zeigen einen Schreibvorgang gemäß der vorliegenden Erfindung.
  • 3 zeigt den Zustand von Blöcken nach dem Schreibvorgang der 2A2D.
  • 4 zeigt den Zustand von Blöcken, wenn die Daten gemäß der vorliegenden Erfindung in einen anderen Block geschrieben werden müssen.
  • 5 ist ein schematisches Diagramm, welches die Umwandlung der Blöcke der vorliegenden Erfindung von einer Kategorie in eine andere zeigt.
  • 6A6F veranschaulichen den "impliziert verschmutzten" ("implied dirty") Vorgang der vorliegenden Erfindung.
  • 7 ist ein Flußdiagramm, welches das Schreiben von Daten in der vorliegenden Erfindung zeigt.
  • 8 ist ein Flußdiagramm, welches das Lesen von Daten in der vorliegenden Erfindung zeigt.
  • 9 veranschaulicht ein Beispiel des Schreibens von Daten in das Flash-Speichersystem der vorliegenden Erfindung.
  • GENAUE BESCHREIBUNG DER ERFINDUNG
  • Die vorliegende Erfindung weist eine neue Speicherarchitektur und damit zusammenhängende Verfahren auf. Die folgende Beschreibung wird gegeben, um Fachleute auf diesem Gebiet in die Lage zu versetzen, die Erfindung nachzuarbeiten und zu benutzen. Beschreibung und spezielle Anwendung werden nur als Beispiele wiedergegeben. Verschiedene Modifikationen der bevorzugten Ausführungsformen liegen für Fachleute auf der Hand, und die allgemeinen Prinzipien, die hier beschrieben werden, können auf andere Ausführungsformen und Anwendungen angewendet werden, ohne vom Schutzumfang der Erfindung abzuweichen. Demnach soll die vorliegende Erfindung nicht auf die dargestellten Ausführungsformen beschränkt werden, sondern soll den weitest möglichen Schutz erhalten, der mit den hierin offenbarten Prinzipien und Merkmalen konsistent ist.
  • Eine wesentliche Funktion eines Speichersystems besteht im Speichern von Daten. Weiterhin sollten Softwareanwendungen in der Lage sein, aus einem Speichersystem zu lesen und in dieses zu schreiben. Flash-Speicher hat viele Eigenschaften, die gegenüber konventionellem Speicher unterschiedlich sind. Konsequenterweise muß die Architektur eines Flash-Speichersystems so organisiert sein, daß sie jegliche Schwierigkeit überwindet und jedes vorteilhafte Merkmal ausnutzt. Ein Unterschied liegt darin, daß existierende Daten im Flash-Speicher nicht direkt mit neuen Daten überschrieben werden können. Der Flash-Speicher muß zuerst gelöscht werden, so daß er ein "sauberer" Speicher wird. Neue Daten können dann in den sauberen Speicher geschrieben werden. Im Gegensatz dazu können dynamische Speicher mit wahlfreiem Zugriff (DRAM), statischer Speicher mit wahlfreiem Zugriff (SRAM) und Festplatten direkt überschrieben werden. Dies ist einer der Gründe, warum die Architektur eines Flash-Speichersystems gegenüber einem konventionellen Speichersystem unterschiedlich ist.
  • Da jeder Block nur eine kleine Anzahl von Malen (im Vergleich zu konventionellem Speicher) gelöscht werden kann, bevor er unbrauchbar wird, besteht konsequenterweise ein Bedarf, unnötige Löschzyklen zu reduzieren.
  • Zusätzlich zu dem Erfordernis, die oben beschriebenen technischen Probleme, die mit Flash-Speichern verknüpft sind, zu überwinden, muß die Leistungsfähigkeit des Systems hoch sein und die Kosten müssen niedrig sein. Ansonsten ist es nicht möglich, daß ein Flash-Speichersystem auf dem Markt konkurrenzfähig ist. Eine der Folgen dieses Erfordernisses besteht darin, daß die Architektur nicht zuviel Kopflast (overhead) enthalten sollte. Die Hardware- und die Softwareunterstützung (beispielsweise Puffer, Programmcode etc.) müssen demnach gering sein, die Datenstruktur und Algorithmen müssen einfach sein und die Zuverlässigkeit und Leistungsfähigkeit muß hoch sein. Das Flash-Speichersystem der vorliegenden Erfindung ist dafür ausgelegt, diese Erfordernisse zu erfüllen.
  • (A) Beschreibung der Systemarchitektur
  • (1) Aufteilen der Speicherzellen in Blöcke
  • 1A ist eine schematische Zeichnung eines Flash-Speichersystems 100 der vorliegenden Erfindung. Das System 100 enthält einen oder mehrere Flash-Speicherchips für das Speichern von Daten und für das Programmieren, wie z. B. die Chips 102104. Diese Chips sind über Leitungen 106108 elektrisch mit einer Steuerung 110 verbunden. In einer Ausführungsform der vorliegenden Erfindung könnten diese Leitungen Teil eines Busses für das Kommunizieren digitaler Daten sein. Die Steuerung 110 führt eine Vielfalt von Funktionen aus (die unten noch im einzelnen beschrieben werden), wie z. B. das Organisieren der Flash-Speicherchips 102104 in Speicherblöcke, das Zuordnen dieser Speicherblöcke zu unterschiedlichen Zwecken, die Schnittstellenbildung gegenüber Einrichtungen außerhalb des Systems 100 etc. Die Steuerung 110 könnte eine spezielle Datenverarbeitungseinrichtung sein. Alternativ könnten die Funktionen der Steuerung 110 durch ein allgemeines Vielzweck-Mikrocomputersystem ausgeführt werden, das aus einer zentralen Verarbeitungseinheit (CPU), einem Speicher mit wahlfreiem Zugriff (RAM), einem Nur-Lese-Speicher (ROM) und einer Festplatte besteht. In einer Anwendung der vorliegenden Erfindung emuliert das Flash-Speichersystem 10 die Funktion und die Betriebsweise einer Festplatte. In dieser Anwendung behandelt das Mikrocomputersystem das System 100 wie eine ursprüngliche Festplatte. Alternativ könnte das Flash-Speichersystem 100 eine Organisation haben, die für die Verwendung in speziellen Systemen optimiert ist, wie r. B. in Videospielkassetten und in industriellen Steuerdaten-Loggern.
  • Jeder Speicherchip kann in mehrere Speicherblöcke aufgeteilt sein. Jeder Speicherblock enthält eine große Anzahl löschbarer und programmierbarer Nur-Lese-Speicherzellen, die Datenbits speichern können. Beispielsweise ist der Chip 102 in Blöcke 112a123a aufgeteilt. In ähnlicher Weise sind die Chips 103 und 104 in Blöcke 112b123b bzw. 112c123c aufgeteilt. In einer bevorzugten Ausführungsform ist jeder der Chips 102104 in dieselbe Anzahl von Blöcken aufgeteilt. Es versteht sich jedoch, daß die Chips auch unterschiedliche Anzahlen von Blöcken haben können.
  • (2) Logische Organisation der physikalischen Blöcke
  • Die Blöcke in den Chips 102104 müssen logisch so organisiert sein, daß sie ein flexibles System für das Speichern von Daten bereitstellen können. Eine Methode der Organisation besteht darin, Einrichtungen für das Abbilden physikalischer Blöcke auf eine logische Struktur bereitzustellen. In der vorliegenden Erfindung wird ein spezieller Puffer für diese Abbildung bzw. Zuordnung verwendet. Durch Ändern des Inhaltes in diesem Puffer kann derselbe physikalische Block auf unterschiedliche logische Organisationsstrukturen abgebildet werden.
  • Das Folgende ist ein Beispiel, welches eine solche Organisation zeigt. Es versteht sich, daß die Anzahl von Blöcken, die in diesem Beispiel verwendet werden, lediglich Veranschaulichungszwecken dient und daß ein tatsächliches Flash-Speichersystem viele Blöcke haben könnte. Es sei angenommen, daß acht der Blöcke in jedem Chip in dem Array verwendet werden (die anderen Blöcke können für andere Zwecke verwendet werden). Jeder Speicherblock hat eine eindeutige Identifikationsnummer (die "Block-ID"). In 1B sind den Blöcken 112a119a des Chips 102 und den Blöcken 112b119b des Chips 103 der Reihe nach die Block-IDs 1–16 zugeordnet. Diese sechzehn Blöcke bilden nun ein Speicherarray 130. Da es eine Eins-zu-Eins-Entsprechung zwischen einem physikalischen Block und seiner Block-ID gibt, kann die Stelle bzw. Position jedes Blockes in eindeutiger Weise durch Angeben dieser Block-ID identifiziert werden. In diesem Sinne kann die Block-ID als eine Form einer physikalischen Blockadresse angesehen werden. In einer Ausführungsform der vorliegenden Erfindung ist weiterhin jeder Block in Sektoren aufgeteilt. In dieser Ausführungsform besteht das Lesen und Schreiben von Daten darin, zeitlich jeweils einen Sektor nach dem anderen zu bearbeiten.
  • Die Block-IDs können in unterschiedlichen logischen Reihenfolgen angeordnet werden. In 1B wird ein Puffer 132a verwendet, um die Block-IDs zu speichern. Dieser Puffer wird hier als ein "Eingangspuffer" bezeichnet. Der Puffer 123a enthält eine Anzahl von Registern (im vorliegenden Fall sechzehn wegen der sechzehn Block-IDs) In 1B sind diese mit 0 bis 15 bezeichnet. Jedes Register in dem Puffer wird als ein "Eintrag" bezeichnet. Jeder Eintrag kann verwendet werden, um eine eindeutige Block-ID zu speichern.
  • Wie unten noch genau erläutert wird, besteht ein Aspekt der vorliegenden Erfindung darin, daß die physikalischen Blöcke gemäß der vorliegenden Erfindung verschiedene logische Transformationen erfahren können. Demnach kann derselbe physikalische Block Daten enthalten, die sich zu einem Zeitpunkt auf eine logische Adresse und zu einem anderen Zeitpunkt auf eine zweite logische Adresse beziehen. Der Puffer 132a kann verwendet werden, um ein lineares Adressierschema zu implementieren, in dem die physikalischen Blöcke logischen Adressen zugeordnet werden. In 1B ist jedem Register in dem Puffer 132a ein Bereich logischer Adressen zugeordnet. Die Register sind sequentiell in logischer Weise angeordnet (beispielsweise von "0" bis "15"), so daß es eine Eins-zu-Eins-Beziehung zwischen der logischen Position und der Register und der logischen Adresse der Daten gibt. Jedes Register enthält eine Block-ID der physikalischen Blöcke, die verwendet werden, um Daten zu speichern, welche die zugehörigen Adressen haben. Beispielsweise enthalten die ersten drei Register in dem Puffer 132a die Block-ID 13, 2 und 8. Wenn die Blöcke Transformationen erfahren, werden unterschiedliche physikalische Blöcke verwendet, um Daten in demselben Adreßbereich zu speichern. Beispielsweise zeigt 1b eine andere Anordnung, die als Eingangspuffer 132b dargestellt ist, in welcher die ersten drei Register die Block-ID 11, 5 und 14 enthalten. Man beachte, daß in diesem Beispiel die Puffer 132a und 132b verwendet werden, um die in demselben physikalischen Puffer gespeicherten, unterschiedlichen Werte zu veranschaulichen.
  • Das Flash-Speichersystem der vorliegenden Erfindung kann verwendet werden als Massenspeicher in einer großen Vielfalt von Informationsverarbeitungssystemen. Als Beispiel für die Darstellung der Arbeitsweise der vorliegenden Erfindung wird das Flash-Speichersystem 100 verwendet, um eine Festplatte zu emulieren (nachzubilden). 1C zeigt einen Block 140 in dem Flash-Speichersystem 100. Der Block 140 ist in r-Sektoren aufgeteilt, wie z. B. die Sek toren 142144. Der Block 140 enthält außerdem einen Speicherbereich 148 (der als "Erweiterung" markiert ist), um Attributinformation zu speichern, die sich auf den Block 140 bezieht. Jeder Sektor enthält auch einen Sektorattributbereich (wie z. B. den Bereich 146 des Sektors 142), um Attributinformation des Sektors zu speichern.
  • (B) Abbilden logischer Speicheradressen auf physikalische Flash-Speicheradressen
  • Wie oben dargelegt, besteht eine wesentliche Funktion eines Flash-Speichersystems darin, Daten und Programme zu speichern. Typischerweise sind Daten und Programme bzw. Programmcodes nach einem Adressierschema auf Sektorbasis organisiert, so daß jedes Datenelement in eindeutiger Weise identifiziert werden kann. Das Flash-Speichersystem der vorliegenden Erfindung kann so ausgelegt werden, daß es mit diesem Adressierschema kompatibel ist, so daß ein externes System auf den Flash-Massenspeicher zugreifen kann, indem es die logischen Sektoradressen angibt.
  • 1D zeigt ein Beispiel, welches das Flash-Speichersystem 100 der vorliegenden Erfindung verwendet, um eine typische Speicherorganisation zu implementieren. Viele Softwaresysteme (wie z. B. Microsofts DOS-Betriebssystem und Windows) verwenden ein lineares Adressierschema auf Sektorbasis, um Daten in dem Massenspeicher zu lokalisieren. In diesem Adressierschema wachsen die Speicheradressen in einem logischen Speicher 150 linear an. Die kleinste adressierbare Einheit des Speicherraumes ist ein Sektor (welcher den Sektoren 142144 nach 1C entspricht), d.h. die Daten werden jeweils sektorweise gelesen und geschrieben anstatt jeweils als Byte oder als Wort. Die Größe eines Sektors kann entsprechend der Auslegung eines Dateisystems ausgewählt werden. In dem in 1D dargestellten Beispiel ist die anfängliche Sektoradresse als "00" wiedergegeben, und die höchste Sektoradresse ist (nur zu Zwecken der Veranschaulichung) als "79" dargestellt. Diese logischen Sektoren sind in logische Blöcke gruppiert, und diese logischen Blöcke werden (unter Verwendung des Eingangspuffers 132c) auf ihre entsprechenden physikalischen Blöcke abgebildet bzw. diesen zugeordnet. Die Reihenfolge der Sektoren in einem physikalischen Block wird wie bei ihrem entsprechenden logischen Block beibehalten.
  • Zum Beispiel wird angenommen, daß jeder Block in 1D zehn Sektoren enthält. In diesem Beispiel sind die Zahlen in dezimaler Form wiedergegeben (anstelle einer binären oder hexadezimalen Darstellung). Entsprechend der Register-Nr. "0" des Eingangspuffers 132c wird ein Block, welcher eine Block-ID von 13 hat, als der erste Block des logischen Adreßraums zugeordnet. Demnach entsprechen die Sektoren in diesem Block der logischen Sektoradresse von "00" bis "09". Entsprechend der Register-Nr. "1" des Eingangspuffers 132c wird ein Block, der eine Block-ID von 2 hat, als der zweite Block zugeordnet. Demnach entsprechen die Sektoren in diesem Block den logischen Sektoradressen von "10" bis "19". Dieselbe Beziehung gilt auch für die weiteren Register.
  • Um das erfindungsgemäße Flash-Speichersystem für das Speichern von Daten zu verwenden, muß die Steuerung 110 in der Lage sein, auf Daten zuzugreifen, die von einem externen System stammen, und zwar in eindeutig identifizierbaren Sektoren in dem Flash-Speichersystem. Die oben beschriebene logische Sektoradresse liefert die Schnittstelle zwischen dem externen System und dem Flash-Speichersystem. Das externe System kann die Position der Daten, auf welche zugegriffen werden soll, anhand ihrer angegebenen logischen Sektoradresse anzeigen. Wenn eine logische Sektoradresse bekannt ist, kann die logische Sektoradresse berechnet werden durch Aufteilen der Gesamtzahl der Sektoren in einem Block in bzw. auf die logischen Sektoradressen. Der Quotient dieser Division ist die logische Blockadresse und der Rest ist die Sektornummer innerhalb des logischen Blockes. Die physikalische Blockadresse kann man herausfinden durch Nachschlagen in einer logisch-physikalischen Blockzuordnungs- bzw. Blockabbildungstabelle.
  • Das folgende Beispiel veranschaulicht, wie man den physikalischen Ort eines Sektors erhält, wenn seine logische Sektoradresse bekannt ist. Unter der Annahme, daß eine logische Sektoradresse #32 gegeben ist (s. 1D), wird diese Adresse durch die Anzahl der Sektoren innerhalb eines Blockes (die in diesem Fall zehn ist) geteilt. Der Quotient der Division ist 3, und der Rest ist 2. Demnach ist die logische Blockadresse 3, was der Quotient der obigen Division ist. Dies wird übersetzt in die physikalische Block-ID 11, die man von dem Inhalt des Eingangspuffers erhält, der mit 3 indiziert ist. Der Rest 2 der obigen Division ist die Sektorreihenfolge relativ zu der oben erhaltenen physikalischen Block-ID. Da die Sektornummer mit 0 beginnt, liegt der Sektor mit der logischen Sektoradresse #32 in dem dritten Sektor des Blockes mit der physikalischen Bock-ID 11.
  • Die Eingangspuffer, die in 1B1D dargestellt sind, sind vorzugsweise in Form von RAM (statisch oder dynamisch) implementiert. Dies deshalb, weil die Information in dem Eingangspuffer häufig verändert werden muß, und es kann die Effizienz vermindern, wenn der Eingangspuffer in Form von Flash-Speicher implementiert wird.
  • Es ist bekannt, daß in RAM gespeicherte Daten gelöscht werden, wenn ein Computersystem heruntergefahren bzw. abgeschaltet wird. Konsequenterweise geht die Information in einem Eingangspuffer verloren, wenn abgeschaltet wird. Es ist jedoch möglich, den Inhalt des Eingangspuffers zu rekonstruieren, indem die Attributinformation verwendet wird, die in dem Erweiterungsbereich jedes Blockes gespeichert ist.
  • (C) Lesen und Schreiben von Daten in dem bzw. in das Speichersystem
  • Das System der vorliegenden Erfindung wird verwendet, um Information zu speichern. Konsequenterweise ist es erforderlich, in die Blöcke und Sektoren gemäß der vorliegenden Erfindung zu schreiben und aus diesen zu lesen. Wie oben erwähnt, kann ein Flash-Speicher nicht vor dem Löschen überschrieben werden. Demnach ist es notwendig, neue Strukturen einzufügen, zusätzlich zu den Blöcken, die für das Speichern von Daten verwendet werden.
  • In einer Ausführungsform der vorliegenden Erfindung werden die Blöcke in Arbeits-(W)-Blöcke, einem Übergangs-Q-Puffer und eine löschbare (E) Schlange aufgeteilt. Der W-Puffer wird verwendet, um Daten zu speichern. Der Q-Puffer wird verwendet als ein temporärer Schreibepuffer für einen ausgewählten W-Block. Dies wird benötigt, weil W-Blöcke nicht direkt aktualisiert werden können. Blöcke, die gelöscht werden sollten, werden in dem E-Puffer angeordnet. Wie unten erläutert, ergibt sich die Einführung der E-Schlange aus dem Erfordernis der Wiedergewinnung bzw. Rezyklierung von Blöcken, so daß eine nahezu unendliche Zufuhr von Q-Puffern aus einer festen Anzahl physikalischer Blöcke erzeugt werden kann. Die bevorzugte Größe der E-Schlange wird auf der Basis von Benutzeranwendungen festgelegt.
  • (1) Datenschreibvorgang
  • 2A veranschaulicht ein Verfahren zum Schreiben gemäß der vorliegenden Erfindung. Es sei angenommen, daß es insgesamt zehn Blöcke gibt. Wiederum sollte darauf hingewiesen werden, daß die Anzahl der Blöcke in 2A lediglich dem Zwecke der Veranschaulichung dient und daß die tatsächliche Anzahl von Blöcken sehr groß sein könnte. Die Block-IDs sind in einem Eingangspuffer 132e enthalten. Acht dieser Blöcke werden verwendet, um Daten zu speichern (diese Blöcke sind die oben erwähnten W-Blöcke). Der verbleibende Block könnte als der Q-Puffer oder als E-Schlange zugewiesen werden. Man beachte, daß die Anzahl von Blöcken in jeder Kategorie in diesem Beispiel lediglich beispielhaft wiedergegeben wird. Unterschiedliche Benutzeranwendungen könnten zu der Zuordnung unterschiedlicher Anzahlen von Blöcken auf die verschiedenen Kategorien führen.
  • Ein Verfahren des Schreibens beinhaltet das sequentielle Schreiben in die W-Blöcke, jeweils in einen nach dem anderen. In der vorliegenden Erfindung kann nicht direkt in die W-Blöcke geschrieben werden. Statt dessen wird der Q-Puffer verwendet, um die Daten aufzunehmen. In 2A ist angenommen, daß ein Block mit der Block-ID von 3 als der Q-Puffer ausgewählt wird. Es sei weiterhin angenommen, daß dieser Q-Puffer verwendet wird als ein Ersatz bzw. Surrogat für den W-Block, der eine lineare logische Blockadresse hat, die dem sechsten Block entspricht. Dieser Block hat eine Block-ID von 8. Demnach werden jegliche Daten, die in den sechsten Block geschrieben werden sollen, in den Q-Puffer geschrieben.
  • 2B zeigt den Anfangszustand des Q-Puffers 158 und des sechsten Blockes 160. Diese beiden Blöcke enthalten eine Mehrzahl von Sektoren. Es sei angenommen, daß all die Sektoren in dem sechsten Block 116 Daten enthalten und als "in Gebrauch" markiert sind. Andererseits sind alle Sektoren in dem Q-Puffer 158 als "nicht in Gebrauch" markiert, da der Q-Puffer anfänglich leer ist.
  • Wenn Daten in den Q-Puffer 158 geschrieben werden, werden die entsprechenden Sektoren in dem Q-Puffer als "in Gebrauch" markiert. Unmittelbar danach werden die entsprechenden Sektoren in dem sechsten Block 160 als "verunreinigt" bzw. "dirty" markiert. Dies ist in 2C dargestellt.
  • Wenn es erwünscht ist, einen Q-Puffer zuzuordnen, so daß er einen anderen W-Block bedient, so ist es notwendig, alle gültigen Daten in dem sechsten Block 160 in den Q-Puffer 158 zu kopieren. Die folgenden Schritte werden bei dem Kopieren nachvollzogen: (i) markiere einen Sektor in dem Q-Puffer als in Gebrauch, dann (ii) markiere den entsprechenden Sektor in dem W-Block als "dirty". Dies ist in 2D dargestellt.
  • Nachdem die Datenübertragung abgeschlossen ist, wird der Block, der die Block-ID von 8 hat, in einen Block der E-Schlange umgewandelt. Der ursprüngliche Q-Puffer mit der Block-ID 3 ersetzt den sechsten W-Block. Dies wird in 3 dargestellt.
  • Wenn es erforderlich ist, in den anderen W-Block zu schreiben, muß ein anderer Q-Puffer zugeordnet werden. Einer der Blöcke in der E-Schlange wird gelöscht und zu einem Q-Puffer umgewandelt. Dies ist in 4 dargestellt, in welcher der Block, welcher eine Block-ID von 6 hat, für das Löschen ausgewählt wird. Dieser Block wird dann in einen Q-Puffer umgewandelt. Dieser Block wird dann verwendet, um den vorgesehenen W-Block (den zweiten W-Block in 4) zu bedienen.
  • (2) Datenlesebetrieb
  • Was das Adressieren angeht, so ist das Lesen dem Schreiben ähnlich. Die meisten Datenschreibevorgänge beinhalten das Schreiben eines Stromes von Daten auf einen speziellen Bereich von logischen Sektoradressen. Demnach ist es notwendig, die spezifische logische Sektoradresse zuerst den W-Blöcken zuzuordnen und dann den oben beschriebenen Schreibvorgang auszuführen. In ähnlicher Weise wird das Lesen normalerweise auf einem bestimmten Bereich der logischen Sektoradresse ausgeführt.
  • Wenn eine Anwendung eine Leseaufgabe durchführen möchte, so sendet sie einen Befehl an die Steuerung 110 nach 1. Die Steuerung 110 berechnet dann die entsprechende physikalische Adresse, wo die angeforderten Daten gespeichert sind und liefert der Anwendung die Daten. Das Verfahren der Zuordnung bzw. Abbildung logischer Sektoradressen auf physikalische Orte, wo die Daten gespeichert werden, wird unter der Abschnittsüberschrift "Abbilden logischer Speicheradressen auf physikalische Flash-Speicheradressen" beschrieben. Wie im Zusammenhang mit dem obigen Datenschreibevorgang beschrieben wurde, können gültige Daten in den W-Blöcken oder dem Q-Puffer gespeichert werden. Wenn die Steuerung 110 feststellt, daß die Daten, die gelesen werden sollen, in einem W-Block angeordnet sind, der nicht durch einen Q-Puffer bedient wird, so müssen die Daten in dem W-Block gültig sein, und dieser Bereich von Daten wird an die Anwendung geliefert. Wenn die zu lesenden Daten in einem W-Block angeordnet sind, der durch einen Q-Puffer bedient wird, so könnten die tatsächlich zurückgelieferten Daten entweder von dem W-Block oder aus dem Q-Puffer kommen, je nachdem, ob die Daten in dem W-Block gültig sind. Es sollte jedoch eine gültige Kopie von Daten vorliegen, da die alten Daten in einem W-Block als "dirty" markiert werden, nachdem neue Daten in seinen entsprechenden Q-Puffer geschrieben worden sind.
  • (D) Blockwiedergewinnung (Rezyklierung)
  • Wie oben erläutert, besteht eine der Eigenschaften des Flash-Speichersystems der vorliegenden Erfindung darin, daß Blöcke in unterschiedliche Kategorien aufgeteilt werden, die jeweils dafür ausgelegt sind, eine spezielle Funktion auszuüben. Das obige Beispiel zeigt auch, daß ein Bedarf an einer konstanten Zufuhr von Q-Blöcken besteht. Weiterhin müssen verunreinigte bzw. "dirty" Blöcke ausgesondert werden. Da die Anzahl von Blöcken in einem Flash-Speicher begrenzt ist, besteht ein Bedarf, diese verunreinigten Blöcke in Q-Blöcke umzuwandeln. In der vorliegenden Architektur können die Blöcke von einer Kategorie in eine andere Kategorie umgewandelt werden. Im Ergebnis gibt es eine offensichtlich endlose Versorgung mit Q-Blöcken.
  • Es wird jetzt die Umwandlung von physikalischen Blöcken beschrieben. In der vorliegenden Erfindung kann ein Speicherblock in einer der folgenden Kategorien angeordnet werden: löschbar-leer ("E/C"), schlecht bzw. "bad" ("B"), Hauptarbeitsblock ("W"), Folgepuffer ("Q") und Nichtfolgepufter ("X"). Der X-Puffer wird für ein nicht-sequentielles Schreiben verwendet, was sich von dem Q-Puffer, der für das oben beschriebene sequentielle Schreiben verwendet wird, unterscheidet. Die Einzelheiten des nicht-sequentiellen Schreibens werden in einem getrennten Abschnitt im einzelnen beschrieben.
  • Eine der Eigenschaften von Flash-Speichern besteht darin, daß Blöcke während des Betriebs fehlerhaft werden können. Diese Blöcke sollten markiert werden, so daß sie nicht wieder verwendet werden. Blöcke in der B-Kategorie sind Blöcke, die fehlerhaft sind. Diese Kategorie wird hier eingeführt, so daß ein vollständiges Bild der Blockumwandlung dargestellt werden kann.
  • Die Beziehung zwischen diesen Kategorien ist in 5 dargestellt. In dieser Architektur werden die W-Blöcke (beispielsweise die Blöcke 172174) verwendet, um Daten in einem linearen Adressierschema zu speichern. Demnach wird jedem W-Block ein gewisser Adreßbereich in dem Schema zugeordnet. In vielen Situationen gibt es eine große Anzahl von W-Blöcken. Daten können nicht direkt in die W-Blöcke geschrieben werden. Das Schreiben neuer Daten kann entweder auf einen Q-Puffer 176 oder einen X-Puffer 177 geleitet werden. In dieser Ausführungsform wird der Q-Puffer für das sequentielle Schreiben neuer Daten verwendet, und der X-Puffer wird für das nicht-sequentielle Schreiben von neuen Daten verwendet. Die Q- und X-Puffer erhält man, wenn sie benötigt werden, aus einem Vorrat leerer Blöcke (wie z.B. der Blöcke 181183) in der E/C-Kategorie (dargestellt durch Pfeile 178 und 179). W-Blöcke mit alten oder ungültigen Daten können als verunreinigt markiert werden und werden dann in die E/C-Kategorie gebracht (dargestellt durch einen Pfeil 185). Verunreinigte Blöcke in der E/C-Kategorie werden gelöscht, so daß daraus leere Blöcke entstehen. Zu geeigneten Zeitpunkten (wie im einzelnen noch erläutert wird) kann ein Q-Puffer in einen W-Block umgewandelt werden (dargestellt durch einen Pfeil 186), und ein X-Puffer kann in die E/C-Kategorie gebracht werden (dargestellt durch den bidirektionalen Pfeil 179). Wenn einige der Blöcke fehlerhaft sind, so werden sie in die B-Kategorie (beispielsweise Böcke 191193) gebracht. Dies wird durch die Pfeile 195197 in 5 dargestellt.
  • Wie oben in Verbindung mit 1C erläutert wurde, hat jeder Block einen Erweiterungsbereich 148. Dieser Bereich speichert Attributinformation, die verwendet werden kann, um die Kategorie eines Blockes zu bestimmen. Die Einzelheiten der Attributinformation werden nachstehend beschrieben.
  • (E) Identifizieren der Kategorien von Blöcken und Sektoren
  • Vorstehend wurde die Architektur des vorliegenden Flash-Speichersystems beschrieben. Es ist möglich, das Speichern von Daten gemäß einem Adressierschema auf Sektorbasis zu handhaben, Daten darin zu aktualisieren und Daten daraus zu holen. Ein Aspekt der Architektur besteht darin, daß Blöcke in Kategorien aufgeteilt sind. Konsequenterweise besteht das Erfordernis festzustellen, zu welcher Kategorie ein Block gehört.
  • Wie oben in Verbindung mit 1C dargestellt wurde, hat jeder Sektor einen Sektorattributbereich und jeder Block hat einen Erweiterungsbereich für das Speichern von Statusinformation eines Sektors bzw. Kategorieinformation eines Blockes.
  • Andere Verfahren zur Verwendung des Sektorattributbereiches und des Erweiterungsbereiches werden in einer Patentanmeldung offenbart, die den Titel trägt "Method and System for Managing a Flash Memory Mass Storage System" (Anwaltsaktenzeichen 17538.871), die am selben Tag wie die vorliegende Anmeldung eingereicht wurde und von denselben Erfindern stammt.
  • (F) Alternative Ausführungsform: impliziert verunreinigt (implied dirty)
  • Aus der obigen Beschreibung erkennt man, daß die Architektur der vorliegenden Erfindung flexibel ist und Probleme behandeln kann, die aus den besonderen Eigenschaften von Flash-Speichern herrühren. Es ist jedoch möglich, die Leistungsfähigkeit weiter zu verbessern. Ein alternativer Vorgang, der "implizit verunreinigt" (implied dirty) genannt wird, kann in der vorliegenden Erfindung in vorteilhafter Weise verwendet werden. Wie unten erläutert, reduziert diese Prozedur die Anzahl der Programmierungen, die für den Flash-Speicher benötigt werden, um alte Daten als verunreinigt zu markieren. Da die Zeitdauer für das Programmieren relativ lang ist, kann diese Vorgehensweise die Leistungsfähigkeit des Flash-Speichersystems der vorliegenden Erfindung verbessern.
  • Ein Beispiel, welches die Vorgehensweise des implizierten Verunreinigens veranschaulicht, ist in den 6D6F dargestellt. Um die Unterschiede zwischen diesem Vorgang und dem regulären Vorgang (der in Bezug auf die 2B2D beschrieben wurde) zu veranschaulichen, wird die entsprechende reguläre Vorgehensweise in den 6A6C dargestellt. 6A zeigt, daß alle Sektoren in einem W-Block 762 für gespeicherte Daten verwendet werden (d.h. sie sind als "in Gebrauch" markiert). Andererseits sind alle Sektoren in einem Q-Puffer 764, der den W-Block 762 bedient, nicht in Gebrauch (als "nicht in Gebrauch" markiert). Demnach ist der Q-Puffer 764 ein leerer (sauberer) Puffer. 6B zeigt, daß einige der unbenutzten Sektoren in dem Q-Puffer 764 für das Speichern von Daten in Gebrauch sind (markiert als "nicht in Gebrauch in Gebrauch", die hier als "in Gebrauch" bezeichnet werden). Die entsprechenden Sektoren in dem W-Block 762 sind als verunreinigt markiert (markiert als "in Gebrauch verunreinigt" und sie werden hier als "verunreinigt" bezeichnet). Wenn es notwendig ist, den W-Block 762 zu leeren, müssen alle gültigen Daten darin (d.h. diejenigen, die als "in Gebrauch" und nicht "verunreinigt" markiert sind) in den Q-Puffer 764 kopiert werden. 6C zeigt den Q-Puffer 764 und den W-Block 762 nach einem Säuberungs- bzw. Bereinigungsvorgang. Alle Sektoren in dem Q-Puffer 764 sind nunmehr als "in Gebrauch" markiert und alle Sektoren in dem W-Block 762 sind nun als "verunreinigt" markiert.
  • Die Situation bei der Vorgehensweise des impliziten Verunreinigens, welche der 6A entspricht, ist in 6D dargestellt. Wiederum sind alle Sektoren in einem W-Block 766 in Gebrauch für das Speichern von Daten (als "in Gebrauch" markiert). Andererseits sind alle Sektoren in einem Q-Puffer 768 nicht in Gebrauch (als "nicht in Gebrauch" markiert). 6E zeigt, daß einige der nicht in Gebrauch befindlichen Sektoren in dem Q-Puffer 768 verwendet werden, um Daten zu speichern (als "nicht in Gebrauch in Gebrauch" markiert und sie werden hier als "in Gebrauch" bezeichnet). Die entsprechenden Sektoren in dem W-Block 766 sind jedoch nicht als verunreinigt markiert. Demnach bleiben alle Sektoren in dem W-Block 766 in dem "in Gebrauch"-Zustand. Es besteht kein Bedarf, die entsprechenden Sektoren in dem W-Block 766 als verunreinigt zu markieren, da sie als verunreinigt angesehen werden, wenn die entsprechenden Sektoren in dem Q-Puffer 768 als "in Gebrauch" markiert werden. Wenn es notwendig ist, den W-Block 766 zu bereinigen, wird zuerst der Q-Puffer abgetastet. Nur die Sektoren in dem W-Block 766, welche den "nicht in Gebrauch"-Sektoren in dem Q-Puffer 768 entsprechen, müssen in den Q-Puffer kopiert werden. 6F zeigt das Ergebnis eines Bereinigungsvorganges. Alle Sektoren in dem Q-Puffer 768 sind nun nach dem Kopieren als "in Gebrauch" markiert. Es besteht jedoch kein Bedarf, die Sektoren in dem W-Block 766 zu markieren. Im Ergebnis, besteht auch kein Bedarf, den W-Block 766 zu dem Zweck, die Sektoren als verunreinigt zu markieren, zu programmieren. Konsequenterweise wird die Arbeitsweise vereinfacht und die Leistungsfähigkeit verbessert.
  • Beim Lesen von Daten, die unter Verwendung des Verfahrens bzw. der Vorgehensweise des implizierten Verunreinigens verarbeitet werden, muß der Q-Puffer zuerst abgetastet werden. Wenn die Daten in dem Q-Puffer als "in Gebrauch" markiert sind, sind diese Daten gültige Daten. Wenn die Daten in dem Q-Puffer als "nicht in Gebrauch" markiert sind, so muß man zu dem entsprechenden Sektor des W-Blockes gehen, um die gültigen Daten zu finden.
  • (G) Alternative Ausführungsform: Nicht-sequentielles Schreiben und Lesen
  • Auch wenn es möglich ist, ein Flash-Speichersystem unter Verwendung der oben beschriebenen W-Blöcke, Q-Puffer und Löschschlangen zu verwenden, ist das System möglicherweise nicht in der Lage, ein zufälliges bzw. wahlweises Aktualisieren von Daten in effektiver Weise zu handhaben. Wenn die Anforderung für eine Sektoraktualisierung nicht-sequentiell, sondern in zufälliger Reihenfolge eintrifft, muß das System möglicherweise die Q-Puffer häufig bereinigen. Der Bereinigungsvorgang umfaßt das Verschieben von gültigen Sektoren von einem W-Block in den Q-Puffer. Dies ist ein zeitaufwendiger Vorgang, da die Programmiergeschwindigkeit von Flash-Speichern relativ langsam ist. Man betrachte den schlechtesten Fall, daß die Schreibanforderung jedesmal ein anderen W-Block betrifft. In diesem Fall muß das System, jedesmal, wenn ein Sektor beschrieben wird, den Q-Puffer bereinigen, um einen neuen Q-Puffer für den neuen Schreibvorgang zuzuordnen. Da es in dem alten W-Block nur einen Verunreinigungssektor gibt, müßten all die anderen gültigen Sektoren in den alten Q-Puffer verschoben werden. Die mit dem Schreiben eines Sektors in diesem Fall verbundene Zusatzlast ist in diesem schlechtesten Fall extrem groß. Um dieses Leistungsfähigkeitsproblem zu überwinden, sollte ein neuer Mechanismus für die effiziente Handhabung von Zufallsschreibvorgängen entwickelt werden. Der nicht-sequentielle Puffer (auch X-Puffer genannt), ist für diesen Zweck ausgelegt.
  • Der nicht-sequentielle Puffer zielt darauf ab, zufällige Schreibvorgänge abzupuffern und der sequentielle Puffer (auch Q-Puffer genannt) ist dafür ausgelegt, sequentielle Schreibvorgänge abzupuffern. Wann immer eine Schreibanforderung angenommen wird, so wertet das System zuerst aus, ob diese Anforderung eine sequentielle oder nicht-sequentielle ist. Daten sequentieller Schreibvorgänge werden in den Q-Puffer gegeben. Daten nicht-sequentieller Schreibvorgänge werden in den X-Puffer gegeben, wenn die gültigen Daten dieser angeforderten Adresse in dem Q-Puffer nicht vorliegen. Ansonsten werden sie auch in den Q-Puffer gegeben. Diese Einschränkung ist erforderlich, da in der vorliegenden Erfindung Sektoren in dem Q-Puffer nicht als "verunreinigt" markiert werden dürfen. Wenn die Daten des nicht-sequentiellen Schreibvorganges in den X-Puffer gegeben werden, während der gültige Sektor in dem Q-Puffer vorliegt, sollte der gültige Sektor in dem Q-Puffer als verunreinigt markiert werden. Der Q-Puffer wird schließlich in einen W-Block umgewandelt. Wenn dies erfolgt, sollten alle gültigen Daten in dem W-Block in ihre entsprechende Position in dem Q-Puffer verschoben werden. Die Daten des nicht-sequentiellen Schreibens, die in den X-Puffer gegeben wurden, sollten an ihre entsprechende Position in dem Q-Puffer verschoben werden. Dies ist jedoch nicht erlaubt, weil ein Flash-Speicher nicht vor dem Löschen überschrieben werden kann.
  • Alle Schreibanforderungen sollten zuerst in sequentielle oder nicht-sequentielle Schreibvorgänge klassifiziert werden. Das folgende definiert sequentielles und nicht-sequentielles Schreiben auf der Basis eines einfachen Prinzips. Es sei angenommen, daß R die Referenzsek toradresse und S(n) die Sektoradresse der nten Schreibanforderung ist. Die nte Schreibanforderung ist sequentiell, wenn S(n) = (R + 1) mod m,wobei m die Gesamtzahl der Sektoren und mod die Modulofunktion ist.
  • Der Referenzsektoradresse R wird ein neuer Wert von S(n) zugeordnet, wenn die nte Schreibanforderung sequentiell ist. Ansonsten wird der Wert von R nicht aktualisiert. Ein nichtsequentieller Schreibvorgang bezieht sich auf alle Schreibvorgänge, die nicht-sequentiell sind.
  • Auch wenn die obige Definition den grundlegenden Aspekt des sequentiellen Schreibens erläutert, ist sie möglicherweise nicht in der Lage, alle geordneten Schreibsequenzen zu erfassen. Man betrachte die folgende Reihenfolge von Schreibanforderungen, die durch die logischen Sektoradressen: 1, 2, 3, 5, 6, 7, 8 dargestellt werden. Die ersten drei Anforderungen sind sequentielle Schreibvorgänge entsprechend der obigen Definition. Wenn der dritte Schreibvorgang abgeschlossen ist, wird die Referenzsektoradresse mit einem Wert von 3 aktualisiert, da der dritte Schreibvorgang ein sequentieller Schreibvorgang ist. Der vierte Schreibvorgang mit der logischen Sektoradresse 5 wird als nicht sequentieller Schreibvorgang klassifiziert, so daß die Referenzsektoradresse nicht aktualisiert wird. Auf der Basis der obigen Definition werden alle Anforderungen, die auf die vierte Anforderung fallen, ebenfalls als nicht-sequentiell klassifiziert, da die Referenzsektoradresse 3 ist. Es ist aber offensichtlich, daß die Schreibanforderungen 5, 6, 7 und 8 in einer geordneten Folge ankommen, die als sequentiell klassifiziert werden sollte. Wie man an diesem Beispiel sieht, ist es erforderlich, zusätzlich die nicht-sequentiellen Schreibvorgänge zu überprüfen, so daß die geordnete Schreibsequenz, die auf einen nichtsequentiellen Schreibvorgang folgt, identifiziert bzw. erkannt werden kann. Für jedes nichtsequentielle Schreiben sollte die folgende Bedingung überprüft werden:
    Falls ein nicht-sequentieller Schreibvorgang S(n) gemäß der obigen Definition die Bedingung erfüllt S(n) = (S(n – 1) + 1) mod mwobei S(n – 1) die logische Sektoradresse der vorangehenden Schreibanforderung ist, so wird der nicht-sequentielle Schreibvorgang S(n) als ein sequentieller Schreibvorgang definiert und die Referenzsektoradresse R wird auf den Wert von S(n) aktualisiert.
  • Diese Definition zeigt, daß ein nicht-sequentieller Schreibvorgang als ein sequentieller Schreibvorgang klassifiziert werden kann, indem die logische Sektoradresse der vorangehenden Schreibanforderung überprüft wird. In einer praktischen Implementierung kann es notwendig sein, mehrere vorangehende Schreibanforderungen zu überprüfen. Weiterhin könnte die Regel für das Erfassen sequentieller Schreibvorgänge dynamisch verändert werden, um eine Anpassung an ein aktuelles Muster von Schreibfolgen vorzunehmen. Beispielsweise können ähnliche Regeln angewendet werden, um ein in der Reihenfolge umgekehrtes sequentielles Schreiben zu erfassen, bei welchem die logische Sektoradresse der Schreibfolge entsprechend einer absteigenden Ordnung bzw. Reihenfolge verläuft.
  • (1) Schreiben unter Verwendung sequentieller und nicht-sequentieller Puffer
  • Es wird nunmehr der Vorgang des Lesens und Schreibens von Daten in dem Flash-Speichersystem 100 beschrieben. 7 ist ein Flußdiagramm 250, welches zeigt, wie neue oder aktualisierte Daten in geeigneten Blöcken des Systems 100 geschrieben werden. Das Flußdiagramm beginnt am Punkt 252. Am Punkt 254 empfängt die Steuerung 110 (dargestellt in 1A) die lineare Sektoradresse der Eingangsdaten. Die Steuerung 110 wandelt dann die lineare Sektoradresse in logische Block- und Sektorkoordinaten um (Schritt 256). In dieser Ausführungsform wird das Schreiben jeweils sektorweise ausgeführt. In Schritt 258 bestimmt die Steuerung 110, ob die Eingangsdaten in einen sequentiellen (d.h. Q-) Puffer oder einen nichtsequentiellen (d.h. X-) Puffer geschrieben werden sollen. Wenn das Schreiben in einen sequentiellen Puffer erfolgen soll, bestimmt die Steuerung 110, ob die Sektoradresse dieser Eingangsdaten dieselbe ist wie die Adresse von Daten, die bereits in dem sequentiellen Puffer vorlagen (Schritt 260). Wenn die Antwort negativ ist, so werden die Eingangsdaten in den sequentiellen Puffer geschrieben (Schritt 262). Die Steuerung 110 stellt dann fest, ob die Sektoradresse der Eingangsdaten dieselben ist wie die Adresse der Daten, die bereits in dem nicht-sequentiellen Puffer vorlagen (Schritt 264). Wenn die Antwort positiv ist, so wird der Sektor in dem nichtsequentiellen Puffer, der dieselbe Sektoradresse wie die Eingangsdaten hat, als verunreinigt markiert (Schritt 266). Das Flußdiagramm 250 endet dann (Schritt 268). Wenn die Antwort auf Schritt 264 negativ ist, verzweigt sich das Flußdiagramm 250 in den Schritt 270, d.h. der Sektor in dem W-Block, welcher der Sektoradresse der Eingangsdaten entspricht, wird als verunreinigt markiert. Das Flußdiagramm 250 endet dann.
  • Es ist wichtig, die Schritte 264 und 266 auszuführen, da die Eingangsdaten eine Aktualisierung von Daten sein können, welche zuvor als Ergebnis eines vorherigen, nichtsequentiellen Schreibvorganges in dem nicht-sequentiellen Puffer gespeichert sein können. Dementsprechend müssen diese Daten als verunreinigt markiert werden.
  • Gemäß Schritt 260 schaltet die Steuerung 10, wenn die Antwort positiv ist (was anzeigt, daß die Eingangsdatenadresse dieselbe ist wie die Adresse der Daten in dem sequentiellen Puffer), den sequentiellen Puffer in einen W-Block um (Schritt 272). Aus der Löschschlange erhält man einen neuen sequentiellen Puffer. Die Eingangsdaten werden dann in den neuen sequentiellen Puffer geschrieben (Schritt 274). Der neue W-Block (welcher Daten enthält, welche dieselbe Adresse haben wie die Eingangsdaten), wird dann als verunreinigt markiert (Schritt 270). Dann endet das Flußdiagramm 250.
  • Es ist wichtig, den Schritt 272 auszuführen, da Flash-Speicher vor dem Löschen nicht überschrieben werden kann. Wenn also ein Sektor in einem sequentiellen Puffer zuvor mit Daten beschrieben worden ist, kann auf denselben Sektor nicht erneut geschrieben werden. Im Ergebnis muß ein neuer sequentieller Puffer zugeordnet werden, bevor neue Daten geschrieben werden können. Es wird nun die Situation für den nicht-sequentiellen Schreibvorgang beschrieben. In Schritt 280 stellt die Steuerung 110 fest, ob die Eingangsdatenadresse dieselbe ist wie die Adresse in dem sequentiellen Puffer. Wenn die Antwort negativ ist, werden die Eingangsdaten an den als nächsten verfügbaren Sektor in dem nicht-sequentiellen Puffer angehängt (Schritt 282). Die vollständige Adreßinformation wird ebenfalls in den nicht-sequentiellen Puffer geschrieben, da aufeinanderfolgende Sektoren in dem nicht-sequentiellen Puffer völlig verschiedene Adressen haben könnten. Die Steuerung 110 stellt dann fest, ob Daten, welche dieselbe Adresse haben, zuvor in den nicht-sequentiellen Puffer geschrieben worden sind (Schritt 284). Wenn die Antwort negativ ist, verzweigt das Flußdiagramm 250 in den Schritt 270, d.h. der Sektor in dem W-Block, welcher der Adresse der Eingangsdaten entspricht, wird als verunreinigt markiert. Das Flußdiagramm 250 endet dann. Wenn die Antwort positiv ist, werden die zuvor in den nicht-sequentiellen Puffer geschriebenen Daten als verunreinigt markiert (Schritt 286). Das Flußdiagramm 250 verzweigt dann in den Schritt 270, d.h. der Sektor in dem W-Block, welcher der Adresse der Eingangsdaten entspricht, wird als verunreinigt markiert. Dann endet das Flußdiagramm 250.
  • Gemäß Schritt 280 schaltet die Steuerung 110, wenn die Antwort positiv ist (was anzeigt, daß die Adresse der Eingangsdaten dieselbe ist wie die Adresse der Daten in dem sequentiellen Puffer), den sequentiellen Puffer in einen W-Block um (Schritt 272). Die Eingangsdaten müssen in diesem Fall nicht in den nicht-sequentiellen Puffer geschrieben werden. Statt dessen wird aus der Löschschlange ein neuer sequentieller Puffer zugeordnet. Die Eingangsdaten werden kann in den neuen sequentiellen Puffer geschrieben (Schritt 274). Der neue W-Block (welcher in Schritt 272 erzeugt wurde und Daten enthält, die dieselbe Adresse haben wie die Eingangsdaten) wird dann als verunreinigt markiert (Schritt 270). Dann endet das Flußdiagramm 250.
  • In der obigen Ausführungsform werden die sequentiellen und nicht-sequentiellen Puffer vor dem Markieren des entsprechenden W-Blockes als verunreinigt geschrieben bzw. beschrieben. Diese Reihenfolge in der Vorgehensweise stellt sicher, daß die alten Daten gültig bleiben, bis die neuen Daten korrekt geschrieben worden sind. Wenn der W-Block zuerst als verunreinigt markiert wird und wenn es dann Probleme beim Schreiben der neuen Daten in den sequentiellen oder nicht-sequentiellen Puffer gibt, wäre es unmöglich, die alten Daten wiederzugewinnen. Dies liegt daran, daß es mehr als einen W-Block geben könnte, der dieselbe Adresse hat. Man könnte deshalb unmöglich wissen, welcher verunreinigte Block der zuletzt als verunreinigt markierte Block ist.
  • (2) Lesen unter Einbeziehung sequentieller und nicht-sequentieller Puffer
  • Der Vorgang beim Lesen eines einzelnen Sektors von Daten ist in dem Flußdiagramm 300 der 8 dargestellt. Das Flußdiagramm 300 beginnt am Punkt 302. In Schritt 304 emp fängt die Steuerung 110 die lineare Adresse des interessierenden Sektors. In Schritt 306 wandelt die Steuerung 110 die lineare Adresse in einen W-Block um, ebenso wie die Sektorkoordinaten unter Verwendung der Zuordnung bzw. Abbildung, die oben beschrieben wurde. In Schritt 308 stellt die Steuerung 110 fest, ob der gewünschte Sektor sich in dem in Schritt 306 bestimmten W-Block befindet. Wenn die Antwort positiv ist, werden Daten aus dem W-Block gelesen (Schritt 310). Das Flußdiagramm 300 endet dann (Schritt 312).
  • Wenn die Antwort auf Schritt 308 negativ ist, so wird der sequentielle Puffer durchsucht, um festzustellen, ob er den gewünschten Sektor enthält (Schritt 314). Wenn die Antwort positiv ist, werden die Daten aus dem sequentiellen Puffer gelesen (Schritt 316). Dann endet das Flußdiagramm 300 (Schritt 318). Wenn die Antwort auf Schritt 314 negativ ist, so werden Daten aus dem nicht-sequentiellen Puffer gelesen (Schritt 320). Dann endet das Flußdiagramm 300 (Schritt 322).
  • (3) Beispiel, welches das sequentielle und nicht-sequentielle Schreiben veranschaulicht
  • Dieser Abschnitt ist vorgesehen, um die Wechselwirkung zwischen dem zyklischen Blockdurchlauf, dem sequentiellen Schreiben und dem nicht-sequentiellen Schreiben weiter zu veranschaulichen. Ein Beispiel für die Veranschaulichung der Wechselwirkung wird hier gegeben und in 9 dargestellt. Der Einfachheit halber sei angenommen, daß es vier physikalische Blöcke gibt, welche Block-IDs 1–4 haben. Zu Beginn funktionieren die Blöcke, welche die Block-IDs 1 und 2 haben, als die W-Blöcke W1 bzw. W2, der Block mit der Block-ID 3 funktioniert als Q-Puffer, und der letzte physikalische Block funktioniert als X-Puffer. Die Zuordnung zwischen der Block-ID und den Kategorien ist in einer Blockzuordnungstabelle 210 dargestellt. Es sei weiterhin angenommen, daß jeder Block vier Sektoren (S1 bis S4) hat. In diesem Beispiel sei angenommen, daß Daten sequentiell in die folgenden Sektoren geschrieben werden müssen: (W1, S3), (W1, S4), (W1, S1), (W2, S1). Zu Beginn nimmt man an, daß die zwei W-Blöcke gültige Daten enthalten (in 3 dargestellt durch ein Symbol V), während die Q- und X-Puffer als leer angenommen werden (in 9 durch ein Symbol "E" dargestellt).
  • In diesem Beispiel wird ein Q-Puffer für die Bedienung von W1 zugeordnet, weil das erste Schreiben in den W1-Block erfolgen soll. Daten, welche in (W1, S3) gespeichert werden sollten, werden in den dritten Sektor des Q-Puffers geschrieben. Nachdem die Daten in den Q-Puffer geschrieben wurden, werden die Daten, die in dem Sektor S3 des Blockes W1 vorlagen, als verunreinigt markiert (in 9 durch ein Symbol "D" dargestellt). Ähnliche Schritte werden verwendet beim Schreiben von Daten, die in (W1, S4) gespeichert werden sollten, da dies ein sequentielles Schreiben ist. Zu diesem Zeitpunkt ist der Inhalt von W1 der in dem Kasten 212 dargestellte, der Inhalt von W2 ist in dem Kasten 213 dargestellt, der Inhalt des Q-Puffers ist in dem Kasten 214 dargestellt, und der Inhalt des X-Puffers ist in der Box 215 dargestellt.
  • Das Schreiben in (W1, S1) folgt keiner sequentiellen Reihefolge von (W1, S4). Demnach werden die Daten in den X-Puffer geschrieben (siehe Box 217). Der Sektor S1 des W1-Blockes ist als verunreinigt markiert (siehe Box 218). Es gibt keine Änderung in W2 und dem Q-Puffer.
  • Es wird nunmehr das Schreiben in (W2, S2) beschrieben. Diese Schreibanforderung fällt außerhalb des Dienstbereiches des Q-Puffers. Als Folge davon muß dieser Q-Puffer bereinigt werden, so daß ein neuer Q-Puffer zugeordnet werden kann, der diese Schreibanforderung bedient. Alle gültigen Daten in dem X-Puffer, welche zu dem W1-Block gehören, müssen in den Q-Puffer verschoben werden (als Pfeil 220 in 9 dargestellt). In 3 wird der Sektor S1 des X-Puffers als verunreinigt markiert (in Box 226 dargestellt). Alle gültigen Daten, die in dem W1-Block verbleiben, müssen ebenfalls in den Q-Puffer verschoben werden (dargestellt als Pfeil 221 in 9). Der Q-Puffer wird dann in einen neuen W1-Block umgewandelt (indem die Attributinformation in dem Erweiterungsbereich verändert wird). Der alte W1-Block wird in der E/C-Kategorie angeordnet.
  • Nach dem Löschen des alten W1-Blockes wird er verwendbar. In diesem Beispiel wird er als neuer Q-Puffer zugeordnet. Dieser Q-Puffer wird verwendet, um den W2-Block zu bedienen. Der Inhalt der Blockzuordnungstabelle wird zu demjenigen verändert, der in der Box 224 dargestellt ist. Man beachte, daß in einem Speichersystem, welches viele Blöcke hat (anstatt nur vier Blöcke) der neue Q-Puffer nicht aus dem alten W1-Block entstehen muß.
  • Die neuen Daten für (W2, S1) werden nunmehr in den Sektor S1 des neuen Q-Puffers geschrieben (dargestellt durch ein Symbol "V"). Der entsprechende Sektor in dem W2-Block wird als verunreinigt markiert (dargestellt in Box 227).
  • Die in 9 dargestellten Schritte für den Umgang mit dem Fall, in welchem eine Schreibanforderung außerhalb des Dienstbereiches eines Q-Puffers liegt, wird in dieser Patentanmeldung als "Q-Puffer-Umwandlung" bezeichnet.
  • (H) Alternative Ausführungsform: Verwaltungseinheit
  • Das oben beschriebene System ist ein effizientes System für die Verwendung von Flash-Speichern als Massenspeichersystem. Üblicherweise wird der Eingangspuffer implementiert unter Verwendung von DRAM oder SRAM. In einigen Situationen wird das vorliegende System in einem System mit einer begrenzten Größe eines SRAM (beispielsweise in Microcontrolern) implementiert. Da der SRAM eine knappe Resource darstellt, ist es wünschenswert, die Größe des Eingangspuffers zu reduzieren. Ein Verfahren besteht darin, eine Anzahl von Blöcken zu einer "Verwaltungseinheit" zu gruppieren. Jedes Register in dem Eingangspuffer wird verwendet, um eine physikalische ID der Verwaltungseinheit zu speichern. Da die Anzahl bzw. der Umfang der Verwaltungseinheit kleiner ist als die Anzahl von Blöcken, kann die Anzahl von Registern in dem Eingangspuffer reduziert werden. Die Größe einer Verwaltungseinheit kann von Anwendern definiert werden, um deren Erfordernisse hinsichtlich Kosten und Leistungsfähigkeit zu erfüllen.
  • In der Ausführungsform, in welcher eine Verwaltungseinheit verwendet wird, beruhen die Blockwiedergewinnung, die Bereinigungsvorgänge und die Q-Puffer-Umwandlung auf den Verwaltungseinheiten. Als Folge davon müssen mehr Daten bei jedem Vorgang verarbeitet werden (beispielsweise in dem Wiedergewinnungs- bzw. Rezyklierungsvorgang verschoben werden). Dementsprechend wird die Leistungsfähigkeit des Systems abgesenkt. Die Verwendung der Verwaltungseinheit beinhaltet also ein Wechselspiel zwischen dem SRAM und der Leistungsfähigkeit. Das vor diesem Abschnitt beschriebene System entspricht der Situation, in welcher die Größe der Verwaltungseinheit einen Block umfaßt und hat die höchste Leistungsfähigkeit.
  • (I) Weitere Einzelheiten bezüglich des Kategorieüberganges
  • Der Übergang der Kategorien wird hier noch weiter beschrieben.
  • (a) E/C-Block in Q-Puffer
  • Wie oben dargelegt, können Daten nicht direkt in einen W-Block geschrieben werden. Statt dessen wird der Q-Puffer so zugeordnet, daß er als ein Surrogat bzw. Ersatz für den W-Block dient. Daten, die normalerweise in den W-Block geschrieben werden sollten, werden zuerst in diesen Q-Puffer geschrieben. Wenn der Q-Puffer voll ist, wird er in einen W-Block umgewandelt (indem die Attributinformation in seinem Erweiterungsbereich geändert wird). Wann immer ein sequentielles Schreiben erfolgt und diese neuen Daten nicht in dem W-Block angeordnet werden, der durch den aktuellen Q-Puffer bedient wird, wird ein neuer Q-Puffer von den E/C-Blöcken zugeordnet, damit er als Schreibepuffer für den neuen W-Block dient. Bevor der neue Q-Puffer zugeordnet wird, muß der alte Q-Puffer zuerst in einen W-Block umgewandelt werden. Der Übergang von einem E/C-Block zu einem Q-Puffer umfaßt die Veränderung einer kleinen Anzahl von Attributbits in seinem Erweiterungsbereich.
  • (b) Q-Puffer zu W-Block
  • Es gibt einige Situationen, in welchen ein Q-Puffer in einen W-Block umgewandelt werden muß. Eine Bedingung bzw. ein Zustand liegt vor, wenn eine sequentielle Schreibanforderung außerhalb des Dienstbereiches eines Q-Puffers fällt. Diese Situation ist oben in Verbindung mit dem Übergang von E/C-Block zu Q-Puffer im einzelnen beschrieben worden. Eine weitere Bedingung bzw. ein weiterer Zustand liegt dann vor, wenn ein X-Puffer voll ist: Alle Daten, die in dem X-Puffer gepuffert werden, müssen in den W-Block zurückgeschrieben werden, zu welchem die Daten gehören (dieser Vorgang wird X-Puffer-Bereinigung genannt).
  • Wenn dieser Zustand auftritt und Daten sich in dem X-Puffer befinden, die zu dem W-Block gehören, der durch den Q-Puffer bedient wird, sollte der Q-Puffer in einen W-Block umgewandelt werden. Dieser Übergang umfaßt die folgenden Schritte (dieser Vorgang wird die "Q-Puffer-Umwandlung" genannt):
    • (i) Bewege gültigen Sektor vom X-Puffer zum Q-Puffer, wenn diese Sektoren zu dem W-Block gehören, der durch den Q-Puffer bedient wird. Setze die übertragenen Sektoren in dem X-Puffer auf verunreinigt.
    • (ii) Verschiebe gültigen Sektor von dem W-Block in entsprechende Sektoren in dem Q-Puffer und markiere alle übertragenen Sektoren in dem W-Block als verunreinigt.
    • (iii) Ändere den Eingangspuffer, so daß der Q-Puffer die Position des W-Blockes einnimmt bzw. ersetzt.
    • (iv) Sende alten W-Block zum Löschen.
  • Um alle gültigen Daten in dem X-Puffer zu bereinigen, ist es erforderlich, zuerst den gesamten gültigen Sektor in dem X-Puffer abzutasten bzw. zu durchforsten, um die Inhaber dieser gültigen Sektoren zu finden. Für jeden Inhaber (W-Block) eines gültigen Sektors in dem X-Puffer führe die folgenden Schritte aus:
    • (i) Zuordnen eines Blockes von der E/C-Kategorie als Q-Puffer für den Besitzer des W-Blockes (der Q-Puffer dient als Schreibepuffer für den W-Block).
    • (ii) Führe einen "Q-Puffer-Umwandlungs"- bzw. "-Beförderungsvorgang" aus, wie oben beschrieben.
  • Wenn der obige Vorgang ausgeführt worden ist, sind alle Daten in dem X-Puffer als ungültig markiert. Dieser X-Puffer wird auf die E/C-Kategorie gesetzt und dann bereinigt bzw. gelöscht, so daß er in andere Kategorien überführt werden kann. Es wird dann ein neuer X-Puffer von den Blöcken in der E/C-Kategorie zugeordnet.
  • (c) W-Block zu E/C-Block
  • Der Übergang von einem W-Block zu einem E/C-Block tritt als der letzte Schritt der Q-Puffer-Umwandlung bzw. -Beförderung auf.
  • (d) X-Puffer zu E/C-Block
  • Der Übergang von einem X-Puffer zu einem E/C-Block tritt als der letzte Schritt des oben beschriebenen Bereinigens des X-Puffers auf.
  • (e) E/C-Block zu X-Puffer
  • Ein X-Puffer wird benötigt, wenn ein nicht-sequentieller Schreibvorgang auftritt und wenn kein X-Puffer existiert oder wenn ein nicht-sequentieller Schreibvorgang auftritt und der X-Puffer voll ist. Wenn ein X-Puffer benötigt wird, wird ein Block von der E/C-Kategorie in einen X-Puffer umgewandelt. Der Übergang von E/C zu X beinhaltet lediglich die Veränderung einiger Information in dem Erweiterungsbereich der E/C-Blöcke.
  • (f) Q-Puffer zu B-Block
  • Der Übergang vom Q-Puffer zum B-Block tritt auf, wenn ein Schreibversuch in einen Q-Puffer fehlschlägt. Unter diesen Umständen wird der Q-Puffer als "schlechter" Block markiert und wird niemals mehr für das Speichern von Daten verwendet.
  • (g) X-Puffer zu B-Block
  • Der Übergang von einem X-Puffer zu einem B-Block tritt auf, wenn ein Schreibversuch in den X-Puffer fehlschlägt. Unter diesen Umständen wird der X-Puffer als schlechter Block markiert und niemals mehr für das Speichern von Daten verwendet.
  • (h) E/C-Block zu B-Block
  • Der Übergang von einem E/C-Block zu einem B-Block tritt auf, wenn ein E/C-Block nicht erfolgreich gelöscht werden kann. Unter diesen Umständen wird der E/C-Block als schlechter Block markiert und niemals mehr für das Speichern von Daten verwendet.
  • Die Erfindung ist unter Bezug auf spezielle beispielhafte Ausführungsformen beschrieben worden. Verschiedene Modifikationen und Veränderungen können daran vorgenommen werden, ohne vom Schutzumfang der Erfindung abzuweichen. Die Beschreibung und die Figuren sind dementsprechend als veranschaulichend und nicht in einem beschränkenden Sinne zu verstehen. Die Erfindung wird nur durch die vorgesehenen Patentansprüche beschränkt.

Claims (15)

  1. Verfahren zum Verwenden von Flash-Speicher für die Implementierung eines Massenspeichersystems (100), welches aufweist: Aufteilen des Flash-Speichers in eine Mehrzahl von Blöcken mit mehreren Sektoren, Bestimmen eines ersten Satzes von Blöcken (W-Blöcken) aus der Mehrzahl von Blöcken mit mehreren Sektoren, wobei der erste Satz von Blöcken verwendet wird, um Daten zu speichern, die entsprechend einem vordefinierten Adressierschema organisiert sind, Bestimmen eines zweiten Blockes (Q-Puffer) aus der Mehrzahl von Blöcken mit mehreren Sektoren, wobei der zweite Block verwendet wird als ein temporärer Puffer zum Speichern von Daten, die sequentiell in einen Block in dem ersten Satz von Blöcken geschrieben werden sollen, Bestimmen eines dritten Blockes (X-Puffer) aus der Mehrzahl von Blöcken mit mehreren Sektoren, wobei der dritte Block verwendet wird als ein temporärer Puffer zum Speichern von Daten, die in nicht-sequentieller Weise in einen Block in dem ersten Satz von Blöcken geschrieben werden sollen, Identifizieren eines vierten Satzes von Blöcken (E/C-Block), die ungültige Daten enthalten, die gelöscht werden sollen, Umwidmen zumindest eines aus der Mehrzahl von Blöcken mit mehreren Sektoren zwischen dem ersten Satz von Blöcken, dem zweiten Satz von Blöcken und dem vierten Satz von Blöcken, wenn die Aktualisierung sequentielle Daten (260) enthält, Aktualisieren von Daten, die in einem Sektor eines ausgewählten Blockes in dem ersten Satz von Blöcken gespeichert sind, durch Schreiben der aktualisierten Daten in einen entsprechenden Sektor des zweiten Blockes und Markieren des entsprechenden Sektors des zweiten Blockes, und wenn die Aktualisierung nicht-sequentielle Daten (280) enthält und Daten, welche eine Adresse haben, die derjenigen der aktualisierten entsprechen, noch nicht in dem zweiten Block gespeichert sind, Aktualisieren der Daten, die in einem Sektor eines ausgewählten Blockes in dem ersten Satz von Blöcken gespeichert sind, durch Schreiben der aktualisierten Daten in einen Sektor des dritten Blockes.
  2. Verfahren nach Anspruch 1, welches weiterhin den Schritt des Schreibens von Adreßinformation für die nicht-sequentiellen Daten in einen nicht-flüchtigen Speicher, der zu dem dritten Block gehört, aufweist.
  3. Verfahren nach Anspruch 1, welches weiterhin den Schritt aufweist, daß festgestellt wird (258), ob die Aktualisierung nicht-sequentielle Daten enthält, indem Adressen früherer Aktualisierungen analysiert werden.
  4. Verfahren nach Anspruch 1, welches weiterhin die Schritte aufweist: Bestimmen von Sektoren in dem zweiten Block, welche nicht markiert sind, Kopieren von Daten aus Sektoren in einem Block in dem ersten Satz von Blöcken in die Sektoren in dem Block in dem zweiten Block, welche nicht markiert sind, und Ändern der Identifizierung des Blockes in dem zweiten Satz von Blöcken zu einem Block in dem ersten Satz von Blöcken.
  5. Verfahren nach Anspruch 1, welches weiterhin die Schritte aufweist: Zuordnen einer physikalischen Kennung (Block-ID) zu jedem der Mehrzahl von Blöcken mit mehreren Sektoren, Zuordnen einer logischen Adresse (150) zu jedem Block in dem Satz von Blöcken mit mehreren Sektoren, und Abbilden bzw. Zuordnen (132C) der physikalischen Kennung bzw. Identifizierung zu der logischen Adresse.
  6. Verfahren nach Anspruch 1, welches weiterhin die Schritte aufweist: Bestimmen (314), welcher Sektor in dem zweiten Block den Daten in einem zu lesenden Sektor entspricht, Bestimmen, ob der Sektor in dem zweiten Block markiert ist, und Erhalten (316) der Daten aus dem zweiten Block, falls der Sektor markiert ist, und Erhalten (310, 320) der Daten aus einem Block in dem ersten Satz von Blöcken oder von dem dritten Block, falls der Sektor nicht markiert ist.
  7. Verfahren nach Anspruch 1, welches weiterhin die Schritte aufweist: Verändern des zweiten Blockes zu einem Block in dem ersten Satz von Blöcken, und Verändern von Blöcken in dem ersten Satz von Blöcken in Blöcke des vierten Satzes von Blöcken.
  8. Verfahren nach Anspruch 1, wobei das Markieren eines entsprechenden Sektors des zweiten Blockes das Schreiben eines Parameters in eine nicht-flüchtige Speicherzelle umfaßt, welche zu dem zweiten Block gehört.
  9. Massenspeichersystem (100), welches aufweist: einen Flash-Speicher, der eine Mehrzahl von Blöcken mit mehreren Sektoren aufweist, eine Logikeinrichtung (110), um einen ersten Satz von Blöcken (W-Blöcken) aus der Mehrzahl von Blöcken mit mehreren Sektoren zu bestimmen, wobei der erste Satz von Blöcken verwendet wird, um Daten zu speichern, die entsprechend einem vordefinierten Adressierschema organisiert sind, eine Logikeinrichtung (110), um einen zweiten Block (Q-Puffer) aus der Mehrzahl von Blöcken mit mehreren Sektoren zu bestimmen, wobei der zweite Block als ein temporärer Puffer für das Speichern von Daten verwendet wird, die in einen Block in dem ersten Satz von Blöcken sequentiell geschrieben werden sollen, eine Logikeinrichtung für das Abbilden eines vierten Satzes von Blöcken (E/C-Blöcke) in der Mehrzahl von Blöcken, wobei der vierte Satz von Blöcken Daten enthält, die gelöscht werden sollen, eine Ressourceneinrichtung, um zumindest einen aus der Mehrzahl von Blöcken mit mehreren Sektoren zwischen dem ersten Satz von Blöcken, dem zweiten Satz von Blöcken und dem vierten Satz von Blöcken neu zuzuweisen, eine Logikeinrichtung (110), die in der Weise betreibbar ist, daß sie, falls die Aktualisierung sequentielle Daten enthält, Daten, die in einem Sektor eines ausgewählten Blockes in dem ersten Satz von Blöcken gespeichert sind, aktualisiert, indem die aktualisierten Daten in einen entsprechenden Sektor des zweiten Blockes geschrieben werden und der entsprechende Sektor des zweiten Blockes markiert wird, und, falls die Aktualisierung nicht-sequentielle Daten enthält und Daten, welche eine Adresse haben, die derjenigen der aktualisierten Daten entspricht, noch nicht in dem zweiten Block gespeichert sind, Daten, die in einem Sektor eines ausgewählten Blockes in dem ersten Satz von Blöcken gespeichert sind, aktualisiert, indem die aktualisierten Daten in einen Sektor des dritten Blockes geschrieben werden.
  10. System nach Anspruch 9, welches weiterhin eine Logikeinrichtung für das Schreiben von Adreßinformation für die nicht-sequentiellen Daten in einen nicht-flüchtigen Speicher, der zu dem dritten Block gehört, aufweist.
  11. System nach Anspruch 9, welches weiterhin eine Logikeinrichtung aufweist, um zu bestimmen, ob die Aktualisierung nicht-sequentielle Daten enthält, indem Adressen vorheriger Aktualisierungen analysiert werden.
  12. System nach Anspruch 9, welches weiterhin aufweist: eine Ressourceneinrichtung, die bestimmt, welche Sektoren in dem zweiten Block nicht markiert wurden, Daten aus Blöcken in dem ersten Satz von Blöcken in Sektoren in dem zweiten Block kopiert, die nicht markiert waren, und den zweiten Block zu einem Block in dem ersten Satz von Blöcken ändert.
  13. System nach Anspruch 9, welches weiterhin aufweist: eine Ressourceneinrichtung, die feststellt, welcher Sektor in dem zweiten Block zu lesenden Daten entspricht, und ob der festgestellte Sektor markiert ist und die Daten aus dem festgestellten Sektor erhält, und die Daten aus einem Block in dem ersten Satz von Blöcken oder von dem dritten Block erhält, wenn der festgestellte Sektor nicht markiert ist.
  14. System nach Anspruch 9, welches weiterhin aufweist: eine Ressourceneinrichtung, welche die Zuordnung bzw. Abbildung des zweiten Blockes und der Blöcke in dem ersten Satz von Blöcken verändert, und eine Ressourceneinrichtung, welche die Zuordnung bzw. Abbildung von Blöcken in dem ersten Satz von Blöcken zu Blöcken in dem vierten Satz von Blöcken verändert.
  15. System nach Anspruch 9, wobei: eine physikalische Identifizierung bzw. Kennung (Block-ID) den Blöcken in der Mehrzahl von Blöcken mit mehreren Sektoren zugeordnet wird, eine lokale Adresse (150) einem Block in der Mehrzahl von Blöcken mit mehreren Sektoren zugeordnet wird, und die physikalische Identifizierung auf die lokale Adresse abgebildet wird (132C).
DE69635962T 1996-11-25 1996-11-26 Flash-Speicher-Massenspeichersystem und Verfahren dafür Expired - Lifetime DE69635962T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/756,304 US5745418A (en) 1996-11-25 1996-11-25 Flash memory mass storage system
PCT/US1996/018973 WO1998024029A1 (en) 1996-11-25 1996-11-26 Flash memory mass storage system
US756304 2004-01-14

Publications (2)

Publication Number Publication Date
DE69635962D1 DE69635962D1 (de) 2006-05-11
DE69635962T2 true DE69635962T2 (de) 2006-11-16

Family

ID=25042900

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69635962T Expired - Lifetime DE69635962T2 (de) 1996-11-25 1996-11-26 Flash-Speicher-Massenspeichersystem und Verfahren dafür

Country Status (5)

Country Link
US (2) US5745418A (de)
EP (1) EP0882264B1 (de)
JP (1) JP4005142B2 (de)
DE (1) DE69635962T2 (de)
WO (1) WO1998024029A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220188223A1 (en) * 2020-12-16 2022-06-16 Micron Technology, Inc. Memory sub-system write sequence track

Families Citing this family (148)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6728851B1 (en) 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US8171203B2 (en) * 1995-07-31 2012-05-01 Micron Technology, Inc. Faster write operations to nonvolatile memory using FSInfo sector manipulation
US6081878A (en) * 1997-03-31 2000-06-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US5845313A (en) 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US6978342B1 (en) 1995-07-31 2005-12-20 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
JPH10154101A (ja) * 1996-11-26 1998-06-09 Toshiba Corp データ記憶システム及び同システムに適用するキャッシュ制御方法
US6411546B1 (en) * 1997-03-31 2002-06-25 Lexar Media, Inc. Nonvolatile memory using flexible erasing methods and method and system for using same
KR100251636B1 (ko) * 1997-04-10 2000-05-01 윤종용 소형컴퓨터시스템인터페이스방식접속을위한메모리장치
US6732293B1 (en) * 1998-03-16 2004-05-04 Symantec Corporation Method, software and apparatus for recovering and recycling data in conjunction with an operating system
GB9903490D0 (en) * 1999-02-17 1999-04-07 Memory Corp Plc Memory system
US6148354A (en) 1999-04-05 2000-11-14 M-Systems Flash Disk Pioneers Ltd. Architecture for a universal serial bus-based PC flash disk
US7055055B1 (en) 1999-04-23 2006-05-30 Symantec Corporation Write cache flushing method for reducing data corruption
AU6060800A (en) * 1999-06-30 2001-01-31 General Electric Company Electronic electricity meter including flash memory
US7051055B1 (en) 1999-07-09 2006-05-23 Symantec Corporation Optimized disk storage defragmentation with swapping capabilities
AU6081200A (en) * 1999-07-09 2001-01-30 Eric D. Schneider Optimized disk storage defragmentation with swapping capabilities
US7660941B2 (en) * 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
US7620769B2 (en) * 2000-01-06 2009-11-17 Super Talent Electronics, Inc. Recycling partially-stale flash blocks using a sliding window for multi-level-cell (MLC) flash memory
US6715067B1 (en) * 1999-09-21 2004-03-30 Intel Corporation Initializing a processor-based system from a non-volatile re-programmable semiconductor memory
US6578054B1 (en) 1999-10-04 2003-06-10 Microsoft Corporation Method and system for supporting off-line mode of operation and synchronization using resource state information
CN1088218C (zh) * 1999-11-14 2002-07-24 邓国顺 用于数据处理系统的快闪电子式外存储方法及其装置
US6735666B1 (en) * 2000-02-22 2004-05-11 Wind River Systems, Inc. Method of providing direct user task access to operating system data structures
US6741978B1 (en) * 2000-04-12 2004-05-25 Intel Corporation Accessing file data stored in non-volatile re-programmable semiconductor memories
JP3323185B2 (ja) * 2000-06-19 2002-09-09 田中電子工業株式会社 半導体素子接続用金線
US7167944B1 (en) 2000-07-21 2007-01-23 Lexar Media, Inc. Block management for mass storage
US6266273B1 (en) * 2000-08-21 2001-07-24 Sandisk Corporation Method and structure for reliable data copy operation for non-volatile memories
US7269090B2 (en) * 2001-01-30 2007-09-11 Freescale Semiconductor, Inc. Memory access with consecutive addresses corresponding to different rows
JP2002351685A (ja) * 2001-05-22 2002-12-06 Sankyo Seiki Mfg Co Ltd 不揮発性メモリのデータ更新方法及び制御装置
KR100389867B1 (ko) 2001-06-04 2003-07-04 삼성전자주식회사 플래시 메모리 관리방법
GB0123421D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Power management system
GB0123416D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
GB0123410D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Memory system for data storage and retrieval
GB0123415D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
GB0123417D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Improved data processing
US6909910B2 (en) * 2002-02-01 2005-06-21 Microsoft Corporation Method and system for managing changes to a contact database
US7231643B1 (en) 2002-02-22 2007-06-12 Lexar Media, Inc. Image rescue system including direct communication between an application program and a device driver
US6621746B1 (en) 2002-02-27 2003-09-16 Microsoft Corporation Monitoring entropic conditions of a flash memory device as an indicator for invoking erasure operations
US6901499B2 (en) * 2002-02-27 2005-05-31 Microsoft Corp. System and method for tracking data stored in a flash memory device
US7010662B2 (en) * 2002-02-27 2006-03-07 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US7533214B2 (en) * 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
US7085879B2 (en) * 2002-02-27 2006-08-01 Microsoft Corporation Dynamic data structures for tracking data stored in a flash memory device
JP2003280979A (ja) * 2002-03-20 2003-10-03 Toshiba Corp 情報記憶装置
US7093101B2 (en) * 2002-11-21 2006-08-15 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US6973519B1 (en) 2003-06-03 2005-12-06 Lexar Media, Inc. Card identification compatibility
US7904428B2 (en) 2003-09-23 2011-03-08 Symantec Corporation Methods and apparatus for recording write requests directed to a data store
US7577806B2 (en) 2003-09-23 2009-08-18 Symantec Operating Corporation Systems and methods for time dependent data storage and recovery
US7287133B2 (en) 2004-08-24 2007-10-23 Symantec Operating Corporation Systems and methods for providing a modification history for a location within a data store
US7827362B2 (en) 2004-08-24 2010-11-02 Symantec Corporation Systems, apparatus, and methods for processing I/O requests
US7725760B2 (en) 2003-09-23 2010-05-25 Symantec Operating Corporation Data storage system
US7730222B2 (en) 2004-08-24 2010-06-01 Symantec Operating System Processing storage-related I/O requests using binary tree data structures
US7991748B2 (en) 2003-09-23 2011-08-02 Symantec Corporation Virtual data store creation and use
US7173852B2 (en) 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7644376B2 (en) * 2003-10-23 2010-01-05 Microsoft Corporation Flexible architecture for notifying applications of state changes
JP4287433B2 (ja) * 2003-11-18 2009-07-01 パナソニック株式会社 ファイル記録装置
KR100608602B1 (ko) 2003-12-10 2006-08-03 삼성전자주식회사 플래시 메모리, 이를 위한 사상 제어 장치 및 방법
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
JP4284200B2 (ja) * 2004-01-28 2009-06-24 株式会社東芝 不揮発性半導体記憶システム
EP2506486A1 (de) * 2004-02-23 2012-10-03 Lexar Media, Inc. Sicherer kompakter Flash
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
EP1746510A4 (de) * 2004-04-28 2008-08-27 Matsushita Electric Ind Co Ltd Nichtflüchtige speichereinrichtung und datenschreibverfahren
US7370166B1 (en) 2004-04-30 2008-05-06 Lexar Media, Inc. Secure portable storage device
JP4253272B2 (ja) * 2004-05-27 2009-04-08 株式会社東芝 メモリカード、半導体装置、及び半導体メモリの制御方法
US8607016B2 (en) * 2004-07-21 2013-12-10 Sandisk Technologies Inc. FAT analysis for optimized sequential cluster management
US7464306B1 (en) * 2004-08-27 2008-12-09 Lexar Media, Inc. Status of overall health of nonvolatile memory
US7594063B1 (en) * 2004-08-27 2009-09-22 Lexar Media, Inc. Storage capacity status
US7949665B1 (en) 2004-11-19 2011-05-24 Symantec Corporation Rapidly traversing disc volumes during file content examination
US7315916B2 (en) * 2004-12-16 2008-01-01 Sandisk Corporation Scratch pad block
US7366826B2 (en) * 2004-12-16 2008-04-29 Sandisk Corporation Non-volatile memory and method with multi-stream update tracking
US7412560B2 (en) * 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
US7386655B2 (en) 2004-12-16 2008-06-10 Sandisk Corporation Non-volatile memory and method with improved indexing for scratch pad and update blocks
US7395404B2 (en) * 2004-12-16 2008-07-01 Sandisk Corporation Cluster auto-alignment for storing addressable data packets in a non-volatile memory array
US7650458B2 (en) * 2006-06-23 2010-01-19 Microsoft Corporation Flash memory driver
KR100771521B1 (ko) * 2006-10-30 2007-10-30 삼성전자주식회사 멀티 레벨 셀을 포함하는 플래시 메모리 장치 및 그것의데이터 쓰기 방법
TWI338856B (en) * 2007-03-09 2011-03-11 Ite Tech Inc A flash memory storing device and a data storing method thereof
US7904670B2 (en) * 2007-03-19 2011-03-08 Sandisk Corporation Methods for conversion of update blocks based on comparison with a threshold size
US8275953B2 (en) * 2007-03-19 2012-09-25 Sandisk Technologies Inc. Methods for forcing an update block to remain sequential
WO2009095902A2 (en) 2008-01-31 2009-08-06 Densbits Technologies Ltd. Systems and methods for handling immediate data errors in flash memory
US8694715B2 (en) 2007-10-22 2014-04-08 Densbits Technologies Ltd. Methods for adaptively programming flash memory devices and flash memory systems incorporating same
WO2009072104A2 (en) 2007-12-05 2009-06-11 Densbits Technologies Ltd. Flash memory device with physical cell value deterioration accommodation and methods useful in conjunction therewith
US8359516B2 (en) 2007-12-12 2013-01-22 Densbits Technologies Ltd. Systems and methods for error correction and decoding on multi-level physical media
JP4551940B2 (ja) 2008-03-01 2010-09-29 株式会社東芝 メモリシステム
WO2009118720A2 (en) 2008-03-25 2009-10-01 Densbits Technologies Ltd. Apparatus and methods for hardware-efficient unbiased rounding
JP5175703B2 (ja) * 2008-12-11 2013-04-03 株式会社東芝 メモリデバイス
US8458574B2 (en) * 2009-04-06 2013-06-04 Densbits Technologies Ltd. Compact chien-search based decoding apparatus and method
US8819385B2 (en) 2009-04-06 2014-08-26 Densbits Technologies Ltd. Device and method for managing a flash memory
US8566510B2 (en) * 2009-05-12 2013-10-22 Densbits Technologies Ltd. Systems and method for flash memory management
US8364931B2 (en) * 2009-06-29 2013-01-29 Mediatek Inc. Memory system and mapping methods using a random write page mapping table
US8995197B1 (en) 2009-08-26 2015-03-31 Densbits Technologies Ltd. System and methods for dynamic erase and program control for flash memory device memories
US9330767B1 (en) 2009-08-26 2016-05-03 Avago Technologies General Ip (Singapore) Pte. Ltd. Flash memory module and method for programming a page of flash memory cells
US8730729B2 (en) 2009-10-15 2014-05-20 Densbits Technologies Ltd. Systems and methods for averaging error rates in non-volatile devices and storage systems
US8724387B2 (en) 2009-10-22 2014-05-13 Densbits Technologies Ltd. Method, system, and computer readable medium for reading and programming flash memory cells using multiple bias voltages
JP5480913B2 (ja) * 2009-12-03 2014-04-23 株式会社日立製作所 記憶装置、およびメモリコントローラ
US9037777B2 (en) * 2009-12-22 2015-05-19 Densbits Technologies Ltd. Device, system, and method for reducing program/read disturb in flash arrays
US8745317B2 (en) 2010-04-07 2014-06-03 Densbits Technologies Ltd. System and method for storing information in a multi-level cell memory
US8621321B2 (en) 2010-07-01 2013-12-31 Densbits Technologies Ltd. System and method for multi-dimensional encoding and decoding
US20120011555A1 (en) * 2010-07-11 2012-01-12 Qiuhang Richard Qian Watch new released movies online synchronizing with new released movies shown in cinemas
US8964464B2 (en) 2010-08-24 2015-02-24 Densbits Technologies Ltd. System and method for accelerated sampling
US9141526B2 (en) * 2010-09-16 2015-09-22 International Business Machines Corporation Reclaiming units by searching units for a predetermined criterion and storing data from a valid subunit
US9063878B2 (en) 2010-11-03 2015-06-23 Densbits Technologies Ltd. Method, system and computer readable medium for copy back
US8850100B2 (en) 2010-12-07 2014-09-30 Densbits Technologies Ltd. Interleaving codeword portions between multiple planes and/or dies of a flash memory device
JP2012203443A (ja) * 2011-03-23 2012-10-22 Toshiba Corp メモリシステムおよびメモリシステムの制御方法
US8990665B1 (en) 2011-04-06 2015-03-24 Densbits Technologies Ltd. System, method and computer program product for joint search of a read threshold and soft decoding
US9501392B1 (en) 2011-05-12 2016-11-22 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of a non-volatile memory module
US8996790B1 (en) * 2011-05-12 2015-03-31 Densbits Technologies Ltd. System and method for flash memory management
US9396106B2 (en) * 2011-05-12 2016-07-19 Avago Technologies General Ip (Singapore) Pte. Ltd. Advanced management of a non-volatile memory
US9110785B1 (en) 2011-05-12 2015-08-18 Densbits Technologies Ltd. Ordered merge of data sectors that belong to memory space portions
US9372792B1 (en) 2011-05-12 2016-06-21 Avago Technologies General Ip (Singapore) Pte. Ltd. Advanced management of a non-volatile memory
US9195592B1 (en) 2011-05-12 2015-11-24 Densbits Technologies Ltd. Advanced management of a non-volatile memory
TWI521343B (zh) 2011-08-01 2016-02-11 Toshiba Kk An information processing device, a semiconductor memory device, and a semiconductor memory device
US8947941B2 (en) 2012-02-09 2015-02-03 Densbits Technologies Ltd. State responsive operations relating to flash memory cells
US8996788B2 (en) 2012-02-09 2015-03-31 Densbits Technologies Ltd. Configurable flash interface
US8996793B1 (en) 2012-04-24 2015-03-31 Densbits Technologies Ltd. System, method and computer readable medium for generating soft information
TWI605458B (zh) 2012-04-25 2017-11-11 Sony Corp Non-volatile memory devices, non-volatile memory control devices, and non-volatile memory control methods
US8838937B1 (en) 2012-05-23 2014-09-16 Densbits Technologies Ltd. Methods, systems and computer readable medium for writing and reading data
US8879325B1 (en) 2012-05-30 2014-11-04 Densbits Technologies Ltd. System, method and computer program product for processing read threshold information and for reading a flash memory module
US9921954B1 (en) 2012-08-27 2018-03-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Method and system for split flash memory management between host and storage controller
US9368225B1 (en) 2012-11-21 2016-06-14 Avago Technologies General Ip (Singapore) Pte. Ltd. Determining read thresholds based upon read error direction statistics
KR20140078893A (ko) * 2012-12-18 2014-06-26 에스케이하이닉스 주식회사 데이터 저장 장치의 동작 방법
US9069659B1 (en) 2013-01-03 2015-06-30 Densbits Technologies Ltd. Read threshold determination using reference read threshold
US9478271B2 (en) * 2013-03-14 2016-10-25 Seagate Technology Llc Nonvolatile memory data recovery after power failure
US8812744B1 (en) 2013-03-14 2014-08-19 Microsoft Corporation Assigning priorities to data for hybrid drives
US9626126B2 (en) 2013-04-24 2017-04-18 Microsoft Technology Licensing, Llc Power saving mode hybrid drive access management
US9946495B2 (en) 2013-04-25 2018-04-17 Microsoft Technology Licensing, Llc Dirty data management for hybrid drives
US9136876B1 (en) 2013-06-13 2015-09-15 Densbits Technologies Ltd. Size limited multi-dimensional decoding
US9413491B1 (en) 2013-10-08 2016-08-09 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for multiple dimension decoding and encoding a message
US9397706B1 (en) 2013-10-09 2016-07-19 Avago Technologies General Ip (Singapore) Pte. Ltd. System and method for irregular multiple dimension decoding and encoding
US9786388B1 (en) 2013-10-09 2017-10-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9348694B1 (en) 2013-10-09 2016-05-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Detecting and managing bad columns
US9536612B1 (en) 2014-01-23 2017-01-03 Avago Technologies General Ip (Singapore) Pte. Ltd Digital signaling processing for three dimensional flash memory arrays
US10120792B1 (en) 2014-01-29 2018-11-06 Avago Technologies General Ip (Singapore) Pte. Ltd. Programming an embedded flash storage device
US9542262B1 (en) 2014-05-29 2017-01-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Error correction
US9892033B1 (en) 2014-06-24 2018-02-13 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of memory units
US9584159B1 (en) 2014-07-03 2017-02-28 Avago Technologies General Ip (Singapore) Pte. Ltd. Interleaved encoding
US9972393B1 (en) 2014-07-03 2018-05-15 Avago Technologies General Ip (Singapore) Pte. Ltd. Accelerating programming of a flash memory module
US9449702B1 (en) 2014-07-08 2016-09-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Power management
US9524211B1 (en) 2014-11-18 2016-12-20 Avago Technologies General Ip (Singapore) Pte. Ltd. Codeword management
US10305515B1 (en) 2015-02-02 2019-05-28 Avago Technologies International Sales Pte. Limited System and method for encoding using multiple linear feedback shift registers
US9959204B1 (en) * 2015-03-09 2018-05-01 Western Digital Technologies, Inc. Tracking sequential ranges of non-ordered data
US10628255B1 (en) 2015-06-11 2020-04-21 Avago Technologies International Sales Pte. Limited Multi-dimensional decoding
US9851921B1 (en) 2015-07-05 2017-12-26 Avago Technologies General Ip (Singapore) Pte. Ltd. Flash memory chip processing
US9954558B1 (en) 2016-03-03 2018-04-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Fast decoding of data stored in a flash memory
US9971508B2 (en) 2016-06-06 2018-05-15 International Business Machines Corporation Invoking input/output (I/O) threads on processors to demote tracks from a cache
US9971689B2 (en) 2016-06-06 2018-05-15 International Business Machines Corporation Invoking input/output (I/O) threads and demote threads on processors to demote tracks from a cache
US9952982B2 (en) * 2016-06-06 2018-04-24 International Business Machines Corporation Invoking demote threads on processors to demote tracks indicated in demote ready lists from a cache when a number of free cache segments in the cache is below a free cache segment threshold
US9817593B1 (en) 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
US20180060229A1 (en) * 2016-08-31 2018-03-01 Esab Ab Techniques for implementing memory segmentation in a welding or cutting system
US11704035B2 (en) 2020-03-30 2023-07-18 Pure Storage, Inc. Unified storage on block containers
US11797230B2 (en) 2021-12-14 2023-10-24 Hewlett-Packard Development Company, L.P. Bios variables storage
US20230376228A1 (en) * 2022-05-17 2023-11-23 Micron Technology, Inc. Techniques for sequential access operations

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5448577A (en) * 1992-10-30 1995-09-05 Intel Corporation Method for reliably storing non-data fields in a flash EEPROM memory array
JP3641280B2 (ja) * 1992-10-30 2005-04-20 インテル・コーポレーション フラッシュeepromアレイのクリーン・アップすべきブロックを決定する方法
US5473753A (en) * 1992-10-30 1995-12-05 Intel Corporation Method of managing defects in flash disk memories
US5459850A (en) * 1993-02-19 1995-10-17 Conner Peripherals, Inc. Flash solid state drive that emulates a disk drive and stores variable length and fixed lenth data blocks
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5388083A (en) * 1993-03-26 1995-02-07 Cirrus Logic, Inc. Flash memory mass storage architecture
US5473765A (en) * 1994-01-24 1995-12-05 3Com Corporation Apparatus for using flash memory as a floppy disk emulator in a computer system
JP2671860B2 (ja) * 1995-03-30 1997-11-05 日本電気株式会社 フラッシュメモリ用ファイルシステム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220188223A1 (en) * 2020-12-16 2022-06-16 Micron Technology, Inc. Memory sub-system write sequence track
US11841794B2 (en) * 2020-12-16 2023-12-12 Micron Technology, Inc. Memory sub-system write sequence track

Also Published As

Publication number Publication date
US5745418A (en) 1998-04-28
JP2002513484A (ja) 2002-05-08
EP0882264A1 (de) 1998-12-09
EP0882264B1 (de) 2006-03-22
WO1998024029A1 (en) 1998-06-04
EP0882264A4 (de) 2002-09-04
US5933368A (en) 1999-08-03
JP4005142B2 (ja) 2007-11-07
DE69635962D1 (de) 2006-05-11

Similar Documents

Publication Publication Date Title
DE69635962T2 (de) Flash-Speicher-Massenspeichersystem und Verfahren dafür
DE69839126T2 (de) Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher
DE60319563T2 (de) Verwaltung der anzahl von löschungen in einem nicht-fluchtigem speicher
DE60211653T2 (de) Teildatenprogrammier- und leseoperationen in einem nichtflüchtigen speicher
DE60217883T2 (de) Verfahren zum schreiben von daten in einen nicht-flüchtigen speicher
DE69333906T2 (de) Verfahren und System für die Dateienverwaltung mit einem schnell löschbaren, programmierbaren ROM
DE60319407T2 (de) Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems
DE60317551T2 (de) Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem
DE60316171T2 (de) Automatischer abnutzungsausgleich in einem nicht-flüchtigen speichersystem
DE19782041B4 (de) Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher
DE69034191T2 (de) EEPROM-System mit aus mehreren Chips bestehender Blocklöschung
DE102020106971A1 (de) Datenschreibverwaltung im nichtflüchtigen speicher
EP2923261B1 (de) VERFAHREN ZUR STEUERUNG EINES FLASH-SPEICHERS ZUR MASSENSPEICHERUNG, DER VON EINEM AN EINEN HOST ANSCHLIEßBAREN KOMMUNIKATIONSGERÄT UMFASST IST, UND COMPUTERPROGRAMMPRODUKT ZUR AUSFÜHRUNG DES VERFAHRENS
DE102018105750A1 (de) System und Verfahren für Hybrid-Push-Pull-Datenmanagement in einem nichtflüchtigen Datenspeicher
DE112010004667T5 (de) Speichervorrichtung und Speichersteuerung
DE102006005877A1 (de) Adresszuordnungstabelle und Verfahren zum Erzeugen einer Adresszuordnungstabelle
DE102018123891A1 (de) Handhabung nichtabgestimmter Schreibvorgänge
DE102010018765A1 (de) Speichervorrichtung und Speicherverfahren
DE102007006307A1 (de) Verfahren zum Betreiben eines nichtflüchtigen Speicherelements, Aufzeichnungsmedium und nichtflüchtigen Speicherelement
DE102006005876A1 (de) Flashspeicher-Steuervorrichtung, Vorrichtung zum Steuern eines Flashspeichers, Flashspeicher-System und Verfahren zum Verwalten von Abbildungsdaten eines Flashspeichers
DE19537305A1 (de) Halbleiter-Platteneinrichtung und Speicherverwaltungsmethode
DE102009048179A1 (de) Prozess und Verfahren für eine Löschstrategie in Festkörperplatten
DE19782214B4 (de) Verbesserte Schnittstelle für Flash-Eeprom-Speicher-Arrays
DE102017120787A1 (de) Verfahren und Vorrichtung zum Entladen von Datenverarbeitung in Hybrid-Speichervorrichtungen
DE112017005782T5 (de) Warteschlange für Speichervorgänge

Legal Events

Date Code Title Description
8364 No opposition during term of opposition