-
HINTERGRUND
-
Datenspeichersysteme müssen möglicherweise periodisch Daten von einem Ort zu einem anderen Ort umlagern. Auf alle Daten, die verschoben werden, kann nicht mit der gleichen Häufigkeit zugegriffen werden. Zum Beispiel kann auf bestimmte Daten häufiger zugegriffen werden als auf andere Daten, während auf bestimmte andere Daten nicht über einen ausgedehnten Zeitraum zugegriffen werden kann. Jedes Mal, wenn auf gespeicherte Daten zugegriffen wird, legt das Datenspeichersystem eine bestimmte Spannung an die Wortleitung an, welche die Daten speichert. Wenn auf die Daten häufiger zugegriffen wird, erhöht sich die Lesepegelspannung, die erforderlich ist, um die Daten erfolgreich zu lesen und/oder zu dekodieren. In ähnlicher Weise nimmt, wenn auf Daten nicht über einen ausgedehnten Zeitraum zugegriffen wird, die Lesepegelspannung ab, die erforderlich ist, um die Daten erfolgreich zu lesen und/oder zu dekodieren. Die Änderung der Lesepegelspannungen, die zum erfolgreichen Lesen und/oder Dekodieren der Daten erforderlich ist, kann die Fehlerraten erhöhen, wenn auf die Daten zugegriffen wird, was die Berechnungskosten und die Verarbeitungszeit erhöht, um Leseoperationen durch das Datenspeichersystem erfolgreich durchzuführen.
-
Die im Hintergrundabschnitt vorgesehene Beschreibung sollte nicht als Stand der Technik angenommen werden, lediglich weil sie in dem Hintergrundabschnitt erwähnt wird oder diesem zugeordnet ist. Der Hintergrundabschnitt kann Informationen beinhalten, die einen oder mehrere Aspekte der vorliegenden Technologie beschreiben.
-
Figurenliste
-
- 1 zeigt ein beispielhaftes graphisches Diagramm, das drei mögliche Szenarien für eine Lesepegelspannung gemäß veranschaulichenden Implementierungen darstellt.
- 2 ist ein Blockdiagramm, das Komponenten eines Datenspeichersystems gemäß veranschaulichenden Implementierungen darstellt.
- 3 ist ein Blockdiagramm, das Komponenten eines Datenspeichersystems gemäß veranschaulichenden Implementierungen darstellt.
- 4 zeigt die Assoziation von Daten von Quellblöcken mit Zielblöcken gemäß veranschaulichenden Implementierungen.
- 5 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Bestimmen, ob eine Wortleitung eine wahre Löschbedingung erfüllt, gemäß veranschaulichenden Implementierungen.
-
Bei einer oder mehreren Implementierungen können nicht alle der dargestellten Komponenten in jeder Figur erforderlich sein, und eine oder mehrere Implementierungen können zusätzliche Komponenten einschließen, die in einer Figur nicht gezeigt sind. Variationen in der Anordnung und dem Typ der Komponenten können vorgenommen werden, ohne vom Umfang der vorliegenden Offenbarung abzuweichen. Zusätzliche Komponenten, unterschiedliche Komponenten oder weniger Komponenten können innerhalb des Umfangs der vorliegenden Offenbarung verwendet werden.
-
DETAILLIERTE BESCHREIBUNG
-
Die nachstehend dargelegte detaillierte Beschreibung ist als eine Beschreibung verschiedener Konfigurationen der vorliegenden Offenbarung gedacht und soll nicht die einzigen Konfigurationen darstellen, in denen die vorliegende Offenbarung in der Praxis umgesetzt werden kann. Die beigefügten Zeichnungen sind in dieses Dokument integriert und Bestandteil der detaillierten Beschreibung. Die detaillierte Beschreibung beinhaltet spezifische Details, um ein gründliches Verständnis der vorliegenden Offenbarung zu ermöglichen. Jedoch wird für Fachleute offensichtlich sein, dass die vorliegende Offenbarung ohne diese spezifischen Details in der Praxis umgesetzt werden kann. In einigen Fällen sind Strukturen und Komponenten in Blockdiagrammform gezeigt, um zu vermeiden, dass die Konzepte der vorliegenden Offenbarung unklar werden. Gleiche Komponenten sind zum leichteren Verständnis mit identischen Elementnummern gekennzeichnet.
-
Die vorliegende Beschreibung bezieht sich im Allgemeinen auf Datenspeichersysteme und insbesondere auf, zum Beispiel und ohne Einschränkung, Datenspeichersysteme und Verfahren für Datenumlagerungen auf der Basis von Fehlerwiederherstellungen. Eine Lesepegelspannung wird an die Wortleitung angelegt, um Daten von der Wortleitung in einem nichtflüchtigen Speicher zu lesen. Die Anlegung der Lesepegelspannung an die Wortleitung kann angrenzende oder benachbarte Wortleitungen beeinflussen. Zum Beispiel können Elektronen der angrenzenden oder benachbarten Wortleitungen in das Floating-Gate der Wortleitung injiziert werden, die gelesen wird, wodurch die Ladung der Wortleitung, die gelesen wird, geändert wird, was einen Lesestörungseffekt verursacht. Aufgrund der größeren Anzahl von Elektronen kann die Lesepegelspannung, die erforderlich ist, um die Leseoperation auf der Wortleitung präzise durchzuführen, nach rechts von der voreingestellten oder anfänglichen Lesepegelspannung verschoben werden oder höher als diese sein, wie in 1 gezeigt. Je häufiger die Daten gelesen werden, desto wahrscheinlicher ist die Spannung, die zum erfolgreichen Lesen oder Dekodieren der Daten erforderlich ist, höher als die voreingestellte oder anfängliche Lesepegelspannung. Leistung und Effizienz des Datenspeichersystems werden verbessert, wenn solche Daten in einem Block mit einem niedrigen Programmlöschzykluszähler gespeichert werden. Bei einigen Implementierungen wird ein Programmlöschzykluszähler eines Blocks als ein niedriger Programmlöschzykluszähler bestimmt, wenn der Programmlöschzykluszähler des Blocks einem Schwellenprogrammlöschzykluszähler genügt oder kleiner oder gleich diesem ist.
-
In ähnlicher Weise treten Probleme mit der Beibehaltung dieser Daten auf, wenn auf gespeicherte Daten für einen langen Zeitraum nicht zugegriffen wird. Wenn zum Beispiel auf die Daten nicht zugegriffen wird oder sie für einen langen Zeitraum nicht gelesen werden, werden einige der Elektronen, die in dem Floating-Gate der Wortleitung gespeichert sind, die die zu speichernden Datenwerte darstellt, dann aus dem Floating-Gate entweichen, wodurch Probleme mit der Zurückhaltung von Daten verursacht werden. Der Verlust von Elektronen beeinflusst die geeignete Lesepegelspannung, die angelegt werden soll, wenn die Daten gelesen werden. Zum Beispiel kann, wie in 1 gezeigt, eine niedrigere Lesepegelspannung angelegt werden, um die Daten erfolgreich aus der nichtflüchtigen Speichervorrichtung zu lesen. Wenn Daten bei einer niedrigeren Spannung als einer bestimmten standardmäßigen Lesepegelspannung oder einer ersten Lesepegelspannung erfolgreich gelesen werden, dann wird wahrscheinlich nicht so häufig auf diese Daten zugegriffen wie auf andere Daten. Das Datenspeichersystem würde davon profitieren, wenn solche Daten in einem Block mit einem hohen Programmlöschzykluszähler gespeichert wären. Bei einigen Implementierungen wird ein Programmlöschzykluszähler eines Blocks als ein hoher Programmlöschzykluszähler bestimmt, wenn der Programmlöschzykluszähler des Blocks einem Schwellenprogrammlöschzykluszähler genügt oder höher als dieser ist.
-
2 ist ein Blockdiagramm, das beispielhafte Komponenten eines Datenspeichersystems 100 gemäß einem oder mehreren Aspekten der vorliegenden Technologie zeigt. Das Datenspeichersystem 100 schließt unter anderem die Steuerung 102 und das nichtflüchtige Speichereinrichtungs-Array 108 ein. Die Steuerung 102 schließt den Prozessor 102, die Kodier-/Dekodier-Maschine 104, das Speichermedium 106 ein. In einigen Implementierungen können die Kodier-/Dekodier-Maschine 104 und das Speichermedium 106 außerhalb der Steuerung 102 platziert sein. Wie in 2 dargestellt, kann das Datenspeichersystem 100 mit einer Host-Vorrichtung 110 über eine Host-Schnittstelle 112 verbunden sein.
-
Die Steuerung 102 kann mehrere interne Komponenten (nicht gezeigt), wie einen oder mehrere Prozessoren 103, einen Nur-Lese-Speicher, eine nichtflüchtige Komponentenschnittstelle (beispielsweise einen Multiplexer zum Verwalten von Befehls- und Datentransport entlang einer Verbindung zu dem nichtflüchtigen Speichervorrichtungs-Array 108), eine E/A-Schnittstelle, eine Fehlerkorrekturschaltung und dergleichen, beinhalten. Ein Prozessor der Steuerung 102 kann den Betrieb der Komponenten in der Datenspeichersteuerung 102 überwachen und steuern. Der Prozessor und/oder die Steuerung 102 können ein Mehrkernprozessor, ein Allzweck-Mikroprozessor, ein Mikrocontroller, ein digitaler Signalprozessor (DSP), ein anwendungsspezifischer integrierter Schaltkreis (ASIC), eine anwenderprogrammierbare Gatteranordnung (Field Programmable Gate Array, FPGA), ein programmierbarer Logikbaustein (PLD), eine Steuerung, eine Zustandsmaschine, ein Logikgatter, einzelne Hardwarekomponenten oder eine Kombination der Vorstehenden sein. In einigen Implementierungen können eines oder mehrere Elemente der Steuerung 102 in einem einzelnen Chip integriert sein. In einigen Implementierungen können die Elemente in zwei oder mehr einzelnen Komponenten implementiert sein.
-
Die Steuerung 102 kann einen Code oder Anweisungen ausführen, um die hierin beschriebenen Operationen und Funktionen durchzuführen. Zum Beispiel kann die Steuerung 102 Operationen zum Verwalten von Anforderungsfluss- und Adressenabbildungen durchführen, Berechnungen durchführen und Befehle erzeugen. Eine oder mehrere Sequenzen von Anweisungen können als Firmware in Speicher in der Steuerung 102 gespeichert sein. Eine oder mehrere Sequenzen von Anweisungen können Software sein, die von dem Speichermedium 106 und dem nichtflüchtigen Speichervorrichtungs-Array 108 gespeichert und gelesen wird oder von der Host-Vorrichtung 110 empfangen wird (zum Beispiel über die Host-Schnittstelle 112). Das Speichermedium 106 und das nichtflüchtige Speichervorrichtungs-Array 108 beinhalten Beispiele von maschinen- oder computerlesbaren Medien, auf denen Anweisungen/Codes, die durch die Steuerung 102 ausführbar sind, gespeichert werden können. Die Begriffe maschinen- oder computerlesbare Medien können allgemein jedes materielle und nichtflüchtige Medium oder jeden Datenträger bezeichnen, das/der verwendet wird, um Anweisungen an die Steuerung 102 bereitzustellen, einschließlich sowohl flüchtiger Medien, wie beispielsweise einem dynamischen Speicher, der für Speichermedien oder für Puffer in der Steuerung 102 verwendet wird, als auch nichtflüchtige Medien, wie elektronische Medien, optische Medien und magnetische Medien. Die hierin beschriebenen Operationen und Funktionen können auch unter Verwendung zum Beispiel von logischen Schaltungen in Hardware oder einer Kombination von Hardware und Software/Firmware implementiert sein.
-
Nach einigen Aspekten stellt das Speichermedium 106 den flüchtigen Speicher dar, der zum temporären Speichern von Daten und Informationen verwendet wird, die dazu dienen, das Datenspeichersystem 100 zu verwalten. Nach Aspekten der vorliegenden Offenbarung ist das Speichermedium 106 ein Speicher mit wahlfreiem Zugriff (RAM), wie ein RAM mit doppelter Datenrate (DDR). Andere Typen von RAM können auch verwendet werden, um das Speichermedium 106 zu implementieren. Das Speichermedium 106 kann unter Verwendung eines einzelnen RAM-Moduls oder mehrerer RAM-Module implementiert werden. Während das Speichermedium 106 als von der Steuerung 102 verschieden dargestellt ist, versteht es sich, dass das Speichermedium 106 in die Steuerung 102 integriert sein kann, ohne vom Umfang der vorliegenden Offenbarung abzuweichen. Alternativ kann das Speichermedium 106 ein nichtflüchtiger Speicher sein, wie eine Magnetplatte, ein Flash-Speicher, ein Peripherie-SSD und dergleichen. In einigen Implementierungen kann das Speichermedium 106 einen oder mehrere Puffer beinhalten, wie etwa die Puffer 304, wie in 3 gezeigt.
-
Die Host-Schnittstelle 112 kann mit der Host-Vorrichtung 110 gekoppelt werden, um Daten von der Host-Vorrichtung 110 zu empfangen und Daten an diese zu senden. Die Host-Schnittstelle 112 kann sowohl elektrische als auch physische Verbindungen enthalten, um die Host-Vorrichtung 110 betriebsmäßig mit der Steuerung 102 zu koppeln. Die Host-Schnittstelle 112 kann Daten, Adressen und Steuersignale zwischen der Host-Vorrichtung 110 und der Steuerung 102 kommunizieren. Auf diese Weise kann die Steuerung 102, als Reaktion auf einen Schreibbefehl von der Host-Vorrichtung 110, von der Host-Vorrichtung 110 empfangene Daten im nichtflüchtigen Speichervorrichtungs-Array 108 speichern und im nichtflüchtigen Speichervorrichtungs-Array 108 gespeicherte Daten lesen und die gelesenen Daten, als Reaktion auf einen Lesebefehl von der Host-Vorrichtung 110, über die Host-Schnittstelle 112 an die Host-Vorrichtung 110 übertragen.
-
Host-Vorrichtung 110 stellt jede Vorrichtung dar, die mit dem Datenspeichersystem 100 gekoppelt werden kann und Daten in dem Datenspeichersystem 100 speichert. Die Host-Vorrichtung 110 kann ein Rechensystem, wie ein Personalcomputer, ein Server, eine Workstation, ein Laptop-Computer, ein PDA, ein Smartphone und dergleichen, sein. Alternativ kann die Host-Vorrichtung 110 eine elektronische Vorrichtung, wie eine Digitalkamera, ein digitaler Audioplayer, ein digitaler Videorecorder und dergleichen, sein.
-
Wie weiterhin in 2 dargestellt, können die Host-Vorrichtung 110 und das Datenspeichersystem 100 über einen Bus 114 miteinander kommunizieren. Der Bus kann geeignete Schnittstellenstandards verwenden, einschließlich, aber nicht beschränkt auf: Serial Advanced Technology Attachment (SATA), Advanced Technology Attachment (ATA), Small Computer System Interface (SCSI), PCI-extended (PCI-X), Fiber-Channel-Technologie, Serial Attached SCSI (SAS), Secure Digital (SD), Embedded Multi-Media Card (EMMC), Universal Flash Storage (UFS) und Peripheral Component Interconnect Express (PCle). Gemäß einigen Aspekten kann das Datenspeichersystem 100 Stifte (oder eine Buchse) einschließen, um sich mit einer entsprechenden Buchse (oder Stiften) auf der Host-Vorrichtung 110 zu verbinden, um eine elektrische und physikalische Verbindung herzustellen.
-
Die Steuerung kann einen internen Systembus 115 einschließen. Der Systembus 115 kann eine Kombination aus einem Steuerbus, Adressbus und Datenbus einschließen und die Komponenten der Steuerung 102 (z. B. einen darin befindlichen Prozessor und/oder Speicher) mit anderen Komponenten des Datenspeichersystems 100 verbinden, einschließlich der Kodier-/Dekodier-Maschine 104, des Speichermediums 106, des nichtflüchtigen Speichervorrichtungs-Arrays 108 und der Host-Schnittstelle 112. Daten werden zwischen den verschiedenen Komponenten über den Systembus 115 übertragen. Der Systembus 115 kann sich teilweise außerhalb und teilweise innerhalb der Steuerung 102 befinden.
-
Die Host-Vorrichtung 110 und das Datenspeichersystem 100 können über eine verdrahtete oder drahtlose Verbindung miteinander kommunizieren und können lokal oder entfernt voneinander sein. Nach einem oder mehreren anderen Aspekten beinhaltet das Datenspeichersystem 100 (oder die Host-Schnittstelle 112) einen drahtlosen Transceiver, um das Host-Gerät 110 und das Datenspeichersystem 100 in drahtlose Kommunikation miteinander zu bringen.
-
Die Steuerung 102 kann Daten und/oder Speicherzugriffsbefehle von einem Speicherschnittstellenmodul 116 (z. B. einem Gerätetreiber) der Host-Vorrichtung 110 empfangen. Von der Speicherschnittstelle 116 kommunizierte Speicherzugriffsbefehle können von dem Host-System 110 ausgegebene Schreib- und Lesebefehle beinhalten. Lese- und Schreibbefehle können eine logische Adresse (z. B. logische Blockadressen oder LBAs) vorgeben, die verwendet wird, um auf Daten zuzugreifen, die in dem Datenspeichersystem 100 gespeichert sind. Die Steuerung 102 kann Befehle in dem nichtflüchtigen Speichervorrichtungs-Array 108 als Reaktion auf Befehle ausführen, die von dem Speicherschnittstellenmodul 116 empfangen werden.
-
Das nichtflüchtige Speichervorrichtungs-Array 108 kann mehrere nichtflüchtige Speichervorrichtungen 118 einschließen. Eine nichtflüchtige Speichervorrichtung 118 stellt eine nichtflüchtige Speichervorrichtung zum Speichern von Daten dar. Gemäß Aspekten der vorliegenden Technologie schließt die nichtflüchtige Speichervorrichtung 118 beispielsweise einen NAND-Flash-Speicher ein. Jede nichtflüchtige Speichervorrichtung 118 kann einen einzelnen nichtflüchtigen Speicherchip oder ein -Modul beinhalten, oder sie kann mehrere nichtflüchtige Speicherchips oder -Module beinhalten. Zum Beispiel können in einem nichtflüchtigen Speichervorrichtungs-Array 108 einige der nichtflüchtigen Speichervorrichtungen 118 ein nichtflüchtiges Modul aufweisen, während andere mehr als ein nichtflüchtiges Modul aufweisen können. Die nichtflüchtige Speichervorrichtung 118 ist nicht auf irgendeine bestimmte Kapazität oder Konfiguration beschränkt. Zum Beispiel können die Anzahl physischer Blöcke, die Anzahl physischer Seiten pro physischem Block, die Anzahl von Sektoren pro physischer Seite und die Größe der Sektoren innerhalb des Umfangs der vorliegenden Technologie variieren.
-
Die nichtflüchtigen Speichervorrichtungen 118 können in mehreren Kanälen angeordnet sein, wobei jeder Kanal eine oder mehrere nichtflüchtige Speichervorrichtungen 118 aufweist. Eine nichtflüchtige Speichervorrichtung 118 kann eine oder mehrere nichtflüchtige Speicherschnittstellen (nicht dargestellt) einschließen. Jede nichtflüchtige Speicherschnittstelle verbindet die Steuerung 102 über einen entsprechenden Kanal mit einer der nichtflüchtigen Speichervorrichtungen. Jeder der Kanäle (nicht dargestellt) kann unter Verwendung von einem oder mehreren physischen E/A-Bussen implementiert werden, die zwischen einer der nichtflüchtigen Speicherschnittstellen und der/den entsprechenden nichtflüchtigen Vorrichtung(en) gekoppelt sind. Jeder Kanal ermöglicht der entsprechenden nichtflüchtigen Speicherschnittstelle, Lese-, Schreib- und/oder Löschbefehle an die entsprechende nichtflüchtige(n) Speichervorrichtung(en) zu senden. Jede nichtflüchtige Speicherschnittstelle kann ein Register (z. B. ein First-In-First-Out- (FIFO) -Register) beinhalten, das Lese-, Schreib- und/oder Löschbefehle von der Steuerung 102 für die entsprechende nichtflüchtige Speichervorrichtung in einer Warteschlange anordnet. Obwohl sich der Begriff „Kanal“, wie vorstehend verwendet, auf den Bus bezieht, der zwischen einer nichtflüchtigen Speicherschnittstelle und der entsprechenden nichtflüchtigen Speichervorrichtung gekoppelt ist, kann sich der Begriff „Kanal“ auch auf die entsprechende nichtflüchtige Speichervorrichtung beziehen, die durch einen Bus (z. B. den Systembus 115) adressierbar ist. Nichtflüchtige Speichervorrichtungen 118 können Speicherblöcke einschließen. In einigen Implementierungen können die Speicherblöcke einer nichtflüchtigen Speichervorrichtung logisch gruppiert werden, basierend auf bestimmten Speichervorrichtungs-Operationen und/oder -Verfahren, wie die Speicherbereinigung, Datenumlagerung, und dergleichen. In einigen Implementierungen können einige der Speicherblöcke logisch in Quellspeicherblöcken gruppiert sein, wie etwa die Quellspeicherblöcke 305, wie in 3 gezeigt. Zum Beispiel können, wie in 4 gezeigt, die Speicherblöcke 401a, 401b, 401c, 401d kollektiv als Quellblöcke 305 bezeichnet werden. In einigen Implementierungen können einige der Speicherblöcke logisch in Zielspeicherblöcken gruppiert sein, wie zum Beispiel Zielspeicherblöcke 306, wie in 3 gezeigt. Zum Beispiel können, wie in 4 gezeigt, die Speicherblöcke 405, 406 kollektiv als Zielblöcke 306 bezeichnet werden. Die Steuerung 102 kann eingerichtet sein, um die in den Quellspeicherblöcken 305 gespeicherten Daten in die Zielspeicherblöcke 306 umzulagern, basierend auf Fehlerkorrekturdaten, die den in Quellspeicherblöcken gespeicherten Daten zugeordnet sind. Zusätzliche Details der Datenumlagerung werden unter Bezugnahme auf 5 beschrieben.
-
Die nichtflüchtige Speichervorrichtung 118 kann über eine Standardschnittstellenspezifikation verfügen. Dieser Standard stellt sicher, dass Chips von mehreren Herstellern austauschbar verwendet werden können. Die Schnittstelle der nichtflüchtigen Speichervorrichtung 118 kann verwendet werden, um auf interne Register 120 und eine interne nichtflüchtige Steuerung 122 zuzugreifen. Bei einigen Implementierungen können die Register 120 Adress-, Befehls- und/oder Datenregister einschließen, die intern die notwendigen Daten zu und von einem Speicherzellen-Array 124 abrufen und ausgeben. Bei einigen Implementierungen kann das Speicherzellen-Array 124 ein NAND-Speicherzellen-Array sein. Beispielsweise kann das Speicherzellen-Array 124 einen Einzelpegelzellenspeicher (Single-Level Cell, SLC), einen Mehrpegelzellenspeicher (Multi-Level Cell, MLC), einen Dreipegelzellenspeicher (Three-Level Cell, TLC), einen Vierpegelzellenspeicher (Four-Level Cell, QLC) usw. aufweisen. Nach einigen Aspekten kann das nichtflüchtige Speichervorrichtungs-Array 108 eine oder mehrere Hybridspeichervorrichtungen aufweisen, die in einer oder mehreren SLC-, MLC- oder TLC-Betriebsarten arbeiten können. Andere Typen von nichtflüchtigen Speichern, wie etwa 3D-NAND-Flash-Speicher, werden in der vorliegenden Technologie ebenfalls in Betracht gezogen.
-
Ein Datenregister (z. B. von Registern 120) kann Daten, die in dem Speicherzellen-Array 124 gespeichert werden sollen, oder Daten nach einem Abruf aus dem Speicherzellen-Array 124 beinhalten und kann außerdem zur temporären Datenspeicherung verwendet werden und/oder wie ein Puffer wirken. Ein Adressenregister kann die Speicheradresse speichern, von der Daten an die Host-Vorrichtung 110 abgerufen werden, oder die Adresse, an die Daten gesendet und gespeichert werden. Nach einigen Aspekten ist ein Befehlsregister enthalten, um die Parität, die Unterbrechungssteuerung und dergleichen zu steuern. Nach einigen Aspekten ist die interne nichtflüchtige Speichersteuerung 122 über ein Steuerregister zugänglich, um das allgemeine Verhalten der nichtflüchtigen Speichervorrichtung 118 zu steuern. Die interne nichtflüchtige Steuerung 122 und/oder das Steuerregister können die Anzahl von Stoppbits, die Wortlänge, die Empfänger-Taktquelle steuern und können außerdem das Umschalten des Adressiermodus, der Paging-Steuerung, der Coprozessorsteuerung und dergleichen steuern.
-
Die Kodier-/Dekodier-Maschine 104 stellt eine oder mehrere Komponenten dar, die Codewörter kodieren und/oder dekodieren können, die in dem nichtflüchtigen Speichervorrichtungs-Array 108 gespeichert und/oder aus diesem gelesen werden sollen. Die Kodier-/Dekodier-Maschine 104 kann einen Kodierer und einen Dekodierer einschließen. Bei einigen Implementierungen kann die Kodier-/Dekodier-Maschine 104 einen oder mehrere Kodierer und/oder einen oder mehrere Dekodierer einschließen. Der Decodierer kann einen harten Decodierer und einen Soft-Decision-ECC-Decodierer einschließen. Die Kodier-/Dekodier-Maschine 104 kann die von der Host-Vorrichtung 110 empfangenen Daten in Codewörter kodieren und Codewörter aus der nichtflüchtigen Speichervorrichtung 118 vor dem Senden der dekodierten Daten an den Host dekodieren. Bei einigen Implementierungen kann die Kodier-/Dekodier-Maschine 104 eine oder mehrere Speichervorrichtung(en) und/oder eine oder mehrere Verarbeitungseinheit(en) aufweisen, die verwendet werden, um eine Fehlerkorrektur durchzuführen (z. B. unter Verwendung von LDPC, BCH oder Turbo-Codes). Die Kodier-/Dekodier-Maschine 104 kann auch ein unspezifisches Informationsmodul beinhalten, das unspezifische metrische Eingaben für Kodier- und Dekodierungsoperationen bestimmt und/oder beibehält. Obwohl die Kodier-/Dekodier-Maschine 104 als von der Steuerung 102 verschieden dargestellt ist, versteht es sich, dass die Kodier-/Dekodier-Maschine 104 in die Steuerung 102 integriert sein kann, ohne vom Umfang der vorliegenden Offenbarung abzuweichen. In einigen Implementierungen kann die Kodier-/Dekodier-Maschine 104 eingerichtet sein, um Daten an den einen oder die mehreren Prozessoren 103 der Steuerung 102 zu senden oder zu liefern. Zusätzliche Details der Kodier-/Dekodier-Maschine 104 sind unten mit Bezug auf 5 beschrieben.
-
Wie oben beschrieben, können Daten effizienter gespeichert werden, um die Effizienz und Leistung des Datenspeichersystems während der Durchführung von Datenoperationen zu verbessern, wodurch der Gesamtwirkungsgrad und die Leistungsfähigkeit des Datenspeichersystems verbessert werden. Die Steuerung 102 kann eingerichtet sein, um Daten als Antwort auf das Übertragen einer Leseoperation oder eines Befehls bei einer ersten Lesepegelspannung an die nichtflüchtige Speichervorrichtung 118 zu empfangen. Bei einigen Implementierungen kann eine erste Lesepegelspannung eine voreingestellte Lesepegelspannung sein. Bei einigen Implementierungen kann eine voreingestellte Lesepegelspannung für eine nichtflüchtige Speichervorrichtung, wie etwa die nichtflüchtige Speichervorrichtung 118, vorbestimmt sein. Wie oben beschrieben, können die Daten in Speicherblöcken in der nichtflüchtigen Speichervorrichtung 118 gespeichert werden, die als Quellspeicherblöcke bezeichnet werden, wie etwa die Quellspeicherblöcke 401a, 401b, 401c, 401d. Die Steuerung 102 kann eingerichtet sein, um zu bestimmen, ob die empfangenen Daten erfolgreich durch die Kodier-/Dekodier-Maschine 104 bei der ersten Lesepegelspannung gelesen oder dekodiert werden.
-
Wenn die Steuerung 102 bestimmt, dass die empfangenen Daten nicht erfolgreich durch die Kodier-/Dekodier-Maschine 104 unter Verwendung der ersten Lesepegelspannung gelesen oder dekodiert werden, dann bestimmt die Steuerung 102 eine verschobene Lesepegelspannung und überträgt eine Leseoperation an die nichtflüchtige Speichervorrichtung, um Daten aus dem Quellblock unter Verwendung der verschobenen Lesepegelspannung zu lesen oder abzurufen. Die Steuerung 102 kann eingerichtet sein, um zu bestimmen, ob die Daten, die empfangen werden, wenn die verschobene Lesepegelspannung verwendet wird, erfolgreich unter Verwendung der verschobenen Lesepegelspannung gelesen oder dekodiert werden, und wenn die Daten nicht erfolgreich gelesen oder dekodiert werden, dann kann in einigen Implementierungen die Steuerung 102 eingerichtet sein, immer weiter neue verschobene Lesepegelspannung zu bestimmen, bis die Daten erfolgreich gelesen oder dekodiert werden oder eine nicht korrigierbare Fehlermeldung empfangen wird. Wenn die Daten erfolgreich gelesen oder dekodiert werden, kann die Steuerung 102 eingerichtet sein, um die Daten einem Zielblock unter Verwendung des Umlagerungspuffers 403 oder 404 zuzuordnen, wie in 4 gezeigt. Der Umlagerungspuffer 403 kann dem Zielblock 405 zugeordnet sein, und der Umlagerungspuffer 404 kann dem Zielblock 406 zugeordnet sein. Die Steuerung 102 kann eingerichtet sein zum Ausgeben oder Übertragen von Daten-Schreiboperationen an die nichtflüchtige Speichervorrichtung 118 für Daten, die dem Umlagerungspuffer 403 zugeordnet sind, um in dem Zielblock 405 gespeichert werden, und für Daten, die dem Umlagerungspuffer 404 zugeordnet sind, um in dem Zielblock 406 gespeichert werden.
-
Wenn die Steuerung 102 bestimmt, dass die empfangenen Daten erfolgreich von der Kodier-/Dekodier-Maschine 104 unter Verwendung der ersten Lesepegelspannung gelesen oder dekodiert werden, dann kann die Steuerung eingerichtet sein, die Zielblöcke mit der geringsten Menge an verfügbarem Speicherplatz oder dem höchsten Belegungsgrad zu bestimmen und die Daten diesem Zielblock zuzuordnen. Die Steuerung 102 kann eingerichtet sein, um die Daten dem entsprechenden Umlagerungspuffer dieses Zielblocks zuzuordnen, wie in 4 gezeigt. Zusätzliche Details der Umlagerung von Daten werden unten mit Bezug auf 5 beschrieben.
-
Mit Blick auf 5 wird ein Flussdiagramm gezeigt, das einen Prozess der Datenumlagerung basierend auf einem Fehlerwiederherstellungsergebnis veranschaulicht. Zum Zwecke der Darstellung eines klar verständlichen Beispiels werden Komponenten des Datenspeichersystems 100, das unter Bezugnahme auf die 2 und 3 gezeigt und beschrieben wurde, dafür verwendet, den Prozess der Datenumlagerung basierend auf dem Fehlerwiederherstellungsergebnis zu beschreiben. Der Prozess der Datenumlagerung basierend auf dem Fehlerwiederherstellungsergebnis kann als Antwort auf eine Datenumlagerungsoperation, wie z. B., ohne darauf beschränkt zu sein, eine Speicherbereinigungsoperation des Datenspeichersystems 100, initiiert werden. Das Verfahren 500 beinhaltet das Empfangen (durch eine Steuerung von einem Datenspeichersystem, wie etwa die Steuerung 102 des Datenspeichersystems 100) von Daten von einem Quellblock, wie etwa einem Quellblock 305 der nichtflüchtigen Speichervorrichtung 118 unter Verwendung einer ersten Lesepegelspannung (Block 701). Daten können von einem Quellblock 305 der nichtflüchtigen Speichervorrichtung 118 als Antwort auf eine Leseoperation empfangen werden, die an dem Quellblock durchgeführt wird. Daten können aus dem Quellblock über eine Leseoperation gelesen werden.
-
Bei einigen Implementierungen wird eine Leseoperation durchgeführt, indem die erste Lesepegelspannung an eine Wortleitung des Quelldatenblocks angelegt wird. Solch eine erste Lesepegelspannung kann eine vorbestimmte Lesepegelspannung oder eine Spannung sein, die aufgrund einer oder mehrerer Betriebsbedingungen des Datenspeichersystems berechnet wird. Beispielsweise kann eine solche Lesepegelspannung basierend auf dem Verschleißniveau der nichtflüchtigen Speichervorrichtung berechnet werden, wie etwa einer Anzahl von Programmlöschzyklen, die der nichtflüchtigen Speichervorrichtung zugeordnet sind. Bei einigen Implementierungen kann eine Anzahl von Lesepegelspannungen vorgegeben sein, und die Steuerung 102 oder die Steuerung 122 der nichtflüchtigen Speichervorrichtung 118 können eingerichtet sein, um eine der vorbestimmten Lesepegelspannungen basierend auf verschiedenen Faktoren der nichtflüchtigen Speichervorrichtung 118 anzulegen. Zum Beispiel kann die Steuerung 102 oder die Steuerung 122 der nichtflüchtigen Speichervorrichtung 118 eingerichtet sein, um eine bestimmte vorbestimmte Lesepegelspannung basierend auf dem Programmlöschzykluszähler der nichtflüchtigen Speichervorrichtung 118 anzulegen.
-
Bei einigen Implementierungen können Daten, die aus dem Quellblock der nichtflüchtigen Speichervorrichtung gelesen werden, in einer Datenspeichereinheit gespeichert werden, die mit der Kodier-/Dekodier-Maschine 104 gekoppelt ist. Die aus dem Quellblock gelesenen Daten können kodiert sein. Bei einigen Implementierungen kann die Steuerung 102 beispielsweise über den Prozessor 103 eingerichtet sein, um eine Kennung für jede Leseoperation bereitzustellen, die von der Steuerung angefordert wird. Die Kennung kann eine Kennung eines Pufferspeicherplatzes in einer Datenspeichereinheit sein, die mit der Steuerung 102 gekoppelt ist oder in der Steuerung 102 beinhaltet ist. Zum Beispiel kann die Datenspeichereinheit mit dem Prozessor 103 der Steuerung 102 gekoppelt sein.
-
Die Steuerung 102 versucht zum Beispiel über die Kodier-/Dekodier-Maschine 104, die empfangenen Daten unter Verwendung der ersten Lesepegelspannung (Block 502) zu lesen. Die Kodier-/Dekodier-Maschine 104 kann versuchen, die empfangenen Daten durch Dekodieren der kodierten Daten oder des Codeworts zu lesen. Die Kodier-/Dekodier-Maschine 104 kann eingerichtet sein, um die empfangenen Daten unter Verwendung der ersten Lesepegelspannung zu dekodieren, die beim Lesen dieser Daten aus dem Quellblock angelegt wird. Die Steuerung 102 kann über die Kodier-/Dekodier-Maschine 104 unter Verwendung der ersten Lesepegelspannung bestimmen, ob die empfangenen Daten erfolgreich gelesen oder dekodiert wurden (Block 503). Bei einigen Implementierungen kann das erfolgreiche Lesen der empfangenen Daten das erfolgreiche Dekodieren empfangener kodierter Daten beinhalten. Wenn die Kodier-/Dekodier-Maschine 104 die Daten durch Anlegen der ersten Spannung erfolgreich liest und/oder dekodiert, dann bestimmt die Steuerung 102 über den Prozessor 103 die Belegungsgrade des Zielblöcke, wie etwa der Zielblöcke 405, 406, in denen die erfolgreich gelesen Daten gespeichert werden können (Block 504). Der Prozessor 103 kann eingerichtet sein, um einen Zielblock zum Speichern der Daten, basierend auf dem verfügbaren Raum oder dem Belegungsgrad der Zielblöcke, auszuwählen. Bei einigen Implementierungen kann der Prozessor 103 eingerichtet sein, um verfügbaren Speicherplatz oder Belegungsgrad jedes der Zielblöcke basierend auf Daten zu bestimmen, die für das Anzeigen des verfügbaren Speicherraums oder freien Raums der Zielblöcke relevant sind. Bei einigen Implementierungen können dem Prozessor 103 Daten bereitgestellt werden, die mit dem verfügbaren Speicherplatz oder den Belegungsgraden aller Zielblöcke zu Beginn des Datenumlagerungsprozesses in Beziehung stehen, und er kann eingerichtet sein, um Daten zu erhalten und/oder zu aktualisieren, die mit dem verfügbaren Speicherplatz oder den Belegungsgraden der Zielblöcke in Beziehung stehen, nachdem Daten in den Zielblöcken gespeichert werden. Zum Beispiel kann der Prozessor 103 nach jedem während des Umlagerungsprozesses ausgegebenen Daten-Schreiboperationsbefehl den verfügbaren Speicherplatz des Zielblocks, in dem die Daten gespeichert werden, aktualisieren.
-
Die Steuerung 102 ordnet über den Prozessor 103 die Daten dem Zielblock, basierend auf den Belegungsgraden der Zielblöcke (Block 505), zu. Der Prozessor 103 kann eingerichtet sein, um die Daten dem Zielblock mit der geringsten Menge an verfügbarem Speicherplatz oder dem höchsten Belegungsgrad der Zielblöcke zuzuordnen. Der Prozessor 103 kann die Daten einem Zielblock zuordnen, indem er eine Kennung der Daten, wie etwa die Pufferkennung der Daten, einem Umlagerungspuffer zuordnet, wie etwa den Umlagerungspuffern 403, 404. Bei einigen Implementierungen kann der Prozessor 103 eingerichtet sein, um die Pufferkennung der Daten in einem Umlagerungspuffer zu speichern, der dem Zielblock zugeordnet ist. Zum Beispiel kann der Prozessor 103 bestimmen, dass ein Zielblock 306 über den höchsten Belegungsgrad oder den geringsten verfügbaren Speicherraum verfügt, und ordnet die Daten dem Zielblock 406 zu, indem er die Pufferkennung in den Umlagerungspuffer 404 speichert, wobei der Umlagerungspuffer dem Zielblock 306 zugeordnet ist. Die Steuerung 102 bewirkt über den Prozessor 103, dass die Daten in dem zugehörigen Zielblock gespeichert werden (Block 512). Zum Beispiel kann der Prozessor 103 eingerichtet sein, um eine Daten-Schreiboperation oder einen Schreibbefehl an die nichtflüchtige Speichervorrichtung 118 auszugeben oder zu übertragen und die Daten an die nichtflüchtigen Speichervorrichtung 118 zu übertragen, um sie in dem Zielblock zu speichern. Der Prozessor 103 kann eingerichtet sein, um den Zielblock vorzugeben, wenn er die Daten-Schreiboperation oder den Schreibbefehl an die nichtflüchtige Speichervorrichtung 118 ausgibt oder überträgt. Zusätzliche Details des Blocks 512 sind unten beschrieben. Durch Zuordnen oder Auswählen des Zielblocks mit der geringsten Menge an verfügbarem Speicherplatz oder dem geringsten Belegungsgrad veranlasst die Steuerung 102 über den Prozessor 103, dass die Daten in diesem Zielblock gespeichert werden und dass dieser Zielblock gefüllt und geschlossen wird, wodurch die Anzahl der offenen Speicherblöcke in dem Datenspeichersystem 100 verringert wird. Die Verringerung der Anzahl von offenen Speicherblöcken verringert die Wahrscheinlichkeit von Fehlern, die in gespeicherten Daten auftreten, und verbessert die Bitfehlerrate, die den gespeicherten Daten und/oder der Bitfehlerrate des nichtflüchtigen Speichers zugeordnet ist. Das Verbessern der Bitfehlerrate verbessert die Leistung und Effizienz des Datenspeichersystems beim Durchführen verschiedener Datenoperationen. Beispielsweise verringert eine Verbesserung der Bitfehlerrate die Anzahl von Fehlern, die abgerufene Daten beeinflussen, wodurch die Anzahl von Prozessorzyklen verringert wird, die erforderlich sind, um Daten erfolgreich zu lesen und/oder zu dekodieren, und die Leistung und Effizienz des Datenspeichersystems verbessert werden.
-
Wenn, mit erneutem Bezug auf Block 503, die Steuerung 102 über die Kodier-/Dekodier-Maschine 104 die Daten nicht erfolgreich durch Anlegen der ersten Spannung liest oder dekodiert, dann bestimmt die Steuerung 102 über die Kodier-/ Dekodier-Maschine 104 eine verschobene Lesepegelspannung (Block 506). Die verschobene Lesepegelspannung ist eine Lesepegelspannung, die höher oder niedriger als die erste Lesepegelspannung sein kann. Bei einigen Implementierungen kann die Kodier-/Dekodier-Maschine 104 eingerichtet sein, um verschobene Lesepegelspannungen, basierend auf einem Spannungsverschiebungsmuster, zu bestimmen. Bei einigen Implementierungen kann ein Spannungsverschiebungsmuster eine Liste von verschobenen Lesepegelspannungen und/oder eine Liste von Ausgleichsbeträgen sein. Die Kodier-/Dekodier-Maschine 104 kann eingerichtet sein, um eine Reihe oder eine Anzahl von verschobenen Lesepegelspannungen aufrechtzuerhalten und/oder zu verfolgen. Beispielsweise kann die Kodier-/Dekodier-Maschine 104 einen Zähler beibehalten und/oder aktualisieren, der die Häufigkeit angibt, mit der die Lesepegelspannung verschoben wird. Die Kodier-/Dekodier-Maschine 104 kann eingerichtet sein, um eine neue verschobene Lesepegelspannung und/oder die Spannungshöhe zu bestimmen, um die eine Lesepegelspannung, beispielsweise die erste Lesepegelspannung, basierend auf solchen Zählern zu verschieben ist. Die Kodier-/Dekodier-Maschine 104 kann eingerichtet sein, um eine Abbildung zwischen Lesepegelspannungen und Zählerwerten oder Offsets oder Verschiebungsbeträgen und Zählerwerten zu verwenden, um eine neue verschobene Lesepegelspannung und/oder die Spannungshöhe, um die eine Lesepegelspannung zu verschieben ist, zu bestimmen.
-
Die Steuerung 102 kann so eingerichtet sein, dass sie einen Leseoperationsbefehl unter Verwendung der verschobenen Lesepegelspannung ausgibt. Beispielsweise kann die Kodier-/Dekodier-Maschine 104 zuerst die Lesepegelspannung um einen Schwellenbetrag erhöhen, und Daten können erneut aus dem Quellblock gelesen werden, wobei die erhöhte Lesepegelspannung verwendet wird. In ähnlicher Weise kann die Kodier-/Dekodier-Maschine 104 zuerst die Lesepegelspannung um einen Schwellenbetrag verringern, und Daten können erneut aus dem Quellblock unter Verwendung der verringerten Lesepegelspannung gelesen werden. Als Reaktion auf die Leseoperation, die unter Verwendung der verschobenen Lesepegelspannung durchgeführt wird, empfängt die Steuerung Daten von dem Quellblock, die unter Verwendung der verschobenen Lesepegelspannung (Block 507) abgerufen oder gelesen wurden. Die Steuerung 102 kann beispielsweise über die Kodier-/Dekodier-Maschine 104 eingerichtet sein, um die empfangenen Daten unter Verwendung der verschobenen Lesepegelspannung (Block 508) zu lesen oder erfolgreich zu dekodieren.
-
Die Steuerung 102 bestimmt beispielsweise über die Kodier-/Dekodier-Maschine 104, ob die Daten erfolgreich unter Verwendung der verschobenen Lesepegelspannung (Block 509) gelesen oder dekodiert wurden. Wenn die Steuerung 102 über die Kodier-/Dekodier-Maschine 104 bestimmt, dass die empfangenen Daten nicht erfolgreich unter Verwendung der verschobenen Lesepegelspannung gelesen oder dekodiert werden(„NEIN“ bei Block 509), fährt der Prozess mit Block 510 fort, um zu bestimmen, ob alle möglichen Lesepegelspannungen angelegt wurden, um die empfangenen Daten zu lesen oder zu dekodieren. Bei einigen Implementierungen kann die Steuerung 102 eingerichtet sein, um eine vorbestimmte Anzahl von Lesepegelspannungen an empfangene Daten anzulegen. Bei einigen Implementierungen kann die Steuerung 102 eingerichtet sein, um einen Zählerwert zu erzeugen und/oder zu aktualisieren, der eine Anzahl von Lesepegelspannungen anzeigt, die an empfangene Daten angelegt werden, und um zu bestimmen, ob alle möglichen Lesepegelspannungen an die empfangenen Daten angelegt wurden, indem bestimmt wird, ob die Anzahl von Lesepegelspannungen, die an empfangene Daten angelegt werden, die durch den Zähler angezeigt werden, eine vorbestimmte Anzahl von Lesepegelspannungen erfüllt. Bei einigen Implementierungen kann die Steuerung 102 eingerichtet sein, um einen Satz oder einen Bereich von Lesepegelspannungen anzulegen, zum Beispiel Lesepegelspannungen zwischen 1,2 Volt und 1,5 Volt, und zu bestimmen, ob alle möglichen Lesepegelspannungen angelegt wurden, um die empfangenen Daten zu lesen oder zu dekodieren, basierend darauf, ob alle Lesepegelspannungen innerhalb des Satzes oder des Bereichs der Lesepegelspannungen angelegt werden, um die empfangenen Daten zu lesen oder zu dekodieren. Bei einigen Implementierungen kann die Steuerung 102 eingerichtet sein, um jede Lesepegelspannung zu speichern, die angelegt wird, um die empfangenen Daten in einer Speichereinheit zu lesen oder zu dekodieren und zu bestimmen, ob jede Lesepegelspannung innerhalb des Satzes oder des Bereichs der Lesepegelspannungen basierend auf den Lesepegelspannungen der in der Speichereinheit gespeicherten Lesepegelspannungen und Lesepegelspannungen innerhalb des Satzes oder des Bereichs von Lesepegelspannungen angelegt wird. Zum Beispiel kann die Steuerung 102 eingerichtet sein, um die in der Speichereinheit angelegten und/oder gespeicherten Lesepegelspannungen mit den Lesepegelspannungen in dem Satz oder dem Bereich von Lesepegelspannungen zu vergleichen und zu bestimmen, dass alle möglichen Lesepegelspannungen angelegt werden, wenn jede Lesepegelspannung in dem Satz oder dem Bereich von Lesepegelspannungen in der Speichereinheit angelegt und/oder gespeichert wird.
-
Wenn die Steuerung 102 über die Kodier-/Dekodier-Maschine 104 bestimmt, dass nicht alle möglichen Lesepegelspannungen angelegt werden („NEIN“ bei Block 510), fährt der Prozess mit Block 506 fort, um eine neue verschobene Lesepegelspannung zu bestimmen. Bei Implementierungen, bei denen die Kodier-/Dekodier-Maschine 104 eingerichtet ist, um verschobene Lesepegelspannungen basierend auf einem Spannungsverschiebungsmuster zu bestimmen, können die neuen verschobenen Lesepegelspannungen basierend auf dem Spannungsverschiebungsmuster bestimmt werden. Bei Implementierungen, bei denen die Kodier-/Dekodier-Maschine 104 eingerichtet ist, um verschobene Lesepegelspannungen basierend auf einem Zähler zu bestimmen, der die Häufigkeit der Verschiebungen der Lesepegelspannung angibt. Wenn die Steuerung 102 über die Kodier-/Dekodier-Maschine 104 bestimmt, dass alle möglichen Lesepegelspannungen angelegt wurden („JA“ bei Block 510), dann endet der Prozess.
-
Wenn die Steuerung 102 über die Kodier-/Dekodier-Maschine 104 die empfangenen Daten unter Verwendung der verschobenen Lesepegelspannung erfolgreich liest oder dekodiert („JA“ bei Block 509), dann bestimmt die Steuerung 102 über den Prozessor 103, ob die zum erfolgreichen Lesen und/oder Dekodieren der Daten verwendete verschobene Lesepegelspannung höher oder niedriger als die erste Lesepegelspannung (Block 511) ist. Die Steuerung 102 ordnet über den Prozessor 103 die empfangenen Daten oder die dekodierten Daten einem Zielblock zu, wie etwa einem Zielblock 405, 406 (Block 512). Wenn die Steuerung 102 über den Prozessor 103 bestimmt, dass die verschobene Lesepegelspannung höher als die erste Lesepegelspannung war, dann kann die Steuerung 102 über den Prozessor 103 eingerichtet werden, um die Daten einem Zielblock zuzuordnen, der über einen Programmlöschzykluszähler verfügt, der unter oder gleich einem bestimmten Schwellenwert des Programmlöschzykluszählers ist. Wenn die Steuerung 102 über den Prozessor 103 bestimmt, dass die verschobene Lesepegelspannung niedriger als die erste Lesepegelspannung war, dann kann die Steuerung 102 über den Prozessor 103 eingerichtet werden, die Daten einem Zielblock zuzuordnen, der über einen Programmlöschzykluszähler verfügt, die über oder gleich einem bestimmten Schwellenwert der Programmlöschzykluszähler ist. Die Steuerung 102 kann über den Prozessor 103 eingerichtet sein, um die Daten einem Zielblock zuzuordnen, indem die Daten einem Umlagerungspuffer zugeordnet werden, wie etwa den Umlagerungspuffern 403, 404.
-
In einigen Implementierungen kann die Steuerung 102 über den Prozessor 103 eingerichtet sein, um empfangene Daten Zielblöcken zuzuordnen, indem eine Kennung der empfangenen Daten einem Umlagerungspuffer zugeordnet wird, der den Zielblöcken zugeordnet ist. Zum Beispiel ist, wie in 4 gezeigt, der Umlagerungspuffer 403 den Zielblöcken 405 zugeordnet, und der Umlagerungspuffer 404 ist den Zielblöcken 406 zugeordnet. Die Steuerung 102 kann eingerichtet sein, um die empfangenen Daten oder eine Kennung von empfangenen Daten einem Umlagerungspuffer zuzuordnen, indem die Kennung der empfangenen Daten in einem der Umlagerungspuffer gespeichert wird. Wenn zum Beispiel die empfangenen Daten unter Verwendung einer verschobenen Lesepegelspannung, die höher als die erste Lesepegelspannung ist, erfolgreich gelesen und/oder dekodiert wurden, dann kann die Steuerung 102 über den Prozessor 103 die empfangenen Daten und/oder die Kennung der empfangenen Daten dem Umlagerungspuffer zuordnen, der den Zielblöcken zugeordnet ist, die über einen niedrigen Programmlöschzykluszähler verfügen, wie etwa der Umlagerungspuffer 404, der den Zielblöcken 406 zugeordnet ist. In ähnlicher Weise kann, wenn die empfangenen Daten unter Verwendung einer verschobenen Lesepegelspannung, die niedriger als die erste Lesepegelspannung ist, erfolgreich gelesen und/oder dekodiert wurden, die Steuerung über den Prozessor die empfangenen Daten und/oder die Kennung der empfangenen Daten dem Umlagerungspuffer zuordnen, der den Zielblöcken zugeordnet ist, die über einen hohen Programmlöschzykluszähler verfügen, wie etwa der Umlagerungspuffer 403, der den Zielblöcken 405 zugeordnet ist.
-
Die Steuerung 102 bewirkt über den Prozessor 103, dass die Daten in den zugehörigen Zielblöcken gespeichert werden (Block 513). Die Steuerung 102 kann über den Prozessor 103 eingerichtet sein, um zu bewirken, dass die einem Zielblock zugeordneten empfangenen Daten in dem Zielblock gespeichert werden, indem eine Schreibdatenoperation oder ein Schreibbefehl an den nichtflüchtigen Speicher ausgegeben wird, der die Zielblöcke enthält. Die Steuerung 102 kann über den Prozessor 103 eingerichtet sein, um zu bewirken, dass die einem Umlagerungspuffer zugeordneten empfangenen Daten in den zugeordneten Zielblöcken gespeichert werden. Die Steuerung 102 kann über den Prozessor 103 eingerichtet sein um zu bewirken, dass die einem Umlagerungspuffer zugeordneten empfangenen Daten in den zugeordneten Zielblöcken gespeichert werden, indem eine Daten-Schreiboperation oder ein Schreibbefehls an den nichtflüchtigen Speicher, der die Zielblöcke beinhaltet, ausgegeben werden. Bei einigen Implementierungen kann die Steuerung 102 über den Prozessor 103 eingerichtet sein, um zu bewirken, dass die empfangenen Daten in dem Zielblock gespeichert werden, wenn die Menge der empfangenen Daten oder die dem Umlagerungspuffer zugeordnete Menge an Daten einen Datenschwellenwert erfüllt. Wenn zum Beispiel die dem Umlagerungspuffer zugeordnete Datenmenge 96 KB Daten oder eine physikalische Datenseite erfüllt, dann kann die Steuerung über den Prozessor bewirken, dass die dem Puffer zugeordneten Daten in dem Zielblock gespeichert werden, indem eine Daten-Schreiboperation an die nichtflüchtige Speichervorrichtung ausgegeben oder übertragen wird.
-
Die Blöcke des Flussdiagramms, die in 5 dargestellt sind, wurden als sequentiell auftretend beschrieben. Die vorliegende Technologie ist nicht auf die beschriebene sequentielle Durchführung des dargestellten Prozesses beschränkt. Einer oder mehrere der Blöcke kann/können parallel zu anderen Blöcken in dem dargestellten Prozess ausgeführt werden. Andere Variationen in dem dargestellten Prozess liegen innerhalb des Umfangs der vorliegenden Technologie.
-
Bei einer oder mehreren Implementierungen kann sich ein Quellbereich auf einen Quellblock beziehen. Bei einem oder mehreren Beispielen kann sich ein Quellblock auf einen oder mehrere Quellblöcke beziehen. Ein Quellblock kann als ein Quellspeicherblock bezeichnet werden. Bei einer oder mehreren Implementierungen kann sich ein Zielbereich auf einen Zielblock beziehen. In einem oder mehreren Beispielen kann sich ein Zielblock auf einen oder mehrere Zielblöcke beziehen. Ein Zielblock kann als ein Zielspeicherblock bezeichnet werden. Bei einer oder mehreren Implementierungen kann sich eine Datenerhaltungswiederherstellung auf einen Prozess einer Wiederherstellung von Daten beziehen, indem eine Lesepegelspannung so verschoben oder angepasst wird, dass sie niedriger als eine mittlere Lesepegelspannung oder eine voreingestellte Lesepegelspannung oder eine vorbestimmte Lesepegelspannung ist. Bei einer oder mehreren Implementierungen kann sich eine Störungsfehlerwiederherstellung auf einen Prozess einer Wiederherstellung von Daten beziehen, indem eine Lesepegelspannung so verschoben oder angepasst wird, dass sie höher als eine mittlere Lesepegelspannung oder eine voreingestellte Lesepegelspannung oder eine vorbestimmte Lesepegelspannung ist.
-
Verschiedene Beispiele von Aspekten der Offenbarung werden nachfolgend beschrieben. Diese dienen als Beispiele und schränken die vorliegende Technologie nicht ein.
-
Bei einer oder mehreren Implementierungen beinhaltet ein Datenspeichersystem eine nichtflüchtige Speichervorrichtung einschließlich eines Quellbereichs und eines Zielbereichs, wobei der Zielbereich einen ersten Zielblock und einer zweiten Zielblock beinhaltet, wobei sich der zweite Zielblock von dem ersten Zielblock unterscheidet, und eine Steuerung. Die Steuerung ist eingerichtet, um erste Daten in dem Quellbereich unter Verwendung einer ersten Lesepegelspannung zu lesen. Die Steuerung ist eingerichtet, um zweite Daten in dem Quellbereich unter Verwendung einer zweiten Lesepegelspannung zu lesen, die sich von der ersten Lesepegelspannung unterscheidet. Die Steuerung ist eingerichtet, um basierend auf den ersten und zweiten Lesepegelspannungen, jeweils die ersten Daten und die zweiten Daten einem der jeweiligen der ersten und der zweiten Zielblöcke zuzuordnen. Die Steuerung ist eingerichtet, um zu bewirken, dass jede der ersten und zweiten Daten in dem zugeordneten der ersten und zweiten Zielblöcke gespeichert wird.
-
Bei einer oder mehreren Implementierungen beinhaltet ein Computerimplementiertes Verfahren das Lesen erster Daten in einem Quellbereich einer nichtflüchtigen Speichervorrichtung unter Verwendung einer ersten Lesepegelspannung. Das Verfahren beinhaltet das Lesen zweiter Daten in dem Quellbereich unter Verwendung einer zweiten Lesepegelspannung, die sich von der ersten Lesepegelspannung unterscheidet. Das Verfahren beinhaltet das Speichern der ersten Daten von dem Quellbereich in einem ersten Zielblock der nichtflüchtigen Speichervorrichtung, die der ersten Lesepegelspannung zugeordnet ist, wobei sich der erste Zielblock in einem Zielbereich der nichtflüchtigen Speichervorrichtung befindet. Das Verfahren beinhaltet das Speichern der zweiten Daten von dem Quellbereich in einem zweiten Zielblock der nichtflüchtigen Speichervorrichtung, die der zweiten Lesepegelspannung zugeordnet ist, wobei sich der zweite Zielblock in dem Zielbereich der nichtflüchtigen Speichervorrichtung befindet.
-
Bei einer oder mehreren Implementierungen beinhaltet ein Datenspeichersystem eine nichtflüchtige Speichervorrichtung einschließlich eines Quellbereichs und eines Zielbereichs, wobei der Zielbereich einen ersten Zielblock und einer zweiten Zielblock beinhaltet, wobei sich der zweite Zielblock von dem ersten Zielblock unterscheidet. Das Datenspeichersystem beinhaltet ein Mittel zum Lesen erster Daten in dem Quellbereich unter Verwendung einer ersten Lesepegelspannung. Das Datenspeichersystem beinhaltet ein Mittel zum Lesen zweiter Daten in dem Quellbereich unter Verwendung einer zweiten Lesepegelspannung, die sich von der ersten Lesepegelspannung unterscheidet. Das Datenspeichersystem beinhaltet ein Mittel zum Umlagern der ersten und der zweiten Daten aus dem Quellbereich in den ersten oder den zweiten Zielblock, basierend auf den ersten und zweiten Lesepegelspannungen.
-
In einer oder mehreren Implementierungen kann ein nichtflüchtiges maschinenlesbares Medium maschinenausführbare Anweisungen einschließen, die bei Ausführung durch einem Prozessor ein Verfahren ausführen. Das Verfahren beinhaltet das Lesen erster Daten in einem Quellbereich einer nichtflüchtigen Speichervorrichtung unter Verwendung einer ersten Lesepegelspannung. Das Verfahren beinhaltet das Lesen zweiter Daten in dem Quellbereich unter Verwendung einer zweiten Lesepegelspannung, die sich von der ersten Lesepegelspannung unterscheidet. Das Verfahren beinhaltet das Speichern der ersten Daten von dem Quellbereich in einem ersten Zielblock der nichtflüchtigen Speichervorrichtung, die der ersten Lesepegelspannung zugeordnet ist, wobei sich der erste Zielblock in einem Zielbereich der nichtflüchtigen Speichervorrichtung befindet. Das Verfahren beinhaltet das Speichern der zweiten Daten von dem Quellbereich in einem zweiten Zielblock der nichtflüchtigen Speichervorrichtung, die der zweiten Lesepegelspannung zugeordnet ist, wobei sich der zweite Zielblock in dem Zielbereich der nichtflüchtigen Speichervorrichtung befindet.
-
Es versteht sich, dass andere Konfigurationen der vorliegenden Technologie für Fachleute aus der folgenden detaillierten Beschreibung leicht ersichtlich werden, wobei verschiedene Konfigurationen der vorliegenden Technologie zur Veranschaulichung gezeigt und beschrieben werden. Die vorliegende Technologie ermöglicht andere und unterschiedliche Konfigurationen und ihre verschiedenen Details ermöglichen Modifikationen in verschiedener anderer Hinsicht, ohne vom Umfang der vorliegenden Technologie abzuweichen. Dementsprechend sind die Zeichnungen und die detaillierte Beschreibung als veranschaulichend und nicht als einschränkend zu betrachten.
-
Viele der vorstehend beschriebenen Funktionen eines beispielhaften Prozesses und dargelegten Merkmale und Anwendungen können als Software- oder Firmware-Prozesse implementiert sein, die als ein Satz von Anweisungen spezifiziert sind, die auf einem computerlesbaren Speichermedium aufgezeichnet sind (auch als computerlesbares Medium bezeichnet). Wenn diese Anweisungen von einer oder mehreren Verarbeitungseinheit(en) (z. B. einem oder mehreren Prozessoren, Prozessorkernen oder anderen Verarbeitungseinheiten) ausgeführt werden, veranlassen sie die Verarbeitungseinheit(en) zum Durchführen der in den Anweisungen angegebenen Maßnahmen. Beispiele prozessorlesbarer Medien beinhalten, sind aber nicht begrenzt auf, flüchtige Speicher, nichtflüchtige Speicher, sowie andere Formen von Medien wie etwa magnetische Medien, optische Medien und elektronische Medien. Das prozessorlesbare Medium enthält keine Trägerwellen und elektronische Signale, die drahtlos oder über verdrahtete Verbindungen übertragen werden.
-
Der Begriff „Software“ soll gegebenenfalls Firmware beinhalten, die sich im Speicher oder anderen im Speicher gespeicherten Anwendungen befindet, die zur Verarbeitung durch einen Prozessor in den Arbeitsspeicher gelesen werden können. Auch können in einigen Implementierungen mehrere Softwareaspekte der vorliegenden Offenbarung als Unterteile eines größeren Programms implementiert werden, während die übrigen individuellen Softwareaspekte der vorliegenden Offenbarung beibehalten werden. In einigen Implementierungen können auch mehrere Software Aspekte als separate Programme implementiert werden. Schließlich liegt jede beliebige Kombination von separaten Programmen, die zusammen einen hier beschriebenen Softwareaspekt implementieren, innerhalb des Umfangs der vorliegenden Offenbarung. Bei einigen Implementierungen definieren die Softwareprogramme, wenn sie installiert sind, um auf einem oder mehreren elektronischen Systemen zu arbeiten, eine oder mehrere spezifische Maschinenimplementierungen, die die Operationen der Softwareprogramme ausführen und durchführen.
-
Ein Computerprogramm (auch als Programm, Software, Softwareanwendung, Skript oder Code bekannt) kann in jeder Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder prozeduraler Sprachen, und kann in jeder Form eingesetzt werden, einschließlich als ein eigenständiges Programm oder als Modul, Komponente, Subroutine, Objekt oder eine andere Einheit, die zur Verwendung in einer Computerumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Abschnitt einer Datei gespeichert sein, der andere Programme oder Daten (z. B. ein oder mehrere Skripte, die in einem Markup Language Dokument gespeichert sind) in einer einzelnen Datei, die dem betreffenden Programm zugeordnet ist, oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Codeanteile speichern) enthält.
-
Es versteht sich, dass veranschaulichende Blöcke, Module, Elemente, Komponenten, Verfahren und Algorithmen, die in diesem Dokument beschrieben werden, als elektronische Hardware, Computersoftware oder Kombinationen von beiden implementiert sein können. Um diese Austauschbarkeit von Hardware und Software zu veranschaulichen, wurden verschiedene veranschaulichende Blöcke, Module, Elemente, Komponenten, Verfahren und Algorithmen vorstehend allgemein hinsichtlich ihrer Funktionalität beschrieben. Ob eine derartige Funktionalität als Hardware oder Software implementiert ist, hängt von der spezifischen Anwendung und Designeinschränkungen ab, denen das Gesamtsystem unterliegt. Fachleute können die beschriebene Funktionalität auf verschiedene Arten für jede bestimmte Anwendung implementieren. Verschiedene Komponenten und Blöcke können anders angeordnet sein (z. B. in einer anderen Reihenfolge angeordnet oder in einer anderen Weise aufgeteilt sein), ohne vom Umfang der vorliegenden Offenbarung abzuweichen.
-
Es versteht sich, dass die spezifische Reihenfolge oder Hierarchie von Schritten in den offenbarten Prozessen als eine Veranschaulichung einiger beispielhafter Ansätze dargestellt wird. Basierend auf Designpräferenzen und/oder anderen Überlegungen versteht es sich, dass die spezifische Reihenfolge oder Hierarchie von Schritten in den Prozessen anders angeordnet werden kann. Zum Beispiel können in einigen Implementierungen einige der Schritte gleichzeitig ausgeführt werden. Somit stellen die beigefügten Verfahrensansprüche Elemente der verschiedenen Schritte in einer beispielhaften Reihenfolge dar und sollen nicht auf die spezielle dargestellte Reihenfolge oder Hierarchie beschränkt sein.
-
Die vorhergehende Beschreibung wird bereitgestellt, um es einem Fachmann zu ermöglichen, die verschiedenen hierin beschriebenen Aspekte in der Praxis umzusetzen. Die vorhergehende Beschreibung stellt verschiedene Beispiele der vorliegenden Offenbarung bereit, und die vorliegende Offenbarung ist nicht auf diese Beispiele beschränkt. Verschiedene Modifikationen dieser Aspekte werden dem Fachmann leicht ersichtlich sein, und die hierin definierten generischen Prinzipien können auf andere Aspekte angewendet werden. Daher sollen die Ansprüche nicht auf die hier gezeigten Aspekte beschränkt sein, sondern sollen den vollen Schutzumfang erhalten, der mit den in Sprachform niedergelegten Ansprüchen konsistent ist, wobei die Bezugnahme auf ein Element im Singular nicht „ein und nur ein“ Element bedeuten soll, sofern dies nicht speziell angegeben ist, sondern „ein oder mehrere“. Sofern nicht spezifisch anders angegeben, bezieht sich der Ausdruck „einige“ auf ein(en) oder mehrere. Pronomen im grammatikalischen Maskulin (z. B. sein) schließen das grammatikalische Feminin und Neutrum (z. B. ihr und sein) ein, und umgekehrt. Überschriften und Untertitel, falls vorhanden, werden nur der Einfachheit halber verwendet und schränken die vorliegende Offenbarung nicht ein.
-
Die Prädikatswörter „eingerichtet, um“, „betreibbar, um“ und „programmiert, um“ implizieren keine spezielle materielle oder immaterielle Modifikation eines Subjekts, sondern sollen stattdessen austauschbar verwendet werden. Zum Beispiel kann ein Prozessor, der eingerichtet ist, um eine Operation oder eine Komponente zu überwachen, auch bedeuten, dass der Prozessor so programmiert ist, die Operation zu überwachen und zu steuern, oder der Prozessor betreibbar ist, die Operation zu überwachen und zu steuern. Ebenfalls kann ein Prozessor, der eingerichtet ist, um Code auszuführen, als ein Prozessor ausgelegt sein, der programmiert ist, um Code auszuführen oder betreibbar ist, um Code auszuführen.
-
Die Ausdrücke „in Kommunikation mit“ und „gekoppelt“ bedeuten „in direkter Kommunikation mit“ oder „in indirekter Kommunikation mit“ über eine oder mehrere Komponenten, die in diesem Dokument benannt oder nicht benannt sind (z. B. ein Speicherkartenlesegerät).
-
Ein Ausdruck, wie etwa ein „Aspekt“, bedeutet nicht, dass ein solcher Aspekt für die vorliegende Offenbarung wesentlich ist oder dass ein derartiger Aspekt für alle Konfigurationen der vorliegenden Offenbarung gilt. Eine Offenbarung, die sich auf einen Aspekt bezieht, kann auf alle Konfigurationen oder eine oder mehrere Konfigurationen angewendet werden. Ein Aspekt kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie beispielsweise ein Aspekt, kann sich auf einen oder mehrere Aspekte beziehen und umgekehrt. Ein Ausdruck, wie etwa eine „Implementierung“, impliziert nicht, dass eine solche Implementierung für die vorliegende Offenbarung wesentlich ist oder dass eine solche Implementierung für alle Konfigurationen der vorliegenden Offenbarung gilt. Eine Offenbarung, die sich auf eine Implementierung bezieht, kann für alle Aspekte oder einen oder mehrere Aspekte gelten. Eine Implementierung kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie beispielsweise eine „Implementierung“, kann sich auf eine oder mehrere Implementierungen beziehen und umgekehrt. Ein Ausdruck, wie beispielsweise eine „Konfiguration“, impliziert nicht, dass eine solche Konfiguration für die vorliegende Offenbarung wesentlich ist oder dass eine solche Konfiguration für alle Konfigurationen der vorliegenden Offenbarung gilt. Eine Offenbarung, die sich auf eine Konfiguration bezieht, kann auf alle Konfigurationen oder eine oder mehrere Konfigurationen angewendet werden. Eine Konfiguration kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie z. B. eine „Konfiguration“, kann sich auf eine oder mehrere Konfigurationen beziehen und umgekehrt.
-
Das Wort „beispielhaft“ wird in der Bedeutung „als Beispiel oder zur Veranschaulichung dienend“ verwendet. Jeder Aspekt oder jedes Design, der bzw. das hier als „beispielhaft“ beschrieben wird, ist nicht zwangsläufig als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Designs zu verstehen.