DE19782041B4 - Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher - Google Patents

Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher Download PDF

Info

Publication number
DE19782041B4
DE19782041B4 DE19782041A DE19782041A DE19782041B4 DE 19782041 B4 DE19782041 B4 DE 19782041B4 DE 19782041 A DE19782041 A DE 19782041A DE 19782041 A DE19782041 A DE 19782041A DE 19782041 B4 DE19782041 B4 DE 19782041B4
Authority
DE
Germany
Prior art keywords
block
sector
file
data
frame
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.)
Expired - Fee Related
Application number
DE19782041A
Other languages
English (en)
Other versions
DE19782041T1 (de
Inventor
Walter S. Folsom Matthews
Clark S. Folsom Thurlo
Verner III El Dorado Hills MacDonald
Deborah L. Placerville See
Phillip J. III Folsom Del Pozo
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of DE19782041B4 publication Critical patent/DE19782041B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

Abstract

Verfahren zum Überschreiben einer Datei, die eine Mehrzahl von Rahmen von Daten aufweist und in einem nicht-flüchtigen Speicher mit einer Mehrzahl von einzeln löschbaren Blöcken gespeichert ist, wobei jedem Block eine Mehrzahl von Sektoren zugewiesen ist, wobei für eine Mehrzahl von Rahmen jeweils:
a) der Rahmen empfangen wird (320; 720);
b) ein logischer Sektor bestimmt wird (340; 725), in den der Rahmen geschrieben werden soll, wobei der logische Sektor einem ersten Sektor entspricht, der bei einem ersten Offset in einem ersten Block mit einer ersten logischen Blocknummer angeordnet ist, wobei ein Teil der Datei in dem ersten Sektor gespeichert ist;
c) der Rahmen in einen zweiten Sektor geschrieben wird (340; 740), wobei der zweite Sektor bei einem zweiten Offset in einem Reserveblock angeordnet ist, wobei das erste und das zweite Offset gleich sind; und
d) der in dem Reserveblock angeordnete zweite Sektor als gültig und der...

Description

  • Die Erfindung bezieht sich auf ein Verfahren zum Überschreiben einer Datei, die eine Mehrzahl von Rahmen von Daten aufweist und in einem nicht-flüchtigen Speicher mit einer Mehrzahl von einzeln löschbaren Blöcken gespeichert ist, wobei jedem Block eine Mehrzahl von Sektoren zugewiesen ist.
  • Computersysteme weisen üblicherweise eine Art einer nicht-flüchtigen Massenspeichereinrichtung auf. Das Betriebssystem des Computers ist für die Kommunikation mit der Massenspeichereinrichtung verantwortlich, um innerhalb der Massenspeichereinrichtung gespeicherte Dateien zu erzeugen, zu löschen, zu verändern oder anzuhängen. Daten werden auf der Platte gespeichert, indem eine Datei in die Massenspeichereinrichtung hineingeschrieben wird.
  • Eine Art einer nicht-flüchtigen Massenspeichereinrichtung, die oftmals durch Computersysteme verwendet wird, ist das elektromechanische Festplattenlaufwerk. Elektromechanische Festplattenlaufwerke weisen eine oder mehrere kreisförmige Platten oder Scheiben auf. Diese kreisförmigen Platten enthalten ein magnetisches Speichermedium zum Speichern von Daten. Die Platten sind in konzentrische Kreise unterteilt, die Spuren genannt werden. Die Platten sind darüber hinaus radial derart unterteilt, dass die Spuren in Sektoren unterteilt sind. Somit weist eine Platte eine Mehrzahl von Spuren auf, wobei jede Spur eine Mehrzahl von Sektoren aufweist.
  • Jeder Sektor hat eine vorgegebene Sektornummer, auf die das Computersystem Bezug nehmen kann. Eine in einem elektromechanischen Festplattenlaufwerk gespeicherte Datei kann eine Reihe von Sektoren belegen. Die Sektoren (d. h. die Dateisektoren), die der Datei zugeordnet sind, können auch auf einer oder mehreren Platten derart angeordnet sein, dass die zugehörigen Sektoren weder notwendigerweise aufeinanderfolgend num meriert noch notwendigerweise aneinander angrenzend angeordnet sind. Sobald eine Datei erzeugt ist, können neue Daten gespeichert werden, indem die neuen Daten an die Datei angehängt werden. Dies führt typischerweise zu einer Ausdehnung der Größe der Datei, indem zusätzlich Sektoren der Datei zugewiesen werden.
  • Einige Anwendungen erfordern nur das Modifizieren einer zuvor vorhandenen Datei anstelle des Anhängens an die bereits vorhandene Datei. Man betrachte beispielsweise eine Anwendung, welche nur die Speicherung eines ”Fensters” von Daten erfordert. Zu irgendeinem beliebigen Zeitpunkt muss jeweils nur eine fest vorgegebene Datenmenge gespeichert werden. Anstelle des kontinuierlichen Anhängens neuer Daten an die Datei, was die Speicheranforderungen für die Datei ausdehnt, werden Abschnitte der Datei mit dem aktuellen Fenster der Daten überschrieben. So wird beispielsweise dann, sobald ausreichender Dateiraum auf einem elektromechanischen Festplattenlaufwerk zugewiesen ist, um das Fenster der Daten zu berücksichtigen, die Datei oder Abschnitte der Datei kontinuierlich mit den eingehenden Daten derart überschrieben, dass die Datei oder einige Abschnitte der Datei das aktuelle Fenster der Daten repräsentieren. Die neue Version eines Sektors von Daten wird verwendet, um eine ältere, in dem gleichen Sektor gespeicherte Version der Daten zu überschreiben. Diese Technik ist insbesondere dann nützlich, wenn das elektromechanische Festplattenlaufwerk im wesentlichen mit Daten gefüllt ist.
  • Festkörperspeicher-Platten stellen eine Massenspeicheralternative gegenüber den elektromechanischen Festplattenlaufwerken zur Verfügung. Festkörperspeicherplatten verwenden grundsätzlich nicht-flüchtige Halbleiterspeicher, um eine Massenspeichereinrichtung zur Verfügung zu stellen. Um die Kompatibilität mit elektromechanischen Festplattenlaufwerken aufrechtzuerhalten, unterstützen Festkörperspeicherplatten jedoch die gleiche sektor-basierte Dateispeicheranordnung, so dass ein Computersystem auf nummerierte Sektoren Bezug nehmen kann, um Daten auf die Festkörperspeicherplatte zu speichern oder von ihr wiederzugewinnen.
  • Im Unterschied zu einem elektromechanischen Festplattenlaufwerk muss der nicht-flüchtige Speicher einer Festkörperspeicherplatte üblicherweise gelöscht werden, bevor er neu programmiert werden kann. Um die in einem Abschnitt des Speichers gespeicherten Daten ändern zu können, muss somit der Abschnitt des Speichers zunächst gelöscht werden. Bei einigen nicht-flüchtigen Speichern jedoch kann das Löschen eine relativ lange Zeitdauer beanspruchen.
  • Um eine Leistung der Festkörperspeicherplatte zu erreichen, die mit der eines elektromechanischen Festplattenlaufwerks ebenbürtig ist, wird bei einer Technik zum Aktualisieren eines Dateisektors eine neue Version des Sektors an einen anderen Ort innerhalb des nicht-flüchtigen Speichers geschrieben. Ein Nachteil des Schreibens eines Sektors zu einem anderen Ort innerhalb des nicht-flüchtigen Speichers besteht darin, dass eine Sektorabbildung (Sektormap) erforderlich werden kann, um den Ort der aktuellen Version des Sektors zu verfolgen. Die Sektorabbildung muss dann jedes Mal aktualisiert werden, wenn ein Sektor umgelagert wird.
  • Die alten Versionen werden dann schließlich in einem Hintergrundsäuberungsprozess gelöscht, um Speicherraum freizugeben. Der Hintergrundsäuberungsprozess gestattet ein zurückgestelltes Löschen solange, wie das Löschen nicht die effektive Programmier- oder Schreibzeit für den nicht-flüchtigen Speicher negativ beeinflusst.
  • Der zurückgestellte Löschprozess kann bei einigen Anwendungen geeignet sein, wie beispielsweise bei stoßweise erfolgenden Datenübertragungen zu der Festkörperspeicherplatte, jedoch kann der oben beschriebene verzögerte Löschprozess bei einer Datei ungeeignet sein, die kontinuierlich überschrieben wird. Insbesondere dann, wenn der Hintergrundlöschprozess lange genug verzögert wird, wird ein Vordergrundlöschprozess ausgeführt werden müssen, um zusätzlichen Raum in dem nicht-flüchtigen Speicher freizugeben. Während der Vordergrundlöschprozess ausgeführt wird, müssen die eingehenden Daten irgendwo vorübergehend gespeichert oder ignoriert werden. Ein Ignorieren der Daten führt zu einem Datenverlust, welcher vermieden werden sollte. Die Schaffung einer relativen großen Menge temporären Speichers führt zu einer Erhöhung der Kosten und Größe der Festkörperspeicherplatte. Darüber hinaus kann ein unzureichender temporärer Speicher zu einem Datenverlust führen, sobald der temporäre Speicher überläuft.
  • Es ist ein Verfahren erforderlich, das ein kontinuierliches Überschreiben einer in einem nicht-flüchtigen Speicher gespeicherten Datei gestattet.
  • Aus der Druckschrift EP 0 712 067 A2 sind eine Festkörperspeicherplatte sowie Verfahren zum Lesen, Einspeichern und Umspeichern von Daten sowie zum Löschen von Blöcken bekannt. Die dort beschriebene Verbesserung geht von einem Stand der Technik aus, bei dem eine Flash-Speicherkarte eine Magnetplattenspeichereinrichtung nachbildet. Eine Steuereinrichtung der Flash-Speicherkarte empfängt Zylinder-, Kopf- und Sektor-Nummern und bildet daraus eine logische Sektoradresse, welche anschließend mit Hilfe einer Abbildungstabelle auf eine physikalische Sektoradresse abgebildet wird. Für jede Sektoradresse gibt es einen Eintrag, was zu einer relativ großen Abbildungstabelle führt. Daraus ergibt sich die Aufgabe, die Größe der Adresskonvertierungstabelle zu reduzieren. Die Druckschrift schlägt ein spezielles Verfahren zur Abbildung der logischen Sektoradresse auf eine physikalische Sektoradresse vor. Dabei wird u. a. eine logische Blockadresse gebildet, die auf eine physikalische Blockadresse abgebildet wird. Ein dabei verwendeter physikalischer Block (Löschblock) weist nicht nur Speicherbereiche für die jeweiligen Sektordaten auf, sondern darüber hinaus Sektor-ID- und Block-ID-Speicherbereiche und insbesondere Reserve-Sektor-Speicherbereiche. Wenn in einem physikalischen Sektor vorhandene Daten durch aktuelle ersetzt werden sollen, so werden die aktuellen Daten zunächst in einen Reservesektor des Reserve-Bereichs desselben Blocks eingeschrieben. Der die ursprünglichen Daten in diesem Block enthaltende Sektor wird als ungültig markiert. Jedesmal dann, wenn auf diese Weise ein Reservesektor beschrieben wird, wird ein Sektoradresszeiger inkrementiert, so dass er auf den nächsten freien Reservesektor in demselben Block zeigt. Es können somit solange aktuelle Sektoren in denselben Block eingeschrieben werden, wie noch Reservesektoren fei sind. Wenn der Block voll ist, so werden alle gültigen Sektoren des Blocks in einen neuen Block übertragen. Anschließend wird der ursprüngliche Block insgesamt gelöscht. Beim Übertragen der gültigen Sektoren in den neuen Block werden diese wiederum in der ursprünglichen Reihenfolge, in der sie vor dem ersten Aktualisieren in dem ursprünglichen Block gespeichert waren, angeordnet. Bei dem in der Druckschrift beschriebenen Verfahren ist es von Nachteil, dass in jedem physikalischen Block eine Anzahl von Reservesektoren vorzusehen ist. Ist diese Anzahl zu gering, so müssen häufig vollständige Blöcke in neue Blöcke übertragen werden; ist sie zu groß, wird Speicherplatz verschwendet. Aus dem Patent US 5,544,356 ist eine Architektur eines Speichersystems mit blockweise löschbaren nicht-flüchtigen Halbleiterspeichern bekannt. Aus der Druckschrift EP 0 704 803 A1 ist ein Verfahren zur Speicherverwaltung eines Flash-Speichers bekannt, dass insbesondere bei Diktiergeräten Anwendung findet, bei denen Sprachdateien abgelegt werden. Die Druckschrift beschreibt das Einschreiben, Löschen und Umlagern vollständiger Sprachdateien. Aus dem Patent US 5,573,569 ist ein Verfahren zum Speichern von Dateien in Flash-Speichern bekannt, das die Blocklöschungen minimieren soll. Die gespeicherten Dateien sind Sprachdateien eines Anrufbeantworters. Wenn ein Block teilweise aktuelle und teilweise zu löschende Nachrichten enthält, werden zum Zwecke der Freigabe des Blocks die noch aktuellen Nachrichten in einen Reserveblock kopiert. Anschließend wird der ursprüngliche Block gelöscht. Der Reserveblock erhält dann die Blocknummer des ursprünglichen Blocks und der ursprüngliche, gelöschte Block wird zum neuen Reserveblock.
  • Aufgabe der Erfindung ist es, ein Verfahren zu schaffen, dass ein kontinuierliches Überschreiben einer in einem nicht-flüchtigen Speicher gespeicherten Datei gestattet ohne übermäßigen zusätzlichen Speicherplatz zu verbrauchen.
  • Diese Aufgabe wird erfindungsgemäß auf ein Verfahren mit den Merkmalen des Patentanspruchs 1 gelöst. Vorteilhafte und/oder bevorzugte Weiterbildungen der Erfindung sind in den Unteransprüchen gekennzeichnet.
  • Im Folgenden wird die Erfindung anhand eines in den Zeichnungen dargestellten bevorzugten Ausführungsbeispiels näher erläutert, wobei in den Zeichnungen:
  • 1 ein Verfahren zum Durchführen eines Überschreibens einer in einem elektromechanischen Festplattenlaufwerk gespeicherten Datei veranschaulicht.
  • 2 veranschaulicht ein alternatives Verfahren zum Durchführen eines Überschreibens einer in einem elektromechanischen Festplattenlaufwerk gespeicherten Datei.
  • 3 veranschaulicht ein Verfahren, das beim Überschreiben einer in einem nicht-flüchtigen Speicher gespeicherten Datei verwendet wird.
  • 4 veranschaulicht die Anwendung des Verfahrens gemäß 3.
  • 5 veranschaulicht ein Verfahren zum Rückgewinnen eines zur Säuberung markierten Blocks.
  • 6 veranschaulicht die Anwendung des Verfahrens gemäß 5.
  • 7 veranschaulicht ein Verfahren zum Durchführen eines kontinuierlichen Schreibens einer in einem nicht-flüchtigen Speicher gespeicherten Datei.
  • 8 veranschaulicht ein Verfahren zum Umlagern von in einem Overhead-Bereich gespeicherten Sektoren.
  • Betriebssysteme, die elektromechanische Festplattenlaufwerke unterstützen, verwenden typischerweise ein sektor-basiertes Schema zur Dateiverwaltung. Der Benutzer oder einzelne Anwendungsprogramme befassen sich üblicherweise nicht direkt mit den Sektornummern, wenn sie auf das elektromechanische Festplattenlaufwerk schreiben oder von ihm lesen. Üblicherweise unterstützt das Betriebssystems die Verwendung eines Dateizeigers, um einen speziellen Sektor der Datei zu lokalisieren oder zu identifizieren. Somit ist das Betriebssystem für das Austauschen von Sektornummern mit dem elektromechanischen Festplattenlaufwerk verantwortlich, um Sek toren von der Datei zugeordneten Daten zu speichern oder zurückzugewinnen.
  • Grundsätzlich verwenden Betriebssysteme eine Art einer Zuweisungsabbildung, um sämtliche einer gegebenen Datei zugeordnete Sektoren zu lokalisieren. Eine Art eines sektor-basierten Dateisystems verwendet eine Dateizuweisungstabelle (FAT; File Allocation Table), um die einer bestimmten Datei zugeordneten Sektoren zu verfolgen. Die FAT ist eine Tabelle von Zuweisungseinheiten, die typischerweise an einem vorgebenen Ort in einem elektromechanischen Festplattenlaufwerk gespeichert sind. Die Zuweisungseinheit ist die kleinste Größeneinheit, die einer Datei zuweisbar ist. Eine Zuweisungseinheit kann so klein wie ein Sektor sein. Da die FAT an einem vorgebenen Ort in dem elektromechanischen Festplattenlaufwerk gespeichert ist, gestattet die FAT nur eine fest vorgegebene Maximalanzahl von Einträgen. Um jedoch größere Platten mit mehr Sektoren zu berücksichtigen, erhöht sich die Anzahl der Sektoren pro Zuweisungseinheit, so daß eine Zuweisungseinheit aus einer Gruppe (Cluster) von Sektoren besteht. Die FAT dient im wesentlichen als ein Index um anzuzeigen, welche Sektoren einer gegebenen Datei zugeordnet sind.
  • Die Verwendung einer FAT gestattet es den Dateien, Sektoren zu benutzen, welche nicht physikalisch zusammenhängend gruppiert sind. Wenn Dateien erzeugt werden, sucht das Betriebssystem nach verfügbarem Raum auf der Platte, um die Dateien zu speichern. Sofern ausreichender zusammenhängender Speicherraum verfügbar ist, speichert das Betriebssystem die Datei auf der Festplatte derart, daß die Datei aufeinanderfolgend zugegriffene Sektoren zur Speicherung verwendet. Anderenfalls plaziert das Betriebssystem Abschnitte der Datei überall dort, wo Raum verfügbar ist, bis die Datei vollständig auf der Platte gespeichert ist. Die FAT hilft beim Abbilden der Orte der Datei auf der Platte. Um die Datei aus der Platte wiederzugewinnen, wird die FAT verwendet, um die der Datei zugeordneten Sektoren zu lokalisieren. Die Sekto ren werden dann miteinander ”verkettet”, um die Datei oder Abschnitte der Datei von der Platte zu gewinnen.
  • Wenn Dateien erzeugt, modifiziert und gelöscht werden, neigen einzelne Dateien dazu, ”fragmentiert” zu werden, so daß sie nicht länger zusammenhängend auf der Platte gespeichert sind. Das Betriebssystem fragmentiert eine Datei, sofern dies erforderlich ist, um diese in über die Festplatte verstreuten Raum zu speichern. Die Verwendung von Zuweisungsabbildungen und Sektornummern gestattet die Wiedergewinnung, Speicherung und Modifikation von Dateien, die auf einem elektromechanischen Festplattenlaufwerk gespeichert sind.
  • Eine Art eines gegenüber einem elektromechanischen Festplattenlaufwerk alternativen Massenspeichermediums ist eine Festkörperspeicherplatte. Die Festkörperspeicherplatte weist eine beliebige Art eine nicht-flüchtigen Speichers auf. Eine Art eines nicht-flüchtigen Speichers, der bei Festkörperspeicherplatten verwendet wird, ist ein elektrisch lösch- und programmierbarer Floating-Gate-Nur-Lese-Speicher (”Flash-EEPROM” oder ”Flash-Speicher”).
  • Eine Flash-Speicherzelle wird gelöscht, indem die Nettoladung auf dem auf schwebendem Potential befindlichen Gate unter einem vorgebenen Schwellenwert reduziert wird. Eine gelöschte Zelle wird vereinbarungsgemäß als eine Zelle angesehen, die eine binäre ”i” speichert. Eine Flash-Speicherzelle ist programmiert, wenn die Nettoladung einen vorgebenen Schwellenwert überschreitet. Eine programmierte Zelle wird vereinbarungsgemäß als eine Zelle angesehen, die eine binäre ”0” speichert. Eine Flash-Speicherzelle kann nicht neu programmiert werden, ohne daß sie zuvor gelöscht worden ist, wobei es eine Ausnahme gibt. Eine Flash-Speicherzelle kann jederzeit auf eine ”0” programmiert werden, indem zusätzlich Ladung auf die Floating-Gate-Elektrode gebracht wird.
  • Flash-Speicher werden typischerweise in einzeln löschbare Blöcke unterteilt. Jeder Block enthält eine Anzahl von Flash-Speicherzellen. Obwohl jeder Block individuell gelöscht werden kann, kann eine vorgegebene Flash-Zelle nur gelöscht werden, indem ihr gesamter Block gelöscht wird. So muß zum Umprogrammieren einer Flash-Zelle ein gesamter Block von Zellen zunächst gelöscht werden. Bei einem elektromechanischen Festplattenlaufwerk kann das Betriebssystem die Laufwerkssteuereinrichtung auffordern, Daten aus einem durch eine bestimmte Sektornummer identifizierten Sektor zur Verfügung zu stellen. Da der nicht-flüchtige Speicher kein elektromechanisches Festplattenlaufwerk ist, wird ein Übersetzungsmechanismus benötigt, um die Sektornummer in eine physikalische Adresse für den nicht-flüchtigen Speicher zu übersetzen. Bei einem Ausführungsbeispiel wird diese Übersetzung in Software ausgeführt und wird als Flash-Übersetzungsebene (FTL; Flash Translation Layer) bezeichnet. Die FTL gestattet es einer Festkörperspeicherplatte, ein elektromechanisches Festplattenlaufwerk derart zu emulieren, daß das Betriebssystem, welches elektromechanische Festplattenlaufwerke unterstützt, damit fortfahren kann, sektor-basierte Dateisysteme für nicht-flüchtigen Speicher, wie beispielsweise Flash-Speicher, aufweisende Festkörperspeicherplatten zu verwenden.
  • Neben dem Zuweisen von Speicherraum für eine Datei, wenn sie erzeugt wird, muß das Betriebssystem Änderungen an einer bereits vorhandenen Datei behandeln. Wie oben ausgeführt, verwendet ein elektromechanische Plattenlaufwerke unterstützendes Betriebssystem typischerweise ein sektor-basiertes Schema zum Verwalten von Dateien. Insbesondere unterstützt das Betriebssystems die Verwendung eines Dateizeigers, um einen speziellen Sektor, der den zu modifizierenden Daten zugeordnet ist, zu lokalisieren oder zu identifizieren. Der Sektor kann dann mit den aktualisierten Daten überschrieben werden.
  • Aufgrund der bei Flash-Speichern erforderlichen relativ langen Löschzeit wird ein logisches Sektoradressierschema anstelle eines physikalischen Sektoradressierschemas be nutzt. Mit anderen Worten, statt einer fest vorgegebenen Korrespondenz zwischen Sektornummer und physikalischen Adressen des nicht-flüchtigen Speichers werden neue Daten. für einen Sektor in einen neuen physikalischen Speicherplatz geschrieben, sofern eine ältere Version der Sektordaten bereits vorhanden ist. Die ältere Version wird dann als ungültig markiert, so daß sie nachfolgend während eines Rückgewinnungsprozesses regeneriert werden kann. So sind die Sektornummern von ”logischer” Art und nicht von physikalischer, da mit der gleichen Sektornummer über der Zeit unterschiedliche physikalische Adressen zugegriffen werden können. Es ist eine Sektorabbildung erforderlich, um den einer logischen Sektornummer zugeordneten aktuellen physikalischen Ort zu verfolgen. Bei einem Ausführungsbeispiel behandelt die FTL die Verwaltung der Sektorabbildung. Ein Block kann eine Mischung von gültige Daten enthaltenden Sektoren und ungültige Daten enthaltenden Sektoren aufweisen.
  • So erscheint die Festkörperspeicherplatte dem Computersystem als kontinuierlich in Sektoren aufgeteiltes Medium. Die FTL jedoch lagert die Sektoren in einer für das Betriebssystem transparenten Weise derart um, daß eine Sektornummer nicht mehr permanent einem speziellen Bereich von physikalischen Adressen zugeordnet ist. Die FTL verfolgt unter Verwendung der Sektorabbildung die logisch-zu-physikalische Relation.
  • Bei einem Verfahren des Schreibens auf eine Festkörperspeicherplatte werden Daten in vorhandenen freien Raum innerhalb der Festkörperspeicherplatte geschrieben. Ältere Versionen der Daten werden am Ort gelöscht. Sobald die Festkörperspeicherplatte einen vorgegebenen Schwellenwert gelöschter Daten überschreitet, muß eine Rückgewinnungsoperation im Vordergrund durchgeführt werden, um die den gelöschten Daten zugeordneten Speicherbereiche freizugeben. Ein Reserveblock wird während der Rückgewinnungsprozedur verwendet, um gültige Sektoren von Daten aus einem für eine Säuberungsoperation eingeplanten Block zu speichern. Der einge plante Block hat einen Schwellenwert von gelöschten Daten überschritten. Die gültigen Sektoren innerhalb des eingeplanten Blocks werden aus dem eingeplanten Block in den Reserveblock kopiert, so daß der eingeplante Block gelöscht werden kann, um zusätzlichen Speicher freizugeben. Die obengenannte Technik kann nur dann verwendet werden, wenn die Festkörperspeicherplatte den verfügbaren Speicherraum erhöhen kann, indem sie von gelöschten Daten verwendeten Raum zurückgewinnt. Sobald die Festkörperspeicherplatte voll ist und keine gelöschten Daten enthält, kann die obengenannte Technik nicht verwendet werden, um neue Daten auf die Platte zu schreiben, selbst wenn eine Datei nur modifiziert wird und nichts an sie angehängt wird.
  • Einige Anwendungen sind zum Aktualisieren einer bereits vorhandenen Datei durch Modifizieren der Datei anstelle eines Anhängens an die Datei geeignet. Man betrachte beispielsweise eine Anwendung, bei der nur ein ”Fenster” von Daten aufrechterhalten zu werden braucht. Alte Daten können durch neue Daten so ersetzt werden, daß die Länge der Datei nicht ausgedehnt zu werden braucht, solange die Datei ausreichend groß genug ist, um das gewünschte Datenfenster aufzunehmen. In einem solchen Falle braucht die Länge der gespeicherten Datei nicht erhöht zu werden. Die Datei oder Abschnitte der Datei werden wie gewünscht überschrieben. Man betrachte beispielsweise eine Anwendung, welche Rahmen von Daten in einem Puffer empfängt und speichert. Die Daten werden aus dem Puffer wiedergewonnen und verwendet, um Abschnitte der gespeicherten Datei zu überschreiben.
  • 1 veranschaulicht ein Ablaufdiagramm für ein Verfahren zum Überschreiben einer in einem elektromechanischen Festplattenlaufwerk gespeicherten Datei. Bei diesem Ausführungsbeispiel kann das Überschreiben an einem beliebigen ausgewählten Sektor innerhalb der Datei beginnen und sich fortsetzen, bis das Ende der Datei erreicht ist.
  • Im Schritt 110 wird ein Suchen durchgeführt, um einen Dateizeiger auf den ersten zu überschreibenden Sektor zu po sitionieren. Dann wird der Sektor im Schritt 115 überschrieben. Im Schritt 120 wird bestimmt, ob es weitere Daten zu schreiben gibt. Wenn dies nicht der Fall ist, dann endet der Prozeß im Schritt 150. Anderenfalls wird der Prozeß mit dem Schritt 125 fortgesetzt.
  • Im Schritt 125 wird der nächste zu überschreibende Sektor lokalisiert. Bei diesem Ausführungsbeispiel endet der Überschreibprozeß, wenn das Ende der Datei erreicht ist. Folglich wird im Schritt 130 festgestellt, ob der Dateizeiger das Ende der Datei erreicht hat (d. h., ob es keinen nächsten Sektor) gibt. Wenn das Ende der Datei erreicht ist, dann wird ein Ende-der-Datei(EOF)-Fehler im Schritt 140 erzeugt und der Prozeß endet im Schritt 150.
  • Wenn sich der Dateizeiger nicht am Ende der Datei befindet, so wird ein Suchen im Schritt 135 durchgeführt, um den Dateizeiger auf den nächsten zu überschreibenden Sektor zu positionieren. Dann wird der Prozeß mit dem Überschreiben des Sektors im Schritt 115 fortgesetzt.
  • 2 veranschaulicht ein Ablaufdiagramm für ein weiteres Verfahren zum Überschreiben einer in einem elektromechanischen Festplattenlaufwerk gespeicherten Datei. Bei diesem Ausführungsbeispiel kann das Überschreiben an irgendeiner ausgewählten Position innerhalb der Datei beginnen und sich fortsetzen, bis das Ende der Datei erreicht ist. Anstelle des Erzeugens einer Fehler-Nachricht und des Stoppens, wenn das Ende der Datei erreicht ist, wird jedoch das Überschreiben innerhalb des ersten Sektors in der Datei wie unten beschrieben fortgesetzt.
  • Im Schritt 210 wird ein Suchen durchgeführt, um einen Dateizeiger so zu positionieren, daß er den ersten Sektor auswählt, der überschrieben werden soll. Der ausgewählte Sektor wird dann im Schritt 215 überschrieben. Im Schritt 220 wird ein Test durchgeführt, um zu bestimmen, ob es weitere Daten gibt, die in die Datei geschrieben werden sollen. Wenn dies nicht der Fall ist, endet der Prozeß im Schritt 250. Anderenfalls wird der Prozeß mit dem Schritt 225 fortgesetzt.
  • Im Schritt 225 wird der nächste zu überschreibende Sektor lokalisiert. Schritt 230 stellt fest, ob der Dateizeiger, das Ende der Datei erreicht hat. Im Unterschied zu dem Ausführungsbeispiel gemäß 1 jedoch wird der Überschreibprozeß nicht beendet, sobald das Ende der Datei erreicht ist. Wenn ein Ende der Datei im Schritt 230 erfaßt wird, dann wird der Dateizeiger neu positioniert, indem ein Suchen durchgeführt wird, um den ersten Sektor in der Datei zu lokalisieren. Der Überschreibprozeß wird dann vom Beginn der Datei an fortgesetzt, indem mit dem Schritt 215 fortgefahren wird.
  • Nach dem Schritt 230 führt dann, wenn das Ende der Datei nicht erreicht worden ist, der Schritt 235 ein Suchen durch, um den Dateizeiger auf dem nächsten Sektor neu zu positionieren. Dann wird der nächste Sektor im Schritt 215 überschrieben. Wie oben ausgeführt, verwenden jedoch einige Festkörperspeicherplatten nicht-flüchtige Speicher, welche nicht neu programmiert werden können, ohne sie zunächst zu löschen. Die bedeutet, daß der Sektor nicht einfach lokalisiert und überschrieben werden kann, wie es in den 1 und 2 veranschaulicht ist. Um ein kontinuierliches Überschreiben einer sektor-basierten Datei in einem nicht-flüchtigen Speicher durchzuführen, werden die Positionier- und Überschreib-Schritte gemäß 1 modifiziert. Insbesondere wird die neuere Version der Daten auf eine Weise gespeichert, welche dabei hilft, die Menge der anderenfalls während der Blockrückgewinnung erforderlichen ”Nacharbeit” zu minimieren. Soweit dies möglich ist, wird der Rückgewinnungsprozeß ”am Ort” durchgeführt. Dies hilft, den Engpaß einer erzwungenen Vordergrundsäuberung zu eliminieren. Außerdem hilft dies, die Menge des Overhead-Bereichs zu minimieren, der zum Aufnehmen eingehender Daten erforderlich ist, wenn die Blöcke zurückgewonnen werden müssen, um mehr Raum freizugeben.
  • 3 veranschaulicht die Kernschritte zum Durchführen eines Überschreibens einer Datei in einer Festkörperspeicherplatte. Diese Schritte können sowohl auf Anwendungen angewendet werden, bei welchen der Überschreibprozeß am Ende der Datei beendet wird, ebenso wie auf Anwendungen, bei welchen der Überschreibprozeß an den Beginn einer überschriebenen Datei zurückkehrt, sobald das Ende der Datei erreicht ist, wie sie in den 1 bzw. 2 veranschaulicht sind.
  • Die Prozedur beginnt im Schritt 310. Im Schritt 320 wird ein Rahmen von Daten empfangen. Im Schritt 330 wird der Sektor bestimmt, in den der Datenrahmen geschrieben werden soll. Der Datenrahmen repräsentiert die aktuelle Version der Daten, die im physikalischen Sektor sein sollte. Anstelle der Verwendung physikalischer Sektornummern, welche stets speziellen physikalischen Adressen entsprechen, verwendet dieses Verfahren logische Sektornummern. Die logische Sektornummer des Sektors, in den der Datenrahmen geschrieben werden soll, entspricht einem ersten physikalischen Sektor, der an einem ersten Offset in einem ersten Block angeordnet ist. Der erste Block weist darüber hinaus eine zugehörige erste logische Blocknummer auf. So wird im Schritt 330 die logische Sektornummer des Sektors, in den der Datenrahmen geschrieben werden soll, bestimmt.
  • Wie oben erwähnt, kann der nicht-flüchtige Speichersektor nicht programmiert werden, ohne ihn zuvor zu löschen. Folglich werden die Rahmendaten in einen Reserveblock geschrieben, der dem ersten Block zugeordnet ist. Somit werden im Schritt 340 die Rahmendaten in einen zweiten Sektor geschrieben, welcher bei einem zweiten Offset in einem Reserveblock angeordnet ist. Das zweite Offset ist so ausgewählt, daß es identisch dem ersten Offset ist. So werden die Rahmendaten in den Reserveblock derart geschrieben, daß die ersetzten Daten und die Rahmendaten an exakt derselben Position innerhalb des ersten Blocks bzw. des Reserveblocks angeordnet sind.
  • Das in 3 präsentierte Beispiel unterstellt, daß nur ein Sektor aktualisiert wird. Nachdem die Rahmendaten geschrieben sind, wird die logische Blocknummer des Reserveblocks im Schritt 350 auf die erste logische Blocknummer aktualisiert. Der erste Block wird als ungültig markiert, um Fehler zu vermeiden, die dadurch entstehen können, daß zwei Blöcke die gleiche logische Blocknummer aufweisen. Die kann beispielsweise dadurch ausgeführt werden, daß ein Wert in einen Blockstatusbereich des Reserveblocks programmiert wird. Der Reserveblock weist jetzt die Identität des ersten Blocks auf. Da der logische Sektor einem physikalischen Sektor entspricht, der in dem Reserveblock an der gleichen Position angeordnet ist, an der eine ältere Version des physikalischen Sektors in dem ersten Block angeordnet war, ist keine Aktualisierung der Sektorabbildung erforderlich.
  • 4 soll die Anwendung des in 3 veranschaulichten Verfahrens darstellen. Insbesondere hält der Block 410 (d. h., der logische Block Nummer 4) die aktuelle Version des logischen Sektors Nummer 63. Der Reserveblock 450 ist der dem Block 410 zugeordnete Reserveblock. Ein umlaufender Rahmenpuffer 470 enthält eine Serie von Rahmen von Daten, welche auf die Festkörperspeicherplatte gespeichert werden sollen.
  • Entsprechend dem Schritt 330 gemäß 3 wird die logische Sektornummer, zu der die Rahmendaten geschrieben werden sollen, bestimmt. Üblicherweise stellt das Plattenbetriebssystem die Sektornummer, in die die Daten geschrieben werden sollen, zur Verfügung. Beispielsweise soll der Rahmen 472 zum logischen Sektor Nummer 63 geschrieben werden. Der der logischen Sektornummer 63 entsprechende physikalische Sektor kann nicht neu programmiert werden, solange er nicht gelöscht wurde.
  • Der gegenwärtig der logischen Sektornummer 63 zugeordnete physikalische Sektor ist der physikalische Sektor 412 im Block 410. Der physikalische Sektor 412 ist bei einem Offset 430 innerhalb des Blocks 410 angeordnet. Gemäß dem anhand von 3 dargelegten Verfahren wird der Rahmen 472 in den physikalischen Sektor 452 des Reserveblocks 450 eingeschrieben. Der physikalische Sektor 452 ist an dem gleichen Offset 430 innerhalb des Reserveblocks 450 angeordnet, wie der physikalische Sektor 412 innerhalb des Blocks 410 angeordnet ist. Der logische Sektor Nummer 63 entspricht jetzt dem physikalischen Sektor 452.
  • Die Verwendung logischer Blocknummern und die Tatsache, daß die logischen Sektoren zu den gleichen Offsets innerhalb des Reserveblocks umgelagert werden, beseitigt das Erfordernis zum Aktualisieren der Sektorabbildungen jedesmal dann, wenn ein Löschen zurückgestellt wird.
  • Obwohl die neuere Version der Daten für den logischen Block Nummer 4 im Reserveblock 450 gespeichert ist, kann der die älteren Versionen der Daten enthaltende Sektor nicht erneut verwendet werden, ohne den Block 410 zu löschen. Bei diesem Beispiel wurden die Sektoren 8, 5 und 63 im Block 410 mit Daten aktualisiert. Die Sektoren 332, 135, 5, 684 und 651 jedoch können möglicherweise noch gültige Sektoren darstellen, welche nicht durch aktualisierte Daten in dem Reserveblock ersetzt worden sind. Ein Rückgewinnungsprozeß wird verwendet, um die gültigen Sektoren aus dem Block 410 derart zu gewinnen, daß der Speicherraum, der nicht mehr durch die Sektoren 8, 5 und 63 benötigt wird, freigegeben werden kann, um zusätzlich eingehende Daten zu speichern. Dieser Prozeß wird als Säuberungsprozeß bezeichnet. Nachdem die Sektoren 8, 5 und 63 aktualisiert worden sind, wird der Block 410 für die Säuberung eingeplant.
  • Bei einem Ausführungsbeispiel einer Festkörperspeicherplatte enthält jeder Block des Speichers einen oder mehrere Datensektoren. Über der Zeit kann ein Block schließlich einen Schwellenwert von Sektoren, die ältere Versionen von Daten enthalten, erreichen. Um den die älteren Versionen der Daten enthaltenden Raum zurückzugewinnen, muß der gesamte Block gelöscht werden. Sofern der Block mehr als einen Datensektor speichert, so müssen vor dem Löschen alle anderen gültigen Sektoren in dem Block in einen anderen Block kopiert werden.
  • Dies wird ausgeführt, indem die gültigen Sektoren von Daten aus dem zum Löschen eingeplanten Block (Quellblock) kopiert und die kopierten Informationen in einen anderen Block (Zielblock oder Reserveblock) geschrieben werden. Die kopierten Daten verwenden die gleiche logische Sektornummer, obwohl sie in einem anderen Block gespeichert werden. Der Quellblock oder die Sektoren innerhalb des Quellblocks werden als ungültig markiert, um Operationen, die den Löschprozeß unterbrechen könnten, daran zu hindern, zu den älteren Versionen der Sektoren zu schreiben. Der Quellblock wird dann gelöscht.
  • Da es keinen permanent zugewiesenen Abschnitt des physikalischen Speichers für eine gegebene Sektornummer gibt, kann der Säuberungsprozeß zurückgestellt und so priorisiert werden, daß er nur dann durchgeführt wird, wenn dies die Leistungsfähigkeit der Festkörperspeicherplatte in Bezug auf anhängige Lese- und Schreibkommandos, die aus dem Computersystem empfangen wurden, nicht negativ beeinflussen würde. In diesem Fall wird der Säuberungsprozeß als Hintergrundprozeß ausgeführt.
  • Üblicherweise haben Schreiboperationen eine höhere Priorität als Löschoperationen, so daß die Löschoperationen zurückgestellt werden, um eine schnellere Antwort auf Schreiboperationen zu erreichen. Somit wird selbst dann, wenn ein Säuberungsprozeß gegenwärtig ausgeführt wird, eine anhängige Schreiboperation bewirken, daß der Säuberungsprozeß unterbrochen wird, so daß die anhängige Schreiboperation durchgeführt wird. Nachdem die Schreiboperation durchgeführt ist, kann der Säuberungsprozeß im Hintergrund fortgesetzt werden.
  • Wenn jedoch die Platte keinen ausreichenden verfügbaren Raum aufweist, so muß ein Vordergrundsäuberungsprozeß ausgeführt werden, bevor zusätzliche Daten zu der Platte geschrieben werden können. Somit können Schreiboperationen nicht gegenüber Löschoperationen priorisiert werden, da es keinen verfügbaren Speicher für Schreiboperationen gibt.
  • Wenn ein Vordergrundsäuberungsprozeß ausgeführt wird, müssen die eingehenden Daten vorübergehend an einem anderen Ort gespeichert werden. Die Menge des erforderlichen temporären Datenraums hängt von einer Reihe von Faktoren ab, einschließlich der zum Durchführen des Vordergrundsäuberungsprozesses erforderlichen Zeit und der Frequenz der eingehenden Daten. Die temporären Daten werden in einem Overhead-Bereich des Speichers gespeichert.
  • Um den von den die ungültigen Daten enthaltenden Sektoren verwendeten Speicherraum zu regenerieren, werden gültige Sektoren von einem zur Säuberung eingeplanten Block (einem Quellblock) zu einem Reserveblock kopiert. Dann kann der Quellblock für eine Gesamtregenerierung des Speicherraums, der von den die ungültigen Daten enthaltenden Sektoren in dem Quellblock verbraucht wird, gelöscht werden.
  • 5 veranschaulicht die Schritte zum Säubern eines Blocks (z. B. eines ”ersten Blocks”) unter Verwendung eines zugehörigen Reserveblocks, beginnend mit dem Schritt 510. Der erste Block weist eine erste logische Blocknummer auf.
  • Im Schritt 520 wird der Ort eines gültigen Sektors in dem ersten Block bestimmt. Im Schritt 525 wird der gültige Sektor aus dem ersten in den Reserveblock kopiert. Der gültige Sektor wird so kopiert, daß er an der gleichen Position (d. h. an dem gleichen Offset) innerhalb des Reserveblocks abgeordnet wird, an der er innerhalb des ersten Blocks angeordnet war.
  • Im Schritt 530 wird die Kopie des gültigen Sektors in dem ersten Block als ungültig markiert. Bei einem Ausführungsbeispiel wird dies durchgeführt, indem Statusbits in einem Kopfteil oder einem Fußbereich des Sektors modifiziert werden. Bei einem alternativen Ausführungsbeispiel wird ein Blockstatusbereich für den Reserveblock oder den ersten Block modifiziert, so daß er anzeigt, daß der Reserveblock die jüngste Version des in ihm gespeicherten logischen Sektors repräsentiert.
  • Im Schritt 540 bestimmt ein Test, ob ein weiterer gültiger Sektor in dem ersten Block vorhanden ist. Die Schritte 525, 530 und 540 werden ausgeführt, bis keine weiteren gültigen Sektoren in dem ersten Block verbleiben.
  • Wenn ein weiterer gültiger Sektor in dem ersten Block im Schritt 540 lokalisiert wird, dann wird im Schritt 545 bestimmt, ob auf eine höher priorisierte Funktion geantwortet werden sollte. Schritt 545 dient in seiner Wirkung als ein Interrupt-Fenster, so daß der Hintergrund-Rückgewinnungsprozeß unterbrochen werden kann, um höher priorisierte Funktionen, wie beispielsweise das Speichern eines neuen Rahmens von eingehenden Daten, zu behandeln.
  • Wenn auf eine höher priorisierte Funktion geantwortet werden muß, dann fährt der Prozeß mit Schritt 580 fort, so daß der Hintergrundprozeß zurückgestellt wird. Anderenfalls fährt der Schritt 545 mit Schritt 525 fort, um den Prozeß der Rückgewinnung des zum Säubern markierten Block fortzusetzen.
  • Vom Schritt 540 ausgehend wird dann, wenn keine weiteren gültigen Sektoren in dem ersten Block verbleiben, dem Reserveblock die logische Blocknummer des ersten Blocks im Schritt 550 zugewiesen. Als nächstes wird der erste Block im Schritt 560 gelöscht. Die Rückgewinnung des ersten Blocks ist dann im Schritt 570 abgeschlossen. Aus dem Rückgewinnungsprozeß wird dann im Schritt 580 zurückgekehrt. Der frühere erste Block ist nun für eine Verwendung als Reserveblock während der Rückgewinnung irgendeines anderen Blocks verfügbar.
  • 6 veranschaulicht die Anwendung des Verfahrens gemäß 5 unter Verwendung des Blocks 610 als ersten Blocks und des Blocks 650 als Reserveblock. Die logischen Sektoren 8, 5 und 63 wurden bereits durch den Überschreibprozeß aktualisiert und sind gegenwärtig den physikalischen Sektoren 652, 655 bzw. 654 im Reserveblock 650 zugewiesen.
  • Somit werden die logischen Sektoren Nummern 8, 5 und 63 innerhalb des ersten Blocks 610 nicht mehr als gültig oder aktuell betrachtet. Die verbleibenden gültigen Sektoren des Blocks 610 jedoch müssen in den Reserveblock 650 kopiert werden. So werden beispielsweise die logischen Sektoren 332, 135, 684 und 561 in den Reserveblock 650 kopiert.
  • Wenn sie kopiert werden, werden die logischen Sektoren 332, 135, 684 und 561 in den Reserveblock bei dem gleichen Offset kopiert, bei dem sie innerhalb des ersten Blocks angeordnet waren. Beispielsweise ist der ungültige logische Sektor 63 bei einem Offset 620 innerhalb des Blocks 610 angeordnet. Der gültige logische Sektor 63 ist bei einem Offset 660 innerhalb des Reserveblocks 650 angeordnet. Die Offsets 620 und 660 sind gleich, so daß das relative Offset des physikalischen Sektors, der dem logischen Sektor 63 zugeordnet ist, konstant bleibt. Die logischen Sektoren 332, 135, 684 und 561 werden auf eine Weise kopiert, welche sichert, daß sie bei dem gleichen Offset innerhalb des Reserveblocks 650 angeordnet werden, bei dem sie zuvor innerhalb des Blocks 610 angeordnet waren.
  • Die logischen Sektoren 332, 135, 684 und 561 entsprechen den physikalischen Sektoren 611, 613, 616 bzw. 617 des Blocks 610. Die logischen Sektoren 332, 135, 684 und 561 werden folglich in die physikalischen Sektoren 651, 653, 656 bzw. 657 im Reserveblock kopiert. Dies sichert, daß keine Sektorabbildungen aktualisiert zu werden brauchen, nachdem die Rückgewinnung abgeschlossen ist.
  • Der Rückgewinnungsprozeß verwendet zumindest zwei Blöcke für jeden Block, der zurückgewonnen wird. Der erste verwendete Block ist derjenige Block, welcher gesäubert oder zurückgewonnen wird, und der zweite Block ist der Reserveblock, der dem gesäuberten Block zugeordnet ist. Jedoch kann es sein, daß die eingehenden Datenrahmen nicht sämtlich logischen Sektoren innerhalb des gleichen Blocks zugeordnet sind. In einem solchen Fall muß ein ”Block-Sprung” durchge führt werden, um mit dem Speichern der eingehenden Datenrahmen in einem anderen Block zu beginnen.
  • Jedesmal dann, wenn ein Blocksprung erforderlich ist, könnten zumindest zwei weitere Blöcke sofort zum Speichern der eingehenden Daten verfügbar sein. Wenn es keine weiteren verfügbaren Reserveblöcke gibt, dann müssen die Rahmendaten in einen Overhead-Bereich geschrieben werden, um dm Verlust eingehender Daten zu vermeiden, während die Rückgewinnung des vorhergehenden Blocks abgeschlossen wird.
  • 7 veranschaulicht den integrierten Prozeß des Initiierens und Durchführens eines kontinuierlichen Überschreibens einer Datei, die als sektorbasierte Dateistruktur in einem nicht-flüchtigen Speicher gespeichert ist, einschließlich der Verwendung eines Overhead-Bereichs. Dieser Prozeß ist insbesondere zum Überschreiben von Dateien geeignet, die in nicht-flüchtigen Speichern gespeichert sind, welche voll oder im wesentlichen voll sind.
  • Der Prozeß beginnt im Schritt 710, indem ein suchen nach einem der zu überschreibenden Datei zugeordneten identifizierten Sektor durchgeführt wird. Der identifizierte Sektor und der Block, in dem der identifizierte Sektor angeordnet ist, werden zum ”aktuellen Sektor” bzw. ”aktuellen Block”. Das Dateiüberschreiben wird somit am aktuellen Sektor des aktuellen Blocks im Schritt 715 initiiert.
  • Im Schritt 720 wird ein Test durchgeführt, um festzustellen, ob ein empfangener Datenrahmen sofort abgefertigt werden muß. Wenn nicht, fährt die Verarbeitung mit den Hintergrundprozessen 765 fort, um die Rückgewinnung des Overhead-Bereichs zu priorisieren, die zum Säubern markierten Blöcke zurückzugewinnen oder um Sektoren von einem Overhead-Bereich in der unten beschriebenen Weise umzulagern.
  • Wenn Rahmendaten abgefertigt werden müssen, Jährt die Verarbeitung mit Schritt 725 fort, um den logischen Sektor zu bestimmen, in den die Rahmendaten geschrieben werden sollen. Schritt 730 bestimmt, ob ein Blocksprung erforderlich sein wird.
  • Wenn der logische Sektor in dem aktuellen Block ist, dann ist kein Blocksprung erforderlich. Folglich fährt die Verarbeitung mit Schritt 735 fort. Im Schritt 735 wird ein Reserveblock für den aktuellen Block lokalisiert, sofern dies möglich ist. Wenn es zu diesem Zeitpunkt keinen dem aktuellen Block zugeordneten Reserveblock gibt, dann werden die Rahmendaten in einen logischen Sektor in dem Overhead-Bereich geschrieben, Schritt 760. Anderenfalls werden die Rahmendaten in einen Sektor des Reserveblocks im Schritt 740 geschrieben. Wenn die Rahmendaten in einen Sektor des Reserveblocks geschrieben werden, werden sie bei dem gleichen Offset innerhalb des Reserveblocks geschrieben, wie die durch sie ersetzten Daten in dem aktuellen Block angeordnet sind.
  • Bei einem Ausführungsbeispiel ist der Rahmen von Daten kleiner als die Größe eines Sektors. Sobald ein Überschreiben bei einer bestimmten Startadresse oder bei einem bestimmten Startort innerhalb der Datei initiiert ist, ersetzen nachfolgende Rahmen von Daten nachfolgende Orte innerhalb der Datei. So werden aufeinanderfolgende Rahmen von Daten aneinandergefügt, bis der aktuelle Sektor mit den Rahmen von Daten gefüllt ist, bevor sich die Verarbeitung in den nächsten Sektor der Datei bewegt. Im Grunde wird jeder nachfolgende Datenrahmen zu einem Rahmenoffset innerhalb des ersetzten Sektors geschrieben, bis der Sektor in dem Reserveblock voll ist.
  • Bei einem Ausführungsbeispiel kann das Überschreibverfahren an einem beliebigen Punkt innerhalb eines Sektors initiiert werden. Folglich muß das Überschreibverfahren nicht an einer Sektorbegrenzung initiiert werden. Wenn die Startadresse, zu der der Anfangsrahmen von Daten geschrieben werden soll, nicht einer Sektorbegrenzung entspricht, dann sollten die beginnend mit der Sektorbegrenzung der Startadresse vorhergehenden Daten des gerade überschriebenen anfänglichen Sektors in den Reserveblock kopiert werden. Somit werden für den anfänglichen Sektor, der überschrieben wird, die von der Sektorbegrenzung bis zu der Startadresse des Rahmens vorhergehenden Daten des überschriebenen Sektors in gleiche zugehörige Orte in dem Reserveblock kopiert, sofern die Startadresse nicht mit einer Sektorbegrenzung des gerade überschriebenen anfänglichen Sektors zusammenfällt.
  • Sobald die Rahmendaten in den Reserveblock (Schritt 740) oder den Overhead-Bereich (760) geschrieben sind, wird die alte Version des Sektors ungültig gemacht. Bei einem Ausführungsbeispiel wird dies ausgeführt, indem Statusbits in einem Kopf- oder einem Fußbereich des Sektors modifiziert werden. Bei einem alternativen Ausführungsbeispiel wird ein Blockstatusbereich für den Reserveblock oder den ersten Block modifiziert, um anzuzeigen, daß der Reserveblock die jüngste Version des in ihm gespeicherten logischen Sektors repräsentiert. Welche Lösung auch gewählt wird, sie muß sichern, daß die jüngste Version eines Sektors sofort von älteren Versionen mit der gleichen logischen Sektornummer unterschieden werden kann. Die älteren Sektornummern werden wirksam ungültig gemacht. So wird im Schritt 745 der ”aktuelle” Sektor des aktuellen Blocks ungültig gemacht, weil er nicht mehr die jüngste Version des Sektors darstellt. Vom Schritt 745 kehrt der Prozeß zum Schritt 720 zurück, um zusätzliche eingehende Daten zu behandeln.
  • Im Schritt 730 wird dann, wenn die aus Schritt 720 bestimmte logische Sektornummer nicht in dem aktuellen Block angeordnet ist, ein Blocksprung erforderlich. Nachfolgend wird im Schritt 750 der aktuelle Block zur Säuberung markiert. Im Schritt 755 wird der Block, in dem der logische Sektor gespeichert ist (d. h. der Block, in den ”gesprungen” wird), als aktueller Block gekennzeichnet. Die Verarbeitung kehrt dann zum Schritt 735 zurück, um zu bestimmen, ob ein Reserveblock für den neuen ”aktuellen Block” verfügbar ist.
  • Obwohl die Behandlung eingehender Rahmen von Daten hohe Priorität hat, um zu sichern, daß keine Daten verlorengehen, muß man sich von Zeit zu Zeit um die Overhead-Daten und die Block-Rückgewinnung kümmern. Die Prozesse der Priorisierung des Overhead-Bereichs für eine Säuberung 770, der Rückgewinnung von für die Säuberung markierten Blöcken 780 und des Umlagerns von Sektoren aus dem Overhead-Bereich 790 sind sämtlich Hintergrundprozesse, welche unterbrochen werden können, um sich der höher priorisierten Funktion der Behandlung eingehender Daten (d. h. Schritt 720) zu widmen.
  • Wenn es keine Rahmen von Daten mehr gibt, um die man sich sofort kümmern muß, dann beginnen die Hintergrundprozesse 765 mit der Priorisierung der Rückgewinnung des Overhead-Bereichs, sofern erforderlich, im Schritt 770.
  • Bei einem Ausführungsbeispiel wird der Block, in dem sich der Overhead-Bereich aufhält, für eine Säuberung eingeplant, sobald der Overhead-Bereich einen vorgegebenen Schwellwert von verfügbaren verbleibenden Sektoren erreicht. Der vorgegebene Schwellwert sollte hoch genug gewählt werden, so daß bei gegebenen Löschzeiten einer speziellen Implementierung es noch genügend Overhead-Bereich gibt, um eingehende Daten aufzunehmen, ohne aus dem Overhead-Bereich hinauszulaufen, bevor der Overhead-Bereich gesäubert wird.
  • Der Overhead-Bereich muß sofort verfügbar sein, um zu sichern, daß keine Daten verlorengehen. Sobald der Overhead-Bereich eine vorgegebene Schwellenanzahl von benutzten Sektoren erreicht, wird der Block, in dem sich der Overhead-Bereich aufhält, für die Säuberung eingeplant. Unabhängig davon, ob irgenwelche anderen Blöcke für die Säuberung eingeplant sind, wird der Rückgewinnung des Blocks, in dem sich der Overhead-Bereich aufhält, eine höhere Priorität im Schritt 770 gegeben. Dies bewirkt gegebenenfalls die Zurückstellung der Rückgewinnung irgendwelcher anderer Blöcke, um eine sofortige Verfügbarkeit des Overhead-Bereichs zu sichern.
  • Im Schritt 780 wird der Prozeß der Rückgewinnung irgendwelcher zur Säuberung markierter Blöcke durchgeführt. Abgesehen davon, daß er Priorität gegenüber der Rückgewinnung irgendwelcher anderer Blöcke hat, wird der Block, der dem Overhead-Bereich zugeordnet ist, wie jeder andere Block auch zurückgewonnen. Sofern Schritt 785 bestimmt, daß die Rückgewinnung nicht abgeschlossen ist, dann werden die Hintergrundprozesse 765 ausgesetzt, damit sich die Verarbeitung Funktionen höherer Priorität widmen kann. Wenn die Rückgewinnung nicht erforderlich war oder erfolgreich abgeschlossen ist, wird die Verarbeitung im Schritt 790 fortgesetzt.
  • Der Overhead-Bereich wird nur benutzt, um Sektoren vorübergehend zu speichern. Anderenfalls müßten die Sektorabbildungen aktualisiert werden, um den neuen Speicherort der Sektoren wiederzugeben. Um die Schritte des Aktualisierens der Sektorabbildungen zu vermeiden, müssen die logischen Sektoren in dem Overhead-Bereich in die richtigen physikalischen Sektoren und Blöcke umgelagert werden. Somit führt der Schritt 790 die Umlagerung von gegenwärtig in dem Overhead-Bereich gespeicherten Sektoren durch, sofern dies erforderlich ist.
  • Der Prozeß des Umlagerns von gegenwärtig in dem Overhead-Bereich gespeicherten Sektoren ist beginnend mit dem Schritt 810 naher in 8 veranschaulicht. Im Schritt 820 wird ein gültiger Sektor innerhalb des Overhead-Bereichs lokalisiert. Der Block, der eine ungültige Version desselben Sektors aufweist, wird im Schritt 825 lokalisiert (die ungültige Version wird bei einem ersten Offset innerhalb eines ersten Blocks lokalisiert).
  • Ein dem ersten Block zugeordneter Reserveblock wird im Schritt 830 lokalisiert. Der gültige Sektor aus dem Overhead-Bereich wird in den Rerserveblock im Schritt 835 kopiert. Der gültige Sektor wird mit einem Offset innerhalb des Reserveblocks kopiert, das gleich dem Offset der ungültigen Version des Sektors in dem ersten Block ist. Im Schritt 840 wird der gültige Sektor in dem Overhead-Bereich als ungültig markiert. Im Schritt 845 wird ein Test durchgeführt, um zu bestimmen, ob irgendwelche weiteren gültigen Sektoren in dem Overhead-Bereich vorhanden sind.
  • Wenn ein weiterer gültiger Sektor in dem Overhead-Bereich angeordnet ist, fährt die Verarbeitung mit dem Schritt 850 fort. Schritt 850 dient als ein Interrupt-Fenster, das es dem Hintergrundprozeß gestattet, angehalten zu werden, um auf eine höher priorisierte Funktion, wie beispielsweise der Behandlung eingehender Datenrahmen, zu antworten. Sofern eine höher priorisierte Funktion behandelt werden muß, fährt der Hintergrundprozeß vom Schritt 850 zur Rückkehr im Schritt 870 fort. Andernfalls, d. h., wenn keine höher priorisierte Funktion den Hintergrundprozeß unterbricht, wird die Umlagerung vom Schritt 850 zum Schritt 825 fortgesetzt.
  • Wenn keine weiteren gültigen Sektoren in dem Overhead-Bereich im Schritt 845 gefunden werden, dann ist die Umlagerung der logischen Sektoren innerhalb des Overhead-Bereichs abgeschlossen, wie es im Schritt 860 festgestellt wird. Der Hintergrundprozeß endet dann im Schritt 870.
  • Obwohl eine zusammenhängende Speicherung von Sektoren, die der gleichen Datei zugeordnet sind, innerhalb der Festkörperspeicherplatte nicht erforderlich ist, erfordern die oben beschriebenen Verfahren, daß eine vorgegebene Anzahl von der gerade überschriebenen Datei zugeordneten Sektoren in dem gleichen Block angeordnet sein müssen. Die Reihenfolge oder Nachbarschaft der betroffenen Sektoren innerhalb des Blocks ist irrelevant. Immer dann, wenn der nächste zu überschreibende Block nicht in dem aktuellen Block lokalisiert wird, ist ein Blocksprung erforderlich, wie es oben unter Bezugnahme auf 7 erörtert wurde.
  • Solange die Häufigkeit von Blocksprüngen geringer als ein bestimmter Schwellwert ist, sind die oben beschriebenen Verfahren in der Lage, ein kontinuierliches Überschreiben der Datei auszuführen. Die Häufigkeit von Blocksprüngen wird durch den Grad der Fragmentierung der Datei bestimmt. Der Schwellwert wird zum Teil durch die eingehende Datenrate und die Geschwindigkeit des Rückgewinnungsprozesses bestimmt.
  • Daten werden kontinuierlich bei einer effektiven Rate ri empfangen, wobei ri in Sektoren pro Sekunde ausgedrückt wird. Es muß ein ausreichender Overhead-Bereich vorhanden sein, um die eingehenden Daten während einer im ungünstig sten Fall auftretenden Zurückgewinnungszeitdauer unterzubringen. Die ungünstige Zurückgewinnungszeitdauer treclaim unterstellt, daß ein gesamter Quellblock von Daten in einen Reserveblock kopiert werden muß, und daß der Quellblock gelöscht werden muß, um einen neuen Reserveblock für zukünftige Zurückgewinnungsoperationen zur Verfügung zu stellen. Somit ist die Zeit zum Kopieren eines gesamten Quellblocks tcopy plus die Zeit, die zum Löschen eines Blocks erforderlich ist, terase gleich der ungünstigsten Zurückgewinnungszeitdauer, so daß treclaim = tcopy + terase Folglich muß es einen ausreichenden Overhead-Speicherbereich geben, um zumindest ri × treclaim Sektoren von Daten aufzunehmen.
  • Nebenbei sei angemerkt, daß treclaim nicht die unbehinderte ungünstigste Vordergrundzurückgewinnungszeit ist. Angenommen, daß der Zurückgewinnungsprozeß im Hintergrund abläuft, so wird treclaim durch die Zeitdauer, die zum Verarbeiten der Hintergrundzurückgewinnungsfunktionen zugewiesen ist, beeinflußt. Da der Zurückgewinnungsprozeß unterbrochen wird, um sich neuen Rahmen der eingehenden Daten zu widmen, ist treclaim auch zum Teil von der Rate der eingehenden Daten abhängig. Somit reflektiert treclaim die ungünstigste Zurückgewinnungszeit, wenn die Festkörperspeicherplatte im wesentlichen voll mit Daten ist und wenn Daten bei der Rate ri empfangen werden.
  • Bei einem Ausführungsbeispiel ist der Overhead-Bereich groß genug, um wenigstens ri × treclaim Sektoren von Daten aufzunehmen. Wenn jedoch der Overhead-Bereich gerade den minimalen erforderlichen Overhead-Raum schafft, so wird ein kontinuierliches Zurückgewinnen erforderlich sein, um den Overhead-Bereich für zusätzliche eingehende Daten freizugeben. Die kontinuierliche Zurückgewinnung des Overhead-Bereichs führt zu einer nachteiligen Beeinflussung der Durchsatzleistung der Festkörperspeicherplatte. Zusätzlich führt die kontinuierliche Zurückgewinnung zu einem Verbrauch größerer Leistungsmengen. Somit wird, um die Festkörperspeicherplattenleistung zu erhöhen und den Stromverbrauch abzu senken, bei einem Ausführungsbeispiel der Overhead-Bereich so gewählt, daß er Mehrfache m der Minimalanzahl von Sektoren aufnehmen kann (d. h., der Overhead-Bereich nimmt m × ri × treclaim Sektoren auf, wobei m > 1 ist). Bei einem Ausführungsbeispiel wird ein m von mindestens 4 gewählt, so daß der Overhead-Bereich ein Minimum von 4 × ri × treclaim Sektoren aufnimmt.
  • Um ein kontinuierliches Überschreiben zu erreichen, sollte die Anzahl der Blocksprünge, die beim Überschreiben einer Datei erforderlich werden, unter einer Sprungfrequenz gehalten werden. Diese Sprungfrequenz steht in einem umgekehrten Verhältnis zur Anzahl der aufeinanderfolgend verketteten Dateisektoren, die in demselben Block angeordnet sind. Ein Absenken der Sprungfrequenz kann ausgeführt werden, indem die Anzahl der aufeinanderfolgend verketteten Dateisektoren erhöht wird, die in dem gleichen Block angeordnet sind. Der Dateifragmentierungsgrad dient als ein Maß der Anzahl von in demselben Block angeordneten aufeinanderfolgend verketteten Dateisektoren. Somit hilft ein geringerer Dateifragmentierungsgrad, eine geringere Blocksprungfrequenz zu sichern. Eine bestimmte Schwellenanzahl von aufeinanderfolgend verketteten Sektoren muß innerhalb des gleichen Blocks angeordnet sein, um zu sichern, daß es stets einen Reserveblock für die Rückgewinnung und einen Overhead-Bereich, der für eine vorgegebene Rate eingehender Daten verfügbar ist, gibt.
  • Um zu sichern, daß der Dateifragmentierungsgrad gering genug ist, kann es folglich erforderlich werden, die Datei zu defragmentieren, bevor der kontinuierliche Überschreib- prozeß richtig funktionieren kann. Es ist nur die Fragmentierung derjenigen Datei relevant, die überschrieben wird. Bei einem Ausführungsbeispiel muß jeder Block mit Ausnahme des letzten Blocks, der zum Speichern eines Abschnitts der überschriebenen Datei verwendet wird, eine Minimalanzahl n aufeinanderfolgend verketteter Sektoren aufweisen. Bei diesem Ausführungsbeispiel wird das Überschreiben beendet, so bald das Ende der Datei erreicht ist. Folglich braucht der Block, der das Ende der Datei speichert, keine Minimalanzahl n aufeinanderfolgend verketteter Sektoren aufzuweisen.
  • Bei einem anderen Ausführungsbeispiel wird, sobald das Ende der Datei erreicht ist, der Überschreibprozeß fortgesetzt, in dem mit dem Überschreiben des ersten der Datei zugeordneten Sektors fortgefahren wird. Bei diesem Ausführungsbeispiel gibt es im Prinzip keinen ”letzten Block” für den Überschreibprozeß. Somit sollte jeder Block, in dem ein Abschnitt der Datei gespeichert ist, die Minimalzahl n aufeinanderfolgend verketteter Sektoren aufweisen.
  • Bei einem Ausführungsbeispiel ist die Schwellanzahl n größer als oder gleich der Maximalanzahl von Sektoren von Daten, die in einer ungünstigsten Säuberungszeitperiode empfangen werden können. Mit anderen Worten, es ist n ≥ ri × treclaim. Die Datenrate ri kann bestimmt werden aus
    Figure 00290001
  • Beispielsweise ist eine 1 Kb/Sekunde-Datenrate äquivalent einer 2 Sektoren/Sekunde-Datenrate, sofern 512-Byte-Sektoren verwendet werden.
  • Man betrachte ein Beispiel, bei dem das Verfahren zum Ausführen eines kontinuierlichen Überschreibens verwendet wird, um Audiodaten zu speichern. Audiodaten werden als Rahmen von 84 Bytes empfangen, welche in einem umlaufenden Puffer gespeichert werden. Ein Audiorahmen wird alle 40 ms empfangen. Somit beträgt die eingehende Datenrate
    Figure 00290002
    oder ungefähr 2 kB/s. Angenommen, daß die Festkörperspeicherplatte für 512-Byte-Sektoren konfiguriert ist, so ist
    Figure 00290003
  • Für eine ungünstigste Rückgewinnungszeit von treclaim = 5,66 Sekunden könnten ungefähr 23 Sektoren von Daten während einer ungünstigsten Zurückgewinnungszeitdauer empfangen wer den (d. h. ri × treclaim = 4 Sektoren/Sekunde × 5,66 Sekunden = 23 Sektoren).
  • Bei diesem Beispiel müssen für n > ri × treclaim mindestens 23 aufeinanderfolgende verkettete Sektoren in jedem Block, in dem ein Abschnitt der Datei gespeichert ist, gespeichert werden (mit Ausnahme gegebenenfalls des letzten Blocks, wie oben erläutert wurde). Somit sollte gegebenenfalls die Datei defragmentiert werden, um zu sichern, daß nicht weniger als 23 aufeinanderfolgende verkettete Sektoren in jedem Block angeordnet sind, in dem ein Abschnitt der Datei gespeichert ist.

Claims (8)

  1. Verfahren zum Überschreiben einer Datei, die eine Mehrzahl von Rahmen von Daten aufweist und in einem nicht-flüchtigen Speicher mit einer Mehrzahl von einzeln löschbaren Blöcken gespeichert ist, wobei jedem Block eine Mehrzahl von Sektoren zugewiesen ist, wobei für eine Mehrzahl von Rahmen jeweils: a) der Rahmen empfangen wird (320; 720); b) ein logischer Sektor bestimmt wird (340; 725), in den der Rahmen geschrieben werden soll, wobei der logische Sektor einem ersten Sektor entspricht, der bei einem ersten Offset in einem ersten Block mit einer ersten logischen Blocknummer angeordnet ist, wobei ein Teil der Datei in dem ersten Sektor gespeichert ist; c) der Rahmen in einen zweiten Sektor geschrieben wird (340; 740), wobei der zweite Sektor bei einem zweiten Offset in einem Reserveblock angeordnet ist, wobei das erste und das zweite Offset gleich sind; und d) der in dem Reserveblock angeordnete zweite Sektor als gültig und der in dem ersten Block angeordnete erste Sektor als ungültig markiert wird (745); und wobei die ersten Sektoren jedes der mehreren Rahmen in dem ersten Block angeordnet sind, wobei nach dem Ausführen der Schritte a) bis d) für jeden der mehreren Rahmen: e) eine logische Blocknummer des Reserveblocks auf die erste logische Blocknummer aktualisiert wird (350; 550); und f) der erste Block zurückgewonnen wird (525, 530, 560).
  2. Verfahren nach Anspruch 1, wobei der Schritt a) ferner den Schritt aufweist: Speichern des Rahmens von Daten in einem umlaufenden Puffer.
  3. Verfahren nach Anspruch 1, wobei der Schritt c) ferner den Schritt aufweist: Kopieren von einer Startadresse des Rahmens vorhergehenden Daten von dem ersten Sektor des ersten Blocks zu einem gleichen entsprechenden Ort in dem Reserveblock, sofern der erste Sektor der anfängliche zu überschreibende Sektor ist und sofern die Startadresse nicht mit einer Sektorbegrenzung zusammenfällt.
  4. Verfahren nach Anspruch 1, wobei Schritt f) ferner die Schritte aufweist: f1) Kopieren (525) jedes gültigen Sektors, der in dem ersten Block gespeichert ist, zu einem gleichen zugehörigen Offset innerhalb des Reserveblocks; und f2) Löschen (560) des ersten Blocks.
  5. Verfahren nach Anspruch 1, wobei der Schritt c) ferner die Schritte aufweist: Bestimmen eines Rahmen-Offsets innerhalb des logischen Sektors, in den der Rahmen geschrieben werden soll; und Schreiben des Rahmens zu dem Rahmen-Offset innerhalb des zweiten Sektors.
  6. Verfahren nach Anspruch 1, wobei die Daten Audiodaten sind.
  7. Verfahren nach Anspruch 1, wobei der nicht-flüchtige Speicher ein Flash-Speicher ist.
  8. Verfahren nach einem der Ansprüche 1–7, dadurch gekennzeichnet, dass dann, wenn nach dem Empfangen des Rahmens im Schritt a) und dem Bestimmen des logischen Sektors im Schritt b) (720, 725) noch kein Reserveblock verfügbar ist (735 – Nein), in den der Rahmen geschrieben werden könnte, der Rahmen vorübergehend in einen Overhead-Bereich gespeichert wird (760) und der in dem ersten Block angeordnete erste Sektor als ungültig markiert wird (745); wobei nach dem Ausführen der Schritte a) und b) für jeden der mehreren Rahmen und ihrer vorübergehenden Speicherung die vorübergehend gespeicherten Rahmen aus dem Overhead-Bereich in den Reserveblock umgelagert werden (790), indem für jeden umzulagernden Rahmen im Schritt c) der vorübergehend gespeicherte Rahmen aus dem Overhead-Bereich in einen zweiten Sektor kopiert wird (835), wobei der zweite Sektor sich bei einem zweiten Offset in dem Reserveblock befindet, wobei das erste und das zweite Offset gleich sind.
DE19782041A 1996-09-30 1997-09-23 Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher Expired - Fee Related DE19782041B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/722,979 1996-09-30
US08/722,979 US5860124A (en) 1996-09-30 1996-09-30 Method for performing a continuous over-write of a file in nonvolatile memory
PCT/US1997/017641 WO1998014879A1 (en) 1996-09-30 1997-09-23 Method for performing a continuous over-write of a file in a nonvolatile memory

Publications (1)

Publication Number Publication Date
DE19782041B4 true DE19782041B4 (de) 2009-12-03

Family

ID=24904286

Family Applications (2)

Application Number Title Priority Date Filing Date
DE19782041A Expired - Fee Related DE19782041B4 (de) 1996-09-30 1997-09-23 Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher
DE19782041T Pending DE19782041T1 (de) 1996-09-30 1997-09-23 Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE19782041T Pending DE19782041T1 (de) 1996-09-30 1997-09-23 Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher

Country Status (8)

Country Link
US (1) US5860124A (de)
KR (1) KR100324028B1 (de)
CN (1) CN1129848C (de)
AU (1) AU4803897A (de)
DE (2) DE19782041B4 (de)
GB (1) GB2333620B (de)
TW (1) TW346569B (de)
WO (1) WO1998014879A1 (de)

Families Citing this family (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845313A (en) * 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US6978342B1 (en) 1995-07-31 2005-12-20 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US6728851B1 (en) * 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US8171203B2 (en) * 1995-07-31 2012-05-01 Micron Technology, Inc. Faster write operations to nonvolatile memory using FSInfo sector manipulation
US6021413A (en) * 1997-04-01 2000-02-01 The University Of Illinois Board Of Trustees Application-directed variable-granularity caching and consistency management
ATE210878T1 (de) * 1998-04-01 2001-12-15 Hewlett Packard Co Datenspeichergerät und verfahren
US6226728B1 (en) * 1998-04-21 2001-05-01 Intel Corporation Dynamic allocation for efficient management of variable sized data within a nonvolatile memory
JP2000227871A (ja) * 1999-02-05 2000-08-15 Seiko Epson Corp 不揮発性記憶装置、その制御方法、および、情報記録媒体
US6148354A (en) 1999-04-05 2000-11-14 M-Systems Flash Disk Pioneers Ltd. Architecture for a universal serial bus-based PC flash disk
GB2349242A (en) * 1999-04-20 2000-10-25 Inventec Corp Flash memory architecture and rewrite method
KR100544175B1 (ko) * 1999-05-08 2006-01-23 삼성전자주식회사 링킹 타입 정보를 저장하는 기록 매체와 결함 영역 처리 방법
CN1088218C (zh) * 1999-11-14 2002-07-24 邓国顺 用于数据处理系统的快闪电子式外存储方法及其装置
US7167944B1 (en) 2000-07-21 2007-01-23 Lexar Media, Inc. Block management for mass storage
KR20020044907A (ko) * 2000-12-07 2002-06-19 윤종용 다중 플래쉬 메모리 시스템에서의 프로그램 운용 방법
US6675317B2 (en) * 2000-12-14 2004-01-06 International Business Machines Corporation Method and system for determining erase procedures run on a hard drive
US6763424B2 (en) * 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US6715033B2 (en) 2001-03-06 2004-03-30 Hewlett-Packard Development Company, L.C. Method of and apparatus for tracking appended data on storage medium
US6571326B2 (en) 2001-03-08 2003-05-27 Intel Corporation Space allocation for data in a nonvolatile memory
KR100389867B1 (ko) * 2001-06-04 2003-07-04 삼성전자주식회사 플래시 메모리 관리방법
GB0123410D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Memory system for data storage and retrieval
GB0123421D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Power management system
GB0123417D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Improved data processing
GB0123415D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
US7231643B1 (en) 2002-02-22 2007-06-12 Lexar Media, Inc. Image rescue system including direct communication between an application program and a device driver
US20040059604A1 (en) * 2002-07-29 2004-03-25 Zaleski John R. Patient medical parameter acquisition and distribution system
US8336044B2 (en) * 2002-10-09 2012-12-18 Rpx Corporation Method and system for deploying a software image
US7024581B1 (en) 2002-10-09 2006-04-04 Xpoint Technologies, Inc. Data processing recovery system and method spanning multiple operating system
US7174440B2 (en) * 2002-10-28 2007-02-06 Sandisk Corporation Method and apparatus for performing block caching in a non-volatile memory system
US6901498B2 (en) * 2002-12-09 2005-05-31 Sandisk Corporation Zone boundary adjustment for defects in non-volatile memories
US6944063B2 (en) * 2003-01-28 2005-09-13 Sandisk Corporation Non-volatile semiconductor memory with large erase blocks storing cycle counts
JP3928724B2 (ja) * 2003-02-20 2007-06-13 ソニー株式会社 記録媒体の記録制御方法および記録媒体の記録制御装置
US7117326B2 (en) * 2003-06-26 2006-10-03 Intel Corporation Tracking modifications to a memory
DE10349595B3 (de) * 2003-10-24 2004-12-09 Hyperstone Ag Verfahren zum Schreiben von Speichersektoren in einem blockweise löschbaren Speicher
WO2005041050A1 (ja) * 2003-10-27 2005-05-06 Matsushita Electric Industrial Co., Ltd. 記録媒体、データ処理装置及びデータ処理方法
US7433993B2 (en) * 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
US7383375B2 (en) 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US20050144363A1 (en) * 2003-12-30 2005-06-30 Sinclair Alan W. Data boundary management
WO2005066792A2 (en) * 2003-12-30 2005-07-21 Sandisk Corporation Non-volatile memory and method with memory planes alignment
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US7607177B2 (en) * 2004-02-23 2009-10-20 Micron Technology, Inc. Secure compact flash
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
US7370166B1 (en) 2004-04-30 2008-05-06 Lexar Media, Inc. Secure portable storage device
US7464306B1 (en) * 2004-08-27 2008-12-09 Lexar Media, Inc. Status of overall health of nonvolatile memory
US7594063B1 (en) * 2004-08-27 2009-09-22 Lexar Media, Inc. Storage capacity status
JP4192129B2 (ja) * 2004-09-13 2008-12-03 株式会社東芝 メモリ管理装置
US20060059296A1 (en) * 2004-09-16 2006-03-16 M-Systems Flash Disk Pioneers, Ltd. Emulating small block size of flash memory
US20060107014A1 (en) * 2004-11-17 2006-05-18 Fandrich Mickey L Managing reclamation for removable data devices
JP4738038B2 (ja) * 2005-03-25 2011-08-03 株式会社東芝 メモリカード
US7631162B2 (en) 2005-10-27 2009-12-08 Sandisck Corporation Non-volatile memory with adaptive handling of data writes
US7509471B2 (en) * 2005-10-27 2009-03-24 Sandisk Corporation Methods for adaptively handling data writes in non-volatile memories
TWI308722B (en) * 2005-12-09 2009-04-11 Wistron Corp Method for making a bootable usb storage device
US7831783B2 (en) 2005-12-22 2010-11-09 Honeywell International Inc. Effective wear-leveling and concurrent reclamation method for embedded linear flash file systems
KR100706808B1 (ko) * 2006-02-03 2007-04-12 삼성전자주식회사 쓰기 버퍼로서 동작하는 불 휘발성 메모리를 구비한 데이터저장 장치 및 그것의 블록 회수 방법
DE102006013758A1 (de) * 2006-03-24 2007-09-27 Robert Bosch Gmbh Verfahren zum Betreiben einer Speichereinrichtung
KR100809319B1 (ko) 2006-09-13 2008-03-05 삼성전자주식회사 플래시 메모리에서 연속한 섹터 쓰기 요청에 대해 원자성을제공하는 장치 및 방법
US8370562B2 (en) * 2007-02-25 2013-02-05 Sandisk Il Ltd. Interruptible cache flushing in flash memory systems
US9207876B2 (en) 2007-04-19 2015-12-08 Microsoft Technology Licensing, Llc Remove-on-delete technologies for solid state drive optimization
US9396103B2 (en) * 2007-06-08 2016-07-19 Sandisk Technologies Llc Method and system for storage address re-mapping for a memory device
FI120422B (fi) * 2007-07-02 2009-10-15 Tellabs Oy Menetelmä ja laitteita muutoslokin kompressoimiseksi käyttäen flash-transaktioita
WO2009073949A1 (en) * 2007-12-13 2009-06-18 Redknee Inc. Method and system for storage
US9053005B2 (en) * 2008-01-02 2015-06-09 Micron Technology, Inc. Recycled version number values in flash memory
KR100957445B1 (ko) 2008-01-14 2010-05-11 한양대학교 산학협력단 효율적인 덮어쓰기를 위한 파일 시스템 및 기억 장치그리고 효율적인 덮어쓰기 방법
US20090271562A1 (en) * 2008-04-25 2009-10-29 Sinclair Alan W Method and system for storage address re-mapping for a multi-bank memory device
JP4461187B1 (ja) * 2008-12-24 2010-05-12 株式会社東芝 不揮発性半導体メモリドライブ装置、情報処理装置および不揮発性半導体メモリドライブ装置における記憶領域の管理方法
US8040744B2 (en) * 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US20100174845A1 (en) * 2009-01-05 2010-07-08 Sergey Anatolievich Gorobets Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques
US8244960B2 (en) * 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8700840B2 (en) * 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8094500B2 (en) * 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US8473669B2 (en) * 2009-12-07 2013-06-25 Sandisk Technologies Inc. Method and system for concurrent background and foreground operations in a non-volatile memory array
US8452911B2 (en) 2010-09-30 2013-05-28 Sandisk Technologies Inc. Synchronized maintenance operations in a multi-bank storage system
KR101431398B1 (ko) * 2010-11-15 2014-08-19 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 자동 통지자 할당
US9514838B2 (en) * 2011-05-31 2016-12-06 Micron Technology, Inc. Apparatus including memory system controllers and related methods for memory management using block tables
US8762627B2 (en) 2011-12-21 2014-06-24 Sandisk Technologies Inc. Memory logical defragmentation during garbage collection
US9348746B2 (en) 2012-12-31 2016-05-24 Sandisk Technologies Method and system for managing block reclaim operations in a multi-layer memory
US9223693B2 (en) 2012-12-31 2015-12-29 Sandisk Technologies Inc. Memory system having an unequal number of memory die on different control channels
US9734911B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for asynchronous die operations in a non-volatile memory
US9336133B2 (en) 2012-12-31 2016-05-10 Sandisk Technologies Inc. Method and system for managing program cycles including maintenance programming operations in a multi-layer memory
US9734050B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for managing background operations in a multi-layer memory
US9465731B2 (en) 2012-12-31 2016-10-11 Sandisk Technologies Llc Multi-layer non-volatile memory system having multiple partitions in a layer
US8873284B2 (en) 2012-12-31 2014-10-28 Sandisk Technologies Inc. Method and system for program scheduling in a multi-layer memory
US9483397B2 (en) * 2013-07-16 2016-11-01 Intel Corporation Erase management in memory systems
US9400745B2 (en) * 2013-11-06 2016-07-26 International Business Machines Corporation Physical address management in solid state memory
US10114562B2 (en) 2014-09-16 2018-10-30 Sandisk Technologies Llc Adaptive block allocation in nonvolatile memory
US10120613B2 (en) 2015-10-30 2018-11-06 Sandisk Technologies Llc System and method for rescheduling host and maintenance operations in a non-volatile memory
US10133490B2 (en) 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US20170123666A1 (en) * 2015-10-30 2017-05-04 Sandisk Technologies Inc. System and method for managing maintenance scheduling in a non-volatile memory
US10042553B2 (en) 2015-10-30 2018-08-07 Sandisk Technologies Llc Method and system for programming a multi-layer non-volatile memory having a single fold data path
US9778855B2 (en) 2015-10-30 2017-10-03 Sandisk Technologies Llc System and method for precision interleaving of data writes in a non-volatile memory
US9817593B1 (en) 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
US20180054374A1 (en) * 2016-08-19 2018-02-22 Andes Technology Corporation Trace information encoding apparatus, encoding method thereof, and readable computer medium
JP6642337B2 (ja) * 2016-08-29 2020-02-05 京セラドキュメントソリューションズ株式会社 情報処理装置及びプログラム
US11422726B1 (en) * 2018-05-01 2022-08-23 Amazon Technologies, Inc. Efficient storage device data move operation based on priority of garbage collection command
KR20210120240A (ko) * 2020-03-26 2021-10-07 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5473569A (en) * 1994-08-01 1995-12-05 Motorola, Inc. Method for operating a flash memory
EP0704803A1 (de) * 1994-09-30 1996-04-03 Alcatel SEL Aktiengesellschaft Verfahren zur Speicherverwaltung eines Flash-Speichers
EP0712067A2 (de) * 1994-11-09 1996-05-15 Mitsubishi Denki Kabushiki Kaisha Flashspeicherkarte
US5544356A (en) * 1990-12-31 1996-08-06 Intel Corporation Block-erasable non-volatile semiconductor memory which tracks and stores the total number of write/erase cycles for each block

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5590300A (en) * 1991-03-05 1996-12-31 Zitel Corporation Cache memory utilizing address translation table
US5535369A (en) * 1992-10-30 1996-07-09 Intel Corporation Method for allocating memory in a solid state memory disk
US5581723A (en) * 1993-02-19 1996-12-03 Intel Corporation Method and apparatus for retaining flash block structure data during erase operations in a flash EEPROM memory array
US5475693A (en) * 1994-12-27 1995-12-12 Intel Corporation Error management processes for flash EEPROM memory arrays
JPH08212019A (ja) * 1995-01-31 1996-08-20 Mitsubishi Electric Corp 半導体ディスク装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5544356A (en) * 1990-12-31 1996-08-06 Intel Corporation Block-erasable non-volatile semiconductor memory which tracks and stores the total number of write/erase cycles for each block
US5473569A (en) * 1994-08-01 1995-12-05 Motorola, Inc. Method for operating a flash memory
EP0704803A1 (de) * 1994-09-30 1996-04-03 Alcatel SEL Aktiengesellschaft Verfahren zur Speicherverwaltung eines Flash-Speichers
EP0712067A2 (de) * 1994-11-09 1996-05-15 Mitsubishi Denki Kabushiki Kaisha Flashspeicherkarte

Also Published As

Publication number Publication date
KR100324028B1 (ko) 2002-02-19
CN1129848C (zh) 2003-12-03
US5860124A (en) 1999-01-12
GB2333620A (en) 1999-07-28
DE19782041T1 (de) 1999-09-23
CN1238846A (zh) 1999-12-15
GB2333620B (en) 2001-05-09
GB9907377D0 (en) 1999-05-26
WO1998014879A1 (en) 1998-04-09
AU4803897A (en) 1998-04-24
KR20000048766A (ko) 2000-07-25
TW346569B (en) 1998-12-01

Similar Documents

Publication Publication Date Title
DE19782041B4 (de) Verfahren zum Durchführen eines kontinuierlichen Überschreibens einer Datei in einem nicht-flüchtigen Speicher
DE60316171T2 (de) Automatischer abnutzungsausgleich in einem nicht-flüchtigen speichersystem
DE69034227T2 (de) EEprom-System mit Blocklöschung
DE60030876T2 (de) Bereichsverwaltung eines nichtflüchtigen Speichers mit hoher Kapazität
DE69839126T2 (de) Verschiebung aufeinander folgender sektoren innerhalb eines datenblocks in einem flash-massenspeicher
DE69635962T2 (de) Flash-Speicher-Massenspeichersystem und Verfahren dafür
DE69726088T2 (de) Methode und Apparat zur Speicherverwaltung
DE60317551T2 (de) Aufrechterhaltung gleichförmiger löschhäufigkeit in einem nichtflüchtigen speichersystem
DE69534527T2 (de) Verfahren zur Verwendung von nicht-aneinandergrenzenden reservierten Speicherplatz zur Datenmigration in einem hierarchischen redundanten Datenspeichersystem
DE102012208141B4 (de) Ausgleich nachlassender Funktionsfähigkeit
DE102008057219B4 (de) Verfahren zum Betreiben eines Solid-State-Speichersystems, Solid-State-Speichersystem und Computersystem
DE60319407T2 (de) Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems
DE60035780T2 (de) Schaltung für plattenantriebskontroller und verfahren zur überschlagung von defekten oder ungewünschten sektoren
DE102005031525A1 (de) Verfahren und System zur Steuerung eines Flashspeichers und Speichersystem
DE102009034651A1 (de) Prozess und Verfahren zur Abbildung von logischen Adressen auf physische Adressen in Festkörperplatten
DE102006003261A1 (de) Speichersystem und Verfahren zur Datenzusammenführung
DE102005063250A1 (de) Datenspeicherungssteuersystem, Speicher- und Rechnersystem und Betriebsverfahren
EP2923261B1 (de) VERFAHREN ZUR STEUERUNG EINES FLASH-SPEICHERS ZUR MASSENSPEICHERUNG, DER VON EINEM AN EINEN HOST ANSCHLIEßBAREN KOMMUNIKATIONSGERÄT UMFASST IST, UND COMPUTERPROGRAMMPRODUKT ZUR AUSFÜHRUNG DES VERFAHRENS
DE112010003577T5 (de) Datenverwaltung in Halbleiterspeicher-Einheiten und mehrstufigen Speichersystemen
DE602004004494T2 (de) Datenverwaltungs-Vorrichtung und -Methode für einen Flash-Speicher
DE102007006307A1 (de) Verfahren zum Betreiben eines nichtflüchtigen Speicherelements, Aufzeichnungsmedium und nichtflüchtigen Speicherelement
DE112020002792B4 (de) Verschleissorientierte blockmodusumwandlung in nichtflüchtigen speichern
DE112010004667T5 (de) Speichervorrichtung und Speichersteuerung
DE102009046444A1 (de) An die Software angepasste Abnutzungsausgleichung
DE102009048179A1 (de) Prozess und Verfahren für eine Löschstrategie in Festkörperplatten

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8607 Notification of search results after publication
8364 No opposition during term of opposition
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20110401