-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf das Gebiet der Massenspeicher
für Computer.
Insbesondere bezieht sich die vorliegende Erfindung auf eine Architektur
zum Ersetzen einer Festplatte durch einen nichtflüchtigen
Halbleiterspeicher und besonders einen Flash-Speicher.
-
Stand der Technik
-
Computer
verwenden üblicherweise
sich drehende magnetische Medien als Massenspeicher für Dokumente,
Daten, Programme und Informationen. Obwohl weithin verwendet und
allgemein anerkannt, weisen derartige Festplattenlaufwerke eine Vielzahl
von Mängeln
auf. Aufgrund der Drehung der Platte kommt es zu einer inhärenten Latenz-
oder Wartezeit beim Extrahieren von Informationen aus einem Festplattenlaufwerk.
-
Weitere
Probleme sind vor allem bei tragbaren Computer schwerwiegend. Insbesondere
können Festplatten
vielen Arten von physikalischen Beanspruchungen und Stößen nicht
standhalten, denen ein tragbarer Computer ausgesetzt ist. Außerdem verbraucht
der Motor zum Drehen der Platte erhebliche Mengen Energie, was die
Batterielebensdauer von tragbaren Computern verringert.
-
Halbleiterspeicher
sind eine ideale Alternative als Ersatz für ein Festplattenlaufwerk für die Massenspeicherung,
weil sie die vorstehend genannten Probleme lösen können. Mögliche Lösungen zum Ersatz eines Festplattenlaufwerks
durch einen Halbleiterspeicher sind vorgeschlagen worden. Damit
ein solches System wirklich sinnvoll ist, muss der Speicher nichtflüchtig und änderbar
sein. Die Erfinder haben festgestellt, dass Flash-Speicher für einen
solchen Ersatz bevorzugt werden.
-
Ein
Flash-Speicher ist eine Transistor-Speicherzelle, die mittels heißer Elektronen,
Source-Injektion oder Tunneln programmierbar und durch Fowler-Nordheim-Tunneln
löschbar
ist. Das Programmieren und Löschen
einer solchen Speicherzelle erfordert das Durchleiten von Strom
durch die dielektrische Schicht, die die Floating-Gate-Elektrode
umgibt. Daher weisen diese Speicherarten eine begrenzte Anzahl von
Lösch-Schreib- Zyklen auf. Schließlich zersetzt
sich das dielektrische Material. Die Hersteller von Flash-Zellen
geben die Grenze für die
Anzahl der Lösch-Schreib-Zyklen
zwischen 100.000 und 1.000.000 an.
-
Eine
Anforderung für
den erfolgreichen Einsatz einer Halbleiter-Massenspeichervorrichtung
anstelle einer Festplatten-Massenspeichervorrichtung mit einem sich
drehenden Datenträger
ist die, dass sie für
den Designer und den Benutzer eines Systems mit einer solchen Vorrichtung
transparent sein muss. Mit anderen Worten, der Designer oder Benutzer
eines Computers mit einer solchen Halbleiter-Massenspeichervorrichtung
könnte
einfach die Festplatte ausbauen und sie durch eine Halbleiter-Massenspeichervorrichtung
ersetzen. Alle gegenwärtig
erhältliche
handelsübliche
Software sollte auf einem System mit einer solchen Halbleiter-Massenspeichervorrichtung
laufen, ohne dass Änderungen nötig sind.
-
SanDisk
hat auf der Silicon Valley PC Design Conference am 9. Juli 1991
eine Architektur für
einen Halbleiter-Massenspeicher mit Flash-Speicher vorgeschlagen.
Dieses Massenspeichersystem umfasst Lese-Schreib-Blöcke mit
einer Größe von 512
Byte entsprechend den üblichen
Festplatten-Sektorgrößen. Frühere Entwürfe wiesen
eine Architektur „Löschen vor
Schreiben" auf.
Um eine Datei auf dem Datenträger
zu aktualisieren, musste bei diesem Verfahren der Datenträger, wenn
der physikalische Ort auf dem Datenträger zuvor programmiert worden
war, zuerst gelöscht
werden, ehe die neuen Daten neu programmiert werden konnten.
-
Dieses
Verfahren hätte
eine deutliche Verschlechterung der Durchsatzleistung des Gesamtsystems
zur Folge. Wenn ein Host eine neue Datei auf das Speichermedium
schreibt, gibt er eine mit dieser Datei verbundene logische Blockadresse
an die Peripherie-Speichervorrichtung. Die Speichervorrichtung übersetzt
diese angegebene logische Blockadresse in eine tatsächliche
physikalische Blockadresse auf dem Speichermedium und führt den Schreibvorgang
aus. Bei magnetischen Festplattenlaufwerken können die neuen Daten ohne Änderung an
dem Medium über
die vorherigen alten Daten geschrieben werden. Sobald daher die
physikalische Blockadresse von der Steuerung aus der angegebenen
logischen Blockadresse berechnet ist, schreibt sie einfach die Datei
an den betreffenden Ort. Bei Halbleiterspeichern muss, wenn der
mit der berechneten physikalischen Blockadresse verbundene Ort zuvor
programmiert war, der Ort gelöscht
werden, bevor dieser Block mit den neuen Daten neu programmiert
werden kann. Nach der bekannten Technik ist bei der Löschen-vor-Schreiben-Architektur
die Korrelation zwischen der vom Host angegebenen logischen Blockadresse
eine Eins-zu-Eins-Entsprechung mit der physikalischen Blockadresse
auf dem Medium. Dieses Verfahren weist zahlreiche Mängel auf.
Erstens führt
es eine Verzögerung
in der Ausführung
aufgrund des Löschvorgangs
vor dem Neuprogrammieren der geänderten
Information ein. Bei Halbleiter-Flash-Speichern ist das Löschen ein
sehr langsamer Vorgang.
-
Zweitens
speichern Benutzer von Festplatten typischerweise zwei Arten von
Informationen, von denen eine selten geändert und die andere häufig geändert wird.
Ein auf dem System eines Benutzers gespeichertes handelsübliches
Tabellenkalkulations- oder
Textverarbeitungs-Softwareprogramm wird nur selten, wenn überhaupt,
geändert.
Die Tabellendateien oder Textverarbeitungsdokumente hingegen werden
häufig
geändert.
Daher unterliegen verschiedene Sektoren einer Festplatte einer erheblich
unterschiedlichen Nutzung, was die Häufigkeit der Änderung
der darauf gespeicherten Informationen angeht. Während diese Ungleichheit keine
Auswirkungen auf eine Festplatte hat, weil diese unempfindlich gegenüber Datenänderungen
ist, kann dieser Unterschied bei einer Flash-Speichervorrichtung
dazu führen, dass
Bereiche des Massenspeichers abnutzen und verschleißen und
deutlich früher
als andere Bereiche des Massenspeichers unbrauchbar werden.
-
In
einer weiteren Architektur haben die Erfinder zuvor eine Lösung zur
Speicherung einer Tabelle vorgeschlagen, die die logische Blockadresse
mit der physikalischen Blockadresse in Korrelation setzt. Die Erfindungen
in Zusammenhang mit dieser Lösung sind
in US-Patentanmeldung Nr. 08/038.668 vom 26. März 1993, jetzt
US-Patent Nr. 5.388.083 , sowie in US-Patentanmeldung
Nr. 08/037.893, jetzt
US-Patent
Nr. 5.479.638 , ebenfalls vom 26. März 1993, beschrieben.
-
Die
frühere
Lösung
der Erfinder beschreibt zwei primäre Algorithmen und eine zugehörige Hardware-Architektur
für eine
Halbleiter-Massenspeichervorrichtung. Der Begriff „Datei" in diesem Patentdokument
bezieht sich auf eine beliebige Computerdatei einschließlich handelsüblicher
Software, Benutzerprogramme, Textverarbeitungsdokumente, Tabellendateien
und dergleichen. Der erste Algorithmus nach der früheren Lösung sieht
eine Einrichtung zur Vermeidung eines Löschvorgangs vor, wenn eine
geänderte
Datei auf die Massenspeichervorrichtung zurückgeschrieben wird. Stattdessen
wird kein Löschen durchgeführt, und
die geänderte
Datei wird in einen leeren Abschnitt des Massenspeichers geschrieben.
-
Die
Halbleiter-Massenspeicherarchitektur weist Blöcke mit einer Größe auf,
die den Sektorgrößen handelsüblicher
Festplatten entspricht. Die Blöcke
sind einzeln löschbar.
Bei einer Ausführungsform kann
der Halbleiter-Massenspeicher eine sich drehende Festplatte ohne
Auswirkung für
den Benutzer ersetzen, so dass dieses Ersetzen transparent ist. Eine
Einrichtung ist vorgesehen, um den Löschen-vor-Schreiben-Zyklus
bei jedem Ändern
der in dem Massenspeicher gespeicherten Informationen zu vermeiden.
-
Nach
dem ersten Algorithmus werden Löschzyklen
durch Programmieren einer geänderten Datei
in einen leeren Block vermieden. Dies wäre normalerweise bei Verwendung
herkömmlicher
Massenspeicher nicht möglich,
weil der Zentralprozessor und handelsübliche Software in herkömmlichen Computersystemen
nicht dazu eingerichtet sind, die sich kontinuierlich ändernden
physikalischen Speicherorte von Dateien zu verfolgen. Die frühere Lösung umfasst
eine programmierbare Map zur Aufrechterhaltung der Korrelation zwischen
der logischen Adresse und der physikalischen Adresse der aktualisierten
Dateien.
-
Alle
Flags und die Tabelle mit der Zuordnung der logischen Blockadressen
zu den physikalischen Blockadressen werden in einer Anordnung von CAM-Zellen
verwaltet. Die Verwendung von CAM-Zellen erlaubt eine sehr schnelle
Bestimmung der gewünschten
physikalischen Adresse in dem Massenspeicher, im Allgemeinen innerhalb
von ein oder zwei Taktzyklen. Leider erfordern CAM-Zellen bekanntlich
jedoch mehrere Transistoren, meist sechs Stück. Daher muss ein integrierter
Schaltkreis für
eine bestimmte Speichergröße unter
Verwendung von CAM-Speicher für
die Tabellen und Flags deutlich größer sein als ein Schaltkreis
mit anderen Einrichtungen nur zur Aufnahme des Speichers.
-
Die
Erfinder haben eine weitere Lösung
für dieses
Problem vorgeschlagen, die in US-Patentanmeldung Nr. 08/131.495,
jetzt
US-Patent Nr. 5.485.595 ,
vom 4. Oktober 1993 beschrieben ist.
-
Diese
weitere frühere
Lösung
derselben Erfinder bezieht sich ebenfalls auf eine nichtflüchtige Speichervorrichtung.
Die Vorrichtung ist außerdem so
konfiguriert, dass die Durchführung
eines Löschen-vor-Schreiben-Zyklus
bei jeder Änderung
der Datei vermieden wird, indem die Korrelation zwischen der logischen
Blockadresse und der physikalischen Blockadresse in einem flüchtigen
Speicherverwaltungs-RAM erhalten bleibt. Darüber hinaus vermeidet diese
Erfindung den Verwaltungsaufwand, der mit CAM-Zellen-Ansätzen verbunden
ist, die zusätzliche
Schaltungen erfordern.
-
Wie
die vorstehend angegebenen Lösungen derselben
Erfinder umfasst die Vorrichtung Schaltungen zur Ausführung der
beiden primären
Algorithmen und eine zugehörige
Hardware-Architektur für
eine Halbleiter-Massenspeichervorrichtung. Darüber hinaus wird die CAM-Zelle
bei dieser früheren
Lösung durch
Verwendung von RAM-Zellen
vermieden.
-
Das
Lesen erfolgt bei dieser früheren
Lösung durch
Weitergeben der logischen Blockadresse an den Speicher. Das System
vergleicht nacheinander die gespeicherten logischen Blockadressen,
bis es eine Entsprechung findet. Danach wird die Datei mit dem digitalen
System verbunden. Daher leidet die von dieser Lösung gebotene Leistung, weil
eventuell alle Speicherorte abgesucht und mit der gewünschten
logischen Blockadresse verglichen werden müssen, ehe der physikalische
Speicherort der gewünschten
Information bestimmt werden kann.
-
Das
US-Patent 5.404.485 von
Ban beschreibt einen Flash-Speicher mit einem virtuellen Mapping-System,
das eine virtuelle Speicher-Map umfasst, um den Speicherort der
Daten in dem Flash-Speicher zu verfolgen. Außerdem umfasst es eine Verwaltungssteuerung,
die eine Datei durch Neuschreiben der vollständigen aktualisierten Datei in
einem neuen freien Platz aktualisiert.
-
Benötigt wird
eine Halbleiter-Festplattenarchitektur, die einen schnellen Zugriff
auf gespeicherte Daten ohne den übermäßigen Verwaltungsaufwand der
CAM-Zellenspeicherung ermöglicht.
-
Aspekte
der vorliegenden Erfindung sind in den anliegenden selbstständigen Ansprüchen festgelegt.
-
Eine
Ausführungsform
stellt eine nichtflüchtige
Speichervorrichtung bereit. Die Vorrichtung ist so beschaffen, dass
ein Löschen-vor-Schreiben
bei jeder Änderung
einer Datei vermieden wird. Um den mit CAM-Zellen verbundenen Verwaltungsaufwand zu
vermeiden, wird bei diesem Ansatz außerdem ein RAM-Array benutzt.
-
Das
Host-System verwaltet die Organisation der Daten auf dem Massenspeicher
mittels einer logischen Blockadresse. Das RAM-Array ist so aufgebaut,
dass es mit derselben Adresse wie die logischen Blockadressen (LBA)
des Hosts adressiert werden kann. Jeder so adressierbare Ort im
RAM enthält
ein Feld mit der physikalischen Adresse der vom Host erwarteten
Daten in dem nichtflüchtigen Massenspeicher.
Diese physikalische Blockadressen-Information (PBA-Information)
muss im nichtflüchtigen
Speicher als Schatten abgelegt werden, um sicherzustellen, dass
die Vorrichtung nach Wiederaufnahme des Betriebs nach einem Stromausfall weiter
funktioniert, denn RAM-Speicher
sind flüchtige Speichervorrichtungen.
Zusätzlich
werden auch Status-Flags für
jeden physikalischen Ort gespeichert. Die Status-Flags können entweder
in dem nichtflüchtigen
Medium oder sowohl im RAM als auch in dem nichtflüchtigen
Medium gespeichert werden.
-
Die
Vorrichtung umfasst Schaltungen zur Ausführung von zwei primären Algorithmen
und eine zugehörige
Hardware-Architektur für
eine Halbleiter-Massenspeichervorrichtung. Der erste Algorithmus
stellt eine Einrichtung für
das Mapping bzw. Zuordnen der logischen Host-Blockadresse zur physikalischen
Blockadresse mit deutlich verbesserter Leistung und minimaler Hardware-Unterstützung bereit.
Zusätzlich
stellt der zweite Algorithmus eine Einrichtung zum Vermeiden eines
Löschen-vor-Schreiben-Zyklus bereit, wenn
eine geänderte
Datei wieder auf die Massenspeichervorrichtung geschrieben wird.
Stattdessen wird kein Löschen
ausgeführt,
und die geänderte
Datei wird in einen leeren Abschnitt des Massenspeichers geschrieben.
-
Das
Lesen erfolgt bei der vorliegenden Erfindung durch Weitergabe der
logischen Blockadresse an den Speicher. Das RAM-Array ist so aufgebaut, das
mit der logischen Blockadresse ein RAM-Speicherort gewählt wird.
Dieser Ort enthält
die physikalische Blockadresse der vom Host oder einem anderen externen
System angeforderten Datei. Danach wird die Datei an den Host ausgelesen.
-
Nach
dem zweiten Algorithmus werden Löschzyklen
vermieden, indem eine geänderte
Datei in einen geänderten
Datenblock auf dem Massenspeicher programmiert wird, statt auf sich
selbst, nachdem ein Löschzyklus
für den
Block wie bei bekannten Verfahren ausgeführt worden ist.
-
In
einer alternativen Ausführungsform
der vorliegenden Erfindung werden ein Verfahren und eine Vorrichtung
zum effizienten Verschieben von Sektoren in einem Block aus einem
ersten Bereich in dem nichtflüchtigen
Speicher in einen nicht verwendeten Bereich in dem nichtflüchtigen
Speicher und zum Markieren des ersten Bereichs als „verwendet" bereitgestellt.
-
Kurz
gesagt, umfasst eine bevorzugte Ausführungsform der vorliegenden
Erfindung ein Verfahren und eine Vorrichtung zum Speichern von Mapping-Informationen
für die
Zuordnung einer logischen Blockadresse, die einen Block angibt,
auf den ein Host zugreift, zu einer physikalischen Blockadresse, die
einen freien Bereich des nichtflüchtigen
Speichers angibt, wobei der Block gezielt löschbar ist und einen oder mehrere
Sektoren aufweist, die einzeln verschoben werden können. Die
Mapping-Informationen enthalten eine virtuelle physikalische Blockadresse
zur Angabe eines „ursprünglichen" Ortes im nichtflüchtigen
Speicher, wo ein Block gespeichert ist, und eine verschobene virtuelle
physikalische Blockadresse zur Angabe eines „verschobenen" Ortes im nichtflüchtigen
Speicher, wohin ein oder mehrere Sektoren des gespeicherten Blocks
verschoben worden sind. Die Mapping-Informationen enthalten außerdem Statusinformationen
für die
Verwendung der „ursprünglichen" physikalischen Blockadresse
und der „verschobenen" physikalischen Blockadresse und
zur Angabe von Informationen bezüglich „verschobener" Sektoren in dem
Block, auf den zugegriffen wird.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt
ein schematisches Blockdiagramm des Aufbaus eines Halbleiter-Massenspeichers
nach einer Ausführungsform
der vorliegenden Erfindung.
-
2 zeigt
eine alternative Ausführungsform
der physikalischen Blockadresse 102 des RAM-Speichers in 1.
-
3 zeigt
ein Blockdiagramm eines Systems mit einer Massenspeichervorrichtung.
-
4 bis 8 zeigen
den Status verschiedener Flags und Informationen.
-
9 zeigt
ein Ablaufdiagramm für
den ersten Algorithmus.
-
10 zeigt
ein Blockdiagramm eines digitalen Systems wie etwa einer digitalen
Kamera mit einer bevorzugten Ausführungsform der vorliegenden Erfindung.
-
11 bis 21 zeigen
verschiedene Beispiele für
den Status einer Mapping-Tabelle,
die in dem digitalen System in 10 gespeichert
sein kann, einschließlich
LBA-PBA-Mapping-Informationen.
-
22 zeigt
ein Beispiel für
eine nichtflüchtige
Speichervorrichtung, wie sie in der bevorzugten Ausführungsform
in 10 verwendet wird.
-
23 zeigt
ein Ablaufdiagramm der allgemeinen Schritte beim Schreiben eines
Blocks von Informationen in die nichtflüchtigen Vorrichtungen in 10.
-
24 bis 26 zeigen
allgemein in Form von Ablaufdiagrammen den Betrieb einer weiteren bevorzugten
Ausführungsform
der vorliegenden Erfindung mit Verschiebungsvorgängen für einzelne fortlaufende Sektoren.
-
27 zeigt
ein Beispiel für
den Inhalt der Lookup-Tabelle im SPM-RAM 548 nach dem Initialisieren
des Systems.
-
28 zeigt
ein Beispiel für
den Inhalt der Speichereinheit 508 nach der in 24 bis 26 beschriebenen
bevorzugten Ausführungsform.
-
29 bis 38 zeigen
Beispiele für
den Inhalt der Lookup-Tabelle im SPM-RAM nach den bevorzugten Ausführungsformen,
wie in 24 bis 28 gezeigt.
-
AUSFÜHRLICHE
BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
-
1 zeigt
eine Architektur zur Implementierung eines Halbleiter-Speichermediums
nach einer Ausführungsform.
Das Speichermedium ist zur Verwendung mit einem Host oder anderen
externen digitalen System gedacht. Der Massenspeicher ist in zwei
Abschnitte unterteilt, einen flüchtigen
RAM-Array 100 und einen nichtflüchtigen Array 104.
Nach der bevorzugten Ausführungsform
besteht der gesamte nichtflüchtige
Speicher aus Flash-Speicher. Der Flash-Speicher kann durch EEPROM-Speicher ersetzt
werden. Der RAM-Speicher kann jeder geeignete Speichertyp sein.
-
Der
Speicher 104 ist in N Datenblöcke von 0 bis N – 1 unterteilt.
Die Datenblöcke
haben eine Länge
von jeweils M Bytes. Bei der bevorzugten Ausführungsform hat jeder Datenblock
eine Länge
von 512 Bytes entsprechend der Sektorlänge in einem handelsüblichen
Festplattenlaufwerk plus der zusätzlichen
Anzahl von Bytes zum Speichern der Flags und der logischen Blockadresse
(LBA) und dem zugehörigen
ECC-Code. Der Speicher 104 kann soviel Speicherplatz umfassen
wie der Benutzer wünscht.
Eine Massenspeichervorrichtung kann zum Beispiel 100 Megabyte adressierbaren
Speicher umfassen.
-
Es
gibt mehrere RAM-Speicherorte 102. Jeder RAM-Speicherort 102 ist
von der Steuerung mit einer entsprechenden vom Host-System gelieferten logischen
Blockadresse oder der tatsächlichen
physikalischen Adresse des nichtflüchtigen Mediums eindeutig adressierbar.
Der RAM-Speicherort 102 enthält die physikalische Blockadresse
der mit der logischen Blockadresse verbundenen Daten und die mit einer
physikalischen Blockadresse auf dem nichtflüchtigen Medium verbundenen
Flags.
-
Es
ist möglich,
dass die physikalische Blockadresse (PBA) in zwei Felder aufgeteilt
werden kann, wie in 2 gezeigt. Diese Felder können für Cluster-Adressen
einer Gruppe von Datenblöcken
verwendet werden. Das erste Feld 290 wird zum Wählen einer
Cluster-Adresse verwendet, und das zweite Feld 292 kann
zum Wählen
der Startadresse der mit diesem Cluster verbundenen logischen Blockadresse
verwendet werden.
-
Eine
Gruppe von Informations-Flags ist ebenfalls für jeden nichtflüchtigen
Speicherort 106 gespeichert. Diese Flags umfassen ein Alt/Neu-Flag 110,
ein Benutzt/Frei-Flag 112,
ein Defekt-Flag 114 und ein Einzel/Sektor-Flag 116.
Darüber
hinaus ist ein Datenspeicher 122 vorgesehen.
-
Beim
Schreiben von Daten in die Massenspeichervorrichtung nach der vorliegenden
Erfindung bestimmt eine Steuerung den ersten verfügbaren physikalischen
Block zum Speichern der Daten. Der RAM-Speicherort 102 entsprechend
der vom Host gewählten
logischen Blockadresse wird mit der physikalischen Blockadresse
beschrieben, wo die Daten tatsächlich
in dem nichtflüchtigen
Speicher-Array in 104 gespeichert sind (1).
-
Als
Beispiel wird angenommen, dass ein Benutzer ein Textverarbeitungsdokument
erstellt und den Computer anweist, das Dokument zu sichern. Das
Dokument wird im Massenspeichersystem gespeichert. Das Host-System
weist ihm eine logische Blockadresse zu. Das Massenspeichersystem
nach der vorliegenden Erfindung wählt eine physikalische Adresse
eines unbenutzten Blocks oder mehrerer unbenutzter Blöcke im Massenspeicher
aus, um das Dokument zu speichern. Die Adresse der physikalischen
Blockadresse wird in dem RAM-Speicherort 102 gespeichert,
der der logischen, Blockadresse entspricht. Beim Programmieren der
Daten setzt das System nach der vorliegenden Erfindung auch das Benutzt/Frei-Flag 112 in 104 und 293,
um anzuzeigen, dass dieser Blockort benutzt wird. Ein Benutzt/Frei-Flag 112 ist
für jeden
Eintrag in dem nichtflüchtigen
Array 104 vorgesehen.
-
Später ruft
der Benutzer das Dokument auf, nimmt eine Änderung daran vor und weist
den Computer erneut an, das Dokument zu speichern. Um einen Löschen-vor-Schreiben-Zyklus
zu vermeiden, weist das System nach der vorliegenden Erfindung eine
Einrichtung zum Lokalisieren eines Blocks auf, dessen Benutzt/Frei-Flag 112 in 100 nicht
gesetzt (nicht programmiert) ist, was angibt, dass der zugehörige Block
gelöscht
ist. Danach setzt das System das Benutzt/Frei-Flag für den neuen
Block 112 in 106 und 293 in 100 und
speichert dann das geänderte Dokument
an diesem neuen physikalischen Blockort 106 in dem nichtflüchtigen
Array 104. Die Adresse des neuen physikalischen Blockorts
wird ebenfalls in dem RAM-Speicherort 102 gespeichert,
der der logischen Blockadresse entspricht, wodurch der frühere physikalische
Blockort in 102 überschrieben
wird. Danach setzt das System das Alt/Neu-Flag 110 für die frühere Version
des Dokuments, um anzuzeigen, dass dies eine alte, nicht benötigte Version
des Dokuments ist, in 110 von 104 und 293 von 109.
Auf diese Weise vermeidet das System nach der Ausführungsform
den Verwaltungsaufwand für
einen Löschzyklus,
der beim Löschen-vor-Schreiben in
herkömmlichen
Systemen nötig
ist, um eine geänderte Version
eines früheren
Dokuments zu speichern.
-
Weil
das RAM-Array 100 seinen Speicherinhalt bei einem Stromausfall
verliert, wird die logische Blockadresse mit der aktiven physikalischen
Blockadresse in dem Medium auch als Schattenspeicher 108 in
dem nichtflüchtigen
Array 104 gespeichert. Die Schatteninformationen werden
durch die Steuerung in den entsprechenden RAM-Speicherorten 102 gespeichert.
Beim Einschalten der Stromversorgung werden die RAM-Speicherorte
in 100 von jedem physikalischen Ort in 104 durch
Lesen der Information 106 in 104 entsprechend
aktualisiert. Die logische Adresse 108 von 106 wird
zum Adressieren des RAM-Speicherorts von 100 verwendet,
um die tatsächliche
physikalische Blockadresse zu aktualisieren, die mit der angegebenen
logischen Blockadresse verbunden ist. Weil 106 die tatsächliche
physikalische Blockadresse ist, die mit den neuen Daten 122 verbunden
ist, werden auch die Flags 110, 112, 114 und 116 in 293 von 102 mit
der physikalischen Blockadresse von 106 in 100 aktualisiert.
Für den
Fachmann ist ersichtlich, dass die Flags entweder in dem entsprechenden
nichtflüchtigen
Speicherort 106 oder in dem nichtflüchtigen Speicherort und dem RAM-Speicherort 102,
der mit der physikalischen Blockadresse verbunden ist, gespeichert
werden können.
-
Um
die neueste physikalische Blockadresse zuzuweisen, die einer logischen
Blockadresse im flüchtigen
Speicher 100 zugewiesen ist, liest die Steuerung beim Einschalten
zuerst den Abschnitt mit den Flags 110, 112, 114 und 116 im
nichtflüchtigen Speicher 104 und
aktualisiert den Flag-Abschnitt 293 im flüchtigen
Speicher 100. Danach liest sie die logische Blockadresse 108 für jede physikalische
Blockadresse des nichtflüchtigen
Mediums 104, und durch Verfolgen der Flags der angegebenen
physikalischen Blockadresse im flüchtigen Speicher 100 und
der gelesenen logischen Blockadresse der physikalischen Blockadresse
im nichtflüchtigen
Speicher 104 kann sie die neueste physikalische Blockadresse
aktualisieren, die der gelesenen logischen Blockadresse im flüchtigen
Speicher 100 zugewiesen ist.
-
3 zeigt
ein Blockdiagramm eines Systems mit der Massenspeichervorrichtung
nach der Ausführungsform.
Ein externes digitales System 300 wie zum Beispiel ein
Host-Computer, Personalcomputer und dergleichen ist mit der Massenspeichervorrichtung 302 nach
der vorliegenden Erfindung verbunden. Eine logische Blockadresse
ist über
einen Adressbus 306 mit dem flüchtigen RAM-Array 100 und
einer Steuerungsschaltung 304 verbunden. Steuersignale
sind auch über
einen Steuerungsbus 308 mit der Steuerung 304 verbunden.
Das flüchtige RAM-Array 100 ist
verbunden, um die physikalische Blockadresse an das nichtflüchtige RAM-Array 400 zu
geben. Die Steuerung 304 ist verbunden, um sowohl den flüchtigen
RAM 100 und das nichtflüchtige Array 104 zu
steuern als auch alle Flags zu erzeugen.
-
Ein
vereinfachtes Beispiel zur Veranschaulichung des Schreibvorgangs
nach der Ausführungsform
ist in 4 bis 8. Hier sind nicht alle Informations-Flags
gezeigt, um diese Merkmale der Erfindung nicht durch zu viele Details
unverständlich
zu machen. Die Dateneinträge
sind mit Dezimalzahlen angegeben, um das Verständnis der Erfindung weiter zu
erleichtern. Für
den Fachmann ist ersichtlich, dass bei einer bevorzugten Ausführungsform
das Binärsystem
verwendet wird.
-
4 zeigt
eine Massenspeichervorrichtung mit elf Einträgen nach der Ausführungsform.
In der Massenspeichervorrichtung in 4 sind keine
gültigen
oder brauchbaren Daten gespeichert. Daher sind alle physikalischen
Blockadressen leer. Die Daten im nichtflüchtigen Massenspeicherort '6' sind eingetragen und alt. Außerdem ist
der Speicherort '9' defekt und kann
nicht verwendet werden.
-
Der
Host weist die Massenspeichervorrichtung in dem Beispiel an, nacheinander
Daten in die logische Blockadresse '3' und
danach in '4' zu schreiben. Die
Massenspeichervorrichtung schreibt zuerst die mit der logischen
Blockadresse '3' verbundenen Daten.
Die Vorrichtung bestimmt, welches der erste nicht verwendete Speicherort
im nichtflüchtigen
Speicher ist. In diesem Beispiel ist '0' der
erste leere Speicherort. Daher zeigt 5, dass
für die
logische Blockadresse '3' die entsprechende
physikalische Blockadresse '0' gespeichert ist
und das Benutzt-Flag in der physikalischen Blockadresse '0' gesetzt ist. Der nächste leere Speicherort ist '1'. 6 zeigt,
dass für die
logische Blockadresse '4' die entsprechende
physikalische Blockadresse '1' gespeichert ist
und das Benutzt-Flag in der physikalischen Blockadresse '1' gesetzt ist.
-
Der
Host weist an, dass erneut etwas in die logische Blockadresse '3' geschrieben werden soll. Der nächste leere
Speicherort ist '2'. 7 zeigt, dass
das Alt-Flag in Speicherort '0' gesetzt ist, um
anzuzeigen, dass diese Daten nicht mehr länger brauchbar sind, das Benutzt-Flag
in Speicherort '2' gesetzt ist und
die physikalische Blockadresse in Speicherort '3' auf '2' geändert
ist.
-
Als
Nächstes
weist der Host an, dass erneut etwas in die logische Blockadresse '4' geschrieben werden soll. Der nächste leere
Speicherort wird mit '3' bestimmt. 8 zeigt,
dass das Alt-Flag in Speicherort '1' gesetzt
ist, um anzuzeigen, dass diese Daten nicht mehr brauchbar sind,
das Benutzt-Flag in Speicherort '3' gesetzt ist und
die physikalische Blockadresse in Speicherort '4' auf '3' geändert
ist. (Hierbei ist zu beachten, dass zwischen der physikalischen
Blockadresse und den am selben Speicherort gespeicherten Daten im
Allgemeinen keine Beziehung besteht.)
-
9 zeigt
den ersten Algorithmus nach der vorliegenden Erfindung. Wenn das
System nach der vorliegenden Erfindung eine Anweisung erhält, Daten
in den Massenspeicher zu programmieren (Schritt 200), versucht
das System, einen freien Block zu finden (Schritt 202),
das heißt
einen Block, für
den das Benutzt/Frei-Flag nicht gesetzt (nicht programmiert) ist.
Im Erfolgsfall setzt das System das Benutzt/Frei-Flag für diesen
Block und programmiert die Daten in diesen Block (Schritt 206).
-
Wenn
das System andererseits keinen Block finden kann, für den das
Benutzt/Frei-Flag nicht gesetzt ist, löscht das System die Flags (benutzt/frei und
alt/neu) und die Daten für
alle Blöcke,
für die
das Alt/Neu-Flag gesetzt und das Defekt-Flag nicht gesetzt ist (Schritt 204),
und sucht dann nach einem Block, für den das Benutzt/Frei-Flag
nicht gesetzt ist (Schritt 202). Ein solcher Block ist
gerade in Schritt 204 gebildet worden. Das System setzt,
nun das Benutzt-Flag für
diesen Block und programmiert die Datei in diesen Block (Schritt 206).
-
Handelt
es sich bei den Daten um eine geänderte
Version einer bereits vorhandenen Datei, muss das System verhindern,
dass auf die überholte
Version zugegriffen werden kann. Das System bestimmt, ob die Datei
eine frühere
Datei ersetzt (Schritt 208). Wenn ja, setzt das System
das Alt/Neu-Flag für
den überholten
ersetzten Block (Schritt 210). Ist andererseits die zu
speichernde Datei eine neu angelegte Datei, wird der Schritt zum
Setzen des Alt/Neu-Flags (Schritt 210) übersprungen, weil kein überholter
ersetzter Block vorliegt. Zuletzt wird die Map für die Zuordnung der logischen
Adresse 308 zu den physikalischen Adressen aktualisiert
(Schritt 212).
-
Durch
Anwendung des vorstehend beschriebenen Verfahrens wird der mit einem
Löschzyklus verbundene
Verwaltungsaufwand bei jedem Schreiben in den Speicher 104,
außer
in regelmäßigen Abständen, vermieden.
Dies verbessert die Leistung des gesamten Computersystems mit der
Architektur nach der Ausführungsform
erheblich. Bei der bevorzugten Ausführungsform der vorliegenden
Erfindung erfolgt das Programmieren des Flash-Speichers mit den
dem Fachmann bekannten üblichen
Verfahren. Mit anderen Worten, die Programmimpulse werden entsprechend
auf die zu programmierenden Bits angewendet und dann mit den programmierten
Daten verglichen, um sicherzustellen, dass eine ordnungsgemäße Programmierung
erfolgt ist. Wenn ein Bit nicht gelöscht oder korrekt programmiert
werden kann, wird ein Defekt-Flag 148 gesetzt, was verhindert,
dass der Block erneut verwendet wird.
-
10 zeigt
ein digitales System 500 wie zum Beispiel eine digitale
Kamera mit einer alternativen Ausführungsform der vorliegenden
Erfindung. Das digitale System 500 ist mit einem Host 502 gezeigt,
der ein Personalcomputer (PC) oder einfach ein Prozessor einer allgemeinen
Art sein kann, der üblicherweise
in digitalen Systemen verwendet wird, verbunden mit einer Steuerungsschaltung 506 zum Speichern
und Abrufen von Informationen in bzw. aus der nichtflüchtigen
Speichereinheit 508. Die Steuerungsschaltung 506 kann
ein Halbleiter (auch als „integrierte
Schaltung" oder „Chip" bezeichnet) oder
optional eine Kombination verschiedener elektronischer Bauteile
sein. In der bevorzugten Ausführungsform ist
die Steuerungsschaltung als eine aus einem Chip bestehende Vorrichtung
gezeigt. Die nichtflüchtige Speichereinheit 508 umfasst
eine oder mehrere Speichervorrichtungen, die jeweils Flash- oder
EEPROM-Speicher sein können.
In der bevorzugten Ausführungsform
in 10 weist die Speichereinheit 508 mehrere
Flash-Speichervorrichtungen 510 bis 512 auf, die
jeweils einzeln adressierbare Speicherorte zur Speicherung von Informationen
enthalten. In der bevorzugten Anwendung der Ausführungsform in 10 sind
diese Informationen in Blöcken
organisiert, wobei jeder Block einen oder mehrere Datensektoren
aufweist. Zusätzlich
zu den Daten können die
gespeicherten Informationen außerdem
Statusinformationen bezüglich
der Datenblöcke
wie zum Beispiel Flag-Felder, Adressinformationen und dergleichen
enthalten.
-
Der
Host 502 ist über
Host-Informationssignale 504 mit einer Steuerungsschaltung 506 verbunden.
Die Host-Informationssignale umfassen Adress- und Datenbusse sowie
Steuersignale für
die Kommunikation von Befehlen, Daten und anderen Arten von Informationen
an die Steuerungsschaltung 506, die diese Informationen
wiederum über
den Flash-Adressbus 512, den Flash-Datenbus 514, Flash-Signale 516 und
Flash-Statussignale 518 (508 und 513 bis 516 werden
zusammenfassend als Signale 538 bezeichnet) in der Speichereinheit 508 speichert.
Die Signale 538 können
Befehle, Daten und Statusinformationen zwischen der Steuerung 506 und
der Speichereinheit 508 austauschen.
-
Die
Steuerung 506 ist mit übergeordneten Funktionsblöcken wie
zum Beispiel einem Host-Schnittstellenblock 520, einem
Puffer-RAM-Block 522, einem Flash-Steuerungsblock 532, einem
Mikroprozessorblock 524, einem Mikroprozessor-Steuerungsblock 528,
einem Mikroprozessor-Speicherblock 530, einem Mikroprozessor-ROM-Block 534,
einem ECC-Logikblock 540 und einem Speicherplatzverwaltungsblock 544 gezeigt. Der
Host-Schnittstellenblock 520 erhält Host-Informationssignale 504 zur
Lieferung von Daten und Statusinformationen vom Puffer-RAM-Block 522 und
Mikroprozessorblock 524 an den Host 502 über die Host-Informationssignale 504.
Der Host-Schnittstellenblock 520 ist über die Mikroprozessor-Informationssignale 526,
die einen Adressbus, einen Datenbus und Steuersignale umfassen,
mit dem Mikroprozessorblock 524 verbunden.
-
Der
Mikroprozessorblock 524 ist mit einem Mikroprozessor-Steuerungsblock 528,
einem Mikroprozessor-Speicherblock 530 und einem Mikroprozessor-ROM-Block 534 verbunden
und dient zum Steuern der Abläufe
der verschiedenen Funktionsblöcke
in 10 innerhalb der Steuerung 506 durch Ausführung von
im Mikroprozessor-Speicherblock 530 und
im Mikroprozessor-ROM-Block 534 gespeicherten Programmanweisungen.
Der Mikroprozessor 524 kann zu bestimmten Zeiten Programmanweisungen
(oder Code) aus dem Mikroprozessor-ROM-Block 534 ausführen, bei
dem es sich um einen nichtflüchtigen
Speicherbereich handelt. Andererseits kann der Mikroprozessor-Speicherblock 530 entweder
ein flüchtiger
Speicher, das heißt
ein Lese-und-Schreib-Speicher
(RAM), oder ein nichtflüchtiger
Speicher, das heißt
ein EEPROM-Speicher, sein.
Die von dem Mikroprozessorblock 524 ausgeführten Anweisungen,
zusammenfassend als Programmcode bezeichnet, werden vor Beginn des
Betriebs des Systems nach der vorliegenden Erfindung in dem Speicherblock 530 gespeichert.
Zunächst
und vor der Ausführung
des Programmcodes aus dem Mikroprozessor-Speicherort 530 kann
der Programmcode in der Speichereinheit 508 gespeichert sein
und später
durch die Signale 538 in den Speicherblock 530 geladen
werden. Bei dieser Initialisierung kann der Mikroprozessorblock 524 Anweisungen
aus dem ROM-Block 534 ausführen.
-
Die
Steuerung 506 umfasst weiter einen Flash-Steuerungsblock 532,
der über
die Mikroprozessor-Informationssignale 526 mit dem Mikroprozessorblock 524 verbunden
ist, um unter der Steuerung des Mikroprozessors Informationen an
die Speichereinheit zu geben bzw. von dieser zu empfangen. Informationen
wie zum Beispiel Daten können
mit den Mikroprozessorsignalen 526 vom Flash-Steuerungsblock 532 an
den Puffer-RAM-Block 522 gegeben
werden, um sie darin (eventuell auch nur vorübergehend) zu speichern. In
gleicher Weise können mit
den Mikroprozessorsignalen 526 Daten durch den Flash-Steuerungsblock 532 aus
dem Puffer-RAM-Block 522 abgerufen werden.
-
Der
ECC-Logikblock 540 ist über
die Signale 542 mit dem Puffer-RAM-Block 522 und
weiter über die
Mikroprozessorsignale 526 mit dem Mikroprozessorblock 524 verbunden.
Der ECC-Logikblock 540 enthält Schaltungen für die allgemeine
Durchführung von
Fehlerprüf-
und -korrekturfunktionen. Für
den Fachmann ist ersichtlich, dass verschiedene ECC-Vorrichtungen
und -Algorithmen handelsüblich erhältlich sind
und zur Durchführung
der erforderlichen Funktionen im ECC-Logikblock 540 verwendet werden
können.
Kurz gesagt, diese Funktionen umfassen das Anfügen von Code, der für alle intensiven Zwecke
speziell aus einem Polynom erzeugt wird, an die übertragenen Daten, und das
Verwenden desselben Polynoms beim Empfang von Daten, um einen weiteren
Code aus den empfangenen Daten zu erzeugen, um eine vorbestimmte
Anzahl von Fehlern zu erkennen und möglicherweise zu korrigieren,
die die Daten beschädigt
haben. Der ECC-Logikblock 540 führt die Fehlererkennung und/oder
Fehlerkorrektur an den in der Speichereinheit 508 gespeicherten
Daten oder den vom Host 502 empfangenen Daten durch.
-
Der
Speicherplatzverwaltungsblock
544 verwendet eine bevorzugte
Vorrichtung und einen bevorzugten Algorithmus, um den neuen nicht
benutzten (oder freien) Speicherblock in einer der Flash-Speichervorrichtungen
zum Speichern eines Blocks von Informationen zu finden, wie nachstehend unter
Bezugnahme auf andere Abbildungen beschrieben. Wie bereits erwähnt, wird
die Adresse eines Blocks in einer der Flash-Speichervorrichtungen als PBA bezeichnet,
die durch den Speicherplatzmanager durch Übersetzen einer vom Host empfangenen
LBA bestimmt wird. Verschiedene Vorrichtungen und Verfahren können zur
Durchführung
dieser Übersetzung
verwendet werden. Ein Beispiel eines solchen Systems ist in
US-Patent Nr. 5.485.595 mit
dem Titel „Flash
Memory Mass Storage Architecture Incorporating Wear Leveling Technique
Without Using CAM Cells" beschrieben.
-
Der
Speicherplatzverwaltungsblock 544 umfasst einen SPM-RAM-Block 548 und
einen SPM-Steuerungsblock 546, wobei die letzteren beiden
Blöcke
miteinander verbunden sind. Der SPM-RAM-Block 548 speichert
die LBA-PBA-Mapping-Informationen (ansonsten hierin auch als Übersetzungstabelle,
Mapping-Tabelle, Mapping-Informationen oder Tabelle bezeichnet)
unter der Steuerung des SPM-Steuerungsblocks 546. Alternativ
kann der SPM-RAM-Block 548 auch außerhalb der Steuerung angeordnet
sein, wie zum Beispiel in 3 bezüglich des
RAM-Arrays 100 gezeigt.
-
Im
Betrieb liest und schreibt der Host 502 Informationen von
der bzw. auf die Speichereinheit 508, wenn zum Beispiel
ein Lese- oder Schreibvorgang von der Steuerung 506 ausgeführt wird.
Dabei liefert der Host 502 über die Host-Signale 504 eine LBA
an die Steuerung 506. Die LBA wird vom Host-Schnittstellenblock 520 empfan gen.
Unter der Anweisung des Mikroprozessorblocks 524 wird die LBA
schließlich
an den Speicherplatzverwaltungsblock 544 gegeben, um sie
in eine PBA zu übersetzen
und diese zu speichern, wie nachstehend ausführlich beschrieben.
-
Unter
der Anweisung des Mikroprozessorblocks 524 werden Daten
und sonstige Informationen durch den Flash-Steuerungsblock 532 in
einen durch die PBA identifizierten Speicherbereich in einer der Flash-Speichervorrichtungen 510 bis 512 geschrieben
bzw. aus diesem gelesen. Die in den Flash-Speichervorrichtungen
gespeicherten Informationen können
nicht mit neuen Informationen überschrieben werden,
ohne sie zuvor zu löschen,
wie bereits erwähnt.
Andererseits ist das Löschen
eines Blocks von Informationen (jedes Mal vor dem Schreiben) eine
sehr zeitraubende und energieintensive Maßnahme. Dies wird gelegentlich
auch als Löschen-vor-Schreiben-Vorgang
bezeichnet. Bei der bevorzugten Ausführungsform wird ein solcher
Vorgang vermieden, indem ein Sektor (oder mehrere Sektoren) von
Informationen innerhalb eines Blocks, der neu geschrieben wird,
kontinuierlich aber effizient von einem PBA-Speicherort im Flash-Speicher
an einen nicht benutzten PBA-Speicherort in der Speichereinheit 508 verschoben
wird, wodurch häufige Löschvorgänge vermieden
werden. Ein Informationsblock kann aus mehr als einem Sektor bestehen,
zum Beispiel aus 16 oder 32 Sektoren. Ein Informationsblock ist
weiter definiert als eine einzeln löschbare Informationseinheit.
In der Vergangenheit haben Systeme nach dem Stand der Technik einen
in Flash-Speichervorrichtungen gespeicherten Block verschoben, der
zuvor in einen freien (oder nicht benutzten) Speicherort in den
Flash-Speichervorrichtungen geschrieben worden ist. Solche Systeme
verschoben jedoch einen ganzen Block, auch wenn nur ein Sektor mit
Informationen in diesem Block neu geschrieben wurde. Mit anderen
Worten, es liegt eine Verschwendung sowohl von Speicherkapazität in dem
Flash-Speicher als auch von Zeit für das Verschieben des Inhalts
eines gesamten Blocks vor, wenn weniger als die Gesamtzahl der Sektoren
in dem Block neu geschrieben werden. Die bevorzugten Ausführungsformen
der vorliegenden Erfindung erlauben jedoch, wie hier erläutert, das
Verschieben von weniger als einem Block mit Informationen, wodurch
die Anzahl der Verschiebevorgänge
für zuvor beschriebene
Sektoren und daher auch die Anzahl der Löschvorgänge verringert wird.
-
In 10 ist
zu beachten, dass der SPM-RAM-Block 548 eine Tabelle enthält, die
bei dem Schreibvorgang geändert
werden kann, um dadurch die LBA-PBA-Mapping-Informationen und sonstige Informationen
in Zusammenhang mit jedem in der Speichereinheit 508 gespeicherten
Block zu verwalten. Zusätzlich
geben diese Mapping-Informationen
den tatsächlichen
Ort eines Sektors (innerhalb eines Blocks) von Informationen in
den Flash-Speichervorrichtungen an. Wie weiter ersichtlich, ist
mindestens ein Teil der Informationen in der im SPM-RAM-Block 548 gespeicherten
Mapping-Tabelle
als Schatten in der Speichereinheit 508 abgelegt (oder
kopiert), um den Verlust der Mapping-Informationen zu vermeiden,
wenn die Stromversorgung zum System unterbrochen oder abgeschaltet
wird. Dies ist größtenteils
auf die Verwendung von flüchtigem
Speicher für
die Mapping-Informationen zurückzuführen. In
diesem Zusammenhang wird, wenn die Stromversorgung zum System wiederhergestellt wird,
der Teil der in der Speichereinheit 508 gespeicherten Mapping-Informationen
an den SPM-RAM-Block 548 übertragen.
-
Es
ist zu beachten, dass der SPM-RAM-Block 548 alternativ
ein nichtflüchtiger Speicher
sein kann, zum Beispiel in der Form von Flash- oder EEPROM-Speicher.
In diesem Fall wird die Mapping-Tabelle in dem nichtflüchtigen
Speicher gespeichert, wodurch die Notwendigkeit der Schattenspeicherung
vermieden wird, weil bei einer Unterbrechung der Stromversorgung
die im nichtflüchtigen Speicher
gespeicherten Mapping-Informationen
klar erhalten bleiben.
-
Wenn
einer oder mehr Sektoren aus einem Bereich des Flash-Speichers in
einen anderen Bereich verschoben werden, werden bei der bevorzugten
Ausführungsform
der vorliegenden Erfindung zuerst die Sektoren von dem Ort, wo sie
in den Flash-Speichervorrichtungen, das heißt 510 bis 512, gespeichert
sind, zur vorübergehenden
Speicherung in den Puffer-RAM-Block 522 verschoben. Danach werden
die verschobenen Sektoren aus dem Puffer-RAM-Block 522 in
einen freien Bereich innerhalb einer der Flash-Speichervorrichtungen verschoben. Außerdem ist
zu beachten, dass der von dem ECC-Logikblock 540 erzeugte ECC-Code,
wie vorstehend beschrieben, ebenfalls in den Flash-Speichervorrichtungen 510 bis 512 gespeichert
wird, zusammen mit den Daten, genau wie andere Informationen wie
zum Beispiel die den Daten und Flag-Feldern entsprechende LBA.
-
11 bis 21 zeigen
Beispiele für
den Zustand einer Tabelle 700 im SPM-RAM-Block 548 zum Speichern
von LBA-PBA-Mapping-Informationen zur Identifizierung und Lokalisierung
von Blöcken
(und Sektoren in den Blöcken)
innerhalb der Speichereinheit 508. Die Tabelle 700 in
allen diesen Abbildungen umfasst eine Anordnung von Spalten und
Reihen, wobei die Spalten die virtuellen physikalischen Blockadressen-Orte oder VPBA-Blockadressen-Orte 702,
die virtuellen physikalischen Verschiebungsadressen-Orte oder MVPBA-Blockadressen-Orte 704,
die Verschiebungs-Flag-Orte 706, die Benutzt/Frei-Flag-Orte 708,
die Alt/Neu-Flag-Orte 710, die Defekt-Flag-Orte 712 und
die Sektorverschiebungsstatus-Orte 714 enthalten.
-
Die
Reihen der Tabelle enthalten die PBA/LBA-Reihen 716 bis 728,
wobei jede Reihe eine Reihennummer aufweist, die entweder eine LBA oder
eine PBA sein kann, je nach den Informationen, die in der Tabelle 700 adressiert
werden. Der Reihe 716 ist zum Beispiel die Reihennummer '00' zugewiesen, und
wenn PBA-Informationen in Verbindung mit der LBA '00' aus der Tabelle 700 abgerufen
werden, kann die LBA '00' im SPM-RAM-Block 548 an
Reihe 716 adressiert werden, um die zugehörige PBA
in 730 zu erhalten. Wenn andererseits auf Statusinformationen
wie zum Beispiel die Flag-Felder 706 bis 712 bezüglich eines
Blocks zugegriffen wird, geben die Reihennummern der Reihen 716 bis 728,
zum Beispiel '00', '10', '20', '30', '40', '50', 'N – 1' PBA-Werte anstelle
von LBA-Werten an. Außerdem
kann man sich jede Reihe der Tabelle 700 als einen Blockeintrag
vorstellen, wobei die Einträge
jeweils Informationen bezüglich
eines Blocks enthalten. Darüber
hinaus kann jede Reihe der Tabelle 700 mit einer LBA adressiert
werden.
-
Bei
der bevorzugten Ausführungsform
weist ein Block jeweils 16 Sektoren auf. Dies ist auf die Möglichkeit
des selektiven Löschens
eines ganzen Blocks von 16 Sektoren zurückzuführen (weshalb die Blockgröße gelegentlich
auch als „Löschblockgröße" bezeichnet wird).
Wenn die Löschblockgröße 16 Sektoren
beträgt,
wie zum Beispiel in 11 bis 21 gezeigt,
enthält
jeder Blockeintrag (oder jede Reihe) Informationen im Hinblick auf
16 Sektoren. Reihe 716 enthält daher Informationen für einen
mit LBA '00' bis LBA '15' (oder LBA '00' bis LBA '0F' in Hexadezimalschreibweise)
adressierten Block. Die nächste Reihe,
Reihe 718, enthält
Informationen für
die mit LBA '16' (oder '10' in Hex) bis LBA '31' (oder '1F' in Hex) adressierten
Blöcke.
Gleiches gilt auch für
die PBAs für
jeden Block.
-
Es
ist jedoch zu beachten, dass in gleicher Weise auch andere Blockgrößen verwendet
werden können.
Ein Block kann zum Beispiel 32 Sektoren umfassen und daher eine
Löschblockgröße von 32 aufweisen.
In letzterem Fall enthielte jeder Blockeintrag oder jede Reihe,
zum Beispiel 716, 718, 720 usw., Informationen
im Hinblick auf 32 Sektoren.
-
Die
VPBA-Blockadressen-Orte 702 in Tabelle 700 enthalten
Informationen, die allgemein einen PBA-Wert angeben, der einem bestimmten LBA-Wert
entspricht. Die MVPBA-Blockadressen-Orte 704 enthalten
Informationen, die einen PBA-Wert angeben, der innerhalb der Speichereinheit 508 den Ort
identifiziert, wohin ein Block (oder Sektorabschnitte davon) verschoben
worden sein kann. Die Verschiebungs-Flag-Orte 706 enthalten
Werte, die angeben, ob der Block, auf den zugegriffen wird, Sektoren
aufweist, die an einen Ort verschoben worden sein können, dessen
PBA durch den Wert im MVPBA-Blockadressen-Ort 704 angegeben
ist (der PBA-Wert in 704 ist anders als der angegebene
Wert in der VPBA-Blockadresse 702, wo sich die übrigen Blockadresseninformationen
befinden können).
Der Benutzt/Frei-Flag-Ort 708 enthält Informatio nen, die angeben,
ob der Block, auf den zugegriffen wird, ein freier Block ist, das
heißt
dass seit dem letzten Löschen
des Blocks keine Daten darin gespeichert worden sind. Der Alt/Neu-Flag-Ort 710 enthält Informationen
zur Angabe des Status des Blocks, auf den zugegriffen wird, das
heißt
ob der Block verwendet und erneut verwendet worden ist und daher
alt ist. Der Defekt-Flag-Ort 712 enthält Informationen darüber, ob
der Block defekt ist. Ist ein Block als defekt markiert, wie durch
den Wert in dem gesetzten Defekt-Flag-Ort 712 angegeben,
kann er nicht mehr verwendet werden. Die Flags 708 bis 712 entsprechen den
in Zusammenhang mit 1 gezeigten und beschriebenen
Flags 110 bis 114.
-
Der
Sektorverschiebungsstatus-Ort 714 besteht aus 16 Bits (der
Ort 714 enthält
ein Bit für
jeden Sektor in einem Block, so dass für Blöcke mit unterschiedlicher Größe eine
unterschiedliche Anzahl von Bits in Ort 714 erforderlich
sind), wobei jedes Bit den Status eines Sektors in dem Block dahingehend
angibt, ob der Sektor in einen anderen Block innerhalb der Speichereinheit 508 verschoben
worden ist. Der Verschiebungs-Blockort
in der Speichereinheit 508 würde durch eine PBA identifiziert,
die sich von dem PBA-Wert im VPBA-Blockadressen-Ort 702 unterscheidet.
Anders ausgedrückt,
der Status, ob ein Sektor in einem Block verschoben worden ist,
wie durch jedes der Bits in 714 angegeben, lässt erkennen,
welcher von entweder den VPBA-Blockadressen-Orten 702 oder den MVPBA-Blockadressen-Orten 704 den
neuesten PBA-Ort für
den betreffenden Sektor enthält.
-
In 11 ist
ein Beispiel für
den Status der im SPM-RAM-Block 548 (in 10)
gespeicherten Tabelle 700 gezeigt, wenn zum Beispiel die
LBA '0' geschrieben ist.
Wie bereits erwähnt,
wird in den hier gezeigten Abbildungen eine Blockgröße von 16
Sektoren (nummeriert von 0 bis 15 in Dezimalschreibweise oder von
0 bis 10 in Hexadezimalschreibweise) verwendet, um lediglich Beispiele
zu veranschaulichen. In gleicher Weise werden N Blöcke (daher
N LBAs) verwendet, die von 0 bis N – 1 nummeriert sind. Die Blockgröße und die
Anzahl der Blöcke
sind beides Auslegungsoptionen, die für unterschiedliche Anwendungen
variieren können
und von der Speicherkapazität
der jeweils verwendeten Flash-Speichervorrichtung (zum Beispiel 510 bis 512)
abhängig sein
können.
Außerdem
wird bei diesen Beispielen eine bevorzugte Sektorgröße von 512
Bytes verwendet, während
auch andere Sektorgrößen benutzt werden
können,
ohne vom Umfang der vorliegenden Erfindung abzuweichen.
-
Es
wird angenommen, dass der Vorgang des Schreibens in LBA '0' nach dem Initialisieren oder Einschalten
des Systems erfolgt, wenn alle Blöcke in den Flash-Speichervorrichtungen 510 bis 512 (in 10)
gelöscht
wurden und daher frei sind. Der Speicherplatzverwaltungsblock 548 bestimmt
vermutlich, dass der nächste
freie PBA- Ort '00' ist. Daher wird '00' in 730 an
der VPBA-Blockadresse 702 in Reihe 716 geschrieben,
wo Informationen bezüglich der
LBA '0' enthalten sind,
wie in Tabelle 700 durch die LBA-Reihennummer '00' angegeben. Weil
keine Notwendigkeit besteht, einen der Sektoren im Block LBA '0' zu verschieben, kann die MVPBA-Blockadresse 704 für Reihe 716,
die als Ort 732 gezeigt ist, einen beliebigen Wert enthalten,
zum Beispiel einen Initialisierungswert (in 11 ist 'XX' gezeigt, um einen
Status „ohne
Bedeutung" anzugeben).
-
Der
Wert in 734 hat den logischen Zustand '0',
um zu zeigen, dass der Block LBA '0' keine
verschobenen Sektoren enthält.
Der Ort 736 in der Spalte Benutzt-Flag 708 von
Reihe 716 wird auf den logischen Zustand '1' gesetzt, um anzugeben, dass der Block
PBA '0' benutzt wird. Der
Status von Ort 738, der das Alt-Flag 710 für Reihe 716 angibt,
wird auf '0' gesetzt, um anzugeben,
dass der Block PBA '0' noch nicht „alt" ist. Der Ort 740 hat
den logischen Zustand '0', was anzeigt, dass
der Block PBA '0' nicht defekt ist,
und alle Bits im Verschiebungsstatus-Ort 714 weisen den
logischen Zustand '0' auf, um anzuzeigen, dass
keiner der Sektoren im Block LBA '0' bis
LBA '15' verschoben worden
ist.
-
In 11 haben
die Statusinformationen für LBA '0' in Reihe 716, zum Beispiel
im Verschiebungs-Flag-Ort 706, Benutzt-Flag-Ort 708, Alt-Flag-Ort 710,
Defekt-Flag-Ort 712 und
Verschiebungsstatus-Ort 714, für alle übrigen Reihen 716 bis 728 in
Tabelle 700 den logischen Zustand '0'.
Es ist zu beachten, dass beim Einschalten des Systems und/oder nach
dem Löschen
eines der Blöcke
die Einträge
für die
gelöschten
Blöcke,
was beim Einschalten alle Blöcke
wären,
in Tabelle 700 auf den logischen Zustand '0' gesetzt werden.
-
Nachstehend
wird hier der Inhalt einer der Flash-Speichervorrichtungen in der
Speichereinheit 508, wo sich der Block LBA '0' befinden kann, diskutiert, um ein besseres
Verständnis
der in Tabelle 700 in 11 gezeigten
Mapping-Informationen zu erhalten.
-
22 zeigt
ein Beispiel für
den Inhalt der Flash-Speichervorrichtung 510 entsprechend
dem Status der Tabelle 700 (wie in 11 gezeigt).
LBA '0', die in der Speichereinheit 508 an
PBA '0' durch die Steuerung 506 (in 10)
identifiziert ist, ist der Ort, wo der vom Host identifizierte Block
geschrieben wird. Die in 22 gezeigte
PBA0-Reihe 750 enthält Daten
im Sektordaten-Ort 752. Außerdem ist ein ECC-Code in
ECC-Ort 754 der PBA0-Reihe 750 gespeichert. Dieser
ECC-Code wird vom ECC-Logikblock 540 in
Verbindung mit den geschriebenen Daten erzeugt, wie vorstehend beschrieben.
Das Flag-Feld 756 in der PBA0-Reihe 750 enthält die Verschiebungs-,
Benutzt-, Alt- und Defekt-Flag-Informationen entsprechend den Sektordaten
des ge schriebenen Blocks. In diesem Beispiel ist im Flag-Feld 756 das „Benutzt"-Flag und kein anderes
Flag gesetzt, weshalb das Flag-Feld 756 einen logischen
Zustand von '0100' aufweist, der angibt,
dass die PBA '0' „benutzt" wird, aber nicht „verschoben", „alt" oder „defekt" ist.
-
Die
PBA0-Reihe 750 enthält
zusätzlich
den Speicherort, um in LBA-Adressort 758 die LBA-Nummer
zu verwalten, die der PBA '0' entspricht, die
in diesem Fall '0' ist. Auch wenn dies
für das
vorliegende Beispiel nicht von Bedeutung ist, sind die restlichen
PBA-Orte für
LBA '0' in den nächsten 15
Reihen nach Reihe 750 in der Flash-Speichervorrichtung 510 gespeichert.
-
Aus
der Diskussion der hier angegebenen Beispiele ist ersichtlich, dass
die Informationen in einer PBA-Reihe der Flash-Speichervorrichtung 510 ausreichen,
um die Daten und Statusinformationen in Zusammenhang damit im Block
LBA '0' zu identifizieren,
einschließlich
etwa damit verbundener Verschiebungen, insbesondere aufgrund des
Vorhandenseins des Verschiebungs-Flags in jeder PBA-Reihe (750, 762, 764 usw.)
des Flash-Speichers. Dennoch kann alternativ ein weiteres Feld zu
der ersten PBA-Reihe für jeden
LBA-Ort im Flash-Speicher hinzugefügt werden, das den Status der
Bits im Verschiebungsstatus-Ort 714 der entsprechenden
Reihe in Tabelle 700 angibt. Dieses Feld wird optional
in dem in 22 gezeigten Sektorstatus-Ort 760 gespeichert und
ist in der ersten PBA-Reihe jedes LBA-Blocks enthalten, zum Beispiel
in Reihe 750, 780 usw. Obwohl die in Ort 760 enthaltenen
Informationen durch Prüfen
des Status der Verschiebungs-Flags in den Flag-Feldern 756 jeder
PBA-Reihe gefunden werden können,
besteht ein offensichtlicher Vorteil der Verwendung von Ort 760 darin,
dass beim Starten (oder Einschalten) des Systems der Inhalt der
Tabelle 700 im SPM-RAM-Block 548 schneller aktualisiert
werden kann, weil weniger Lesevorgänge erforderlich sind (der
Leser sei daran erinnert, dass die Tabelle 700 im SPM-RAM 548 geführt wird,
einem flüchtigen Speicher,
dessen Inhalt beim Ausschalten des Systems verlorengeht und beim
Einschalten aus dem nichtflüchtigen
Speicher, das heißt
der Speichereinheit 508, aktualisiert werden muss).
-
Das
heißt,
anstatt jede PBA-Reihe (insgesamt 16 Reihen bei dem bevorzugten
Beispiel) zu lesen, um jeden LBA-Eintrag in der Tabelle 700 beim Einschalten
zu aktualisieren, muss nur die erste PBA-Reihe jeder LBA aus dem
Flash-Speicher gelesen und im SPM-RAM 548 gespeichert werden,
was durch Vermeidung unnötiger
Lesevorgänge
Zeit spart. Andererseits wird klar mehr Speicherkapazität benötigt, um
16 Bits Sektorstatusinformationen pro LBA zu verwalten.
-
In
dem vorstehenden Beispiel, wo der Ort 760 verwendet wird,
entspräche
der Wert in Sektorstatus-Ort 760 lauter Nullen (oder '0000' in Hexadezimalschreibweise).
-
In
der Flash-Speichervorrichtung 510 ist jede der Reihen 750, 762, 764, 768 usw.
jeweils ein PBA-Ort, wobei jede Reihe eine PBA-Reihennummer aufweist
und zum Speichern von Daten und anderen Informationen (entsprechend
der vorstehenden Beschreibung in Zusammenhang mit Reihe 750)
für einen
Sektor innerhalb eines durch eine bestimmte LBA adressierten Blocks
dient. Außerdem
stellen jeweils 16 aufeinanderfolgende PBA-Reihen einen Block mit
Informationen dar. Das heißt,
die PBA-Reihen 750, 762, 764 bis 768,
die die 16 PBA-Reihen angeben sollen, entsprechen LBA 0 (gezeigt
als Reihe 716 in Tabelle 700 in 11),
und jede der PBA-Reihen enthält
Informationen für
einen Sektor in dem Block. Der nächste
Block mit Informationen ist der mit LBA '10' (in
Hex) adressierte Block, dessen Mapping-Informationen in Reihe 718 in
Tabelle 700 enthalten sind, und der in den Orten beginnend
ab '10' (in Hexadezimalschreibweise
oder '16' in Dezimalschreibweise)
und endend mit '1F' (in Hexadezimalschreibweise
oder '31') in der Flash-Speichervorrichtung 510 usw.
gespeichert ist.
-
In
Fortführung
des vorstehenden Beispiels zeigt 12 ein
Beispiel für
den Zustand von Tabelle 700, wenn durch den Host erneut
in die LBA 0 geschrieben wird. Weil die LBA 0 bereits geschrieben ist
und erneut geschrieben wird, ohne zuvor gelöscht worden zu sein, wird ein
anderer freier Ort in der Speichereinheit 508 durch den
Speicherplatzmanager 544 gefunden, um die neuen Informationen
zu speichern. (Hierbei ist zu beachten, dass die Blöcke, einschließlich ihrer
Sektoren, nacheinander und fortlaufend durch jede der Flash-Speichervorrichtungen der
Speichereinheit 508 entsprechend ihren PBAs organisiert
sind, so dass zum Beispiel die nächste Flash-Speichervorrichtung
nach Vorrichtung 510 die adressierten PBA-Blöcke dort
aufnimmt, wo die Flash-Speichervorrichtung 510 aufgehört hat;
in einem Beispiel enthält
die Flash-Speichervorrichtung 510 die PBAs von 0 bis FF
(in Hex), und die nächste Flash-Speichervorrichtung,
zum Beispiel 512, kann dann die PBAs von 100 bis 1FF (in
Hex) enthalten.) Dieser freie Ort ist mit PBA '10' (in
Hexadezimalschreibweise oder. 16 in Dezimalschreibweise) angegeben.
In Reihe 718, wo die Einträge für LBA '10' dieselben
bleiben wie in 11, außer dass das Benutzt-Flag in
Ort 742 gesetzt wird (bei der bevorzugten Ausführungsform
ist ein Flag gesetzt, wenn es den logischen Zustand '1' hat, aber die entgegengesetzte Polarität kann ebenfalls
verwendet werden, ohne von der vorliegenden Erfindung abzuweichen), um
anzuzeigen, dass die PBA '10' jetzt „benutzt" wird.
-
Die
Einträge
in Reihe 716 sind geändert,
um '10' im MVPBA-Blockadressen-Ort 732 zu
zeigen, der die PBA-Adresse des verschobenen Teils für den Block
LBA '00' angibt. Das Verschiebungs-Flag
in Ort 734 ist auf den logischen Zustand '1' gesetzt, um anzuzeigen, dass mindestens
ein Teil (einer oder mehrere Sektoren) des Blocks LBA '00' an einen anderen PBA-Ort
als den in Ort 730 in Tabelle 700 angegebenen
PBA-Ort verschoben wurde. Schließlich sind die Bits des Verschiebungsstatus-Orts 714 in
Reihe 716 auf '1000000000000000' (in Binärschreibweise
oder '8000' in Hexadezimalschreibweise)
gesetzt, was den Status der verschobenen Sektoren im Block LBA '00' angibt. Das heißt, in diesem
Beispiel gibt '8000' an, dass der erste
Sektor oder Sektor '0' im Block '00' an einen anderen
PBA-Ort verschoben worden ist.
-
In 22 wirkt
sich der Status der Tabelle 700 in 12 auf
den Inhalt der Flash-Speichervorrichtung 510 dahingehend
aus, dass der verschobene Sektor des Blocks LBA '0' jetzt
in die PBA '10' in Reihe 780 geschrieben
wird. Reihe 780 enthält
dann die Daten für
den verschobenen Sektor, der eine Größe von 512 Bytes hat. Bezüglich der
Informationen für
den verschobenen Sektor enthält
die Reihe 780 außerdem
den ECC-Code, eine
Kopie der Werte in den Flag-Orten 734 bis 740 in
Tabelle 700 (in 12) und
die LBA '00', um anzugeben, dass
die Daten in Reihe 780 zur LBA '00' gehören, und
kann weiter den Verschiebungs-Status für jeden einzelnen der Sektoren
im Block LBA '0' enthalten.
-
Auch
wenn in der Abbildung nicht ausdrücklich gezeigt, ist das Verschiebungs-Flag in Ort 756 der
PBA-Reihe 750 gesetzt, um anzugeben, dass mindestens ein
Teil des entsprechenden Blocks verschoben worden ist. Der in dem
Verschiebungsstatus-Ort 714 in Reihe 716 (in 12)
gespeicherte Wert, '8000' in Hexadezimalschreibweise,
ist auch in Ort 760 in Reihe 750 gespeichert.
Wie bereits erwähnt,
gibt dies an, dass nur Sektor '0' von PBA '0' als „verschoben" markiert war und
der neue Block LBA '0' in PBA '10' im Flash-Speicher
geschrieben worden ist. Ohne weitere ausführliche Diskussion von 22 dürfte ersichtlich
sein, dass die folgenden Beispiele sich ebenfalls auf den Inhalt
der Flash-Speichervorrichtung 510 auswirken.
-
13 zeigt
den Status der Tabelle 700, wenn noch ein weiterer Schreibvorgang
in LBA '00' durchgeführt wird.
Die Werte (oder Einträge)
in Reihe 716 bleiben dieselben wie in 12,
außer
dass der Wert in Ort 732 auf '20' (in
Hexadezimalschreibweise) geändert
ist, um anzuzeigen, dass der verschobene Teil von Block LBA '00' sich jetzt im PBA-Ort '20' (anstelle von '10' in 12)
befindet. Wie in 12, gibt der Wert '8000' im Verschiebungsstatus-Ort 714 an,
dass der erste Sektor (mit der PBA '00')
der Teil des Blocks ist, der verschoben worden ist.
-
Reihe 718 ist
geändert,
um zu zeigen, dass der Block LBA '10' jetzt
alt ist und nicht mehr verwendet werden kann, ohne zuvor gelöscht zu
werden. Dies wird durch den Wert in Ort 744 angegeben,
der auf den logischen Zustand '1' gesetzt ist. Die
Einträge für LBA '20', Reihe 720,
bleiben unverändert,
außer dass
Ort 746 geändert
und auf den logischen Zustand '1' gesetzt ist, um
den Status des Blocks PBA '20' als in Gebrauch anzugeben.
Es wird angenommen, dass wie in 11 und 12 alle übrigen Werte
in Tabelle 700 in 13, die
vorstehend nicht erwähnt
wurden und für
die nicht angegeben wurde, dass sie einen bestimmten logischen Zustand
aufweisen, in 13 alle unverändert sind
(die Flags sind alle auf den logischen Zustand '0' gesetzt).
-
In
weiterer Fortführung
des vorstehenden Beispiels zeigt 14 den
Status der Tabelle 700, wenn noch ein weiteres Schreiben
in LBA '0' erfolgt. Um den
Vergleich zu vereinfachen, sind die Werte in 14, die
auf einen anderen logischen Zustand bezogen auf ihre Zustände in 13 gesetzt
sind, in einem Kreis angegeben. In Reihe 716 bleibt alles
unverändert,
bis auf den neuen Verschiebungs-Ort, angegeben als PBA '30' in Ort 732.
PBA '30' war der nächste freie
Ort, den der Speicherplatzmanager 544 gefunden hat. Wie
vorstehend erwähnt,
gibt dieser Wert an, dass ein Teil des Blocks von LBA '0' jetzt in PBA '30' ist,
das heißt
der erste Sektor (angegeben durch den Wert '8000' in 714 in
Reihe 716) in diesem Block ist nach PBA '30' in der Flash-Speichervorrichtung 510 verschoben
worden.
-
Reihe 718 bleibt
unverändert,
bis sie gelöscht
wird. Die Flags in den Orten 742 und 744 sind auf
den logischen Zustand '0' gesetzt. Reihe 720 bleibt
ebenfalls unverändert,
bis auf den Wert in ihrer Spalte Alt-Flag 710, der auf '1' geändert
ist, um anzuzeigen, dass der Block von PBA '20' ebenfalls
alt ist und erst nach einem Löschen
wieder verwendet werden kann. Reihe 722 bleibt unverändert, bis
auf den Wert in ihrer Spalte Benutzt-Flag 708, der auf
den logischen Zustand '1' geändert ist,
um anzuzeigen, dass der Block von LBA '30' jetzt
in Gebrauch ist.
-
15 zeigt
ein weiteres Beispiel für
den Status von Tabelle 700, wobei angenommen wird, dass
die Tabelle in dem in 13 gezeigten Zustand war und
der Host anschließend
in LBA '5' geschrieben hat.
Auch hier sind die Änderungen
an den Werten in Tabelle 700 in 15 gegenüber denen
in 13 mit einem Kreis um den Wert markiert, der sich
geändert
hat, das heißt
nur eine Änderung
in diesem Fall.
-
Beim
Schreiben in LBA '5' ist zu beachten, dass
die LBA-Einträge
in den Reihen 716, 718, 720 usw. nur
für LBA '00', LBA '10', LBA '20' usw. gelten und
daher keinen Eintrag LBA '5' widerspiegeln. Der Leser
sei darauf hingewiesen, dass jeder der Einträge in der LBA-Reihe sich auf
einen Block mit Informationen bezieht, wobei jeder Block in der
bevorzugten Ausführung
16 Sektoren aufweist. Aus diesem Grund adressiert LBA '5' eigentlich den fünften Sektor in Reihe 716.
Weil PBA '20' verwendet wurde,
um LBA '0' zu speichern, ist
nur der Sektor innerhalb PBA '20', entsprechend LBA '5', noch nicht geschrieben und „frei". Daher werden die
Daten für
LBA '5' in PBA '20' in Sektor '5' gespeichert. Der Verschiebungsstatus-Ort 714 von
Reihe 716 wird auf den logischen Zustand '8400' (in Hexadezimalschreibweise)
geändert. Dies
gibt an, dass der Ort für
die ersten und fünften Sektoren
in LBA '0' beide an PBA '20' in der Flash-Speichervorrichtung 510 identifiziert
sind.
-
Die übrigen Werte
in Tabelle 700 in 15 bleiben
dieselben wie in 13. 16 bis 18 zeigen
ein weiteres Beispiel für
den Status der Tabelle 700 nach dem Einschalten oder Löschen der
Blöcke
mit der Speichereinheit 508. In 16 und 17 werden
dieselben Schreibvorgänge
ausgeführt,
wie sie unter Bezugnahme auf 11 und 12 beschrieben
wurden. Der Status der Tabelle 700 in 16 und 17 entspricht
dem in 11 bzw. 12 (die
beiden letztgenannten Abbildungen sind lediglich aus Gründen der
Bequemlichkeit für den
Leser als 16 und 17 erneut
dargestellt). Kurz gesagt, 16 zeigt
den Status der Tabelle 700 nach einem Schreiben in LBA '0', und 17 zeigt den
Status der Tabelle 700 nach einem weiteren Schreiben in
LBA '0'.
-
18 setzt
nach 17 an und zeigt den Status der Tabelle 700 nach
dem Schreiben in LBA '5' durch den Host.
Wie in 18 gezeigt, ist LBA '5' nach PBA '10' verschoben
worden, wo sich auch LBA '0' befindet. Zu diesem
Zweck wird der MVPBA-Blockadressen-Ort 732 auf '10' in Reihe 716 gesetzt, und
das Verschiebungs-Flag
wird an Ort 734 in derselben Reihe gesetzt. Außerdem wird
der Status des Verschiebungsstatus-Orts 714 in Reihe 716 auf '8400' (in Hex) gesetzt,
was angibt, dass LBA '0' und LBA '5' verschoben worden sind oder dass der
erste und der fünfte
Sektor in LBA '00' verschoben worden sind.
Weil diese beiden Sektoren sich jetzt im Ort PBA '10' der Flash-Speichervorrichtung 510 befinden,
ist auch das Verschiebungs-Flag für jeden dieser Sektoren in
der Flash-Speichervorrichtung 510 gesetzt. Es ist zu beachten,
dass LBA '5' nach PBA '10' verschoben wurde,
weil übrige
freie Sektoren in diesem Block vorhanden waren. Das heißt, auch wenn
die LBA '0' dieses Blocks verwendet
worden ist, waren 15 andere Sektoren desselben Blocks verfügbar, von
den der fünfte
Sektor jetzt nach dem Schreiben in LBA '5' in
Gebrauch ist.
-
In
Fortführung
des Beispiels in 18 zeigt 19 den
Status der Tabelle 700, nachdem der Host ein weiteres Mal
in LBA '0' geschrieben hat.
Entsprechend der Tabelle wird ein weiterer freier PBA-Ort '20' gefunden, wohin
sowohl LBA '5' als auch LBA '0' verschoben werden. Zuerst wird LBA '5' in den Ort PBA '10' bis
PBA '20' verschoben, und
danach wird der neue Block in Ort LBA '0' in
PBA '20' geschrieben. Wie
bereits erwähnt,
wird bei jedem Verschieben eines Blocks (hier wird zum Beispiel
der Block von LBA '5' verschoben) dieser
zuerst von dem Ort im Flash-Speicher, wo er sich gegenwärtig befindet,
an einen vorläufigen
Speicherort in der Steuerung 506, nämlich den Puffer-RAM-Block 522,
verschoben und danach von dort an den neuen Ort in den Flash-Speichervorrichtungen übertragen.
-
Das
Benutzt-Flag in Ort 746 in Reihe 720 ist gesetzt,
um die Verwendung des Orts PBA '20' im Flash-Speicher
anzuzeigen, und das Alt-Flag in Ort 744 ist gesetzt, um
die Verwendung des Orts PBA '10' zu verhindern, bis
dieser gelöscht
ist. Der Status dieser Flags sowie der Status des Verschiebungs-Flags
für die
beiden Sektoren LBA '0' und LBA '5' sind auch im Flash-Speicher reproduziert.
-
20 setzt
nach dem in 18 gezeigten Status der Tabelle 700 an
und zeigt einen weiteren Status der Tabelle 700 nach dem
Schreiben in LBA '5' durch den Host.
In diesem Fall wird zuerst der Block von LBA '0' von
Ort PBA '10' in der Flash-Speichervorrichtung 510,
wo er gegenwärtig
gespeichert ist, in den Ort PBA '20' des Flash-Speichers verschoben. Danach
wird der vom Host in LBA '5' geschriebene neue
Block in den Ort PBA '20' des Flash-Speichers geschrieben.
Die Flags sowohl in der Tabelle 700 als auch den entsprechenden
Orten der Flash-Speichervorrichtung 510 werden entsprechend
gesetzt, um diese aktualisierten Orte anzugeben.
-
21 setzt
ebenfalls nach dem in 18 gezeigten Status der Tabelle 700 an
und zeigt den möglichen
Status der Tabelle 700, nachdem der Host in LBA '7' geschrieben hat. In diesem Fall wird
der neue Block einfach in den Ort PBA '10' des Flash-Speichers geschrieben,
weil dieser Ort noch nicht verwendet wird. Darüber hinaus werden drei Bits
für den
Verschiebungsstatus-Ort 714 in Reihe 716 gesetzt,
um anzuzeigen, dass LBA '0', LBA '5' und LBA '7' an
einen anderen PBA-Ort im Flash-Speicher verschoben worden sind.
Der Ort 732 zeigt, dass der Ort, wo diese drei Blöcke gespeichert sind,
PBA '10' ist.
-
Wie
aus der bisherigen Diskussion ersichtlich, führt zu einem bestimmten Zeitpunkt
die Anzahl der Sektoren, die innerhalb eines Blocks verschoben werden,
zu einem ineffizienten Betrieb. Daher ergibt sich für den Benutzer
die Notwendigkeit, einen Schwellenwert für die Anzahl der Sektoren in
einem Block festzulegen, die verschoben werden dürfen, bevor der Block als „alt" deklariert wird
(das Alt-Flag wird gesetzt) und der Block nicht mehr verwendet wird,
bis er gelöscht
ist. Dieser Schwellenwert kann zum Beispiel auf die Hälfte der
Anzahl von Sektoren in einem Block eingestellt werden. Dies wird
folgendermaßen
demonstriert: Für
einen Block mit 16 Sektoren werden, wenn acht der Sektoren in einen
anderen Block verschoben werden, der „ursprüngliche" Block und der „verschobene" Block (der Block,
in dem sich die verschobenen Sektoren befinden) im selben PBA-Block
kombiniert. Dieser kombinierte PBA-Block kann vollständig in
einem neuen Block gespeichert werden oder alternativ kann der „ursprüngliche" Block mit dem „verschobenen" Block kombiniert
und in diesen verschoben werden. In letzterem Fall wird der „ursprüngliche" Block dann als „alt" markiert, um ihn
zu löschen.
Wenn der kombinierte PBA-Block in einem neuen Block gespeichert ist,
wer den sowohl der „ursprüngliche" Block als auch der „verschobene" Block als „alt" markiert.
-
23 zeigt
ein allgemeines Ablaufdiagramm mit einigen der Schritte, die bei
einem Schreibvorgang durchgeführt
werden. Hier soll der Ablauf einiger der Ereignisse gezeigt werden,
die während
eines solchen Vorgangs stattfinden, und es versteht sich nicht als
umfassende Darstellung des Verfahrens oder der Vorrichtung, die
bei der bevorzugten Ausführungsform
der vorliegenden Erfindung verwendet werden.
-
Die
in 23 gezeigten Schritte werden unter der Anweisung
des Mikroprozessorblocks 524 durchgeführt, wenn er den Programmcode
(oder die Firmware) während
des Betriebs des Systems ausführt.
Wenn der Host in Schritt 800 einen Block LBA M schreibt,
prüft der
Speicherplatzverwaltungsblock 544 in Schritt 802,
ob LBA M in Gebrauch ist, indem der Status des entsprechenden Benutzt-Flags
in Tabelle 700 des SPM-RAM-Blocks 548 kontrolliert
wird. Ist sie nicht in Gebrauch, wird in Schritt 804 eine
Suche nach dem nächsten
freien PBA-Block in der Speichereinheit 508 durchgeführt. Werden
keine freien Blöcke
gefunden, wird in Schritt 808 ein Fehlerzustand erkannt.
Wird jedoch eine freie PBA gefunden, wird in Schritt 806 ihr
Benutzt-Flag in Tabelle 700 sowie im Flash-Speicher markiert
(bzw. gesetzt). In Schritt 810 wird die PBA des freien
Blocks in den VPBA-Blockadressen-Ort 702 der entsprechenden LBA-Reihe in Tabelle 700 geschrieben.
-
Ist
in Schritt 802 der Block LBA M in Gebrauch, wird die Suche
nach dem nächsten
freien PBA-Block in Schritt 812 dennoch durchgeführt, und wenn
kein solcher freier Block gefunden wird, wird in Schritt 814 ein
Fehlerzustand gemeldet. Wird jedoch ein freier PBA-Ort gefunden,
wird diese PBA in Schritt 816 in Tabelle 700 und
im Flash-Speicher als in Gebrauch befindlich markiert. Als Nächstes wird
in Schritt 818 der Zustand des Blocks als verschoben angegeben,
indem das Verschiebungs-Flag und das entsprechende Bit im Verschiebungsstatus-Ort 714 der
Tabelle 700 gesetzt werden. Der neue Ort, an den der Block
verschoben worden ist, wird ebenfalls in Tabelle 700 angegeben,
wie vorstehend beschrieben.
-
Schließlich werden
nach den Schritten 818 und 810 die Daten und alle
entsprechenden Statusinformationen, ECC-Code und LBA in den PBA-Ort
im Flash-Speicher geschrieben.
-
Wie
bereits erwähnt
wird, wenn ein wesentlicher Teil eines Blocks Sektoren aufweist,
die verschoben worden sind (bei der bevorzugten Ausführungsform
sind dies acht von 16 Sektoren), der Block als „alt" markiert, indem sein entsprechendes Alt-Flag
gesetzt wird. Blöcke
mit gesetzten Alt-Flags werden in regelmäßigen Abständen gelöscht und können dann erneut verwendet
(oder neu programmiert oder beschrieben werden).
-
Wie
zu erkennen, besteht ein Vorteil der Ausführungsformen in 10 bis 23 darin,
dass ein Block nicht jedes Mal gelöscht werden muss, nachdem der
Host auf ihn zugegriffen hat, denn wenn zum Beispiel Teile (oder
Sektoren) des Blocks neu geschrieben werden, müssen, anstatt den Block in
den Flash-Speichervorrichtungen zu löschen oder den gesamten Block
in einen freien Bereich im Flash-Speicher zu verschieben, nur die
Teile, die neu geschrieben werden, an einen anderen Ort im Flash-Speicher übertragen
werden, das heißt
einen durch die MVPA-Blockadresse identifizierten freien Ort. In
diesem Zusammenhang wird ein Löschzyklus, der
zeitaufwändig
ist, bis zu einem späteren
Zeitpunkt vermieden, und es wird keine Zeit für das Lesen und Übertragen
eines ganzen Blocks verschwendet.
-
Verbesserungen
an den verschiedenen Ausführungsformen
nach der vorliegenden Erfindung, wie sie bisher beschrieben wurden,
werden nachstehend für
die effiziente Übertragung
einzelner Sektoren beschrieben, die nacheinander vom Host adressiert
werden und die auch unter der Anweisung der Steuerung 506 (in 10)
neu geschrieben werden. Obwohl diese Verbesserungen das Verschieben
von Sektoren innerhalb eines Blocks von einem ersten Bereich im
nichtflüchtigen
Speicher in einen nicht verwendeten Bereich im nichtflüchtigen
Speicher umfassen, wird, wie für
den Fachmann ersichtlich, weniger Speicherplatz in der Steuerung
benutzt, was eine kleinere und preiswertere Lösung ermöglicht. Im Einzelnen wird die
Notwendigkeit zur Verwaltung erstens der MVPBA-Blockadressen-Orte 704 und
der Sektorverschiebungsstatus-Orte 714 (in 11 bis 21 gezeigt)
im SPM-RAM-Block 548 der Steuerung 506 (in 10 gezeigt)
und zweitens der Sektorstatus-Orte 760 für jeden
Block in der Speichereinheit 508 (in 10 gezeigt)
vermieden, wie vorstehend in Zusammenhang mit der Ausführungsform
in 10 bis 23 beschrieben.
Außerdem
ist die Anzahl der nötigen
Vorgänge
zur Durchführung
dieser Verschiebungsvorgänge
für einzelne
fortlaufende Sektoren deutlich geringer, wodurch sich eine höhere Systemleistung
ergibt.
-
Eine
Ausführungsform
einer solchen Verbesserung der vorliegenden Erfindung ist in dem
Ablaufdiagramm in 24 bis 26 gezeigt,
wobei das digitale System 500 in 10 verwendet
wird, um die Anzahl der Lese- und Schreibzyklen in Zusammenhang
mit dem Neu-Schreiben einzelner fortlaufender Sektoren zu verringern.
-
In
Systemen wie zum Beispiel digitalen Kameras, in denen das digitale
System 500 nach der vorliegenden Erfindung eingesetzt werden
kann, überträgt üblicherweise
der Host 502 (in 10) unter
der Anweisung der Steuerung 506 eine große Menge
Informationen in Form von Einzelbildern, wobei jedes Einzelbild
im Allgemeinen 1.648 Sektoren zur Speicherung in der Flash-Speichereinheit 508 umfasst.
Bei solchen Anwendungen sind die durch die Steuerung 506 empfangenen
Informationen vom Host 502 im Allgemeinen in Sektoren in
fortlaufender Reihenfolge angeordnet. Wie zum Beispiel in den nachstehenden
Beispielen beschrieben wird, kann der Host die Steuerung anweisen,
Daten in den mit LBA 5 bis LBA 15 adressierten Sektoren zu speichern.
Wie gleich ersichtlich wird, nutzen die verbesserten Ausführungsformen
der vorliegenden Erfindung den Vorteil der sequenziellen Adressierung
der Sektoren durch den Host, wenn auf diese Sektoren wieder zugegriffen
wird, um auf diese Weise unnötige Sektorübertragungen
und gleichzeitig die Notwendigkeit von Löschen-vor-Schreiben-Vorgängen zu
vermeiden. Wie vorstehend erwähnt,
nutzt eine solche Verbesserung den in 10 gezeigten
Aufbau in Verbindung mit dem Verfahren, das in 24 bis 26 in
Form eines Ablaufdiagramms dargestellt ist.
-
Die
meisten der in 24 bis 26 gezeigten
Schritte werden von dem Mikroprozessorblock 524 in der
Steuerung 506 in 10 ausgeführt. Der Mikroprozessorblock 524 führt Anweisungen
aus, die im Mikroprozessor-RAM-Block 530 gespeichert sind, um
die meisten der in 24 bis 26 gezeigten Schritte
durchzuführen.
Für den
Fachmann ist jedoch ersichtlich, dass diese Schritte auch durch
Hardware-Einrichtungen anstatt durch den Mikroprozessor ausgeführt werden
können.
-
27 zeigt
ein Beispiel für
den möglichen Inhalt
einer Lookup-Tabelle 1030, die im SPM-RAM-Block 548 gespeichert
ist. Die Tabelle 1030 ist aus einer Anordnung von flüchtigen
Speicherorten (RAM) gebildet, die in LBA/PBA-Reihen und -Spalten
organisiert sind. Jede Reihe wird jeweils durch einen LBA-Wert mit
9 Bits, die LBA-Reihen-Adresse 1032 wie
zum Beispiel LBA 0, 1, 2, 3, ..., n – 1 adressiert. Die Anzahl
der Reihen ist abhängig von
der durch die Speichereinheit 508 bereitgestellten Speicherkapazität. Eine
Speicherkapazität
in der nichtflüchtigen
Speichereinheit 508 von mindestens 4 Megabyte kann zum
Beispiel 500 Blöcke
speichern (wobei jeder Block 16 Sektoren aufweist und jeder Sektor
512 Bytes umfasst), und 500 Blöcke
erfordern 500 Reihen in der Tabelle 1030. Die Spalten in
der Tabelle 1030 umfassen eine Blockadresse 1034 mit 9
Bits, ein Defekt-Flag 1036, ein Benutzt-Flag 1038 und
ein Alt-Flag 1040 zur Angabe des Status jedes Blocks in
der Speichereinheit 508 (der Leser sei daran erinnert,
dass ein LBA-Wert verwendet wird, um einen vom Host empfangenen
Sektor mit Informationen zu adressieren, während ein von der Steuerung erzeugter
PBA-Wert verwendet wird, um einen Sektor mit Informationen in einem
Block mit mehreren Sektoren zu adressieren, der in der Speichereinheit 508 gespeichert
ist).
-
Zum
leichteren Verständnis
wird das Ablaufdiagramm in 24 bis 27 unter
Bezugnahme auf den Inhalt der in 27 gezeigten
Tabelle 1030 sowie der Beispiele für den Inhalt von Tabelle 1030 beschrieben,
wie in 28 bis 38 gezeigt.
-
In 24 sendet der Host 502 in Schritt 1000 einen
Befehl an die Steuerung 506, um einen Sektor mit Informationen
in die Speichereinheit 508 zu schreiben. Der Informationssektor
wird vom Host adressiert, und diese vom Host gelieferte Adresse wird
von der Steuerung in einen LBA-Wert, das heißt LBA X, umgesetzt. Wie vorstehend
für andere
Ausführungsformen
der vorliegenden Erfindung beschrieben, empfängt der Host-Schnittstellenblock 520 den
Host-Befehl einschließlich
der Sektorinformation und Adresse und erzeugt daraus die LBA X zum
Adressieren einer LBA/PBA-Reihe in der Tabelle 1030 in 27.
-
Die
LBA X wird aus einer vom Host gelieferten Adresse erzeugt, die entweder
im LBA-Format oder im CHS-Format vorliegen kann; in diesem Fall wird
sie in das LBA-Format
umgewandelt. Die LBA-Adresse umfasst 16 Bits nach der bevorzugten Ausführungsform,
aber die vier niedrigstwertigen Bits (LSB) sind maskiert, und die
restlichen 12 Bits sind um vier Stellen nach rechts verschoben,
wobei die neun LSB-Bits des verschobenen Werts verwendet werden,
um die LBA/PBA-Reihen in Tabelle 1030 bei 1032 zu
adressieren. Für
die Reihenadressierung werden neun Bits verwendet, um 500 Blöcke in der Tabelle 1030 zu
adressieren. Wenn die Speichereinheit 508 eine andere Kapazität aufweist
und eine andere Anzahl von Blöcken
verwendet wird, wird alternativ eine entsprechende Bitgröße verwendet,
wie vorstehend beschrieben. In gleicher Weise kann bei alternativen
Ausführungsformen
ein Block eine andere Anzahl von Sektoren umfassen. Dementsprechend
wird die Anzahl der maskierten Bits in der vom Host empfangenen
Adresse unterschiedlich sein. Wenn zum Beispiel eine Blockgröße von 32
Sektoren verwendet wird, wären
fünf Bits
in der Adresse maskiert anstelle der gegenwärtigen vier Bits wie bei dem System
nach der bevorzugten Ausführungsform.
Außerdem
ist ein Informationssektor so aufgebaut, dass er einen Benutzerdatenteil
von 512 Bytes und einen Verwaltungsteil umfasst, der mindestens
ein ECC-Feld umfasst und mit Flag- und Adressinformationen in der
Speichereinheit 508 gespeichert werden kann.
-
In 24 vergleicht der Mikroprozessorblock 524 (auch
in der Steuerung 506 enthalten) in Schritt 1002 nach
Empfang eines solchen Befehls vom Host-Schnittstellenblock 520 (in
der Steuerung 506) die Adresse des Sektors, auf den zugegriffen wird,
das heißt
LBA X, mit einer Sektoradresse PREV_LBA, die zuvor in einem Speicherort
wie etwa einem Register (in den weiteren Abbildungen als Verschiebungs-LBA-Register 1054 bezeichnet)
im Mikroprozessorblock 524 gespeichert worden ist. Wenn LBA
X und PREV_LBA gleich sind, ist in Schritt 1004 der Schreibbefehl
vom Host ein sequenzieller Schreibbefehl, und der Mikroprozessorblock 524 prüft, ob der
durch LBA X adressierte Block zuvor geschrieben worden ist, indem
er die VPBA, eine 9-Bit-Adresse des einer entsprechenden LBA zugewiesenen
Blocks (wie nachstehend erläutert),
und den Inhalt der Blockadresse 1034 des SPM-RAM-Blocks 548 prüft.
-
Wenn
zum Beispiel der Host den Befehl zum Schreiben in LBA 5 gäbe, würden die
vier LSBs der Zahl '5' in Binärschreibweise
maskiert, woraus der Wert '0' resultierte, und
in 27 würde
die VPBA-Blockadresse 1034 entsprechend LBA 0 geprüft, die
in diesem Fall auf '1FF' gesetzt ist, um
anzugeben, dass der Block noch nicht verwendet wird. Wenn die VPBA
gültig
ist, das heißt
ein anderer Wert als lauter Einsen ('1FF' in
Hexadezimalschreibweise), prüft
der Mikroprozessorblock 524 ein Flag „anstehende Verschiebung", das ein Bit ist,
das im gesetzten Zustand angibt, dass die Information im Mikroprozessor
gespeichert ist. Das Flag „anstehende
Verschiebung" kann
wahlweise im SPM-RAM-Block 548 gespeichert werden, wie
in 27 in Spalte 1042 gezeigt, anstatt im
Mikroprozessor. Die Entscheidung darüber, wo das Flag für die anstehende
Verschiebung gespeichert wird, ist eine Auslegungsoption, obwohl
zu beachten ist, dass das Flag „Verschiebung anstehend", egal ob im Mikroprozessorblock
oder im SPM-RAM
gespeichert, nur ein Informationsbit ist. Dies liegt daran, dass
es nur einen Block geben kann, der sich im Prozess des Verschiebens
von einem Ort in der nichtflüchtigen
Speichereinheit 508 an einen anderen Ort darin befindet,
und das Flag „anstehende
Verschiebung" angibt,
ob ein solches Verschieben eines Blocks ansteht oder nicht. Für den Fachmann
sollte ersichtlich sein, dass bei alternativen Ausführungsformen
ein Verschieben für
mehr als einen Block vorgesehen sein kann. Bei einer solchen Implementierung
muss der Mikroprozessor jedoch die Kontrolle über mehr LBAs behalten und
es ist mehr Hardware nötig.
Die Entscheidung, ob das Verschieben für einen Block oder für mehrere
Blöcke
anstehen kann, ist eine Auslegungsoption.
-
Wenn
das Verschieben eines Blocks ansteht, das heißt wenn mindestens ein Sektor
eines Blocks, der vom Host vor dem Löschen neu geschrieben worden
ist, in einen anderen Block in der Speichereinheit 508 verschoben
worden ist, folgt in 24 nach Schritt 1006 der
Schritt 1018, und LBA X-Sektorinformationen werden in den
Block geschrieben, der die verschobenen Sektoren enthält. Danach
erhöht
der Mikroprozessor in Schritt 1020 die LBA X um eins und
speichert diesen erhöhten
Wert im Ort PREV_LBA.
-
Wenn
oben in 24 LBA X in Schritt 1002 nicht
mit PREV_LBA übereinstimmt,
ist der Sektor, auf den gegenwärtig
vom Host zugegriffen wird, nicht fortlaufend mit dem vorherigen
Sektor, auf den der Host zugegriffen hat, und daher muss der gesamte Informationsblock,
in dem zuvor Sektoren geschrieben wurden, an einen neuen Blockort übertragen werden,
wohin der alte Block verschoben wird. Dies ist in Schritt 1022 in 25 gezeigt.
Der folgende Schritt 1024 dient zum Durchführen eines
Lösch vorgangs
für alle
Orte eines Blocks, der sich an einer Adresse entsprechend LBA X
in der Speichereinheit 508 befindet, vor dessen erneuter
Verwendung. Danach werden in Schritt 1026 ein Verschiebungs-PBA-Register,
das ein Speicherort für
Informationen bezüglich
des Orts des Blocks ist, der gerade verschoben wird, ebenso wie
das Flag „anstehende
Verschiebung" gelöscht, und
der Prozess wird mit Schritt 1004 in 24 fortgesetzt.
-
Wenn
in 24 die VPBA in 1034, die
der LBA X entspricht, nicht gültig
ist (oder nicht '1FF' ist, wie vorstehend
erläutert),
wird vom SPM-Steuerungsblock 546 (in 10)
eine Suche durchgeführt, um
einen freien Block in der Speichereinheit 508 zu finden,
wie in 26 in Schritt 1028 gezeigt.
Das Benutzt-Flag entsprechend dem Ort PBA X in der Flash-Speichereinheit 508 ist
gesetzt, was angibt, dass auf den Block LBA X vor dessen Löschen zugegriffen
worden ist, wie in Schritt 1029 gezeigt. Später wird
in Schritt 1031 die VPBA des gefundenen freien Blocks in
einem der Orte in der Lookup-Tabelle 1030 gespeichert,
wobei dieser Ort sich in einer der Reihen in der Spalte 1034 entsprechend
der LBA X in 27 befindet. Nach Schritt 1031 in 26 kehrt
der Prozess zu Schritt 1016 in 24 zurück.
-
In
gleicher Weise wird in 24, wenn die VPBA
in 1034 entsprechend der LBA X gültig ist, das Flag „anstehende
Verschiebung" in
Schritt 1006 geprüft.
Wenn das Flag „anstehende
Verschiebung" in Schritt 1006 nicht
gesetzt war, wird eine Suche für
einen freien LBA-Block in Schritt 1008 durchgeführt, das
Flag für
die anstehende Verschiebung wird in Schritt 1010 gesetzt,
die VPBA für
den neu gefundenen freien Block (in Schritt 1008) wird
in Schritt 1012 in einem Ort in der Lookup-Tabelle 1030 gespeichert und
das Benutzt-Flag entsprechend dem Block LBA X in der Speichereinheit 508 wird
gesetzt.
-
In
Schritt 1016 wird die VPBA für den neu gefundenen freien
Block durch den Mikroprozessor in einem Verschiebungs-PBA-Register
gespeichert. In 27 sind das Verschiebungs-PBA-Register
als 1052 und das Verschiebungs-LBA-Register als 1054 gezeigt.
Diese beiden Register sowie die VPBA-Blockadresse in 1034 werden
nach dem erstmaligen Einschalten des digitalen Systems 500 sowie
nach dem Löschen
des verschobenen Blocks auf den Hexadezimalwert '1FF' initialisiert.
In der vorstehenden Beschreibung in Bezug auf die Ablaufdiagramme
in 24 bis 26 bedeutet
das „Löschen" eines dieser Register
(zum Beispiel in Schritt 1026) praktisch, dass der Inhalt
der Register auf '1FF' gesetzt wird.
-
Nach
Schritt 1016 werden Daten, die vom Host empfangen wurden,
um sie in den Block LBA X zu schreiben, in den neu gefundenen freien
Block in der Speichereinheit 508 geschrieben, wie in Schritt 1018 gezeigt.
In Schritt 1020 wird dann LBA X um eins erhöht und der
erhöhte
Wert wird in PREV_LBA gespeichert. Auf die vorstehend beschriebene
Weise vermeidet die bevorzugte Ausführungsform der vorliegenden
Erfindung, dass alle Sektoren eines Blocks, dessen Sektoren vor
einem Löschvorgang neu
geschrieben werden, in einen nicht benutzten Ort im Flash-Speicher
verschoben werden müssen, wenn
die Sektoren einzeln und nacheinander vom Host adressiert werden.
Dies liegt daran, dass jedes Mal, wenn auf den nächsten fortlaufenden Sektor
zugegriffen wird, der Blockort, wo sich die neuesten oder verschobenen
Sektoren befinden, im Verschiebungs-PBA-Register 1052 aktualisiert
wird, und weil der PREV_LBA-Wert angibt, wo in dem letzteren Block
der nächste
Sektor geschrieben werden soll, wird der Schreibvorgang mit diesen
beiden Parametern ausgeführt,
ohne dass ein gesamter Block verschoben werden muss. Dadurch wiederum
lassen sich unnötige
Lese-, Schreib- und Löschvorgänge einsparen,
wie sie bei Systemen nach dem Stand der Technik erforderlich sind.
Wenn zum Beispiel bei den bekannten Systemen ein Sektor eines Blocks
neu geschrieben wurde, wurden zwangsläufig 15 Lesevorgänge und
15 Schreibvorgänge
ausgeführt,
weil ein ganzer Informationsblock verschoben wurde. Wie anhand der
nachstehenden Beispiele gezeigt wird, vermeiden die Ausführungsformen
jedoch diese 15 Lese- und Schreibvorgänge und schreiben nur den Sektor,
der neu geschrieben wurde.
-
28 zeigt
allgemein die Organisation der Informationen in den Blöcken der
Speichereinheit 508. Wie gezeigt, umfasst jeder Block 16
Sektoren, und jeder Sektor eines Blocks enthält einen Ort 1056 mit
512 Bytes zum Speichern des Benutzerdatenteils und einen Speicherort 1058 zum
Speichern des ECC-Codes. Jeder Block, das heißt Block 0, Block 1 usw. wird
mit dem 9-Bit-Blockadressenwert 1034 (in 27)
adressiert, und jeder Sektor in dem Block wird mit den vorstehend
beschriebenen vier maskierten LSB-Bits adressiert, nachdem die Maskierung aufgehoben
ist. Der letzte Sektor jedes Blocks enthält außerdem einen Blockadressen-Ort 1060 zum
Speichern des 9-Bit-LBA-Werts
für den
Block, in dem sich der Blockadressen-Ort 1060 befindet.
Der Blockadressen-Ort 1060 von Block 0 enthält zum Beispiel den
Wert '0', der Blockadressen-Ort 1060 von
Block 1 den Wert '1', der Blockadressen-Ort 1060 von
Block 2 den Wert '2' usw. für alle Blöcke. Faktisch
sind diese Werte identisch mit den Werten der LBA/PBA-Reihenadresse 1032 (in 27 gezeigt).
-
Außerdem ist
im letzten Sektorspeicherbereich für jeden Block ein Speicherort
zur Aufnahme des Defekt-Flags 1062, des Benutzt-Flags 1064,
des Alt-Flags 1066 und eines Blockgut-Flags 1068 enthalten.
Das Defekt-Flag und das Alt-Flag 1062 bzw. 1066 entsprechen
den Defekt- und Alt-Flags 1036 und 1040 in der
SPM-RAM-Lookup-Tabelle 1030 (in 27 gezeigt).
Jedes Benutzt-Flag entspricht einem Sektor eines Blocks; daher weist
jeder Sektorort in jedem Block einen Benutzt-Flag-Ort auf. Der Grund
für die
Benutzung eines Benutzt-Flags für
jeden Sektor in dem Block besteht darin, anzugeben, welche Sektoren
des Blocks aus dem ursprünglich enthaltenen
LBA-Ort (wie durch
das Verschiebungs-LBA-Register 1054 angegeben) verschoben wurden
oder in den Verschiebungs-PBA-Ort (wie durch den Inhalt des Verschiebungs-PBA-Registers 1052 angegeben)
geschrieben werden. Dies ist besonders nützlich beim Verschieben eines
ganzen Blocks, der einige Sektoren aufweist, die verschoben wurden,
und andere, die nicht verschoben wurden.
-
Wenn
zum Beispiel vom Host auf einen Sektor zugegriffen wird, der nicht
in fortlaufender Reihenfolge ist, wie vorstehend anhand von 24 bis 26 beschrieben,
wird ein ganzer Sektor, der sich im Zustand „Verschiebung anstehend" befand, verschoben.
In einem solchen Fall prüft
der Mikroprozessor das Benutzt-Flag für jeden Sektor in dem verschobenen
Block und verschiebt nur die Sektoren, deren Benutzt-Flags nicht
gesetzt sind, weil jene Sektoren, die gesetzte Benutzt-Flags aufweisen,
bereits bei sequenziellen Zugriffen durch den Host verschoben worden
sind.
-
Bei
einer alternativen Ausführungsform
wird anstelle der Benutzt-Flags zur Angabe, welche Sektoren verschoben
werden müssen,
vom Mikroprozessor ein Verschiebungszeiger-Ort, das heißt ein Wort mit
einer Länge
von 16 Bits, verwendet und im Mikroprozessorblock 524 gespeichert,
um dieselbe Aufgabe zu erfüllen.
Nachdem das Flag für
die anstehende Verschiebung gesetzt ist, wird bei jedem Verschieben eines
Sektors in den Verschiebungs-PBA-Ort ein Bit im Verschiebungszeiger-Wort
(in dem Beispiel in 29 und folgende als 170 gezeigt)
entsprechend dem Ort des Sektors in dem Block gesetzt. Daher dient
das Verschiebungszeiger-Wort als eine Zuordnungs-Map für die verschobenen
Sektoren eines Blocks und bietet eine schnelle Möglichkeit zur Identifizierung
dessen, welche Sektoren des Blocks, für den ein Verschieben ansteht,
sich im Verschiebungs-PBA-Ort und welche sich im Verschiebungs-LBA-Ort
befinden.
-
Das
Blockgut-Flag 1068 ist in den ersten und letzten Sektoren
jedes Blocks enthalten, um den Ort des Blocks anzugeben, wo sich
die neueste und exakte Kopie der gespeicherten Datei befindet. Nach
einem Stromausfall wird der Inhalt der Speichereinheit 508 verwendet,
um die Lookup-Tabelle 1030 im SPM-RAM zu aktualisieren,
und wenn ein Block zum Beispiel gerade von einem ersten Ort in der
nichtflüchtigen
Speichereinheit 508 an einen zweiten Ort in der Speichereinheit 508 verschoben
wurde, als der Stromausfall eintrat, werden die Blockinformationen auf
zwei Blöcke
aufgeteilt, die mit derselben LBA adressiert werden. Für den zweiten
Block, wohin Informationen verschoben wurden, kann nicht zuverlässig angenommen
werden, dass er gute Daten enthält,
weil das Verschieben nicht abgeschlossen wurde, und die Informationen
in dem ersten Block können
in der Tat brauchbarer sein.
-
Wenn
ein Block von einem ersten Block in einen zweiten Block verschoben
wird, wird der letzte Sektor des ersten Blocks zuerst in den zweiten
Block verschoben, und das Blockgut-Flag 1068 für den letzten
Sektor des zweiten Blocks wird gesetzt, um anzuzeigen, dass dieser
Block 'gut' ist; danach werden
der nächste
Sektor bis zum letzten Sektor des ersten Blocks an den entsprechenden
Ort des zweiten Blocks verschoben usw., bis alle Sektoren einschließlich des
ersten Sektors des ersten Blocks verschoben sind. Danach wird das
Blockgut-Flag für
den ersten Sektor des zweiten Blocks gesetzt, um anzuzeigen, dass
der zweite Block 'gut' ist. In diesem Zusammenhang
kann, wenn zum Beispiel beim Wiederherstellen der Stromversorgung
zwei Blöcke
aufgrund der unvollständigen Übertragung
der Blockinformationen von einem Block zum anderen dieselben LBA-Werte
aufweisen, der Block mit den genauen Informationen identifiziert
werden, indem der Status der beiden Blockgut-Flags für jeden
Block geprüft wird.
Das heißt,
wenn ein Block zwei nicht übereinstimmende
Blockgut-Flag-Werte aufweist, wurde er nicht vollständig übertragen
und ist daher kein guter Block. Wenn andererseits einer der Blöcke zwei übereinstimmende
Blockgut-Flags aufweist, die angeben, dass der Block gut ist, und
der andere Block zwei nicht übereinstimmende
Flags aufweist, die angeben, dass der Block nicht gut ist, und das
Flag „Verschiebung
anstehend" gesetzt
ist, kommt der Mikroprozessor zu dem Schluss, dass der letztere Block
nicht gut ist, und verwendet die Informationen im ersteren Block
als gültige
Informationen.
-
29 bis 38 zeigen
verschiedene Beispiele für
den Inhalt der SPM-RAM-Lookup-Tabelle bei
verschiedenen Arten von LBA-Zugriffen für ein besseres Verständnis der
Funktion der bevorzugten Ausführungen,
wie sie vorstehend anhand von 24 bis 28 beschrieben
worden sind. Zunächst
werden beim Einschalten des Systems die Werte in den Blockadressen-Orten 1034 sowie
der Inhalt des Verschiebungs-PBA-Registers
und des Verschiebungs-LBA-Registers alle auf '1FF' in
Hexadezimalschreibweise gesetzt. Die Flags und das Verschiebungszeiger-Wort 170 werden
alle auf '0' gesetzt.
-
In 29,
wenn der Host nach dem Einschalten die Steuerung anweist, in LBA
0 bis LBA 15 zu schreiben, stellt die SPM-Steuerung vermutlich fest,
dass Block 0 frei ist, und der Mikroprozessor verwendet ihn, um
die vom Host gelieferten Daten zu speichern. Daher enthält die Blockadresse 1034 des LBA-Blocks
0 den Wert '0' und das Benutzt-Flag
für diesen
Block wird gesetzt.
-
In 30 weist
der Host die Steuerung nach dem Schreibvorgang in 29 an,
nur in LBA 5 zu schreiben. In diesem Fall wird der Wert '5' in Hexadezimalschreibweise verarbeitet,
um seine vier LSBs zu maskieren und so den Wert '0' zu
erhalten. Weil der Ort LBA 0 in der Speichereinheit 508 jedoch
zuvor in den Schritten in 29 be schrieben
wurde, muss die SPM-Steuerung einen anderen verfügbaren freien Block suchen.
Unter der Annahme, dass sich ein solcher Block an der Adresse '1' befindet, schreibt die Steuerung dann
die Daten, die vom Host gesendet wurden, um sie als LBA 5 zu speichern,
in Ort 5 des LBA-Blocks 1, das heißt den sechsten Sektorort (Ort 0
ist der erste Sektor) in Block 1. Danach wird das Flag „anstehende
Verschiebung", das
entweder im Mikroprozessorblock oder alternativ in der SPM-RAM-Lookup-Tabelle
an Ort 1042 gespeichert werden kann, von der Steuerung
gesetzt.
-
Außerdem schreibt
die Steuerung die Adresse '001', an die der Block
verschoben wird, in das Verschiebungs-PBA-Register 1052 und
setzt das Flag „anstehende
Verschiebung" (entweder
im Mikroprozessor oder in 1042). Es ist zu beachten, dass
das Verschiebungs-PBA-Register 1052 bei alternativen Ausführungsformen
im SPM-RAM gespeichert werden kann. Die Steuerung setzt auch das
Benutzt-Flag 1038 entsprechend Block 1 in der SPM-RAM-Lookup-Tabelle 1030 und
aktualisiert das Verschiebungs-LBA-Register 1054,
um einen Wert '0' zu speichern, der
angibt, dass mindestens einer oder mehrere Sektoren von Block 0
an einen anderen Ort in der Speichereinheit 508 verschoben
worden sind. Wenn das Verschiebungszeiger-Wort 170 verwendet wird,
aktualisiert die Steuerung dieses ebenfalls, um anzuzeigen, dass
LBA 5 verschoben worden ist.
-
Ab
hier können
verschiedene unterschiedliche Ereignisse eintreten, und in jedem
Fall hat die Lookup-Tabelle 1030 einen vollkommen anderen
Inhalt. 31 bis 33 zeigen
den möglichen
Inhalt der Lookup-Tabelle 1030 nach dem in 31 gezeigten
Zustand, um die Wirkung der verschiedenen Ereignisse zu zeigen.
Im Einzelnen zeigt 31 den Inhalt der Tabelle 1030,
wenn eine LBA, die nicht in Block 0 ist, geschrieben wird. 32 zeigt
den Inhalt der Tabelle 1030, wenn der Host erneut in LBA
5 schreibt, und 33 zeigt den Inhalt der Tabelle 1030,
wenn der Host in eine andere LBA als LBA 5 schreibt, die sich aber
dennoch in Block 0 befindet, das heißt LBA 6.
-
Wenn
in 31 der Host in LBA 17 schreibt, liegt dies eindeutig
außerhalb
von Block 0 und es handelt sich um einen nicht fortlaufenden Sektor-Schreibvorgang,
weil das vorherige Schreiben in LBA 5 erfolgte. Hier werden wieder
die vier LSBs der Hexadezimalentsprechung für den Wert '17' maskiert,
um Block '1' zu erhalten. Die
Steuerung vergleicht dann das Verschiebungs-LBA-Register 1054 mit '1' und prüft auch, ob das Flag „anstehende
Verschiebung" gesetzt
ist. Weil der Wert im Verschiebungs-LBA-Register '0' lautet,
liegt eine Übereinstimmung
vor, und die anstehende Verschiebung muss beendet werden. Das heißt, alle
Sektoren, die in Block 1 noch nicht aktualisiert worden sind, müssen von
Block 0 nach Block 1 verschoben werden, und Block 0 muss entweder
gelöscht
oder bis zu einem späteren
Zeitpunkt als 'alt' markiert werden,
bis er im Hintergrund gelöscht
werden kann, bevor die neue LBA 17 in einen Block in der Speichereinheit 508 geschrieben
wird. Die neue LBA 17 wird daher in Block 2 geschrieben, der der
von der SPM-Steuerung gefundene nächste freie Block ist.
-
32 zeigt
den Fall, wo der Host erneut auf LBA 5 zugreift. In diesem Fall
müssen
die vom Host empfangenen Daten für
LBA 5 in einen anderen Block geschrieben werden, und das Verschiebungs-PBA-Register 1052 muss
mit der nächsten Blockadresse
aktualisiert werden und der alte Block muss als 'alt' markiert
werden, um ihn später
zu löschen.
In diesem Fall wird die LBA 5 in Block 2 geschrieben, der frei ist,
und weil außer
Sektor 5 keine anderen Sektoren in Block 1 geschrieben wurden, werden
keine anderen Sektoren von Block 1 nach Block 2 verschoben, und
der Inhalt von Block 0 bleibt unverändert. Block 1 wird als 'alt' markiert, und das Verschiebungs-PBA-Register 1052 wird
aktualisiert, um den Wert 002 zu enthalten, weil LBA 5 sich jetzt in
Block 2 befindet. Hierbei ist zu beachten, dass in diesem Beispiel
die Notwendigkeit vermieden wird, alle Sektoren von Block 0 nach
Block 1 oder Block 2 zu verschieben, wie dies bei bekannten Verfahren
erforderlich ist, wodurch 15 Lese- und 15 Schreibzyklen entfallen.
Außerdem
setzt die Steuerung das Benutzt-Flag entsprechend Block 2.
-
In 33 schreibt
der Host in LBA 6. Hier maskiert die Steuerung wieder die unteren
vier Bits der Hexadezimalentsprechung von '6',
wodurch sich '0' ergibt. Die Steuerung
vergleich dann diesen Wert '0' mit dem Wert im
Verschiebungs-LBA-Register 1054 und stellt fest, dass eine Übereinstimmung
zwischen den beiden Werten vorliegt. Durch Prüfen des Verschiebungszeiger-Worts 170 oder
durch Prüfen des
Benutzt-Flags entsprechend Sektor 6 wird festgestellt, ob Sektor
6 zuvor geschrieben worden ist oder zur Benutzung frei ist. Weil
der Sektor 6 zuvor nicht geschrieben worden ist, setzt die Steuerung
in diesem Fall nur das entsprechende Bit des Verschiebungszeiger-Worts 170 (oder
alternativ das Benutzt-Flag für
Sektor 6 in der Speichereinheit 508) und schreibt die vom
Host empfangenen Daten in Sektor 6 von Block 1. Weitere Änderungen
am Inhalt der Lookup-Tabelle 1030 sind nicht nötig.
-
Wenn
der Host weiter Daten nacheinender in die LBAs 7, 8, 9 bis 15 schreibt,
werden diese neuen LBAs von der Steuerung dementsprechend in die
jeweiligen Sektoren 7, 8, 9 bis 15 geschrieben. Nachdem das Ende
des Blocks erreicht ist, das heißt nachdem der letzte Sektor,
Sektor 15, geschrieben ist, werden die Sektoren 0, 1, 2, 3 und 4
von Block 0 nach Block 1 verschoben, weil der Host diese Sektoren
nicht aktualisiert hat. Block 0 wird dann als 'alt' markiert,
und das Verschiebungs-PBA-Register 1053 und das Verschiebungs-LBA-Register 1054 werden auf '1FF' initialisiert, um
anzuzeigen, dass keine Verschiebung ansteht. Aus demselben Grund
wird auch das Verschiebungszeiger-Wort 170 auf '0' initialisiert. Diese Beschreibung ist
in den Beispielen in 34 bis 38 gezeigt.
In 38 ist der Status der Lookup-Tabelle 1030 gezeigt,
wenn der Block vollständig
gebraucht ist und die anstehende Verschiebung beendet ist. Wie gezeigt,
lautet die Blockadresse 1034 von LBA-Block 0 jetzt '001', und Block 0 ist als 'alt' markiert, um ihn
zu löschen,
und die Register 1052 und 1054 sind als initialisiert
gezeigt.
-
Obwohl
die vorliegende Erfindung anhand von bestimmten Ausführungsformen
beschrieben worden ist, ist für
den Fachmann zweifellos ersichtlich, dass Änderungen und Modifikationen
daran möglich
sind.