-
HINTERGRUND
-
Gebiet
-
Der hierin offenbarte Gegenstand bezieht sich auf Lese- und Schreibprozesse einer Speichervorrichtung.
-
Information:
-
Speichervorrichtungen werden in vielen Typen von elektronischen Vorrichtungen verwendet, wie Computern, Mobiltelefonen, PDAs, Datenloggern und Navigationsgeräten, um nur einige Beispiele zu nennen. Unter solchen elektronischen Vorrichtungen können verschiedene Typen von nicht-flüchtigen Speichervorrichtungen verwendet werden, wie NAND- oder NOR-Flash-Speicher und Phasenübergangsspeicher (PCM), um nur einige Beispiele zu nennen. Im Allgemeinen können Schreib- oder Programmierprozesse verwendet werden, um Informationen in solchen Speichervorrichtungen zu speichern, während ein Leseprozess verwendet werden kann, um gespeicherte Informationen zu abzurufen.
-
Einige Typen von Speichervorrichtungen umfassen ein Speicherzellenfeld, welches in Gruppen von Speicherzellen wie Seiten, Blöcke, Partitionen, usw. partitioniert wird. In solchen Fällen können Speicherzellen innerhalb solch einer Gruppe gewöhnliche elektronische Schaltungen, welche z. B. Messverstärker und Zeilen-/Spaltendecoder umfassen, teilen. Dementsprechend kann sowohl das Lesen von als auch das Schreiben in solch eine Gruppe von Speicherzellen einige gewöhnliche elektronische Schaltungen umfassen. In solch einem Fall kann eine anhängige Schreiboperation, welche in einem Abschnitt solch einer Gruppe von Speicherzellen auftritt, eine Leseoperation daran hindern, in einem anderen Abschnitt der gleichen Gruppe von Speicherzellen aufzutreten. Solch eine beschränkende Bedingung kann in langsameren Leseoperationen und insgesamt in reduzierter Leistungsfähigkeit einer Speichervorrichtung resultieren.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Nicht-einschränkende und nicht-erschöpfende Ausführungsformen werden mit Bezug auf die folgenden Zeichnungen beschrieben, wobei sich gleiche Bezugszeichen auf gleiche Teile, über die verschiedenen Zeichnungen hinweg, beziehen, sofern nicht anders spezifiziert.
-
1–4 sind schematische Diagramme eines Abschnitts eines Speichers, gemäß einer Ausführungsform.
-
5 ist ein Flussdiagramm eines Prozesses zum Lesen von einer Partition des Speichers, gemäß einer Ausführungsform.
-
6 ist ein Flussdiagramm eines Prozesses zum Aktualisieren eines Fehlerkorrektur-Code(ECC)-Abschnitts des Speichers gemäß einer Ausführungsform.
-
7 ist ein schematisches Diagramm, welches eine beispielhafte Ausführungsform eines Rechnersystems darstellt.
-
DETAILLIERTE BESCHREIBUNG
-
Der in dieser Beschreibung durchgehend gemachte Bezug auf „eine Ausführungsform” bedeutet, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, welche/s in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform des beanspruchten Gegenstands umfasst wird. Wenn daher der Ausdruck „in einer Ausführungsform” oder „eine Ausführungsform” an verschiedenen Stellen in dieser Beschreibung auftritt, so bedeutet dies nicht notwendigerweise, dass diese sich alle auf dieselbe Ausführungsform beziehen. Des Weiteren können die bestimmten Merkmale, Strukturen oder Eigenschaften in einer oder mehreren Ausführungsformen kombiniert werden.
-
In einer Ausführungsform kann eine Speichervorrichtung, wie NAND, NOR oder PCM-Flash, ein Speicherfeld umfassen, welches in Gruppen von Speicherzellen, Partitionen genannt, partitioniert ist. Speicherzellen innerhalb solcher Partitionen können gewöhnliche elektronische Schaltungen, welche z. B. Messverstärker und Zeilen-/Spaltendecoder umfassen, teilen. In einer Implementierung kann ein Speicherfeld, zusätzlich zu einer Mehrzahl von Partitionen, in welchen Benutzerdaten gespeichert werden, eine Fehlerkorrektur-Code(ECC)-Partition umfassen, um ECC zu speichern. Solch ein ECC kann benutzt werden, um Daten mit Paritäts-Bits zu ergänzen, welche genug Extrainformation für die Daten umfassen, um die Daten zu rekonstruieren, wenn eines oder mehrere Bits der Daten korrumpiert werden. Z. B. kann solch ein ECC während eines Prozesses des Lesens gespeicherter Daten und/oder eines Prozesses des Verifizierens nach dem Schreiben der Daten eingesetzt werden. Ein ECC kann eine Kette von Daten, welche mit Paritäts-Bits ergänzt sind, umfassen. Ein Prozess zum Konstruieren eines ECC kann, zumindest zum Teil, auf einer bestimmten verwendeten Anwendung basieren. In einer bestimmten Implementierung kann ein ECC, zumindest zum Teil, auf parallelen Verschlüsselungs- und Entschlüsselungstechniken basieren. Solche Techniken können einen 1 Bit-Fehlerkorrigierenden-Binär-Hamming-Code, einen Mehr-als-1-Bit-Fehlerkorrigierenden-Binär-Bose Chaudhury-Hecquenghem(BCH)-Code, nicht-binären Reed-Solomon-Code oder einen Faltungscode umfassen, um nur einige Beispiele zu nennen.
-
In einer Ausführungsform kann ein ECC in einer Technik zum Ausführen einer Lesen-während-Schreiben-Operation in einer bestimmten Partition eines Speicherfeldes verwendet werden. In solch einer Technik kann ein ECC, statt zum Detektieren und Korrigieren von Fehlern benutzt zu werden, wie oben beschrieben, verwendet werden zum Verschlüsseln von Information, welche repräsentativ für Inhalte in einer oder mehreren Partitionen eines Speicherfeldes ist, so dass solche Inhalte zu einer späteren Zeit während einer gleichzeitigen Schreiboperation gelesen werden können. Solch ein ECC kann geschrieben werden in und gespeichert werden in einer ECC-Partition, welche getrennt und verschieden von der einen oder den mehreren Partitionen in einem Speicherfeld, welches zum Speichern der Daten benutzt wird, sein kann. Hierbei werden solche Partitionen, welche verwendet werden, um Daten wie Benutzerdaten, welche in die Partitionen geschrieben oder von den Partitionen gelesen werden können, zu speichern, Datenpartitionen genannt werden, um sie z. B. von einer ECC-Partition zu unterscheiden. Insbesondere kann eine ECC-Partition ECC umfassen, welcher zumindest zum Teil auf Daten basiert, welche in einer Anzahl von Datenpartitionen gespeichert sind. Z. B. kann ECC, wenn Daten in Datenpartitionen eins bis acht geschrieben werden, kalkuliert werden, basierend auf den Daten, welche in die Datenpartitionen eins bis acht geschrieben wurden. Solch ein kalkulierter ECC kann dann in einer ECC-Partition gespeichert werden und z. B. zu einer späteren Zeit in einem Prozess zum Feststellen der Inhalte irgendeiner der Datenpartitionen eins bis acht verwendet werden. Solch ein Prozess des Feststellens der Inhalte einer Datenpartition kann statt des direkten Lesens solcher Inhalte ausgeführt werden. Hier bezieht sich der Ausdruck „direktes Lesen” auf einen Prozess des Erfassens eines Zustands einer oder mehrerer Speicherzellen mittels Messverstärker und anderen Schaltungen. Im Gegensatz dazu kann ein Zustand einer oder mehrerer Speicherzellen „indirekt gelesen” werden durch das Schlussfolgern oder das Feststellen solch eines Zustands ohne einen Prozess des Erfassens der Speicherzellen, wie unten beschrieben. Direktes Lesen der Inhalte eines Blocks einer Datenpartition mag nicht erlaubt sein während einer anhängigen Schreiboperation in der gleichen Datenpartition, weil z. B. eine Suspendier-Operation erforderlich sein kann. Jedoch, wie im Detail unten beschrieben, gemäß einer bestimmten Ausführungsform, kann indirektes Lesen von Inhalten eines Blocks einer Datenpartition ausgeführt werden, selbst wenn solch ein Block zu einer Datenpartition gehört, welche gerade dabei ist, beschrieben zu werden. In einer Implementierung kann eine Technik zum Ausführen einer solchen Lesen-während-Schreiben-Operation (z. B. ein indirektes Lesen) eines Blocks oder anderen Abschnitts einer bestimmten Datenpartition das Feststellen der Inhalte des Blocks oder des anderen Abschnitts, basierend, zumindest zum Teil, auf Inhalten in anderen Datenpartitionen und einer ECC-Partition, umfassen. Daher kann die Leistungsfähigkeit einer Speichervorrichtung verbessert werden, wenn eine Operation zum Schreiben in eine bestimmte Datenpartition zum Lesen von der gleichen Datenpartition bis zur Beendigung einer Operation nicht suspendiert werden muss.
-
In einer Ausführungsform kann eine Technik zum gleichzeitigen Ausführen einer Lesen-während-Schreiben-Operation in einer Datenpartition einer Speichervorrichtung das Kalkulieren eines ECC, basierend, zumindest zum Teil, auf Inhalten individueller Datenpartitionen in einem Speicher umfassen. Solch ein ECC kann z. B. in einer ECC-Partition gehalten werden. Solch ein ECC kann mit einem bestimmten Abschnitt oder Block der individuellen Datenpartitionen korrespondieren. Z. B. kann ein ECC für Block 2 einen ECC umfassen, welcher durch Benutzen der Inhalte des Blocks 2 der individuellen Datenpartitionen kalkuliert wurde. Ein anderer ECC für Block 3 kann einen ECC umfassen, welcher durch Benutzen der Inhalte des Blocks 3 der individuellen Datenpartitionen kalkuliert wurde, usw. Solche Werte des ECC (z. B. ECC für Block 2, ECC für Block 3, usw.) können in einer ECC-Partition gespeichert werden. Durch das Benutzen solch eines ECC z. B. können Inhalte eines Blocks einer bestimmten Datenpartition indirekt gelesen werden, basierend, zumindest zum Teil, auf Inhalten von korrespondierenden Blöcken von Datenpartitionen, anders als die bestimmte Datenpartition und der ECC, welcher mit dem Block korrespondiert, wie im Detail unten beschrieben. In einer Implementierung können Inhalte der Datenpartitionen anders als solch eine bestimmte Datenpartition seriell oder miteinander parallel über eine Leitung oder einen Bus in einem Prozess des indirekten Lesens der Inhalte der bestimmten Datenpartition gelesen werden.
-
Wie oben beschrieben, kann eine Schreiboperation einen direkten Leseprozess einer Datenpartition daran hindern, in der gleichen Datenpartition aufzutreten. Solche Schreiboperationen können durch einen Prozessor, welcher z. B. eine Anwendung ausführt, initiiert werden. Solche Schreiboperationen können auch durch einen Speichermikrocontroller, welcher in der Speichervorrichtung eingebettet ist oder mit der Speichervorrichtung gestapelt ist, während irgendeines einer Anzahl von internen Speicherprozessen initiiert werden. Z. B. kann ein Speichermikrocontroller Schreiboperationen in eine oder mehrere Partitionen eines Speicherfeldes initiieren, um Verschleißausgleich, Speicherbereinigung, Bad-Block-Management und/oder Auffrischungsprozesse auszuführen. Solche Prozesse können z. B. Hintergrundoperationen umfassen, welche nicht sichtbar für einen Prozessor und/oder Benutzer auf einer Anwendungsebene sind. Hierin beschriebene Ausführungsformen können es solchen Schreiboperationen erlauben, aufzutreten, ohne eine Notwendigkeit solche internen Speicherprozesse zu suspendieren.
-
In einer Ausführungsform kann ein ECC kalkuliert und/oder aktualisiert werden in Antwort auf Daten, welche in eine oder mehrere Datenpartitionen in ein Speicherfeld geschrieben werden. Wie oben beschrieben, kann ein ECC, zumindest zum Teil, auf solchen Daten basieren. Insbesondere kann ein Prozess zum Kalkulieren eines ECC direktes Lesen der Inhalte von Datenpartitionen und das Benutzen solcher Inhalte in den ECC-Kalkulationen umfassen. In einer Implementierung kann eine eingehende Leseanfrage (z. B. initiiert durch einen Prozessor oder Speichermikrocontroller) in Konflikt stehen mit Leseoperationen, welche in ECC-Kalkulationen involviert sind. Dementsprechend kann in einem Fall solch eine eingehende Leseanfrage abgelehnt werden, wenn individuelle Datenpartitionen mit ECC-Kalkulationen beschäftigt sind. In einem anderen Fall jedoch können ein oder mehrere Prozesse, welche ECC-Kalkulationen umfassen, suspendiert werden, so dass eine eingehende Leseanfrage nicht abgelehnt werden muss. Nach Ausführen der eingehenden Leseanfrage können ein oder mehrere Prozesse, welche ECC-Kalkulationen umfassen, fortgesetzt werden, obwohl der beanspruchte Gegenstand nicht in dieser Weise beschränkt ist.
-
In einer Ausführungsform kann eine Technik zum Lesen-während-Schreiben in einer Datenpartition eines Speicherfeldes in einer Speichervorrichtung ausgeführt werden, welche eine ECC-Partition zum Speichern von ECC und einen Speichermikrocontroller zum Kalkulieren von ECC umfasst, basierend, zumindest zum Teil, auf Inhalten von individuellen Datenpartitionen in dem Speicherfeld. Solch ein Speichermikrocontroller kann einen Lesebefehl zum Lesen der Inhalte eines ersten Abschnitts einer bestimmten Datenpartition, während des Schreibens in einen zweiten Abschnitt der gleichen Datenpartition, initiieren. Der Leseabschnitt kann der gleiche wie der Schreibabschnitt sein, aber bis die Schreiboperation beendet ist, kann nur der alte Inhalt gelesen werden. Inhalte des ersten Abschnitts können festgestellt werden (z. B. indirekt gelesen), basierend, zumindest zum Teil, auf dem ECC, welcher in einer ECC-Partition gespeichert wird. Inhalte des ersten Abschnitts können auch festgestellt werden, basierend, zumindest zum Teil, auf Inhalten von anderen Datenpartitionen. Daher müssen Inhalte des ersten Abschnitts der Datenpartition nicht direkt gelesen werden, jedoch können sie stattdessen unter Benutzung des ECC und der Inhalte in anderen Datenpartitionen indirekt gelesen werden. In einer Implementierung können z. B. der erste Abschnitt und der zweite Abschnitt der Datenpartition mindestens eine Gruppe von Messverstärkern teilen, obwohl der beanspruchte Gegenstand nicht in dieser Weise beschränkt ist.
-
1 ist ein schematisches Diagramm eines Abschnitts 100 des Speichers, gemäß einer Ausführungsform. Z. B. kann solch ein Speicher NAND, NOR oder PCM-Flash-Speicher umfassen, welcher in Datenpartitionen der Speicherzellen organisiert werden kann. In den folgenden Beschreibungen kann solch ein Abschnitt des Speichers als acht Datenpartitionen umfassend beschrieben werden. Solch eine bestimmte Anzahl von Datenpartitionen ist lediglich der Einfachheit halber und zum Vereinfachen der Erklärung und des Verstehens beschrieben. Jedoch ist es zu verstehen, dass die Anzahl der Datenpartitionen, welche in hierin beschriebenen Ausführungsformen involviert sind, nicht auf eine bestimmte Anzahl beschränkt ist und der beanspruchte Gegenstand diesbezüglich nicht beschränkt ist. Fortfahrend mit der Beschreibung von 1, kann der Speicherabschnitt 100 eine Anzahl (z. B. acht) von Datenpartitionen 110 umfassen. In einer Implementierung können solche Datenpartitionen das Speicherzellenfeld 116, den Zeilendecoder 113, den Spaltendecoder 136, die Programmierlader 133 (z. B. benutzt während Schreiboperationen zum Bestimmen der zu beschreibenden Speicherzellen), einen oder mehrere Messverstärker 130 und andere Schaltungen 120, welche z. B. in Lese-/Schreiboperationen der assoziierten Datenpartitionen involviert sind, umfassen.
-
In einer Implementierung kann eine Leseoperation zum direkten Lesen von einer Datenpartition gleichzeitig mit einer Schreiboperation zum Schreiben in eine andere Datenpartition auftreten. In solch einem Fall braucht es zu keiner Konkurrenzsituation oder keinem Konflikt zu kommen, weil, unter einer Anzahl von Gründen, solche Datenpartitionen ihre eigenen Leseschaltungen (z. B. Messverstärker) und/oder z. B. Zeilen- und Spalten-Decodier-Schaltungen umfassen können. So kann für ein bestimmtes Beispiel die Leseoperation 140 zum direkten Lesen von Datenpartition 1 gleichzeitig mit der Schreiboperation 160 zum Schreiben in die Datenpartition 6 auftreten. Die Leseoperation 140 kann z. B. einen Prozess 145 des Messens der Zustände der gelesenen Speicherzellen in Datenpartition 1 über die Messverstärker 130 und des Schreibens von Daten, welche repräsentativ für die Zustände sind, in einen Ausgabepuffer 150 umfassen.
-
2 ist ein schematisches Diagramm des Abschnitts 100 des Speichers, gemäß einer anderen Ausführungsform. Wie oben erwähnt, kann eine Leseoperation zum direkten Lesen von einer Datenpartition gleichzeitig mit einer Schreiboperation zum Schreiben in eine andere Datenpartition auftreten. In einem Fall, auftretend wie in Datenpartition 170 gezeigt, kann jedoch ein Konflikt auftreten. Insbesondere kann die Leseoperation 240 zum direkten Lesen von einem Block der Datenpartition 6 nicht in der Lage sein, gleichzeitig mit der Schreiboperation 260 zum Schreiben in einen anderen Block der Datenpartition 6 aufzutreten. In einer Implementierung z. B. kann die Schreiboperation 260, nach Empfangen eines Befehls (z. B. von einem externen Prozessor oder von einem Abschnitt eines internen Speichermikrocontrollers) zum Ausführen der Leseoperation 240, suspendiert werden, bis die Leseoperation 240 beendet ist. In einer anderen Implementierung kann ein Befehl zum Ausführen der Leseoperation 240 abgelehnt und/oder verzögert werden, bis die Schreiboperation 260 beendet ist. In beiden Implementierungen kann die Leseoperation 240 z. B. einen Prozess 245 des Messens der Zustände der gelesenen Speicherzellen in Partition 6 über die Messverstärker 130 und des Schreibens von Daten, welche repräsentativ für die Zustände sind, in einen Ausgabepuffer 250 umfassen.
-
3 ist ein schematisches Diagramm eines Abschnitts 300 des Speichers, gemäß einer Ausführungsform. Ähnlich dem oben beschriebenen Speicher, welcher den Abschnitt 100 umfasst, kann solch ein Speicher NAND, NOR oder PCM-Flash-Speicher umfassen, welcher in Partitionen der Speicherzellen organisiert sein kann. Jedoch kann der Speicherabschnitt 300 ECC-Partitionen 310 zusätzlich zu acht Datenpartitionen, welche oben in den 1 und 2 beschrieben sind, umfassen. (wiederum ist es zu verstehen, dass der beanspruchte Gegenstand nicht auf irgendeine bestimmte Anzahl von Datenpartitionen beschränkt ist) In einer Implementierung kann solch eine ECC-Partition 310 das Speicherzellenfeld 316, den Zeilendecoder 313, den Spaltendecoder 336, Programmierlader 333, einen oder mehrere Messverstärker 330 und andere Schaltungen 320, welche z. B. in Lese-/Schreiboperationen der ECC-Partition involviert sind, umfassen. Obwohl die Größen (z. B. die Anzahl der Speicherzellen) der Speicherzellenfelder 216 der Datenpartitionen 0 bis 7 substantiell gleich sein können, kann die Größe des Speicherzellenfeldes 316 für die ECC-Partition 310 unterschiedlich sein. Z. B. kann das Speicherzellenfeld 316 substantiell größer als das Speicherzellenfeld 216 der Datenpartition 0 oder das Speicherzellenfeld 370 der Datenpartition 6 sein. Eine bestimmte Größe des Speicherzellenfelds 316 kann, zumindest zum Teil, auf bestimmten Details der ECC-Techniken, welche zum Kalkulieren des ECC verwendet werden, um im Speicherzellenfeld 316 gespeichert zu werden, der Anzahl und Größe der Datenpartitionen, der Größe der Blöcke oder Seiten in Datenpartitionen, usw. basieren.
-
Wie oben beschrieben, kann eine Leseoperation zum direkten Lesen von einer Datenpartition gleichzeitig mit einer Schreiboperation zum Schreiben in eine andere Datenpartition auftreten, da keine Konkurrenzsituation oder kein Konflikt aufzutreten braucht. So kann für ein bestimmtes Beispiel die Leseoperation 344 zum Lesen von einem Block in Datenpartition 2 gleichzeitig mit der Schreiboperation 360 zum Schreiben in einen Block in der Datenpartition 6 auftreten. Jedoch kann die Leseoperation 340 zum direkten Lesen von einem Block in Datenpartition 6 nicht in der Lage sein, z. B. gleichzeitig mit der Schreiboperation 360 zum Schreiben in den gleichen oder einen anderen Block der gleichen Datenpartition 6 aufzutreten. Nichtsdestotrotz umfassen die hierin beschriebenen Ausführungsformen Techniken zum indirekten Lesen von Inhalten eines Abschnitts einer Datenpartition, während ein anderer Abschnitt der gleichen Datenpartition programmiert wird. Solche Techniken können ECC, welcher in der ECC-Partition 310 gespeichert ist, benutzen. Daher, z. B., während die Schreiboperation 360 in einem ersten Block der Datenpartition 6 auftritt, brauchen Inhalte eines zweiten Blocks der Datenpartition 6, welche durch die Leseoperation 340 gelesen werden sollen, nicht durch direktes Lesen von dem zweiten Block festgestellt werden. Der erste und der zweite Block können der gleiche sein, aber bis die Schreiboperation beendet ist, kann nur der alte Inhalt gelesen werden. Stattdessen können solche Inhalte indirekt gelesen und festgestellt werden, basierend auf Inhalten der korrespondierenden Blöcke der ECC-Partition und den Datenpartitionen 0 bis 5 und 7 (z. B. alle Datenpartitionen außer der Datenpartition 6), wie im Detail unten erklärt. In einer Implementierung kann ein solcher ECC kalkuliert worden sein, während des letzten Mals, dass der zweite Block der Datenpartition 6 und/oder irgendeine der anderen Datenpartitionen programmiert wurden. Solch ein ECC kann kalkuliert worden sein, basierend, zumindest zum Teil, auf Daten, welche während dieses letzten Mals programmiert wurden. Details einer solchen ECC-Kalkulation werden jetzt beschrieben.
-
In einer Implementierung können Datenpartitionen eine Anzahl von Blöcken umfassen, wobei ein Block Bits, Bytes, Wörter, Wortgruppen usw. umfassen kann. Z. B. kann eine 1-Gbit-Speichervorrichtung 8 Datenpartitionen umfassen, wobei solch eine Datenpartition 64 Blöcke umfassen kann. Die Blöcke können eine Größe von 256-kBytes haben und in Seiten von 16 Wörtern oder 32 Bytes von Daten organisiert sein, welche durch eine Gruppe von Messverstärkern parallel gelesen werden können, obwohl der beanspruchte Gegenstand nicht in dieser Weise beschränkt ist. Um Bezeichnungen einzuführen, kann ein Ausdruck zum Ausdrücken der Inhalte eines bestimmten Blocks innerhalb einer bestimmten Partition als PxBy geschrieben werden, wobei x eine Partitionsnummer ist und y ein Block innerhalb von Partition Nr. x ist. Z. B. können Inhalte des Blocks 23 in der Partition 0 geschrieben werden als P0B23, Inhalte des Blocks 36 der Datenpartition 4 können geschrieben werden als P4B36 usw. Dementsprechend kann unter Benutzung solcher Bezeichnungen der ECC der Blöcke der Datenpartitionen 0 bis 7 geschrieben werden als eine Funktion der Inhalte der Blöcke der Datenpartitionen 0 bis 7, welche in den Kalkulationen des ECC benutzt werden, wie folgt:
Block 0 ECC = f (P0B0, P1B0, P2B0, P3B0, P4B0, P5B0, P6B0, P7B0)
Block 1 ECC = f (P0B1, P1B1, P2,B1, P3B1, P4B1, P5B1, P6B1, P7B1)
Block 2 ECC = f (P0B2, P1B2, P2,B2, P3B2, P4B2, P5B2, P6B2, P7B2)
usw. Solch eine Funktion f kann irgendeine Anzahl von Operationen und/oder Algorithmen umfassen. Z. B. kann in einer Implementierung solch eine Funktion eine Verkettung der Inhalte der Blöcke der Datenpartitionen 0 bis 7 umfassen. In einer anderen Implementierung kann solch eine Funktion eine Kombination von Boolschen Operationen umfassen.
-
Details einer solchen Funktion können von einer bestimmten Situation zu einer anderen variieren und der beanspruchte Gegenstand ist in dieser Weise nicht beschränkt.
-
Zurückkehrend zu 3, wie bereits beschrieben, kann die Leseoperation 340 zum direkten Lesen von einem Block in der Datenpartition 6 nicht in der Lage sein, z. B. gleichzeitig mit der Schreiboperation 360 zum Schreiben in einen Block in der gleichen Datenpartition 6 aufzutreten. Zum Beschreiben eines solchen Falles in Ausdrücken der Blöcke, wie oben eingeführt, als ein bestimmtes Beispiel, kann die Leseoperation 340 zum direkten Lesen des Blocks 2 der Datenpartition 6 nicht in der Lage sein, gleichzeitig mit der Schreiboperation 360 zum Schreiben in Block 0 der gleichen Datenpartition 6 aufzutreten. Während jedoch die Schreiboperation 360 den Block 0 der Datenpartition 6 programmiert, müssen die Inhalte des Blocks 2 der Datenpartition 6, welche durch die Leseoperation 340 gelesen werden sollen, nicht durch das direkte Lesen von Block 2 der Datenpartition 6 festgestellt werden. Stattdessen können solche Inhalte indirekt gelesen werden, basierend auf Inhalten des Blocks 2 ECC 342, und Inhalten des Blocks 2 der Datenpartitionen 0 bis 5 und 7. Dementsprechend können die Inhalte des Blocks 2 der Datenpartition 6 als eine Funktion des ECC und die Inhalte der Blöcke der Datenpartitionen 0 bis 5 und 7, welche in den Kalkulationen des ECC für Block 2 benutzt werden, wie folgt geschrieben werden:
P6B2 = g(P0B2, P1B2, P2B2, P3B2, P4B2, P5B2, P7B2, Block 2 ECC).
-
Solch eine Funktion g kann irgendeine Anzahl von Operationen und/oder Algorithmen umfassen. Z. B. kann in einer Implementierung mindestens ein Abschnitt einer solchen Funktion g eine inverse Funktion von der oben beschriebenen f umfassen. Der obige Ausdruck impliziert, dass Daten des Blocks 2 der Datenpartition 6 von Block 2 ECC 342 und Daten in Block 2 der anderen Datenpartitionen geschlussfolgert oder festgestellt werden können. Dies kann gelten, weil der Block 2 ECC 342 vorher kalkuliert wurde, basierend, zumindest zum Teil, auf Daten in Block 2 der Datenpartition 6 und Daten in Block 2 der anderen Datenpartitionen. Daher können solche Daten, um die Leseoperation 340 zum direkten Lesen der Daten des Blocks 2 der Datenpartition 6 auszuführen, stattdessen indirekt gelesen werden, indem Block 2 ECC 342 und Daten in Block 2 der anderen Datenpartitionen benutzt werden. Dementsprechend kann solch eine Leseoperation einen Prozess 345 des direkten Lesens der Daten in Block 2 der Datenpartitionen 0 bis 5 und 7 und einen Prozess des direkten Lesens von Daten in Block 2 ECC 342 der ECC-Partition 310 umfassen. Solche Lesedaten können dem Kalkulationsblock 350 bereitgestellt werden, welcher z. B. einen Abschnitt eines Speichermikrocontrollers umfassen kann. Der Kalkulationsblock 350 kann eine oder mehrere Operationen zum indirekten Lesen der Daten des Blocks 2 der Datenpartition 6 unter Benutzung des Blocks 2 ECC 342 und Daten im Block 2 der anderen Datenpartitionen ausführen. Der Kalkulationsblock 350 kann danach Daten des Blocks 2 der Datenpartition 6 einem Ausgabepuffer 355 bereitstellen, wo solche Daten z. B. für einen Prozessor als Lesedaten, welche aus Leseoperation 340 resultieren, verfügbar sein können.
-
4 ist ein schematisches Diagramm des Abschnitts 300 des Speichers während eines Prozesses des Kalkulierens des ECC, gemäß einer Ausführungsform. Solch ein Prozess kann initiiert werden z. B. durch einen Speichermikrocontroller, nach oder während einer oder mehrerer Operationen zum Schreiben der Daten in eine oder mehrere Datenpartitionen. Wie oben diskutiert, kann ECC kalkuliert werden, basierend, zumindest zum Teil, auf solchen Daten in korrespondierenden Blöcken der Datenpartitionen 6 bis 7. Z. B. kann Block 2 kalkuliert werden, basierend, zumindest zum Teil, auf Daten in Block 2 der Datenpartitionen 0 bis 7. Dementsprechend kann ein Prozess des Kalkulierens des ECC einen Prozess 445 des direkten Lesens der Daten in Block 2 der Datenpartitionen 0 bis 7 und des Bereitstellens der Lesedaten an den ECC-Kalkulationsblock 450 umfassen. In einer Implementierung kann der ECC-Kalkulationsblock 450 einen Abschnitt eines Speichermikrocontrollers umfassen. Nach dem Kalkulieren des ECC für Block 2 kann der Kalkulationsblock 450 den ECC in einem Prozess 446 des Schreibens des kalkulierten ECC an die ECC-Partition 310 bereitstellen. Als Nächstes kann ein Prozess des Kalkulierens des ECC für nachfolgende Blöcke (z. B. Block 3, Block 4 usw.) ausgeführt werden, indem der oben beschriebene Prozess für die individuellen Blöcke benutzt wird. Selbstverständlich sind solche Details des Kalkulierens des ECC lediglich Beispiele, und der beanspruchte Gegenstand ist nicht in dieser Weise beschränkt.
-
5 ist ein Flussdiagramm eines Prozesses 500 zum indirekten Lesen von einer Datenpartition eines Speicherfeldes, gemäß einer Ausführungsform. Solch ein Prozess kann durch eine Speichervorrichtung ausgeführt werden, welche z. B. den Abschnitt 300, wie oben beschrieben, umfasst. Insbesondere kann, wie in dem Rechteck 510, solch ein Prozess in Antwort auf das Empfangen einer Anfrage zum Lesen von einem bestimmten Block in einer Datenpartition des Speicherfeldes, während eine Schreiboperation in der gleichen Datenpartition auftritt, ausgeführt werden. Solch eine Anfrage kann durch einen Prozessor, welcher eine Anwendung ausführt, und/oder einen Speichermikrocontroller, welcher Schreiboperationen in einer oder mehreren Datenpartitionen des Speicherfeldes zum Ausführen z. B. von Verschleißausgleich, Speicherbereinigung, Bad-Block-Management und/oder Auffrischungsprozesse ausführt, initiiert werden. Wie oben beschrieben, kann eine Leseoperation zum direkten Lesen von einem bestimmten Block in einer Datenpartition nicht in der Lage sein, gleichzeitig mit einer Schreiboperation zum Schreiben in einen anderen Block der gleichen Datenpartition aufzutreten. Daher können Inhalte des bestimmten Blocks statt des direkten Lesens von dem bestimmten Block der Datenpartition indirekt gelesen werden, indem die Inhalte der korrespondierenden Blöcke der anderen Datenpartitionen und ECC der korrespondierenden Blöcke benutzt werden. Dementsprechend, wie in den Rechtecken 520 und 530, können Inhalte der anderen Datenpartitionen und Inhalte des ECC der korrespondierenden Blöcke von der ECC-Partition direkt gelesen und benutzt werden, um die Inhalte des bestimmten Blocks indirekt zu lesen.
-
6 ist ein Flussdiagramm eines Prozesses 600 zum Aktualisieren einer ECC-Partition des Speichers, gemäß einer Ausführungsform. Solch ein Prozess kann durch einen Speichermikrocontroller einer Speichervorrichtung ausgeführt werden, welche z. B. den Abschnitt 300, wie oben beschrieben, umfasst. Insbesondere, wie in Rechteck 610, kann solch ein Prozess in Antwort auf das Empfangen einer Anfrage zum Schreiben in eine oder mehrere Datenpartitionen eines Speicherfeldes ausgeführt werden. Z. B., wenn neue Daten in solche Datenpartitionen eines Speicherfeldes geschrieben werden, kann ein aktualisierter ECC, basierend, zumindest zum Teil, auf den neuen Daten, kalkuliert werden.
-
Solch ein aktualisierter ECC kann einen älteren ECC ersetzen, welcher in einer ECC-Partition gespeichert ist, wie z. B. der ECC-Partition 310, gezeigt in 3. Der ECC kann kalkuliert werden, indem irgendeine Anzahl von Prozessen oder Algorithmen benutzt wird, welche neue in Datenpartitionen eines Speicherfeldes geschriebene Daten wie auch ältere Daten, welche in den Datenpartitionen gespeichert sind, benutzen können. In einer Implementierung kann ein bestimmter ECC kalkuliert werden, basierend, zumindest zum Teil, auf korrespondierenden Blöcken, über die Datenpartitionen eines Speicherfeldes hinweg. Z. B. wenn individuelle Datenpartitionen 64 Blöcke umfassen, kann die ECC-Partition 310 64 Werte des ECC, korrespondierend zu den Blöcken, speichern. Selbstverständlich ist solch eine Anzahl von Datenpartitionen und ECC-Werten lediglich ein Beispiel, und der beanspruchte Gegenstand ist nicht in dieser Weise beschränkt. In Rechteck 620 können Daten der korrespondierenden Blöcke über die Datenpartitionen direkt gelesen werden. In Rechteck 630 kann der ECC kalkuliert werden, indem solche Lesedaten verwendet werden.
-
In einer bestimmten Implementierung können zumindest Abschnitte des Prozesses 600 suspendiert werden, um es zu erlauben, dass ein Lesen für einen eingehenden Lesebefehl ausgeführt wird. Solche Abschnitte des Prozesses 600 können dann fortgeführt werden, nachdem solch ein Lesen beendet ist. Solch eine Suspendierung eines Prozesses zum Aktualisieren des ECC kann in verbesserter Lese-Leistungsfähigkeit einer Speichervorrichtung resultieren, da ein Lesebefehl (initiiert durch einen Prozessor, zum Beispiel) nicht verzögert werden muss. Daher wird an Raute 640 eine Feststellung gemacht, ob ein Lesebefehl empfangen wird. Wenn nicht, dann kann der Prozess 600 übergehen zu Rechteck 646, wobei ein Prozess des Kalkulierens des ECC beendet wird. Nach Beendigung, in Rechteck 680, kann der kalkulierte ECC in eine ECC-Partition der Speichervorrichtung geschrieben werden. Andererseits, wenn ein Lesebefehl bei Raute 640 empfangen wird, kann der Prozess 600 übergehen zu dem Rechteck 650 zum Suspendieren des Kalkulierens des ECC. Während solch einer Suspendierung kann das Überwachen des Fortschritts eines Leseprozesses, welcher aus dem eingehenden Lesebefehl resultiert, feststellen, ob solch ein Leseprozess beendet ist, wie in Raute 660. Wenn der Leseprozess nicht beendet ist, kann der Prozess 600 zurückspringen zu Raute 660 zum Fortsetzen des Überwachens des Leseprozesses. Andererseits, wenn der Leseprozess beendet ist, kann der Prozess 600 übergehen zu Block 670, wobei ein Prozess des Kalkulierens des ECC beendet wird. Nach Beendigung, in Rechteck 680, kann der kalkulierte ECC in eine ECC-Partition der Speichervorrichtung geschrieben werden. Selbstverständlich sind solche Details des Prozesses 600 lediglich Beispiele, und der beanspruchte Gegenstand ist nicht in dieser Weise beschränkt.
-
7 ist ein schematisches Diagramm, welches eine beispielhafte Ausführungsform eines Rechnersystems 700, welches eine Speichervorrichtung 710 umfasst, darstellt. Solch eine Rechnervorrichtung kann z. B. ein oder mehrere Prozessoren zum Ausführen einer Anwendung und/oder anderen Codes umfassen. Z. B. kann die Speichervorrichtung 710 eine Anzahl von Datenpartitionen und einer ECC-Partition, wie in 3 gezeigt, umfassen. Eine Rechnervorrichtung 704 kann repräsentativ für jegliche/s Vorrichtung, Gerät, oder Maschine sein, welche konfigurierbar sein kann zum Verwalten der Speichervorrichtung 710. Die Speichervorrichtung 710 kann einen Speichermikrocontroller 715 und einen Speicher 722 umfassen. Beispielhaft, aber nicht beschränkend, kann die Rechnervorrichtung 704 umfassen: eine oder mehrere Rechnervorrichtungen und/oder Plattformen, wie z. B. einen Desktop-Computer, einen Laptop-Computer, eine Workstation, eine Server-Vorrichtung o. Ä.; eine oder mehrere Personalcomputer oder Kommunikationsvorrichtungen oder -geräte, wie z. B. einen persönlichen digitalen Assistenten, eine mobile Kommunikationsvorrichtung o. Ä.; ein Rechnersystem und/oder assoziierte Diensteproviderfähigkeit, wie z. B. eine Datenbank oder ein Datenspeicherdiensteprovider/-system und/oder irgendeine Kombination davon.
-
Es wird anerkannt, dass alle oder ein Teil der verschiedenen Vorrichtungen, welche in System 700 gezeigt sind, und die Prozesse und Verfahren, welche hier weiterhin beschrieben werden, implementiert werden können, indem Hardware, Firmware, Software oder irgendeine Kombination davon benutzt oder anderweitig eingeführt wird. Daher kann, beispielhaft, aber nicht beschränkend, die Rechnervorrichtung 704 mindestens eine Verarbeitungseinheit 720 umfassen, welche mit dem Speicher 722 durch einen Bus 740 und einen Host oder Speichermikrocontroller 715 operativ gekoppelt ist. Die Verarbeitungseinheit 720 ist repräsentativ für eine oder mehrere Schaltungen, welche konfigurierbar sind zum Ausführen von mindestens einem Abschnitt einer Datenverarbeitungsprozedur oder eines Datenverarbeitungsprozesses. Als Beispiel, aber nicht beschränkend, kann die Verarbeitungseinheit 720 einen oder mehrere Prozessoren, Steuereinheiten, Mikroprozessoren, Mikrocontroller, anwendungsspezifische integrierte Schaltungen, digitale Signalprozessoren, programmierbare Logikvorrichtungen, feldprogrammierbare Gate-Arrays u. Ä. oder irgendeine Kombination davon umfassen. Die Verarbeitungseinheit 720 kann ein Betriebssystem umfassen, welches konfiguriert ist zum Kommunizieren mit Speichermikrocontroller 715. Solch ein Betriebssystem kann z. B. Befehle erzeugen, welche an den Speichermikrocontroller 715 über den Bus 740 gesendet werden sollen. Solche Befehle können Lese- und/oder Schreibbefehle umfassen. In Antwort auf einen Lesebefehl, z. B. kann der Speichermikrocontroller 715 den Prozess 500 wie oben beschrieben ausführen zum Ausführen eines Lesen-während-Schreiben-Prozesses.
-
Der Speicher 722 ist repräsentativ für irgendeinen Datenspeichermechanismus. Der Speicher 722 kann z. B. einen primären Speicher 724 und/oder einen sekundären Speicher 726 umfassen. Der primäre Speicher 724 kann z. B. einen Speicher mit wahlfreiem Zugriff, Nur-Lese-Speicher usw. umfassen. Während in diesem Beispiel als separat von der Verarbeitungseinheit 720 dargestellt, sollte es zu verstehen sein, dass alles oder Teile des primären Speichers 724 innerhalb der oder auf andere Weise zusammen angeordnet/gekoppelt mit der Verarbeitungseinheit 720 bereitgestellt werden können.
-
Der sekundäre Speicher 726 kann z. B. den gleichen oder einen ähnlichen Typ von Speicher wie der primäre Speicher und/oder eines oder mehrere Datenspeichervorrichtungen oder -systeme, wie z. B. ein Plattenlaufwerk, ein optisches Plattenlaufwerk, ein Bandlaufwerk, ein Festkörperspeicherlaufwerk usw. umfassen. In bestimmten Implementierungen kann der sekundäre Speicher 726 operativ empfänglich sein für, oder anderweitig konfigurierbar zum Koppeln mit einem computerlesbaren Medium 728. Das computerlesbare Medium 728 kann z. B. irgendein Medium umfassen, welches Daten, Code, und/oder Instruktionen für eine oder mehrere der Vorrichtungen in dem System 700 tragen und/oder verfügbar machen kann. Die Rechnervorrichtung 704 kann z. B. eine Eingabe/Ausgabe 732 umfassen.
-
In einer bestimmten Ausführungsform kann das Rechnersystem 700 die Speichervorrichtung 722, welche den Speicher 724 umfasst, und den Speicher-Mikrocontroller 715 zum Kalkulieren eines ECC, basierend, zumindest zum Teil, auf Inhalten der individuellen Speicherfeld-Partitionen im Speicher 724, umfassen. In Antwort auf einen Versuch des Lesens bestimmter Inhalte eines ersten Abschnitts einer bestimmten der individuellen Speicherfeld-Partitionen, während des Schreibens in einen zweiten Abschnitt der bestimmten der individuellen Speicherfeld-Partitionen, kann der Speicher-Mikrocontroller 715 die bestimmten Inhalte des ersten Abschnitts, basierend, zumindest zum Teil, auf dem ECC, feststellen. Das Rechnersystem 700 kann auch die Verarbeitungseinheit 720 zum Bedienen einer oder mehrerer Anwendungen und zum Initiieren der Lesebefehle, welche auf den Speicher-Mikrocontroller 715, z. B. zum Bereitstellen des Zugriffs auf Speicherzellen im Speicher 724, gerichtet sind, umfassen.
-
Die Eingabe/Ausgabe 732 ist stellvertretend für eine oder mehrere Vorrichtungen oder Merkmale, die konfiguriert werden können, um menschliche und/oder Maschinen-Eingaben anzunehmen oder auf andere Weise einzuführen, und/oder eine oder mehrere Vorrichtungen oder Merkmale, die konfiguriert werden können, um Ausgaben für Menschen und/oder Maschinen abzugeben oder auf andere Weise bereitzustellen. Beispielhaft, aber nicht beschränkend, kann die Eingabe-/Ausgabe-Vorrichtung 732 eine operativ konfigurierte Anzeige, Lautsprecher, Tastatur, Maus, Trackball, Berührungsbildschirm, Daten-Anschluss usw. umfassen.
-
Die Ausdrücke „und” und „und/oder” und „oder”, wie hierin benutzt, können eine Vielfalt an Bedeutungen umfassen, die zumindest in Teilen vom Kontext, in welchem Sie benutzt werden, abhängen werden. Typischerweise sollen „und/oder” sowie „oder”, wenn benutzt, um eine Liste wie A, B oder C zu assoziieren, bedeuten, dass A, B und C hier im inklusiven Sinn benutzt wird sowie A, B oder C im exklusiven Sinn benutzt wird. Der in dieser Beschreibung durchgehend gemachte Bezug auf „eine Ausführungsform” bedeutet, dass ein bestimmtes Merkmal, Struktur oder Eigenschaft, welche/s in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform des beanspruchten Gegenstands umfasst wird. Wenn daher der Ausdruck „in einer Ausführungsform” oder „eine Ausführungsform” an verschiedenen Stellen in dieser Beschreibung auftritt, so bedeutet dies nicht notwendigerweise, dass diese sich alle auf dieselbe Ausführungsform beziehen. Des Weiteren können die bestimmten Merkmale, Strukturen oder Eigenschaften in einer oder mehreren Ausführungsformen kombiniert werden.
-
Während veranschaulicht und beschrieben wurde, was gegenwärtig als beispielhafte Ausführungsformen angesehen wird, wird es durch Fachleute zu verstehen sein, dass verschiedene andere Modifikationen gemacht werden können und Äquivalente ersetzt werden können, ohne von dem beanspruchten Gegenstand abzuweichen. Zusätzlich können viele Modifikationen gemacht werden, um eine bestimmte Situation den Lehren des beanspruchten Gegenstandes anzupassen, ohne von dem zentralen hierin beschriebenen Konzept abzuweichen. Daher ist es beabsichtigt, dass der beanspruchte Gegenstand nicht auf die bestimmten offenbarten Ausführungsformen beschränkt wird, sondern dass solch ein beanspruchter Gegenstand auch alle Ausführungsformen umfassen kann, welche in den Bereich der beigefügten Ansprüche oder Äquivalente davon fallen.