DE102018105854A1 - Dynamische Größenanpassung logischer Speicherblöcke - Google Patents
Dynamische Größenanpassung logischer Speicherblöcke Download PDFInfo
- 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
Links
- 238000003384 imaging method Methods 0.000 claims abstract description 26
- 230000006870 function Effects 0.000 claims abstract description 18
- 238000013500 data storage Methods 0.000 claims description 199
- 238000003860 storage Methods 0.000 claims description 114
- 238000013507 mapping Methods 0.000 claims description 20
- 230000004044 response Effects 0.000 claims description 8
- 238000000034 method Methods 0.000 abstract description 26
- 238000004590 computer program Methods 0.000 abstract description 7
- 238000007726 management method Methods 0.000 description 45
- 238000010586 diagram Methods 0.000 description 13
- 230000002085 persistent effect Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 238000003491 array Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 5
- 210000004027 cell Anatomy 0.000 description 5
- 238000004513 sizing Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 235000019580 granularity Nutrition 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 229910052710 silicon Inorganic materials 0.000 description 3
- 239000010703 silicon Substances 0.000 description 3
- 210000000352 storage cell Anatomy 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- VYPSYNLAJGMNEJ-UHFFFAOYSA-N Silicium dioxide Chemical compound O=[Si]=O VYPSYNLAJGMNEJ-UHFFFAOYSA-N 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000001465 metallisation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000002159 nanocrystal Substances 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 229910052814 silicon oxide Inorganic materials 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical 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 Systems100 , das ein Speichermanagementmodul150 enthält. Das Speichermanagementmodul150 kann ein Teil von und/oder in Kommunikation mit einem oder mehreren aus einer Steuereinheit124 des nichtflüchtigen Datenspeichers, einer Steuereinheit126 nichtflüchtiger Datenspeichermedien, eines Vorrichtungstreibers oder einer Speichermanagementschicht (SML)130 oder dergleichen sein. Das Speichermanagementmodul150 kann auf einem nichtflüchtigen Datenspeichersystem102 einer Berechnungsvorrichtung110 arbeiten, die einen Prozessor111 , einen flüchtigen Datenspeicher112 und eine Kommunikationsschnittstelle113 enthalten kann. Der Prozessor111 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 Berechnungsvorrichtung110 eine virtuelle Maschine sein, die innerhalb eines Hosts arbeitet), einen oder mehrere Prozessorkerne oder dergleichen enthalten. Die Kommunikationsschnittstelle113 kann eine oder mehrere Netzschnittstellen enthalten, die konfiguriert sind, die Berechnungsvorrichtung110 und/oder die Steuereinheit124 des nichtflüchtige Datenspeichers mit einem Kommunikationsnetz115 wie z. B. einem Internetprotokoll-Netz, einem Speicherbereichsnetz oder dergleichen kommunikativ zu koppeln. - Die Berechnungsvorrichtung
110 kann ferner ein nicht-transitorisches computerlesbares Speichermedium114 enthalten. Die computerlesbaren Speichermedien114 können ausführbare Anweisungen enthalten, die konfiguriert sind, die Berechnungsvorrichtung110 (z. B. den Prozessor111 ) zu veranlassen, Schritte eines oder mehrerer der hier offenbarten Verfahren auszuführen. Alternativ oder zusätzlich kann das Speichermanagementmodul150 als eine oder mehrere computerlesbare Anweisungen ausgeführt sein, die auf den nicht-transitorischen Speichermedien114 gespeichert sind. - Das nichtflüchtige Datenspeichersystem
102 enthält in der abgebildeten Ausführungsform ein Speichermanagementmodul150 . Das Speichermanagementmodul150 ist in einer Ausführungsform konfiguriert, eine Gesamtzahl verfügbarer oder verwendbarer Löschblöcke einer nichtflüchtigen Datenspeichervorrichtung120 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 Speichermanagementmodul150 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 Speichermanagementmodul150 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, SML130 oder dergleichen, der auf den computerlesbaren Speichermedien114 gespeichert ist, zur Ausführung auf dem Prozessor111 enthalten. In einer weiteren Ausführungsform kann das Speichermanagementmodul150 Logik-Hardware einer oder mehrerer nichtflüchtiger Datenspeichervorrichtungen120 enthalten, wie z. B. eine Steuereinheit126 für nichtflüchtige Datenspeichermedien, eine Steuereinheit124 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 Speichermanagementmodul150 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 SML130 über einen Baus125 oder dergleichen zu empfangen. Das Speichermanagementmodul150 kann ferner konfiguriert sein, Daten zu/von der SML130 und/oder Speicher-Clients116 über den Bus125 zu übertragen. Dementsprechend kann das Speichermanagementmodul150 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 Speichermanagementmodul150 Speicheranforderung als einen API-Aufruf von einem Speicher-Client116 , als einen IO-CTL-Befehl oder dergleichen empfangen. Das Speichermanagementmodul150 ist nachstehend mit Bezug auf die4 und5 genauer beschrieben. - Gemäß verschiedenen Ausführungsformen kann eine Steuereinheit
124 eines nichtflüchtigen Datenspeichers, die das Speichermanagementmodul150 enthält, eine oder mehrere nichtflüchtige Datenspeichervorrichtungen120 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 Datenspeichervorrichtung120 ). 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 SML130 enthalten, die einen logischen Adressenraum134 für einen oder mehrere Speicher-Clients116 präsentieren kann. Ein Beispiel einer SML ist die „Virtual Storage Layer®“ von SanDisk Corporation aus Milpitas, Kalifornien. Alternativ kann jede nichtflüchtige Datenspeichervorrichtung120 eine Steuereinheit126 für nichtflüchtige Datenspeichermedien enthalten, die einen logischen Adressenraum134 für die Speicher-Clients116 präsentieren kann. Wie hier verwendet bezieht sich ein logischer Adressenraum134 auf eine logische Repräsentation von Datenspeicherbetriebsmitteln. Der logische Adressenraum134 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 Metadaten135 pflegen, wie z. B. einen Vorwärtsindex, um logische Adressen des logischen Adressenraums134 auf Medienspeicherorte auf der/den nichtflüchtigen Datenspeichervorrichtung(en)120 abzubilden. Die SML130 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 SML130 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 Steuereinheit124 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 Steuereinheit124 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 SML130 präsentiert wird, kann eine logische Kapazität aufweisen, die der Anzahl von verfügbaren logischen Adressen in dem logischen Adressenraum134 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 Adressenraums134 , 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 Adressenraum134 dünn bereitgestellt sein. Wie hier verwendet bezieht sich ein „dünn bereitgestellter“ logischer Adressenraum134 auf einen logischen Adressenraum134 , der eine logische Kapazität aufweist, die die physikalische Kapazität des/der zugrundeliegenden nichtflüchtigen Datenspeichervorrichtung(en) übersteigt. Beispielsweise kann die SML130 den Speicher-Clients116 einen logischen 64-Bit-Adressenraum 134 (z. B. einen logischen Adressenraum134 , der durch logische 64-Bit-Adressen referenziert ist) präsentieren, was die physikalische Kapazität der zugrundeliegenden nichtflüchtigen Datenspeichervorrichtungen120 übersteigen kann. Der große logische Adressenraum134 kann es Speicher-Clients116 ermöglichen, zusammenhängende Bereich logischer Adressen zuzuweisen und/oder zu referenzieren, während er die Wahrscheinlichkeit für Benennungskonflikte reduziert. Die SML130 kann die Any-to-any-Abbildungen zwischen logischen Adressen und physikalischen Speicherbetriebsmitteln wirksam einsetzen, um den logischen Adressenraum134 unabhängig von den zugrundeliegenden physikalischen Speichervorrichtungen120 zu managen. Beispielsweise kann die SML130 physikalische Speicherbetriebsmittel nahtlos wie jeweils erforderlich hinzufügen und/oder entfernen, ohne die logischen Adressen, die durch die Speicher-Clients116 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 Speichermedien122 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-Client116 gehört, unter anderen Sektoren oder Blöcken, die dem Speicher-Client116 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 Datenspeichermedien122 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 Datenspeichermedien122 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 Medien122 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 Speichermedium122 , 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 Medien122 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 Medien122 übermäßig abnutzen können. Deshalb kann in einigen Ausführungsformen die Steuereinheit124 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-Client116 , Identifizieren der logischen Adressen der Anforderung, Ausführen einer oder mehrerer Speicheroperationen auf nichtflüchtigen Datenspeichermedien122 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 Steuereinheit124 des nichtflüchtigen Datenspeichers implementiert ist, kann zu obsoleten oder invaliden Daten führen, die auf den nichtflüchtigen Datenspeichermedien122 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 Datenspeichermedien122 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 Datenspeichermedium122 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 Datenspeichermedien122 (z. B. innerhalb fortlaufender Seiten und/oder Löschblöcken der Medien122 ). 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-Speichermodul137 oder dergleichen verwendet, kann einen aktuellen Anhängepunkt an einer Medienadresse der nichtflüchtigen Datenspeichervorrichtung120 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 Steuereinheit124 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 Datenspeichermedien122 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 Datenspeichermedien122 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-Clients116 bereitzustellen. Die Speicher-Clients116 können lokale Speicher-Clients116 , die auf der Berechnungsvorrichtung110 arbeiten, und/oder entfernte Speicher-Clients116 , die über das Netz115 und/oder die Netzschnittstelle113 zugreifbar sind, enthalten. Die Speicher-Clients116 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 Datenspeichervorrichtungen120 und/oder ist kommunikativ mit ihnen gekoppelt. Die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen120 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 Datenspeichervorrichtungen120 können eine oder mehrere entsprechende Steuereinheiten126 für nichtflüchtige Datenspeichermedien und nichtflüchtige Datenspeichermedien122 enthalten. Wie in1 dargestellt ist, kann die SML130 Zugriff auf die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen120 über eine herkömmliche Block-I/O-Schnittstelle 131 bereitstellen. Zusätzlich kann die SML130 Zugriff auf verbesserte Funktionalität (z. B. einen großen virtuellen Adressenraum134 ) über die SML-Schnittstelle132 bereitstellen. Die Metadaten135 können verwendet werden, um Speicheroperationen, die über irgendeine aus der Block-I/O-Schnittstelle 131, der SML-Schnittstelle132 , der Cache-Schnittstelle133 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 Speichermanagementschicht130 zugänglich sind. Außerdem stellt in einigen Ausführungsformen die SML-Schnittstelle132 , die den Speicher-Clients116 präsentiert wird, Zugriff auf Datentransformationen bereit, die durch die eine oder die mehreren nichtflüchtigen Datenspeichervorrichtungen120 und/oder die eine oder die mehreren Steuereinheiten126 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 SML130 kann einen logischen Adressenraum134 für die Speicher-Clients116 über eine oder mehrere Schnittstellen präsentieren. Wie vorstehend diskutiert kann der logische Adressenraum134 mehrere logische Adressen enthalten, von denen jede jeweiligen Medienorten der einen oder mehreren nichtflüchtigen Datenspeichervorrichtungen120 entspricht. Die SML130 kann Metadaten135 pflegen, die Any-to-any-Abbildungen zwischen logischen Adressen und Medienorten enthalten, wie vorstehend beschrieben. - Die SML
130 kann ferner ein Log-Speichermodul137 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 Datenspeichermedien122 enthalten, die eine geordnete Sequenz von Speicheroperationen definieren, die auf der einen oder den mehreren nichtflüchtigen Datenspeichervorrichtungen120 ausgeführt werden, sie vorstehend beschrieben. - Die SML
130 kann ferner eine Schnittstelle130 der nichtflüchtigen Datenspeichervorrichtung enthalten, die konfiguriert ist, Daten, Befehle und/oder Abfragen zu der einen oder den mehreren nichtflüchtigen Datenspeichervorrichtungen120 über einen Bus125 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 Netz115 , Infiniband, SCSI RDMA oder dergleichen. Die Schnittstelle139 der nichtflüchtigen Datenspeichervorrichtung kann mit der einen oder den mehreren nichtflüchtigen Datenspeichervorrichtungen120 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 Berechnungsvorrichtung110 und/oder die Steuereinheit124 des nichtflüchtigen Datenspeichers mit einem Netz115 und/oder mit einem oder mehreren über das Netz zugänglichen Speicher-Clients116 kommunikativ zu koppeln. Die Speicher-Clients116 können lokale Speicher-Clients116 , die auf der Berechnungsvorrichtung110 arbeiten, und/oder entfernte Speicher-Clients116 , die über das Netz115 und/oder die Netzschnittstelle113 zugänglich sind, enthalten. Die Steuereinheit124 des nichtflüchtigen Datenspeichers enthält eine oder mehrere nichtflüchtige Datenspeichervorrichtungen120 . Obwohl1 eine einzige nichtflüchtige Datenspeichervorrichtung120 abbildet, ist die Offenbarung in dieser Hinsicht nicht eingeschränkt und könnten angepasst werden, um irgendeine Anzahl nichtflüchtiger Datenspeichervorrichtungen120 zu integrieren. - Die nichtflüchtige Datenspeichervorrichtung
120 kann nichtflüchtige Datenspeichermedien122 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 Datenspeichermedien122 hier als „Datenspeichermedien“ bezeichnet sind, können in verschiedenen Ausführungsformen die nichtflüchtigen Datenspeichermedien122 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 Datenspeichervorrichtung120 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 Datenspeicherelemente123 enthalten, die, ohne darauf beschränkt zu sein, enthalten können: Chips, Gehäuse, Ebenen, Bausteine und dergleichen. Eine Steuereinheit126 der nichtflüchtigen Datenspeichermedien kann konfiguriert sein, Speicheroperationen auf nichtflüchtigen Datenspeichermedien122 zu managen, und kann einen oder mehrere Prozessoren, programmierbare Prozessoren (z. B. feldprogrammierbare Gatter-Arrays) oder dergleichen enthalten. In einigen Ausführungsformen ist die Steuereinheit126 der nichtflüchtigen Datenspeichermedien konfiguriert, Daten in die/den nichtflüchtigen Datenspeichermedien122 in dem kontextabhängigen Log-Format zu speichern und/oder zu lesen, wie vorstehend beschrieben, und Daten zu/aus der nichtflüchtigen Datenspeichervorrichtung120 zu übertragen, und so weiter. - Die Steuereinheit
126 der nichtflüchtigen Datenspeichermedien kann mit den nichtflüchtigen Datenspeichermedien122 mit Hilfe eines Busses127 kommunikativ gekoppelt sein. Der Bus127 kann einen I/O-Bus zum Kommunizieren von Daten zu/von den nichtflüchtigen Datenspeicherelementen123 enthalten. Der Bus127 kann ferner einen Steuerbus zum Kommunizieren der Adressierung und anderer Befehle und Steuerinformationen zu dem nichtflüchtige Datenspeicherelementen123 enthalten. In einigen Ausführungsformen kann der Bus127 die nichtflüchtigen Datenspeicherelemente123 mit der Steuereinheit126 der nichtflüchtigen Datenspeichermedien parallel kommunikativ koppeln. Dieser parallele Zugriff kann ermöglichen, dass die nichtflüchtigen Datenspeicherelemente123 als eine Gruppe, die ein logisches Datenspeicherelement129 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 Datenspeichermedien122 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 Datenspeichermedien122 ). - Die Steuereinheit
124 des nichtflüchtigen Datenspeichers kann eine SML130 und die Steuereinheit126 der nichtflüchtigen Datenspeichermedien enthalten. Die SML130 kann Speicherdienste für die Speicher-Clients116 über eine oder mehrere Schnittstellen131 ,132 und/oder133 bereitstellen. In einigen Ausführungsformen stellt die SML130 eine Blockvorrichtungs-I/O-Schnittstelle 131 bereit, über die die Speicher-Clients116 I/O-Operationen auf Blockebene ausführen. Alternativ oder zusätzlich kann die SML130 eine Speichermanagementschicht-Schnittstelle (SML-Schnittstelle)132 bereitstellen, die andere Speicherdienste für die Speicher-Clients116 bereitstellen kann. In einigen Ausführungsformen kann die SML-Schnittstelle132 Erweiterungen für die Blockvorrichtungsschnittstelle131 bereitstellen (z. B. können Speicher-Clients116 auf die SML-Schnittstelle132 über die Erweiterungen für die Blockvorrichtungsschnittstelle131 zugreifen). Alternativ oder zusätzlich kann die SML-Schnittstelle132 als separate/r API, Dienst und/oder Bibliothek bereitgestellt sein. Die SML130 kann ferner konfiguriert sein, eine Cache-Schnittstelle133 zum Zwischenspeichern von Daten unter Verwendung des nichtflüchtigen Datenspeichersystems102 bereitzustellen. - Wie vorstehend beschrieben kann die SML
130 den Speicher-Clients166 einen logischen Adressenraum134 präsentieren (z. B. über die Schnittstellen131 ,132 und/oder133 ). Die SML130 kann Metadaten135 pflegen, die Any-to-any-Abbildungen zwischen logischen Adressen in dem logischen Adressenraum134 und Medienorten in der nichtflüchtigen Datenspeichervorrichtung120 enthalten. Die Metadaten135 können eine logisch-zu-physikalisch-Abbildungsstruktur mit Einträgen, die logische Adressen in dem logischen Adressenraum134 und Medienorten in der nichtflüchtigen Datenspeichervorrichtung120 abbilden, enthalten. Die logisch-zu-physikalisch-Abbildungsstruktur der Metadaten135 ist in einer Ausführungsform dünn besetzt mit Einträgen für logische Adressen, für die die nichtflüchtige Datenspeichervorrichtung120 Daten speichert, und mit keinen Einträgen für logische Adressen, für die die nichtflüchtige Datenspeichervorrichtung120 derzeit keine Daten speichert. Die Metadaten135 verfolgen in speziellen Ausführungsformen Daten auf einer Blockebene, wobei die SML130 Daten als Blöcke managt. - Das nichtflüchtige Datenspeichersystem
102 kann ferner ein Log-Speichermodul137 enthalten, das, wie vorstehend beschrieben, konfiguriert sein kann, Daten in der nichtflüchtigen Datenspeichervorrichtung120 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 Datenspeichermedien122 enthalten. Das kontextabhängige Log-Format kann ferner Zuweisen der Daten zu jeweiligen Sequenzbezeichnern auf den nichtflüchtigen Datenspeichermedien122 enthalten, die eine geordnete Sequenz von Speicheroperationen definieren, die auf den nichtflüchtigen Datenspeichermedien122 ausgeführt werden, sie vorstehend beschrieben. Die Steuereinheit124 des nichtflüchtigen Datenspeichers kann ferner eine Schnittstelle139 der nichtflüchtige Datenspeichervorrichtung enthalten, die konfiguriert ist, Daten, Befehle und/oder Abfragen zu der Steuereinheit126 der nichtflüchtigen Datenspeichermedien über einen Bus125 zu übertragen, wie vorstehend beschrieben. -
2 bildet eine Ausführungsform einer nichtflüchtigen Speichervorrichtung210 ab, die einen oder mehrere Datenspeicher-Bausteine oder -Chips212 enthalten kann. Die nichtflüchtige Speichervorrichtung210 kann im Wesentlichen ähnlich der nichtflüchtigen Datenspeichervorrichtung120 sein, die mit Bezug auf1 beschrieben ist. Der Datenspeicher-Baustein212 enthält in einigen Ausführungsformen ein Array200 (zweidimensional oder dreidimensional) von Datenspeicherzellen, die Baustein-Steuereinheit220 und Lese/Schreib-Schaltungen230A /230B . In einer Ausführungsform ist der Zugriff auf das Datenspeicher-Array200 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-Schaltungen230A /230B enthalten in einer weiteren Ausführungsform mehrere Erfassungsblöcke250 , 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 Zeilendecodierer240A /240B und durch Bitleitungen über Spaltendecodierer242A /242B adressierbar. In einigen Ausführungsformen ist eine Steuereinheit244 in derselben Datenspeichervorrichtung210 (z. B. eine herausnehmbare Speicherkarte oder Gehäuse) wie der eine oder die mehreren Datenspeicherbausteine212 enthalten. Befehle und Daten werden zwischen dem Host und der Steuereinheit244 über die Leitungen232 und zwischen der Steuereinheit und dem einen oder den mehreren Datenspeicherbausteinen212 über die Leitungen234 übertragen. Eine Implementierung kann mehrere Chips212 enthalten. - Die Baustein-Steuereinheit
220 wirkt in einer Ausführungsform mit den Lese/Schreib-Schaltungen230A /230B zusammen, um Datenspeicher-/Speicheroperationen auf dem Datenspeicher-Array200 auszuführen. Die Baustein-Steuereinheit220 enthält in speziellen Ausführungsformen ein Speichermanagementmodul150 , einen Zustandsautomaten222 , einen chipinternen Adressendecodierer224 und eine Leistungssteuerungsschaltung226 . Das Speichermanagementmodul150 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 Speichermanagementmodul150 kann in speziellen Ausführungsformen Software eines Vorrichtungstreibers und/oder Hardware in einer Vorrichtungssteuereinheit244 , einer Baustein-Steuereinheit220 und/oder einem Zustandsautomaten222 enthalten. - Der Zustandsautomat
222 stellt in einer Ausführungsform die Steuerung auf Chip-Ebene der Datenspeicher- oder Speicheroperationen bereit. Der chipinterne Adressendecodierer224 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 Decodierer240A ,240B ,242A ,242B verwendet wird, umzusetzen. Die Leistungssteuerungsschaltung226 steuert die Leistung und die Spannungen, die den Wortleitungen und Bitleitungen während Datenspeicheroperationen zugeführt werden. In einer Ausführungsform enthält die Leistungssteuerungsschaltung226 eine oder mehrere Ladungspumpen, die Spannungen größer als die Versorgungsspannung erzeugen können. -
3 bildet eine Ausführungsform einer nichtflüchtigen Speichervorrichtung300 ab, wie z. B. der vorstehend beschriebenen nichtflüchtigen Speichervorrichtung210 . Die nichtflüchtige Speichervorrichtung300 ist in speziellen Ausführungsformen in Löschblöcke302aa -302mn (gemeinsam302 ) organisiert, was die kleinste löschbare Einheit ist. Die nichtflüchtige Speichervorrichtung300 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 Speichervorrichtung300 mehrere physikalische Speichereinheiten304a-n (gemeinsam304 ) (z. B. einen oder mehrere Bausteine, Bausteinebenen, Chips, integrierte Schaltungen und/oder dergleichen), wobei jede physikalische Speichereinheit304 mehrere Löschblöcke302 aufweist. Datenspeicherorte (z. B. Löschblöcke302 , Seiten von Löschblöcken oder Wortleitungen von Löschblöcken) aus der entsprechenden physikalischen Speichereinheit302 können zusammen gruppiert sein, um logische Speicherblöcke306 , virtuelle Speicherblöcke, Superblöcke und/oder dergleichen zu bilden. Jeder Datenspeicherort der nichtflüchtigen Speichervorrichtung300 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 Speicherblock64 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 Speichervorrichtung300 kann irgendeine andere geeignete Anzahl von Seiten enthalten. - In einer Ausführungsform enthält die nichtflüchtige Speichervorrichtung
300 einen oder mehrere logische Speicherblöcke306 , Superblöcke, virtuelle Speicherblöcke und/oder dergleichen. Wie hier verwendet sind die logischen Speicherblöcke306 Speichereinheiten der nichtflüchtigen Speichervorrichtung300 , die Löschblöcke302 aus einer oder mehreren unterschiedlichen physikalischen Speichereinheiten304 enthalten, die unterschiedliche Bausteine, Bausteinebenen, Chips, integrierte Schaltungen und/oder dergleichen enthalten. In speziellen Ausführungsformen stellen logische Speicherblöcke306 betriebliche Parallelität bereit und ermöglichen dadurch, dass Programmier-, Lese- und Löschoperationen auf Datenspeicherorten, die sich in unterschiedlichen physikalischen Speichereinheiten304 wie z. B. unterschiedlichen Bausteinen, Bausteinebenen, Chips und/oder dergleichen befinden, parallel ausgeführt werden. Jeder logische Speicherblock306 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öschblock302 aus jeder physikalischen Speichereinheit304 enthalten, der die gleiche Position in der physikalischen Speichereinheit304 oder die gleiche Blocknummer aufweist. Beispielsweise kann, wie in3 gezeigt ist, ein logischer Speicherblock306a die Löschblöcke302 an der Blockposition „a“ aus jeder der physikalischen Speichereinheiten304a-n enthalten. Ähnlich kann ein weiterer logischer Speicherblock306b die Löschblöcke302 an der Blockposition „b“, „c“ und so weiter aus jeder der physikalischen Speichereinheiten304a-n enthalten. - In verschiedenen Ausführungsformen kann ein logischer Speicherblock
306 aus Löschblöcken302 an unterschiedlichen Blocknummern unterschiedlicher physikalischer Speichereinheiten304 gebildet sein. Beispielsweise kann ein logischer Speicherblock306b aus Löschblöcken302 an den Orten „ca“, „cb“, „bc“ und so weiter gebildet sein. In einer solchen Ausführungsform kann ein Löschblock 302cc einer physikalischen Speichereinheit304c aus der Blockposition „c“ ein fehlerhafter Block sein, was bedeutet, dass der Löschblock302cc nicht zum Lesen oder Schreiben von Daten verfügbar oder verwendbar sein kann. Dementsprechend kann der logische Speicherblock306b einen fehlerfreien Löschblock302bc aus einem unterschiedlichen Blockort derselben physikalischen Speichereinheit304c , auf der sich der fehlerhafte Block302cc befindet, enthalten. - In speziellen Ausführungsformen kann ein logischer Speicherblock
306 durch virtuelles Verknüpfen oder „Striping“ einer Teilmenge von Datenspeicherorten der Löschblöcke302 gebildet werden (z. B. anstelle des oder zusätzlich zum Verwenden vollständiger Löschblöcke302 , 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 Speicherblock306 durch virtuelles Verknüpfen oder „Striping“ einer Teilmenge von Datenspeicherorten eines Löschblocks302 aus einer oder mehreren physikalischen Speichereinheiten304 der nichtflüchtigen Speichervorrichtung300 gebildet werden. Die Teilmenge von Datenspeicherorten kann dieselbe oder dieselben Seite/n oder Wortleitungen unterschiedlicher physikalischer Speichereinheiten304 enthalten, die als ein logischer Speicherblock306 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 Speicherblock306 zu bilden (z. B. ohne Teilblock-Striping). - Das Speichermanagementmodul
150 , die SML130 und/oder dergleichen können die Datenspeicherorte der Löschblöcke302 , die jedem logischen Speicherblock306 zugeordnet sind, verfolgen und/oder managen. Beispielsweise kann das Speichermanagementmodul150 die Zuordnung zwischen Datenspeicherorten der Löschblöcke302 und den entsprechenden logischen Speicherblöcken306 als Metadaten auf einer oder mehreren Seiten der nichtflüchtigen Speichervorrichtung300 speichern. -
4 bildet eine Ausführungsform eines Speichermanagementmoduls150 ab. Das Speichermanagementmodul150 kann im Wesentlichen ähnlich dem Speichermanagementmodul150 sein, das vorstehend mit Bezug auf die1 und2 beschrieben ist. In der abgebildeten Ausführungsform enthält das Speichermanagementmodul150 ein Blockmodul402 , ein Größenmodul404 und ein Abbildungsmodul406 , die nachstehend genauer beschrieben sind. - In einer Ausführungsform identifiziert das Blockmodul
402 einen Pool von Löschblöcken302 einer nichtflüchtigen Speichervorrichtung300 und bestimmt eine Gesamtzahl verfügbarer Löschblöcke302 der nichtflüchtigen Speichervorrichtung300 . Beispielsweise kann das Blockmodul402 die Löschblöcke302 der nichtflüchtigen Speichervorrichtung300 durchsuchen, prüfen und/oder dergleichen, um zu bestimmen, welche Löschblöcke302 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 Blockmodul402 eine Liste von Löschblöcken302 für die nichtflüchtige Speichervorrichtung300 pflegen und kann Löschblöcke302 , die „fehlerhafte“ Löschblöcke302 sind (z. B. Löschblöcke302 , 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öcke302 , die als kaputt oder defekt bestimmt werden, wenn die Speichervorrichtung300 erstmals verwendet, formatiert und/oder dergleichen wird (z. B. während einer Bausteinart-Testoperation oder dergleichen), aufgrund von Defekten während der Herstellung der Speichervorrichtung300 , und/oder Löschblöcke302 , die während der Lebensdauer der Speichervorrichtung300 kaputtgehen oder defekt werden, enthalten. - In speziellen Ausführungsformen pflegt das Blockmodul
402 einen Pool, eine Liste oder dergleichen verfügbarer Löschblöcke302 wie z. B. von Löschblockorten (z. B. Datenspeicheradressen für die verfügbaren Löschblöcke302 , Chip-, Baustein- und/oder Bausteinebenen-Bezeichner und/oder dergleichen) für die verfügbaren Löschblöcke302 , Löschblock-Bezeichner für die verfügbaren Löschblöcke302 und/oder dergleichen. In verschiedenen Ausführungsformen verfolgt, zählt oder dergleichen das Blockmodul402 die Gesamtzahl verfügbarer Löschblöcke302 , die in einem logischen Speicherblock306 , 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öcke302 , die in jeden aus mehreren logischen Speicherblöcken306 aufgenommen werden sollen, zu bestimmen, zu berechnen oder dergleichen. In einigen Ausführungsformen bestimmt das Größenmodul404 die Anzahl verfügbarer Löschblöcke302 , die in jeden logischen Speicherblock306 aufgenommen werden sollen, so dass die „Größe“ oder die Anzahl verfügbarer Löschblöcke302 , die in jeden logischen Speicherblock306 aufgenommen werden, um einen vorbestimmten Varianzschwellenwert, eine vorbestimmte Abweichungsgrenze oder dergleichen, der/die ein prozentualer Anteil, eine Menge oder eine Anzahl von Löschblöcken302 und/oder dergleichen sein kann, abweicht. - Beispielsweise kann das Größenmodul
404 die Anzahl verfügbarer Löschblöcke302 , die in jede logischen Speicherblock306 aufgenommen werden sollen, so bestimmen, dass die Größen der logischen Speicherblöcke306 um höchstens 50 %, 25 %, 10 %, 5 %, 2 % oder dergleichen voneinander abweichen oder variieren. In verschiedenen Ausführungsformen bestimmt das Größenmodul404 die Anzahl verfügbarer Löschblöcke302 , die in jeden logischen Speicherblock306 aufgenommen werden sollen, so dass die Größen der logischen Speicherblöcke306 innerhalb der Bereiche von 0 % - 5 %, 5 % - 15 %, 15 % - 25 %, 25 % - 50 % und/oder dergleichen abweichen oder variieren. Ähnlich kann das Größenmodul404 die Anzahl verfügbarer Löschblöcke302 , die in jeden logischen Speicherblock306 aufgenommen werden sollen, so bestimmen, dass die Größen der logischen Speicherblöcke306 um höchstens einen Löschblock302 , zwei Löschblöcke302 , drei Löschblöcke302 und so weiter abweichen oder variieren. - In einer Ausführungsform berechnet das Größenmodul
404 , um die Anzahl verfügbarer Löschblöcke302 zu bestimmen, die in jeden logischen Speicherblock306 aufgenommen werden sollen, so dass die Größen der logischen Speicherblöcke306 um den Varianzschwellenwert abweichen oder variieren, die Anzahl logischer Speicherblöcke306 , die erzeugt werden können, so dass so viele verfügbare Löschblöcke302 wie möglich in jeden logischen Speicherblock306 aufgenommen werden können, während die Größengrenze, die durch den Varianzschwellenwert eingestellt wird, eingehalten wird. Falls beispielsweise die logischen Speicherblöcke306 64 Löschblöcke302 enthalten können und 192 (64 x 3) verfügbare Löschblöcke302 vorhanden sind, dann kann das Größenmodul404 bestimmen, dass drei logische Speicherblöcke306 erzeugt werden können, die jeweils 64 Löschblöcke302 enthalten, so dass keine Löschblöcke302 übrig bleiben. - Falls jedoch 190 verfügbare Löschblöcke
302 vorhanden sind, dann kann das Größenmodul404 , statt zwei logische Speicherblöcke306 , die jeweils 64 Löschblöcke302 enthalten, und einen dritten logischen Speicherblock306 , der 62 Löschblöcke302 enthält, zu erzeugen, bestimmen, dass ein logischer Speicherblock306 64 Löschblöcke302 enthalten sollte und die verbleibenden zwei logischen Speicherblöcke306 jeweils 63 Löschblöcke302 enthalten sollten, so dass die logischen Speicherblöcke306 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öcke306 für eine nichtflüchtige Speichervorrichtung300 durch Zuweisen der Anzahl von Löschblöcken302 , die das Größenmodul404 bestimmt, zu jedem der logischen Speicherblöcke306 . Beispielsweise kann das Abbildungsmodul406 eine Abbildung von Löschblöcken302 auf die logischen Speicherblöcke306 , denen die Löschblöcke302 zugewiesen sind, erzeugen, pflegen und/oder auf andere Weise managen. - In einer Ausführungsform weist das Abbildungsmodul
406 Löschblöcke302 den logischen Speicherblöcken306 zufällig zu. In speziellen Ausführungsformen weist das Abbildungsmodul406 Löschblöcke302 logischen Speicherblöcken306 in einer sequenziellen Reihenfolge zu, wie z. B. der Reihenfolge der Bausteine, Bausteinebenen, Chips oder dergleichen, auf denen sich die Löschblöcke302 befinden. In einer weiteren Ausführungsform weist das Abbildungsmodul406 Löschblöcke302 logischen Speicherblöcken306 als eine Funktion eines Alters jedes der Löschblöcke302 zu. - Wie es hier verwendet ist, kann sich das Alter eines Löschblocks
302 auf die gesamte Zeit, für die der Löschblock302 aktiviert oder aktiv im Gebrauch war, die Zeit, seit der Löschblock302 hergestellt wurde, die Anzahl von Programmier-/Lösch-Zyklen, die auf dem Löschblock302 ausgeführt worden sind, und/oder dergleichen beziehen. In einer solchen Ausführungsform nimmt das Abbildungsmodul406 Löschblöcke302 in einen logischen Speicherblock306 auf durch Auswählen von Löschblöcken302 , die ein geringeres Alter aufweisen als Löschblöcke302 , die ein höheres Alter aufweisen, z. B. in sequenzieller Reihenfolge des Alters. - In speziellen Ausführungsformen wählt das Abbildungsmodul
406 Löschblöcke302 , die einem logischen Speicherblock306 zugewiesen werden sollen, als eine Funktion des Alters der Löschblöcke302 aus, so dass das mittlere Alter der Löschblöcke302 des logischen Speicherblocks306 einen vorbestimmten Altersschwellenwert erfüllt. Auf diese Weise kann das Abbildungsmodul406 das „Alter“ der logischen Speicherblöcke306 managen, so dass das Alter der logischen Speicherblöcke306 im Wesentlichen gleich ist, anstatt dass das Alter der speziellen logischen Speicherblöcke306 wesentlich höher oder niedriger ist als das Alter anderer logischer Speicherblöcke306 . In verschiedenen Ausführungsformen weist das Abbildungsmodul406 , falls möglich, alle oder im Wesentlichen alle verfügbaren Löschblöcke302 logischen Speicherblöcken306 gemäß dem Varianzschwellenwert zu, so dass keine oder sehr wenige nicht zugewiesene Löschblöcke302 der verfügbaren Löschblöcke302 vorhanden sind, die den logischen Speicherblöcken306 zugewiesen sein könnten. -
5 bildet eine Ausführungsform eines Speichermanagementmoduls150 ab. Das Speichermanagementmodul150 kann im Wesentlichen ähnlich dem Speichermanagementmodul150 sein, das vorstehend mit Bezug auf die1 ,2 und4 beschrieben ist. In der abgebildeten Ausführungsform enthält das Speichermanagementmodul150 ein Blockmodul402 , ein Größenmodul404 und ein Abbildungsmodul406 , die im Wesentlichen dem Blockmodul402 , dem Größenmodul404 und dem Abbildungsmodul406 ähnlich sind, die vorstehend mit Bezug auf4 beschrieben sind. Darüber hinaus enthält in einer Ausführungsform das Speichermanagementmodul150 ein Aktualisierungsmodul502 und ein Reservemodul504 , die nachstehend genauer beschrieben sind. - In einer Ausführungsform ist das Aktualisierungsmodul
502 konfiguriert, eine Auffrischungsbedingung, die jedem logischen Speicherblock306 der nichtflüchtigen Speichervorrichtung300 zugeordnet ist, zu verfolgen, zu detektieren, zu überwachen, zu bestimmen, zu berechnen und/oder dergleichen. In einigen Ausführungsformen müssen die logischen Speicherblöcke306 aufgrund von Änderungen in den Löschblöcken302 , die in den logischen Speicherblöcken306 enthalten sind, periodisch aufgefrischt, angepasst, modifiziert, größenangepasst werden und/oder dergleichen. Beispielsweise können Löschblöcke302 fehlerhaft werden, so dass sie nicht gelesen oder beschrieben werden können. Das Aktualisierungsmodul502 ü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öcke306 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öcke302 eines logischen Speicherblocks306 (z. B. jede 32 Programmier-/Löschzyklen), ein Alter der logischen Speicherblöcke306 (z. B. das mittlere Alter der Löschblöcke302 , die in dem logischen Speicherblock306 enthalten sind), eine Fehlerratenmessung wie z. B. einen Zählwert für ausgefallene Bits für die Löschblöcke302 der logischen Speicherblöcke306 und/oder dergleichen. Das Aktualisierungsmodul502 kann den Status der Löschblöcke302 periodisch für jeden logischen Speicherblock306 überprüfen, um aktiv auf Auffrischungsbedingungen in speziellen Zeitabständen zu überwachen, kann Ereignisse detektieren, die das Überwachen der logischen Speicherblöcke306 triggern (wie z. B. ein fehlgeschlagenes Lesen oder Schreiben auf einem Löschblock302 , was angeben kann, dass der Löschblock302 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 Speicherblocks306 einen Schwellenwert für den Programmier-/Löschzyklus-Zählwert erfüllt, das Alter des logischen Speicherblocks306 einen Altersschwellenwert für die logischen Speicherblöcke306 erfüllt, ein Zählwert für ausgefallene Bits für die Löschblöcke302 einen Schwellenwert für den Zählwert für ausgefallene Bits erfüllt, löst das Aktualisierungsmodul502 die logische Gruppierung von Löschblöcken302 , die in den logischen Speicherblöcken306 enthalten sind, auf, entfernt sie, macht sie invalide, hebt sie auf oder dergleichen. - Das Aktualisierungsmodul
502 und/oder das Abbildungsmodul406 können beispielsweise die Abbildung von Löschblöcken302 auf die logischen Speicherblöcke306 , denen die Löschblöcke302 zugewiesen wurden, in Reaktion darauf, dass das Aktualisierungsmodul502 die Auffrischungsbedingung detektiert, löschen, entfernen, invalide machen und/oder dergleichen. Das Aktualisierungsmodul502 kann in einem weiteren Beispiel Referenzen, Zeiger oder andere Mittel, um auf einen logischen Speicherblock306 zuzugreifen, entfernen, invalide machen, als gelöscht kennzeichnen, löschen und/oder dergleichen, um den logischen Speicherblock306 aufzulösen, so dass der logische Speicherblock306 nicht zum Lesen von Daten aus der oder Schreiben von Daten in die nichtflüchtige/n Speichervorrichtung300 verwendet werden kann. - In speziellen Ausführungsformen werden, nachdem das Aktualisierungsmodul
502 die logischen Speicherblöcke306 aufgelöst hat, die Löschblöcke302 , die die logischen Speicherblöcke306 bilden, zu dem Pool verfügbarer Löschblöcke302 zurückgegeben. In einer Ausführungsform bestimmt das Blockmodul402 eine neue Gesamtzahl verfügbarer Löschblöcke302 , die Kandidaten zum Aufnehmen in neue logische Speicherblöcke306 sind. Die neue Gesamtzahl verfügbarer Löschblöcke302 kann anders sein als die ursprüngliche Gesamtzahl verfügbarer Löschblöcke302 aufgrund von Änderungen in den Löschblöcken, z. B. falls einige Löschblöcke302 fehlerhaft geworden sind oder anderweitig nicht mehr verwendbar sind. - In speziellen Ausführungsformen bestimmt das Größenmodul
404 eine neue Anzahl von Löschblöcken302 , die logischen Speicherblöcken306 zugewiesen werden sollen, basierend auf der Gesamtzahl von Löschblöcken302 in dem Pool verfügbarer Löschblöcke302 . In speziellen Ausführungsformen bestimmt das Größenmodul404 die neue Anzahl von Löschblöcken302 , die logischen Speicherblöcken306 zugewiesen werden sollen, so dass die Anzahl von Löschblöcken302 , die jedem logischen Speicherblock306 zugewiesen wird, im Wesentlichen gleich oder innerhalb eines Varianzschwellenwerts wie z. B. 25 % oder weniger ist. Das Abbildungsmodul406 erzeugt in speziellen Ausführungsformen neue logische Speicherblöcke306 durch Zuweisen der Kandidatenlöschblöcke302 zu den logischen Speicherblöcken306 gemäß der Anzahl von Löschblöcken302 , von der das Größenmodul404 bestimmt hat, dass sie in jeden logischen Speicherblock306 aufgenommen werden sollen, und Aktualisieren der Abbildung von Löschblöcken302 auf die logischen Speicherblöcke306 , denen die Löschblöcke302 zugewiesen sind. Auf diese Weise können die Größen der logischen Speicherblöcke306 dynamisch angepasst werden, um sicherzustellen, dass die Anzahl von Löschblöcken302 , die jedem logischen Speicherblock306 zugewiesen sind, innerhalb eines Varianzschwellenwerts ist, so dass die Größen der logischen Speicherblöcke306 im Wesentlichen gleichmäßig sind und dass die meisten, wenn nicht alle, der verfügbaren Löschblöcke302 logischen Speicherblöcken306 zugewiesen werden können. - In einer weiteren Ausführungsform bestimmt das Größenmodul
404 die Anzahl fehlerfreier, verwendbarer oder dergleichen Löschblöcke302 aus jedem der logischen Speicherblöcke306 , wenn das Aktualisierungsmodul502 jeden der logischen Speicherblöcke306 auflöst. Das Größenmodul404 speichert in einer Ausführungsform die bestimmte Anzahl verwendbarer Löschblöcke302 in einer Warteschlange, die das Abbildungsmodul406 verwenden kann, um Löschblöcke302 logischen Speicherblöcken306 zuzuweisen. Falls beispielsweise fünf logische Speicherblöcke306 vorhanden sind und die Anzahl verwendbarer Löschblöcke302 , die in jedem der logischen Speicherblöcke306 enthalten ist, wenn das Aktualisierungsmodul502 die logischen Speicherblöcke306 auflöst, 64, 63, 63, 64 bzw. 63 ist, dann kann das Größenmodul404 jede der Größen in eine Warteschlange (oder eine andere Datenstruktur, Liste, Tabelle oder dergleichen) platzieren. Das Abbildungsmodul406 kann dann eine Anzahl aus der Warteschlange herausholen und weist die herausgeholte Anzahl von Löschblöcken302 einem neuen logischen Speicherblock306 zu. Das Verfolgen der Größen der logischen Speicherblöcke306 , wenn sie aufgelöst werden, kann die Verarbeitung und die Zeit reduzieren, die benötigt wird, um die Anzahl von Löschblöcken302 zu berechnen, die den logischen Speicherblöcken306 zugewiesen werden sollen. - In einer Ausführungsform ist das Reservemodul
504 konfiguriert, einen Reserve-Pool von Löschblöcken302 zu erzeugen, der einen oder mehrere verfügbare Löschblöcke302 enthält, die nicht logischen Speicherblöcken306 zugewiesen sind. Falls beispielsweise ein Löschblock302 nicht einem logischen Speicherblock306 zugewiesen ist, weil er verursacht hätte, dass die Größen der logischen Speicherblöcke306 den Varianzschwellenwert übersteigen, fügt das Reservemodul504 den nicht zugewiesenen Löschblock302 einem Pool von Reserve-Löschblöcken302 hinzu. - In einigen Ausführungsformen weist das Reservemodul
504 wenigstens einen der Löschblöcke302 aus dem Pool von Löschblöcken302 jedem logischen Speicherblock306 zu, wenn die logischen Speicherblöcke306 erzeugt werden. Beispielsweise kann das Abbildungsmodul406 , wenn es Löschblöcke302 auswählt, die den logischen Speicherblöcken 306 zugewiesen werden sollen, wenn die logischen Speicherblöcke306 erzeugt oder neu erzeugt werden, wenigstens einen Löschblock302 aus dem Reserve-Pool verfügbarer Löschblöcke302 auswählen, der jedem der logischen Speicherblöcke306 zugewiesen werden soll, bevor es den logischen Speicherblöcken306 andere Löschblöcke302 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öcken306 zugewiesen sind. Dementsprechend können die Löschblöcke302 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öcken302 aus dem Reserve-Pool zu einem oder mehreren der logischen Speicherblöcke306 und falls möglich Zuweisen eines Löschblocks302 zu jedem der logischen Speicherblöcke306 eine Art und Weise sein, um Verschleißausgleich für die logischen Speicherblöcke306 bereitzustellen. - Nachstehend ist ein Beispiel eines Pseudocodes für einen Algorithmus zum Zuweisen von Löschblöcken
302 zu logischen Speicherblöcken306 zum Aufbauen gleichmäßig oder im Wesentlichen gleichmäßig großen logischen Speicherblöcken306 in der Reihenfolge von Bausteinen, Bausteinebenen oder dergleichen mit der größten Anzahl nicht zugewiesener fehlerfreier Löschblöcke302 . In speziellen Ausführungsformen kann der nachstehende Pseudocode und das Speichermanagementmodul150 im Allgemeinen gleichmäßig große logische Speicherblöcke306 aufbauen, unabhängig davon, wie die fehlerhaften, z. B. nicht verwendbaren, Löschblöcke302 ü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 .
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.
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.
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)
- 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.
- 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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. - 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.
- 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. - 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. - 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. - 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. - 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.
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)
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)
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 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그의 동작 방법 |
-
2017
- 2017-06-26 US US15/633,608 patent/US10649661B2/en active Active
-
2018
- 2018-03-14 DE DE102018105854.3A patent/DE102018105854A1/de active Pending
- 2018-03-20 CN CN201810228384.0A patent/CN109117084B/zh active Active
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 |