DE102018105854A1 - Dynamische Größenanpassung logischer Speicherblöcke - Google Patents

Dynamische Größenanpassung logischer Speicherblöcke Download PDF

Info

Publication number
DE102018105854A1
DE102018105854A1 DE102018105854.3A DE102018105854A DE102018105854A1 DE 102018105854 A1 DE102018105854 A1 DE 102018105854A1 DE 102018105854 A DE102018105854 A DE 102018105854A DE 102018105854 A1 DE102018105854 A1 DE 102018105854A1
Authority
DE
Germany
Prior art keywords
blocks
erase
logical
erase blocks
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018105854.3A
Other languages
English (en)
Inventor
Alan Bennett
Sergey Gorobets
Liam Parker
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE102018105854A1 publication Critical patent/DE102018105854A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

Einrichtungen, Systeme, Verfahren und Computerprogrammprodukte zur dynamischen Größenanpassung logischer Speicherblöcke sind offenbart. Eine Steuereinheit für eine nichtflüchtige Speichervorrichtung enthält eine Blockkomponente, die eine Gesamtzahl verfügbarer Löschblöcke der nichtflüchtigen Speichervorrichtung bestimmt. Eine Steuereinheit für eine nichtflüchtige Speichervorrichtung enthält ein Größenmodul, das die Anzahl von Löschblöcken aus verfügbaren Löschblöcken, die in jeden von mehreren logischen Blöcken aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke bestimmt, so dass die Anzahl von Löschblöcken für jeden der logischen Blöcke um weniger als eine vorbestimmte Abweichungsgrenze voneinander abweicht. Eine Steuereinheit für eine nichtflüchtige Speichervorrichtung enthält ein Abbildungsmodul, das logische Blöcke für die nichtflüchtige Speichervorrichtung durch Zuweisen der bestimmten Anzahl von Löschblöcken zu jedem der logischen Blöcke erzeugt.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Offenbarung bezieht sich in verschiedenen Ausführungsformen auf Speichervorrichtungen und bezieht sich insbesondere auf die dynamische Größenanpassung logischer Speicherblöcke.
  • HINTERGRUND
  • Löschblöcke einer Speichervorrichtung können lokal zusammen gruppiert werden, um logische Speicherblöcke zu bilden. Die Anzahl von Löschblöcken, die in jedem logischen Speicherblock enthalten sind, kann basierend auf der Anzahl fehlerhafter Blöcke, die aufgrund von Herstellungsdefekten in der Speichervorrichtung vorhanden sind, variieren und kann sich mit der Zeit anpassen, wenn Löschblöcke unbrauchbar werden, was verursachen kann, dass sich die Größen der logischen Speicherblöcke ändern.
  • ZUSAMMENFASSUNG
  • Es werden Einrichtungen angegeben, um die Größe logischer Speicherblöcke dynamisch anzupassen. In einer Ausführungsform enthält eine Einrichtung eine Steuereinheit für eine nichtflüchtige Speichervorrichtung. Eine Steuereinheit für eine nichtflüchtige Speichervorrichtung enthält in einer Ausführungsform eine Blockkomponente, die eine Gesamtzahl verfügbarer Löschblöcke der nichtflüchtigen Speichervorrichtung bestimmt. Eine Steuereinheit für eine nichtflüchtige Speichervorrichtung enthält in weiteren Ausführungsformen ein Größenmodul, das die Anzahl von Löschblöcken aus verfügbaren Löschblöcken, die in jeden von mehreren logischen Blöcken aufgenommen werden sollen, als eine Funktion einer Gesamtzahl verfügbarer Löschblöcke bestimmt, so dass die Anzahl von Löschblöcken für jeden der logischen Blöcke um weniger als eine vorbestimmte Abweichungsgrenze voneinander abweicht. Eine Steuereinheit für eine nichtflüchtige Speichervorrichtung enthält in speziellen Ausführungsformen ein Abbildungsmodul, das logische Blöcke für die nichtflüchtige Speichervorrichtung durch Zuweisen der bestimmten Anzahl von Löschblöcken zu jedem der logischen Blöcke erzeugt.
  • Eine Einrichtung enthält in einer weiteren Ausführungsform Mittel zum Identifizieren eines Pools von Löschblöcken eines nichtflüchtigen Aufzeichnungsmediums, die mehreren virtuellen Blöcken zugewiesen werden sollen. In einigen Ausführungsformen enthält jeder aus mehreren virtuellen Blöcken mehrere Löschblöcke, die logisch kombiniert sind, um eine einzige Speichereinheit eines nichtflüchtigen Aufzeichnungsmediums zu bilden. In einer Ausführungsform enthält eine Einrichtung Mittel zum Berechnen der Größen für jeden aus mehreren virtuellen Blöcken, wobei die Größen eine Anzahl von Löschblöcken definieren, die jedem der mehreren virtuellen Blöcke zugewiesen werden sollen. In einer Ausführungsform enthält eine Einrichtung Mittel zum Zuweisen von Löschblöcken aus einem Pool von Löschblöcken zu virtuellen Blöcken, so dass Variationen der Größe zwischen jedem virtuellen Block kleiner als fünfundzwanzig Prozent sind.
  • Es werden Systeme angegeben, um die Größe logischer Speicherblöcke dynamisch anzupassen. Ein System enthält in einer Ausführungsform eine nichtflüchtige Datenspeichervorrichtung, die mehrere Löschblöcke enthält. In speziellen Ausführungsformen ist eine Steuereinheit für eine nichtflüchtige Datenspeichervorrichtung konfiguriert, Operationen zum Bestimmen, wie viele aus mehreren Löschblöcken zum Erzeugen von Superblöcken verfügbar sind, auszuführen. In einigen Ausführungsformen sind Superblöcke Speichereinheiten [engl. storage units] einer nichtflüchtigen Datenspeichervorrichtung[engl.: memory device], die aus einer Kombination mehrerer Löschblöcke bestehen. In einer Ausführungsform ist eine Steuereinheit für eine nichtflüchtige Datenspeichervorrichtung konfiguriert, Operationen zum Erzeugen einer Abbildung verwendbarer Löschblöcke auf die Superblöcke auszuführen, so dass eine Anzahl verwendbarer Löschblöcken, die auf jeden der Superblöcke abgebildet sind, um weniger als eine Schwellenwertgröße variiert. In einer Ausführungsform ist eine Steuereinheit für eine nichtflüchtige Datenspeichervorrichtung konfiguriert, Operationen zum periodischen Modifizieren einer Abbildung verwendbarer Löschblöcke auf Superblöcke auszuführen, wobei sichergestellt wird, dass eine Anzahl verwendbarer Löschblöcken, die auf jeden der Superblöcke abgebildet sind, um weniger als eine Schwellenwertgröße variiert.
  • Figurenliste
  • Eine speziellere Beschreibung ist nachstehend mit Bezug auf spezifische in den beigefügten Zeichnungen dargestellte Ausführungsformen enthalten. Selbstverständlich sollen diese Zeichnungen nur spezielle Ausführungsformen der Offenbarung abbilden und deshalb nicht so betrachtet werden, dass sie ihren Schutzbereich einschränken, wenn die Offenbarung mit zusätzlicher Spezifität und Einzelheiten durch die Verwendung der begleitenden Zeichnungen beschrieben und erläutert wird; es zeigen:
    • 1 ein schematisches Blockdiagramm, das eine Ausführungsform eines Systems darstellt, das ein Speichermanagementmodul enthält;
    • 2 ein schematisches Blockdiagramm, das eine Ausführungsform eines Datenspeicherelements darstellt;
    • 3 ein schematisches Blockdiagramm, das eine weitere Ausführungsform eines Datenspeicherelements darstellt;
    • 4 ein schematisches Blockdiagramm, das eine Ausführungsform eines Speichermanagementmoduls darstellt;
    • 5 ein schematisches Blockdiagramm, das eine weitere Ausführungsform eines Speichermanagementmoduls darstellt;
    • 6 einen schematischen Ablaufplan, der eine Ausführungsform eines Verfahrens zur dynamischen Größenanpassung logischer Speicherblöcke darstellt;
    • 7 einen schematischen Ablaufplan, der eine weitere Ausführungsform eines Verfahrens zur dynamischen Größenanpassung logischer Speicherblöcke darstellt;
    • 8A einen schematischen Ablaufplan, der eine weitere Ausführungsform eines Verfahrens zur dynamischen Größenanpassung logischer Speicherblöcke darstellt; und
    • 8B einen schematischen Ablaufplan, der eine weitere Ausführungsform eines Verfahrens zur dynamischen Größenanpassung logischer Speicherblöcke darstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Aspekte der vorliegenden Offenbarung können als eine Einrichtung, ein System, ein Verfahren oder ein Computerprogrammprodukt verwirklicht sein. Dementsprechend können Aspekte der vorliegenden Offenbarung die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (die Firmware, residente Software, Mikrocode oder dergleichen enthält) oder einer Ausführungsform, die Software- und Hardware-Aspekte kombiniert, annehmen, die alle allgemein hier als eine „Schaltung“, ein „Modul“. eine „Einrichtung“ oder ein „System“ bezeichnet sein können. Darüber hinaus können Aspekte der vorliegenden Offenbarung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren nicht-transitorischen computerlesbaren Speichermedien verwirklicht ist, die computerlesbaren und/oder ausführbaren Programmcode speichern.
  • Viele der in dieser Spezifikation beschriebenen Funktionseinheiten sind als Module bezeichnet worden, um ihre Unabhängigkeit von der Implementierung ganz besonders zu betonen. Beispielsweise kann ein Modul als eine Hardware-Schaltung implementiert sein, die spezifisch angepasste VLSI-Schaltungen oder Gatter-Arrays, Standard-Halbleiter wie z. B. Logik-Chips, Transistoren oder andere diskrete Komponenten enthält. Ein Modul kann auch in programmierbaren Hardware-Vorrichtungen wie z. B. feldprogrammierbaren Gatter-Arrays, programmierbarer Array-Logik, programmierbaren Logik-Vorrichtungen oder dergleichen implementiert sein.
  • Module können auch wenigstens teilweise in Software zur Ausführung durch verschiedene Typen von Prozessoren implementiert sein. Ein identifiziertes Modul von ausführbaren Code kann beispielsweise einen oder mehrere physikalische oder logische Blöcke von Computeranweisungen enthalten, die beispielsweise als ein Objekt, eine Prozedur oder eine Funktion organisiert sein können. Nichtsdestotrotz müssen die ausführbaren Einheiten eines identifizierbaren Moduls nicht physikalisch am selben Ort sein, sondern können disparate Anweisungen enthalten, die an unterschiedlichen Orten gespeichert sind, die dann, wenn sie logisch vereinigt werden, das Modul enthalten und den festgelegten Zweck für das Modul erreichen.
  • Tatsächlich kann ein Modul aus ausführbarem Code eine einzige Anweisung oder viele Anweisungen enthalten und kann sogar über mehrere unterschiedliche Code-Segmente, unter unterschiedlichen Programmen, über mehrere Datenspeichervorrichtungen und dergleichen verteilt sein. Wo ein Modul oder Abschnitte eines Moduls in Software implementiert sind, können die Software-Abschnitte in einem oder mehreren computerlesbaren und/oder ausführbaren Speichermedien gespeichert sein. Irgendeine Kombination aus einem oder mehreren computerlesbaren Speichermedien kann benutzt werden. Ein computerlesbares Speichermedium kann beispielsweise ein/e elektronische/s, magnetische/s, optische/s, elektromagnetische/s, Infrarot- oder Halbleiter-System, Einrichtung oder Vorrichtung oder irgendeine geeignete Kombination des Vorstehenden enthalten, ohne darauf beschränkt zu sein, würde jedoch keine sich ausbreitenden Signale enthalten. Im Kontext dieses Dokuments kann ein computerlesbares und/oder ausführbares Speichermedium irgendein greifbares und/oder nicht-transitorisches Medium sein, das ein Programm zum Gebrauch durch oder in Verbindung mit einem Anweisungsausführungssystem, einer Einrichtung, einem Prozessor oder einer Vorrichtung oder in Verbindung damit enthalten oder speichern kann.
  • Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Offenbarung kann in irgendeiner Kombination aus einer oder mehreren Programmiersprachen geschrieben sein, die eine objektorientierte Programmiersprache wie z. B. Python, Java, Smalltalk, C++, C#, Objective C oder dergleichen, herkömmliche prozedurale Programmiersprachen wie z. B. die „C“-Programmiersprache, Skript-Programmiersprachen und/oder andere ähnliche Programmiersprachen enthalten. Der Programmcode kann teilweise oder vollständig auf einem oder mehreren Computern eines Anwenders und/oder auf einem entfernte Computer oder Server über ein Datennetz oder dergleichen ablaufen.
  • Eine Komponente, wie sie hier verwendet ist, enthält eine greifbare, physikalische, nicht-transitorische Vorrichtung. Beispielsweise kann eine Komponente als eine Hardware-Logikschaltung implementiert sein, die angepasste VLSI-Schaltungen, Gatter-Arrays oder andere integrierte Schaltungen; Standard-Halbleiter wie z. B. Logik-Chips, Transistoren oder andere diskrete Vorrichtungen; und/oder andere mechanische oder elektrische Vorrichtungen enthält. Eine Komponente kann auch in programmierbaren Hardware-Vorrichtungen wie z. B. feldprogrammierbare Gatter-Arrays, programmierbarer Array-Logik, programmierbaren Logik-Vorrichtungen oder dergleichen implementiert sein. Eine Komponente kann eine oder mehrere integrierte Silizium-Schaltungsvorrichtungen (z. B. Chips, Baustein, Chip-Ebenen, Gehäuse) oder andere diskrete elektrische Vorrichtungen in elektrischer Kommunikation mit einer oder mehreren anderen Komponenten über elektrische Leitungen einer Leiterplatte (PCB) oder dergleichen enthalten. Jedes der hier beschriebenen Module kann in speziellen Ausführungsformen alternativ durch eine Komponente verwirklicht oder als eine Komponente implementiert sein.
  • Durchgehend durch diese Spezifikation bedeutet die Bezugnahme auf „eine Ausführungsform“ oder eine ähnliche Ausdrucksweise, dass ein/e spezielle/s Merkmal, Struktur oder Eigenschaft, das/die in Verbindung mit der Ausführungsform beschrieben ist, in wenigstens einer Ausführungsform der vorliegenden Offenbarung enthalten ist. Somit kann sich das Auftreten des Ausdrucks „in einer Ausführungsform“ oder eine ähnliche Ausdrucksweise durchgehend durch diese Spezifikation immer auf dieselbe Ausführungsform beziehen, muss das aber nicht notwendigerweise, sondern kann „eine oder mehrere jedoch nicht alle Ausführungsformen“ bedeuten, sofern nicht ausdrücklich anders angegeben. Die Begriffe „enthalten“, „enthalten“, „aufweisen“ und Variationen davon bedeuten „enthalten, jedoch nicht darauf beschränkt“, sofern nicht ausdrücklich anders angegeben. Eine nummerierte Liste von Elementen impliziert nicht, dass irgendeines der oder alle Elemente gegenseitig ausschließend und/oder gegenseitig einschließend sind, sofern nicht ausdrücklich anders angegeben. Die Begriffe „ein/eine/eines“ und „der/die/das“ beziehen sich ebenfalls auf „eines oder mehrere“, sofern nicht ausdrücklich anders angegeben.
  • Aspekte der vorliegenden Offenbarung sind nachstehend mit Bezug auf schematische Ablaufdiagramme und/oder schematische Blockdiagramme von Verfahren, Einrichtungen, Systemen und Computerprogrammprodukten gemäß Ausführungsformen dieser Offenbarung beschrieben. Es ist zu verstehen, dass jeder Block der schematischen Ablaufdiagramme und/oder schematischen Blockdiagramme und Kombinationen aus Blöcken in den schematischen Ablaufdiagrammen und/oder schematischen Blockdiagrammen durch Computerprogrammanweisungen implementiert sein können. Diese Computerprogrammanweisungen können für einen Prozessor eines Computers oder eine andere programmierbare Datenverarbeitungseinrichtung bereitgestellt werden, um eine Maschine zu produzieren, so dass die Anweisungen, die über den Prozessor oder die andere programmierbare Datenverarbeitungseinrichtung ablaufen, Mittel zum Implementieren der Funktionen und/oder Aktionen, die in dem Block oder den Blöcken der schematischen Ablaufdiagramme und/oder schematischen Blockdiagramme spezifiziert sind, erzeugen.
  • Es wird außerdem darauf hingewiesen, dass in einigen alternativen Implementierungen die Funktionen, die in den Blöcken genannt sind, außerhalb der in den Figuren bezeichneten Reihenfolge auftreten können. Beispielsweise 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 beteiligten Funktionalität. Andere Schritte und Verfahren können vorstellbar sein, die in Funktion, Logik oder Effekt einem oder mehreren Blöcken, oder Abschnitten davon, der dargestellten Figuren äquivalent sind. Obwohl verschiedene Pfeiltypen und Linientypen ein den Ablauf- und/oder Blockdiagrammen eingesetzt sein können, sind sie so zu verstehen, dass sie den Umfang der entsprechenden Ausführungsformen nicht einschränken. Beispielsweise kann ein Pfeil eine Warte- oder Überwachungszeitspanne einer nicht spezifizierten Dauer zwischen aufgezählten Schritten der abgebildeten Ausführungsform angeben.
  • In der folgenden ausführlichen Beschreibung wird auf die begleitenden Zeichnungen Bezug genommen, die einen Teil davon bilden. Die vorstehende Zusammenfassung ist nur erläuternd und soll in keiner Weise einschränkend sein. Zusätzlich zu den erläuternden Aspekten, Ausführungsformen und Merkmalen, die vorstehend beschrieben sind, werden weitere Aspekte, Ausführungsformen und Merkmale durch Bezugnahme auf die Zeichnungen und die folgende ausführlichen Beschreibung offensichtlich. Die Beschreibung von Elementen in jeder Figur kann sich auf Elemente weitergehender Figuren beziehen. Gleiche Zahlen 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 Speichermanagementmodul 150 enthält. Das Speichermanagementmodul 150 kann ein Teil von und/oder in Kommunikation mit einem oder mehreren aus einer Steuereinheit 124 des nichtflüchtigen Datenspeichers, einer Steuereinheit 126 nichtflüchtiger Datenspeichermedien, eines Vorrichtungstreibers oder einer Speichermanagementschicht (SML) 130 oder dergleichen sein. Das Speichermanagementmodul 150 kann auf einem nichtflüchtigen Datenspeichersystem 102 einer Berechnungsvorrichtung 110 arbeiten, die einen Prozessor 111, einen flüchtigen Datenspeicher 112 und eine Kommunikationsschnittstelle 113 enthalten kann. Der Prozessor 111 kann eine oder mehrere zentrale Verarbeitungseinheiten, einen oder mehrere Allzweck-Prozessoren, einen oder mehrere anwendungsspezifische Prozessoren, einen oder mehrere virtuelle Prozessoren (z. B. kann die Berechnungsvorrichtung 110 eine virtuelle Maschine sein, die innerhalb eines Hosts arbeitet), einen oder mehrere Prozessorkerne oder dergleichen enthalten. Die Kommunikationsschnittstelle 113 kann eine oder mehrere Netzschnittstellen enthalten, die konfiguriert sind, die Berechnungsvorrichtung 110 und/oder die Steuereinheit 124 des nichtflüchtige Datenspeichers mit einem Kommunikationsnetz 115 wie z. B. einem Internetprotokoll-Netz, einem Speicherbereichsnetz oder dergleichen kommunikativ zu koppeln.
  • Die Berechnungsvorrichtung 110 kann ferner ein nicht-transitorisches computerlesbares Speichermedium 114 enthalten. Die computerlesbaren Speichermedien 114 können ausführbare Anweisungen enthalten, die konfiguriert sind, die Berechnungsvorrichtung 110 (z. B. den Prozessor 111) zu veranlassen, Schritte eines oder mehrerer der hier offenbarten Verfahren auszuführen. Alternativ oder zusätzlich kann das Speichermanagementmodul 150 als eine oder mehrere computerlesbare Anweisungen ausgeführt sein, die auf den nicht-transitorischen Speichermedien 114 gespeichert sind.
  • Das nichtflüchtige Datenspeichersystem 102 enthält in der abgebildeten Ausführungsform ein Speichermanagementmodul 150. Das Speichermanagementmodul 150 ist in einer Ausführungsform konfiguriert, eine Gesamtzahl verfügbarer oder verwendbarer Löschblöcke einer nichtflüchtigen Datenspeichervorrichtung 120 zu bestimmen und zu bestimmen, wie viele der verfügbaren Löschblöcke zusammen gruppiert werden können, um mehrere logische Speicherblöcke zu bilden, so dass die Anzahl von Löschblöcken, die in jedem logischen Speicherblock enthalten sind, nicht um weniger als einen vorbestimmten Betrag, prozentualen Anteil oder dergleichen voneinander abweicht. Das Speichermanagementmodul 150 erzeugt in einer weiteren Ausführungsform mehrere logische Speicherblöcke durch Zuweisen der bestimmten Anzahl von Löschblöcken zu jedem der mehreren logischen Speicherblöcke.
  • Auf diese Weise kann in speziellen Ausführungsformen das Speichermanagementmodul 150 logische Speicherblöcke pflegen, die kleine Variationen in ihrer Größe (z. B. der Anzahl verwendbarer Löschblöcke, die den logischen Speicherblöcken zugewiesen sind) aufweisen und deshalb kleine Variationen der Parallelität (z. B. um konsistente Bandbreite für eine Host-Vorrichtung bereitzustellen) zum parallelen Ausführen von Operationen wie z. B. Lesen, Schreiben, Programmieren und/oder dergleichen mit einem konsistenten Grad der Parallelität aufweisen. Darüber hinaus kann das Speichermanagementmodul 150 durch Reduzieren der Variation der Anzahl von Löschblöcken, die jedem der logischen Speicherblöcke zugewiesen sind, sicherstellen, dass im Wesentlichen alle verfügbaren und verwendbaren Löschblöcke, z. B. die Kapazität fehlerfreier Löschblöcke, logischen Speicherblöcken zugewiesen sind. Das ist anders als in herkömmlichen Verfahren zum Erzeugen logischer Speicherblöcke, die auf das Erzeugen so vieler logischer Speicherblöcke wie möglich und nur von Speicherblöcken mit voller Größe oder Erzeugen so vieler logischer Speicherblöcke mit voller Größe wie möglich und dann Verwenden der verbleibenden Löschblöcke, um kleinere, bis zur halben Größe, logische Speicherblöcke zu erzeugen, fokussieren können. In beiden Fällen kann eine Anzahl verbleibender fehlerfreier Löschblöcke vorhanden sein, die nicht verwendet werden können, um logische Speicherblöcke zu bilden, und es kann eine große Variation der Größe logischer Speicherblöcke vorhanden sein, was eine hohe Parallelitätsvariation und verminderte Leistung erzeugen kann.
  • In einer Ausführungsform kann das Speichermanagementmodul 150 ausführbaren Software-Code, wie z. B. einen Vorrichtungstreiber, SML 130 oder dergleichen, der auf den computerlesbaren Speichermedien 114 gespeichert ist, zur Ausführung auf dem Prozessor 111 enthalten. In einer weiteren Ausführungsform kann das Speichermanagementmodul 150 Logik-Hardware einer oder mehrerer nichtflüchtiger Datenspeichervorrichtungen 120 enthalten, wie z. B. eine Steuereinheit 126 für nichtflüchtige Datenspeichermedien, eine Steuereinheit 124 für nichtflüchtigen Datenspeicher, eine Vorrichtungssteuereinheit, ein feldprogrammierbares Gatter-Array (FPGA) oder andere Programmierbare Logik, Firmware für ein FPGA oder andere programmierbare Logik, Mikrocode zur Ausführung auf einer Mikrosteuereinheit, eine anwendungsspezifische integrierte Schaltung (ASIC) der dergleichen. In einer weiteren Ausführungsform kann das Speichermanagementmodul 150 eine Kombination aus sowohl ausführbarem Software-Code als auch Logik-Hardware enthalten.
  • In einer Ausführungsform ist das Speichermanagementmodul 150 konfiguriert, Speicheranforderungen von der SML 130 über einen Baus 125 oder dergleichen zu empfangen. Das Speichermanagementmodul 150 kann ferner konfiguriert sein, Daten zu/von der SML 130 und/oder Speicher-Clients 116 über den Bus 125 zu übertragen. Dementsprechend kann das Speichermanagementmodul 150 in einigen Ausführungsformen ein oder mehrere Datenspeicherdirektzugriffs-Module (DMA-Module), entfernte DMA-Module, Bussteuereinheiten, Bridges, Puffer und so weiter enthalten und/oder in Kommunikation damit sein, um die Übertragung von Speicheranforderungen und zugeordneten Daten zu unterstützen. In einer weiteren Ausführungsform kann das Speichermanagementmodul 150 Speicheranforderung als einen API-Aufruf von einem Speicher-Client 116, als einen IO-CTL-Befehl oder dergleichen empfangen. Das Speichermanagementmodul 150 ist nachstehend mit Bezug auf die 4 und 5 genauer beschrieben.
  • Gemäß verschiedenen Ausführungsformen kann eine Steuereinheit 124 eines nichtflüchtigen Datenspeichers, die das Speichermanagementmodul 150 enthält, eine oder mehrere nichtflüchtige Datenspeichervorrichtungen 120 managen. Die nichtflüchtige(n) Datenspeichervorrichtung(en) 120 können Aufzeichnungs-, Datenspeicher- und/oder Speichervorrichtungen enthalten, wie z. B. Festkörperspeichervorrichtung(en), die in mehrere adressierbare Medienspeicherorte angeordnet und/oder partitioniert ist/sind. Wie hier verwendet bezieht sich ein Medienspeicherort auf irgendeine physikalische Datenspeichereinheit (z. B. irgendeine Menge physikalischer Speichermedien auf einer nichtflüchtigen Datenspeichervorrichtung 120). Datenspeichereinheiten können, ohne darauf beschränkt zu sein, enthalten: Seiten, Datenspeicherbereiche, Löschblöcke, Sektoren, Blöcke, Sammlungen oder Gruppen physikalischer Speicherorte (z. B. logische Seiten, logische Löschblöcke, nachstehend beschrieben) oder dergleichen.
  • Die Steuereinheit 124 des nichtflüchtigen Datenspeichers kann eine SML 130 enthalten, die einen logischen Adressenraum 134 für einen oder mehrere Speicher-Clients 116 präsentieren kann. Ein Beispiel einer SML ist die „Virtual Storage Layer®“ von SanDisk Corporation aus Milpitas, Kalifornien. Alternativ kann jede nichtflüchtige Datenspeichervorrichtung 120 eine Steuereinheit 126 für nichtflüchtige Datenspeichermedien enthalten, die einen logischen Adressenraum 134 für die Speicher-Clients 116 präsentieren kann. Wie hier verwendet bezieht sich ein logischer Adressenraum 134 auf eine logische Repräsentation von Datenspeicherbetriebsmitteln. Der logische Adressenraum 134 kann mehrere (z. B. einen Bereich von) logische Adressen enthalten. Wie hier verwendet bezieht sich eine logische Adresse auf irgendeinen Bezeichner zum Referenzieren eines Datenspeicherbetriebsmittels (z. B. Daten), der, ohne darauf beschränkt zu sein, enthält: eine logische Blockadresse (LBA), Zylinder/Kopf/Sektor-Adresse (CHS-Adresse), einen Dateinamen, einen Objektbezeichner, einen Inode, einen universellen eindeutigen Bezeichner (UUID), einen globalen eindeutigen Bezeichner (GUID), einen Hash-Code, eine Signatur, einen Indexeintrag, einen Bereich, einen Umfang oder dergleichen.
  • Die SML 130 kann Metadaten 135 pflegen, wie z. B. einen Vorwärtsindex, um logische Adressen des logischen Adressenraums 134 auf Medienspeicherorte auf der/den nichtflüchtigen Datenspeichervorrichtung(en) 120 abzubilden. Die SML 130 kann beliebige Any-to-any-Abbildungen von logischen Adressen auf physikalische Speicherbetriebsmittel bereitstellen. Wie hier verwendet kann eine „Any-to-any“-Abbildung irgendeine logische Adresse auf irgendein physikalisches Speicherbetriebsmittel abbilden. Dementsprechend können keine vordefinierten und/oder voreingestellten Abbildungen zwischen logischen Adressen und speziellen Medienspeicherorten und/oder Medienadressen vorhanden sein. Wie hier verwendet bezieht sich eine Medienadresse auf eine Adresse eines Datenspeicherbetriebsmittels, das ein Datenspeicherbetriebsmittel aus einem weiteren für eine Steuereinheit, die mehrere Datenspeicherbetriebsmittel managt, eindeutig identifiziert. Als Beispiel enthält eine Medienadresse, ohne darauf beschränkt zu sein: die Adresse eines Medienspeicherorts, eine physikalische Datenspeichereinheit, eine Sammlung physikalischer Datenspeichereinheiten (z. B. eine logische Datenspeichereinheit), einen Abschnitt einer Datenspeichereinheit (z. B. eine Adresse und einen Versatz, Bereich und/oder Umfang einer logischen Datenspeichereinheit) oder dergleichen. Dementsprechend kann die SML 130 logische Adressen auf physikalische Datenbetriebsmittel irgendeiner Größe und/oder Granularität abbilden, die dem zugrundeliegenden Datenpartitionierungsschema des/der nichtflüchtigen Datenspeichervorrichtung(en) 120 entsprechen kann oder nicht. Beispielsweise ist in einigen Ausführungsformen die Steuereinheit 124 des nichtflüchtigen Datenspeichers konfiguriert, Daten innerhalb logischer Datenspeichereinheiten, die durch logisches Kombinieren von mehreren physikalischen Datenspeichereinheiten gebildet sind, zu speichern, was ermöglichen kann, dass die Steuereinheit 124 des nichtflüchtigen Datenspeichers viele unterschiedliche Größen und/oder Granularitäten virtueller Datenspeichereinheiten unterstützt.
  • Wie hier verwendet bezieht sich ein logisches Datenspeicherelement auf eine Gruppe aus zwei oder mehr nichtflüchtigen Datenspeicherelementen, die parallel (z. B. über einen I/O- oder Steuer-Bus) gemanagt werden oder gemanagt werden können, die ansonsten als ein logischer Speicherblock, ein virtueller Speicherblock und/oder ein Superblock bezeichnet sein kann. Ein logisches Datenspeicherelement kann mehrere logische Datenspeichereinheiten enthalten, wie z. B. logische Seiten, logische Datenspeicherbereiche (z. B. logische Löschblöcke) und so weiter. Wie hier verwendet bezieht sich eine logische Datenspeichereinheit auf ein logisches Konstrukt, das zwei oder mehr physikalische Datenspeichereinheiten kombiniert, wobei jede physikalische Datenspeichereinheit auf einem entsprechenden nichtflüchtigen Datenspeicherelement in dem jeweiligen logischen Datenspeicherelement ist (z. B. jedes nichtflüchtige Datenspeicherelement parallel zugreifbar ist). Wie hier verwendet bezieht sich ein logischer Datenspeicherbereich auf eine Gruppe aus zwei oder mehr physikalischen Datenspeicherbereichen, wobei jeder physikalische Datenspeicherbereich auf einem entsprechenden nichtflüchtigen Datenspeicherelement in dem jeweiligen logischen Datenspeicherelement ist.
  • Der logische Adressenraum 134, der durch die SML 130 präsentiert wird, kann eine logische Kapazität aufweisen, die der Anzahl von verfügbaren logischen Adressen in dem logischen Adressenraum 134 und der Größe und/oder Granularität der Daten, die durch die logischen Adressen referenziert werden, entspricht. Beispielsweise kann die logische Kapazität eines logischen Adressenraums 134, der 2^32 eindeutige logische Adressen enthält, von denen jede 2048 Bytes (2KiB) von Daten referenziert, 2^43 Bytes sein. Wie hier verwendet bezieht sich ein Kibibyte (kiB) auf 1023 Bytes. In einigen Ausführungsformen kann der logische Adressenraum 134 dünn bereitgestellt sein. Wie hier verwendet bezieht sich ein „dünn bereitgestellter“ logischer Adressenraum 134 auf einen logischen Adressenraum 134, der eine logische Kapazität aufweist, die die physikalische Kapazität des/der zugrundeliegenden nichtflüchtigen Datenspeichervorrichtung(en) übersteigt. Beispielsweise kann die SML 130 den Speicher-Clients 116 einen logischen 64-Bit-Adressenraum 134 (z. B. einen logischen Adressenraum 134, der durch logische 64-Bit-Adressen referenziert ist) präsentieren, was die physikalische Kapazität der zugrundeliegenden nichtflüchtigen Datenspeichervorrichtungen 120 übersteigen kann. Der große logische Adressenraum 134 kann es Speicher-Clients 116 ermöglichen, zusammenhängende Bereich logischer Adressen zuzuweisen und/oder zu referenzieren, während er die Wahrscheinlichkeit für Benennungskonflikte reduziert. Die SML 130 kann die Any-to-any-Abbildungen zwischen logischen Adressen und physikalischen Speicherbetriebsmitteln wirksam einsetzen, um den logischen Adressenraum 134 unabhängig von den zugrundeliegenden physikalischen Speichervorrichtungen 120 zu managen. Beispielsweise kann die SML 130 physikalische Speicherbetriebsmittel nahtlos wie jeweils erforderlich hinzufügen und/oder entfernen, ohne die logischen Adressen, die durch die Speicher-Clients 116 verwendet werden, zu ändern.
  • Die Steuereinheit 124 des nichtflüchtigen Datenspeichers kann konfiguriert sein, 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 mit den Daten auf den physikalischen Speichermedien 122 gespeichert sind. Die persistenten kontextabhängigen Metadaten stellen den Kontext für die Daten bereit, mit denen sie gespeichert sind. In speziellen Ausführungsformen identifizieren die persistenten kontextabhängigen Metadaten die Daten eindeutig, mit denen die persistenten kontextabhängigen Metadaten gespeichert sind. Beispielsweise können die persistenten kontextabhängigen Metadaten einen Sektor oder Block von Daten, der einem Speicher-Client 116 gehört, unter anderen Sektoren oder Blöcken, die dem Speicher-Client 116 gehören, eindeutig identifizieren. In einer weiteren Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten eine Operation, die auf den Daten ausgeführt wird. In einer weiteren Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten eine Sequenz von Operationen, die auf den Daten ausgeführt werden. In einer weiteren Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten Sicherheitssteuerelemente, einen Datentyp oder andere Attribute der Daten. In einer speziellen Ausführungsform identifizieren die persistenten kontextabhängigen Metadaten wenigstens einen aus mehreren Aspekten, die den Datentyp, einen eindeutigen Datenbezeichner, eine Operation und eine Folge von Operationen, die auf den Daten ausgeführt werden, enthalten.
  • Die persistenten kontextabhängigen Metadaten können, ohne darauf beschränkt zu sein, enthalten: eine logische Adresse der Daten, einen Bezeichner der Daten (z. B. einen Dateinamen, eine Objekt-ID, ein Etikett, einen eindeutigen Bezeichner oder dergleichen), Referenz(en) auf andere Daten (z. B. ein Kennzeichen, dass die Daten anderen Daten zugeordnet sind), eine relative Position oder einen Versatz der Daten in Bezug auf andere Daten (z. B. Dateiversatz usw.), Datengröße und/oder Bereich und dergleichen. Das kontextabhängige Datenformat kann ein Paketformat enthalten, das ein Datensegment und einen oder mehrere Köpfe enthält. Alternativ kann ein kontextabhängiges Datenformat Daten Kontextinformationen auf andere Weise zuordnen (z. B. in einem dedizierten Index auf den nichtflüchtigen Datenspeichermedien 122, einem Datenspeicherbereichsindex oder dergleichen).
  • In einigen Ausführungsformen kann das kontextabhängige Datenformat ermöglichen, dass Datenkontext basierend auf dem Inhalt der nichtflüchtigen Datenspeichermedien 122 und unabhängig von anderen Metadaten wie z. B. den vorstehend diskutierten beliebigen Any-to-any-Abbildungen bestimmt und/oder rekonstruiert werden kann. Da der Medienort von Daten von der logischen Adresse der Daten unabhängig ist, kann es ineffizient oder unmöglich sein, den Kontext von Daten nur basierend auf dem Medienort oder der Medienadresse der Daten zu bestimmen. Das Speichern von Daten in einem kontextabhängigen Format auf den nichtflüchtigen Datenspeichermedien 122 kann es ermöglichen, dass der Datenkontext ohne Referenz auf andere Metadaten bestimmt wird. Beispielsweise kann es das kontextabhängige Datenformat ermöglichen, dass die Metadaten nur basierend auf dem Inhalt der nichtflüchtigen Datenspeichermedien 122 rekonstruiert werden (z. B. Rekonstruieren der Any-to-any-Abbildungen zwischen logischen Adressen und Medienorten).
  • In einigen Ausführungsformen kann die Steuereinheit 124 des nichtflüchtigen Datenspeichers konfiguriert sein, Daten auf einem oder mehreren asymmetrischen einmal beschreibbaren Medien 122 wie z. B. Festkörper-Speichermedien zu speichern. Wie hier 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, das unterschiedliche Latenzen für unterschiedliche Speicheroperationen aufweist. Viele Typen von Festkörper-Speichermedien sind asymmetrisch; beispielsweise kann eine Leseoperation viel schneller sein als eine Schreib-/Programmieroperation, und eine Schreib-/Programmieroperation kann viel schneller sein als eine Löschoperation (z. B. Lesen der Medien kann hunderte Male schneller sein als Löschen und mehrere zehn Male schneller sein als Programmieren der Medien).
  • Die Datenspeichermedien 122 können in Datenspeicherbereiche partitioniert sein, die als eine Gruppe gelöscht werden können, (z. B. Löschblöcke), um unter anderem die asymmetrischen Eigenschaften der Medien 122 oder dergleichen zu berücksichtigen. Somit kann das Modifizieren eines einzelnen Datensegments am Ort das Löschen des gesamten Löschblocks, der die Daten enthält, und Neuschreiben der modifizierten Daten in den Löschblock zusammen mit den ursprünglichen unveränderten Daten erfordern. Das kann zu ineffizienten „Schreibfaktoren“ führen, die die Medien 122 übermäßig abnutzen können. Deshalb kann in einigen Ausführungsformen die Steuereinheit 124 des nichtflüchtigen Datenspeichers konfiguriert sein, Daten an einem anderen Ort zu schreiben. Wie hier verwendet bezieht sich das Schreiben von Daten „an einem anderen Ort“ auf das Schreiben von Daten in andere Medienspeicherort(e) anstelle Überschreiben der Daten „am Ort“ (z. B. Überschrieben des ursprünglichen physikalischen Orts der Daten). Das Modifizieren von Daten an einem anderen Ort kann den Schreibfaktor vermeiden, weil existierende valide Daten auf dem Löschblock mit den Daten, die modifiziert werden sollen, nicht gelöscht und neu kopiert werden müssen. Außerdem kann das Schreiben von Daten an einem anderen Ort das Löschen aus dem Latenzpfad vieler Speicheroperationen entfernen (z. B. ist die Löschlatenz nicht mehr Teil des kritischen Pfads einer Schreiboperation).
  • Die Steuereinheit 124 des nichtflüchtigen Datenspeichers kann einen oder mehrere Prozesse enthalten, die außerhalb des regulären Pfads zum Bedienen von Speicheroperationen (z. B. des „Pfads“ zum Ausführen einer Speicheroperation und/oder Bedienen einer Speicheranforderung) arbeiten. Wie hier verwendet bezieht sich der „Pfad zum Bedienen einer Speicheranforderung“ oder der „Pfad zum Bedienen einer Speicheroperation“ (auch als der „kritische Pfad“ bezeichnet) auf eine Reihe von Verarbeitungsoperationen, die benötigt werden, um die Speicheroperation oder -anforderung zu bedienen, wie z. B. ein Lesen, Schreiben, Modifizieren oder dergleichen. Der Pfad zum Bedienen einer Speicheranforderung kann das Empfangen der Anforderung von einem Speicher-Client 116, Identifizieren der logischen Adressen der Anforderung, Ausführen einer oder mehrerer Speicheroperationen auf nichtflüchtigen Datenspeichermedien 122 und Zurückgeben eines Ergebnisses wie z. B. einer Quittung oder Daten enthalten. Prozesse, die außerhalb des Pfads zum Bedienen von Speicheranforderungen auftreten, können, ohne darauf beschränkt zu sein, enthalten: einen „Groomer“, Deduplizierung und so weiter. Diese Prozesse können autonom und im Hintergrund implementiert sein, so dass sie die Leistung anderer Speicheroperationen und/oder -anforderungen nicht stören oder beeinflussen. Dementsprechend können diese Prozesse unabhängig von dem Bedienen von Speicheranforderungen arbeiten.
  • In einigen Ausführungsformen enthält die Steuereinheit 124 des nichtflüchtigen Datenspeichers einen Groomer, der konfiguriert ist, Datenspeicherbereiche (z. B. logische oder physikalische Löschblöcke) zur Wiederverwendung unter Verwendung eines Speicherbereinigungs- oder andere Speicherkapazitätswiederherstellungsprozesses wiederzugewinnen. Das Paradigma des Schreibens an einem anderen Ort, das durch die Steuereinheit 124 des nichtflüchtigen Datenspeichers implementiert ist, kann zu obsoleten oder invaliden Daten führen, die auf den nichtflüchtigen Datenspeichermedien 122 verbleiben. Beispielsweise kann das Überschreiben von Daten X mit Daten Y zum Speichern von Y auf einem neuen Datenspeicherbereich (z. B. anstelle des Überschreibens von X am gleichen Ort) und Aktualisieren der Any-to-any-Abbildungen der Metadaten führen, um Y als die valide, aktuelle Version der Daten zu identifizieren. Die obsolete Version der Daten X kann als invalide gekennzeichnet werden, kann jedoch nicht sofort entfernt (z. B. gelöscht) werden, da, wie vorstehend diskutiert, das Löschen von X das Löschen eines gesamten Datenspeicherbereichs betreffen kann, was eine zeitaufwändige Operation ist und zu einem Schreibfaktor führen kann. Ähnlich können Daten, die nicht mehr verwendet werden, (z. B. gelöschte oder abgeschnittene Daten) nicht sofort entfernt werden. Die nichtflüchtigen Datenspeichermedien 122 können eine signifikante Menge invalider Daten ansammeln.
  • Ein Groomer-Prozess kann außerhalb des kritischen Pfads zum Bedienen von Speicheroperationen arbeiten. Der Groomer-Prozess kann Datenspeicherbereiche wiedergewinnen, so dass sie für andere Speicheroperationen wiederverwendet werden können. Wie hier verwendet bezieht sich das Wiedergewinnen eines Datenspeicherbereichs auf das Löschen des Datenspeicherbereichs, so dass neue Daten darauf gespeichert/programmiert werden können. Das Wiedergewinnen eines Datenspeicherbereichs kann das Verlagern valider Daten auf dem Datenspeicherbereich zu einem neuen Ort enthalten. Der Groomer kann Datenspeicherbereiche zur Wiedergewinnung basierend auf einem oder mehreren Faktoren identifizieren, die, ohne darauf beschränkt zu sein, enthalten: die Menge invalider Daten in dem Datenspeicherbereich, die Menge valider Daten in dem Datenspeicherbereich, die Abnutzung des Datenspeicherbereichs (z. B. die Anzahl von Löschzyklen), die Zeit seit der Datenspeicherbereich programmiert oder aufgefrischt wurde, und so weiter.
  • Die Steuereinheit 124 des nichtflüchtigen Datenspeichers kann ferner konfiguriert sein, Daten in einem Log-Format zu speichern. Wie vorstehend beschrieben bezieht sich ein Log-Format auf ein Datenformat, das eine geordnete Sequenz von Speicheroperationen definiert, die auf einem nichtflüchtigen Datenspeichermedium 122 ausgeführt werden. In einigen Ausführungsformen enthält das Log-Format das Speichern von Daten in einer vorbestimmten Sequenz von Medienadressen der nichtflüchtigen Datenspeichermedien 122 (z. B. innerhalb fortlaufender Seiten und/oder Löschblöcken der Medien 122). Das Log-Format kann ferner Zuordnen von Daten (z. B. jedes Pakets oder Datensegments) zu entsprechenden Sequenzindikatoren enthalten. Die Sequenzindikatoren können auf Daten individuell angewandt werden (z. B. auf jedes Datenpaket angewandt werden) und/oder auf Datengruppierungen angewandt werden (z. B. Pakete, die fortlaufend auf einem Datenspeicherbereich wie z. B. einem Löschblock gespeichert sind). In einigen Ausführungsformen können Sequenzindikatoren auf Datenspeicherbereiche angewandt werden, wenn die Datenspeicherbereiche wiedergewonnen (z. B. gelöscht) werden, wie vorstehend beschrieben, oder wenn die Datenspeicherbereiche erstmalig verwendet werden, um Daten zu speichern.
  • In einigen Ausführungsformen kann das Log-Format das Speichern von Daten in einem „nur Anhängen“-Paradigma enthalten. Die Steuereinheit 124 des nichtflüchtigen Datenspeichers, die das nachstehend beschriebene Log-Speichermodul 137 oder dergleichen verwendet, kann einen aktuellen Anhängepunkt an einer Medienadresse der nichtflüchtigen Datenspeichervorrichtung 120 pflegen. Der Anhängepunkt kann ein aktueller Datenspeicherbereich und/oder Versatz innerhalb eines Datenspeicherbereichs sein. Daten können ab dem Anhängepunkt sequenziell angehängt werden. Die sequenzielle Reihenfolge der Daten kann deshalb basierend auf dem Sequenzindikator des Datenspeicherbereichs der Daten in Kombination mit der Sequenz der Daten innerhalb des Datenspeicherbereichs bestimmt werden. Beim Erreichen des Endes eines Datenspeicherbereichs kann die Steuereinheit 124 des nichtflüchtigen Datenspeichers den „nächsten“ verfügbaren Datenspeicherbereich (z. B. den nächsten Datenspeicherbereich, der initialisiert und zum Speichern von Daten bereit ist) identifizieren. Der Groomer kann Datenspeicherbereiche, die invalide, alte und/oder gelöschte Daten enthalten, wiedergewinnen, um sicherzustellen, dass Daten weiterhin an das Medien-Log angehängt werden können.
  • Das hier beschriebene Log-Format kann ermöglichen, dass valide Daten basierend auf dem Inhalt der nichtflüchtigen Datenspeichermedien 122 und unabhängig von anderen Metadaten von invaliden Daten unterschieden werden können. Wie vorstehend diskutiert können invalide Daten nicht aus den nichtflüchtigen Datenspeichermedien 122 entfernt werden, bis der Datenspeicherbereich, der die Daten enthält, wiedergewonnen wird. Deshalb können mehrere „Versionen“ von Daten, die denselben Kontext aufweisen, auf den nichtflüchtigen Datenspeichermedien 122 existieren (z. B. mehrere Versionen von Daten, die dieselben logischen Adressen aufweisen). Die Sequenzindikatoren, die den Daten zugeordnet sind, können verwendet werden, um invalide Versionen der Daten von derzeitigen, aktuellen Versionen der Daten zu unterscheiden; die Daten, die die neuesten im dem Log sind, sind die aktuelle Version, und frühere Versionen können als invalide identifiziert werden.
  • Die Speichermanagementschicht 130 kann konfiguriert sein, Speicherdienste für einen oder mehrere Speicher-Clients 116 bereitzustellen. Die Speicher-Clients 116 können lokale Speicher-Clients 116, die auf der Berechnungsvorrichtung 110 arbeiten, und/oder entfernte Speicher-Clients 116, die über das Netz 115 und/oder die Netzschnittstelle 113 zugreifbar sind, enthalten. Die Speicher-Clients 116 können, ohne darauf beschränkt zu sein, enthalten: Betriebssysteme, Dateisysteme, Datenbankanwendungen, Server-Anwendungen, Prozesse auf Kernel-Ebene, Prozesse auf Anwenderebene, Anwendungen und dergleichen.
  • Die Speichermanagementschicht 130 enthält eine oder mehrere nichtflüchtige Datenspeichervorrichtungen 120 und/oder ist kommunikativ mit ihnen gekoppelt. Die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen 120 können unterschiedliche Typen von nichtflüchtigen Datenspeichervorrichtungen enthalten, die, ohne darauf beschränkt zu sein, enthalten: Festkörper-Datenspeichervorrichtungen, Festplatten, SAN-Speicherbetriebsmittel oder dergleichen. Die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen 120 können eine oder mehrere entsprechende Steuereinheiten 126 für nichtflüchtige Datenspeichermedien und nichtflüchtige Datenspeichermedien 122 enthalten. Wie in 1 dargestellt ist, kann die SML 130 Zugriff auf die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen 120 über eine herkömmliche Block-I/O-Schnittstelle 131 bereitstellen. Zusätzlich kann die SML 130 Zugriff auf verbesserte Funktionalität (z. B. einen großen virtuellen Adressenraum 134) über die SML-Schnittstelle 132 bereitstellen. Die Metadaten 135 können verwendet werden, um Speicheroperationen, die über irgendeine aus der Block-I/O-Schnittstelle 131, der SML-Schnittstelle 132, der Cache-Schnittstelle 133 oder andere zugehörige Schnittstellen ausgeführt werden, zu managen und/oder zu verfolgen.
  • Die Cache-Schnittstelle 133 kann cache-spezifische Merkmale zeigen, die über die Speichermanagementschicht 130 zugänglich sind. Außerdem stellt in einigen Ausführungsformen die SML-Schnittstelle 132, die den Speicher-Clients 116 präsentiert wird, Zugriff auf Datentransformationen bereit, die durch die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen 120 und/oder die eine oder die mehreren Steuereinheiten 126 der nichtflüchtigen Datenspeichermedien implementiert sind.
  • Die SML 130 kann Speicherdienste über eine oder mehrere Schnittstellen bereitstellen, die, ohne darauf beschränkt zu sein, enthalten können: eine Block-I/O-Schnittstelle, eine Schnittstelle der erweiterten Speichermanagementschicht, eine Cache-Schnittstelle und dergleichen. Die SML 130 kann einen logischen Adressenraum 134 für die Speicher-Clients 116 über eine oder mehrere Schnittstellen präsentieren. Wie vorstehend diskutiert kann der logische Adressenraum 134 mehrere logische Adressen enthalten, von denen jede jeweiligen Medienorten der einen oder mehreren nichtflüchtigen Datenspeichervorrichtungen 120 entspricht. Die SML 130 kann Metadaten 135 pflegen, die Any-to-any-Abbildungen zwischen logischen Adressen und Medienorten enthalten, wie vorstehend beschrieben.
  • Die SML 130 kann ferner ein Log-Speichermodul 137 enthalten, das konfiguriert ist, Daten in einem kontextabhängigen Log-Format zu speichern. Das kontextabhängige Log-Datenformat kann das Zuordnen von Daten zu persistenten kontextabhängigen Metadaten wie z. B. der logischen Adresse der Daten und dergleichen enthalten. Das kontextabhängige Log-Format kann ferner Zuweisen der Daten zu jeweiligen Sequenzbezeichnern auf den nichtflüchtigen Datenspeichermedien 122 enthalten, die eine geordnete Sequenz von Speicheroperationen definieren, die auf der einen oder den mehreren nichtflüchtigen Datenspeichervorrichtungen 120 ausgeführt werden, sie vorstehend beschrieben.
  • Die SML 130 kann ferner eine Schnittstelle 130 der nichtflüchtigen Datenspeichervorrichtung enthalten, die konfiguriert ist, Daten, Befehle und/oder Abfragen zu der einen oder den mehreren nichtflüchtigen Datenspeichervorrichtungen 120 über einen Bus 125 zu übertragen, der, ohne darauf beschränkt zu sein, enthalten kann: einen „Peripheral Component Interconnect Express“- (PCI Express- oder PCIe-) Bus, einen seriellen „Advanced Technology Attachment“- (ATA-) Bus, einen parallelen ATA-Bus, eine „Small Computer System“-Schnittstelle (SCSI), FireWire, Fibre Channel, einen „Universal Serial Bus“ (USB), einen „PCIe Advanced Switching“- (PCIe-AS-) Bus, ein Netz 115, Infiniband, SCSI RDMA oder dergleichen. Die Schnittstelle 139 der nichtflüchtigen Datenspeichervorrichtung kann mit der einen oder den mehreren nichtflüchtigen Datenspeichervorrichtungen 120 unter Verwendung von Eingabe-Ausgabe-Steuer-Befehl(en) (IO-CTL-Befehl(en), IO-CTL-Befehlserweiterung(en), entfernten Speicherdirektzugriff oder dergleichen kommunizieren.
  • Die Kommunikationsschnittstelle 113 kann eine oder mehrere Netzschnittstellen enthalten, die konfiguriert sind, die Berechnungsvorrichtung 110 und/oder die Steuereinheit 124 des nichtflüchtigen Datenspeichers mit einem Netz 115 und/oder mit einem oder mehreren über das Netz zugänglichen Speicher-Clients 116 kommunikativ zu koppeln. Die Speicher-Clients 116 können lokale Speicher-Clients 116, die auf der Berechnungsvorrichtung 110 arbeiten, und/oder entfernte Speicher-Clients 116, die über das Netz 115 und/oder die Netzschnittstelle 113 zugänglich sind, enthalten. Die Steuereinheit 124 des nichtflüchtigen Datenspeichers enthält eine oder mehrere nichtflüchtige Datenspeichervorrichtungen 120. Obwohl 1 eine einzige nichtflüchtige Datenspeichervorrichtung 120 abbildet, ist die Offenbarung in dieser Hinsicht nicht eingeschränkt und könnten angepasst werden, um irgendeine Anzahl nichtflüchtiger Datenspeichervorrichtungen 120 zu integrieren.
  • Die nichtflüchtige Datenspeichervorrichtung 120 kann nichtflüchtige Datenspeichermedien 122 enthalten, die, ohne darauf beschränkt zu sein, enthalten können: NAND-Flash-Datenspeicher, NOR-Flash-Datenspeicher, Nano-Direktzugriffsspeicher (Nano-RAM oder NRAM), Nanokristalldrahtbasierten Datenspeicher, Siliziumoxidbasierten Sub-10-Nanometer-Prozessdatenspeicher, Graphen-Datenspeicher, Silizium-Oxid-Nitrid-Oxid-Silizium (SONOS), resistiven RAM (RRAM), programmierbare Metallisierungszelle (PMC), leitfähig-überbrückenden RAM (CBRAM), magnetoresistiven RAM (MRAM), dynamischen RAM (DRAM), Phasenwechsel-RAM (PRAM oder PCM), magnetische Speichermedien (z. B. Festplatte, Band), optische Speichermedien oder dergleichen. Obwohl die nichtflüchtigen Datenspeichermedien 122 hier als „Datenspeichermedien“ bezeichnet sind, können in verschiedenen Ausführungsformen die nichtflüchtigen Datenspeichermedien 122 allgemeiner ein nichtflüchtiges Aufzeichnungsmedium enthalten, das zum Aufzeichnen von Daten fähig ist, das als ein nichtflüchtiges Datenspeichermedium, ein nichtflüchtiges Speichermedium oder dergleichen bezeichnet sein kann. Ferner kann in verschiedenen Ausführungsformen die nichtflüchtige Datenspeichervorrichtung 120 eine nichtflüchtige Aufzeichnungsvorrichtung, eine nichtflüchtige Datenspeichervorrichtung, eine nichtflüchtige Speichervorrichtung oder dergleichen enthalten.
  • Die nichtflüchtigen Datenspeichermedien 122 können ein oder mehrere nichtflüchtige Datenspeicherelemente 123 enthalten, die, ohne darauf beschränkt zu sein, enthalten können: Chips, Gehäuse, Ebenen, Bausteine und dergleichen. Eine Steuereinheit 126 der nichtflüchtigen Datenspeichermedien kann konfiguriert sein, Speicheroperationen auf nichtflüchtigen Datenspeichermedien 122 zu managen, und kann einen oder mehrere Prozessoren, programmierbare Prozessoren (z. B. feldprogrammierbare Gatter-Arrays) oder dergleichen enthalten. In einigen Ausführungsformen ist die Steuereinheit 126 der nichtflüchtigen Datenspeichermedien konfiguriert, Daten in die/den nichtflüchtigen Datenspeichermedien 122 in dem kontextabhängigen Log-Format zu speichern und/oder zu lesen, wie vorstehend beschrieben, und Daten zu/aus der nichtflüchtigen Datenspeichervorrichtung 120 zu übertragen, und so weiter.
  • Die Steuereinheit 126 der nichtflüchtigen Datenspeichermedien kann mit den nichtflüchtigen Datenspeichermedien 122 mit Hilfe eines Busses 127 kommunikativ gekoppelt sein. Der Bus 127 kann einen I/O-Bus zum Kommunizieren von Daten zu/von den nichtflüchtigen Datenspeicherelementen 123 enthalten. Der Bus 127 kann ferner einen Steuerbus zum Kommunizieren der Adressierung und anderer Befehle und Steuerinformationen zu dem nichtflüchtige Datenspeicherelementen 123 enthalten. In einigen Ausführungsformen kann der Bus 127 die nichtflüchtigen Datenspeicherelemente 123 mit der Steuereinheit 126 der nichtflüchtigen Datenspeichermedien parallel kommunikativ koppeln. Dieser parallele Zugriff kann ermöglichen, dass die nichtflüchtigen Datenspeicherelemente 123 als eine Gruppe, die ein logisches Datenspeicherelement 129 bildet, gemanagt werden. Wie vorstehend diskutiert kann das logische Datenspeicherelement in entsprechende logische Datenspeichereinheiten (z. B. logische Seiten) und/oder logische Datenspeicherbereiche (z. B. logische Löschblöcke) partitioniert sein. Die logischen Datenspeichereinheiten können durch logisches Kombinieren physikalischer Datenspeichereinheiten jedes der nichtflüchtigen Datenspeicherelemente gebildet werden. Falls beispielsweise die nichtflüchtigen Datenspeichermedien 122 fünfundzwanzig (25) nichtflüchtige Datenspeicherelemente enthalten, kann jede logische Datenspeichereinheit fünfundzwanzig (25) Seiten enthalten (z. B. eine Seite jedes Elements der nichtflüchtigen Datenspeichermedien 122).
  • Die Steuereinheit 124 des nichtflüchtigen Datenspeichers kann eine SML 130 und die Steuereinheit 126 der nichtflüchtigen Datenspeichermedien enthalten. Die SML 130 kann Speicherdienste für die Speicher-Clients 116 über eine oder mehrere Schnittstellen 131, 132 und/oder 133 bereitstellen. In einigen Ausführungsformen stellt die SML 130 eine Blockvorrichtungs-I/O-Schnittstelle 131 bereit, über die die Speicher-Clients 116 I/O-Operationen auf Blockebene ausführen. Alternativ oder zusätzlich kann die SML 130 eine Speichermanagementschicht-Schnittstelle (SML-Schnittstelle) 132 bereitstellen, die andere Speicherdienste für die Speicher-Clients 116 bereitstellen kann. In einigen Ausführungsformen kann die SML-Schnittstelle 132 Erweiterungen für die Blockvorrichtungsschnittstelle 131 bereitstellen (z. B. können Speicher-Clients 116 auf die SML-Schnittstelle 132 über die Erweiterungen für die Blockvorrichtungsschnittstelle 131 zugreifen). Alternativ oder zusätzlich kann die SML-Schnittstelle 132 als separate/r API, Dienst und/oder Bibliothek bereitgestellt sein. Die SML 130 kann ferner konfiguriert sein, eine Cache-Schnittstelle 133 zum Zwischenspeichern von Daten unter Verwendung des nichtflüchtigen Datenspeichersystems 102 bereitzustellen.
  • Wie vorstehend beschrieben kann die SML 130 den Speicher-Clients 166 einen logischen Adressenraum 134 präsentieren (z. B. über die Schnittstellen 131, 132 und/oder 133). Die SML 130 kann Metadaten 135 pflegen, die Any-to-any-Abbildungen zwischen logischen Adressen in dem logischen Adressenraum 134 und Medienorten in der nichtflüchtigen Datenspeichervorrichtung 120 enthalten. Die Metadaten 135 können eine logisch-zu-physikalisch-Abbildungsstruktur mit Einträgen, die logische Adressen in dem logischen Adressenraum 134 und Medienorten in der nichtflüchtigen Datenspeichervorrichtung 120 abbilden, enthalten. Die logisch-zu-physikalisch-Abbildungsstruktur der Metadaten 135 ist in einer Ausführungsform dünn besetzt mit Einträgen für logische Adressen, für die die nichtflüchtige Datenspeichervorrichtung 120 Daten speichert, und mit keinen Einträgen für logische Adressen, für die die nichtflüchtige Datenspeichervorrichtung 120 derzeit keine Daten speichert. Die Metadaten 135 verfolgen in speziellen Ausführungsformen Daten auf einer Blockebene, wobei die SML 130 Daten als Blöcke managt.
  • Das nichtflüchtige Datenspeichersystem 102 kann ferner ein Log-Speichermodul 137 enthalten, das, wie vorstehend beschrieben, konfiguriert sein kann, Daten in der nichtflüchtigen Datenspeichervorrichtung 120 in einem kontextabhängigen Log-Format zu speichern. Das kontextabhängige Log-Datenformat kann Zuordnen von Daten zu einer logischen Adresse auf den nichtflüchtigen Datenspeichermedien 122 enthalten. Das kontextabhängige Log-Format kann ferner Zuweisen der Daten zu jeweiligen Sequenzbezeichnern auf den nichtflüchtigen Datenspeichermedien 122 enthalten, die eine geordnete Sequenz von Speicheroperationen definieren, die auf den nichtflüchtigen Datenspeichermedien 122 ausgeführt werden, sie vorstehend beschrieben. Die Steuereinheit 124 des nichtflüchtigen Datenspeichers kann ferner eine Schnittstelle 139 der nichtflüchtige Datenspeichervorrichtung enthalten, die konfiguriert ist, Daten, Befehle und/oder Abfragen zu der Steuereinheit 126 der nichtflüchtigen Datenspeichermedien über einen Bus 125 zu übertragen, wie vorstehend beschrieben.
  • 2 bildet eine Ausführungsform einer nichtflüchtigen Speichervorrichtung 210 ab, die einen oder mehrere Datenspeicher-Bausteine oder -Chips 212 enthalten kann. Die nichtflüchtige Speichervorrichtung 210 kann im Wesentlichen ähnlich der nichtflüchtigen Datenspeichervorrichtung 120 sein, die mit Bezug auf 1 beschrieben ist. Der Datenspeicher-Baustein 212 enthält in einigen Ausführungsformen ein Array 200 (zweidimensional oder dreidimensional) von Datenspeicherzellen, die Baustein-Steuereinheit 220 und Lese/Schreib-Schaltungen 230A/230B. In einer Ausführungsform ist der Zugriff auf das Datenspeicher-Array 200 durch die verschiedenen peripheren Schaltungen auf symmetrische Weise implementiert, auf entgegengesetzten Seiten des Arrays, so dass die Dichte der Zugriffsleitungen und Schaltungsanordnung auf jeder Seite um die Hälfte reduziert ist. Die Lese/Schreib-Schaltungen 230A/230B enthalten in einer weiteren Ausführungsform mehrere Erfassungsblöcke 250, die es ermöglichen, dass eine Seite aus Datenspeicherzellen parallel gelesen oder programmiert werden kann.
  • Das Datenspeicher-Array 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 eine Steuereinheit 244 in derselben Datenspeichervorrichtung 210 (z. B. eine herausnehmbare Speicherkarte oder Gehäuse) wie der eine oder die mehreren Datenspeicherbausteine 212 enthalten. Befehle und Daten werden zwischen dem Host und der Steuereinheit 244 über die Leitungen 232 und zwischen der Steuereinheit und dem einen oder den mehreren Datenspeicherbausteinen 212 über die Leitungen 234 übertragen. Eine Implementierung kann mehrere Chips 212 enthalten.
  • Die Baustein-Steuereinheit 220 wirkt in einer Ausführungsform mit den Lese/Schreib-Schaltungen 230A/230B zusammen, um Datenspeicher-/Speicheroperationen auf dem Datenspeicher-Array 200 auszuführen. Die Baustein-Steuereinheit 220 enthält in speziellen Ausführungsformen ein Speichermanagementmodul 150, einen Zustandsautomaten 222, einen chipinternen Adressendecodierer 224 und eine Leistungssteuerungsschaltung 226. Das Speichermanagementmodul 150 ist in einer Ausführungsform konfiguriert, eine Gesamtzahl verfügbarer Löschblöcke für die nichtflüchtige Speichervorrichtung zu bestimmen, die Anzahl verfügbarer Löschblöcke, die jedem der mehreren logischen Speicherblöcke zugewiesen werden sollen, zu bestimmen, so dass die Anzahl von Löschblöcken, die jedem der logischen Speicherblöcke zugewiesen ist, innerhalb eines Variationsschwellenwerts, prozentualen Anteils, Betrags oder dergleichen ist, und die logischen Speicherblöcke durch Zuweisen der Anzahl verfügbarer Löschblöcke zu den logischen Speicherblöcken zu erzeugen. Das Speichermanagementmodul 150 kann in speziellen Ausführungsformen Software eines Vorrichtungstreibers und/oder Hardware in einer Vorrichtungssteuereinheit 244, einer Baustein-Steuereinheit 220 und/oder einem Zustandsautomaten 222 enthalten.
  • Der Zustandsautomat 222 stellt in einer Ausführungsform die Steuerung auf Chip-Ebene der Datenspeicher- oder Speicheroperationen bereit. Der chipinterne Adressendecodierer 224 stellt eine Adressenschnittstelle bereit, um zwischen der Adresse, die durch den Host oder eine Datenspeicher-Steuereinheit verwendet wird, und der Hardware-Adresse, die durch die Decodierer 240A, 240B, 242A, 242B verwendet wird, umzusetzen. Die Leistungssteuerungsschaltung 226 steuert die Leistung und die Spannungen, die den Wortleitungen und Bitleitungen während Datenspeicheroperationen zugeführt werden. In einer Ausführungsform enthält die Leistungssteuerungsschaltung 226 eine oder mehrere Ladungspumpen, die Spannungen größer als die Versorgungsspannung erzeugen können.
  • 3 bildet eine Ausführungsform einer nichtflüchtigen Speichervorrichtung 300 ab, wie z. B. der vorstehend beschriebenen nichtflüchtigen Speichervorrichtung 210. Die nichtflüchtige Speichervorrichtung 300 ist in speziellen Ausführungsformen in Löschblöcke 302aa-302mn (gemeinsam 302) organisiert, was die kleinste löschbare Einheit ist. Die nichtflüchtige Speichervorrichtung 300 kann ferner in Seiten organisiert sein, die, wie sie hier verwendet sind, die kleinste Einheit sein können, die programmiert oder gelesen werden kann. In einigen Ausführungsformen enthält die nichtflüchtige Speichervorrichtung 300 mehrere physikalische Speichereinheiten 304a-n (gemeinsam 304) (z. B. einen oder mehrere Bausteine, Bausteinebenen, Chips, integrierte Schaltungen und/oder dergleichen), wobei jede physikalische Speichereinheit 304 mehrere Löschblöcke 302 aufweist. Datenspeicherorte (z. B. Löschblöcke 302, Seiten von Löschblöcken oder Wortleitungen von Löschblöcken) aus der entsprechenden physikalischen Speichereinheit 302 können zusammen gruppiert sein, um logische Speicherblöcke 306, virtuelle Speicherblöcke, Superblöcke und/oder dergleichen zu bilden. Jeder Datenspeicherort der nichtflüchtigen Speichervorrichtung 300 kann unter Verwendung einer physikalischen Adresse (z. B. einer Adresse einer physikalischen Seite oder einer Adresse eines physikalischen Blocks) adressiert werden.
  • Wie vorstehend beschrieben kann ein physikalischer Speicherblock in der nichtflüchtigen Speichervorrichtung 300 ein Array von Datenspeicherzellen enthalten, die in Zeilen angeordnet sind, die Wortleitungen entsprechen. Die Datenspeicherzellen eines Speicherblocks können als Einpegelzellen („SLC“) oder Mehrpegelzellen („MLC“) konfiguriert sein, und jede Wortleitung in dem Speicherblock kann zum Gebrauch zum Speichern einer Seite (in einem SLC-Fall) oder mehrerer Seiten (in einem MLC-Fall) konfiguriert sein. Somit kann die Anzahl von Seiten in einem gegebenen Speicherblock auf der Anzahl von Bits basieren, die pro Datenspeicherzelle gespeichert sind. Aufgrund der erhöhten Speicherdichte kann ein Speicherblock, der als ein 2-Bit-MLC-Speicherblock verwendet wird, die doppelte Anzahl von Seiten enthalten, als wenn der gleiche Speicherblock als ein SLC-Speicherblock verwendet wird. Beispielsweise kann für einen Speicherblock, der aus 64 Wortleitungen zusammengesetzt ist, der Speicherblock 64 Seiten, wenn er als ein SLC-Speicherblock verwendet wird, 128 Seiten, wenn er als ein 2-Bit-MLC-Speicherblock verwendet wird, 192 Seiten, wenn er als ein 3-Bit-MLC-Speicherblock verwendet wird, und so weiter enthalten. Diese Zahlen sind jedoch lediglich anschaulich, und ein Speicherblock der nichtflüchtigen Speichervorrichtung 300 kann irgendeine andere geeignete Anzahl von Seiten enthalten.
  • In einer Ausführungsform enthält die nichtflüchtige Speichervorrichtung 300 einen oder mehrere logische Speicherblöcke 306, Superblöcke, virtuelle Speicherblöcke und/oder dergleichen. Wie hier verwendet sind die logischen Speicherblöcke 306 Speichereinheiten der nichtflüchtigen Speichervorrichtung 300, die Löschblöcke 302 aus einer oder mehreren unterschiedlichen physikalischen Speichereinheiten 304 enthalten, die unterschiedliche Bausteine, Bausteinebenen, Chips, integrierte Schaltungen und/oder dergleichen enthalten. In speziellen Ausführungsformen stellen logische Speicherblöcke 306 betriebliche Parallelität bereit und ermöglichen dadurch, dass Programmier-, Lese- und Löschoperationen auf Datenspeicherorten, die sich in unterschiedlichen physikalischen Speichereinheiten 304 wie z. B. unterschiedlichen Bausteinen, Bausteinebenen, Chips und/oder dergleichen befinden, parallel ausgeführt werden. Jeder logische Speicherblock 306 kann deshalb zu einer speziellen Bank gehören oder eine gleichzeitig adressierbare Einheit („CAU“) sein. In einigen Fällen kann ein System auf einen speziellen logischen Speicherblock durch Ändern des Zustands eines Chip-Aktivierungs-Signals („CE“-Signals) zugreifen.
  • In einigen Ausführungsformen kann ein logischer Speicherblock 306 einen Löschblock 302 aus jeder physikalischen Speichereinheit 304 enthalten, der die gleiche Position in der physikalischen Speichereinheit 304 oder die gleiche Blocknummer aufweist. Beispielsweise kann, wie in 3 gezeigt ist, ein logischer Speicherblock 306a die Löschblöcke 302 an der Blockposition „a“ aus jeder der physikalischen Speichereinheiten 304a-n enthalten. Ähnlich kann ein weiterer logischer Speicherblock 306b die Löschblöcke 302 an der Blockposition „b“, „c“ und so weiter aus jeder der physikalischen Speichereinheiten 304a-n enthalten.
  • In verschiedenen Ausführungsformen kann ein logischer Speicherblock 306 aus Löschblöcken 302 an unterschiedlichen Blocknummern unterschiedlicher physikalischer Speichereinheiten 304 gebildet sein. Beispielsweise kann ein logischer Speicherblock 306b aus Löschblöcken 302 an den Orten „ca“, „cb“, „bc“ und so weiter gebildet sein. In einer solchen Ausführungsform kann ein Löschblock 302cc einer physikalischen Speichereinheit 304c aus der Blockposition „c“ ein fehlerhafter Block sein, was bedeutet, dass der Löschblock 302cc nicht zum Lesen oder Schreiben von Daten verfügbar oder verwendbar sein kann. Dementsprechend kann der logische Speicherblock 306b einen fehlerfreien Löschblock 302bc aus einem unterschiedlichen Blockort derselben physikalischen Speichereinheit 304c, auf der sich der fehlerhafte Block 302cc befindet, enthalten.
  • In speziellen Ausführungsformen kann ein logischer Speicherblock 306 durch virtuelles Verknüpfen oder „Striping“ einer Teilmenge von Datenspeicherorten der Löschblöcke 302 gebildet werden (z. B. anstelle des oder zusätzlich zum Verwenden vollständiger Löschblöcke 302, für größere Parallelität, in Reaktion auf Zurückziehen oder Markieren partieller Löschblöcke als fehlerhaft oder dergleichen). Beispielsweise kann ein logischer Speicherblock 306 durch virtuelles Verknüpfen oder „Striping“ einer Teilmenge von Datenspeicherorten eines Löschblocks 302 aus einer oder mehreren physikalischen Speichereinheiten 304 der nichtflüchtigen Speichervorrichtung 300 gebildet werden. Die Teilmenge von Datenspeicherorten kann dieselbe oder dieselben Seite/n oder Wortleitungen unterschiedlicher physikalischer Speichereinheiten 304 enthalten, die als ein logischer Speicherblock 306 virtuell verknüpft werden sollen. In anderen Ausführungsformen können, wie vorstehend beschrieben, vollständige Löschblöcke aus unterschiedlichen Bausteinen, Bausteinebenen, Chips oder anderen Orten gruppiert werden, um einen logischen Speicherblock 306 zu bilden (z. B. ohne Teilblock-Striping).
  • Das Speichermanagementmodul 150, die SML 130 und/oder dergleichen können die Datenspeicherorte der Löschblöcke 302, die jedem logischen Speicherblock 306 zugeordnet sind, verfolgen und/oder managen. Beispielsweise kann das Speichermanagementmodul 150 die Zuordnung zwischen Datenspeicherorten der Löschblöcke 302 und den entsprechenden logischen Speicherblöcken 306 als Metadaten auf einer oder mehreren Seiten der nichtflüchtigen Speichervorrichtung 300 speichern.
  • 4 bildet eine Ausführungsform eines Speichermanagementmoduls 150 ab. Das Speichermanagementmodul 150 kann im Wesentlichen ähnlich dem Speichermanagementmodul 150 sein, das vorstehend mit Bezug auf die 1 und 2 beschrieben ist. In der abgebildeten Ausführungsform enthält das Speichermanagementmodul 150 ein Blockmodul 402, ein Größenmodul 404 und ein Abbildungsmodul 406, die nachstehend genauer beschrieben sind.
  • In einer Ausführungsform identifiziert das Blockmodul 402 einen Pool von Löschblöcken 302 einer nichtflüchtigen Speichervorrichtung 300 und bestimmt eine Gesamtzahl verfügbarer Löschblöcke 302 der nichtflüchtigen Speichervorrichtung 300. Beispielsweise kann das Blockmodul 402 die Löschblöcke 302 der nichtflüchtigen Speichervorrichtung 300 durchsuchen, prüfen und/oder dergleichen, um zu bestimmen, welche Löschblöcke 302 zum Lesen und Schreiben von Daten verfügbar sind (z. B. „fehlerfreie“ Blöcke, die nicht als „fehlerhaft“ markiert, zurückgezogen oder auf andere Weise stillgelegt worden sind). In einem weiteren Beispiel kann das Blockmodul 402 eine Liste von Löschblöcken 302 für die nichtflüchtige Speichervorrichtung 300 pflegen und kann Löschblöcke 302, die „fehlerhafte“ Löschblöcke 302 sind (z. B. Löschblöcke 302, die Fehler aufweisen, die ausgefallen sind, die zurückgezogen worden sind und/oder auf andere Weise nicht zum Lesen und/oder Schreiben von Daten verwendet werden können), löschen, als invalide kennzeichnen, zurückziehen oder dergleichen. Fehlerhafte Blöcke können Löschblöcke 302, die als kaputt oder defekt bestimmt werden, wenn die Speichervorrichtung 300 erstmals verwendet, formatiert und/oder dergleichen wird (z. B. während einer Bausteinart-Testoperation oder dergleichen), aufgrund von Defekten während der Herstellung der Speichervorrichtung 300, und/oder Löschblöcke 302, die während der Lebensdauer der Speichervorrichtung 300 kaputtgehen oder defekt werden, enthalten.
  • In speziellen Ausführungsformen pflegt das Blockmodul 402 einen Pool, eine Liste oder dergleichen verfügbarer Löschblöcke 302 wie z. B. von Löschblockorten (z. B. Datenspeicheradressen für die verfügbaren Löschblöcke 302, Chip-, Baustein- und/oder Bausteinebenen-Bezeichner und/oder dergleichen) für die verfügbaren Löschblöcke 302, Löschblock-Bezeichner für die verfügbaren Löschblöcke 302 und/oder dergleichen. In verschiedenen Ausführungsformen verfolgt, zählt oder dergleichen das Blockmodul 402 die Gesamtzahl verfügbarer Löschblöcke 302, die in einem logischen Speicherblock 306, einem virtuellen Speicherblock, einem Superblock und/oder dergleichen enthalten, ihm zugewiesen oder auf andere Weise zugeordnet sein können.
  • Das Größenmodul 404 ist in einer Ausführungsform konfiguriert, die Anzahl verfügbarer Löschblöcke 302, die in jeden aus mehreren logischen Speicherblöcken 306 aufgenommen werden sollen, zu bestimmen, zu berechnen oder dergleichen. In einigen Ausführungsformen bestimmt das Größenmodul 404 die Anzahl verfügbarer Löschblöcke 302, die in jeden logischen Speicherblock 306 aufgenommen werden sollen, so dass die „Größe“ oder die Anzahl verfügbarer Löschblöcke 302, die in jeden logischen Speicherblock 306 aufgenommen werden, um einen vorbestimmten Varianzschwellenwert, eine vorbestimmte Abweichungsgrenze oder dergleichen, der/die ein prozentualer Anteil, eine Menge oder eine Anzahl von Löschblöcken 302 und/oder dergleichen sein kann, abweicht.
  • Beispielsweise kann das Größenmodul 404 die Anzahl verfügbarer Löschblöcke 302, die in jede logischen Speicherblock 306 aufgenommen werden sollen, so bestimmen, dass die Größen der logischen Speicherblöcke 306 um höchstens 50 %, 25 %, 10 %, 5 %, 2 % oder dergleichen voneinander abweichen oder variieren. In verschiedenen Ausführungsformen bestimmt das Größenmodul 404 die Anzahl verfügbarer Löschblöcke 302, die in jeden logischen Speicherblock 306 aufgenommen werden sollen, so dass die Größen der logischen Speicherblöcke 306 innerhalb der Bereiche von 0 % - 5 %, 5 % - 15 %, 15 % - 25 %, 25 % - 50 % und/oder dergleichen abweichen oder variieren. Ähnlich kann das Größenmodul 404 die Anzahl verfügbarer Löschblöcke 302, die in jeden logischen Speicherblock 306 aufgenommen werden sollen, so bestimmen, dass die Größen der logischen Speicherblöcke 306 um höchstens einen Löschblock 302, zwei Löschblöcke 302, drei Löschblöcke 302 und so weiter abweichen oder variieren.
  • In einer Ausführungsform berechnet das Größenmodul 404, um die Anzahl verfügbarer Löschblöcke 302 zu bestimmen, die in jeden logischen Speicherblock 306 aufgenommen werden sollen, so dass die Größen der logischen Speicherblöcke 306 um den Varianzschwellenwert abweichen oder variieren, die Anzahl logischer Speicherblöcke 306, die erzeugt werden können, so dass so viele verfügbare Löschblöcke 302 wie möglich in jeden logischen Speicherblock 306 aufgenommen werden können, während die Größengrenze, die durch den Varianzschwellenwert eingestellt wird, eingehalten wird. Falls beispielsweise die logischen Speicherblöcke 306 64 Löschblöcke 302 enthalten können und 192 (64 x 3) verfügbare Löschblöcke 302 vorhanden sind, dann kann das Größenmodul 404 bestimmen, dass drei logische Speicherblöcke 306 erzeugt werden können, die jeweils 64 Löschblöcke 302 enthalten, so dass keine Löschblöcke 302 übrig bleiben.
  • Falls jedoch 190 verfügbare Löschblöcke 302 vorhanden sind, dann kann das Größenmodul 404, statt zwei logische Speicherblöcke 306, die jeweils 64 Löschblöcke 302 enthalten, und einen dritten logischen Speicherblock 306, der 62 Löschblöcke 302 enthält, zu erzeugen, bestimmen, dass ein logischer Speicherblock 306 64 Löschblöcke 302 enthalten sollte und die verbleibenden zwei logischen Speicherblöcke 306 jeweils 63 Löschblöcke 302 enthalten sollten, so dass die logischen Speicherblöcke 306 im Wesentlichen gleichmäßig oder gleich groß sind, was basierend auf dem Varianzschwellenwert bestimmt werden kann.
  • In einer Ausführungsform erzeugt das Abbildungsmodul 406 mehrere logische Speicherblöcke 306 für eine nichtflüchtige Speichervorrichtung 300 durch Zuweisen der Anzahl von Löschblöcken 302, die das Größenmodul 404 bestimmt, zu jedem der logischen Speicherblöcke 306. Beispielsweise kann das Abbildungsmodul 406 eine Abbildung von Löschblöcken 302 auf die logischen Speicherblöcke 306, denen die Löschblöcke 302 zugewiesen sind, erzeugen, pflegen und/oder auf andere Weise managen.
  • In einer Ausführungsform weist das Abbildungsmodul 406 Löschblöcke 302 den logischen Speicherblöcken 306 zufällig zu. In speziellen Ausführungsformen weist das Abbildungsmodul 406 Löschblöcke 302 logischen Speicherblöcken 306 in einer sequenziellen Reihenfolge zu, wie z. B. der Reihenfolge der Bausteine, Bausteinebenen, Chips oder dergleichen, auf denen sich die Löschblöcke 302 befinden. In einer weiteren Ausführungsform weist das Abbildungsmodul 406 Löschblöcke 302 logischen Speicherblöcken 306 als eine Funktion eines Alters jedes der Löschblöcke 302 zu.
  • Wie es hier verwendet ist, kann sich das Alter eines Löschblocks 302 auf die gesamte Zeit, für die der Löschblock 302 aktiviert oder aktiv im Gebrauch war, die Zeit, seit der Löschblock 302 hergestellt wurde, die Anzahl von Programmier-/Lösch-Zyklen, die auf dem Löschblock 302 ausgeführt worden sind, und/oder dergleichen beziehen. In einer solchen Ausführungsform nimmt das Abbildungsmodul 406 Löschblöcke 302 in einen logischen Speicherblock 306 auf durch Auswählen von Löschblöcken 302, die ein geringeres Alter aufweisen als Löschblöcke 302, die ein höheres Alter aufweisen, z. B. in sequenzieller Reihenfolge des Alters.
  • In speziellen Ausführungsformen wählt das Abbildungsmodul 406 Löschblöcke 302, die einem logischen Speicherblock 306 zugewiesen werden sollen, als eine Funktion des Alters der Löschblöcke 302 aus, so dass das mittlere Alter der Löschblöcke 302 des logischen Speicherblocks 306 einen vorbestimmten Altersschwellenwert erfüllt. Auf diese Weise kann das Abbildungsmodul 406 das „Alter“ der logischen Speicherblöcke 306 managen, so dass das Alter der logischen Speicherblöcke 306 im Wesentlichen gleich ist, anstatt dass das Alter der speziellen logischen Speicherblöcke 306 wesentlich höher oder niedriger ist als das Alter anderer logischer Speicherblöcke 306. In verschiedenen Ausführungsformen weist das Abbildungsmodul 406, falls möglich, alle oder im Wesentlichen alle verfügbaren Löschblöcke 302 logischen Speicherblöcken 306 gemäß dem Varianzschwellenwert zu, so dass keine oder sehr wenige nicht zugewiesene Löschblöcke 302 der verfügbaren Löschblöcke 302 vorhanden sind, die den logischen Speicherblöcken 306 zugewiesen sein könnten.
  • 5 bildet eine Ausführungsform eines Speichermanagementmoduls 150 ab. Das Speichermanagementmodul 150 kann im Wesentlichen ähnlich dem Speichermanagementmodul 150 sein, das vorstehend mit Bezug auf die 1, 2 und 4 beschrieben ist. In der abgebildeten Ausführungsform enthält das Speichermanagementmodul 150 ein Blockmodul 402, ein Größenmodul 404 und ein Abbildungsmodul 406, die im Wesentlichen dem Blockmodul 402, dem Größenmodul 404 und dem Abbildungsmodul 406 ähnlich sind, die vorstehend mit Bezug auf 4 beschrieben sind. Darüber hinaus enthält in einer Ausführungsform das Speichermanagementmodul 150 ein Aktualisierungsmodul 502 und ein Reservemodul 504, die nachstehend genauer beschrieben sind.
  • In einer Ausführungsform ist das Aktualisierungsmodul 502 konfiguriert, eine Auffrischungsbedingung, die jedem logischen Speicherblock 306 der nichtflüchtigen Speichervorrichtung 300 zugeordnet ist, zu verfolgen, zu detektieren, zu überwachen, zu bestimmen, zu berechnen und/oder dergleichen. In einigen Ausführungsformen müssen die logischen Speicherblöcke 306 aufgrund von Änderungen in den Löschblöcken 302, die in den logischen Speicherblöcken 306 enthalten sind, periodisch aufgefrischt, angepasst, modifiziert, größenangepasst werden und/oder dergleichen. Beispielsweise können Löschblöcke 302 fehlerhaft werden, so dass sie nicht gelesen oder beschrieben werden können. Das Aktualisierungsmodul 502 überwacht in verschiedenen Ausführungsformen zur Auffrischung verschiedene Auffrischungsbedingungen, die eine dynamische, Echtzeit-Größenanpassung, Neukonfiguration, Modifikation, Regenerierung, Neuabbildung und/oder dergleichen der logischen Speicherblöcke 306 triggern können.
  • In speziellen Ausführungsformen enthält die Auffrischungsbedingung, die das Aktualisierungsmodul 502 verfolgt, einen Programmier-/Löschzyklus-Zählwert für die Löschblöcke 302 eines logischen Speicherblocks 306 (z. B. jede 32 Programmier-/Löschzyklen), ein Alter der logischen Speicherblöcke 306 (z. B. das mittlere Alter der Löschblöcke 302, die in dem logischen Speicherblock 306 enthalten sind), eine Fehlerratenmessung wie z. B. einen Zählwert für ausgefallene Bits für die Löschblöcke 302 der logischen Speicherblöcke 306 und/oder dergleichen. Das Aktualisierungsmodul 502 kann den Status der Löschblöcke 302 periodisch für jeden logischen Speicherblock 306 überprüfen, um aktiv auf Auffrischungsbedingungen in speziellen Zeitabständen zu überwachen, kann Ereignisse detektieren, die das Überwachen der logischen Speicherblöcke 306 triggern (wie z. B. ein fehlgeschlagenes Lesen oder Schreiben auf einem Löschblock 302, was angeben kann, dass der Löschblock 302 fehlerhaft ist) und/oder dergleichen.
  • In Reaktion darauf, dass eine oder mehrere der Auffrischungsbedingungen einen vorbestimmten Schwellenwert erfüllen, z. B. in Reaktion darauf, dass ein Programmier-/Löschzyklus-Zählwert für einen Löschblock 302 eines logischen Speicherblocks 306 einen Schwellenwert für den Programmier-/Löschzyklus-Zählwert erfüllt, das Alter des logischen Speicherblocks 306 einen Altersschwellenwert für die logischen Speicherblöcke 306 erfüllt, ein Zählwert für ausgefallene Bits für die Löschblöcke 302 einen Schwellenwert für den Zählwert für ausgefallene Bits erfüllt, löst das Aktualisierungsmodul 502 die logische Gruppierung von Löschblöcken 302, die in den logischen Speicherblöcken 306 enthalten sind, auf, entfernt sie, macht sie invalide, hebt sie auf oder dergleichen.
  • Das Aktualisierungsmodul 502 und/oder das Abbildungsmodul 406 können beispielsweise die Abbildung von Löschblöcken 302 auf die logischen Speicherblöcke 306, denen die Löschblöcke 302 zugewiesen wurden, in Reaktion darauf, dass das Aktualisierungsmodul 502 die Auffrischungsbedingung detektiert, löschen, entfernen, invalide machen und/oder dergleichen. Das Aktualisierungsmodul 502 kann in einem weiteren Beispiel Referenzen, Zeiger oder andere Mittel, um auf einen logischen Speicherblock 306 zuzugreifen, entfernen, invalide machen, als gelöscht kennzeichnen, löschen und/oder dergleichen, um den logischen Speicherblock 306 aufzulösen, so dass der logische Speicherblock 306 nicht zum Lesen von Daten aus der oder Schreiben von Daten in die nichtflüchtige/n Speichervorrichtung 300 verwendet werden kann.
  • In speziellen Ausführungsformen werden, nachdem das Aktualisierungsmodul 502 die logischen Speicherblöcke 306 aufgelöst hat, die Löschblöcke 302, die die logischen Speicherblöcke 306 bilden, zu dem Pool verfügbarer Löschblöcke 302 zurückgegeben. In einer Ausführungsform bestimmt das Blockmodul 402 eine neue Gesamtzahl verfügbarer Löschblöcke 302, die Kandidaten zum Aufnehmen in neue logische Speicherblöcke 306 sind. Die neue Gesamtzahl verfügbarer Löschblöcke 302 kann anders sein als die ursprüngliche Gesamtzahl verfügbarer Löschblöcke 302 aufgrund von Änderungen in den Löschblöcken, z. B. falls einige Löschblöcke 302 fehlerhaft geworden sind oder anderweitig nicht mehr verwendbar sind.
  • In speziellen Ausführungsformen bestimmt das Größenmodul 404 eine neue Anzahl von Löschblöcken 302, die logischen Speicherblöcken 306 zugewiesen werden sollen, basierend auf der Gesamtzahl von Löschblöcken 302 in dem Pool verfügbarer Löschblöcke 302. In speziellen Ausführungsformen bestimmt das Größenmodul 404 die neue Anzahl von Löschblöcken 302, die logischen Speicherblöcken 306 zugewiesen werden sollen, so dass die Anzahl von Löschblöcken 302, die jedem logischen Speicherblock 306 zugewiesen wird, im Wesentlichen gleich oder innerhalb eines Varianzschwellenwerts wie z. B. 25 % oder weniger ist. Das Abbildungsmodul 406 erzeugt in speziellen Ausführungsformen neue logische Speicherblöcke 306 durch Zuweisen der Kandidatenlöschblöcke 302 zu den logischen Speicherblöcken 306 gemäß der Anzahl von Löschblöcken 302, von der das Größenmodul 404 bestimmt hat, dass sie in jeden logischen Speicherblock 306 aufgenommen werden sollen, und Aktualisieren der Abbildung von Löschblöcken 302 auf die logischen Speicherblöcke 306, denen die Löschblöcke 302 zugewiesen sind. Auf diese Weise können die Größen der logischen Speicherblöcke 306 dynamisch angepasst werden, um sicherzustellen, dass die Anzahl von Löschblöcken 302, die jedem logischen Speicherblock 306 zugewiesen sind, innerhalb eines Varianzschwellenwerts ist, so dass die Größen der logischen Speicherblöcke 306 im Wesentlichen gleichmäßig sind und dass die meisten, wenn nicht alle, der verfügbaren Löschblöcke 302 logischen Speicherblöcken 306 zugewiesen werden können.
  • In einer weiteren Ausführungsform bestimmt das Größenmodul 404 die Anzahl fehlerfreier, verwendbarer oder dergleichen Löschblöcke 302 aus jedem der logischen Speicherblöcke 306, wenn das Aktualisierungsmodul 502 jeden der logischen Speicherblöcke 306 auflöst. Das Größenmodul 404 speichert in einer Ausführungsform die bestimmte Anzahl verwendbarer Löschblöcke 302 in einer Warteschlange, die das Abbildungsmodul 406 verwenden kann, um Löschblöcke 302 logischen Speicherblöcken 306 zuzuweisen. Falls beispielsweise fünf logische Speicherblöcke 306 vorhanden sind und die Anzahl verwendbarer Löschblöcke 302, die in jedem der logischen Speicherblöcke 306 enthalten ist, wenn das Aktualisierungsmodul 502 die logischen Speicherblöcke 306 auflöst, 64, 63, 63, 64 bzw. 63 ist, dann kann das Größenmodul 404 jede der Größen in eine Warteschlange (oder eine andere Datenstruktur, Liste, Tabelle oder dergleichen) platzieren. Das Abbildungsmodul 406 kann dann eine Anzahl aus der Warteschlange herausholen und weist die herausgeholte Anzahl von Löschblöcken 302 einem neuen logischen Speicherblock 306 zu. Das Verfolgen der Größen der logischen Speicherblöcke 306, wenn sie aufgelöst werden, kann die Verarbeitung und die Zeit reduzieren, die benötigt wird, um die Anzahl von Löschblöcken 302 zu berechnen, die den logischen Speicherblöcken 306 zugewiesen werden sollen.
  • In einer Ausführungsform ist das Reservemodul 504 konfiguriert, einen Reserve-Pool von Löschblöcken 302 zu erzeugen, der einen oder mehrere verfügbare Löschblöcke 302 enthält, die nicht logischen Speicherblöcken 306 zugewiesen sind. Falls beispielsweise ein Löschblock 302 nicht einem logischen Speicherblock 306 zugewiesen ist, weil er verursacht hätte, dass die Größen der logischen Speicherblöcke 306 den Varianzschwellenwert übersteigen, fügt das Reservemodul 504 den nicht zugewiesenen Löschblock 302 einem Pool von Reserve-Löschblöcken 302 hinzu.
  • In einigen Ausführungsformen weist das Reservemodul 504 wenigstens einen der Löschblöcke 302 aus dem Pool von Löschblöcken 302 jedem logischen Speicherblock 306 zu, wenn die logischen Speicherblöcke 306 erzeugt werden. Beispielsweise kann das Abbildungsmodul 406, wenn es Löschblöcke 302 auswählt, die den logischen Speicherblöcken 306 zugewiesen werden sollen, wenn die logischen Speicherblöcke 306 erzeugt oder neu erzeugt werden, wenigstens einen Löschblock 302 aus dem Reserve-Pool verfügbarer Löschblöcke 302 auswählen, der jedem der logischen Speicherblöcke 306 zugewiesen werden soll, bevor es den logischen Speicherblöcken 306 andere Löschblöcke 302 zuweist.
  • Die Löschblöcke 302, die in dem Reserve-Pool platziert sind, können für eine Zeitspanne nicht verwendet werden, weil sie nicht logischen Speicherblöcken 306 zugewiesen sind. Dementsprechend können die Löschblöcke 302 in dem Reserve-Pool unterschiedliche Verwendungseigenschaften aufweisen, wie z. B. ein geringeres Alter, einen geringeren P/E-Zyklus-Zählwert, einen niedrigeren Zählwert für ausgefallene Bits und/oder dergleichen. Somit kann das Zuweisen von Löschblöcken 302 aus dem Reserve-Pool zu einem oder mehreren der logischen Speicherblöcke 306 und falls möglich Zuweisen eines Löschblocks 302 zu jedem der logischen Speicherblöcke 306 eine Art und Weise sein, um Verschleißausgleich für die logischen Speicherblöcke 306 bereitzustellen.
  • Nachstehend ist ein Beispiel eines Pseudocodes für einen Algorithmus zum Zuweisen von Löschblöcken 302 zu logischen Speicherblöcken 306 zum Aufbauen gleichmäßig oder im Wesentlichen gleichmäßig großen logischen Speicherblöcken 306 in der Reihenfolge von Bausteinen, Bausteinebenen oder dergleichen mit der größten Anzahl nicht zugewiesener fehlerfreier Löschblöcke 302. In speziellen Ausführungsformen kann der nachstehende Pseudocode und das Speichermanagementmodul 150 im Allgemeinen gleichmäßig große logische Speicherblöcke 306 aufbauen, unabhängig davon, wie die fehlerhaften, z. B. nicht verwendbaren, Löschblöcke 302 über einen Baustein, eine Bausteinebene, einen Chip und/oder dergleichen verteilt sind.
     bool compare_planes (const plane *first, const plane *second) {
     return (first->num_free_blocks() > second->num_free_blocks());
     }
     void assign_blocks_to_super_block(super_block *sblock, unsigned int target_ebs) {
         std::list<plane*> ordered_planes = get_all_plane_arrays();
         ordered_planes.sort(compare_planes);
         for(std::list<plane*>::iterator it=ordered_planes.begin(); (target_ebs>0) &&
 (it!=ordered_planes.end()); ++it) {
         erase_block *eb = (*it)->use_next_free_block();
         sblock->add_erase_block(eb);
         --target_ebs;
 }}
  • Die folgenden Beispielvariablen und Berechnungen können in verschiedenen Ausführungsformen verwendet werden, um das Bilden der logischen Speicherblöcke 306 einzurichten.
  • Max_blocks_per_planeint = Bausteinebene mit der größten Anzahl fehlerfreier Löschblöcke 302.
  • Total_ebsint = Summe aller Löschblöcke 302 auf allen Bausteinen in der nichtflüchtigen Speichervorrichtung 300. Ebs_per_superblock float = ( ( float ) Total_ebs int ) / ( ( float ) Max_blocks_per_planeint )
    Figure DE102018105854A1_0001
    Small_ebs_per_superblock int = ( int ) Ebs_per_superblock float
    Figure DE102018105854A1_0002
    Remainder float = Ebs_per_superblock float ( ( float ) Small_ebs_per_superblock int )
    Figure DE102018105854A1_0003
    Numa_lager int = ( int ) ( Remainder float * ( ( float ) Max_blocks_per_plane int ) )
    Figure DE102018105854A1_0004
  • In einer Ausführungsform werden während des initialen Bildens der logischen Speicherblöcke 306 Num_largerint logische Speicherblöcke 306 mit der Zielanzahl (Small_ebs_per_superblockint + 1) von Löschblöcken 302 darin aufgebaut, dann Aufbauen der verbleibenden logischen Speicherblöcke 306 mit der Zielanzahl Small_ebs_per_superblockint von Löschblöcken 302 darin. Wenn die logischen Speicherblöcke 302 neu aufgebaut, neu konfiguriert oder neu erzeugt oder dergleichen werden, wird in einer Ausführungsform die ursprüngliche Anzahl von Löschblöcken 302, die in den aufgelösten logischen Speicherblöcken 306 waren, als die Zielanzahl von Löschblöcken 302 verwendet, um damit die logischen Speicherblöcke 306 neu zu füllen. Darüber hinaus wird in speziellen Ausführungsformen der Pool der Reserve-Löschblöcke 302 verwendet, um die logischen Speicherblöcke 306 neu aufzubauen, mit der zusätzlichen Anforderung zum Auswählen der Löschblöcke 302 mit dem geringsten Alter, die aus jeder Ebene verfügbar sind.
  • 6 bildet eine Ausführungsform eines Verfahrens 600 zur dynamischen Größenanpassung logischer Speicherblöcke ab. In einer Ausführungsform beginnt das Verfahren 600, und das Blockmodul 402 bestimmt 602 eine Gesamtzahl verfügbarer Löschblöcke 302 der nichtflüchtigen Speichervorrichtung 300. Das Größenmodul 404 bestimmt 604 in einigen Ausführungsformen die Anzahl von Löschblöcken 302 aus den verfügbaren Löschblöcken 302, die in jeden aus mehreren logischen Speicherblöcken 306 aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke 302, so dass die Anzahl von Löschblöcken 302 für jeden der logischen Speicherblöcke 306 um weniger als 25 % voneinander abweicht. Das Abbildungsmodul 406 weist 606 in weiteren Ausführungsformen die bestimmte Anzahl von Löschblöcken 302 jedem der logischen Speicherblöcke 306, die für die nichtflüchtige Speichervorrichtung 300 erzeugt werden, zu, und das Verfahren 600 endet.
  • 7 bildet eine Ausführungsform eines Verfahrens 700 zur dynamischen Größenanpassung logischer Speicherblöcke ab. In einer Ausführungsform beginnt das Verfahren 700, und das Blockmodul 402 bestimmt 702 eine Gesamtzahl verfügbarer Löschblöcke 302 der nichtflüchtigen Speichervorrichtung 300. Das Größenmodul 404 bestimmt 704 in einigen Ausführungsformen die Anzahl von Löschblöcken 302 aus den verfügbaren Löschblöcken 302, die in jeden aus mehreren logischen Speicherblöcken 306 aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke 302, so dass die Anzahl von Löschblöcken 302 für jeden der logischen Speicherblöcke 306 um weniger als 25 % voneinander abweicht. Das Abbildungsmodul 406 weist 706 in weiteren Ausführungsformen die bestimmte Anzahl von Löschblöcken 302 jedem der logischen Speicherblöcke 306, die für die nichtflüchtige Speichervorrichtung 300 erzeugt werden, zu.
  • In einer Ausführungsform bestimmt 708 das Aktualisierungsmodul 502, ob eine Auffrischungsbedingung erfüllt worden ist, wie z. B. ob ein Programmier-/Löschzyklus-Zählwert eines oder mehrerer Löschblöcke 302 oder logischen Speicherblöcke 306 einen Schwellenwert für den Programmier-/Löschzyklus-Zählwert erfüllt, ein Alter eines logischen Speicherblocks 306 einen Altersschwellenwert erfüllt, ein Zählwert für fehlerhafte Bits eines oder mehrerer Löschblöcke 302 oder logischer Speicherblöcke 306 einen Schwellenwert für einen Zählwert für fehlerhafte Bits erfüllt und/oder dergleichen. In speziellen Ausführungsformen, falls das Aktualisierungsmodul 502 bestimmt 708, dass eine Auffrischungsbedingung nicht erfüllt worden ist, fährt das Aktualisierungsmodul 502 dann fort zu bestimmen 708, ob eine Auffrischungsbedingung erfüllt worden ist. Falls das Aktualisierungsmodul 502 bestimmt 708, dass eine Auffrischungsbedingung erfüllt worden ist, dann löst 710 das Aktualisierungsmodul 502 die logischen Speicherblöcke 306 auf, und das Blockmodul 402 bestimmt 702 eine Gesamtzahl von Löschblöcken 302, die verfügbar sind, um die logischen Speicherblöcke 306 neu zu erzeugen.
  • 8A und 8B bilden eine Ausführungsform eines Verfahrens 800 zur dynamischen Größenanpassung logischer Speicherblöcke ab. In einer Ausführungsform beginnt das Verfahren 800, und das Blockmodul 402 bestimmt 802 eine Gesamtzahl verfügbarer Löschblöcke 302 der nichtflüchtigen Speichervorrichtung 300. In speziellen Ausführungsformen bestimmt das Reservemodul 504 eine Anzahl von Löschblöcken 302, die in einen Reserve-Pool aufgenommen werden sollen, aus dem während der Neuerzeugung der logischen Speicherblöcke 306 ausgewählt werden kann. Das Reservemodul 504 kann beispielsweise eine vorbestimmte Anzahl von Löschblöcken 302 in dem Reserve-Pool platzieren, um durch Verhindern, dass eine Anzahl von Löschblöcken 302 für eine Zeitspanne verwendet wird, Verschleißausgleich der nichtflüchtigen Speichervorrichtung 300 bereitzustellen.
  • Das Größenmodul 404 bestimmt 806 in einigen Ausführungsformen die Anzahl von Löschblöcken 302 aus den verfügbaren Löschblöcken 302, die in jeden aus mehreren logischen Speicherblöcken 306 aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke 302, so dass die Anzahl von Löschblöcken 302 für jeden der logischen Speicherblöcke 306 um weniger als 25 % voneinander abweicht. Das Abbildungsmodul 406 weist 808 in weiteren Ausführungsformen die bestimmte Anzahl von Löschblöcken 302 jedem der logischen Speicherblöcke 306, die für die nichtflüchtige Speichervorrichtung 300 erzeugt werden, zu.
  • In einer weiteren Ausführungsform platziert 810 das Reservemodul 504 Löschblöcke 302, die nicht logischen Speicherblöcken 306 zugewiesen sind, in dem Reserve-Pool. In einer Ausführungsform bestimmt 812 das Aktualisierungsmodul 502, ob eine Auffrischungsbedingung erfüllt worden ist, wie z. B. ob ein Programmier-/Löschzyklus-Zählwert eines oder mehrerer Löschblöcke 302 oder logischen Speicherblöcke 306 einen Schwellenwert für den Programmier-/Löschzyklus-Zählwert erfüllt, ein Alter eines logischen Speicherblocks 306 einen Altersschwellenwert erfüllt, ein Zählwert für fehlerhafte Bits eines oder mehrerer Löschblöcke 302 oder logischer Speicherblöcke 306 einen Schwellenwert für einen Zählwert für fehlerhafte Bits erfüllt und/oder dergleichen. In speziellen Ausführungsformen, falls das Aktualisierungsmodul 502 bestimmt 812, dass eine Auffrischungsbedingung nicht erfüllt worden ist, fährt das Aktualisierungsmodul 502 dann fort zu bestimmen 812, ob eine Auffrischungsbedingung erfüllt worden ist. Falls das Aktualisierungsmodul 502 bestimmt 812, dass eine Auffrischungsbedingung erfüllt worden ist, dann löst 814 das Aktualisierungsmodul 502 die logischen Speicherblöcke 306 auf.
  • In einer Ausführungsform bestimmt 816 das Blockmodul 402 (folgend „A“ zu 8B) eine Gesamtzahl verfügbarer Löschblöcke 302 der nichtflüchtigen Speichervorrichtung 300, die die Löschblöcke 302 enthält, die in dem Reserve-Pool sind. In weiteren Ausführungsformen bestimmt 818 das Größenmodul 404 die Anzahl von Löschblöcken 302 aus den verfügbaren Löschblöcken 302, die in jeden aus mehreren logischen Speicherblöcken 306 aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke 302 und der Anzahl von Löschblöcken 302, die in den Reserve-Pool aufgenommen werden sollen, so dass die Anzahl von Löschblöcken 302 für jeden der logischen Speicherblöcke 306 um weniger als 25 % voneinander abweicht.
  • In verschiedenen Ausführungsformen bestimmen 820 das Abbildungsmodul 406 und/oder das Reservemodul 504 Löschblöcke 302 aus dem Reserve-Pool, die in jeden der logischen Speicherblöcke 306 aufgenommen werden sollen, oder wählen sie aus, und das Abbildungsmodul 406 weist 822 die ausgewählten verfügbaren und Reserve-Löschblöcke 302 zu als eine Funktion der bestimmten Anzahl von Löschblöcken 302, die in jeden logischen Speicherblock 306 aufgenommen werden sollen. Falls beispielsweise die Anzahl von Löschblöcken 302, die in jeden logischen Speicherblock 306 aufgenommen werden sollen, 62 ist und genug Löschblöcke 302 in dem Reserve-Pool vorhanden sind, so dass ein Löschblock 302 aus dem Reserve-Pool in jeden logischen Speicherblock 306 aufgenommen werden kann, dann wählt das Abbildungsmodul 61 Löschblöcke 302 aus den verbleibenden verfügbaren Löschblöcken 302, die in jede logischen Speicherblock 306 aufgenommen werden sollen, und einen Löschblock 302 aus dem Reserve-Pool aus, so dass die Gesamtzahl von Löschblöcken 302 in dem logischen Speicherblock 306 62 ist. Das Reservemodul 504 legt 810 die nicht zugewiesenen Löschblöcke 302 in den Reserve-Pool (folgend „B“ zu 8A), und das Aktualisierungsmodul 502 fährt fort, auf Auffrischungsbedingungen zu überwachen.
  • Ein Mittel zum Bestimmen einer Gesamtzahl verfügbarer Löschblöcke 302 einer nichtflüchtigen Speichervorrichtung 300 kann in verschiedenen Ausführungsformen ein Blockmodul 402, ein Speichermanagementmodul 150, eine Schnittstelle 139 der nichtflüchtigen Speichervorrichtung, eine Steuereinheit 126 des nichtflüchtigen Datenspeichermediums, eine Host-Berechnungsvorrichtung 110, eine Steuereinheit (z. B. eine Baustein-Steuereinheit 220, einen Zustandsautomaten 222, eine Steuereinheit 244, einen Vorrichtungstreiber oder dergleichen), einen Prozessor 111, ein FPGA, eine ASIC, andere Logik-Hardware und/oder anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, enthalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Bestimmen einer Gesamtzahl verfügbarer Löschblöcke 302 einer nichtflüchtigen Speichervorrichtung 300 enthalten.
  • Ein Mittel zum Bestimmen der Anzahl von Löschblöcken 302 aus den verfügbaren Löschblöcken 302, die in logische Speicherblöcke 306 aufgenommen werden sollen, so dass die Anzahl von Löschblöcken 302 in jedem der logischen Speicherblöcke 306 innerhalb eines Varianzschwellenwerts, z. B. 25 %, ist, kann in verschiedenen Ausführungsformen ein Größenmodul 404, ein Speichermanagementmodul 150, eine Schnittstelle 139 der nichtflüchtigen Speichervorrichtung, eine Steuereinheit 126 des nichtflüchtigen Datenspeichermediums, eine Host-Berechnungsvorrichtung 110, eine Steuereinheit (z. B. eine Baustein-Steuereinheit 220, einen Zustandsautomaten 222, eine Steuereinheit 244, einen Vorrichtungstreiber oder dergleichen), einen Prozessor 111, ein FPGA, eine ASIC, andere Logik-Hardware und/oder anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, enthalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Bestimmen der Anzahl von Löschblöcken 302 aus den verfügbaren Löschblöcken 302, die in logische Speicherblöcke 306 aufgenommen werden sollen, so dass die Anzahl von Löschblöcken 302 in jedem der logischen Speicherblöcke 306 innerhalb eines Varianzschwellenwerts ist, enthalten.
  • Ein Mittel zum Zuweisen der bestimmten Anzahl von Löschblöcken 302 zu jedem der logischen Speicherblöcke 306 kann in verschiedenen Ausführungsformen ein Abbildungsmodul 406, ein Speichermanagementmodul 150, eine Schnittstelle 139 der nichtflüchtigen Speichervorrichtung, eine Steuereinheit 126 des nichtflüchtigen Datenspeichermediums, eine Host-Berechnungsvorrichtung 110, eine Steuereinheit (z. B. eine Baustein-Steuereinheit 220, einen Zustandsautomaten 222, eine Steuereinheit 244, einen Vorrichtungstreiber oder dergleichen), einen Prozessor 111, ein FPGA, eine ASIC, andere Logik-Hardware und/oder anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, enthalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Zuweisen der bestimmten Anzahl von Löschblöcken 302 zu jedem der logischen Speicherblöcke 306 enthalten.
  • Die vorliegende Offenbarung kann in anderen spezifischen Formen verwirklicht sein, ohne von ihrem Geist oder wesentlichen Eigenschaften abzuweichen. Die beschriebenen Ausführungsformen sollen in jeder Hinsicht nur als erläuternd und nicht als einschränkend betrachtet werden. Der Schutzbereich der Offenbarung ist deshalb durch die beigefügten Ansprüche und nicht durch die vorstehende Beschreibung angegeben. Alle Änderungen, die innerhalb der Bedeutung und des Äquivalenzbereichs der Ansprüche liegen, sollen in ihren Schutzbereich eingeschlossen sein.
  • Claims (20)

    1. Einrichtung, die enthält: eine Steuereinheit für eine nichtflüchtige Speichervorrichtung, wobei die Steuereinheit enthält: eine Blockkomponente, die konfiguriert ist, eine Gesamtzahl verfügbarer Löschblöcke der nichtflüchtigen Speichervorrichtung zu bestimmen; eine Größenkomponente, die konfiguriert ist, die Anzahl von Löschblöcken aus den verfügbaren Löschblöcken, die in jeden von mehreren logischen Blöcke aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke zu bestimmen, wobei die Anzahl von Löschblöcken für jeden der logischen Blöcke um weniger als eine vorbestimmte Abweichungsgrenze voneinander abweicht; und eine Abbildungskomponente, die konfiguriert ist, die logischen Blöcke für die nichtflüchtige Speichervorrichtung durch Zuweisen der bestimmten Anzahl von Löschblöcken zu jedem der logischen Blöcke zu erzeugen.
    2. Einrichtung nach Anspruch 1, wobei die Steuereinheit ferner eine Aktualisierungskomponente enthält, die konfiguriert ist zum: Verfolgen einer Auffrischungsbedingung, die jedem logischen Block zugeordnet ist, wobei die Auffrischungsbedingung eines oder mehrere aus einem Programmier-/Löschzyklus-Zählwert für die Löschblöcke des logischen Blocks, einem Alter des logischen Blocks und einem Zählwert für fehlerhafte Bits für die Löschblöcke des logischen Blocks enthält; und Auflösen der logischen Gruppierung von Löschblöcken, die in dem logischen Block enthalten sind, in Reaktion auf das Bestimmen von einem aus dem Folgenden: der Programmier-/Löschzyklus-Zählwert erfüllt einen vorbestimmten Schwellenwert für Programmier-/Löschzyklen; das Alter des logischen Blocks erfüllt einen Altersschwellenwert für die logischen Blöcke; und der Zählwert für fehlerhafte Bits für die Löschblöcke erfüllt einen Schwellenwert für den Zählwert für fehlerhafte Bits.
    3. Einrichtung nach Anspruch 2, wobei: die Blockkomponente ferner konfiguriert ist, eine neue Gesamtzahl verfügbarer Löschblöcke, die Kandidaten zur Aufnahme in neue logische Blöcke sind, in Reaktion darauf zu bestimmen, dass die Aktualisierungskomponente die alten logischen Blöcke auflöst; die Größenkomponente ferner konfiguriert ist, eine neue Anzahl von Löschblöcken aus den verfügbaren Löschblöcken, die in jeden der neuen logischen Blöcke aufgenommen werden sollen, als eine Funktion der Gesamtzahl verfügbarer Löschblöcke zu bestimmen, so dass die Anzahl von Löschblöcken für jeden der neuen logischen Blöcke um weniger als eine vorbestimmte Abweichungsgrenze abweicht; und die Abbildungskomponente ferner konfiguriert ist, die neuen logischen Blöcke durch Zuweisen der vorbestimmten Anzahl von Löschblöcken zu jedem der neuen logischen Blöcke zu erzeugen.
    4. Einrichtung nach Anspruch 3, wobei die Größenkomponente ferner konfiguriert ist zum: Bestimmen der Anzahl von Löschblöcken, die aus jedem der aufgelösten logischen Blöcke noch verwendbar sind; Speichern jeder Anzahl von Löschblöcken, die aus jedem der aufgelösten logischen Blöcke noch verwendbar sind, in einer Warteschlange; und Einstellen für jeden neuen logischen Block der Anzahl von Löschblöcken, die in jeden neuen logischen Block aufgenommen werden sollen, auf die nächste Anzahl von Löschblöcken, die aus der Warteschlange herausgeholt werden.
    5. Einrichtung nach Anspruch 1, wobei die Steuereinheit ferner eine Reservekomponente enthält, die konfiguriert ist, einen Reserve-Pool von Löschblöcken zu erzeugen, wobei der Reserve-Pool von Löschblöcken einen oder mehrere der verfügbaren Löschblöcke, die nicht in einem logischen Block enthalten sind, enthält.
    6. Einrichtung nach Anspruch 5, wobei die Reservekomponente ferner konfiguriert ist, wenigstens einen der Löschblöcke aus dem Pool von Löschblöcken in jedem logischen Block zuzuweisen, wenn die logischen Blöcke erzeugt werden.
    7. Einrichtung nach Anspruch 1, wobei die Abbildungskomponente ferner konfiguriert ist, jeden der verfügbaren Löschblöcke logischen Blöcken zuzuweisen, wenn die logischen Blöcke erzeugt werden, so dass keine nicht zugewiesenen Löschblöcke der verfügbaren Löschblöcke vorhanden sind, die logischen Blöcken zugewiesen werden können.
    8. Einrichtung nach Anspruch 1, wobei ein logischer Block aus einer virtuellen Gruppierung von Löschblöcken gebildet ist, wobei die Abbildungskomponente ferner konfiguriert ist, eine Abbildung von Löschblöcken auf die logischen Blöcke, denen die Löschblöcke zugewiesen sind, zu pflegen, wobei die Abbildung in Reaktion darauf, dass neue logische Blöcke erzeugt werden, aktualisiert wird.
    9. Einrichtung nach Anspruch 1, wobei die Abbildungskomponente ferner konfiguriert ist, Löschblöcke, die den logischen Blöcken zugewiesen werden sollen, als eine Funktion eines Alters jedes der Löschblöcke auszuwählen, wobei Löschblöcke mit einem geringeren Alter vor Löschblöcken mit einem höheren Alter ausgewählt werden, um logischen Blöcken zugewiesen zu werden.
    10. Einrichtung nach Anspruch 9, wobei das Alter eines Löschblocks als eines oder mehrere aus einer Gesamtzeit, für die der Löschblock aktiviert ist, einer Zeit seit der Löschblock hergestellt wurde, und einer Anzahl von Programmier-/Löschzyklen, die auf dem Löschblock ausgeführt worden sind, definiert ist.
    11. Einrichtung nach Anspruch 9, wobei die Abbildungskomponente ferner konfiguriert ist, Löschblöcke, die den logischen Blöcken zugewiesen werden sollen, als eine Funktion des Alters der Löschblöcke auszuwählen, so dass das mittlere Alter der Löschblöcke, die in den logischen Blöcken enthalten sind, einen vorbestimmten Altersschwellenwert erfüllt.
    12. Einrichtung nach Anspruch 1, wobei die vorbestimmte Abweichungsgrenze so ausgewählt ist, dass die Anzahl von Löschblöcken für jeden der logischen Blöcke um höchstens einen Löschblock abweicht.
    13. Einrichtung nach Anspruch 1, wobei die vorbestimmte Abweichungsgrenze einen prozentualen Anteil enthält, so dass die Anzahl von Löschblöcken für jeden der logischen Blöcke um weniger als fünfundzwanzig Prozent abweicht.
    14. Einrichtung nach Anspruch 1, wobei die nichtflüchtige Speichervorrichtung mehrere Bausteine enthält, jeder Baustein mehrere Ebenen enthält und jede Ebene mehrere Löschblöcke enthält, wobei jeder logische Block Löschblöcke enthält, die aus jeder Ebene des Bausteins ausgewählt sind, wobei die Löschblöcke aus jeder Ebene des Bausteins einem logischen Block in einer sequenziellen Reihenfolge der Ebenen zugewiesen ist.
    15. Einrichtung, die enthält: Mittel zum Identifizieren eines Pools von Löschblöcken eines nichtflüchtigen Aufzeichnungsmediums, die mehreren virtuellen Blöcken zugewiesen werden sollen, wobei jeder aus den mehreren virtuellen Blöcken mehrere Löschblöcke enthält, die logisch kombiniert sind, um eine einzige Speichereinheit des nichtflüchtigen Aufzeichnungsmediums zu bilden; Mittel zum Berechnen der Größen für jeden aus mehreren virtuellen Blöcken, wobei die Größen eine Anzahl von Löschblöcken definieren, die jedem der mehreren virtuellen Blöcke zugewiesen werden sollen; und Mittel zum Zuweisen von Löschblöcken aus dem Pool von Löschblöcken zu jedem der virtuellen Blöcke, so dass Variationen der Größe zwischen jedem virtuellen Block kleiner als fünfundzwanzig Prozent sind.
    16. Einrichtung nach Anspruch 15, die ferner enthält: Mittel zum Verfolgen einer Auffrischungsbedingung, die jedem virtuellen Block zugeordnet ist, wobei die Auffrischungsbedingung eines oder mehrere aus einem Programmier-/Löschzyklus-Zählwert für die Löschblöcke des virtuellen Blocks, einem Alter des virtuellen Blocks und einem Zählwert für fehlerhafte Bits für die Löschblöcke des virtuellen Blocks enthält; und Mittel zum Auflösen der logischen Gruppierung von Löschblöcken, die in dem virtuellen Block enthalten sind, in Reaktion auf das Bestimmen von einem aus dem Folgenden: der Programmier-/Löschzyklus-Zählwert erfüllt einen vorbestimmten Schwellenwert für Programmier-/Löschzyklen; das Alter des virtuellen Blocks erfüllt einen Altersschwellenwert für die virtuellen Blöcke; und der Zählwert für fehlerhafte Bits für die Löschblöcke erfüllt einen Schwellenwert für den Zählwert für fehlerhafte Bits.
    17. Einrichtung nach Anspruch 16, die ferner enthält: Mittel zum Identifizieren eines neuen Pools von Löschblöcken, die neuen virtuellen Blöcken zugewiesen werden sollen, in Reaktion darauf, dass die alten virtuellen Blöcke aufgelöst werden; Mittel zum Berechnen von Größen für jeden der neuen virtuellen Blöcke; und Mittel zum Zuweisen von Löschblöcken aus dem neuen Pool von Löschblöcken zu jedem der neuen virtuellen Blöcke, so dass Variationen der Größe zwischen jedem neuen virtuellen Block kleiner als fünfundzwanzig Prozent sind.
    18. Einrichtung nach Anspruch 15, die ferner Mittel zum Erzeugen eines Reserve-Pools von Löschblöcken enthält, wobei der Reserve-Pool von Löschblöcken einen oder mehrere der identifizierten Löschblöcke enthält, die nicht einem virtuellen Block zugewiesen sind.
    19. Einrichtung nach Anspruch 15, die ferner Mittel zum Zuweisen von Löschblöcken zu virtuellen Blöcken als eine Funktion des Alters der Löschblöcke enthält, so dass das mittlere Alter der Löschblöcke, die den virtuellen Blöcken zugeordnet sind, einen vorbestimmten Altersschwellenwert erfüllt.
    20. System, das enthält: eine nichtflüchtige Datenspeichervorrichtung, wobei die nichtflüchtige Datenspeichervorrichtung mehrere Löschblöcke enthält; und eine Steuereinheit für die nichtflüchtige Datenspeichervorrichtung, wobei die Steuereinheit Operationen ausführt zum: Bestimmen, wie viele aus den mehreren Löschblöcken zum Erzeugen von Superblöcken verfügbar sind, wobei die Superblöcke Speichereinheiten der nichtflüchtigen Datenspeichervorrichtung enthalten, die aus einer Kombination von mehreren Löschblöcken gebildet sind; Erzeugen einer Abbildung der verwendbaren Löschblöcke auf die Superblöcke, so dass die Anzahl verwendbarer Löschblöcke, die auf jeden der Superblöcke abgebildet sind, um weniger als eine Schwellenwertgröße variiert; und periodisches Modifizieren der Abbildung der verwendbaren Löschblöcke auf die Superblöcke, während sichergestellt ist, dass die Anzahl verwendbarer Löschblöcke, die auf jeden der Superblöcke abgebildet sind, um weniger als die Schwellenwertgröße variiert.
    DE102018105854.3A 2017-06-26 2018-03-14 Dynamische Größenanpassung logischer Speicherblöcke Pending DE102018105854A1 (de)

    Applications Claiming Priority (2)

    Application Number Priority Date Filing Date Title
    US15/633,608 2017-06-26
    US15/633,608 US10649661B2 (en) 2017-06-26 2017-06-26 Dynamically resizing logical storage blocks

    Publications (1)

    Publication Number Publication Date
    DE102018105854A1 true DE102018105854A1 (de) 2018-12-27

    Family

    ID=64568042

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102018105854.3A Pending DE102018105854A1 (de) 2017-06-26 2018-03-14 Dynamische Größenanpassung logischer Speicherblöcke

    Country Status (3)

    Country Link
    US (1) US10649661B2 (de)
    CN (1) CN109117084B (de)
    DE (1) DE102018105854A1 (de)

    Families Citing this family (17)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    JP7030463B2 (ja) * 2017-09-22 2022-03-07 キオクシア株式会社 メモリシステム
    US10929286B2 (en) * 2018-06-29 2021-02-23 Seagate Technology Llc Arbitrated management of a shared non-volatile memory resource
    WO2020039927A1 (ja) * 2018-08-21 2020-02-27 ソニー株式会社 不揮発性記憶装置、ホスト装置、及びデータ記憶システム
    KR20200066882A (ko) * 2018-12-03 2020-06-11 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
    KR20200085967A (ko) * 2019-01-07 2020-07-16 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
    US11416161B2 (en) 2019-06-28 2022-08-16 Western Digital Technologies, Inc. Zone formation for zoned namespaces
    US11112979B2 (en) 2019-07-26 2021-09-07 Micron Technology, Inc. Runtime memory allocation to avoid and delay defect effects in memory sub-systems
    CN112748860B (zh) * 2019-10-30 2024-04-12 伊姆西Ip控股有限责任公司 用于存储管理的方法、电子设备和计算机程序产品
    KR20210083914A (ko) * 2019-12-27 2021-07-07 에스케이하이닉스 주식회사 메모리 시스템에서의 쓰기 레이턴시 관리 방법 및 장치
    US11467980B2 (en) * 2020-01-10 2022-10-11 Micron Technology, Inc. Performing a media management operation based on a sequence identifier for a block
    US11287989B2 (en) * 2020-03-24 2022-03-29 Western Digital Technologies, Inc. Dynamic allocation of sub blocks
    US11640259B2 (en) 2020-05-21 2023-05-02 Western Digital Technologies, Inc. Use of surplus erase block pairs in super block formation
    KR20220165074A (ko) * 2021-06-07 2022-12-14 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
    US20220413761A1 (en) * 2021-06-25 2022-12-29 Western Digital Technologies, Inc. Data Retention-Specific Refresh Read
    US11989433B2 (en) 2021-09-01 2024-05-21 Micron Technology, Inc. Dynamic superblock construction
    US11687263B2 (en) * 2021-12-01 2023-06-27 Western Digital Technologies, Inc. Full die recovery in ZNS SSD
    CN116185282B (zh) * 2022-12-20 2023-10-13 珠海妙存科技有限公司 一种闪存虚拟块的分段擦除方法及系统

    Family Cites Families (26)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US20050144516A1 (en) * 2003-12-30 2005-06-30 Gonzalez Carlos J. Adaptive deterministic grouping of blocks into multi-block units
    TW200743113A (en) * 2006-05-08 2007-11-16 Apacer Technology Inc Dynamic management method of portable data storage device
    WO2008013228A1 (fr) * 2006-07-26 2008-01-31 Panasonic Corporation Contrôleur de mémoire, dispositif de stockage non-volatile, dispositif d'accès et système de stockage non-volatile
    US20080052446A1 (en) 2006-08-28 2008-02-28 Sandisk Il Ltd. Logical super block mapping for NAND flash memory
    KR100843543B1 (ko) * 2006-10-25 2008-07-04 삼성전자주식회사 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법
    US8275928B2 (en) * 2008-05-15 2012-09-25 Silicon Motion, Inc. Memory module and method for performing wear-leveling of memory module using remapping, link, and spare area tables
    US20100017556A1 (en) * 2008-07-19 2010-01-21 Nanostar Corporationm U.S.A. Non-volatile memory storage system with two-stage controller architecture
    TWI409819B (zh) * 2009-03-03 2013-09-21 Silicon Motion Inc 平均地使用一快閃記憶體的複數個區塊之方法以及相關之記憶裝置及其控制器
    JP2011070346A (ja) * 2009-09-25 2011-04-07 Toshiba Corp メモリシステム
    US8713066B1 (en) * 2010-03-29 2014-04-29 Western Digital Technologies, Inc. Managing wear leveling and garbage collection operations in a solid-state memory using linked lists
    US8832507B2 (en) 2010-08-23 2014-09-09 Apple Inc. Systems and methods for generating dynamic super blocks
    US9239781B2 (en) * 2012-02-07 2016-01-19 SMART Storage Systems, Inc. Storage control system with erase block mechanism and method of operation thereof
    US9268682B2 (en) * 2012-10-05 2016-02-23 Skyera, Llc Methods, devices and systems for physical-to-logical mapping in solid state drives
    US9195584B2 (en) * 2012-12-10 2015-11-24 Sandisk Technologies Inc. Dynamic block linking with individually configured plane parameters
    US9086820B2 (en) * 2012-12-10 2015-07-21 Infinidat Ltd. System and methods for managing storage space allocation
    KR20140142035A (ko) * 2013-06-03 2014-12-11 삼성전자주식회사 메모리 컨트롤러 및 상기 메모리 컨트롤러의 동작방법
    US9298534B2 (en) * 2013-09-05 2016-03-29 Kabushiki Kaisha Toshiba Memory system and constructing method of logical block
    US20150074333A1 (en) * 2013-09-06 2015-03-12 Kabushiki Kaisha Toshiba Memory controller and memory system
    WO2015106162A1 (en) * 2014-01-09 2015-07-16 SanDisk Technologies, Inc. Selective copyback for on die buffered non-volatile memory
    KR102291507B1 (ko) * 2014-05-20 2021-08-20 삼성전자주식회사 메모리 컨트롤러의 동작 방법
    US9632712B2 (en) * 2014-07-02 2017-04-25 Sandisk Technologies Llc System and method of updating metablocks associated with multiple memory dies
    KR102258126B1 (ko) * 2015-03-19 2021-05-28 삼성전자주식회사 메모리 컨트롤러의 작동 방법, 이를 포함하는 데이터 저장 장치, 및 이를 포함하는 데이터 처리 시스템
    CN106469019B (zh) * 2015-08-18 2020-01-07 群联电子股份有限公司 存储器管理方法、存储器控制电路单元及存储器储存装置
    CN105760113B (zh) * 2016-02-04 2019-03-22 西安科技大学 基于nand闪存的高速存储设备及文件管理方法
    KR20180026876A (ko) * 2016-09-05 2018-03-14 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
    KR102645572B1 (ko) * 2016-11-29 2024-03-11 에스케이하이닉스 주식회사 메모리 시스템 및 그의 동작 방법

    Also Published As

    Publication number Publication date
    US20180373438A1 (en) 2018-12-27
    CN109117084B (zh) 2021-07-16
    US10649661B2 (en) 2020-05-12
    CN109117084A (zh) 2019-01-01

    Similar Documents

    Publication Publication Date Title
    DE102018105854A1 (de) Dynamische Größenanpassung logischer Speicherblöcke
    DE102017104150B4 (de) Abnutzungsausgleich in Speichervorrichtungen
    DE102020106971A1 (de) Datenschreibverwaltung im nichtflüchtigen speicher
    DE102020107659A1 (de) Zonenbildung für gezonte namensräume
    DE112020000184T5 (de) In zonen unterteilte namensräume in festkörperlaufwerken
    DE102008057219B4 (de) Verfahren zum Betreiben eines Solid-State-Speichersystems, Solid-State-Speichersystem und Computersystem
    US20220244869A1 (en) File system storage allocation based on zones of a memory device
    DE102020112512A1 (de) Datenspeichergerät und Betriebsverfahren dafür
    DE112015004873T5 (de) Verarbeitung von Entabbildungsbefehlen zur Verbesserung der Leistungsfähigkeit und Standzeit einer Speicherungsvorrichtung
    DE112020002792B4 (de) Verschleissorientierte blockmodusumwandlung in nichtflüchtigen speichern
    DE112015004863T5 (de) Verfolgen der Vermischung von Schreibvorgängen und Entabbildungsbefehlen über Stromversorgungszyklen
    CN107957961A (zh) 存储设备、存储系统和计算设备
    DE112015000378T5 (de) Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher
    DE102018123805A1 (de) Vorgang für verteiltes Programmieren
    DE102018105651A1 (de) Änderung von Speicherparametern
    DE102008036822A1 (de) Verfahren zum Speichern von Daten in einem Solid-State-Speicher, Solid-State-Speichersystem und Computersystem
    DE112020005180T5 (de) Kondensieren von logischen zu physischen tabellenzeigern in ssds unter verwendung von gezonten namensräumen
    DE112020005787T5 (de) Verbesserte dateisystem-unterstützung für zonen-namespace-speicher
    DE112019005511T5 (de) Halten von schreibbefehlen in gezonten namensräumen
    DE102016009807A1 (de) Korrelieren von physikalischen seitenadressen für soft-decision-dekodierung
    DE112017005782T5 (de) Warteschlange für Speichervorgänge
    DE102020202379A1 (de) Speichersystem, speicher-controller und deren betriebsverfahren
    DE102018123670A1 (de) Speicherungssystem, Rechensystem und Verfahren dafür
    DE112020005078T5 (de) Verschieben von änderungsprotokolltabellen zum abstimmen mit zonen
    DE112022000468T5 (de) Unterschiedliche schreibpriorisierung in zns-vorrichtungen

    Legal Events

    Date Code Title Description
    R012 Request for examination validly filed
    R082 Change of representative

    Representative=s name: DEHNSGERMANY PARTNERSCHAFT VON PATENTANWAELTEN, DE

    Representative=s name: DEHNS GERMANY PARTNERSCHAFT MBB, DE

    R016 Response to examination communication