-
Technischer Bereich
-
Die
vorliegende Erfindung bezieht sich allgemein auf Techniken zum Ausgleich
der Abnutzung nicht-flüchtiger
Speicher.
-
Hintergrund
-
Sichere
Mikrocontroller können
Nur-Lesespeicher (ROM) zur Software-Programmspeicherung und elektrisch
lösch-
und programmierbaren Lesespeicher (EEPROM) zur Datenspeicherung
enthalten. Die EEPROM-Technik wird dramatisch teuerer, wenn sie
auf den Submikrometerbereich verkleinert wird, wodurch manche sichere
Mikrocontroller veranlasst wurden, sich einer anderen nicht-flüchtigen Speichertechnik,
wie z. B. Flash, zuzuwenden, die weniger kostspielig in der Miniaturisierung
ist. Insbesondere lässt
die Flash-Technik eine größere Entwurfsflexibilität zu, da
kein ROM-Maskenprozess erforderlich ist.
-
Unter
Verwendung eines EEPROM können die
zu löschenden
und/oder zu schreibenden Daten erforderlichenfalls byteweise geschrieben
werden. In Flash-Speichern kann zwar ein einzelnes Datenbyte geschrieben
werden, aber der Speicher kann nur seiten- oder blockweise gelöscht werden
(z. B. abhängig von
der konkreten Flashspeicherarchitektur). Die Software des sicheren
Mikrocontrollers müsste
deshalb eine Lese-Ändere-Schreib-Operation
auf der Seite (oder dem Block) ausführen, um die Aktualisierung
eines einzelnen Datenbytes zu emulieren.
-
Nach
einer Zahl von Löschungen
ist eine nicht-flüchtige
Speicherzelle abgenutzt. Die Speicherdauerhaftigkeit einer Flashspeicherzelle
(z. B. 100.000 Löschvorgänge, 10.000
Löschvorgänge, etc.)
hängt z.
B. von Herstellungsfaktoren ab. Verschiedene Hardware- und/oder
Software-Techniken können
verwendet werden, um die Lebensdauer eines nicht-flüchtigen
Speichers zu verlängern.
Zum Beispiel können
Abnutzungsausgleichungstechniken angewendet werden, um die Schreibvorgänge über die
Speicherzellen zu mitteln. Die Verwendung von Speicherzellen kann
z. B. rotiert werden, um sicherzustellen, dass einzelne Speicherzellen
nicht stärker als
andere Löschungen
ausgesetzt sind. Abnutzungsausgleichungstechniken können jedoch
aufgrund von Software-Verwaltungsanforderungen zu langsameren Antwortzeiten
führen.
Die langsameren Antwortzeiten können
in manchen Situationen zu einer langsameren Softewarefunktionalität führen (z. B.
in der Situation, in der ein Programm und Daten in einem nicht-flüchtigen
Speicher gemeinsam gespeichert sind).
-
Zusammenfassung
-
Eine
Teilmenge von Software-Objekten, die in einem ersten Segment eines
nicht-flüchtigen
Speichers gespeichert sind, werden als Software-Objekte identifiziert,
die häufige
Schreibvorgänge
erfodern oder anderweitig hohe Belastungsanforderungen haben. Die
Teilmenge von Software-Objekten wird in ein zweites Segment des
nicht-flüchtigen
Speichers verschoben, das eine hohe Belastbarkeit aufweist, und
zwar aufgrund der Anwendung von Abnutzungsausgleichungstechniken
auf das zweite Segment des nicht-flüchtigen Speichers. Das erste
und zweite Speichersegment können
sich in dem gleichen Speichergerät
oder in verschiedenen Speichergeräten befinden.
-
Beschreibung der Zeichnungen
-
1 illustriert
ein Beispiel eines Mikrocontrollers mit einem eingebetteten nicht-flüchtigen
Speicher.
-
2 illustriert
ein Beispiel der Neuabbildung eines nicht-flüchtigen ”Speicherfressers” von einem
ersten Speichersegment auf ein zweites Speichersegment.
-
3 illustriert
ein Beispielspiel innerhalb eines Mikrocontrollers mit einem eingebetteten nicht-flüchtigen
Speicher zur Identifizierung und zur Verwaltung von ”Speicherfressern”.
-
4 ist
ein Ablaufdiagramm, das einen Beispielprozess zur Transferrierung
eines Software-Objekts in ein hochausdauerndes, nicht-flüchtiges
Speichersegment von einem nicht-flüchtigen Hauptspeichersegment
und zur Verfügungstellung
einer Abnutzungsausgleichung für
das hochausdauernde, nicht-flüchtige
Speichersegment illustriert.
-
5 ist
ein Ablaufdiagramm, das einen Beispielprozess zur Zurverfügungstellung
einer Abnutzungsausgleichung für
ein hochausdauerndes, nicht-flüchtiges
Speichersegment illustriert.
-
6 ist
ein Flussdiagramm, das einen Beispielprozess zur Zurverfügungstellung
einer Abnutzungsausgleichung an das hochausdauernde, nicht-flüchtige Speichersegment
illustriert.
-
7 ist
ein Ablaufdiagramm, das einen zweiten Beispielprozess zur Zurverfügungstellung von
Abnutzungsausgleichung an ein hochausdauerndes, nicht-flüchtiges
Speichersegment illustriert.
-
8 ist
ein Flussdiagramm, das einen zweiten Beispielprozess zur Zurverfügungstellung
einer Abnutzungsausgleichung an ein hochausdauerndes, nicht-flüchtiges
Speichersegment illustriert, das von einem nicht-flüchtigen
Hauptspeichersegment getrennt ist.
-
9 ist
ein Flussdiagramm, das einen Beispielprozess zum Identifizieren
von Software-Objekt-Fressern
innerhalb eines nicht-flüchtigen
Hauptspeichersegments und zur Neuzuweisung der ”Fresser” an ein hochbelastbares, nicht-flüchtiges
Speichersegment illustriert.
-
Detaillierte Beschreibung
-
Beispielimplementierung eines
eingebetteten nicht-flüchtigen
Speichers
-
1 illustriert
ein Beispiel eines Mikrocontrollers 100 mit einem eingebetteten
nicht-flüchtigen Speicher 104.
Der Mikrocontroller 100 kann innerhalb eines elektronischen
Geräts,
wie z. B. einer kleinen tragbaren Computervorrichtung (z. B. Mobiltelefon,
PDA, etc.), einer sichereren Identifikationskarte (z. B. Bankkarte,
Gebäudezugangskarte,
etc.), oder kleinen Konsumgütergeräten (z.
B. Küchengeräten, Elektrowerkzeugen,
elektronischem Spielzeug, Medienwiedergabegeräten, etc.) verwendet werden.
In manchen Implementierungen kann der Mikrocontroller 100 zur
Speicherung und gemeinsamen Verwendung von sicheren Daten (z. B.
einem USB-Laufwerk) verwendet werden.
-
Der
Mikrocontroller 100 kann eine zentrale Verarbeitungseinheit
(CPU) 102, die Programmanweisungen ausführt, die in einem nicht-flüchtigen Speicher 104 (z.
B. Flash) gespeichert sind, und mit einem flüchtigen Datenspeicher 106 (z.
B. SRAM) kommuniziert, und ein oder mehr Peripheriegeräte 110,
wie z. B. einen oder mehrere Timer 110a, eine Unterbrechungssteuereinheit 110b,
eine Steuereinheit 110c für einen universellen seriellen
Bus (USB), eine Systempaketschnittstelle (SPI) 110d, oder
eine andere Schnittstelle enthalten.
-
Die
CPU 102 empfängt
die Programmanweisungen über
einen Programmbus 112 und transferriert Daten über einen
Datenbus 114. Eine Bussteuereinheit 108 steuert
den Datenverkehr zwischen der CPU 102, dem nicht-flüchtigen
Speicher 104, dem flüchtigen
Datenspeicher 106 und den Peripheriegeräten 110. Ein oder
mehrere Peripheriegeräte 110 können mit
externen Vorrichtungen über
ein oder mehrere Schnittstellen 116 gekoppelt werden (z.
B. eine USB-Schnittstelle 116a, eine SPI-Schnittstelle 116b und/oder
eine andere Schnittstelle 116c). Die Schnittstellen 116 können z.
B. Schaltungen zur Implementierung kabelgebundener und/oder drahtloser Datenverbindungen
enthalten.
-
Der
Mikrocontroller 110 kann mehr, weniger, oder andere Elemente
als die in 1 illustrierten enthalten. Zum
Beispiel kann der nicht-flüchtige Speicher 104 unter
Verwendung von zwei logisch und/oder physikalisch getrennten eingebetteten Speichern
implementiert werden, die zwei verschiedene nicht-flüchtige Speichertechniken
beinhalten können.
Die getrennten eingebetteten Speicher können z. B. verwendet werden,
um verschiedene Arten von Information (z. B. Programmcode, Daten)
zu speichern.
-
2 illustriert
die Neuabbildung eines ”Fresserobjekts” 206 von
einem nicht-flüchtigen Hauptspeichersegment 202 auf
ein hochausdauerndes, nicht-flüchtiges
Speichersegment 204 innerhalb eines eingebetteten nicht-flüchtigen
Speichersystems 200. Das eingebettete nicht-flüchtige Speichersystem 200 kann
z. B. innerhalb eines Mikrocontrollers (z. B. der nicht-flüchtige Speicher 104)
enthalten sein. Das Speichersystem 200 kann ein bekanntes Flashspeichersystem
(z. B. JFFS2, YAFFS, UDF) sein.
-
Das ”Fresserobjekt” 206,
wie es hier genannt wird, ist ein Software-Objekt, das häufigen Schreiboperation
ausgesetzt ist und eine Ausdaueranforderung hat, die höher ist
als die technische Ausdauerkapazität des nicht-flüchtigen
Speichers, in dem sich das Fresserobjekt 206 befindet.
Nicht-flüchtiger
Speicher kann eine vorbestimmte Zahl von Löschvorgängen verkraften, bevor ein
Fehler auftritt, die üblicherweise
als die Ausdauer der Speichertechnik bezeichnet wird. Nicht-flüchtiger
Speicher kann eine vom Hersteller angegebene Ausdauerkapazität, z. B. 100.000
Schreibzyklen pro Speicherzelle, haben. Wenn das Fresserobjekt 206,
das sich in einem ersten Speichersegment 202 des nicht-flüchtigen
Speichers befindet, nahe an der Ausdauerkapazität des nicht-flüchtigen
Speichers (z. B. 100.000 Schreibzyklen) liegt, wird das Fresserobjekt 206 in
ein zweites Speichersegment 204 verschoben, das eine höhere Ausdauerkapazität (im Folgenden
auch als ”Ausdauertank” bezeichnet)
hat, als die Ausdauerkapazität des
ersten Speichersegments 202. Die logische Adresse des verschobenen
Fresserobjekts 206 wird auf die neue physikalische Adresse des
Fresserobjekts 206 in dem zweiten Speichersegment 204 abgebildet,
so dass das Fresserobjekt 206 durch das Speichersystem 200 als
Reaktion auf eine Lese/Schreibanforderung von einem Prozessor (z.
B. CPU 102) angesprochen werden kann.
-
Das
Fresserobjekt 206 kann, wenn es an der gleichen Stelle
innerhalb des nicht-flüchtigen
Speichers belassen wird, die Ausdauerkapazität des nicht-flüchtigen
Speichers schnell überschreiten.
Wie hier offenbart wird, kann eine Erkennungsroutine verwendet werden,
um das Fresserobjekt 206 innerhalb des ersten Speichersegments 202 des
nicht-flüchtigen
Speichers zu detektieren und das Fresserobjekt 206 in das
zweite, hochausdauernde Speichersegment 204 zu verschieben.
Bestimmte Fresserobjekte sind dafür bekannt, häufige Schreiboperationen
zu erfordern, wie z. B. eine Dateizuordnungstabelle (FAT) eines
Dateisystems. In manchen Implementierungen können diese ”natürlichen” Fresserobjekte 206 während der
Initialisierung des Speichersystems 200 automatisch in
dem hochausdauernden Segment 204 platziert oder anderweitig
als Fresserobjekte gekennzeichnet werden.
-
In
manchen Implementierungen ist das hochausdauernde, nicht-flüchtige Speichersegment 204 eine
logische Partition des gleichen eingebetteten Speichers, wie das
erste oder nicht-flüchtigen Hauptspeichersegments 202.
Die Größe des hochausdauernden,
nicht-flüchtigen
Speichersegments 204 kann z. B. statisch festgelegt werden
(z. B. zum Zeitpunkt der Mikrocontrollerherstellung), und zwar auf
Basis des erwarteten Anteils von Software-Objekten mit hohem Löschaufkommen,
oder dynamisch festgelegt werden (z. B. durch eine Software-Einstellung), während Fresserobjekte
innerhalb des nicht-flüchtigen
Speichersystems 200 verschoben und neu abgebildet werden.
-
In
manchen Implementierungen ist das hochausdauernde Speichersegment 204 physikalisch
von dem nicht-flüchtigen
Speichersegment 202 getrennt. Das hochausdauernde, nicht-flüchtige Speichersegment 204 kann
z. B. eine höhere
Ausdauerkapazität
und/oder Speicherzellen haben, die unter Verwendung einer anderen
Technik erzeugt wurden, als die Technik der Speicherzellen des nicht-flüchtigen
Speichersegments 202. Zum Beispiel kann das nicht-flüchtige Speichersegment 202 unter
Verwendung der 100K Ausdauer-Flash-Technik implementiert
werden, wohingegen das hochausdauernde, nicht-flüchtige Speichersegment 204 unter Verwendung
der 100M Ausdauer-SONOS-Technik implementiert werden kann. In manchen
Implementierungen kann das hochausdauernde, nicht-flüchtige Speichersegment 204 eine
andere Blockgröße und/oder
einen anderen Löschmechanismus
als das nicht-flüchtige
Speichersegment 202 haben. Zum Beispiel könnte das hochausdauernde,
nicht-flüchtige
Speichersegment 204 seitenweise löschbar sein, wohingegen das
nicht-flüchtige
Speichersegment 202 blockweise löschbar ist.
-
In
manchen Implementierungen kann eine oder mehrere Abnutzungsausgleichungstechniken auf
das hochausdauernde, nicht-flüchtige
Speichersegment 204 angewendet werden, um die Gesamtausdauer
zu erhöhen.
Zum Beispiel kann die Größe des hochausdauernden,
nicht-flüchtigen
Speichersegments 204 so gewählt werden, dass die Zahl der verschobenen
Fresserobjekte wesentlich kleiner ist als die Gesamtzahl der Speicherblöcke innerhalb
des hochausdauernden, nicht-flüchtigen
Speichersegments 204. Auf diese Weise können die Speicherblockinhalte
unter den Speicherblöcken
rotiert werden, wodurch die gesamte effektive Ausdauer des hochausdauernden,
nicht-flüchtigen
Speichersegments 204 über
die physikalische Ausdauer eines einzelnen Speicherblocks des hochausdauernden,
nicht-flüchtigen
Speichersegments 204 hinaus erhöht werden kann. In manchen
Implementierungen hat das hochausdauernde, nicht-flüchtige Speichersegment 204 eine
größere Gesamtspeicherkapazität, als das nicht-flüchtige Hauptspeichersegment 202.
-
3 illustriert
eine beispielhafte Mikrocontrollerarchitektur 300 mit einem
segmentierten eingebetteten nicht-flüchtigen Speichersystem 200 zur Identifizierung
und Verwaltung von Fresserobjekten. Die Mikrocontrollerarchitektur 300 könnte z.
B. innerhalb des Mikrocontrollers 100 aus 1 verwendet werden.
Die Mikrocontrollerarchitektur 300 enthält das Speichersystem 200,
welches des Weiteren das nicht-flüchtige Hauptspeichersegment 202,
das hochausdauernde, nicht-flüchtige
Speichersegment 204, die CPU 102, die Bussteuereinheit 108 und
den flüchtigen
Datenspeicher 106 enthält.
-
Das
nicht-flüchtige
Hauptspeichersegment 202 enthält eine Sammlung von Speicherblöcken, wie
den beispielhaften Speicherblock 302. Der beispielhafte
Speicherblock 302 enthält
eine oder mehrere Seiten von Speicher 304 und einen Dienstleistungsbereich 306.
Der Dienstleistungsbereich 306 kann einen Löschzähler 307 enthalten,
der jedes Mal erhöht
wird, wenn der Speicherblock 302 gelöscht wird. In anderen Implementierungen
können
separate Löschzähler für jede Seite 304 innerhalb
des Speicherblocks 302 eingerichtet werden.
-
Das
nicht-flüchtige
Hauptspeichersegment 202 enthält zusätzlich eine Fressererkennungseinheit 308.
Die Fressererkennungseinheit 308 kann den Löschzähler 307 innerhalb
des Dienstleistungsbereichs 306 mit einem Ausdauerschwellwert
vergleichen (der z. B. ebenfalls in dem Dienstleistungsbereich 306 gespeichert
ist), und zwar unter Verwendung einer hard ware- oder software-basierten
Erkennungsroutine. Wenn der Löschzähler 307 den
Ausdauerschellwert erreicht, kann die Fressererkennungseinheit 308 eine
Fresserverwaltungseinheit 312 alarmieren.
-
Die
Fresserverwaltungseinheit 312 weist den Speicherblock 302 dem
hochausdauernden, nicht-flüchtigen
Speichersegment 204 zu. Die Fresserverwaltungseinheit 312 kann
die Adresse des neuen Orts des Speicherblocks 302 innerhalb
des Servicebereichs 306 speichern. Die Fresserverwaltungseinheit 312 kann
auch einen Eintrag innerhalb einer Zuordnungstabelle 314,
die innerhalb des flüchtigen
Datenspeichers 106 gespeichert ist, entsprechend der neu
abgebildeten Speicheradressstelle füllen. Zum Beispiel kann die
Fresserverwaltungseinheit 312 die neue Adressstelle in
die Zuordnungstabelle 314 schreiben, indem sie eine Nachricht über die
Bussteuereinheit 108 sendet. Die CPU 102 muss nicht über die
innerhalb der nicht-flüchtigen
Speichersegmente 202, 204 auftretenden Neuzuordnungen
im Bilde sein. Die Fresserverwaltungseinheit 312 kann innerhalb
der Software und/oder Hardware des nicht-flüchtigen Hauptspeichersegments 202 implementiert
sein. In manchen Implementierungen ist die Fresserverwaltungseinheit 312 innerhalb
des hochausdauernden, nicht-flüchtigen
Speichersegments 204 implementiert.
-
In
manchen Implementierungen enthält
die Zuordnungstabelle 314 sowohl die anfängliche Adresse
innerhalb des nicht-flüchtigen
Hauptspeichersegments 202 als auch die neu zugeordnete Adresse
innerhalb des hochausdauernden, nicht-flüchtigen Speichersegments 204,
so dass die Zuordnungstabelle 314 immer dann verwendet
werden kann, wenn Daten in oder aus den nicht-flüchtigen Speichersegmenten 202, 204 transferriert
werden. Beim Systemstart kann die Zuordnungstabelle 314 auf
Basis der in den Servicebereich 306 eines jeden Blocks
des nicht-flüchtigen
Speichersegments 204 geschriebenen, neu zugewiesenen Adressen gefüllt werden,
oder der Adressen des Speicherblocks 302, wenn der Block
nicht verschoben wurde. Es gibt mehrere Vorteile, wenn die verschobenen Adressen
in den Speicher 204 anstelle in den Hauptspeicher 202 geschrieben
werden. Die Adressneuzuordnung kann in den Servicebereich 306 geschrieben
werden und Daten können
mit einer einzelnen Schreiboperation mit besserer Leistungsfähigkeit
in die neu zugewiesene Adresse geschrieben werden. Beim Hochfahren
kann der Servicebereich 306 des Speichers 204 gelesen
werden, um die Zuordnungstabelle 314 zu füllen. Ein
Lesezugriff auf den Hauptspeicher 202, der groß sein kann,
ist nicht erforderlich. Das beste Startverhalten kann auftreten,
wenn nur der Dienstleistungsbereich 306 einer kleinen Sequenz
des Speichers 204 gelesen wird.
-
Wenn
die CPU 102 den Inhalt des Speicherblocks 302 durch
Senden einer Schreibanforderung über
den Datenbus 114 ändert,
kann die Bussteuereinheit 108 die Anforderung an den flüchtigen
Datenspeicher 106 senden, wo ein Nachschlagen innerhalb
der Zuordnungstabelle 314 vorgenommen werden kann. Die
Daten können
dann unter Verwendung der abgerufenen Adresse geändert werden. Beim Ändern der
Inhalte des hochausdauernden, nicht-flüchtigen Speichersegments 204 können eine oder
mehrere Abnutzungsausgleichungstechniken angewendet werden, um die
Gesamtausdauer des hochausdauernden, nicht-flüchtigen Speichersegments 204 zu
erhöhen.
Zum Beispiel könnten
die Inhalte des Speicherblocks 302, wenn sie modifiziert wurden,
an eine andere Speicherstelle innerhalb des hochausdauernden, nicht-flüchtigen
Speichersegments 204 geschrieben werden (z. B. eine andere Speicherseite
innerhalb des Speicherblocks 302 oder eine andere Speicherblockstelle).
Die Zuordnungstabelle 314 kann, wenn die Daten an eine
neue Speicherstelle transferriert wurden, entsprechend aktualisiert
werden.
-
Die
zuvorige Stelle der Inhalte des neu zugewiesenen Speicherblocks
können
als Abfall durch eine Abfallsammeleinheit (garbage collection engine) 310 markiert
werden. Zu einem späteren
Zeitpunkt kann die Abfallsammeleinheit 310 Abschnitte des hochausdauernden,
nicht-flüchtigen
Speichersegments 202, die als Abfall markiert sind, löschen. In manchen
Implementierungen kann die Abfallsammeleinheit 310 auch
verwendet werden, um Inhalte des nicht-flüchtigen Hauptspeichersegments 202 zu löschen. Die
Abfallsammeleinheit 310 kann innerhalb der Hardware und/oder
Software des nicht-flüchtigen Hauptspeichersegments 202 oder
des hochausdauernden, nicht-flüchtigen
Speichersegments 204 implementiert sein.
-
Erstes Beispiel für Neuzuweisungs-/Abnutzungsabgleichungstechnik
-
4 ist
ein Ablaufdiagramm, das einen beispielhaften Prozess zur Transferrierung
eines Software-Objekts von einem nicht-flüchtigen Hauptspeichersegment
in ein hochausdauerndes, nicht-flüchtiges Speichersegment 204 und
die Zurverfügungstellung
von Abnutzungsausgleichung für
das hochausdauernde, nicht-flüchtige
Speichersegment 400 illustriert. Wie auf der Spur 402 dargestellt,
wird ein in einen Block Ak 404 geschriebenes Software-Objekt
in einen Block B0 406 neu abgebildet. In manchen Implementierungen
ist der Block Ak 404 z. B. durch die Fressererkennungseinheit 308,
wie in 3 beschrieben wurde, als FresserSoftware-Objekt
gekennzeichnet worden. Der Block Ak 404 kann z. B. in dem
nicht-flüchtigen
Hauptspeichersegment 202 liegen (wie in 2 gezeigt),
wohingegen der Block B0 406 in dem hochausdauernden, nicht-flüchtigen Speichersegment 204 liegen
kann. In diesem Beispiel ist der Block B0 406 der erste
in einer Reihe von Blöcken,
die von einem Block B1 408, einem Block B2 410 bis
zu einem Block BN-1 412 reicht. Die Blöcke B0 406, B1 408,
B2 410 und BN-1 412 sind anfänglich alle gelöscht. Jeder
Block 46, 408, 410 und 412 kann
irgendeine Zahl von Seiten nicht-flüchtigen Speichers enthalten.
-
Wie
in einer zweiten Spur 414 dargestellt ist, ist der Block
B0 406 geschrieben und gültig und enthält die Inhalte
des Blocks Ak 404. Eine Speicherseite Ak[j] 416 innerhalb
des Blocks B0 406 wird verändert. Da der nicht-flüchtige Speicher
nur durch einen Lösch-Schreib-Zyklus überschrieben
wird, und der nicht-flüchtige
Speicher nur seiten- oder blockweise löschbar ist, unabhängig von
der Schreibgröße, wird nicht
der Block B0 406 gelöscht,
sondern die Inhalte der Speicherseite Ak[j] 416 werden
an eine neue Speicherstelle verschoben. Wie in der Spur 414 dargestellt
ist, werden die Inhalte der Speicherseite Ak[j] 416 in
den nächsten
Block des Speichers, den Block B1 408, transferriert. Wenn
eine gelöschte
Seite innerhalb des Blocks B0 406 verfügbar wäre, könnte in manchen Implementierungen
der Inhalt der Speicherseite Ak[j] 416 stattdessen intern
innerhalb des Blocks B0 406 transferriert werden.
-
Die
ursprüngliche
Stelle der Speicherseite Ak[j] 416 wird als ungültig markiert,
wie dies durch den ungültigen
Abschnitt 420 des Blocks B0 406 innerhalb einer
dritten Spur 418 dargestellt ist. In manchen Implementierungen
können
Speicherinhalte als ungültig
markiert werden, indem eine Gültigkeitsmarke
gesetzt wird (die z. B. innerhalb des Dienstleistungsbereichs 306 des
Blocks B0 406 gespeichert ist, wie in 3 beschrieben).
Der Block B1 408 enthält nun
die Inhalte der Speicherseite Ak[j] 416.
-
5 ist
ein Ablaufdiagramm, das einen Beispielprozess zur Zurverfügungstellung
von Abnutzungsausgleichung für
ein hochausdauerndes, nicht-flüchtiges
Speicherelement 500 illustriert. Wie innerhalb einer ersten
Spur 502 dargestellt ist, ist ein Block B0 504 der
erste in einer Reihe von Speicherblöcken, die von einem Block B1 506,
einem Block B2 508 bis zu einem Block BN-1 510 reicht.
Die Speicherblöcke
B0 504, B1 506, B2 508 und BN-1 510 können z.
B. innerhalb des hochausdauernden, nicht-flüchtigen Speichersegments 204 enthalten sein
(wie dies z. B. in 2 gezeigt ist). Die Blöcke B1 506 und
bN-1 510 sind anfänglich
gelöscht.
Der Block B0 504 ist vollständig geschrieben und gültig. Der
Block B2 508 hat eine oder mehrere geschriebene und gültige Seiten 512 und
eine oder mehrere geschriebene und ungültige Seiten 514.
Der Block B2 508 hat keinen übrigen gelöschten Platz zum Schreiben
zusätzlicher
Datenseiten.
-
Um
eine Abnutzungsausgleichung für
den nicht-flüchtigen
Speicher 500 zur Verfügung
zu stellen, werden die geschriebenen und gültigen Seiten 512 des
Blocks B2 508 in den gelöschten Block B1 506 verschoben.
In manchen Implementierungen kann das Abnutzungsausgleichungsverfahren
nach dem Füllen
des gesamten gelöschten
Platzes innerhalb des Blocks B0 504 ausgelöst werden,
oder alternativ beim nächsten
Schreiben auf das Speichersegment 500, nachdem die letzte
gelöschte
Seite des Blocks B0 504 geschrieben wurde. Wie in der zweiten
Spur 516 gezeigt, ist der Block B1 506 jetzt fast völlig geschrieben
und gültig
aufgrund der Einführung
der Speicherseite(n) 512. Der Block B2 508 ist vollständig geschrieben
und gültig
aufgrund der Ungültigmachung
der vorherigen Speicherstelle(n) der Speicherseite(n) 512.
-
In
einer dritten Spur 518 ist der Block B2 508 vollständig gelöscht. In
manchen Implementierungen kann die Neuzuweisung von Speicherseiten
und die Löschung
von Speicherblöcken
unter Verwendung der Abfallsammeleinheit 310 (wie in 3 beschrieben)
erzielt werden. Der nächste
Schreibzugriff auf den nicht-flüchtigen
Speicher 500 kann z. B. auf eine erste gelöschte Seite
einer oder mehrerer gelöschter Seiten 520 im
Block B1 506 erfolgen.
-
6 ist
ein Flussdiagramm, das einen Beispielprozess 600 zur Zurverfügungstellung
von Abnutzungsausgleichung für
das hochausdauernde, nicht-flüchtige
Speichersegment illustriert. Der Prozess 600 kann z. B.
in der Ausführung
der Schritte verwendet werden, wie sie in Bezug auf das hochausdauernde,
nicht-flüchtige
Speichersegment 400 in 4 und/oder
dem hochausdauernden, nicht-flüchtigen
Speichersegment 500 aus 5 dargestellt
wurden.
-
Der
Prozess 600 beginnt mit dem Schreiben einer Seite in dem
Speicherblock n (602). Die in dem Speicherblock n geschriebene
Seite kann z. B. von einem niedrig ausdauernden, nicht-flüchtigen
Speichersegment (z. B. dem nicht-flüchtigen Hauptspeichersegment 204 in 2)
in ein hochausdauerndes, nicht-flüchtiges Speichersegment (z.
B. das hochausdauernde, nicht-flüchtige
Speichersegment 204 aus 2) verschoben
werden. In manchen Implementierungen kann die Fresserverwaltungseinheit 312 (wie
in 3 gezeigt) die Seite von dem nicht-flüchtigen
Hauptspeichersegment 202 zu dem hochausdauernden, nicht-flüchtigen
Speichersegment 204 verschieben. In einem anderen Beispiel kann
die in den Speicherblock n geschriebene Seite innerhalb eines hochausdauernden,
nicht-flüchtigen Speichersegments
aufgrund einer Veränderung
des Inhalts der Seite verschoben werden. Wenn eine Seite verschoben
wurde, kann die vorherige Stelle der Seite als ungültig mar kiert
werden. In manchen Implementierungen wird eine Seite innerhalb eines Speicherblocks
als ungültig
markiert, indem eine Ungültigmarke
innerhalb des Dienstleistungsbereichs des Speicherblocks gesetzt
wird (z. B. der in 3 beschriebene Servicebereich 306).
-
Solange
gelöschte
Seiten innerhalb des Speicherblocks n (604) vorhanden sind,
können
weiterhin Seiten innerhalb des Speicherblocks n (602) geschrieben
werden. Sobald alle Seiten innerhalb des Speicherblocks n voll sind
(604), werden die geschriebenen und gültigen Seiten des Speicherblocks n
+ 2 in einen gelöschten
Abschnitt des Speicherblocks n + 1 kopiert. Zum Beispiel kann der
Speicherblock n + 2 eine oder mehrere Seiten enthalten, die geschrieben
sind, aber ungültig
gemacht wurden (z. B. verschoben, neu zugewiesen, etc.), und eine
oder mehrere gelöschte
Seiten, als auch eine oder mehrere Seiten, die geschrieben und gültig sind.
Nur die Seiten, die geschrieben und gültig sind, werden in den Speicherblock
n + 1 kopiert. In manchen Implementierungen kann die Seite innerhalb
des Speicherblocks n + 2 so dann als ungültig markiert werden, wenn
eine Seite von dem Speicherblock n + 2 in den Speicherblock n +
1 kopiert ist. Nachdem z. B. die Speicherseiten 512 von
dem Block B2 508 in den Block B1 506 kopiert sind,
wie in 5 gezeigt, werden die anfänglichen Stellen der Speicherseiten 512 innerhalb
des Blocks B2 508 als ungültig markiert.
-
Sobald
alle geschriebenen und gültigen
Seiten innerhalb des Speicherblocks n + 2 in den Speicherblock n
+ 1 kopiert wurden, wird der Speicherblock n + 2 gelöscht (608).
In manchen Implementierungen kann die Abfallsammeleinheit 310 (wie
in 3 gezeigt) Seiten zwischen den Speicherblöcken verschieben
und ungültige
Speicherblöcke löschen. Der
Prozess 600 wird fortgesetzt, indem der Speicherblockzeiger
n erhöht
wird, um auf den Speicherblock n + 1 zu zeigen. Zum Beispiel kann, wie
in 5 gezeigt, der Speicherblockzeiger n anfänglich auf
den Block B0 504 zeigen, wie dies innerhalb der Spur 502 gezeigt
ist, und nach dem Löschen des
Blocks B2 508 kann der Speicherblockzeiger n erhöht werden,
um auf den Block B1 506 zu zeigen, wie dies in der Spur 518 dargestellt
ist. Der Prozess 600 fährt
fort, die Seiten des Speicherblocks n + 1 (z. B. die leeren Seiten 520 innerhalb
des Blocks B1 506) zu füllen,
bis der Speicherblock n + 1 vollständig geschrieben ist.
-
Zweite Abnutzungsausgleichungstechnik
-
7 ist
ein Ablaufdiagramm, das einen zweiten Beispielprozess zur Zurverfügungstellung von
Abnutzungsausgleichung für
ein hochausdauerndes, nicht-flüchtiges
Speichersegment 700 illustriert. Wie innerhalb einer ersten
Spur 702 dargestellt ist, ist ein Block B0 704 der
erste einer Reihe von Speicherblöcken,
die von einem Block B1 706, einem Block B2 708,
einem Block B3 710 bis zu einem Block BN-1 712 reicht.
Die Speicherblöcke
B0 704, B1 706, B2 708, B3 710 und
BN-1 712 können
z. B. in dem hochausdauernden, nicht-flüchtigen Speichersegment 204 enthalten
sein (wie dies z. B. in 2 gezeigt ist). Die Blöcke B1 706 und
bN-1 712 sind anfänglich
gelöscht.
Die Blöcke
B0 704 und B2 708 sind vollständig geschrieben und gültig. Somit sind
in diesem Beispiel, beginnend mit einem Blockzeiger n auf den Block
B0 704, alle Seiten des Blocks n + 2 (wie in dem Prozess 500 aus 5 beschrieben)
geschrieben und gültig,
so dass der Abnutzungsausgleichungsprozess 500 unter diesen
Umständen
nicht greift. Der Block B3 710 hat eine oder mehrere geschriebene
und gültige
Seiten 714 und eine oder mehrere geschriebene und ungültige Seiten 716.
Der Block B3 710 enthält
keine gelöschten Speicherseiten
zum Schreiben zusätzlicher
Datenseiten.
-
Um
für den
nicht-flüchtigen
Speicher 700 eine Abnutzungsausgleichung zur Verfügung zu
stellen, werden die geschriebenen und gültigen Seiten 714 des
Blocks B3 710 in dem gelöschten Block B1 706 neu
zugewiesen. Wie in einer zweiten Spur 718 gezeigt, ist
der Block B1 706 nun teilweise geschrieben und gültig aufgrund
der Einführung
der geschriebenen und gültigen
Seiten 714. Der Block B3 710 ist geschrieben und
vollständig
ungültig,
da die vorherigen Stellen der geschriebenen und gültigen Seiten 714 als
ungültig
markiert wurden.
-
Eine
oder mehrere geschriebene und gültige Seiten 720 werden
von dem Block B2 708 zu dem Block B1 706 verschoben.
Wie in einer dritten Spur 722 dargestellt, ist der Bock
B1 706 nun mit Ausnahme einer letzten gelöschten Seite 724 gefüllt. Die letzte
gelöschte
Seite 724 steht bereit, den nächsten Schreibvorgang auf den
nicht-flüchtigen
Speicher 700 entgegenzunehmen. Auf diese Weise kann eine Deadlocksituation
vermieden werden, indem Raum für
einen Schreibvorgang gelassen wird, der auftreten kann, bevor die
ungültigen
Blöcke
gelöscht
sind. Wie in einer vierten Spur 726 gezeigt, kann der Block B3 710 gelöscht werden,
sobald die Neuzuordnungen vorgenommen wurden.
-
8 ist
ein Flussdiagramm, das einen zweiten Beispielprozess 800 zur
Zurverfügungstellung
von Abnutzungsausgleichung an ein hochausdauerndes, nicht-flüchtiges
Speichersegment, das von einem Hauptflashspeichersegment getrennt
ist, illustriert. Der Prozess 800 könnte z. B. zur Ausführung der
Schritte verwendet werden, die in Bezug auf das hochausdauernde,
nicht-flüchtige
Speichersegment 700 in 7 beschrieben
wurden.
-
Der
Prozess 800 beginnt mit dem Schreiben einer Seite in dem
Speicherblock n. Die in dem Block n geschriebene Seite kann z. B.
von einem niedrig ausdauernden, nicht-flüchtigen
Speichersegment (z. B. dem nicht-flüchtigen Hauptspeichersegment 204 in 2)
in ein hochausdauerndes, nicht-flüchtiges Speichersegment (z.
B. das hochausdauernde, nicht-flüchtige
Speichersegment 204 aus 2) verschoben
werden. In manchen Implementierungen kann die Fresserverwaltungseinheit 312 (wie
in 3 gezeigt) die Seite von dem nicht-flüchtigen Hauptspeichersegment 202 in
das hochausdauernde, nicht-flüchtige
Speichersegment 204 verschieben. In einem anderen Beispiel
kann die in dem Block n geschriebene Seite innerhalb eines hochausdauernden,
nicht-flüchtigen
Speichersegments aufgrund einer Veränderung des Inhalts der Seite
verschoben werden. Wenn eine Seite verschoben wurde, kann die zuvorige
Stelle der Seite als ungültig
markiert werden. In manchen Implementierungen wird eine Seite innerhalb
eines Speicherblocks als ungültig markiert,
indem eine Ungültigkeitsmarkierung
innerhalb des Dienstleistungsbereichs des Blocks (z. B. des Dienstleistungsbereichs 306,
wie in 3 beschrieben) gesetzt wird.
-
Solange
gelöschte
Seiten innerhalb des Speicherblocks n vorhanden sind (804),
können
weiterhin Seiten in den Speicherblock n geschrieben werden (802).
Sobald alle Seiten innerhalb des Speicherblocks n voll sind (804),
werden Gültigkeitsmarken
für alle
Seiten innerhalb des Speicherblocks n + 2 gelesen (806).
Die Gültigkeitsmarken
können
z. B. innerhalb des Dienstleistungsbereichs 306 (wie in 3 gezeigt)
des Speicherbocks n + 2 gespeichert sein. Wenn der Block n + i mehr
als NPcopy gültige Seiten
enthält
(808), wird der Zeiger auf den Speicherblock n + 2 erhöht und die
Gültigkeitsmarken
des nächsten
Speicherblocks n + i werden gelesen (806). NPcopy ist die
Zahl von gültigen
Seiten, die in einen freien Block kopiert werden. In 7 ist z.
B., beginnend mit dem Speicherblockzeiger n auf den Block B0 704,
der Speicherblock n + 2, der Block B2 708, vollständig geschrieben
und gültig.
-
Der
Prozess 800 wird fortgesetzt, um den Zeiger auf den Speicherblock
n + i zu erhöhen
und die Gültigkeitsmarken
des Speicherblocks n + i zu lesen, während der Prozess 800 feststellt,
dass der Speicherblock n + i mehr als NPcopy gültige Seiten enthält (808).
-
Um
effizient zu sein, sollte NPcopy die folgende Gleichung erfüllen, die
die Mindestanzahl von Seiten darstellt, die in einen freien Block
während
der Abnutzungsausgleichung kopiert werden können: (NPcopy +1) × (NBtot-1) > (NPb × NBpred),
wobei NBtot die Gesamtzahl von Blöcken des Speichers 204 ist
(z. B. NBtot = 64 für
ein 64 KB Speichersegment mit Blöcken
von 1 KB), NPb ist die Zahl von Seiten in einem Block (z. B. NPb
= 8 für
eine 8 Seiten pro Block Architektur), und NBpred ist die Maximalzahl von
Blockfressern, die in den Speicher 204 verschoben werden
können.
NBpred ist dem Anwendungsnutzer allgemein bekannt. Mit dieser Randbedingung kann
die Zeit für
die Abnutzungsausgleichungsoperation reduziert werden, ohne die
durch die Abnutzungsausgleichungsoperation gelieferte Ausdauerkapazität zu beeinträchtigen.
-
Es
wird nun mit dem vorigen Beispiel fortgefahren. Durch Erhöhen des
Speicherblockzeigers auf n + 3 enthält der Speiche4rblock B3 710 sowohl
eine oder mehrere geschriebene und gültige Seiten 714 als
auch eine oder mehrere geschriebene und ungültige Seiten 716.
-
Die
gültigen
Seiten des Speicherblocks n + i werden in den Speicherblock n +
1 kopiert (810). Zum Beispiel werden die Speicherseiten 714 des
Blocks B3 710 in den Block B1 706 kopiert.
-
Wenn
der Zeiger auf den Speicherblock n + i erhöht wurde (z. B. i ist größer als
2) (812), dann wird eine Zahl von Seiten des Blocks n +
2 in den Block n + 1 kopiert (814). In diesem Beispiel
ist die Zahl der Seiten des Blocks n + 2, die in den Block n + 1
kopiert werden, gleich NPcopy minus der Zahl von gültigen Seiten
des Blocks n + i. Der Prozess 800 berechnet die Zahl der
Seiten pro Speicherblock, vermindert diese Zahl um eins, und vermindert
diesen Wert des Weiteren um die Zahl der Seiten, die von dem Speicherblock
n + i kopiert wurden. Zum Beispiel wurden eine oder mehrere Seiten 720 des
Blocks B2 708 in den Block B1 706 kopiert, so
dass der Block B1 706, wie in der Spur 722 gezeigt,
eine gelöschte Seite 724 enthält.
-
Der
Speicherblock n + i wird gelöscht
(816). In manchen Implementierungen kann die Abfallsammeleinheit 310 (wie
in 3 gezeigt) Seiten zwischen Speicherblöcken verschieben
und ungültige Speicherblöcke löschen. Der
Prozess 800 wird fortgesetzt, indem der Speicherblockzeiger
n erhöht wird,
um auf den Speicherblock n + 1 zu zeigen. Wie in 7 gezeigt,
kann der Speicherblockzeiger n anfänglich z. B. auf den Block
B0 704 zeigen, wie dies in der Spur 702 gezeigt
ist, und nach dem Löschen des
Blocks B3 710 kann der Speicherblockzeiger n erhöht werden,
um auf den Block B1 706 zu zeigen, wie dies in der Spur 726 gezeigt
ist. Der Prozess 800 fährt
fort, die Seiten des Speicherblocks n + 1 (z. B. die leere Seite 724 innerhalb
des Blocks B1 706) zu füllen,
bis der Speicherblock n + 1 vollständig geschrieben ist.
-
9 ist
ein Flussdiagramm, das einen Beispielprozess 900 zur Erkennung
von Fresser-Software-Objekten
innerhalb eines nicht-flüchtigen
Hauptspeichersegments und zur Verschiebung der Fresser in ein hochausdauerndes,
nicht-flüchtiges
Speichersegment illustriert. Der Prozess 900 kann z. B.
innerhalb des Mikrocontrollers 100 verwendet werden, der in 1 beschrieben
wurde.
-
Der
Prozess 900 beginnt mit dem Speichern einer Menge von Software-Objekten
in einem ersten Segment des nicht-flüchtigen Speichers (902).
Die Software-Objekte können
z. B. Programmanweisungen, Datendateien, Betriebssysteminformation, und/oder
virtuellen Maschinencode enthalten. Unterschiedliche Software-Objekte
können
unterschiedliche Anforderungen haben. Zum Beispiel können manche
Software-Objekte, wie z. B. Programmanweisungen, im Allgemeinen
statisch sein, aber schnelle Zugriffszeiten erfordern. Andere Software-Objekte,
wie z. B. Dateizuordnungstabellen (FAT) eines Dateisystems können häufige Aktualisierungen erfodern.
Das erste Segment des nicht-flüchtigen Speichers
kann z. B. das nicht-flüchtige
Hauptspeichersegment 202 sein, das in 2 beschrieben wurde.
-
Eine
Untermenge von Software-Objekten wird identifiziert, die eine Ausdaueranforderung
haben, die die Ausdauergrenze des nicht-flüchtigen Speichers überschreitet
(904). In manchen Implementierungen erkennt ein Hardware-
oder Software-Prozess, wie z. B. die Fressererkennungseinheit 308 (wie
in 3 beschrieben), Software-Objekte, die eine hohe
Aktualisierungsfrequenz haben. Zum Beispiel kann die Fressererkennungseinheit 308 die Zahl
der Löschvorgänge, die
auf einem Block des nicht-flüchtigen
Speichers vorgenommen wurden, mit der Ausdauergrenze des nicht-flüchtigen
Speichers vergleichen. Wenn ein Block des nicht-flüchtigen
Speichers sich einem mit der Ausdauer des nicht-flüchtigen
Speichers verbundenen Grenzwert annähert, kann die Fressererkennungseinheit 308 z. B.
erkennen, dass das Software-Objekt eine hohe Ausdaueranforderung
hat.
-
Die
Untermenge von Software-Objekten wird in einem zweiten Segment des
nicht-flüchtigen
Speichers gespeichert (906). In manchen Implementierungen
ist das zweite Segment des nicht-flüchtigen Speichers innerhalb
einer logischen Partition des Speichers, der auch das erste Segment
des nicht-flüchtigen
Speichers enthält,
implementiert. In anderen Implementierungen ist das zweite Segment des
nicht-flüchtigen
Speichers innerhalb einer zweiten Speichervorrichtung (z. B. einem
physikalisch getrennten eingebetteten Speicherbereich) implementiert.
Das zweite Segment des nicht-flüchtigen
Speichers kann z. B. das hochausdauernde, nicht-flüchtige Speichersegment 204 sein,
das in 2 beschrieben wurde. Ein als Fresser identifizierte
Software-Objekt kann z. B. durch die Fresserverwal tungseinheit 312 (wie
in 3 beschrieben) in das zweite Segment des nicht-flüchtigen
Speichers verschoben werden. Eine Zuordnungstabelle, wie die Zuordnungstabelle 314,
kann mit der neuen Adressstelle des Software-Objekts aktualisiert
werden.
-
Abnutzungsausgleichung
wird auf dem zweiten Segment des nicht-flüchtigen Speichers ausgeführt (908).
In manchen Implementierungen können die
Software-Objekte innerhalb des zweiten Segments des nicht-flüchtigen
Speichers über
die Speicherstellen rotiert werden, so dass die durchschnittliche
Zahl von Löschvorgängen pro
Speicherstelle verringert wird. Zum Beispiel kann das zweite Segment
des nicht-flüchtigen
Speichers viel mehr Speicherplatz enthalten, als erforderlich ist,
um alle Software-Fresserobjekte zu speichern. Obwohl die Ausdauergrenze
des zweiten Segments des nicht-flüchtigen Speichers der Ausdauergrenze
des ersten Segments des nicht-flüchtigen
Speichers entsprechen kann, kann die wahrgenommene Ausdauer des
zweiten Segments des nicht-flüchtigen
Speichers viel größer sein.
In manchen Implementierungen, wenn die im Zusammenhang mit 4–8 beschriebenen Abnutzungsausgleichungsalgorithmen
auf das zweite nicht-flüchtige
Speichersegment angewendet werden. Gleichzeitig kann das erste Segment
des nicht-flüchtigen
Speichers ohne Abnutzungsausgleichungsalgorithmen implementiert
werden.
-
Auch
wenn diese Druckschrift viele konkrete Implementierungsdetails enthält, sollten
diese nicht als beschränkend
für den
Umfang des beanspruchten Gegenstands interpretiert werden, sondern
als Beschreibung von Merkmalen konkreter Ausführungsformen. Bestimmte Merkmale,
die in dieser Beschreibung im Zusammenhang mit getrennten Ausführungsformen
beschrieben wurden, können
auch in Kombination in einer einzigen Ausführungsform implementiert werden.
Umgekehrt können
verschiedene Merkmale, die im Zusammenhang mit einer einzelnen Ausführungsform
beschrieben wurden, auch in mehreren Ausführungsformen getrennt oder
in jeder geeigneten Kombination miteinander implementiert werden.
Obwohl darüber
hinaus oben stehend einige Merkmale als in bestimmten Kombinationen zusammenwirkend
beschrieben und sogar anfänglich
so beansprucht wurden, können
ein oder mehrere Merkmale aus einer beanspruchten Kombination in
manchen Fallen von der Kombination ausgeschlossen werden, und die
beanspruchte Kombination kann auf eine Unterkombination oder Abwandlung einer
Unterkombination gerichtet werden.
-
Eine
Zahl von Implementierungen wurde beschrieben. Nichtsdestotrotz versteht
sich, dass verschiedene Abwandlungen vorgenommen werden können. Zum
Beispiel können
Schritte eines oder mehrerer Prozesse kombiniert, gelöscht, abgewandelt
oder ergänzt
werden, um weitere Prozesse zu bilden. Als weiteres Beispiel erfordern
die in den Figuren dargestellten Prozessschritte nicht die konkret gezeigte
Reihenfolge zur Erzielung vorteilhafter Ergebnisse. Zusätzlich können andere
Schritte zur Verfügung
gestellt werden, oder Schritte können
in den beschriebenen Prozessen ausgelassen werden und anderes Material
kann zu den beschriebenen Prozessen hinzugefügt oder von ihnen weggenommen werden.
Demzufolge liegen auch andere Implementierungen innerhalb des Umfangs
der folgenden Ansprüche.