-
TECHNISCHES GEBIET
-
Die vorliegende Offenbarung in den verschiedenen Ausführungsformen betrifft Speichervorrichtungen und bezieht sich insbesondere auf dynamische Warteschlangen von Speicherbefehlen unter Verwendung eines Seitenregisters einer Speichervorrichtung.
-
HINTERGRUND
-
Ein Array von Speicherzellen kann in verschiedene Subarrays unterteilt werden, so dass Speichervorgänge an jedem Subarray unabhängig voneinander ausgeführt werden können. Es kann jedoch schwierig sein, an einem zentralen Standort zu verfolgen, welche Vorgänge an bestimmten Subarrays ausgeführt werden.
-
ZUSAMMENFASSUNG
-
Es werden Vorrichtungen vorgestellt, die Speichervorgänge in eine Warteschlange stellen. In einer Ausführungsform schließt eine Vorrichtung ein Speicherelement mit integrierter Schaltung („IC“) ein. In bestimmten Ausführungsformen empfängt ein IC-Speicherelement einen Speicherbetriebsbefehl, der einer Bank von Speicherorten eines Speicherelements zugeordnet ist. Gemäß einer weiteren Ausführungsform stellt ein IC-Speicherelement einen Speicherbetriebsbefehl zum Ausführen auf einer Bank von Speicherorten in eine Warteschlange, indem ein Speicherort in einem Seitenregister für Daten bestimmt wird, die dem Speicherbetriebsbefehl zugeordnet sind. Ein Speicherort in einem Seitenregister kann eine Teilmenge verfügbarer Speicherorte in dem Seitenregister einschließen. In einigen Ausführungsformen speichert ein IC-Speicherelement Daten, die einem Speicherbetriebsbefehl an einem bestimmten Speicherort in einem Seitenregister zugeordnet sind.
-
In einer anderen Ausführungsform beinhaltet eine Vorrichtung Mittel zum Puffern einer Vielzahl von Speicherbetriebsbefehlen, die einer Vielzahl von Subarrays einer nichtflüchtigen Speichervorrichtung zugeordnet sind, unter Verwendung eines Seitenregisters der nichtflüchtigen Speichervorrichtung. In einer weiteren Ausführungsform beinhaltet eine Vorrichtung Mittel zum Speichern einer Vielzahl von Speicherbetriebsbefehlen in einem Seitenregister dergestalt, dass Daten für jeden der Speicherbetriebsbefehle kleiner sind als eine Seitengröße des Seitenregisters, so dass Daten für jeden der Vielzahl der Speicherbetriebsbefehle gleichzeitig im Seitenregister gespeichert werden. In einer Ausführungsform schließt eine Vorrichtung Mittel zum gleichzeitigen Verarbeiten von Daten ein, die in einem Seitenregister für mindestens einen Teilsatz einer Vielzahl von Speicherbetriebsbefehlen gespeichert sind.
-
Es werden Systeme zum Stellen von Speichervorgängen in eine Warteschlange vorgestellt. Ein System beinhaltet in einer Ausführungsform ein nicht flüchtiges Speichermedium mit einem Seitenpuffer und einem Controller. In bestimmten Ausführungsformen ist ein Controller so eingerichtet, dass er eine Vielzahl von Speicherbetriebsbefehlen für ein nichtflüchtiges Speichermedium empfängt. Ein Speicherbetriebsbefehl aus einer Vielzahl von Speicherbetriebsbefehlen kann für ein Subarray aus einer Vielzahl von Subarrays eines nichtflüchtigen Speichermediums bestimmt sein. In einer anderen Ausführungsform ist ein Controller dafür eingerichtet, Speicherorte in einem Seitenpuffer zum gleichzeitigen Speichern von Daten, die einer Vielzahl von Speicherbetriebsbefehlen zugeordnet sind, zu bestimmen. In verschiedenen Ausführungsformen ist ein Controller zum Ausführen von zumindest zwei Befehlen aus einer Vielzahl von Speicherbetriebsbefehlen eingerichtet, indem gleichzeitig Daten verwendet werden, die in einem Seitenpuffer, der zumindest zwei Speicherbetriebsbefehlen zugeordnet ist, gespeichert sind.
-
Figurenliste
-
Eine speziellere Beschreibung wird nachstehend unter Bezugnahme auf spezifische, in den beigefügten Zeichnungen veranschaulichte Ausführungsformen eingeschlossen. Angesichts dessen, dass diese Zeichnungen nur bestimmte Ausführungsformen der Offenlegung darstellen und deshalb nicht als ihren Umfang einschränkend betrachtet werden sollen, wird die Offenlegung mit zusätzlicher Spezifität und Detail durch die Verwendung der beigefügten Zeichnungen beschrieben und erläutert, in denen:
- 1 ist ein schematisches Blockdiagramm, das eine Ausführungsform eines Systems veranschaulicht, das ein Speicherverwaltungsmodul aufweist;
- 2 ist ein schematisches Blockdiagramm, das eine Ausführungsform eines Speicherelements veranschaulicht;
- 3 ist ein schematisches Blockdiagramm, das eine weitere Ausführungsform eines Speicherelements veranschaulicht;
- 4 ist ein schematisches Blockdiagramm, das eine Ausführungsform eines Speicherverwaltungsmoduls veranschaulicht;
- 5 ist ein schematisches Blockdiagramm, das eine weitere Ausführungsform eines Speicherverwaltungsmoduls veranschaulicht;
- 6 ist ein schematisches Blockdiagramm, das eine Ausführungsform einer Warteschlange für dynamische Speichervorgänge veranschaulicht;
- 7 ist ein schematisches Flussdiagramm, das eine Ausführungsform eines Verfahrens zum Stellen von Speichervorgängen in eine Warteschlange veranschaulicht;
- 8 ist ein schematisches Flussdiagramm, das eine weitere Ausführungsform eines Verfahrens zum Stellen von Speichervorgängen in eine Warteschlange veranschaulicht;
- 9A ist ein schematisches Flussdiagramm, das noch eine Ausführungsform eines Verfahrens zum Stellen von Speichervorgängen in eine Warteschlange veranschaulicht, und
- 9B ist ein schematisches Flussdiagramm, das eine weitere Ausführungsform eines Verfahrens zum Stellen von Speichervorgängen in eine Warteschlange veranschaulicht.
-
DETAILLIERTE BESCHREIBUNG
-
Aspekte der vorliegenden Offenbarung können als eine Vorrichtung, ein System, ein Verfahren oder ein Computerprogramm ausgeführt sein. Folglich können Aspekte der vorliegenden Offenlegung die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (einschließlich Firmware, residente Software, Mikrocode, oder dergleichen) oder einer Software- und Hardwareaspekte kombinierenden Ausführungsform annehmen, die alle allgemein hierin als „Schaltkreis“, „Modul“, „Vorrichtung“ oder „System“ bezeichnet werden können. Weiterhin können Aspekte der vorliegenden Offenlegung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren nichtflüchtigen computerlesbaren Speichermedien verkörpert ist, die computerlesbaren und/oder ausführbaren Programmcode speichern.
-
Viele der in dieser Patentschrift beschriebenen Funktionseinheiten wurden als Module bezeichnet, um ihre Implementierungsunabhängigkeit zusätzlich hervorzuheben. Zum Beispiel kann ein Modul als eine Hardwareschaltung implementiert sein, die kundenspezifische VLSI-Schaltungen oder Gate-Arrays, handelsübliche Halbleiter wie etwa Logikchips, Transistoren oder anderen diskrete Komponenten aufweist. Ein Modul kann auch in programmierbaren Hardwarevorrichtungen wie etwa feldprogrammierbaren Gate-Arrays, einer programmierbaren Array-Logik, programmierbaren Logikvorrichtungen oder dergleichen implementiert sein.
-
Module können auch zumindest teilweise in Software zur Ausführung durch verschiedene Arten von Prozessoren implementiert sein. Ein identifiziertes Modul ausführbaren Codes kann beispielsweise einen oder mehrere physische oder logische Blöcke von Computeranweisungen aufweisen, die beispielsweise als ein Objekt, eine Prozedur oder eine Funktion organisiert sein können. Nichtsdestotrotz müssen die ausführbaren Programme eines identifizierten Moduls nicht physisch zusammen angeordnet sein, sondern können unterschiedliche Anweisungen aufweisen, die an verschiedenen Orten gespeichert sind, die, wenn sie logisch miteinander verbunden sind, das Modul aufweisen und den angegebenen Zweck für das Modul erfüllen.
-
Infolgedessen kann ein Modul ausführbaren Codes eine einzelne Anweisung oder viele Anweisungen beinhalten und kann sogar über mehrere unterschiedliche Codesegmente, in verschiedenen Programmen, über mehrere Speichervorrichtungen oder dergleichen verteilt sein. Wo ein Modul oder Teile eines Moduls in Software implementiert sind, können die Softwareteile auf einem oder mehreren computerlesbaren und/oder ausführbaren Speichermedien gespeichert sein. Jede Kombination von einem oder mehreren computerlesbaren Speichermedien kann verwendet werden. Ein computerlesbares Speichermedium kann beispielsweise, ohne darauf beschränkt zu sein, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine Vorrichtung oder ein Gerät oder irgendeine geeignete Kombination der vorstehenden sein, würde aber keine sich ausbreitenden Signale beinhalten. Im Kontext dieses Dokuments kann ein computerlesbares und/oder ausführbares Speichermedium jedes konkrete und/oder nichtflüchtige Medium sein, das ein Programm zur Verwendung durch oder in Verbindung mit einem Befehlsausführungssystem, einer Vorrichtung, einem Prozessor oder einem Gerät enthalten oder speichern kann.
-
Computerprogrammcode zur Durchführung von Operationen für Aspekte der vorliegenden Offenlegung kann in einer beliebigen Kombination von einer oder mehreren Programmiersprachen geschrieben werden, einschließlich einer objektorientierten Programmiersprache wie Python, Java, Smalltalk, C++, C#, Objektiv C oder dergleichen, herkömmlicher prozeduraler Programmiersprachen wie die Programmiersprache „C“, Skript-Programmiersprachen und/oder anderer ähnlicher Programmiersprachen. Der Programmcode kann teilweise oder vollständig auf einem oder mehreren Computern eines Benutzers und/oder auf einem entfernten Computer oder Server über ein Datennetz oder dergleichen ausgeführt werden.
-
Eine Komponente, wie sie hierin verwendet wird, weist eine konkrete, physische, nichtflüchtige Vorrichtung auf. Zum Beispiel kann eine Komponente als eine Hardware-Logikschaltung implementiert sein, die kundenspezifische VLSI-Schaltungen, Gate-Arrays oder andere integrierte Schaltungen aufweist; handelsübliche Halbleiter, wie beispielsweise Logikchips, Transistoren oder andere diskrete Vorrichtungen; und/oder andere mechanische oder elektrische Vorrichtungen. Eine Komponente kann auch in programmierbaren Hardwarevorrichtungen wie etwa feldprogrammierbaren Gate-Arrays, einer programmierbaren Array-Logik, programmierbaren Logikvorrichtungen oder dergleichen implementiert sein. Eine Komponente kann eine oder mehrere siliziumbasierte integrierte Schaltungsvorrichtungen (z. B. Chips, Dies, Die-Ebenen, Pakete) oder andere diskrete elektrische Vorrichtungen in elektrischer Verbindung mit einer oder mehreren anderen Komponenten über elektrische Leitungen einer Schaltungsplatine (PCB) oder dergleichen aufweisen. Jedes der hierin beschriebenen Module kann in bestimmten Ausführungsformen alternativ durch eine Komponente verkörpert oder implementiert sein.
-
Die Bezugnahme auf „eine Ausführungsform“, „Ausführungsform“ oder ein ähnlicher Sprachgebrauch in dieser Patentschrift bedeutet, dass ein bestimmtes Merkmal, eine spezielle Struktur oder Charakteristik, die in Verbindung mit der Ausführungsform beschrieben ist, in mindestens einer Ausführungsform der vorliegenden Offenlegung beinhaltet ist. Daher können die Ausdrücke „in einer Ausführungsform“, „in der Ausführungsform“ und ähnlich gelagerter Sprachgebrauch in dieser Beschreibung, wo sie vorkommen, sich nicht notwendigerweise alle auf dieselbe Ausführungsform beziehen, sondern „eine oder mehrere, aber nicht alle Ausführungsformen“ bedeuten, sofern nicht ausdrücklich etwas anderes angegeben ist. Die Begriffe „einschließlich“, „aufweisend“, „besitzend“ und Variationen dessen bedeuten „einschließlich aber nicht darauf beschränkt“, sofern nicht ausdrücklich etwas anderes angegeben ist. Eine aufzählende Auflistung von Elementen impliziert nicht, dass sich irgendeines oder alle der Elemente gegenseitig ausschließen und/oder gegenseitig einschließen, sofern nicht ausdrücklich etwas anderes angegeben ist. Die Begriffe „ein/e/s“, und „der/die/das“ beziehen sich auch auf „eines oder mehrere“, sofern nicht ausdrücklich etwas anderes angegeben ist.
-
Aspekte der vorliegenden Offenlegung werden unten unter Bezugnahme auf schematische Flussdiagramme und/oder schematische Blockdiagramme von Verfahren, Vorrichtungen, Systemen und Computerprogrammprodukten gemäß Ausführungsformen der Offenlegung beschrieben. Es versteht sich, dass jeder Block der schematischen Flussdiagramme und/oder schematischen Blockdiagramme und Kombinationen von Blöcken in den schematischen Flussdiagrammen und/oder schematischen Blockdiagrammen durch Computerprogrammanweisungen implementiert werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die Anweisungen, die über den Prozessor oder eine andere programmierbare Datenverarbeitungsvorrichtung ausgeführt werden, Mittel zum Implementieren der Funktionen und/oder Schritte erzeugen, die in den schematischen Flussdiagrammen und/oder schematischen Blockdiagrammen Block oder Blöcken spezifiziert sind.
-
Es sollte auch beachtet werden, dass in einigen alternativen Implementierungen die in dem Block angegebenen Funktionen außerhalb der in den Figuren angegebenen Reihenfolge auftreten können. Zum Beispiel können zwei nacheinander gezeigte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden, abhängig von der involvierten Funktionalität. Andere Schritte und Verfahren, die in Funktion, Logik oder Wirkung äquivalent zu einem oder mehreren Blöcken oder Teilen davon der dargestellten Figuren sind, können konzipiert werden. Obwohl verschiedene Pfeilarten und Linienarten in dem Flussdiagramm und/oder den Blockdiagrammen verwendet werden können, sind sie so zu verstehen, dass sie den Umfang der entsprechenden Ausführungsformen nicht einschränken. Zum Beispiel kann ein Pfeil eine Wartungs- oder Überwachungsperiode einer nicht spezifizierten Dauer zwischen aufgezählten Schritten der dargestellten Ausführungsform angeben.
-
In der folgenden detaillierten Beschreibung wird auf die beigefügten Zeichnungen Bezug genommen, die einen Teil davon bilden. Die vorhergehende Zusammenfassung ist nur veranschaulichend und soll in keiner Weise einschränkend sein. Zusätzlich zu den oben beschriebenen veranschaulichenden Aspekten, Ausführungsformen und Merkmalen werden weitere Aspekte, Ausführungsformen und Merkmale unter Bezugnahme auf die Zeichnungen und die folgende ausführliche Beschreibung deutlich. Die Beschreibung von Elementen in jeder Figur kann sich auf Elemente von fortlaufenden Figuren beziehen. Gleiche Bezugszeichen können sich auf gleiche Elemente in den Figuren beziehen, einschließlich alternativer Ausführungsformen gleicher Elemente.
-
1 ist ein Blockdiagramm einer Ausführungsform eines Systems 100, das ein Speicherverwaltungsmodul 150 aufweist. Das Speicherverwaltungsmodul 150 kann Teil einer oder mehrerer nichtflüchtiger Speichersteuereinheiten 124, einer Steuereinheit eines nichtflüchtigen Speichermediums 126, eines Gerätetreibers oder einer Speicherverwaltungsebene (SML) 130 oder dergleichen sein und/oder mit diesen kommunizieren. Das Speicherverwaltungsmodul 150 kann auf einem nichtflüchtigen Speichersystem 102 einer Datenverarbeitungsvorrichtung 110 arbeiten, die einen Prozessor 111, einen flüchtigen Speicher 112 und eine Kommunikationsschnittstelle 113 aufweisen kann. Der Prozessor 111 kann eine oder mehrere zentrale Verarbeitungseinheiten, einen oder mehrere Universalprozessoren, einen oder mehrere anwendungsspezifische Prozessoren, einen oder mehrere virtuelle Prozessoren (z. B. kann die Datenverarbeitungsvorrichtung 110 eine virtuelle Maschine sein, die in einem Host arbeitet), einen oder mehrere Prozessorkerne oder dergleichen aufweisen. Die Kommunikationsschnittstelle 113 kann eine oder mehrere Netzwerkschnittstellen aufweisen, die eingerichtet sind, um die Datenverarbeitungsvorrichtung 110 und/oder die nichtflüchtige Speichersteuereinheit 124 mit einem Kommunikationsnetzwerk 115, wie etwa einem IP-Netzwerk (Internet Protocol), einem SAN-Netzwerk (Storage Area Network), oder dergleichen zu koppeln.
-
Die Datenverarbeitungsvorrichtung 110 kann weiterhin ein nichtflüchtiges computerlesbares Speichermedium 114 aufweisen. Das computerlesbare Speichermedium 114 kann ausführbare Befehle aufweisen, die dazu eingerichtet sind, die Datenverarbeitungsvorrichtung 110 (z. B. der Prozessor 111) zu veranlassen, Schritte nach einem oder mehreren der hierin offenbarten Verfahren auszuführen. Alternativ oder zusätzlich dazu kann das Speicherverwaltungsmodul 150 als eine oder mehrere computerlesbare Anweisungen ausgeführt sein, die auf dem nichtflüchtigen Speichermedium 114 gespeichert sind.
-
Das nichtflüchtige Speichersystem 102 schließt in der dargestellten Ausführungsform ein Speicherverwaltungsmodul 150 ein. Das Speicherverwaltungsmodul 150 ist in einer Ausführungsform dazu eingerichtet, unter Verwendung von Teilmengen von Speicherorten in einem dem Speicherelement zugeordneten Seitenregister Speichervorgänge für ein flüchtiges und/oder nichtflüchtiges Speicherelement in eine Warteschlange zu stellen. Wenn beispielsweise eine nicht flüchtige Speichervorrichtung im normalen „NAND“-Modus läuft, kann eine volle Seite Daten beim Ausführen eines Speichervorgangs, wie Lesen oder Schreiben, im Seitenregister gespeichert werden. Andererseits, wie hierin beschrieben, wenn eine nichtflüchtige Speichervorrichtung im „Burst“-Modus läuft, der eine kleinere Zugriffseinheit als eine vollständige Datenseite aufweisen kann, können mehrere Speichervorgänge zur Ausführung in eine Warteschlange gestellt werden, indem Teilmengen des Seitenregisters verwendet werden, um Daten zu speichern, die mit Speichervorgängen verbunden sind, die an Banken des Speicherelements durchgeführt werden.
-
In einer Ausführungsform kann das Speicherverwaltungsmodul 150 einen ausführbaren Softwarecode, wie einen Gerätetreiber, SML 130, oder dergleichen aufweisen, der auf dem computerlesbaren Speichermedium 114 zur Ausführung auf dem Prozessor 111 gespeichert ist. In einer Ausführungsform kann das Speicherverwaltungsmodul 150 logisch gesteuerte Hardware einer oder mehrerer nichtflüchtiger Speichervorrichtungen 120 aufweisen, wie etwa eine Steuereinheit eines nichtflüchtigen Speichermediums 126, eine nichtflüchtige Speichersteuereinheit 124, eine Steuereinheit der Vorrichtung, ein für Felder programmierbares Gate-Array (FPGA) oder andere programmierbare Logik, Firmware für ein FPGA oder andere programmierbare Logik, einen Mikrocode zur Ausführung auf einem Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC), oder dergleichen. In einer weiteren Ausführungsform kann das Speicherverwaltungsmodul 150 eine Kombination von sowohl einem ausführbaren Softwarecode als auch logisch gesteuerter Hardware einschließen.
-
In einer Ausführungsform ist das Speicherverwaltungsmodul 150 eingerichtet, um Speicheranforderungen von der SML 130 über Bus 125 oder dergleichen zu empfangen. Das Speicherverwaltungsmodul 150 kann weiterhin dazu eingerichtet sein, Daten zur/von der SML 130 und/oder Speicher-Clients 116 über den Bus 125 zu übertragen. Dementsprechend kann das Speicherverwaltungsmodul 150 in einigen Ausführungsformen ein oder mehrere Direktspeicherzugriffsmodule (DMA-Module), Remote-DMA-Module, Bus-Controller, Brücken, Puffer usw. aufweisen und/oder mit diesen kommunizieren, um die Übertragung von Speicheranforderungen und zugehörigen Daten zu erleichtern. In einer anderen Ausführungsform kann das Speicherverwaltungsmodul 150 Speicheranforderungen als einen API-Aufruf von einem Speicher-Client 116 als IO-CTL-Befehl oder dergleichen empfangen. Das Speicherverwaltungsmodul 150 wird detailliert nachfolgend mit Bezug auf 4 und 5 beschrieben.
-
Gemäß verschiedenen Ausführungsformen kann eine nichtflüchtige Speichersteuereinheit 124 mit dem Speicherverwaltungsmodul 150 eine oder mehrere nichtflüchtige Speichervorrichtungen 120 verwalten. Die nichtflüchtige(n) Speichervorrichtung(en) 120 können Vorrichtungen zum Aufzeichnen, Archivieren und/oder Speichern aufweisen, wie Festspeichervorrichtung(en), die in einer Vielzahl von adressierbaren Medienspeicherorten angeordnet und/oder darin partitioniert sind. Wie hierin verwendet, bezieht sich ein Medienspeicherort auf jede physische Einheit eines Speichers (z. B. jede Menge an physischen Speichermedien auf einer nichtflüchtigen Speichervorrichtung 120). Speichereinheiten können unter anderem Folgendes aufweisen: Seiten, Speicherbereiche, Löschblöcke, Sektoren, Blöcke, Sammlungen oder Sätze von physischen Speicherorten (z. B. logische Seiten, logische Löschblöcke wie unten beschrieben) oder dergleichen.
-
Die nichtflüchtige Speichersteuereinheit 124 kann eine SML 130 aufweisen, die einem oder mehreren Speicher-Clients 116 einen logischen Adressraum 134 zur Verfügung stellen kann. Ein Beispiel eines SML ist der Virtual Storage Layer® von SanDisk Corporation in Milpitas, Kalifornien. Alternativ dazu kann jede nichtflüchtige Speichervorrichtung 120 eine Steuereinheit eines nichtflüchtigen Speichermediums 126 aufweisen, die den Speicher-Clients 116 einen logischen Adressraum 134 zur Verfügung stellen kann. Wie hierin verwendet, bezieht sich ein logischer Adressraum 134 auf eine logische Repräsentation von Speicherressourcen. Der logische Adressraum 134 kann eine Vielzahl (z. B. einen Bereich) von logischen Adressen aufweisen. Wie hier verwendet, bezieht sich eine logische Adresse auf jeden Identifikator zum Referenzieren einer Speicherressource (z. B. Daten), einschließlich unter anderem Folgendes: einer logische Blockadresse (LBA), einer Zylinder/Kopf/Sektor(Cylinder/Head/Sector, CHS)-Adresse, einem Dateinamen, einem Objektidentifikator, einem global eindeutigen Identifikator (Globally Unique Identifier, GUID), einem Hash-Code, einer Signatur, einem Indexeintrag, einem Bereich, einem Umfang oder dergleichen.
-
Die SML 130 kann Metadaten 135, wie beispielsweise einen Vorwärtsindex, unterhalten, um logische Adressen des logischen Adressraums 134 in Medienspeicherorten auf der/den nichtflüchtigen Speichervorrichtung(en) 120 abzubilden. Die SML 130 kann beliebige „Any-To-Any“-Zuordnungen von logischen Adressen zu physischen Speicherressourcen bereitstellen. Wie hierin verwendet, kann eine „Any-To-Any“-Zuordnung jede beliebige logische Adresse einer beliebigen physischen Speicherressource zuordnen. Dementsprechend kann es keine vordefinierten und/oder voreingestellten Zuordnungen logischer Adressen auf insbesondere Medienspeicherorte und/oder Medienadressen geben. Wie hier verwendet, bezieht sich eine Medienadresse auf eine Adresse einer Speicherressource, die eindeutig eine Speicherressource für eine Steuereinheit identifiziert, die eine Vielzahl von Speicherressourcen verwaltet. Beispielsweise beinhaltet eine Medienadresse, ohne darauf beschränkt zu sein: die Adresse eines Medienspeicherortes, einer physischen Speichereinheit, einer Sammlung physischer Speichereinheiten (z. B. einer logischen Speichereinheit), einen Teil einer Speichereinheit (z. B. Adresse und Offset, Reichweite und/oder Ausdehnung einer logischen Speichereinheit) oder dergleichen. Entsprechend kann die SML 130 logische Adressen auf physische Datenquellen beliebiger Größe und/oder Granularität abbilden, die dem zugrunde liegenden Datenpartitionierungsschema der nichtflüchtigen Speichervorrichtung(en) 120 entsprechen können oder nicht. Beispielsweise ist in einigen Ausführungsformen die nichtflüchtige Speichersteuereinheit 124 eingerichtet, um Daten in logischen Speichereinheiten, die durch logisches Kombinieren einer Vielzahl von physischen Speichereinheiten gebildet werden, zu speichern, wodurch die nichtflüchtige Speichersteuereinheit 124 viele verschiedene Größen und/oder Granularitäten unterstützen kann.
-
Wie hier verwendet, bezieht sich ein logisches Speicherelement auf einen Satz von zwei oder mehr nichtflüchtigen Speicherelementen, die parallel verwaltet werden oder verwaltet werden können (z. B. über einen E/A- und/oder Steuerbus). Ein logisches Speicherelement kann eine Vielzahl von logischen Speichereinheiten aufweisen, wie logische Seiten, logische Speicherbereiche (z. B. logische Löschblöcke), usw. Wie hierin verwendet, bezieht sich eine logische Speichereinheit auf ein logisches Konstrukt, das zwei oder mehr physische Speichereinheiten kombiniert, wobei jede physische Speichereinheit in einem jeweiligen nichtflüchtigen Speicherelement in dem jeweiligen logischen Speicherelement angeordnet ist (z. B. ist jedes nichtflüchtige Speicherelement parallel zugänglich). Wie hier verwendet, bezieht sich eine logische Speicherteilung auf einen Satz von zwei oder mehr physischen Speicherteilungen, wobei jede physische Speicherteilung auf einem jeweiligen nichtflüchtigen Speicherelement in dem jeweiligen logischen Speicherelement erfolgt.
-
Der durch die SML 130 präsentierte logische Adressraum 134 kann eine logische Kapazität aufweisen, die der Anzahl verfügbarer logischer Adressen im logischen Adressraum 134 und der Größe und/oder Granularität der Daten entsprechen kann, auf die die logischen Adressen verweisen. Zum Beispiel kann die logische Kapazität eines logischen Adressraums 134, der 2^32 eindeutige logische Adressen aufweist, die jede auf 2048 Bytes (2 KiB) Daten verweist, 2^43 Bytes betragen. Wie hier verwendet, bezieht sich ein Kibibyte (KiB) auf 1024 Bytes. In einigen Ausführungsformen kann der logische Adressraum 134 dünn bereitgestellt sein. Wie hierin verwendet, bezieht sich ein „dünn bereitgestellter“ logischer Adressraum 134 auf einen logischen Adressraum 134 mit einer logischen Kapazität, die die physische Kapazität der zugrunde liegenden nichtflüchtigen Speichervorrichtung(en) 120 übersteigt. Zum Beispiel kann die SML 130 den Speicherclients 116 einen logischen 64-Bit-Adressraum 134 zur Verfügung stellen (z. B. einen logischen Adressraum 134, auf den logische 64-Bit-Adressen verweisen), der die physische Kapazität des zugrunde liegenden nichtflüchtigen Speichers 120 übersteigen kann. Der große logische Adressraum 134 kann den Speicher-Clients 116 ermöglichen, zusammenhängende Bereiche von logischen Adressen zuzuweisen und/oder darauf zu verweisen, während die Wahrscheinlichkeit von Namenskonflikten verringert wird. Die SML 130 kann die „Any-To-Any“-Zuordnungen von logischen Adressen zu physischen Speicherressourcen nutzen, um den logischen Adressraum 134 unabhängig von den zugrunde liegenden physischen Speichervorrichtungen 120 zu verwalten. Zum Beispiel kann die SML 130 je nach Bedarf nahtlos physische Speicherressourcen hinzufügen und/oder entfernen und ohne die von den Speicher-Clients 116 verwendeten logischen Adressen zu ändern.
-
Die nichtflüchtige Speichersteuereinheit 124 kann eingerichtet werden, um Daten in einem kontextabhängigen Format zu speichern. Wie hier verwendet, bezieht sich ein kontextabhängiges Format auf ein selbstbeschreibendes Datenformat, in dem persistente kontextabhängige Metadaten zusammen mit den Daten auf den physischen Speichermedien 122 gespeichert werden. Die persistenten kontextabhängigen Metadaten liefern den Kontext für die Daten, mit denen sie gespeichert sind. In bestimmten Ausführungsformen identifizieren die persistenten kontextabhängigen Metadaten eindeutig die Daten, mit denen die persistenten kontextabhängigen Metadaten gespeichert sind. Zum Beispiel können die persistenten kontextabhängigen Metadaten einen Datenbereich oder Datenblock eines Speicher-Client 116 aus anderen Bereichen oder Datenblöcken, die im Besitz des Speicher-Client 116 sind, eindeutig identifizieren. Gemäß einer weiteren Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten einen Vorgang, der an den Daten ausgeführt wird. Gemäß einer weiteren Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten eine Folge von Vorgängen, die an den Daten ausgeführt werden. In einer weiteren Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten Sicherheitskontrollen, einen Datentyp oder andere Datenmerkmale. In einer bestimmten Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten zumindest einen von einer Vielzahl von Aspekten, einschließlich Datentyp, eine eindeutige Datenkennung, einen Vorgang und eine Folge von an Daten ausgeführten Vorgängen.
-
Die persistenten kontextabhängigen Metadaten können, ohne darauf beschränkt zu sein: eine logische Datenadresse, eine Datenkennung (z. B. ein Dateiname, eine Objekt-ID, ein Etikett, eine eindeutige Kennung oder dergleichen), Bezugnahmen auf andere Daten (z. B. ein Hinweis, dass die Daten mit anderen Daten verbunden sind), eine relative Position oder Offset der Daten in Bezug auf andere Daten (z. B. Offset der Datei usw.), Datengröße und/oder -bereich und dergleichen beinhalten. Das kontextabhängige Datenformat kann ein Paketformat aufweisen, das ein Datensegment und einen oder mehrere Header aufweist. Alternativ kann ein kontextabhängiges Datenformat Daten auf andere Weise mit Kontextinformationen verknüpfen (z. B. in einem dedizierten Index auf dem nichtflüchtigen Speichermedium 122, einem Speicheraufteilungsindex oder dergleichen).
-
In einigen Ausführungsformen kann das kontextabhängige Datenformat ermöglichen, dass der Datenkontext basierend auf den Inhalten des nichtflüchtigen Speichermediums 122 bestimmt und/oder rekonstruiert wird und unabhängig von anderen Metadaten, wie etwa den vorstehend erörterten beliebigen „Any-To-Any“-Zuordnungen. Da der Medienplatz der Daten von der logischen Adresse der Daten unabhängig ist, kann es ineffizient oder unmöglich sein, den Kontext von Daten nur aufgrund des Medienplatzes oder der Medienadresse der Daten zu bestimmen. Durch das Speichern von Daten in einem kontextabhängigen Format auf dem nichtflüchtigen Speichermedium 122 kann Datenkontext bestimmt werden, ohne auf andere Medien Bezug zu nehmen. Zum Beispiel kann das kontextabhängige Datenformat ermöglichen, dass die Metadaten nur basierend auf den Inhalten des nichtflüchtigen Speichermediums 122 rekonstruiert werden (z. B. Rekonstruktion der „Any-To-Any“-Zuordnungen zwischen logischen Adressen und Medienplätzen).
-
In einigen Ausführungsformen kann die nichtflüchtige Speichersteuereinheit 124 zum Speichern von Daten auf einem oder mehreren asymmetrischen, einmal beschreibbaren Medien 122, wie Festkörperspeichermedien, eingerichtet sein. Wie hierin verwendet, bezieht sich ein „einmal beschreibbares“ Speichermedium auf ein Speichermedium, das jedes Mal neu initialisiert (z. B. gelöscht) wird, wenn neue Daten darauf geschrieben oder programmiert werden. Wie hier verwendet, bezieht sich ein „asymmetrisches“ Speichermedium auf ein Speichermedium 122 mit unterschiedlichen Latenzen für unterschiedliche Speichervorgänge. Viele Arten von Festkörperspeichermedien sind asymmetrisch; Beispielsweise kann ein Lesevorgang viel schneller als ein Schreib-/Programmiervorgang sein, und ein Schreib-/Programmiervorgang kann viel schneller als ein Löschvorgang sein (z. B. kann das Lesen der Medien Hunderte Male schneller als Löschen und zehn Mal schneller als die Programmierung der Medien sein).
-
Das Speichermedium 122 kann in Speicherbereiche partitioniert werden, die als eine Gruppe (z. B. Löschblöcke) gelöscht werden können, um unter anderem die asymmetrischen Eigenschaften der Medien 122 oder dergleichen zu berücksichtigen. Somit kann das Modifizieren eines einzelnen Datensegments an Ort und Stelle das Löschen des gesamten Löschblocks, der die Daten aufweist, und das Neuschreiben der modifizierten Daten in den Löschblock zusammen mit den ursprünglichen, unveränderten Daten erfordern. Dies kann zu einer ineffizienten „Schreiberweiterung“ führen, was eine Überbeanspruchung des Mediums 122 bewirken kann. Daher kann in einigen Ausführungsformen die nichtflüchtige Speichersteuereinheit 124 eingerichtet sein, Daten deplatziert zu schreiben. Wie hier verwendet, bezieht sich das „deplatzierte“ Schreiben von Daten auf das Schreiben von Daten auf einen oder mehrere andere Medienspeicherorte anstatt des Überschreibens der Daten „am Ort“ (z. B. Überschreiben des ursprünglichen physischen Standorts der Daten). Das deplatzierte Ändern von Daten kann Schreibverstärkung vermeiden, da die mit den zu ändernden Daten auf dem Löschblock existierenden validen Daten nicht gelöscht und wieder kopiert werden müssen. Darüber hinaus kann das deplatzierte Schreiben von Daten das Löschen aus dem Latenzpfad vieler Speichervorgänge verhindern (z. B. ist die Löschlatenz nicht mehr Teil des kritischen Pfads eines Schreibvorgangs).
-
Die nichtflüchtige Speichersteuereinheit 124 kann einen oder mehrere Vorgänge außerhalb des regulären Pfades zum Durchführen von Speichervorgängen aufweisen (z. B. den „Pfad“ zum Ausführen eines Speichervorgangs und/oder Ausführen einer Speicheranforderung). Wie hierin verwendet, beziehen sich der „Pfad zur Ausführung einer Speicheranforderung“ oder der „Pfad zur Ausführung eines Speichervorgangs“ (auch als der „kritische Pfad“ bezeichnet) auf eine Reihe von Verarbeitungsschritten, die erforderlich sind, um den Speichervorgang oder -anforderung auszuführen, wie Lesen, Schreiben, Ändern oder dergleichen. Der Pfad zum Ausführen einer Speicheranforderung kann das Empfangen der Anforderung von einem Speicher-Client 116, das Identifizieren der logischen Adressen der Anforderung, das Durchführen einer oder mehrerer Speichervorgänge auf nichtflüchtigen Speichermedien 122 und das Zurücksenden eines Ergebnisses, wie einer Bestätigung oder Daten, aufweisen. Prozesse, die außerhalb des Pfads zum Ausführen von Speicheranforderungen auftreten, können, müssen aber nicht, einschließen: einen Groomer, eine Deduplizierung und dergleichen. Diese Prozesse können autonom und im Hintergrund verlaufen, so dass sie einander nicht stören oder die Leistungsfähigkeit anderer Speichervorgänge und/oder Anforderungen beeinflussen. Dementsprechend können diese Prozesse unabhängig von der Bearbeitung der Speicheranforderungen erfolgen.
-
In einigen Ausführungsformen weist die nichtflüchtige Speichersteuereinheit 124 einen Groomer auf, der so eingerichtet ist, dass er Speicherbereiche (z. B. logische oder physische Löschblöcke) zur Wiederverwendung unter Verwendung einer Speicherbereinigung oder eines anderen Wiederherstellungsvorgangs der Speicherkapazität wiedergewinnt. Das von der nichtflüchtigen Speichersteuereinheit 124 implementierte Paradigma zum deplatzierten Schreiben kann zu veralteten oder ungültigen Daten führen, die auf dem nichtflüchtigen Speichermedium 122 verbleiben. Zum Beispiel kann das Überschreiben der Daten X mit Daten Y dazu führen, dass Y in einem neuen Speicherbereich gespeichert wird (z. B. anstatt X an Ort und Stelle zu überschreiben) und dass die „Any-To-Any“-Zuordnungen der Metadaten aktualisiert werden, um Y als gültige, aktuelle Version der Daten zu identifizieren. Die veraltete Version der Daten X kann als ungültig gekennzeichnet, aber nicht unmittelbar entfernt (z. B. gelöscht) werden, da, wie oben diskutiert, X das Löschen eines gesamten Speicherbereichs beinhaltet, was zeitaufwendig sein und zu einer Schreibverstärkung führen kann. Ebenso können Daten, die nicht mehr verwendet (z. B. gelöschte oder getrimmte Daten) werden, nicht sofort entfernt werden. Das nichtflüchtige Speichermedium 122 kann eine erhebliche Menge an ungültigen Daten akkumulieren.
-
Ein Groomingverfahren kann außerhalb des kritischen Pfads zum Ausführen von Speichervorgängen erfolgen. Das Groomingverfahren kann Speicherbereiche zurückgewinnen, so dass diese für andere Speichervorgänge wiederverwendet werden können. Wie hierin verwendet, bezieht sich das Zurückgewinnen eines Speicherbereichs auf das Löschen des Speicherbereichs, so dass neue Daten darauf gespeichert/programmiert werden können. Das Zurückgewinnen eines Speicherbereichs kann das Verlagern gültiger Daten im Speicherbereich auf einen neuen Standort aufweisen. Der Groomer kann Speicherbereiche zur Rückgewinnung auf der Grundlage eines oder mehrerer Faktoren identifizieren, die, ohne jedoch darauf beschränkt zu sein, folgendes einschließen können: die Menge an ungültigen Daten im Speicherbereich, die Menge an gültigen Daten im Speicherbereich, den Verschleiß auf dem Speicherbereich (z. B. die Anzahl von Löschzyklen), die Zeit seit der Programmierung oder Aktualisierung des Speicherbereichs usw.
-
Die nichtflüchtige Speichersteuereinheit 124 kann weiterhin eingerichtet sein, um Daten in einem Protokollformat zu speichern. Wie oben beschrieben, bezieht sich ein Protokollformat auf ein Datenformat, das eine geordnete Sequenz von Speichervorgängen auf einem nichtflüchtigen Speichermedium 122 definiert. In einigen Ausführungsformen aufweist das Protokollformat das Speichern von Daten in einer vorgegebenen Sequenz von Medienadressen eines nichtflüchtigen Speichermediums 122 (z. B. innerhalb aufeinanderfolgender Seiten und/oder Löschblöcke der Medien 122). Das Protokollformat kann weiterhin das Zuordnen von Daten (z. B. jedes Datenpaket oder jedes Datensegment) zu entsprechenden Sequenzindikatoren aufweisen. Die Sequenzindikatoren können auf einzelne Daten (z. B. auf jedes Datenpaket angewandt) und/oder auf Datengruppierungen (z. B. Pakete, die sequenziell in einem Speicherbereich, wie zum Beispiel einem Löschblock, gespeichert werden) angewandt werden. In einigen Ausführungsformen können Sequenzindikatoren auf Speicherbereiche angewendet werden, wenn die Speicherbereiche, wie vorstehend beschrieben, zurückgewonnen (z. B. gelöscht) werden und/oder wenn die Speicherbereiche zum ersten Mal zum Speichern von Daten verwendet werden.
-
In einigen Ausführungsformen kann das Protokollformat das Speichern von Daten in einem „Nur anhängen“-Paradigma aufweisen. Die nichtflüchtige Speichersteuereinheit 124, die das unten beschriebene Protokollspeichermodul 137 oder dergleichen verwendet, kann einen aktuellen Anhängepunkt an einer Medienadresse der nichtflüchtigen Speichervorrichtung 120 aufrechterhalten. Der Anhängepunkt kann ein aktueller Speicherbereich und/oder ein Offset innerhalb eines Speicherbereichs sein. Die Daten können dann sequenziell vom Anhängepunkt angehängt werden. Die sequentielle Anordnung der Daten kann daher auf Grundlage des Sequenzindikators des Speicherbereichs der Daten in Verbindung mit der Datensequenz innerhalb des Speicherbereichs bestimmt werden. Beim Erreichen des Endes eines Speicherbereichs kann die nichtflüchtige Speichersteuereinheit 124 den „nächsten“ verfügbaren Speicherbereich identifizieren (z. B. den nächsten initialisierten und zum Speichern der Daten verfügbaren Speicherbereich). Der Groomer kann Speicherbereiche mit ungültigen, veralteten und/oder gelöschten Daten zurückgewinnen, damit Daten weiterhin an das Medienprotokoll angehängt werden können.
-
Das hierin beschriebene Protokollformat kann ermöglichen, dass gültige Daten auf der Grundlage des Inhalts des nichtflüchtigen Speichermediums 122 und unabhängig von anderen Metadaten von ungültigen Daten unterschieden werden. Wie oben diskutiert, können ungültige Daten solange nicht aus den nichtflüchtigen Speichermedien 122 entfernt werden, bis der die Daten aufweisende Speicherbereich zurückgewonnen wird. Deshalb können mehrere „Versionen“ von Daten mit dem gleichen Kontext auf dem nichtflüchtigen Speichermedium 122 existieren (z. B. mehrere Versionen von Daten mit denselben logischen Adressen). Die mit den Daten verknüpften Sequenzindikatoren können verwendet werden, um ungültige Versionen von Daten von der aktuellen, aktualisierten Version der Daten zu unterscheiden; die neuesten Daten im Protokoll sind die aktuelle Version, und frühere Versionen können als ungültig identifiziert werden.
-
Die Speicherverwaltungsebene 130 kann dazu eingerichtet sein, Speicherbefehle für einen oder mehrere Speicher-Clients 116 bereitzustellen. Die Speicher-Clients 116 können lokale Speicher-Clients 116, die auf der Datenverarbeitungsvorrichtung 110 arbeiten, und/oder Remote-Speicher-Clients 116, auf die über das Netzwerk 115 und/oder die Netzwerkschnittstelle 113 zugegriffen werden kann, aufweisen. Die Speicher-Clients 116 können unter anderem Folgendes einschließen: Betriebssysteme, Dateisysteme, Datenbankanwendungen, Serveranwendungen, Prozesse auf Kernel-Ebene, Benutzerebenenprozesse, Anwendungen und dergleichen.
-
Die Speicherverwaltungsebene 130 umfasst und/oder kommuniziert mit einer oder mehreren nichtflüchtigen Speichervorrichtungen 120. Die eine oder mehrere nichtflüchtigen Speichervorrichtungen 120 können unterschiedliche Arten von nichtflüchtigen Speichervorrichtungen einschließen, unter anderem Folgende: Festkörperspeichervorrichtungen, Festplatten, SAN-Speicherressourcen oder dergleichen. Die eine oder die mehreren nichtflüchtigen Speichervorrichtungen 120 können eine oder mehrere jeweilige Steuerungen 126 nichtflüchtiger Speichermedien und nichtflüchtige Speichermedien 122 aufweisen. Wie in 1 veranschaulicht, kann die SML 130 über eine herkömmliche Block-E/A-Schnittstelle 131 auf eine oder mehrere nichtflüchtige Speichervorrichtungen 120 Zugang gewähren. Zusätzlich kann die SML 130 Zugriff auf eine verbesserte Funktionalität (z. B. einen großen virtuellen Adressraum 134) über die SML-Schnittstelle 132 bereitstellen. Die Metadaten 135 können verwendet werden, um Speichervorgänge, die über jede der Block-E/A-Schnittstellen 131, die SML-Schnittstelle 132, die Cache-Schnittstelle 133 oder andere, verwandte Schnittstellen ausgeführt werden, zu verwalten und/oder zu verfolgen.
-
Die Cache-Schnittstelle 133 kann Cache-spezifische Funktionen freilegen, die über die Speicherverwaltungsebene 130 zugänglich sind. In einigen Ausführungsformen gewährt auch die SML-Schnittstelle 132, die den Speicherclients 116 zugeordnet wird, Zugriff auf Datenübertragungen, die durch eine oder mehrere nichtflüchtige Speichervorrichtungen 120 und/oder eine oder mehrere nichtflüchtige Speichersteuereinheiten 126 implementiert werden.
-
Die SML 130 kann Speicherbefehle über eine oder mehrere Schnittstellen bereitstellen, die Folgende einschließen können, jedoch nicht darauf beschränkt sind: eine Block-E/A-Schnittstelle, eine Schnittstelle der erweiterten Speicherverwaltungsebene, eine Cache-Schnittstelle und dergleichen. Die SML 130 kann über eine oder mehrere Schnittstellen einen logischen Adressraum 134 für die Speicher-Clients 116 bereitstellen. Wie weiter oben erörtert, kann der logische Adressraum 134 eine Vielzahl von logischen Adressen aufweisen, von denen jede den jeweiligen Medienstandorten der einen oder mehreren nichtflüchtigen Speichervorrichtungen 120 entspricht. Die SML 130 kann Metadaten 135 unterhalten, die „Any-To-Any“-Zuordnungen von logischen Adressen zu Medienstandorten oder dergleichen aufweisen, wie oben beschrieben.
-
Die SML 130 kann weiterhin ein Protokollspeichermodul 137 aufweisen, das zum Speichern von Daten in einem kontextbezogenen Protokollformat eingerichtet ist. Das kontextbezogene Protokollformat kann das Zuordnen von Daten mit persistenten kontextbezogenen Metadaten, wie der logischen Adresse der Daten oder dergleichen, aufweisen. Das kontextbezogene Protokollformat kann weiterhin das Zuordnen von Daten zu entsprechenden Sequenzkennungen auf den nichtflüchtigen Speichermedien 122 aufweisen, die eine geordnete Sequenz von Speichervorgängen definieren, die auf der einen oder den mehreren nichtflüchtigen Speichervorrichtungen 120 ausgeführt werden, wie oben beschrieben.
-
Die SML 130 kann weiterhin eine Schnittstelle einer nichtflüchtigen Speichervorrichtung 139, die zum Übertragen von Daten, Befehlen und/oder Anfragen an eine oder mehrere nichtflüchtige Speichervorrichtungen 120 über einen Bus 125 eingerichtet ist, aufweisen, was unter anderem Folgendes einschließen kann: einen Peripheral Component Interconnect Express-Bus (PCI Express oder PCle), einen seriellen Advanced Technology Attachment(ATA)-Bus, einen parallelen ATA-Bus, ein Small Computer System Interface (SCSI), Fire Wire, Fibre Channel, einen Universal Serial Bus (USB), einen PCle Advanced Switching(PCIe-AS)-Bus, ein Netzwerk 115, Infiniband, SCSI-RDMA oder dergleichen. Die Schnittstelle einer nichtflüchtigen Speichervorrichtung 139 kann mit der einen oder mehreren nichtflüchtigen Speichervorrichtungen 120 unter Verwendung von Eingabe-Ausgabe-Steuerbefehlen (IO-CTL), IO-CTL-Befehlserweiterung(en), direktem Remote-Speicherzugriff oder dergleichen kommunizieren.
-
Die Kommunikationsschnittstelle 113 kann eine oder mehrere Netzwerkschnittstellen aufweisen, die eingerichtet sind, damit die Datenverarbeitungsvorrichtung 110 und/oder die nichtflüchtige Speichersteuereinheit 124 mit einem Netzwerk 115 und/oder mit einem oder mehreren entfernten, netzzugänglichen Speicherclients 116 kommunizieren kann. Die Speicherclients 116 können lokale Speicherclients 116, die auf der Rechenvorrichtung 110 arbeiten, und/oder entfernte Speicherclients 116 einschließen, auf die über das Netzwerk 115 und/oder die Netzwerkschnittstelle 113 zugegriffen werden kann. Die nichtflüchtige Speichersteuereinheit 124 ist Teil einer oder mehrerer nichtflüchtiger Speichervorrichtungen 120. Wenngleich 1 eine einzelne nichtflüchtige Speichervorrichtung 120 veranschaulicht, ist die Offenbarung nicht darauf beschränkt und kann angepasst werden, um eine beliebige Anzahl von nichtflüchtigen Speichervorrichtungen 120 zu implementieren.
-
Die nichtflüchtige Speichervorrichtung 120 kann ein flüchtiges Speichermedium 122 aufweisen, das Folgendes einschließen kann, ohne jedoch darauf beschränkt zu sein: NAND-Flash-Speicher, NOR-Flash-Speicher, Nano-Speicher mit wahlfreiem Zugriff (Nano-RAM oder NRAM), drahtbasierter Nanokristallspeicher, Prozessspeicher für Sub-10-Nanometer auf Siliziumoxidbasis, Graphenspeicher, Siliziumoxid-Siliziumnitridoxid-Silizium (SONOS), resistiver RAM (RRAM), programmierbare Metallisierungszelle (PMC), leitfähige RAM-Brücken (CBRAM), magnetoresistiver RAM (MRAM), dynamischer RAM (DRAM), Phasenwechsel-RAM (PRAM oder PCM), Magnetspeichermedien (z. B. Festplatte, Band), optische Speichermedien oder dergleichen. Während das nichtflüchtige Speichermedium 122 hierin als „Speichermedium“ bezeichnet wird, kann das nichtflüchtige Speichermedium 122 in verschiedenen Ausführungsformen allgemeiner ein oder mehrere nichtflüchtige Aufzeichnungsmedien aufweisen, die in der Lage sind, Daten aufzuzeichnen, die als nichtflüchtiges Speichermedium, nichtflüchtiges Ablagemedium oder dergleichen bezeichnet werden können. Weiterhin kann die nichtflüchtige Speichervorrichtung 120 in verschiedenen Ausführungsformen eine nichtflüchtige Aufzeichnungsvorrichtung, eine nichtflüchtige Speichervorrichtung, eine nichtflüchtige Speicherungsvorrichtung oder dergleichen aufweisen.
-
Das nichtflüchtige Speichermedium 122 kann ein oder mehrere nichtflüchtige Speicherelemente 123 aufweisen, die unter anderem Folgendes einschließen können: Chips, Pakete, Ebenen, Speicher-Dies und/oder dergleichen. Eine Steuereinheit eines nichtflüchtigen Speichermediums 126 kann eingerichtet sein, um Datenvorgänge auf dem nichtflüchtigen Speichermedium 122 zu verwalten, und kann einen oder mehrere Prozessoren, programmierbare Prozessoren (z. B. FPGAs) oder dergleichen aufweisen. In einigen Ausführungsformen ist die Steuereinheit des nichtflüchtigen Speichermediums 126 dazu eingerichtet, Daten zu speichern und/oder Daten aus dem nichtflüchtigen Speichermedium 122 zu lesen, Daten an/von der nichtflüchtigen Speichervorrichtung 120 zu übertragen, und so weiter.
-
Die Steuerung 126 des nichtflüchtigen Speichermediums kann kommunikativ mit dem nichtflüchtigen Speichermedium 122 über einen Bus 127 gekoppelt sein. Der Bus 127 kann einen E/A-Bus zum Kommunizieren von Daten zu/von den nichtflüchtigen Speicherelementen 123 aufweisen. Der Bus 127 kann weiterhin einen Steuerbus zum Kommunizieren von Adressier- und anderen Befehls- und Steuerinformationen zu den nichtflüchtigen Speicherelementen 123 aufweisen. In einigen Ausführungsformen kann der Bus 127 die nichtflüchtigen Speicherelemente 123 kommunikativ parallel mit der Steuerung 126 eines nichtflüchtigen Speichermediums koppeln. Dieser parallele Zugriff kann ermöglichen, dass die nichtflüchtigen Speicherelemente 123 als eine Gruppe verwaltet werden, wodurch ein logisches Speicherelement 129 gebildet wird. Wie oben ausgeführt, kann das logische Speicherelement in entsprechende logische Speichereinheiten (z. B. logische Seiten) und/oder logische Speicherbereiche (z. B. logische Blöcke) partitioniert sein. Die logischen Speichereinheiten können gebildet werden, indem physische Speichereinheiten von jedem der nichtflüchtigen Speicherelemente logisch kombiniert werden. Wenn zum Beispiel das nichtflüchtige Speichermedium 122 fünfundzwanzig (25) nichtflüchtige Speicherelemente aufweist, kann jede logische Speichereinheit fünfundzwanzig (25) Seiten aufweisen (z. B. eine Seite jedes Elements des nichtflüchtigen Speichermediums 122).
-
Die nicht flüchtige Speichersteuereinheit 124 kann eine SML 130 und eine Steuereinheit eines nichtflüchtigen Speichermediums 126 aufweisen. DIE SML 130 kann über eine oder mehrere Schnittstellen 131, 132 und/oder 133 den Speicher-Clients 116 Speicherbefehle bereitstellen. In einigen Ausführungsformen stellt eine SML 130 eine Block-E/A-Schnittstelle 131 bereit, durch die Speicher-Clients 116 E/A-Vorgänge auf Blockebene ausführen. Alternativ oder zusätzlich dazu kann die SML 130 eine Schnittstelle der Speicherverwaltungsebene 132 bereitstellen, die den Speicher-Clients 116 andere Speicherbefehle bereitstellen kann. In einigen Ausführungsformen kann die SML-Schnittstelle 132 Erweiterungen für die Blockvorrichtungsschnittstelle 131 aufweisen (z. B. können Speicher-Clients 116 durch Erweiterungen über die Blockvorrichtungsschnittstelle 131 auf die SML-Schnittstelle 132 zugreifen). Alternativ oder zusätzlich dazu kann die SML-Schnittstelle 132 als separate API, separater Dienst und/oder separate Bibliothek bereitgestellt werden. Die SML 130 kann weiterhin dazu eingerichtet sein, um eine Cache-Schnittstelle 133 zum Zwischenspeichern von Daten unter Verwendung des nichtflüchtigen Speichersystems 102 bereitzustellen.
-
Wie oben beschrieben, kann die SML 130 den Speicher-Clients 134 einen logischen Adressraum 116 bereitstellen (z. B. über die Schnittstellen 131, 132 und/oder 133). Die SML 130 kann Metadaten 135 unterhalten, die „Any-To-Any“- Zuordnungen zwischen logischen Adressen im logischen Adressraum 134 und Medienstandorten auf der nichtflüchtigen Speichervorrichtung 120 aufweisen. Die Metadaten 135 können eine Logisch-zu-Physisch-Zuordnungsstruktur mit Einträgen aufweisen, die logische Adressen im logischen Adressraum 134 und Medienstandorte in der nichtflüchtigen Speichervorrichtung 120 abbilden. Die Logisch-zu-Physisch-Zuordnungsstruktur der Metadaten 135 ist in einem Ausführungsbeispiel dünn besiedelt, mit Einträgen für logische Adressen, für welche die nichtflüchtige Speichervorrichtung 120 Daten speichert, und ohne Einträge für logische Adressen, für welche die nichtflüchtige Speichervorrichtung 120 momentan keine Daten speichert. Die Metadaten 135 verfolgen in bestimmten Ausführungsformen Daten auf einer Blockebene, wobei die SML 130 Daten als Blöcke verwaltet.
-
Das nichtflüchtige Speichersystem 102 kann weiterhin ein Protokollspeichermodul 137 aufweisen, welches, wie oben beschrieben, zur Speicherung von Daten auf der nichtflüchtigen Speichervorrichtung 120 in einem kontextbezogenen Protokollformat eingerichtet werden kann. Das kontextbezogene Datenprotokollformat kann die Zuordnung von Daten mit einer logischen Adresse auf dem nichtflüchtigen Speichermedium 122 einschließen. Das kontextabhängige Protokollformat kann weiterhin das Zuordnen von Daten zu entsprechenden Sequenzkennungen auf den nichtflüchtigen Speichermedien 122 aufweisen, die eine geordnete Sequenz von Speichervorgängen definieren, die auf den nichtflüchtigen Speichermedien 122 ausgeführt werden, wie oben beschrieben. Die nichtflüchtige Speichersteuereinheit 124 kann weiterhin eine Schnittstelle 139 der nichtflüchtigen Speichervorrichtung aufweisen, die eingerichtet ist, um über einen Bus 125 Daten, Befehle und/oder Abfragen an die Steuereinheit eines nichtflüchtigen Speichermediums 126 zu übertragen, wie oben beschrieben.
-
2 veranschaulicht eine Ausführungsform einer nichtflüchtigen Speichervorrichtung 210, die einen oder mehrere Speicher-Dies oder Chips 212 einschließen kann. Die nichtflüchtige Speichervorrichtung 210 kann der weiter oben und in 1 veranschaulichten beschriebenen nichtflüchtigen Speichervorrichtung 120 sehr ähnlich sein. Das Speicher-Die 212 beinhaltet in einigen Ausführungsformen ein Array 200 (zweidimensional oder dreidimensional) von Speicherzellen, eine Die-Steuereinheit 220 und Lese-/Schreibschaltungen 230A/230B. In einer Ausführungsform ist der Zugriff auf das Speicherarray 200 durch die verschiedenen peripheren Schaltungen auf eine symmetrische Weise auf gegenüberliegenden Seiten des Arrays implementiert, so dass die Dichten von Zugriffsleitungen und Schaltungen auf jeder Seite um die Hälfte reduziert sind. Die Lese-/Schreibschaltungen 230A/230B beinhalten in einer weiteren Ausführungsform mehrere Leseblöcke 250, die ermöglichen, dass eine Seite von Speicherzellen parallel gelesen oder programmiert wird.
-
Das Speicherarray 200 ist in verschiedenen Ausführungsformen durch Wortleitungen über Zeilendecodierer 240A/240B und durch Bitleitungen über Spaltendecodierer 242A/242B adressierbar. In einigen Ausführungsformen ist ein Steuerung 244 in der gleichen Speichervorrichtung 210 (z. B. einer entfernbaren Speicherkarte oder einem Paket) wie das eine oder die mehreren Speicher-Dies 212 beinhaltet. Befehle und Daten werden zwischen dem Host und der Steuerung 244 über Leitungen 232 und zwischen der Steuerung und dem einen oder den mehreren Speicher-Dies 212 über Leitungen 234 übertragen. Eine Implementierung kann mehrere Chips 212 beinhalten.
-
In einer Ausführungsform arbeitet die Speicher-Die-Steuereinheit 220 mit den Lese-/Schreibschaltungen 230A/230B zusammen, um Speicher-/Ablegevorgänge auf dem Speicher-Array 200 durchzuführen. Die Speicher-Die-Steuereinheit 220 schließt in bestimmten Ausführungsformen ein Speicherverwaltungsmodul 150, eine Zustandsmaschine 222, einen On-Chip-Adressdecodierer 224 und ein Leistungssteuermodul 226 ein. Das Speicherverwaltungsmodul 150 ist in einer Ausführungsform so eingerichtet, dass es einen Speicherbetriebsbefehl für eine Bank von Speicherstellen des Speicherarrays 200 empfängt, den Speicherbetriebsbefehl zur Ausführung unter Verwendung einer Teilmenge verfügbarer Speicherorte in einem Seitenregister, das dem Speicherarray 200 zugeordnet ist, in eine Warteschlange stellt und die dem Speicherbetriebsbefehl zugeordneten Daten an einem Speicherort im Seitenregister speichert, bis der Speicherbetriebsbefehl abgeschlossen, ausgeführt, durchgeführt oder dergleichen ist. Das Speicherverwaltungsmodul 150 kann in bestimmten Ausführungsformen Software eines Gerätetreibers und/oder Hardware in einer Vorrichtungssteuereinheit 244, eine Die-Steuereinheit 220 und/oder eine Zustandsmaschine 222 beinhalten.
-
Die Zustandsmaschine 222 stellt in einer Ausführungsform eine Chipebenensteuereinheit von Speicher- oder Ablegevorgängen bereit. Der On-Chip-Adressdecodierer 224 stellt eine Adressschnittstelle bereit, um die Adresse, die von dem Host oder einer Speichersteuerung verwendet wird, in die Hardwareadresse umzuwandeln, die von den Decodern 240A, 240B, 242A, 242B verwendet wird. Die Leistungssteuerschaltung 226 steuert die Leistung und Spannungen, die den Wortleitungen und Bitleitungen während Speichervorgängen zugeführt werden. Gemäß einer Ausführungsform beinhaltet die Steuerschaltung 226 eine oder mehrere Ladepumpen, die Spannungen, die größer als die Versorgungsspannung sind, erzeugen können.
-
3 zeigt eine Ausführungsform eines Speicherelements 300, wie die oben beschriebene nichtflüchtige Speichervorrichtung 210, die ein Array 301 von Speicherzellen 302 enthält. In einer Ausführungsform ist das Array 301 in zwei Subarrays 303 von Speicherzellen 302 unterteilt. Ein Fachmann wird anhand dieser Beschreibung erkennen, dass das Speicherarray 301 in eine beliebige Anzahl von Subarrays 303 unterteilt werden könnte. Ferner weist in der dargestellten Ausführungsform jede Zeile von Speicherzellen 302 eine Bank 306 von Speicherzellen 302 (z. B. eine Gruppe von Speicherzellen 302) und eine Gruppe von Speicherzellenbanken 306 auf, die eine Bankgruppe 304 aufweist. Beispielsweise, wie in 3 veranschaulicht, beinhaltet das Speicherelement 300 zwei Subarrays 303 und sechzehn Banken 306 von Speicherzellen 302, welche in vier unterschiedlichen Bankgruppen 304 gruppiert werden können.
-
In einer weiteren Ausführungsform kann das Speicherelement 300 ein zugeordnetes Seitenregister/Seitenpuffer 308 aufweisen. Wie hier verwendet, ist ein Seitenregister 308 ein Speicherbereich, der zum vorübergehenden Speichern von Daten verwendet wird, während er auf (z. B. für einen Schreibbefehl) oder vom (z. B. für einen Lesebefehl) Speicherarray 301 übertragen wird. In einer bestimmten Ausführungsform weist das Seitenregister eine Vielzahl unterschiedlicher Speicherorte auf, die eine Vielzahl von Daten-Latches aufweisen, die zum Speichern von Adressen für das Speicherarray 301, zum Speichern von Daten, die an den Adressen im Speicherarray 301 abgelegt werden müssen, oder dergleichen verwendet werden können.
-
In einer Ausführungsform kann eine Zugriffseinheit für ein Seitenregister 308 eine vollständige Seite von Daten sein, z. B. 512B, 4 kB, 8 kB, 16kB pro Seite oder dergleichen, wenn das Speicherelement 300 in einem anormalen Modus arbeitet, wie einem NAND-Modus für eine nichtflüchtige NAND-Speichervorrichtung. Andererseits kann die Zugriffseinheit für ein Seitenregister 308 kleiner sein, z. B. 4B, 8B, 16B pro Seite oder dergleichen, was einer Speichergröße einer Bank 306 oder einer Bankgruppe 304 entsprechen kann, wenn das Speicherelement 300 im „Burst“-Modus arbeitet. Wie hierin verwendet, kann der „Burst“-Modus ein Modus des Speicherelements 300 sein, in dem das Speicherelement 300 synchrones Hochgeschwindigkeitslesen 310 und Programmier-/Schreibvorgänge 312 an den Banken 306 oder Bankgruppen 304 des Speicherarrays 301 verarbeitet.
-
Dementsprechend kann, wenn im „Burst“-Modus gearbeitet wird, eine Teilmenge oder ein Teil des Seitenregisters 308 einer Bank 306 oder einer Bankgruppe 304 des Speicherarrays 301 zugeordnet sein und zum Ausführen von Speicherbetriebsbefehlen verwendet werden, z. B. ein Lesebefehl 310 oder ein Schreibbefehl 312 auf die Bank 306 oder die Bankgruppe 304 von Speicherzellen 302. Somit kann der ungenutzte verfügbare Speicherort im Seitenregister 308 dazu verwendet werden, um verschiedene Speichervorgänge für eine Bank 306 oder eine Bankgruppe 304 von Speicherzellen 302 in eine Warteschlange zu stellen, zu puffern, oder dergleichen. Darüber hinaus können mehrere unterschiedliche Speichervorgänge in eine Warteschlange im Seitenregister 308 gestellt und synchron auf verschiedenen Banken 306 oder Bankgruppen 304 von Speicherzellen 302 des Speicherelements 300 ausgeführt werden. In einer Ausführungsform kann das Speicherarray 301 von einer einzigen Zustandsmaschine 222 verwaltet werden, die die Warteschlangen und das Ausführen von Speichervorgängen für jede Bank 306 oder Bankengruppe 304 verwaltet. In bestimmten Ausführungsformen können mehrere Zustandsmaschinen 222 die Warteschlangen und das Ausführen von Speichervorgängen für jede Bank 306 oder Bankengruppe 304 unabhängig voneinander verwalten.
-
4 veranschaulicht eine Ausführungsform eines Speicherverwaltungsmoduls 150. Das Speicherverwaltungsmodul 150 kann im Wesentlichen dem oben mit Bezug auf 1 beschriebenen Speicherverwaltungsmodul 150 sehr ähnlich sein. In der veranschaulichten Ausführungsform beinhaltet das Speicherverwaltungsmodul 150 ein Befehlsmodul 402, ein Warteschlangenmodul 404 und ein Datenmodul 406, das unten detaillierter beschrieben wird.
-
Das Befehlsmodul 402 ist in einer Ausführungsform eingerichtet, um einen oder mehrere Speicherbetriebsbefehle zu empfangen, die einer Bank 306 von Speicherstellen, z. B. Speicherzellen 302, eines Speicherelements 300 zugeordnet sind. Wie hier verwendet, kann ein Speicherbetriebsbefehl einen Befehl einschließen, der dazu bestimmt ist, einen Vorgang, eine Aktivität oder dergleichen auf dem Speicherelement 300, dem Speicherarray 301, einer Bank 306, einer Bankgruppe 304, einer Speicherzelle 302 oder dergleichen auszulösen. Der Speicherbetriebsbefehl kann zum Beispiel einen Lesebefehl, einen Schreibbefehl, einen Programm-Flush-Befehl, einen erweiterten Puffer-Flush-Befehl, einen Aktualisierungs-Flush-Befehl und/oder dergleichen einschließen. Wie oben beschrieben, kann das Befehlsmodul 402 einen Speicherbetriebsbefehl von einem Speicher-Client 116 empfangen.
-
Gemäß einer Ausführungsform empfängt das Befehlsmodul 402 einen Speicherbetriebsbefehl für eine Bank 306 von Speicherzellen 302, für eine Bankgruppe 304 von Speicherzellen 302 und/oder dergleichen eines Speicherarrays 301 eines Speicherelements 300. In einigen Ausführungsformen empfängt das Befehlsmodul 402 eine oder mehrere Adressen als Teil des Speicherbetriebsbefehls, die der Bank/den Banken 306 von Speicherzellen entsprechen, die dem Speichervorgang zugeordnet sind.
-
Das Warteschlangenmodul 404 ist in einer Ausführungsform so eingerichtet, dass es den Speicherbetriebsbefehl zur Ausführung in eine Warteschlange stellt, indem ein Speicherort in einem Seitenregister 308 für Daten bestimmt wird, die dem Speicherbetriebsbefehl zugeordnet sind. Wie hier verwendet, kann ein Speicherort im Seitenregister 308 ein oder mehrere Daten-Latches, Datenregister und/oder dergleichen enthalten, auf die unter Verwendung einer Adresse, einer Kennung oder dergleichen zugegriffen werden kann. Bei einer derartigen Ausführungsform kann der Speicherort im Seitenregister 308 eine Teilmenge, ein Anteil, ein Teil oder dergleichen der im Seitenregister 308 zur Verfügung stehenden Speicherorte sein. Zum Beispiel kann der Speicherort im Seitenregister 308, das zum Speichern von Daten für eine vollständige Seite von 4 kB eingerichtet sein kann, ein 1 B- oder 2B-Satz von Daten-Latches sein, die einer Bank 306 von Speicherzellen 302 im Speicherelement 300 zugeordnet sind.
-
Das Warteschlangenmodul 404 kann eine Reihenfolge verfolgen, in der Speicherbefehlsvorgänge empfangen werden, sowie die Stellen innerhalb des Seitenregisters, in denen die Adresse und/oder die Daten für die Speicherbefehlsvorgänge gespeichert sind. Beispielsweise kann sich das Warteschlangenmodul 404 auf einer Steuereinheit befinden oder anderweitig Teil einer Steuereinheit sein, beispielsweise einer Zustandsmaschine 222, die einen Speicherort in einem Seitenregister 308 für Daten bestimmt, die einem Speicherbetriebsbefehl zugeordnet sind, und auch eine Reihenfolge zur Ausführung einer Vielzahl empfangener Speicherbetriebsbefehle in einer Warteschlange bestimmt. In einem anderen Beispiel kann sich das Warteschlangenmodul 404 auf mehreren Zustandsmaschinen 222 befinden, von denen jede Speicherorte im Seitenregister 308 verwaltet, die verschiedenen Banken 306 oder Bankengruppen 304 von Speicherzellen 302 im Speicherelement 300 zugeordnet sind. Bei einer derartigen Ausführungsform bestimmt das Warteschlangenmodul 404 für jede Zustandsmaschine 222 einen Speicherort im Seitenregister 308 für Daten in Verbindung mit dem Speicherbetriebsbefehl und bestimmt auch eine Reihenfolge zur Ausführung einer Vielzahl empfangener Speicherbetriebsbefehle, die sich zur Ausführung in einer Warteschlange befinden.
-
Das Datenmodul 406 ist in einer Ausführungsform so eingerichtet, dass es Daten empfängt, die dem empfangenen Speicherbetriebsbefehl zugeordnet sind, und die empfangenen Daten an einem vorbestimmten Speicherort im Seitenregister 308 speichert, bis der Speicherbetriebsbefehl zur Ausführung bereit ist. Beispielsweise kann das Datenmodul 406 Daten empfangen, die einem Schreibbefehl zugeordnet sind, und die Daten am Speicherort, z. B. einem oder mehreren Daten-Latches, im Seitenregister 308 speichert, während der Schreibbefehl zur Ausführung in die Warteschlange gestellt wird. Wenn der Schreibbefehl ausgewählt wird, um ausgeführt, festgeschrieben oder dergleichen zu werden, kann das Datenmodul 406 dann auf die Daten zugreifen, die in die Bank 306 oder Bankengruppe 304 des Speicherarrays 301 von der Speicherstelle im Seitenregister 308 zu schreiben sind, und die Daten in das Speicherarray 301 schreiben oder programmieren. In einem anderen Beispiel kann das Datenmodul 406 Daten von einer Bank 306 oder Bankengruppe 304 eines Speicherelements 300 als Antwort auf einen Leseanforderungsbefehl empfangen und kann die Daten an einem Speicherort im Seitenregister 308 speichern, bis der Leseanforderungsbefehl aus der entsprechenden Warteschlange festgeschrieben, beendet, durchgeführt oder dergleichen ist.
-
Dementsprechend stellt das Speicherverwaltungsmodul 150 ein dynamisches Warteschlangensystem bereit, um mehrere Speichervorgänge für einzelne Banken 306 oder Bankengruppen 304 unter Verwendung von Teilen eines Seitenregisters 308 zu verwalten. Auf diese Weise können mehrere Speichervorgänge synchron auf einem Speicherarray 301 ausgeführt werden, z. B. innerhalb jeder Bankengruppe 304 oder dergleichen. Des Weiteren kann eine unnötige Ausführung von Speichervorgängen auf Abschnitten des Speicherarrays 301, die nicht mit dem Abschnitt des Speicherarrays 301, der durch den Speichervorgang beeinflusst wird, in Beziehung stehen, vermieden werden, indem das Seitenregister 308 verwendet wird, um Speichervorgänge in eine Warteschlange zu stellen, die für einzelne Banken 306 oder Bankengruppen 304 und nicht für das gesamte Speicherarray 301 vorgesehen sind.
-
5 zeigt eine Ausführungsform eines Speicherverwaltungsmoduls 150. Das Speicherverwaltungsmodul 150 kann im Wesentlichen dem oben mit Bezug auf 1 beschriebenen Speicherverwaltungsmodul 150 sehr ähnlich sein. In der dargestellten Ausführungsform beinhaltet das Speicherverwaltungsmodul 150 ein Befehlsmodul 402, ein Warteschlangenmodul 404 und ein Datenmodul 406, welche im Wesentlichen dem oben in Bezug auf 4 beschriebenen Befehlsmodul 402, dem Warteschlangenmodul 404 und dem Datenmodul 406 ähnlich sind. Ferner weist in einer Ausführungsform das Speicherverwaltungsmodul 150 ein Zeigerverwaltungsmodul 502, ein Wiederholungsmodul 504, ein Rückkopiermodul 506 und ein Cache-Lesemodul 508 auf, welche unten im Detail beschrieben werden.
-
Das Zeigerverwaltungsmodul 502 unterhält in einer Ausführungsform ein oder mehrere Adressregister, Referenzen oder dergleichen in Bezug auf einen Speicherort des Seitenregisters 308 für Daten, Adressen, und/oder dergleichen, die einem Speicherbetriebsbefehl zugeordnet sind. Wie hier verwendet, ist ein Zeiger ein Verweis auf eine Adresse, einen Speicherort oder dergleichen im Seitenregister 308 für Daten oder Adressen, die einem Speichervorgang zugeordnet sind. Der eine oder die mehreren Zeiger weisen in einigen Ausführungsformen einen Zeiger auf einen Speicherort für Daten auf, die einem aktuellen Programmier-/Schreibvorgang zugeordnet sind, einen Zeiger auf einen Speicherort für Daten, die einem Programmier-/Schreibvorgang in einer Warteschlange zugeordnet sind, einen Zeiger auf einen Speicherort für Daten, die einem Lesevorgang zugeordnet sind, und/oder dergleichen. In einer Ausführungsform kann das Zeigerverwaltungsmodul 502 die verschiedenen Zeiger auf bestimmte Latches, Ablegeplätze, Adressen, Speicherorte oder dergleichen im Seitenregister 308 leiten, die als Speicherorte für bestimmte Speicherbetriebsbefehle, wie Lesebefehle und Schreibbefehle, vorgegeben wurden.
-
Zum Beispiel kann das Zeigerverwaltungsmodul 502 einen Lesezeiger auf eine Speicherstelle im Seitenregister 308 leiten, die für Daten bestimmt ist, die von einer Bank 306 oder einer Bankengruppe 304 des Speicherarrays 301 gelesen werden, wo sie gespeichert sind. In einer solchen Ausführungsform kann es andere Speicherbefehle geben, die zur Verarbeitung in eine Warteschlange gestellt werden, bevor die Leseanforderung festgeschrieben oder beendet wird, z. B. bevor die Leseanforderungsdaten vom Seitenregister 308 auf einen Speicher-Client 116 übertragen werden, da aber das Zeigerverwaltungsmodul 502 einen Zeiger auf die Leseanforderungsdaten im Seitenregister 308 unterhält und nur ein Teil oder eine Teilmenge des Seitenregisters 308 zum Speichern der Leseanforderungsdaten verwendet wird, kann der Leseanforderungsbefehl in eine Warteschlange gestellt werden, beispielsweise durch den Zeiger nachverfolgt werden, um ausgeführt und abgeschlossen oder festgeschrieben zu werden, wenn die zuvor in der Warteschlange befindlichen Speicherbetriebsbefehle abgeschlossen sind.
-
In einem anderen Beispiel unterhält das Zeigerverwaltungsmodul 502 einen aktuellen Schreibzeiger zu einer Speicherstelle im Seitenregister 308, wo Daten für einen Schreib- oder Programmbefehl gespeichert werden, der gerade verarbeitet wird, oder in die Warteschlange gestellt wird, um verarbeitet zu werden. Ferner unterhält das Zeigerverwaltungsmodul 502 einen oder mehrere in der Warteschlange befindliche oder nächste Zeiger auf Speicherstellen im Seitenregister 308, wo Daten für in der Warteschlange befindliche Schreibbefehle oder Programmbefehle gespeichert werden, die als nächstes zu verarbeiten sind. Zum Beispiel können, wie oben beschrieben, bestimmte Latches, Adressen, Speicherorte oder dergleichen des Seitenregisters 308 als Speicherstellen von Lesedaten und Schreibdaten definiert sein, die einer Bank 306 oder Bankengruppe 304 eines Speicherarrays 301 zugeordnet sind. In einem speziellen Beispiel, wenn drei Sätze von Latches (z. B. drei Spalten von acht, sechzehn, zweiunddreißig oder dergleichen 8-Bit-Latches) des Seitenregisters 308 als Speicherorte für Daten vorgesehen sind, die mit Schreibvorgängen verbunden sind, z. B. für eine bestimmte Speicherbank 306, kann das Zeigerverwaltungsmodul 502 einen aktuellen Zeiger auf die Adresse des ersten Satzes von Latches, und einen nächsten/in der Warteschlange befindlichen Zeiger auf die Adresse des zweiten Satzes von Latches leiten. Der dritte Satz von Latches kann als zusätzlicher Puffer oder Überlauf verwendet werden, z. B. falls ein Schreibvorgang nicht erfolgreich ist und wiederholt werden muss, wie unten beschrieben.
-
Somit kann in einem Beispiel, wenn das Datenmodul 406 Daten für eine Schreibanforderung empfängt und die Daten in einem ersten Satz von Latches des Seitenregisters 308 speichert, das Zeigerverwaltungsmodul 502 einen aktuellen Zeiger auf die Adresse des ersten Satzes von Latches leiten, um die Daten für die aktuelle Schreibanforderung anzuzeigen, z. B. die nächste Schreibanforderung in der Warteschlange. Wenn das Datenmodul 406 Daten für eine andere Schreibanforderung empfängt, während die erste Schreibanforderung immer noch in der Warteschlange ist, speichert das Datenmodul 406 Daten im zweiten Satz von Latches des Seitenregisters 308, und das Zeigerverwaltungsmodul 502 kann den nächsten/in der Warteschlange befindlichen Zeiger auf die Adresse des zweiten Satzes von Latches leiten, um die Daten für die nächste Schreibanforderung anzuzeigen. Dementsprechend kann das Zeigerverwaltungsmodul 502, wenn die Schreibanforderung mit den Daten ausgeführt wird, auf die der aktuelle Zeiger zeigt, z. B. die Daten im ersten Satz von Latches, den aktuellen Zeiger auf den zweiten Satz von Latches umleiten, um die Daten der nächsten Schreibanforderung anzuzeigen, die nun die aktuelle Schreibanforderung ist. Das Zeigerverwaltungsmodul 502 kann dann den nächsten/in der Warteschlange befindlichen Zeiger auf den dritten Satz von Latches, auf den ersten Satz von Latches, auf NULL oder dergleichen umleiten, bis eine andere Schreibanforderung in die Warteschlange gestellt wird.
-
Ferner unterhält das Zeigerverwaltungsmodul 502 in einer Ausführungsform ein jedem Zeiger zugeordnetes Gültigkeitsbit, das angibt, ob Daten, die in dem Seitenregister 308 an der dem Zeiger zugeordneten Speicherstelle gespeichert sind, gültig sind. Beispielsweise kann während einer Leseanforderung das Datenmodul 406 Daten von einer Bank 306 des Speicherarrays 301 empfangen und die Daten in einem Satz von Latches im Seitenregister 308 speichern. Das Zeigerverwaltungsmodul 502 kann den Lesezeiger auf den Satz von Latches leiten und ein Gültigkeitsbit für den Satz von Latches setzen, das anzeigt, dass die im Satz von Latches gespeicherten Daten gültig sind. Sobald die Daten vom Seitenregister gelesen werden, z. B. an einen Speicher-Client 116 übertragen werden, kann das Zeigerverwaltungsmodul 502 dann das Gültigkeitsbit widerrufen, zurücksetzen oder dergleichen, um anzuzeigen, dass die im Satz von Latches gespeicherten Daten nicht länger gültig sind, z. B. weil sie aufgrund der Leseanforderung übertragen oder verarbeitet wurden.
-
In einer Ausführungsform behält das Zeigerverwaltungsmodul 502 einen Zeiger auf einen Speicherort für Daten bei, die zum Schreiben auf das Speicherarray 301 in die Warteschlange gestellt wurden, aber während des Programmier-/Schreibvorgangs nicht erfolgreich in das Speicherelement 300 geschrieben wurden. Wenn beispielsweise ein Schreibvorgang für die Daten, auf die der aktuelle Zeiger zeigt, versucht wurde, aber aus irgendeinem Grund fehlgeschlagen ist, z. B. ein Programmfehler, ein unvollständiges Programm oder dergleichen, kann das Zeigerverwaltungsmodul 502 den aktuellen und nachfolgende Zeiger hochzählen oder umleiten, um auf verschiedene Speicherorte für Daten zu verweisen, die mit in der Warteschlange befindlichen Schreibvorgängen verknüpft sind, um Daten in der Warteschlange zum Schreiben in die Bank 306 oder Bankengruppe 304 vorzubereiten. Da der Schreibvorgang fehlgeschlagen ist, kann das Zeigerverwaltungsmodul 502 das Gültigkeitsbit nicht zurücksetzen, so dass zusätzliche Versuche zum Schreiben der Daten in das Speicherarray 301 durchgeführt werden können. In einer solchen Ausführungsform kann das Zeigerverwaltungsmodul 502 einen „Nicht-Erfolgreich“-Zeiger zu den Daten leiten, die nicht in das Speicherarray 301 geschrieben wurden, und kann ein „Nicht-Erfolgreich“-Bit setzen, um anzuzeigen, dass der Nicht-Erfolgreich-Zeiger auf Daten zeigt, die nicht erfolgreich waren, und in das Speicherarray 301 geschrieben werden müssen.
-
Gemäß einer Ausführungsform kann das Wiederholungsmodul 504 versuchen, Daten in das Speicherarray 301 in eine Bank 306 oder eine Bankgruppe 304 des Speicherarrays 301 oder dergleichen zu schreiben, auf die der Nicht-Erfolgreich-Zeiger aufgrund des gesetzten Nicht-Erfolgreich-Bits verweist. Das Wiederholungsmodul 504 kann versuchen, die vorher fehlgeschlagenen Daten in das Speicherarray 301 solange zu schreiben, bis die Daten geschrieben werden, bis ein Schwellenwert für die Anzahl der Schreibversuche erfüllt wurde, oder dergleichen. Wenn die Daten erfolgreich in das Speicherarray 301 geschrieben wurden, kann das Zeigerverwaltungsmodul 502 das Nicht-Erfolgreich-Bit zurücksetzen und den Nicht-Erfolgreich-Zeiger auf NULL oder auf einen anderen ungültigen Speicherort leiten, bis wieder Daten für eine Schreibanforderung nicht erfolgreich in das Speicherarray 301 geschrieben werden können.
-
Wenn in einigen Ausführungsformen der Nicht-Erfolgreich-Zeiger auf gültige Daten gerichtet wird, wie durch den Gültigkeitszeiger angezeigt, die nicht in das Speicherarray 301 geschrieben werden konnten, können die Daten durch neue Daten für einen neuen Schreibvorgang überschrieben werden, wenn keine verfügbaren Speicherorte im Seitenregister 308 vorhanden sind, die einer Bank 306 oder Bankengruppe 304 des Speicherarrays 301 zugeordnet sind. Wenn beispielsweise drei Sätze von Latches des Seitenregisters einer Bank 306 oder Bankengruppe 304 zugeordnet sind und der aktuelle Zeiger auf einen ersten Satz von Latches mit gültigen Daten verweist, der nachfolgende Zeiger auf einen zweiten Satz von Latches mit gültigen Daten verweist, und der Nicht-Erfolgreich-Zeiger auf einen dritten Satz von Latches mit gültigen Daten verweist, für die bereits ein Schreibversuch in das Speicherarray 301 unternommen wurde, kann das Datenmodul 406 die Daten im dritten Satz von Latches, auf den der Nicht-Erfolgreich-Zeiger verweist, mit den neuen Daten überschreiben. Bei einer derartigen Ausführungsform kann das Datenmodul 406 dem Speicher-Client eine Benachrichtigung, Nachricht oder dergleichen senden, um anzuzeigen, dass Daten nicht erfolgreich in das Speicherarray 301 geschrieben wurden. Ferner kann in dieser Ausführungsform das Zeigerverwaltungsmodul 502 den Nicht-Erfolgreich-Zeiger aktualisieren, so dass er nicht auf einen Satz von Latches im Seitenregister 308 für die Bank 306 oder Bankengruppe 304 verweist, bis wieder ein nicht erfolgreicher Schreibvorgang erfolgt.
-
Wenn nun der Nicht-Erfolgreich-Zeiger auf einen Speicherort mit gültigen Daten verweist, können entsprechend die aktuellen und nachfolgenden Zeiger zwischen den übrigen Speicherorten alternieren, bis der Speicherort, auf den der Nicht-Erfolgreich-Zeiger verweist, verfügbar wird. Auf diese Weise können Teilmengen des Seitenregisters 308 als Warteschlangen für Speichervorgänge für jede Bank 306 oder Bankengruppe 304 verwendet werden, jedoch nicht notwendigerweise in einer First-in-First-out-Manier. Mit anderen Worten kann das Zeigerverwaltungsmodul 502 Zeiger auf Daten für Schreibvorgänge richten, während eine Reihenfolge, nach der die Schreibvorgänge empfangen werden, beibehalten wird, z. B. unter Verwendung der aktuellen und nächsten Zeiger; wenn jedoch der Nicht-Erfolgreich-Zeiger auf gültige Daten geleitet wird, mit denen vorher ein Versuch unternommen wurde, sie auf eine Bank 306 oder Bankengruppe 304 zu schreiben, kann das Wiederholungsmodul 504 versuchen, die durch den Nicht-Erfolgreich-Zeiger referenzierten Daten nicht entsprechend der Reihenfolge, in der die Schreiboperationen empfangen wurden, zu schreiben.
-
Gemäß einer Ausführungsform leitet das Rückkopiermodul 506 einen Schreibzeiger, wie den aktuellen oder nachfolgenden Zeiger, auf einen Speicherort des Seitenregisters, z. B. einen Satz von Latches, der Daten speichert, die einem Schreibanforderungsbefehl zugeordnet sind, so dass Daten auf eine Bank 306 oder eine Bankengruppe 304 des Speicherarrays 301 als Antwort auf das Empfangen einer Schreibanforderung für die Daten „zurück kopiert“ werden können. Auf diese Weise können die Daten in das Seitenregister eingelesen und in das Speicherarray 301 zurück kopiert werden, indem einfach Lese- und Schreibzeiger für das Seitenregister 308 bearbeitet werden, anstatt unnötige Lese- und Schreibvorgänge durchzuführen.
-
In ähnlicher Weise leitet das Cache-Lesemodul 508 in einer Ausführungsform einen Lesezeiger auf Daten um, auf die durch einen Schreibzeiger, z. B. den aktuellen oder nachfolgenden Zeiger, verwiesen wird, so dass die Daten aus dem Seitenregister als Antwort auf einen Leseanforderungsbefehl gelesen werden können, anstatt darauf zu warten, dass die Daten in das Speicherarray 301 geschrieben werden, und dann die Daten zurück aus dem Speicherarray 301 zu lesen, um den Leseanforderungsbefehl zu erfüllen. Auf diese Weise kann es schneller und effizienter sein, den Lesezeiger so zu manipulieren, dass die Daten, die zum Schreiben in das Speicherarray 301 in eine Warteschlange gestellt werden, aus dem Seitenregister 308 gelesen werden können, bevor sie in das Speicherarray 301 geschrieben werden.
-
6 zeigt eine Ausführungsform der Verwendung eines Abschnitts 606 eines Seitenregisters 308 dazu, Speicherbetriebsbefehle für eine Bank 306 der Speicherzellen 302 in eine Warteschlange zu stellen. Gemäß einer Ausführungsform empfängt das Befehlsmodul 402 einen Speicherbetriebsbefehl. Als Antwort auf den Empfang des Speicherbetriebsbefehls bestimmt das Warteschlangenmodul 404 einen Speicherort 602 im Abschnitt 606 des Seitenregisters 308 für Daten, die dem Speicherbetriebsbefehl zugeordnet sind. Wie oben beschrieben, können die Speicherorte 602 im Seitenregister 308 eine Teilmenge, ein Teil, ein Abschnitt oder dergleichen aller verfügbaren Speicherorte im Seitenregister 308 sein. Die Teilmenge 606 des Seitenregisters 308 kann einer bestimmten Bank 306 von Speicherzellen 302 innerhalb des Speicherarrays 301 zugeordnet sein.
-
Gemäß einer Ausführungsform unterhält das Zeigerverwaltungsmodul 502 einen oder mehrere Zeiger 604, die auf Speicherorte 602 innerhalb eines Seitenregisters 308 verweisen, die zum Speichern von Daten im Zusammenhang mit Speicherbetriebsbefehlen bestimmt sind. Wenn das Befehlsmodul 402 beispielsweise einen Leseanforderungsbefehl empfängt, kann das Zeigerverwaltungsmodul 502 bestimmen, welcher Zeiger 604 der Lesezeiger ist, z. B. der Zeiger 604, der auf den Speicherort 0 verweist, der als Speicherort 602 zum Speichern von Lesedaten bestimmt worden sein kann. Das Datenmodul 406 kann Daten für die Leseanforderung von der Bank 306 im Speicherarray 301 empfangen und die Daten im Speicherort 0, auf die der Lesezeiger verweist, speichern. Die Lesedaten können im Speicherort 0 verbleiben, bis der Leseanforderungvorgang in der Warteschlange des Speichervorganges zum Ausführen an der Reihe ist (z. B. können vorher empfangene Lese- oder Schreibbefehle vor diesem bestimmten Leseanforderungsbefehl verarbeitet werden).
-
In einem anderen Beispiel kann das Befehlsmodul 402 einen Schreibbefehl empfangen, um Daten in die Bank 306 zu schreiben. Das Zeigerverwaltungsmodul 502 kann einen aktuellen Zeiger bestimmen, der auf einen Speicherort 602 im Abschnitt 606 des Seitenregisters 308 verweist. Wenn der aktuelle Zeiger auf einen Speicherort 602 verweist, der gültige Daten enthält, z. B. zu verarbeitende Daten in der Warteschlange, wie durch das Gültigkeitsbit angezeigt, kann das Zeigerverwaltungsmodul 502 dann den Speicherort prüfen, auf den der nächste/sich in der Warteschlange befindliche Zeiger verweist.
-
Gemäß einem weiteren Ausführungsbeispiel behält das Zeigerverwaltungsmodul 502 ein Festschreibungsbit, das, wenn es gesetzt ist, anzeigt, dass ein Schreibbefehl für Daten empfangen wurde, auf die der aktuelle Zeiger verweist. Das Zeigerverwaltungsmodul 502 setzt in einer weiteren Ausführungsform als Antwort auf den Empfang einer Anzeige, dass der Schreibvorgang erfolgreich beendet wurde, das Festschreibungsbit zurück. Wenn das Zeigerverwaltungsmodul 502 bestimmt, dass der Schreibvorgang fehlgeschlagen ist oder anderweitig nicht erfolgreich war (z. B. war der Schreibvorgang unvollständig), kann das Zeigerverwaltungsmodul 502 das Nicht-Erfolgreich-Bit setzen, sicherstellen, dass der Nicht-Erfolgreich-Zeiger auf die Daten verweist, auf die gegenwärtig der aktuelle Zeiger verweist, und den aktuellen und den nächsten Zeiger auf den nächsten Datensatz in der Warteschlange im Abschnitt 606 des Seitenregisters 308 verschieben. Auf diese Weise kann durch Beibehalten eines Nicht-Erfolgreich-Zeigers das Wiederholungsmodul 504 den Schreibvorgang zu einem späteren Zeitpunkt unter Verwendung der Daten versuchen, die durch den Nicht-Erfolgreich-Zeiger referenziert werden, bis der Schreibvorgang erfolgreich ist, bis eine Schwellenzahl von Wiederholungsversuchen durchgeführt wurde, oder dergleichen. In einigen Ausführungsformen kann, wenn das Nicht-Erfolgreich-Bit nicht gesetzt ist, der Nicht-Erfolgreich-Zeiger auf denselben Speicherort wie der aktuelle Zeiger, auf einen NULL-Standort und/oder dergleichen, verweisen.
-
Wenn in einer Ausführungsform das Datenmodul 406 neue Daten empfängt, bestimmt das Zeigerverwaltungsmodul 502, ob die Daten an einem Speicherort 602, auf den der aktuelle Zeiger verweist, oder an einem Speicherort gespeichert werden sollen, auf den der nachfolgende Zeiger verweist. Um dies zu bestimmen, kann das Zeigerverwaltungsmodul 502 das Festschreibungsbit und das dem aktuellen Zeiger zugeordnete Gültigkeitsbit prüfen. Wenn das Gültigkeitsbit für den aktuellen Zeiger gesetzt ist, was anzeigt, dass die durch den aktuellen Zeiger referenzierten Daten gültig sind, kann das Datenmodul 406 die Daten in einem Speicherort 602 speichern. Auf ähnliche Weise kann, wenn das Festschreibungsbit gesetzt ist, was anzeigt, dass eine Schreiboperation unter Verwendung von Daten ausgeführt wird, auf die vom aktuellen Zeiger verwiesen wird, das Datenmodul 406 die Daten in einem Speicherort 602 speichern, auf die der nachfolgende Zeiger verweist. Wenn in verschiedenen Ausführungsformen der aktuelle Zeiger und der nachfolgende Zeiger oder jeder der nachfolgenden Zeiger gültige Daten enthält, wie durch das Gültigkeitsbit angezeigt, und es keine verfügbaren Speicherorte 602 innerhalb des Abschnitts 606 des Seitenregisters 308 gibt, können das Zeigerverwaltungsmodul 502 und/oder das Datenmodul 406 eine Fehlermeldung ausgeben, senden oder dergleichen, um einen Fehler beim Speichern und in die Warteschlange Platzieren der Daten zum Schreiben in die Bank 306 anzuzeigen.
-
Darüber hinaus kann, wie oben beschrieben, die in 6 veranschaulichte Zeigerwarteschlange nicht als eine typische First-in-First-out-Warteschlange handeln. Zum Beispiel kann der Lesezeiger immer auf den Speicherort 0 verweisen, aber der aktuelle, nachfolgende und die Nicht-Erfolgreich-Zeiger können auf die Speicherorte 2, 4 und 6 in verschiedenen Konfigurationen verweisen. In einem Beispiel kann der aktuelle Zeiger auf den Speicherort 2 verweisen, und der nächste Zeiger kann den Speicherort 4 referenzieren. Wenn ein Schreibvorgang unter Verwendung der Daten an Speicherort 2 ausgeführt wird, auf den durch den aktuellen Zeiger verwiesen wird, kann der aktuelle Zeiger zum Speicherort 4 umgeleitet werden, und der nachfolgende Zeiger kann zum Speicherort 6 umgeleitet werden. Wenn der Schreibvorgang jedoch fehlschlägt, kann der Nicht-Erfolgreich-Zeiger dann auf Speicherort 2 verweisen. Wenn ein weiterer Schreibvorgang für Daten an Speicherort 4 empfangen wird, auf den der aktuelle Zeiger verweist, kann der aktuelle Zeiger zum Speicherort 6 umgeleitet werden. Wenn Speicherort 2 weiterhin von dem Nicht-Erfolgreich-Zeiger referenziert wird, kann der nachfolgende Zeiger zum Speicherort 4 umgeleitet werden. Somit kann das Zeigerverwaltungsmodul 502 die aktuellen/nachfolgenden/nicht verfügbaren Zeiger ohne irgendeine bestimmte Reihenfolge zu Speicherorten innerhalb des Abschnitts 606 des Seitenregisters 308 leiten und umleiten, z. B. in einer Reihenfolge, in der die Speicherorte 602 verfügbar sind, während eine Reihenfolge aufrechterhalten wird, in der Schreibvorgänge empfangen werden; wenn jedoch zuvor ein Schreibvorgang ohne Erfolg versucht wurde, kann das Wiederholungsmodul 504 versuchen, die Daten außerhalb der Reihenfolge der Schreibvorgänge, die den aktuellen/nachfolgenden Zeigern zugeordnet sind, in die Bank 306 zu schreiben.
-
7 veranschaulicht eine Ausführungsform eines Verfahrens 700 zum Platzieren von Speicherbetriebsbefehlen in eine Warteschlange. Gemäß einer Ausführungsform beginnt das Verfahren 700 und das Befehlsmodul 402 empfängt 702 einen Speicherbetriebsbefehl in Verbindung mit einer Bank 304 von Speicherorten eines Speicherarrays 301. In bestimmten Ausführungsformen platziert 704 das Warteschlangenmodul 404 den Speicherbetriebsbefehl in eine Warteschlange zur Ausführung auf der Bank 306 durch Bestimmen eines Speicherortes in einem Seitenregister 308 für Daten, die dem Speicherbetriebsbefehl zugeordnet sind. Der Speicherort im Seitenregister 308 kann eine Teilmenge verfügbarer Speicherorte im Seitenregister 308 aufweisen. In einer weiteren Ausführungsform speichert 706 das Datenmodul 406 Daten, die dem Speicherbetriebsbefehl zugeordnet sind, an dem bestimmten Speicherort im Seitenregister 308 und das Verfahren 700 endet.
-
8 zeigt eine Ausführungsform eines Verfahrens 800 zum Platzieren von Speicherbetriebsbefehlen in einer Warteschlange. In einer Ausführungsform beginnt das Verfahren 800, und das Befehlsmodul 402 empfängt 802 einen Lesevorgang, z. B. einen Leseanforderungvorgang, um Daten von einer oder mehreren Banken 306 eines Speicherarrays 301 zu lesen. In einigen Ausführungsformen liest 804 das Datenmodul 406 Daten der Leseanforderung von einer oder mehreren Banken 304 eines Speicherarrays 301.
-
Das Warteschlangenmodul 406 bestimmt 806 in einigen Ausführungsformen einen Speicherort in einem Seitenpuffer 308, wo das Datenmodul 406 Daten des Lesevorgangs speichern kann. In einer Ausführungsform aktualisiert 808 das Zeigerverwaltungsmodul 502 einen Lesezeiger, um auf den bestimmten Speicherort der Lesedaten im Seitenpuffer 308 zu verweisen. In verschiedenen Ausführungsformen setzt 810 das Zeigerverwaltungsmodul 502 ein Gültigkeitsbit für die Lesedaten, um anzuzeigen, dass die Lesedaten gültige Daten sind.
-
In einer weiteren Ausführungsform liest 812 das Datenmodul 406 die Lesedaten von dem Speicherort, auf den der Lesezeiger im Seitenpuffer 308 verweist, und überträgt, übermittelt, kopiert, sendet oder dergleichen die Lesedaten an einen Speicher-Client 116, der die Daten angefordert hat. Das Zeigerverwaltungsmodul 502 setzt in einer Ausführungsform das Gültigkeitsbit zurück 814, nachdem die Lesedaten vom Seitenregister 308 gelesen 812 wurden, und das Verfahren 800 ist beendet.
-
9A und 9B veranschaulichen eine Ausführungsform eines Verfahrens 900 zum Platzieren von Speicherbetriebsbefehlen in eine Warteschlange. In einer Ausführungsform beginnt das Verfahren 900, und das Befehlsmodul 402 empfängt 902 einen Schreibvorgangsbefehl, um Daten in eine oder mehrere Banken 306 des Speicherarrays 301 zu schreiben. In einer weiteren Ausführungsform empfängt 904 das Datenmodul 406 Daten für den Schreibvorgang, wie die Daten, die in das Speicherarray 301 zu schreiben sind, und/oder eine oder mehrere Adressen innerhalb des Speicherarrays 301, wo die Daten zu schreiben sind.
-
In einigen Ausführungsformen bestimmt 906 das Warteschlangenmodul 404 einen aktuellen Speicherort im Seitenpuffer 308 zum Platzieren der Daten, die der Schreibanforderung zugeordnet sind, in einer Warteschlange. In einer weiteren Ausführungsform aktualisiert 908 das Zeigerverwaltungsmodul 502 einen aktuellen Zeiger und einen Nicht-Erfolgreich-Zeiger, um auf den Speicherort im Seitenpuffer 308 zu verweisen, wo die Daten gespeichert sind. Gemäß einer Ausführungsform aktualisiert 910 das Zeigerverwaltungsmodul 502 einen nachfolgenden Zeiger, um Daten, die dem nächsten Speicherbetriebsbefehl zugeordnet sind, auf den nächsten verfügbaren Speicherort im Seitenpuffer 308 zu leiten.
-
In bestimmten Ausführungsformen setzt 912 das Zeigerverwaltungsmodul 502 den Daten ein Gültigkeitsbit, um anzuzeigen, dass die Daten, auf die der aktuelle Zeiger verweist, gültig sind, z. B. wurden die Daten noch nicht verarbeitet. In einer Ausführungsform versucht 914 das Datenmodul 406, die Daten des Schreibbefehls in das Seitenregister 308 in das Speicherarray 301 zu schreiben. In einer bestimmten Ausführungsform bestimmt 916 das Zeigerverwaltungsmodul 502, ob der Versuch, die Daten zu schreiben, auf die der aktuelle Zeiger zeigt, erfolgreich ist.
-
Ist das Schreiben erfolgreich, aktualisiert 930 gemäß einer Ausführungsform das Zeigerverwaltungsmodul 502 den aktuellen und die nachfolgenden Zeiger, indem es den aktuellen Zeiger auf den Speicherort im Seitenregister 308 verweist, auf den der nachfolgende Zeiger gerade zeigt, und den nachfolgenden Zeiger auf den nächsten verfügbaren Speicherort oder die nächsten Daten, die sich in der Warteschlange befinden, um in das Speicherarray 301 geschrieben zu werden. In einigen Ausführungsformen setzt 932 das Zeigerverwaltungsmodul 502 das Gültigkeitsbit für die Daten im Seitenpuffer 308, die auf das Speicherarray 301 geschrieben wurden, zurück, und das Verfahren 900 endet.
-
Wenn das Zeigerverwaltungsmodul 502 bestimmt 916, dass der Versuch, die Daten zu schreiben, auf die der aktuelle Zeiger zeigt, nicht erfolgreich ist, setzt 918 das Zeigerverwaltungsmodul 502 in einem anderen Ausführungsbeispiel ein Nicht-Erfolgreich-Bit und speichert 920 den aktuellen Speicherort in dem Nicht-Erfolgreich-Zeiger. Wenn der Wiederholungsbefehl 922 nicht empfangen wird, aktualisiert 930 in einer Ausführungsform das Zeigerverwaltungsmodul 502 den aktuellen und den nachfolgenden Zeiger, und das Verfahren 900 wird fortgesetzt, als ob der Schreibvorgang erfolgreich war. Wenn der Wiederholungsbefehl von der Steuereinheit 244 empfangen 922 wird, versucht 924 das Wiederholungsmodul 504, die Daten, auf die der Nicht-Erfolgreich-Zeiger im Speicherarray 301 verweist, erneut zu schreiben.
-
Wenn das Wiederholungsmodul 504 beim Wiederholungsversuch 924 mit den Daten erfolgreich ist 926, setzt das Zeigerverwaltungsmodul 502 das Nicht-Erfolgreich-Bit zurück 928, aktualisiert 930 den aktuellen und die nachfolgenden Zeiger, und das Verfahren 900 wird fortgesetzt. Wenn das Wiederholungsmodul 504 beim Wiederholungsschreibversuch 924 nicht erfolgreich ist 926, wird das Nicht-Erfolgreich-Bit nicht zurückgesetzt, und das Verfahren 900 wird fortgesetzt (z. B. damit, dass das Zeigerverwaltungsmodul 502 den aktuellen und die nächsten Zeiger aktualisiert 930, als ob der Schreibvorgang erfolgreich war, oder damit, dass ein anderer Wiederholungsversuchsbefehl von der Steuereinheit 244 erhalten 922 wird). In bestimmten Ausführungsformen kann die Steuereinheit 244 mit dem Wiederholungsmodul 504 koordinieren, um weiterhin zu versuchen 924, die Daten auf das Speicherarray 301 zu schreiben, bis eine Schwellenzahl von Schreibversuchen erfüllt ist, oder dergleichen.
-
Mittel zum Puffern von Speicherbetriebsbefehlen, die einem Speicherarray 301 einer nichtflüchtigen Speichervorrichtung unter Verwendung eines Seitenregisters 308 zugeordnet sind, können in verschiedenen Ausführungsformen ein Befehlsmodul 402, ein Warteschlangenmodul 404, ein Zeigerverwaltungsmodul 502 und eine nichtflüchtige Speichervorrichtungsschnittstelle 139, eine nichtflüchtige Speichermediensteuereinheit 126, einen Speicher-Client 116, eine Host-Datenverarbeitungsvorrichtung 110, einen Bus 127, ein Netzwerk 115, eine Steuereinheit (z. B. eine Die-Steuereinheit 220, eine Zustandsmaschine 222, eine Steuereinheit 244, einen Gerätetreiber oder dergleichen), einen Leseverstärker 250, eine Spannungsquelle, einen Prozessor 111, andere Logik-Hardware und/oder einen anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, aufweisen. Andere Ausführungsformen können ähnliche oder gleichwertige Mittel zum Puffern von Speicherbetriebsbefehlen in Verbindung mit einem Speicherarray 301 einer nichtflüchtigen Speichervorrichtung unter Verwendung eines Seitenregisters 308 einschließen.
-
Mittel zum Speichern von Daten für die Speicherbetriebsbefehle im Seitenregister 308 können in verschiedenen Ausführungsformen ein Datenmodul 406, eine nichtflüchtige Speichervorrichtungsschnittstelle 139, eine nichtflüchtige Speichermediensteuereinheit 126, einen Speicher-Client 116, eine Host-Datenverarbeitungsvorrichtung 110, einen Bus 127, ein Netzwerk 115, eine Steuereinheit (z. B. eine Die-Steuereinheit 220, eine Zustandsmaschine 222, eine Steuereinheit 244, einen Gerätetreiber oder dergleichen), einen Leseverstärker 250, eine Spannungsquelle, einen Prozessor 111, andere Logik-Hardware und/oder einen anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, einschließen. Andere Ausführungsformen können ähnliche oder gleichwertige Mittel zum Speichern von Daten für die Speicherbetriebsbefehle im Seitenregister 308 einschließen.
-
Mittel zum Verarbeiten der im Seitenregister 308 gespeicherten Daten für mindestens einen Teilsatz der Speichervorgänge können in verschiedenen Ausführungsformen ein Befehlsmodul 402, ein Datenmodul 406, eine nicht flüchtige Speichervorrichtungsschnittstelle 139, eine nichtflüchtige Speichermediensteuereinheit 126, einen Speicher-Client 116, eine Host-Datenverarbeitungsvorrichtung 110, einen Bus 127, ein Netzwerk 115, eine Steuereinheit (z. B. eine Die-Steuereinheit 220, eine Zustandsmaschine 222, eine Steuereinheit 244, einen Gerätetreiber oder dergleichen), einen Leseverstärker 250, eine Spannungsquelle, einen Prozessor 111, andere Logik-Hardware und/oder einen anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, einschließen. Andere Ausführungsformen können ähnliche oder gleichwertige Mittel zum Verarbeiten der im Seitenregister 308 gespeicherten Daten für mindestens einen Teilsatz der Speichervorgänge einschließen.
-
Die vorliegende Offenbarung kann in anderen spezifischen Formen ausgeführt werden, ohne von ihrem Wesen oder ihren wesentlichen Eigenschaften abzuweichen. Die beschriebenen Ausführungsformen sind in jeder Hinsicht nur als veranschaulichend und nicht als einschränkend zu betrachten. Der Umfang der Offenbarung ist daher eher durch die beigefügten Ansprüche als durch die vorangehende Beschreibung angegeben. Alle Änderungen, die in die Bedeutung und den Äquivalenzbereich der Ansprüche fallen, sollen in ihren Schutzumfang fallen.